home *** CD-ROM | disk | FTP | other *** search
- ;*************************************************************************
- ;
- ; 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.
- ;
- ;************************************************************************
- ;