home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.barnyard.co.uk
/
2015.02.ftp.barnyard.co.uk.tar
/
ftp.barnyard.co.uk
/
cpm
/
walnut-creek-CDROM
/
CPM
/
BBSING
/
MBBS
/
MBACAT-1.ASM
< prev
next >
Wrap
Assembly Source File
|
2000-06-30
|
7KB
|
208 lines
;**********************************************************************
;
; 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.
;
;***********************************************************************
;