10 ; TODO: will the assembler be able to evaluate these expressions?
12 UART_STATUS=(UART_BASE+0x4)
13 UART_RECV=(UART_BASE+0x8)
14 UART_TRANS=(UART_BASE+0xC)
15 UART_BAUD=(UART_BAUD+0x10)
20 TIMEOUT_START=0x13371337
21 DEFAULT_PROG_START=0x200
22 STACKSTART=0x500 ; FIXME
26 ldil r15, STACKSTART@lo
27 ldih r15, STACKSTART@hi
29 ldil r3, TIMEOUT_START@lo
30 ldih r3, TIMEOUT_START@hi
33 ldil r3, UART_STATUS@lo
34 ldih r3, UART_STATUS@hi
36 andi r3, r3, 1 << UART_RECV_NEW
37 jumpzs+ next; jump if zero
40 ; we received the enter bootrom sign
48 ; branch to default entry point
49 ldil r0, DEFAULT_PROG_START@lo
50 ldih r0, DEFAULT_PROG_START@hi
55 ldil r3, UART_STATUS@lo
56 ldih r3, UART_STATUS@hi
58 andi r3, r3, 1 << UART_TRANS_EMPTY
59 jumpzs+ send_byte ; jump if zero
60 ldil r3, UART_TRANS@lo
61 ldih r3, UART_TRANS@hi
67 ; TODO: loop? (less codesize...)
79 ldil r3, UART_STATUS@lo
80 ldih r3, UART_STATUS@hi
82 andi r3, r3, 1 << UART_RECV_NEW
83 jumpzs+ send_byte ; jump if zero
130 ; cmpi r0, 0x48 ; 'H'
140 branch recv_word ; receive addr
142 branch recv_word ; receive instr
149 branch recv_word ; receive addr
158 branch recv_word ; receive addr
160 branch recv_word ; receive data
167 branch recv_word ; receive addr
179 ; 101 instr. please update after modification