;********************************************************************** ; ; 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. ; ;*********************************************************************** ;