; B3OS-2.INS - Osborne OS-1 insert for BYE3 - 07/30/85 ; ; 6850 ACIA ; ; Note: This is an insert, not an overlay. If your OS-1 does not have ; have the hardware mod to support DTR, (shown below) then set ; the NODTR option in BYE3 to "YES". Also set: ; ; IMODEM EQU YES ; ; ; MAIN LOGIC BOARD TRACE CUTS: ; -------------------------- ; Solder Side: ; ; Cut trace running from pin 5 to pin 6 on inner row of pads ; used in mounting the RS-232 female serial connector at the front ; of main logic board. Pin 1 is pad with wide ground trace. ; ; Component side: ; ; Cut trace from pin 5 of UC4 (6850) to R20 (10K ohm). ; Cut trace that runs between pins 3 and 4 of UC4 (6850). ; ; ; PART ADDITIONS: ; -------------- ; Solder side: ; ; Add jumper from pin 1 of UE3 (MC1458) to pin 5 of inner row of ; RS-232 serial port pads. Pin 1 has wide ground trace. ; Add jumper from pin 3 to pin 5 of UE3 (MC1458). ; Add jumper from pin 10 of UD4 (LM3400) to pin 5 of UC1 (74LS08). ; Add jumper from pin 4 of UC1 (74LS08) to pin 1 of UE20 (74LS04). ; Add jumper from pin 6 of UC1 (74LS08) to pin 5 of UA11 (74S04). ; Add jumper from pin 6 of UA11 (74S04) to pin 19 of UC15 (6821). ; ; Component side or solder side (whichever side you feel more ; comfortable using for mounting components): ; ; Add 10K ohm resistor from Vcc (+5 volts) to pin 2 of UE3 (MC1458). ; Add 220 ohm resistor from pin 5 of UC4 (6850) to pin 2 of UE3 (MC1458). ; Add 1k ohm resistor from pin 19 of UC15 (6821) to Vcc (+5 volts). ; ; NEW RS-232 MODEM CABLE: ; ---------------------- ; ; OCC-1 MODEM ; ; 2 RXD 3 RXD ; 3 TXD 2 TXD ; 4 DCD (new function) 8 DCD ; 5 DTR (new function) 20 DTR ; 7 GND 7 GND ; ; = = = = = = = = = = = = = = = = = = ; ; 07/30/85 Restored to original format - pst ; 07/17/85 Revised for use with BYE3 - Kevin Murphy ; ; = = = = = = = = = = = = = = = = = = ; HARDMOD EQU YES ; YES, if hardware mods have been done to Osborne ; O-1 to support DTR and modified DCD. ; NO, if the O-1 is standard (no mods). If NO ; you must be using a Hayes Compatible modem and ; set NODTR to yes in the main equates. ; STATM EQU 02A00H ; Status memory location DATA EQU 02A01H ; Data memory location CDATA EQU 02C02H ; Video PIA data register CSTAT EQU 02C03H ; Video PIA status register ; IF HARDMOD DCD EQU 40H ; Data carrier detect ENDIF ; IF NOT HARDMOD DCD EQU 04H ; Data carrier detect ENDIF ; RDAV EQU 11111110B ; Reversed DAV DAV EQU 00000001B ; Normal DAV ; RTBMT EQU 11111101B ; Reversed TBMT TBMT EQU 00000010B ; Normal TBMT ; BD300 EQU 22 ; 300 baud BD1200 EQU 21 ; 1200 baud ; ;----------------------------------------------------------------------- ; ; See if we still have a carrier - if not, return with the zero flag set ; MDCARCK: IF HARDMOD DI ; Disable interrupts OUT 0 LDA CSTAT ; Read video PIA status register OUT 1 EI ENDIF ; IF NOT HARDMOD CALL BNKINS ; Get modem status PUSH PSW ; Save it ANI DCD ; If carrier is then reset DCD CNZ MDINP POP PSW ENDIF ; CMA ; Comp register, bit set with LOSS of carrier ANI DCD ; Mask out everything but carrier LOSS bit (cb2) RZ ORI 255 RET ; ; Disconnect and wait for an incoming call ; MDINIT: MVI A,57H ; Hangup if we can CALL BNKOUTS ; DI OUT 0 LDA CDATA ; Read video PIA data register OUT 1 ; Reset for future loss of carrier EI ; PUSH B MVI B,20 ; Wait 2 seconds for modem to hangup OFFTI: CALL DELAY DCR B JNZ OFFTI ; LDA WRKBAUD ; Modem port reset (enable DTR line) ANI 0BFH ; Enable DTR CALL BNKOUTS ; IF IMODEM CALL IMINIT ; Initialize intelligent modem ENDIF ; DI OUT 0 LDA CDATA ; Read video PIA data register OUT 1 ; Reset for future loss of carrier EI ; RET ; ; Input a character from the modem port ; MDINP: CALL BNKIND ; Input data from the outside PUSH PSW ; Save the character LDA SSTAT ; Load mirror ACIA status register ANI RDAV ; Mask the DAV bit (reset DAV bit in mirror ; status register) STA SSTAT ; Save our mutant status register to ram POP PSW ; Get the character back RET ; Return to sender ; ; Check the status to see if a character is available. If not, return ; with the zero flag set. If yes, use 0FFH to clear the flag. ; MDINST: PUSH B LDA SSTAT ; Load ACIA mirror status register ; From last status read operation MOV B,A CALL BNKINS ; Input present ACIA status register ORA B ; Perform an OR operation on both former ; as well as present acia registers STA SSTAT ; Save both ACIA register states POP B ANI DAV ; Mask DAV bit RZ ORI 255 RET ; ; Send a character to the modem ; MDOUTP: CALL BNKOUTD ; Send the data character modem LDA SSTAT ; Load the clone register ANI RTBMT ; Mask the TBMT bit STA SSTAT ; Save the doppelganger register RET ; Return to sender ; ; See if the output is ready for another character ; MDOUTST:PUSH B CALL BNKINS ; Get present ACIA status register MOV B,A ; Move it to 'B' register LDA SSTAT ; Get mirror ACIA status register ORA B ; Perform an OR on present and mirror registers POP B STA SSTAT ; Save the past and present status registers ANI TBMT RZ ORI 255 RET ; ; Called by the main program after caller types BYE ; MDQUIT: IF IMODEM CALL IMQUIT ENDIF ; ; Called by the main program after caller types BYE ; MDSTOP: MVI A,57H CALL BNKOUTS ; hangup modem RET ; BNKINS: DI ; Disable interrupts OUT 0 ; Switch banks to shadow memory bank LDA STATM ; Read status register ram location OUT 1 ; Switch banks back to progaram memory bank EI ; Reenable interrupts RET ; Go home ; BNKIND: DI ; Disable interrupts OUT 0 ; Switch banks to shadow memory bank LDA DATA ; Read data register RAM location OUT 1 ; Switch banks back to program memory bank EI ; Reenable interrupts RET ; Go home ; BNKOUTS:DI ; Disable interrupts OUT 0 ; Switch banks to shadow memory bank STA STATM ; Send data to control register ram location OUT 1 ; Switch banks to program memory bank EI ; Reenable interrupts RET ; Go home ; BNKOUTD:DI ; Disable interrupts OUT 0 ; Switch banks to shadow memory bank STA DATA ; Send data to control register ram location OUT 1 ; Switch banks to program memory bank EI ; Reenable interrupts RET ; Go home ; ; The following routine sets the baudrate. BYE3 asks for the maximum ; speed you have available. ; SET300: MVI A,BD300 ; Set 300 baud JMP SETBAUD ; SET1200:MVI A,BD1200 ; Set 1200 baud ; SETBAUD:CALL BNKOUTS STA WRKBAUD ; Save incoming baud rate XRA A ; Show baudrate was ok RET ; SET2400:ORI 255 ; Osborne can't handle 2400 baud RET ; ;---------------------------------------------------------------- ; WRKBAUD:DB 16H ; [*] OCC1 ++ SSTAT: DB 0 ; RAM flag location for ACIA status register. ; This is due to ACIA not keeping track of its ; status register when data is going in both ; directions i.e., data being sent out during ; a display listing, and the remote user wants ; to suspend screen display or abort listing ; by generating a ^S or ^K or any other con- ; trol character. ; ; end ;-----------------------------------------------------------------------