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
/
MB7201-1.ASM
< prev
next >
Wrap
Assembly Source File
|
2000-06-30
|
5KB
|
187 lines
;*************************************************************************
;
; MB7201-1.ASM
; MBYE (Modular 'BYE')
; 7201 MPSC UART I/O routines
; with 4618 RTC as timer
; ****** for EPSON QX-10 ******
; Version 1.0
;
; Renamed and fixed to work with MBYE 02/15/84 Kim Levitt
; Adapted from BY3-KPSM.ASM 12/15/83 Albert Doolittle
; Adapted for use with BYE3-12 12/07/83 Steve Sanders
; Original Z80-SIO routine Ver. 1.3 by Steve Fox
;
=========================================================================
;
; Set base port for SIO & CTC chips
;
BASEP: EQU 11h ;Base port for SIO
BASEC: EQU 06h ;Base port for CTC baud rate generator
;
;The following define the port addresses to use.
;
DPORT: EQU BASEP ;Data port
SPORT: EQU BASEP+2 ;Status/Control port
BPORT: EQU BASEC ;Baud rate port
VPORT: EQU BASEC+1 ;Vector port
;
;The following are SPORT commands (output these to SPORT)
;
RESCHN: EQU 00011000b ;Reset channel
RESSTA: EQU 00010000b ;Reset ext/status
WRREG1: EQU 00000000b ;Value to write to register 1
WRREG3: EQU 11000001b ;8 bits/char, Rx enable
WRREG4: EQU 01000100b ;16x, 1 stop bit, no parity
DTROFF: EQU 00000000b ;DTR off, RTS off
DTRON: EQU 11101010b ;DTR on, 8 bits/char, Tx enable, RTS on
ONINS: EQU 00110000b ;Error reset
;
;The following are SPORT status masks
;
DAV: EQU 00000001b ;Data available
TBMT: EQU 00000100b ;Transmit buffer empty
DCD: EQU 00001000b ;Data carrier detect
PE: EQU 00010000b ;Parity error
OE: EQU 00100000b ;Overrun error
FE: EQU 01000000b ;Framing error
ERR: EQU PE+OE+FE ;Parity, overrun and framing error
;
;Now comes the time to decide how we set the baud rate. Set it properly
;for your particular CTC configuration
;
BDVECT: EQU 0B6H ;QX-10 Vector word
;
; Set Speed values for CTC Command:
;
BD300: EQU 0A001H ;300 Baud
BD1200: EQU 06800H ;1200 Baud
;
MDINIT:
MVI A,0 ;select WR0 (to be sure)
OUT SPORT
MVI A,RESCHN ;Reset channel
OUT SPORT
MVI A,4 ;Setup to write register 4
OUT SPORT
MVI A,WRREG4
OUT SPORT
MVI A,1 ;Setup to write register 1
OUT SPORT
MVI A,WRREG1
OUT SPORT
MVI A,5 ;Setup to write register 5
OUT SPORT
MVI A,DTROFF ;Clear DTR
OUT SPORT ;..Causing Hang-Up
MVI A,3 ;Setup to write register 3
OUT SPORT
MVI A,WRREG3 ;Initialize receive register
OUT SPORT
RET ;Return
;
; This routine will raise DTR to answer the phone
;
MDANSW:
MVI A,5 ;WR5
OUT SPORT
MVI A,DTRON ;turn on DTR
OUT SPORT
RET ;Return
;
;The following routine checks to make sure we still have carrier.
;If there is no carrier, it will return with the Zero flag set.
;
MDCARCK:
MVI A,RESSTA ;Reset status, select WR0:
OUT SPORT
IN SPORT ;Get status
ANI DCD ;Check for data carrier
RET ;Return
;
;The following routine determines if there is a character waiting
;to be received. If no character is waiting, the Zero flag will be set,
;otherwise, 255 will be returned in register A.
;
MDINST:
IN SPORT ;Get status
ANI DAV ;Got a character?
RZ ;Return if none
ORI 0FFh ;..Otherwise, set the proper flag
RET ;...and return
;
;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
RET ;Return
;
;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:
IN SPORT
ANI TBMT ;Mask it
RET ;Return
;
;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 ;Return
;
;These next routines set the proper baud rates for the modem. If you do
;not support the particular rate, then simply put the lable in front of
;the SETINV routine. If the baud rate change was successful, make SURE
;the Zero flag is set.
;
;Set up for 300 baud
;
SET300:
PUSH H
LXI H,BD300 ;Load rate
JMP SETBAUD
;
;Set up for 1200 baud
;
SET1200:
PUSH H
LXI H,BD1200 ;Load rate
;
SETBAUD:
MVI A,BDVECT ;Get Vector addr
OUT VPORT ;Send to CTC
MOV A,H
OUT BPORT
MOV A,L
OUT BPORT ;Send rate
POP H
XRA A ;Say rate is OK
RET ;Return
;
;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 baud not supported
SET450: ;450 baud not supported
SET600: ;600 baud not supported
SET710: ;710 baud not supported
;
ORI 0FFH ;Make sure zero flag is not set
RET ;and return...
;
;***********************************************************************
;
; That's it for the modem dependent I/O routines. Patch these into MBYE
; where it says INSERT YOUR MODEM DEPENDENT ROUTINES and it should work.
;
;************************************************************************
;