Compare commits

..

5 Commits

2 changed files with 47 additions and 32 deletions

View File

@@ -30,41 +30,11 @@ INITUART
stb UART_LCR ; Write LCR stb UART_LCR ; Write LCR
lda #(UARTF_FCR_FE|UARTF_FCR_RFR|UARTF_FCR_XFR) ; FIFO disable and clear lda #(UARTF_FCR_FE|UARTF_FCR_RFR|UARTF_FCR_XFR) ; FIFO disable and clear
sta UART_FCR sta UART_FCR
lda #0 clra
sta UART_IER ; Polled mode sta UART_IER ; Polled mode
sta UART_MCR ; Reset DTR, RTS sta UART_MCR ; Reset DTR, RTS
rts rts
; Prints a character in polled non-FIFO mode (INITUART state).
; ACCA: char to write
POUTCHAR
pshs a ; Preserve char
NOTREADY@
lda UART_LSR ; Wait until LSR.THRE == 1 then write char
bita UARTF_LSR_THRE
beq NOTREADY@
puls a ; Restore char
sta UART_THR ; Write char
rts
; Prints a null terminated string in polled non-FIFO mode (INITUART state).
; X: start of zstring
POUTZSTR
pshs a,b ; Preserve A and B
NEXTC@
ldb ,x+ ; Get next char from X and increment X for next time
cmpb #$00 ; Make sure that we aren't at a terminator
beq END@
NOTREADY@
lda UART_LSR ; Wait until LSR.THRE == 1 then write char
bita UARTF_LSR_THRE
beq NOTREADY@
stb UART_THR ; Write char
bra NEXTC@ ; Iter to next char
END@
puls b,a ; Restore A and B
rts
; UART baud rate divisors ; UART baud rate divisors
DIVISORS DIVISORS
fdb $0900 ; 50 baud fdb $0900 ; 50 baud
@@ -82,3 +52,48 @@ DIVISORS
fdb $0010 ; 7200 baud fdb $0010 ; 7200 baud
fdb $000C ; 9600 baud fdb $000C ; 9600 baud
fdb $0006 ; 19200 baud fdb $0006 ; 19200 baud
; Prints a character in polled non-FIFO mode (INITUART state).
; ACCA: char to write
POUTCHAR
pshs a ; Preserve char
NOTREADY@
lda UART_LSR ; Wait until LSR.THRE == 1 then write char
bita #UARTF_LSR_THRE
beq NOTREADY@
puls a ; Restore char
sta UART_THR ; Write char
rts
; Prints a null terminated string in polled non-FIFO mode (INITUART state).
; X: start of zstring
POUTZSTR
pshs a,b ; Preserve A and B
NEXTC@
ldb ,x+ ; Get next char from X and increment X for next time
cmpb #$00 ; Make sure that we aren't at a terminator
beq END@
NOTREADY@
lda UART_LSR ; Wait until LSR.THRE == 1 then write char
bita #UARTF_LSR_THRE
beq NOTREADY@
stb UART_THR ; Write char
bra NEXTC@ ; Iter to next char
END@
puls b,a ; Restore A and B
rts
; Reads a char in polled mode non-FIFO mode (INITUART state).
; A: Filled with char from RX buffer or NUL ($00) if no char is ready
; B: Filled with LSR status codes masked with $9F
PINCHAR
ldb UART_LSR ; See if a char is ready
; Mask of possible UART error codes | data ready flag ($9F)
andb #(UARTF_LSR_DR|UARTF_LSR_OE|UARTF_LSR_PE|UARTF_LSR_FE|UARTF_LSR_BI|UARTF_LSR_FIFO)
bitb #UARTF_LSR_DR ; Check for char
beq NOCHAR@
lda UART_RBR ; Pull char from RX buffer
rts
NOCHAR@
clra ; Fill A with '\0'.
rts

View File

@@ -13,7 +13,7 @@
SECTION VECTORS SECTION VECTORS
VECTORS VECTORS
fdb $0000 ; Reserved fdb $0000 ; Exception
fdb $0000 ; SWI3 fdb $0000 ; SWI3
fdb $0000 ; SWI2 fdb $0000 ; SWI2
fdb $0000 ; FIRQ fdb $0000 ; FIRQ