UART_TRANS_EMPTY=0
UART_RECV_NEW=1
+ TIMEOUT_START=0x13371337
+ DEFAULT_PROG_START=0x200
+ STACKSTART=0x500 ; FIXME
+;-----
+main:
+ ; setup stackframe
+ ldil r15, STACKSTART@lo
+ ldih r15, STACKSTART@hi
+
+ ldil r3, TIMEOUT_START@lo
+ ldih r3, TIMEOUT_START@hi
+
+timeout_loop:
+ ldil r3, UART_STATUS@lo
+ ldih r3, UART_STATUS@hi
+ ldw r3, 0(r3)
+ andi r3, r3, 1 << UART_RECV_NEW
+ jumpzs+ next; jump if zero
+
+ branch recv_byte
+ ; we received the enter bootrom sign
+ cmp r0, 0x48 ; 'H'
+ jumpeq- bt_H
+
+next:
+ subi r3, r3, 1
+ jumpnz+ timeout_loop
+
+ ; branch to default entry point
+ ldil r0, DEFAULT_PROG_START@lo
+ ldih r0, DEFAULT_PROG_START@hi
+ jumpreg r0
+
+;-----
send_byte:
ldil r3, UART_STATUS@lo
ldih r3, UART_STATUS@hi
+ ldw r3, 0(r3)
andi r3, r3, 1 << UART_TRANS_EMPTY
jumpzs+ send_byte ; jump if zero
ldil r3, UART_TRANS@lo
stb r0, 0(r3)
ret
+;-----
send_word:
; TODO: loop? (less codesize...)
branch send_byte
branch send_byte
ret
+;-----
recv_byte:
ldil r3, UART_STATUS@lo
ldih r3, UART_STATUS@hi
+ ldw r3, 0(r3)
andi r3, r3, 1 << UART_RECV_NEW
jumpzs+ send_byte ; jump if zero
ldil r3, UART_RECV@lo
lwb r0, 0(r3)
ret
+;-----
recv_word:
ldil r1, 0x0
branch recv_byte
ret
+;-----
bootrom:
branch recv_byte
branch recv_word
jumpreg r0
-
- TIMEOUT_START=0x13371337
- DEFAULT_PROG_START=0x200
- STACKSTART=0x500 ; FIXME
-main:
- ; setup stackframe
- ldil r15, STACKSTART@lo
- ldih r15, STACKSTART@hi
-
- ldil r3, TIMEOUT_START@lo
- ldih r3, TIMEOUT_START@hi
-
-timeout_loop:
- ldil r3, UART_STATUS@lo
- ldih r3, UART_STATUS@hi
- andi r3, r3, 1 << UART_RECV_NEW
- jumpzs+ next; jump if zero
-
- branch recv_byte
- ; we received the enter bootrom sign
- cmp r0, 0x48 ; 'H'
- jumpeq- bt_H
-
-next:
- subi r3, r3, 1
- jumpnz+ timeout_loop
-
- ; branch to default entry point
- ldil r0, DEFAULT_PROG_START@lo
- ldih r0, DEFAULT_PROG_START@hi
- jumpreg r0
-
-; 99 instr. please update after modification
+; 101 instr. please update after modification