You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

105 lines
2.1 KiB

;
;==================================================================================================
; eZ80 UART DRIVER (SERIAL PORT)
;==================================================================================================
;
UART0_LSR .EQU $C5
UART0_THR .EQU $C0
UART0_RBR .EQU $C0
LSR_THRE .EQU $20
LSR_DR .EQU $01
#DEFINE IN0_A(p) .DB $ED,$38,p
#DEFINE IN0_B(p) .DB $ED,$00,p
#DEFINE IN0_C(p) .DB $ED,$08,p
#DEFINE IN0_D(p) .DB $ED,$10,p
#DEFINE IN0_E(p) .DB $ED,$18,p
#DEFINE IN0_H(p) .DB $ED,$20,p
#DEFINE IN0_L(p) .DB $ED,$28,p
#DEFINE OUT0_A(p) .DB $ED,$39,p
#DEFINE OUT0_B(p) .DB $ED,$01,p
#DEFINE OUT0_C(p) .DB $ED,$09,p
#DEFINE OUT0_D(p) .DB $ED,$11,p
#DEFINE OUT0_E(p) .DB $ED,$19,p
#DEFINE OUT0_H(p) .DB $ED,$21,p
#DEFINE OUT0_L(p) .DB $ED,$29,p
EZUART_PREINIT:
LD BC, EZUART_FNTBL
LD DE, EZUART_CFG
CALL CIO_ADDENT
LD (EZUART_ID), A
XOR A
RET
EZUART_INIT:
XOR A
RET
; RETRIEVE THE NEXT CHARACTER FROM THE UART AND RETURN IN E
EZUART_IN:
IN0_A (UART0_LSR) ; CHECK FOR RX READY
AND LSR_DR
JR Z, EZUART_IN
IN0_E (UART0_RBR) ; GET THE CHAR
XOR A ; SIGNAL SUCCESS
RET
; OUT CHAR IN E
EZUART_OUT:
IN0_A (UART0_LSR) ; WAIT FOR TX READY
AND LSR_THRE
JR Z, EZUART_OUT
OUT0_E (UART0_THR) ; SEND THE CHAR
XOR A ; SIGNAL SUCCESS
RET
EZUART_IST:
IN0_A (UART0_LSR) ; CHECK FOR RX READY
AND LSR_DR
RET
EZUART_OST:
IN0_A (UART0_LSR) ; WAIT FOR TX READY
AND LSR_THRE
RET Z
LD A, 1
RET
EZUART_INITDEV:
EZUART_QUERY:
LD A, 0 ; NOT IMPLEMENTED ERROR
RET
EZUART_DEVICE:
LD D, CIODEV_EZ80UART ; D := DEVICE TYPE
LD E, (IY) ; E := PHYSICAL UNIT
LD C, 0 ; C := DEVICE TYPE, 0x00 IS RS-232
LD HL, 0 ; H := MODE, L := BASE I/O ADDRESS
XOR A ; SIGNAL SUCCESS
RET
EZUART_CFG:
EZUART_ID: .DB 0
EZUART_FNTBL:
.DW EZUART_IN
.DW EZUART_OUT
.DW EZUART_IST
.DW EZUART_OST
.DW EZUART_INITDEV
.DW EZUART_QUERY
.DW EZUART_DEVICE
#IF (($ - EZUART_FNTBL) != (CIO_FNCNT * 2))
.ECHO "*** INVALID EZUART FUNCTION TABLE ***\n"