mirror of https://github.com/wwarthen/RomWBW.git
29 changed files with 4180 additions and 150 deletions
File diff suppressed because one or more lines are too long
Binary file not shown.
@ -0,0 +1,76 @@ |
|||||
|
;___XIO________________________________________________________________________________________________________________ |
||||
|
; |
||||
|
; DIRECT SERIAL I/O |
||||
|
; |
||||
|
; PROVIDES INTERFACE TO PLATFORM BASE SERIAL I/O DEVICE |
||||
|
; ALLOWS USER MESSAGING/INTERACTION PRIOR TO AND DURING HBIOS INIT |
||||
|
;______________________________________________________________________________________________________________________ |
||||
|
; |
||||
|
XIO_INIT: ; MINIMAL UART INIT |
||||
|
#IF (PLATFORM == PLT_N8) |
||||
|
; ASCI0 |
||||
|
LD A,66H |
||||
|
OUT0 (CPU_ASEXT0),A |
||||
|
LD A,64H |
||||
|
OUT0 (CPU_CNTLA0),A |
||||
|
LD A,Z180_CNTLB0 |
||||
|
OUT0 (CPU_CNTLB0),A |
||||
|
RET |
||||
|
#ELSE |
||||
|
XIO_DIV .EQU (1843200 / (16 * BAUDRATE)) |
||||
|
|
||||
|
LD A,$80 ; LCR := DLAB ON |
||||
|
OUT (SIO_LCR),A ; SET LCR |
||||
|
LD A,XIO_DIV ; BAUD RATE DIVISOR (LSB) |
||||
|
OUT (SIO_DLL),A ; SET DIVISOR (LSB) |
||||
|
XOR A ; BAUD RATE DIVISOR (MSB), ALWAYS 0 |
||||
|
OUT (SIO_DLM),A ; SET DIVISOR (MSB) |
||||
|
LD A,03H ; VALUE FOR LCR AND MCR |
||||
|
OUT (SIO_LCR),A ; LCR := 3, DLAB OFF, 8 DATA, 1 STOP, NO PARITY |
||||
|
OUT (SIO_MCR),A ; MCR := 3, DTR ON, RTS ON |
||||
|
LD A,6 ; DISABLE & RESET FIFO'S |
||||
|
OUT (SIO_FCR),A ; DO IT |
||||
|
RET |
||||
|
#ENDIF |
||||
|
; |
||||
|
XIO_CRLF: ; OUTPUT A NEWLINE |
||||
|
LD A,13 ; A = CR |
||||
|
CALL XIO_OUTC ; WRITE IT |
||||
|
LD A,10 ; A = LF |
||||
|
JR XIO_OUTC ; WRITE IT |
||||
|
; |
||||
|
XIO_SPACE: ; OUTPUT A SPACE CHARACTER |
||||
|
LD A,' ' |
||||
|
JR XIO_OUTC |
||||
|
; |
||||
|
XIO_DOT: ; OUTPUT A DOT (MARK PROGRESS) |
||||
|
LD A,'.' |
||||
|
; |
||||
|
XIO_OUTC: ; OUTPUT BYTE IN A |
||||
|
#IF (PLATFORM == PLT_N8) |
||||
|
PUSH AF ; SAVE INCOMING BYTE |
||||
|
XIO_OUTC1: |
||||
|
IN0 A,(CPU_STAT0) |
||||
|
AND $02 |
||||
|
JR Z,XIO_OUTC1 |
||||
|
POP AF |
||||
|
OUT0 (CPU_TDR0),A |
||||
|
RET |
||||
|
#ELSE |
||||
|
PUSH AF ; SAVE INCOMING BYTE |
||||
|
XIO_OUTC1: |
||||
|
IN A,(SIO_LSR) ; READ LINE STATUS REGISTER |
||||
|
AND $20 ; ISOLATE THRE |
||||
|
JR Z,XIO_OUTC1 ; LOOP TILL READY (EMPTY) |
||||
|
POP AF ; RECOVER BYTE TO WRITE |
||||
|
OUT (SIO_THR),A ; WRITE THE CHAR TO UART |
||||
|
RET |
||||
|
#ENDIF |
||||
|
; |
||||
|
XIO_OUTS: ; OUTPUT '$' TERMINATED STRING AT ADDRESS IN HL |
||||
|
LD A,(HL) ; GET NEXT BYTE |
||||
|
CP '$' ; END OF STRING? |
||||
|
RET Z ; YES, GET OUT |
||||
|
CALL XIO_OUTC ; OTHERWISE, WRITE IT |
||||
|
INC HL ; POINT TO NEXT BYTE |
||||
|
JR XIO_OUTS ; AND LOOP |
||||
Loading…
Reference in new issue