; vi:filetype=z80: include "uart.inc" main: ld sp, $0 ; --- initialize channel A --- ; reset TX/RX ld a, UART_CMD_RST_RX out (UART_REG_CMDA), a ld a, UART_CMD_RST_TX out (UART_REG_CMDA), a ; disable TX/RX ld a, UART_CMD_TX_OFF | UART_CMD_RX_OFF out (UART_REG_CMDA), a ; reset MODEA pointer ld a, UART_CMD_RST_MPTR out (UART_REG_CMDA), a ; set the MODEA register ld a, UART_M1_8BIT | UART_M1_NOPAR out (UART_REG_MODEA), a ld a, UART_M2_STOP1 out (UART_REG_MODEA), a ; select baud generator set 1 xor a out (UART_REG_AUXCTL), a ; set the baud rate ld a, UART_CSEL_TX_9600 | UART_CSEL_RX_9600 out (UART_REG_CSELA), a ; enable TX/RX ld a, UART_CMD_TX_ON | UART_CMD_RX_ON out (UART_REG_CMDA), a ; --- initialize channel B --- ; reset TX/RX ld a, UART_CMD_RST_RX out (UART_REG_CMDB), a ld a, UART_CMD_RST_TX out (UART_REG_CMDB), a ; disable TX/RX ld a, UART_CMD_TX_OFF | UART_CMD_RX_OFF out (UART_REG_CMDB), a ; reset MODEB pointer ld a, UART_CMD_RST_MPTR out (UART_REG_CMDB), a ; write all 0 to MODEB registers to leave OP1 as a general purpose output xor a out (UART_REG_MODEB), a out (UART_REG_MODEB), a ; set the output port bit 1 ld a, 2 out (UART_REG_OSET), a ld hl, str_hello call uart_putstr ld hl, str_foo call uart_putstr hlt: di halt jr hlt uart_putchar: ld b, a .wait_txrdy: in a, (UART_REG_STATA) bit 2, a ; test status bit 2 (TXRDY) jr z, .wait_txrdy ld a, b out (UART_REG_DATAA), a ret uart_putstr: ld a, (hl) cp a, 0 ret z call uart_putchar inc hl jr uart_putstr str_hello asciiz 'The Z80 says hi!',13,10 str_foo asciiz 'Foobar',13,10