home *** CD-ROM | disk | FTP | other *** search
- ;***********************************************************************
- ;
- ; MBYE (Modular 'BYE')
- ; National Semiconductor 2651 UART I/O routines
- ; v1.0 (02/07/84) by Kim Levitt
- ; (For CompuPro Interfacer 3, Interfacer 4 & System Support 1)
- ;
- ; These routines will allow the easy patching of BYE3 for any type of
- ; modem/serial port combination. Certain routines must return status
- ; flags, so please be careful to set the flags as directed.
- ;
- ; This version is for the CompuPro Interfacer 3 or 4 that is connected
- ; to an external modem. Note: I use DSR to tell me if the phone is
- ; ringing and DCD tells me when I have carrier.
- ;
- ; This means, a null-modem cable should be set up as follows:
- ;
- ; Modem Interfacer 3/4 Function
- ; 2 3 TXD -> RXD
- ; 3 2 RXD <- TXD
- ; 4-\ RTS -\ (jumpered)
- ; 5-/ CTS -/
- ; 8 8 DCD -> DCD
- ; 7 7 Ground -- Ground
- ; 22 20 RI -> DSR
- ; 20 6 DTR <- DSR
- ;
- ;-----------------------------------------------------------------------
- ;
- ; 02/07/84 Altered and renamed to work with MBYE - Kim Levitt
- ; 11/27/83 Altered and renamed to work with BYE3 - Irv Hoff
- ; 08/04/83 Added MDQUIT routine which will de-
- ; initalize modem port. - Paul Traina
- ; 07/14/83 Added support for Rixon/US Robotics/Hayes
- ; Smartmodem. Added support for CompuPro
- ; System Support-1. - Paul Traina
- ; 10/04/82 Routines added, no fuss, mess, or frills. - Paul Traina
- ;
- ;***********************************************************************
- ;
- ; Define which I/O card you are using here
- ;
- GBCINT3:EQU YES ;yes= CompuPro Interfacer 3 or 4
- GBCSS1: EQU NO ;yes= CompuPro System Support 1
- ;
- ;
- ; The following define the port address and USART number to use.
- ;
- IF GBCINT3
- BASEP: EQU 010H ;Base port for I3/4 boards
- USART: EQU 6 ;USART number to use
- ENDIF
- ;
- IF GBCSS1
- BASEP: EQU 05CH ;Base port for System Support 1
- ENDIF
- ;
- ;***********************************************************************
- ;
- ; 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 GBCINT3
- UPORT: EQU BASEP+7 ;Modem USART select port
- ENDIF ;GBCINT3
- ;
- ;
- ; Modem status port equates
- ;
- TBMT: EQU 00000001B ;Transmit buffer empty
- DAV: EQU 00000010B ;Data available
- PE: EQU 00001000B ;Parity error
- OE: EQU 00010000B ;Overrun error
- FE: EQU 00100000B ;Framing error
- DCD: EQU 01000000B ;Carrier detect
- RDET: EQU 10000000B ;Ring detect (tied to I3 DSR line)
- ;
- ;
- ;Mode port equates
- ;
- E8NO1: EQU 01001110B ;8 data bits, no parity, 1 stop bit
- EBASE: EQU 01110000B ;Mode register 2 base
- B110: EQU EBASE+2 ;110 bps
- B300: EQU EBASE+5 ;300 bps
- B600: EQU EBASE+6 ;600 bps (not implemented)
- B1200: EQU EBASE+7 ;1200 bps
- ;
- ;
- ; Command port equates
- ;
- CBASE: EQU 00000101B ;Command base
- RESET: EQU 00010000B ;Reset errors
- DTR: EQU 00000010B ;Turn on DTR
- RTS: EQU 00100000B ;Turn on RTS
- ;
- ;***********************************************************************
- ;
- ; If any of your routines zaps anything other than the Accumulator, then
- ; you must preserve all other registers.
- ;
- ;***********************************************************************
- ;
- ; This routine should turn off everything on the modem, but set baud-
- ; rate to 300 bps, and get it ready to wait for a ring. (Also hang it
- ; up)
- ;
- MDINIT:
- IF GBCINT3
- MVI A,USART ;Select proper chip
- OUT UPORT
- ENDIF
- CALL SET300 ;Set 300 bps
- MVI A,CBASE ;Xmit on, Recv on, DTR off, RTS off
- OUT CPORT
- RET
- ;
- ; The following is a routine to determine if there is a character wait-
- ; ing to be received. If none are there, the Zero flag will be set,
- ; otherwise, 255 will be returned in register A. Remember that the
- ; system will like you a little more if you also mask out framing,
- ; parity, and overrun errors.
- ;
- MDINST: IF GBCINT3
- MVI A,USART ;Select proper chip
- OUT UPORT
- ENDIF
- ;
- IN SPORT ;read port
- ANI DAV ;mask crap
- RZ ;nope, nothing there
- ORI 0FFH ;we got something...
- RET
- ;
- ; The following is a routine to determine if the transmit buffer is
- ; empty. If it is empty, it will return with the Zero flag clear. If
- ; the transmitter is busy, then it will return with the Zero flag set.
- ;
- MDOUTST: IF GBCINT3
- MVI A,USART ;Select proper chip
- OUT UPORT
- ENDIF
- ;
- IN SPORT ;read port
- ANI TBMT ;mask crap
- RET
- ;
- ; The following is a routine that will check to make sure we still have
- ; carrier. If there is no carrier, it will return with the Zero flag
- ; set.
- ;
- MDCARCK: IF GBCINT3
- MVI A,USART ;Select proper chip
- OUT UPORT
- ENDIF
- ;
- IN SPORT ;read port
- ANI DCD ;yes, that's right, DSR...
- RET
- ;
- ; The following routine will check to see if the phone is ringing, if
- ; it isn't, it will return with Zero set, otherwise Zero will be cleared.
- ;
- MDRING: IF GBCINT3
- MVI A,USART ;Select proper chip
- OUT UPORT
- ENDIF
- ;
- IN SPORT ;read status
- ANI RDET ;yes, use DSR, and nothing else...sigh
- RET
- ;
- ; The following is a routine that will input one character from the
- ; modem port. If there is nothing there, it will return garbage... so
- ; use the MDINST routine first.
- ;
- MDINP: IF GBCINT3
- MVI A,USART ;Select proper chip
- OUT UPORT
- ENDIF
- ;
- IN DPORT ;get character
- ANI 7FH ;strip parity and other garbage
- RET
- ;
- ; The following is a routine that will output one character in register
- ; A to the modem. REMEMBER, that is register A, not register C.
- ;
- ; **** Use MDOUTST first to see if buffer is empty ****
- ;
- MDOUTP: IF GBCINT3
- PUSH PSW
- MVI A,USART ;Select proper chip
- OUT UPORT
- POP PSW
- ENDIF
- ;
- OUT DPORT ;send it
- RET
- ;
- ; The following routine will make the modem answer the phone.
- ;
- MDANSW: CALL SET300 ;set modem for 300 baud, selects chip
- MVI A,CBASE+DTR+RTS ;turn on DTR and RTS which will allow
- OUT CPORT ;..the external modem to answer on the
- RET ;..next ring.
- ;
- ; These next routines set the proper baud rates for the modem. If you
- ; do not support the particular rate, then simply put the pointer for
- ; that rate in front of the SETINV routine. If the baud rate change
- ; was successful, make SURE the Zero flag is set.
- ;
- ; The following routine returns a 255 because we were not able to set to
- ; the proper baud rate because either the serial port or the modem can't
- ; handle it.
- ;
- SET110:
- SET450: ;2651 cannot handle 450 baud
- SET600: ;J1259 is not very reliable at 600bps
- SET710: ;only PMMI's are crazy enough to do 710
- ;
- SETINV: ORI 0FFH ;make sure the Zero flag isn't set
- RET
- ;
- ; Set up for 110 bps
- ;
- SET110: IF GBCINT3
- MVI A,USART ;Select proper chip
- OUT UPORT
- ENDIF
-
- MVI A,E8NO1+128 ;set default formats EXCEPT 2 STOP BITS
- OUT MPORT
- MVI A,B110
- OUT MPORT
- XRA A
- RET
- ;
- ; Set up for 300 bps
- ;
- SET300: IF GBCINT3
- MVI A,USART ;Select proper chip
- OUT UPORT
- ENDIF
- ;
- MVI A,E8NO1 ;set default formats
- OUT MPORT
- MVI A,B300 ;set baud rate
- OUT MPORT
- XRA A
- RET
- ;
- ; Set up for 600 bps (some modems can handle 600 bps, if yours can, then
- ; delete the previous pointer and un-comment this routine.
- ;
- SET600: IF GBCINT3
- MVI A,USART ;Select proper chip
- OUT UPORT
- ENDIF
- ;
- MVI A,E8NO1 ;set default formats
- OUT MPORT
- MVI A,B600 ;set baud rate
- OUT MPORT
- XRA A
- RET
- ;
- ; Set up for 1200 bps
- ;
- SET1200: IF GBCINT3
- MVI A,USART ;Select proper chip
- OUT UPORT
- ENDIF
- ;
- MVI A,E8NO1 ;set default formats
- OUT MPORT
- MVI A,B1200 ;set baud rate
- OUT MPORT
- XRA A
- RET
- ;
- ; Ok, that's all of the modem dependent routines that MBYE uses, so if
- ; you patch this file into your copy of MBYE, then it should work out
- ; well.
- ;
- ;**********************************************************************
- ;