home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CP/M
/
CPM_CDROM.iso
/
cpm
/
bye3
/
b3zb-3.ins
< prev
next >
Wrap
Text File
|
1994-07-13
|
5KB
|
165 lines
; B3ZB-3.INS - Bye3 / Zorba routines for BYE - 08/06/85
;
; This version is for a 8251a i/o with ctc timer to set speed
;
; These routines will allow the easy patching of bye3 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 intel 8251 chip that is hooked up to an
; external modem.
;
;=======================================================================
;
; 08/06/85 Upgraded for bye337 - pst
; 07/09/85 Modified to work with bye335 - f.e. clayton
; 10/04/82 Routines added, no fuss, mess, or frills. - pst
;
;=======================================================================
;
; The following define the port address to use.
;
BASEP EQU 20H ; Modem base port
DPORT EQU BASEP ; Data port
SPORT EQU BASEP+1 ; Status/Control port
CTCCMD EQU 003H ; Timer control/status port
CTC0 EQU 000H ; Timer 0 (port A)
LSB1200 EQU 0D0H
MSB1200 EQU 000H
;
; the following are sport commands (output these to sport)
;
MODINS EQU 01001110B ; 8 bits, no parity, 1 stop bit, 16x
OFFINS EQU 00010000B ; Drop DTR and disable RCV/XMT
ONINS EQU 00010111B ; Reset flags, send DTR, enable rx & tx
RSTINS EQU 01000010B ; Reset USART and send DTR
;
; the following are sport status masks
;
TBMT EQU 00000001B ; Transmitt buffer empty
DAV EQU 00000010B ; Data available
DCD EQU 10000000B ; Data carrier detect
FE EQU 00100000B ; Framing error
OE EQU 00010000B ; Overrun error
PE EQU 00001000B ; Parity error
ERR EQU 00111000B ; Overrun and framing error
;
BD300 EQU 0683H ; 300 baud
BD1200 EQU 01A1H ; 1200 baud
BD2400 EQU 00D0H ; 2400 baud
;
;----------------------------------------------------------------
;
; Initialize modem
;
MDINIT: MVI A,OFFINS ; Clear DTR
OUT SPORT ; Causing hangup
;
PUSH B ; Preserve in case we need it
MVI B,20
OFFTI: CALL DELAY ; 0.1 second delay
DCR B
JNZ OFFTI ; Keep looping until finnished
POP B ; Restore BC
;
MVI A,ONINS ; DTR so that modem can answer phone
OUT SPORT
CALL SET1200
;
IF IMODEM
CALL IMINIT ; Init modem
ENDIF
;
RET
;
; The following routine sets dtr low to turn off the modem when done.
;
MDQUIT:
IF IMODEM
CALL IMQUIT
RET
ENDIF
;
MDSTOP: MVI A,10H
OUT SPORT ; Turn off DTR to hang up the phone
RET
;
; The following is a routine to determine if there is a character wait-
; ing to be received, if none, the zero flag will be set, otherwise it
; returns with 255 in register A. Remember that the system will like you
; a little more if you also mask out framing, parity, and overrun errors.
;
MDINST: IN SPORT ; Get status
ANI DAV ; Got a character?
RZ ; Return if none
IN SPORT ; Get status again
ANI ERR ; Check for framing and overrun
JZ MDINST1 ; No errors
MVI A,ONINS ; Reset error flags
OUT SPORT
XRA A ; Return false
RET
;
MDINST1:ORI 255 ; We have a character
RET
;
; The following is a routine to determine if the transmit buffer is
; empty. If it is, it will return with the zero flag clear. If the
; transmitter is busy, then it will return with the zero flag set.
;
MDOUTST:IN SPORT
ANI TBMT
RZ
ORI 255
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 SPORT ; Get status
ANI DCD ; Check if carrier is on
RZ
ORI 255
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
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
;
; These next routines set the proper baud rates for the modem.
;
SET300: LXI H,BD300 ; Set 300 baud
JMP LOADBD
;
SET1200:LXI H,BD1200 ; Set 1200 baud
JMP LOADBD
;
SET2400:LXI H,BD2400 ; Set 2400 baud
JMP LOADBD
;
LOADBD: MVI A,36H ; Set command mode
OUT CTCCMD
NOP ! NOP ! NOP
MOV A,L ; Send LSB of baud
OUT CTC0
NOP ! NOP ! NOP
MOV A,H ; Send MSB of baud
OUT CTC1
NOP ! NOP ! NOP
XRA A ; Return saying we're ok
RET
;
;***********************************************************************