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.
87 lines
1.5 KiB
87 lines
1.5 KiB
;
|
|
;==================================================================================================
|
|
; eZ80 UART DRIVER (SERIAL PORT)
|
|
;==================================================================================================
|
|
;
|
|
|
|
UART0_LSR .EQU $C5
|
|
UART0_THR .EQU $C0
|
|
|
|
LSR_THRE .EQU $20
|
|
|
|
#DEFINE IN0_A(p) .DB $ED,$38,p
|
|
#DEFINE OUT0_A(p) .DB $ED,$39,p
|
|
|
|
; #DEFINE CALLIL(a,b) .DB $5B,$CD \ .DW b \ .DB b
|
|
|
|
EZUART_PREINIT:
|
|
LD E, 'A'
|
|
CALL EZUART_OUT
|
|
LD E, 'B'
|
|
CALL EZUART_OUT
|
|
LD E, 'C'
|
|
CALL EZUART_OUT
|
|
LD E, 'D'
|
|
CALL EZUART_OUT
|
|
LD E, 13
|
|
CALL EZUART_OUT
|
|
LD E, 10
|
|
CALL EZUART_OUT
|
|
RET
|
|
|
|
EZUART_INIT:
|
|
LD E, '1'
|
|
CALL EZUART_OUT
|
|
LD E, '2'
|
|
CALL EZUART_OUT
|
|
LD E, '3'
|
|
CALL EZUART_OUT
|
|
LD E, '4'
|
|
CALL EZUART_OUT
|
|
LD E, 13
|
|
CALL EZUART_OUT
|
|
LD E, 10
|
|
CALL EZUART_OUT
|
|
|
|
;call.il, $001000
|
|
.db $5B,$CD
|
|
.dw $1000
|
|
.db $00
|
|
|
|
RET
|
|
|
|
EZUART_IN:
|
|
|
|
;
|
|
; OUT CHAR IN E
|
|
EZUART_OUT:
|
|
; WAIT FOR UART TO BE READY FOR TX
|
|
WAIT_FOR_TX_READY:
|
|
; IN0 A,(UART0_LSR) ; /*ED38C5*/
|
|
IN0_A (UART0_LSR)
|
|
AND LSR_THRE
|
|
JR Z,WAIT_FOR_TX_READY
|
|
|
|
; SEND THE CHAR
|
|
LD A, E
|
|
; OUT0 (UART0_LSR),A ; ED39C0
|
|
OUT0_A (UART0_THR)
|
|
RET
|
|
|
|
EZUART_IST:
|
|
EZUART_OST:
|
|
EZUART_INITDEV:
|
|
EZUART_QUERY:
|
|
EZUART_DEVICE:
|
|
RET
|
|
|
|
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"
|
|
|