; NUTV-1.INS - NUBYE insert for TeleVideo TS-802, 803 & 804 - 04/21/86 ; ; TV802 uses the Z80 SIO & CTC timer (3.6864 MHz) ; TV803 uses Mostek 8301 & CTC timer (3.6864 MHz) ; TV804 uses the Z80 SIO & CTC timer (3.9936 MHz) ; ; Note: This is an insert, not an overlay. ; ; ======== ; ; 04/21/86 Modified for NUBYE ; 01/05/86 Added TV804 capability - Irv Hoff ; 01/02/86 Added TV803 capability - Tanny O'Haley ; 07/17/85 Written for TV802 and BYE5 - Irv Hoff ; ; ======== ; ; Select one of the following choices for your computer. (Gets the ; YES/NO values from the main NUBYE program.) ; TV802 EQU NO TV803 EQU NO TV804 EQU YES ; ; Modem port equates ; IF TV802 PORT EQU 20H ; Modem data port MDCTL1 EQU PORT+2 ; Modem status port BDPORT EQU 8 ; CTC port for baud rate ENDIF ; TV802 ; IF TV803 PORT EQU 2FH ; Modem data port MDCTL1 EQU PORT-1 ; Modem send status port MDCTL2 EQU PORT-2 ; Modem receive status port REGINT EQU 27H ; Interrupt register port SPSTAT EQU 21H ; Parameter status register BDPORT EQU 2BH ; CTC port for baud rate ENDIF ; TV803 ; IF TV804 PORT EQU 1EH ; Modem data ort MDCTL1 EQU PORT+1 ; Modem status port BDPORT EQU 0EH ; CTC port for baud rate ENDIF ; TV804 ; ; Baudrate table ; IF TV802 BD300 EQU 4780H ; 38400/300 converted to hex value BD1200 EQU 4720H ; 38400/1200 converted to hex value BD2400 EQU 4710H ; 38400/2400 converted to hex value BD9600 EQU 4704H ; 38400/9600 converted to hex value ENDIF ; TV802 ; IF TV803 BD300 EQU 4720H ; 9600/300 converted to hex value BD1200 EQU 4708H ; 9600/1200 converted to hex value BD2400 EQU 4704H ; 9600/2400 converted to hex value BD9600 EQU 4701H ; 9600/9600 converted to hex value ENDIF ; TV803 ; IF TV804 BD300 EQU 734H ; 7800/300 converted to hex value BD1200 EQU 4768H ; 124800/1200 converted to hex value BD2400 EQU 4734H ; 124800/2400 converted to hex value BD9600 EQU 470DH ; 124800/9600 converted to hex value ENDIF ; TV804 ; ; See if we still have a carrier - if not, return with the zero flag set ; Reg A is zero if no carrier, non-zero if carrier ; MDCARCK: IF TV802 OR TV804 MVI A,10H ; Reset status OUT MDCTL1 IN MDCTL1 ; Get status ANI 8 ; Check for carrier detect ENDIF ; TV802 OR TV804 ; IF TV803 IN SPSTAT ; Read status register ANI 1 ; Check for carrier detect XRI 1 ; Ready if bit 0 = 0 ENDIF ; TV803 ; RET ; ; Disconnect and wait for an incoming call ; MDINIT: IF TV802 OR TV804 MVI A,18H ; Reset channel OUT MDCTL1 MVI A,4 ; Setup to write register 4 OUT MDCTL1 MVI A,44H ; 1 stop, 8 bits, no parity OUT MDCTL1 MVI A,1 ; Setup to write register 1 OUT MDCTL1 MVI A,0 OUT MDCTL1 MVI A,5 ; Setup to write register 5 OUT MDCTL1 MVI A,68H ; Clear DTR causing hangup OUT MDCTL1 PUSH B ; In case it is being used elsewhere ; OFFTI: CALL DELAY ; 0.1 second delay DCR B JNZ OFFTI ; Keep looping until finished POP B ; Restore BC MVI A,3 ; Setup to write register 3 OUT MDCTL1 MVI A,0C1H ; Initialize receive register OUT MDCTL1 MVI A,5 ; Setup to write register 5 OUT MDCTL1 MVI A,0EAH ; Turn on DTR so modem can answer phone OUT MDCTL1 ENDIF ; TV802 OR TV804 ; IF TV803 XRA A OUT REGINT ; Stop interrupts MVI A,20H ; Drop DTR OUT SPSTAT MVI B,20 ; 2 seconds delay to drop any carrier PUSH B ; In case it is being used elsewhere ; OFFTI: CALL DELAY ; 0.1 second delay DCR B JNZ OFFTI ; Keep looping till finished POP B ; Restore BC XRA A ; Turn on DTR so modem can answer phone OUT SPSTAT ENDIF ; TV803 ; IF IMODEM CALL IMINIT ; Initialize smartmodem ENDIF ; IMODEM ; RET ; ; Input a character from the modem port ; MDINP: IN PORT ; Get character RET ; ; 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: IF TV802 OR TV804 IN MDCTL1 ; Get status ANI 1 ; Check receive ready bit RZ ; Return if none ORI 0FFH ; Otherwise, set the flags ENDIF ; TV802 OR TV804 ; IF TV803 IN MDCTL2 ; Get input status ANI 80H ; Check receive ready bit ENDIF ; TV803 ; RET ; ; Send a character to the modem ; MDOUTP: OUT PORT ; Send it RET ; ; See if the output is ready for another character ; MDOUTST:IN MDCTL1 ; Read port ; IF TV802 OR TV804 ANI 4 ; Check transmit ready bit ENDIF ; TV802 OR TV804 ; IF TV803 ANI 80H ; Check transmit ready bit ENDIF ; TV803 ; RET ; ; Reinitialize the modem and hang up the phone by dropping DTR and ; leaving it inactive ; MDQUIT: IF IMODEM CALL IMQUIT ; If a smartmodem, tell it to shut down ENDIF ; IMODEM ; ; Called by the main program after caller types BYE ; MDSTOP: IF TV802 OR TV804 MVI A,5 ; Setup to write register 5 OUT MDCTL1 MVI A,68H ; Clear DTR causing shutdown OUT MDCTL1 ENDIF ; TV802 OR TV804 ; IF TV803 MVI A,20H OUT SPSTAT ; Turn DTR off to disconnect ENDIF ; TV803 ; RET ; ; The following routine sets the baudrate. NUBYE asks for the maximum ; speed you have available. ; SETINV: ORI 0FFH ; Make sure the Zero flag is not set RET ; SET300: LXI H,BD300 JMP STBAUD ; SET1200:LXI H,BD1200 JMP STBAUD ; SET2400:LXI H,BD2400 JMP STBAUD ; SET9600:LXI H,BD2400 JMP STBAUD ; STBAUD: MOV A,H ; CTC timer control word OUT BDPORT ; Controls CTC timer/counter MOV A,L ; Baudrate OUT BDPORT RET ; ; end of insert ; -------------