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
/
MBMMII-1.ASM
< prev
next >
Wrap
Assembly Source File
|
2000-06-30
|
7KB
|
202 lines
;*****************************************************************
;
; MBYE (Modular 'BYE')
; D. C. Hayes MicroModem ][ modem I/O 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 a MicroModem ][ card.
; It seems to work on those Apples that even APBYE barfed on. The prob-
; lem was in the Carrier Detect routine, because the Microsoft Z80 card
; screws up on a double strobe type of I/O that they tried to use. Any-
; way, that means the Answer Phone routine is a crock, but the thing
; works...
;
; 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 use with ByeII version 1.6 - Paul Traina
; 04/16/83 General code cleanup and optimization. - Paul Traina
; 03/09/83 Fixed a missing '$+OFFSET' in MDANSW
; routine, also improved the "flip" logic
; needed for checking carrier and ring. - Paul Traina
; 10/04/82 Routines added, no fuss, mess, or frills. - Paul Traina
;
;-----------------------------------------------------------------------
;
; The following define the slot address to use.
;
BASE: EQU 0E0A6H ;This is the status port location
; ;for slot #2
;
;***********************************************************************
;
; MMII Modem address equates
;
SPORT: EQU BASE ;Control/status port
DPORT: EQU BASE+1 ;Data port
RPORT: EQU BASE-1 ;Baud rate/modem status port
CPORT: EQU BASE-1 ;Modem control port
;
; Switch hook and modem commands, output to SPORT
;
BYE: EQU 0 ;on hook or dial-break
ORIG: EQU 8EH ;off hook originate
ANSW: EQU 8AH ;off hook answer
TSB: EQU 8 ;2 stop bits
NORM: EQU 15H ;8 bits, no parity, 1 stop bit
F110: EQU 11H ;same w/2 stop bits
;
; Modem status input
;
RDET: EQU 80H ;ring detect
CTS: EQU 4 ;carrier detect
TBMT: EQU 2 ;xmit buffer empty
DAV: EQU 1 ;data available
;
; Baud rate divisors
;
B110: EQU 0 ;110 bps
B300: EQU 1 ;300 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, hang up the
; phone, and get it ready to wait for a ring.
;
MDINIT: XRA A
STA CPORT ;Hang up phone
STA SPORT ;Turn of Xmit/Recv
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: LDA SPORT ;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 SPORT ;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 RPORT ;The Z80 interface likes this dummy load...
LDA SPORT ;Get modem status
CMA ;flip/flop the Zero flag
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 RPORT ;get ring port status
CMA ;flip/flop the proper bit
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: LDA 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: STA DPORT ;send character
RET
;
; The following routine will make the modem answer the phone. It should
; set baudrate to 300 baud.
;
MDANSW: MVI A,ANSW ;Answer phone
STA CPORT
PUSH D ;save register pair DE
MVI E,20 ;Wait for modem to turn on
;
ALOP1: CALL DELAY
DCR E
JNZ ALOP1
POP D ;restore registers
CALL SET300
PUSH B ;here is the crock I was telling you
MVI B,30 ; about, I was beating my head for two
;
ALOOP: CALL DELAY ; days trying to figure out why the
LDA RPORT ; carrier detect routine was not work-
LDA SPORT ; ing - it turns out this corck here
LDA DPORT ; will get the modem to work properly.
LDA DPORT
DCR B
JNZ ALOOP
POP B
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 ;1200 bps not supported
;
SETINV: ORI 0FFH ;make sure the Zero flag isn't set
RET
;
; Set speed to 110 baud.
;
SET110: MVI A,B110+ANSW
STA CPORT ;Set 110 bps
MVI A,F110
STA SPORT ;Set 8 bits, no parity, 2 stop bits
RET
;
; Set up for 300 bps
;
SET300: MVI A,B300+ANSW
STA CPORT ;Set 300 bps
MVI A,NORM
STA SPORT ;Set 8 bits, no parity, 1 stop bit
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.
;
;**********************************************************************
;