home *** CD-ROM | disk | FTP | other *** search
- ;**********************************************************************
- ;
- ; MBYE (Modular 'BYE')
- ; Novation Apple-Cat modem routines
- ; v1.0 (02/07/84) by Kim Levitt
- ;
- ; These routines will allow the easy patching of MBYE 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 Apple ][ running with an Apple-Cat modem card.
- ; (much thanks to Dave Roznar for the original ACAT code)
- ;
- ; For the Apple, you should set BYELOW to YES.
- ;
- ;-----------------------------------------------------------------------
- ;
- ; 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 Updated for ByeII version 1.6 - Paul Traina
- ; 10/04/82 Routines added, no fuss, mess, or frills. - Paul Traina
- ;
- ;-----------------------------------------------------------------------
- ;
- ; The following define the slot address to use.
- ;
- SLOT: EQU 2 ;Apple-Cat residing in Slot #2
- ;
- ;***********************************************************************
- ;
- ;
- ; Apple-Cat modem address equates
- ;
- SLOTVAL:EQU SLOT*16 ;number to add for proper slot
- ;
- MCSTATP:EQU 0E080H+SLOTVAL ;Carrier status
- LNCTL: EQU 0E081H+SLOTVAL ;Line control
- PHCTL: EQU 0E082H+SLOTVAL ;Phone control
- BSRINT: EQU 0E083H+SLOTVAL ;BSR and interrupts
- RCVCTL:EQU 0E089H+SLOTVAL ;Receiver control
- MDPORT: EQU 0E08AH+SLOTVAL ;Mode (parity/stop bits) port
- BAUDPT: EQU 0E08BH+SLOTVAL ;Baud rate port
- XRINT: EQU 0E08CH+SLOTVAL ;Transmitt/Receive interrupts
- TRXCTL: EQU 0E08DH+SLOTVAL ;Transmitter control
- MODSEL: EQU 0E08FH+SLOTVAL ;Modem select port
- ;
- RSPORT: EQU 0E08FH+SLOTVAL ;Receive status port
- RDPORT: EQU 0E08BH+SLOTVAL ;Receive data port
- TSPORT; EQU 0E08FH+SLOTVAL ;Transmit status port
- TDPORT: EQU 0E08EH+SLOTVAL ;Transmit data port
- ;
- ; Values to poke into ports
- ;
- MAINM: EQU 0 ;Select main modem
- HANG: EQU 0 ;Hang up phone
- RDET: EQU 1 ;Ring detect
- SQLT: EQU 1 ;Squeltch cat
- ANSW: EQU 2 ;Answer phone
- NOXRINT:EQU 5 ;No transmitt/recv interrupts
- NOINT: EQU 6 ;No BSR interrupts
- DAV: EQU 8 ;Data available
- TBMT: EQU 10H ;Transmit buffer empty
- XMT103: EQU 10H ;Transmitter 103 mode (also clears RX)
- XMITOFF:EQU 1FH ;Turn of transmitter
- CTS: EQU 20H ;Carrier detect
- ANS103: EQU 64H ;Receiver 103 mode
- CATERR: EQU 0C0H ;Framing/Overrun errors
- B110: EQU 55H ;Select 110 bps
- B300: EQU 22H ;Select 300 bps
- B8NO1: EQU 03H ;8 data bits, no parity, 1 stop bit
- B8NO2: EQU 0BH ;8 data bits, no parity, 2 stop bits
- ;
- ;
- ;***********************************************************************
- ;
- ; 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, hang up the
- ; phone, and get it ready to wait for a ring.
- ;
- MDINIT: MVI A,XMITOFF ;Turn off transmitter
- STA TRXCTL
- MVI A,HANG ;Hang up phone
- STA PHCTL
- 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 sys-
- ; tem will like you a little more if you also mask out framing, parity,
- ; and overrun errors.
- ;
- MDINST: LDA RSPORT ;Get modem status
- ANI DAV ;Data available?
- RZ ;nope
- ORI 0FFH ;return true
- 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:LDA TSPORT ;Get modem status
- ANI TBMT ;mask out junk
- 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:LDA MCSTATP ;Get carrier status
- ANI CTS ;got a carrier?
- 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: LDA TRXCTL ;get ring status
- ANI RDET ;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: MVI A,XMT103 ;Clear receiver
- STA TRXCTL
- LDA RDPORT ;Read 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: STA TDPORT ;send character
- RET
- ;
- ; The following routine will make the modem answer the phone.
- ;
- MDANSW: MVI A,ANSW ;Answer phone
- STA PHCTL
- MVI A,SQLT ;Squelch Cat
- STA LNCTL
- MVI A,NOINT ;Disable BSR and interupts
- STA BSRINT
- MVI A,ANS103 ;Set receiver to 103, answer mode
- STA RCVCTL
- ;
- CALL SET300 ;300 baud
- MVI A,NOXRINT ;No XMIT/RCV interrupts
- STA XRINT
- MVI A,XMT103 ;Transmitter 103, answer mode
- STA TRXCTL
- MVI A,MAINM ;Select main modem
- STA MODSEL
- 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.
- ;
- SET110: ;110 bps too slow to support
- SET450: ;450 bps not supported
- SET600: ;600 bps not supported
- SET710: ;710 bps not supported
- SET1200:
- ;
- SETINV: ORI 0FFH ;make sure the Zero flag isn't set
- RET
- ;
- ; Set speed to 110 baud
- ;
- SET110: CALL MDINP ;Clear out garbage since the modem was
- CALL MDINP ;Set to 300 baud upon answer
- MVI A,B110 ;Set 110 baud
- STA BAUDPT
- MVI A,B8NO2 ;Set 8 data bits, no parity, 2 stop bits
- STA MDPORT
- XRA A ;Force zero flag
- RET
- ;
- ; Set up for 300 bps
- ;
- SET300: CALL MDINP
- CALL MDINP
- MVI A,B300 ;Set 300 baud
- STA BAUDPT
- MVI A,B8NO1 ;Set 8 data bits, no parity, 1 stop bit
- STA MDPORT
- 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.
- ;
- ;***********************************************************************
- ;