forked from MirrorRepos/RomWBW
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.
97 lines
1.9 KiB
97 lines
1.9 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:
|
|
LD A, 3 ; UART
|
|
LD B, 0 ; UART-IN
|
|
EZ80_FN ; CHAR RETURNED IN E
|
|
RET
|
|
|
|
; OUT CHAR IN E
|
|
EZUART_OUT:
|
|
LD A, 3 ; UART
|
|
LD B, 1 ; UART-OUT
|
|
EZ80_FN
|
|
RET
|
|
|
|
EZUART_IST:
|
|
LD A, 3 ; UART
|
|
LD B, 2 ; UART-IST
|
|
EZ80_FN
|
|
RET
|
|
|
|
EZUART_OST:
|
|
LD A, 3 ; UART
|
|
LD B, 3 ; UART-OST
|
|
EZ80_FN
|
|
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"
|
|
|