; B3CP-2.INS - Interfacer 3/4 insert for BYE3 - 07/24/85 ; ; 2651 I/O with internal baudrage generator ; ; For: CompuPro Interfacer 3 ; CompuPro Interfacer 4 ; CompuPro System Support 1 ; ; Note: This is an insert, not an overlay. ; ; ; The Interfacer board uses the 2651 I/O. This has a peculiarity that ; prevents its proper use if you hook pin 8 (DCD) of the modem to pin 8 ; (DCD) of the Interfacer board. You should instead hook pin 8 of the ; modem (DCD) to (DSR) on the Interfacer board. ; ; Note for inteligent modem users: ; ------------------------------- ; In the past people using the intelligent modems and the ; Interfacer board have complained they had to put SW6 up to ; use with BYE3 but then had to put it down to use with MEX, ; MDM7 or other autodial modem programs. With the configur- ; ation below, SW6 can be left in whatever position the user ; prefers (up, for BYE3) and this will have no effect on the ; normal use of MEX or MDM7. ; ; Using factory settings, a cable should be made like this: ; ; TXD 2 --> 3 RXD received data ; RXD 3 <-- 2 TXD tranmitted data ; SG 7 --- 7 SG signal ground ; DCD 8 --> 20 DSR data set ready (carrier) ; DTR 20 <-- 6 DTR data terminal ready ; ; = = = = = = = = = = = = = = = = = = ; ; 07/25/85 Updated for BYE337 - removed ANI 127's - Paul Traina ; 10/04/82 Original version - Paul Traina ; ; = = = = = = = = = = = = = = = = = = ; INTER4 EQU YES ; Yes for Compupro Interfacer 3 or 4 ; No for Compupro System Support 1 ; ; The following define the port address and usart number to use. ; IF INTER4 BASEP EQU 010H ; Base port for Interfacer 3/4 boards CHIP EQU 6 ; Chip number to use ENDIF ; INTER4 ; IF NOT INTER4 BASEP EQU 05CH ; Base port for System Support 1 ENDIF ; NOT INTER4 ; ;----------------------------------------------------------------------- ; ; Modem port equates ; DPORT EQU BASEP ; Modem data port SPORT EQU BASEP+1 ; Modem status port MPORT EQU BASEP+2 ; Modem mode select port CPORT EQU BASEP+3 ; Modem control port ; IF INTER4 UPORT EQU BASEP+7 ; Modem chip select port ENDIF ; INTER4 ; ; Status port equates ; TBMT EQU 00000001B ; Transmit buffer empty DAV EQU 00000010B ; Data available DSCHG EQU 00000100B ; Change in DSR or DCD or shift reg empty PE EQU 00001000B ; Parity error OE EQU 00010000B ; Overrun error FE EQU 00100000B ; Framing error DCD EQU 01000000B ; Data carrier detect line (not used) DSR EQU 10000000B ; Data carrier detect (this is really DSR) ; ; Mode port equates ; B8NO1 EQU 01001110B ; 8 data bits, no parity, 1 stop bit BBASE EQU 00110000B ; Transmit & Receive clocks internal BX300 EQU BBASE+5 ; 300 baud BX1200 EQU BBASE+7 ; 1200 baud BX2400 EQU BBASE+10 ; 2400 baud ; ; Control port equates ; CBASE EQU 00000101B ; Normal mode, no error reset, xmit&rcv on DTR EQU 00000010B ; Data terminal ready RTS EQU 00100000B ; Request to send line ; ;----------------------------------------------------------------------- ; ; See if we still have a carrier - if not, return with the zero flag set ; MDCARCK: IF INTER4 MVI A,CHIP ; Select proper chip OUT UPORT ENDIF ; IN SPORT ; Get status ANI DSR ; Check DSR pin for carrier RZ ORI 255 RET ; ; Disconnect and wait for an incoming call ; MDINIT: IF INTER4 MVI A,CHIP ; Select proper chip OUT UPORT ENDIF ; MVI A,CBASE ; DTR, RTS off to disconnect phone OUT CPORT ; PUSH B MVI B,20 ; Wait 2 seconds OFFTI: CALL DELAY DCR B JNZ OFFTI POP B ; MVI A,CBASE+DTR+RTS ; Turn DTR & RTS back on OUT CPORT ; IF IMODEM CALL IMINIT ; Initialize intelligent modem ENDIF ; IMODEM ; RET ; ; Input a character from the modem port ; MDINP: IF INTER4 MVI A,CHIP ; Select proper chip OUT UPORT ENDIF ; INTER4 ; IN DPORT ; Get character (do not strip 8th bit) 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 INTER4 MVI A,CHIP ; Select proper chip OUT UPORT ENDIF ; IN SPORT ; Get status ANI DAV ; Check data available bit RZ ORI 255 ; We got something RET ; ; Send a character to the modem ; MDOUTP: IF INTER4 PUSH PSW MVI A,CHIP ; Select proper chip OUT UPORT POP PSW ENDIF ; OUT DPORT ; Send it RET ; ; See if the output is ready for another character ; MDOUTST: IF INTER4 MVI A,CHIP ; Select proper chip OUT UPORT ENDIF ; IN SPORT ; Get status ANI TBMT ; Check transmit ready bit RZ ORI 255 ; Make sure we know it's ok RET ; ; Reinitialize the modem and hang up the phone by dropping DTR and ; leaving it inactive. ; MDQUIT: IF INTER4 MVI A,CHIP ; Select proper chip OUT UPORT ENDIF ; IF IMODEM CALL IMQUIT ; Tell modem to shut down ENDIF ; ; Called by the main program after caller types BYE ; MDSTOP: IF INTER4 MVI A,CHIP OUT UPORT ENDIF ; MVI A,CBASE ; Turn off DTR & RTS, modem will quit OUT CPORT RET ; ; The following routine sets the baudrate. BYE3 asks for the maximum ; speed you have available. ; SET300: CALL BBAUD ; Set word length MVI A,BX300 ; Set baud rate JMP EBAUD ; SET1200:CALL BBAUD ; Set word length MVI A,BX1200 ; Set baud rate JMP EBAUD ; SET2400:CALL BBAUD ; Set word length MVI A,BX2400 ; Set baud rate JMP EBAUD ; BBAUD: IF INTER4 MVI A,CHIP ; Select proper chip OUT UPORT ENDIF ; IN CPORT ; Make sure we've flip/flopped mode port MVI A,B8NO1 ; 1 stop, no parity 8 bits OUT MPORT RET ; EBAUD: OUT MPORT ; Send baud rate XRA A RET ; ; end ;----------------------------------------------------------------