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
/
MBPMMI-1.AQM
/
MBPMMI-1.ASM
Wrap
Assembly Source File
|
2000-06-30
|
7KB
|
249 lines
;***********************************************************************
;
; MBYE (Modular 'BYE')
; Potomic Micro Magic Incorporated 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 PMMI S100 modem card.
;
; Current revision history: (in reverse order to minimize reading time)
;
; 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 optimization & housecleaning - Paul Traina
; 01/29/82 Removed check for framing and overrun errors
; which get screwed when TSTBAUD'ing... - Paul Traina
; 11/28/82 Fixed some conventions in file format,
; cleaned up for distribution. - Paul Traina
; 11/27/82 Fixed MDCARCK and MDRING routines to work
; with PMMI convention. Corrected syntax
; errors with 8bit. - Frank Gaude
; 11/25/82 Routines added, no fuss, mess, or frills. - Paul Traina
;
;***********************************************************************
;
; The following define the port address for the PMMI card.
;
BASEP: EQU 0C0H ;Base port for PMMI modem
;
; Modem port equates
;
TPORT: EQU BASEP ;control port #1
DPORT: EQU BASEP+1 ;data port
RPORT: EQU BASEP+2 ;baud rate generator/modem status
CPORT: EQU BASEP+3 ;modem control port
;
; Switch hook and modem commands, output to TPORT (port 0)
;
BYE: EQU 0 ;hang up
ANSW: EQU 2 ;off hook, answer mode
BIT8: EQU 0CH ;8 data bits
NOPY: EQU 10H ;no parity
TSB: EQU 40H ;2 stop bits
NORM: EQU BIT8+NOPY ;normal, 8 bits, no parity
P110: EQU BIT8+NOPY+TSB ;same w/2 stop bits
;
; Modem status, input on RPORT (port 3)
;
DTD: EQU 1 ;dial tone detect
RDET: EQU 2 ;ring detect
CTS: EQU 4 ;CTS (carrier detect)
CONN: EQU 10H ;connected? (0=yes, 1=modem hung up)
;
; Control port values for filter mask
;
LE300: EQU 7FH ;less than or equal to 300 bps
GT300: EQU 5FH ;greater than 300 bps
;
; PMMI modem status masks
;
TBMT: EQU 1 ;xmit buffer empty
DAV: EQU 2 ;data available
OE: EQU 10H ;overrun error
FE; EQU 20H ;framing error
;
; Baud rate divisors
;
B110: EQU 142 ;110 bps
B300: EQU 52 ;300 bps
B450: EQU 35 ;450 bps
B600: EQU 26 ;600 bps
B710: EQU 22 ;710 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, and get it ready
; to wait for a ring. (Also hang it up.)
;
MDINIT:
XRA A ;get disconnect value
OUT TPORT ;reset orig/answer
OUT CPORT ;turn off DTR, do break
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 may like you a little more if you also mask out framing,
; parity, and overrun errors. (On some modems, you can't because of
; problems with the baud rate selection.)
;
MDINST:
IN TPORT ;get status
ANI DAV ;data available?
RZ ;return if not ready
ORI 0FFH ;we got something...
RET
;
; The following is a routine to determine if the transmit buffer is
; empty. If it isn't, then it will return with the Zero flag set. If
; the transmitter is not empty, it will return with Zero clear.
;
MDOUTST:
IN TPORT ;get modem status
ANI TBMT ;transmit buffer empty
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:
IN RPORT ;get status of modem
CMA ;reverse for pmmi convention
ANI CTS ;clear to send?
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 RPORT ;get ring status
CMA ;reverse for pmmi convention
ANI RDET ;mask all but ring
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. It should
; also set baud rate to 300 bps.
;
MDANSW:
MVI A,LE300 ;filter value for 300 bps (DTR)
OUT CPORT
CALL DELAY ;give time to turn on (.1 sec)
MVI A,P110+ANSW ;answer phone
OUT TPORT
CALL DELAY ;give time for answer
IN DPORT ;clear modem port
IN DPORT ;make sure it's clear
CALL SET300 ;set modem for 300 bps
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.
;
SET1200: ;PMMI does not support 1200 bps
;
SETINV: ORI 0FFH ;make sure the Zero flag isn't set
RET
;
; Set up for 110 bps
;
SET110:
MVI A,LE300 ;set filter value to less than 300 bps
OUT CPORT
MVI A,P110 ; 8 data bits, no parity, 2 stop bits
OUT TPORT
MVI A,B110 ; 110 bps
OUT RPORT
XRA A ;return 110 as a valid rate
RET
;
; Set up for 300 bps
;
SET300:
MVI A,LE300 ;filter set to less than or = 300 bps
OUT CPORT
MVI A,NORM ;set for 8 bits, no parity, 1 stop bit
OUT TPORT
MVI A,B300 ;set divisor to 300 bps
OUT RPORT
XRA A ;return with 300 bps as a valid rate
RET
;
; Set up for 450 bps
;
SET450:
MVI A,GT300 ;set filter value for >300 bps
OUT CPORT
MVI A,NORM ;set for 8 bits, no parity, 1 stop bit
OUT TPORT
MVI A,B450 ;set for 450 bps
OUT RPORT
XRA A ;return saying 450 is ok
RET
;
; Set up for 600 bps
;
SET600:
MVI A,GT300 ;set filter value for >300 bps
OUT CPORT
MVI A,NORM ;set for 8 bits, no parity, 1 stop bit
OUT TPORT
MVI A,B600 ;set for 600 bps
OUT RPORT
XRA A ;return saying 600 bps is valid
RET
;
; Set up for 710 bps
;
SET710:
MVI A,GT300 ;set filter value for >300 bps
OUT CPORT
MVI A,NORM ;set for 8 bits, no parity, 1 stop bit
OUT TPORT
MVI A,B710 ;set for 710 bps
OUT RPORT
XRA A ;return saying 710 bps is valid
RET
;
; Ok, that's all of the modem dependant routines that MBYE uses, so if
; you patch this file into your copy of MBYE, then it should work out
; well.
;
;************************************************************************
;