home *** CD-ROM | disk | FTP | other *** search
- ;***********************************************************************
- ;
- ; MBYE (Modular BYE)
- ; D. C. Hayes MicroModem 100 Interface routines
- ; Version 1.6 by Paul Traina
- ;
- ; 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 D.C. Hayes MM100 and 80-103a modem cards. It
- ; is an adaptation of the routines present in BYE version 8.0
- ;
- ;-----------------------------------------------------------------------
- ;
- ; 11/27/83 Altered and renamed to work with BYE3. - Irv Hoff
- ; 08/04/83 Updated to work with ByeII version 1.6 - Paul Traina
- ; 04/16/83 Housekeeping and some code optimization - Paul Traina
- ; 11/04/82 Routines added, no fuss, mess, or frills. - Paul Traina
- ;
- ;-----------------------------------------------------------------------
- ;
- ; The following define the port address and USART number to use.
- ;
- BASEP EQU 80H ;Base port for modem card
- ;
- ;***********************************************************************
- ;
- ; Port equates
- ;
- DPORT: EQU BASEP ;Modem data port
- SPORT: EQU BASEP+1 ;Status port and control port #1
- CPORT2: EQU BASEP+2 ;Control port #2
- ;
- ;
- ; Bit functions
- ;
- DAV: EQU 1 ;Receive register full/data available
- TBMT: EQU 2 ;Transmitt buffer empty
- PE: EQU 4 ;Parity error
- FE: EQU 8 ;Framing error
- OE: EQU 10H ;Overrun error
- CD: EQU 40H ;Carrier detect
- RI: EQU 80H ;NOT ring indicator (low=true)
- ;
- NORM8: EQU 17H ;8 bits, no parity, 1 stop bit
- NORM110:EQU 1FH ;8 bits, no parity, 2 stop bits (for 110 bps)
- ;
- BD300: EQU 83H ;answer mode, 300 bps, answer, turn on carrier
- BD110: EQU 82H ;same as above, but 110 bps
- ;
- ;
- ;***********************************************************************
- ;
- ; 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, (no carrier,
- ; on-hook).
- ;
- MDINIT:
- XRA A ;hangup phone
- OUT CPORT2 ;clear off-hook flag, turn off carrier
- RET
- ;.....
- ;
- ;
- ; The following routine is used to completely shut-down the modem. It
- ; is the same as MDINIT on the MM100.
- ;
- MDQUIT:
- JMP MDINIT ;same as init
- ;.....
- ;
- ;
- ; 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:
- IN SPORT ;get status
- ANI DAV ;mask garbage out
- RZ ;no character found
- 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:
- IN SPORT ;get status
- ANI TBMT ;transmitter ready?
- RET ;return with proper status
- ;.....
- ;
- ;
- ; 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:
- IN SPORT ;read port
- ANI CD ;carrier there?
- 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:
- IN SPORT ;read status
- CMA ;invert flags - NOT-RING becomes ring
- ANI RI ;not ringing?
- 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:
- 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:
- OUT DPORT ;send it
- RET
- ;.....
- ;
- ;
- ; The following routine will make the modem answer the phone.
- ;
- MDANSW:
- CALL SET300 ;set modem for 300 baud & answer phone
- RET
- ;.....
- ;
- ;
- ; These next routines set the proper baud rates for the modem. If you
- ; do not support the particular rate, then simply put in a JMP to SETINV.
- ; 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.
- ;
- SET450: ;450 bps not supported
- SET600: ;600 bps not supported
- SET710: ;710 bps not supported
- SET1200: ;1200 bps not supported
- ;
- SETINV:
- ORI 0FFH ;make sure the Zero flag isn't set
- RET
- ;.....
- ;
- ;
- ; The follwing sets us for 110 bps. You may wish to remove this and re-
- ; place it with a JMP to SETINV because you hate creeps that call in at
- ; 110 bps and want to download a 200k long files (arrrrgh)
- ;
- SET110:
- MVI A,NORM110 ;set 8 bits, no parity, 2 stop bits
- OUT SPORT
- MVI A,BD110 ;set 110 baud and answer phone
- OUT CPORT2
- XRA A ;make sure Z flag is set
- RET
- ;.....
- ;
- ;
- ; Set up for 300 bps
- ;
- SET300:
- MVI A,NORM8 ;8 bits, no parity, 1 stop bit
- OUT SPORT
- MVI A,BD300 ;300 baud and answer phone
- OUT CPORT2
- XRA A ;make sure Z is set
- RET
- ;.....
- ;
- ;
- ; Ok, that's all of the modem dependant routines that BYE3 uses, so if
- ; you patch this file into your copy of BYE3, then it should work out
- ; well.
- ;
- ;************************************************************************
- ;