- reorganized project directory structure
[z80comp2] / rom / monitor.asm
1 ; vi:filetype=z80:
2
3         include "uart.inc"
4 main:
5         ld sp, $0
6
7         ; --- initialize channel A ---
8         ; reset TX/RX
9         ld a, UART_CMD_RST_RX
10         out (UART_REG_CMDA), a
11         ld a, UART_CMD_RST_TX
12         out (UART_REG_CMDA), a
13         ; disable TX/RX
14         ld a, UART_CMD_TX_OFF | UART_CMD_RX_OFF
15         out (UART_REG_CMDA), a
16         ; reset MODEA pointer
17         ld a, UART_CMD_RST_MPTR
18         out (UART_REG_CMDA), a
19         ; set the MODEA register
20         ld a, UART_M1_8BIT | UART_M1_NOPAR
21         out (UART_REG_MODEA), a
22         ld a, UART_M2_STOP1
23         out (UART_REG_MODEA), a
24         ; select baud generator set 1
25         xor a
26         out (UART_REG_AUXCTL), a
27         ; set the baud rate
28         ld a, UART_CSEL_TX_9600 | UART_CSEL_RX_9600
29         out (UART_REG_CSELA), a
30         ; enable TX/RX
31         ld a, UART_CMD_TX_ON | UART_CMD_RX_ON
32         out (UART_REG_CMDA), a
33
34         ; --- initialize channel B ---
35         ; reset TX/RX
36         ld a, UART_CMD_RST_RX
37         out (UART_REG_CMDB), a
38         ld a, UART_CMD_RST_TX
39         out (UART_REG_CMDB), a
40         ; disable TX/RX
41         ld a, UART_CMD_TX_OFF | UART_CMD_RX_OFF
42         out (UART_REG_CMDB), a
43         ; reset MODEB pointer
44         ld a, UART_CMD_RST_MPTR
45         out (UART_REG_CMDB), a
46         ; write all 0 to MODEB registers to leave OP1 as a general purpose output
47         xor a
48         out (UART_REG_MODEB), a
49         out (UART_REG_MODEB), a
50         ; set the output port bit 1
51         ld a, 2
52         out (UART_REG_OSET), a
53
54         ld hl, str_hello
55         call uart_putstr
56         ld hl, str_foo
57         call uart_putstr
58
59 hlt:    di
60         halt
61         jr hlt
62
63
64 uart_putchar:
65         ld b, a
66 .wait_txrdy:
67         in a, (UART_REG_STATA)
68         bit 2, a        ; test status bit 2 (TXRDY)
69         jr z, .wait_txrdy
70         ld a, b
71         out (UART_REG_DATAA), a
72         ret
73
74 uart_putstr:
75         ld a, (hl)
76         cp a, 0
77         ret z
78         call uart_putchar
79         inc hl
80         jr uart_putstr
81
82 str_hello asciiz 'The Z80 says hi!',13,10
83 str_foo asciiz 'Foobar',13,10