.data
.text
- ; r0 .. param0
- ; r1 .. param1
- ; r2 .. param2
- ; r15 .. stackpointer
- ; r0 .. return
-
; TODO: will the assembler be able to evaluate these expressions?
UART_BASE=0x1000
UART_STATUS=(UART_BASE+0x4)
; setup stackframe
ldil r15, STACKSTART@lo
ldih r15, STACKSTART@hi
+ movst r15
ldil r3, TIMEOUT_START@lo
ldih r3, TIMEOUT_START@hi
jumpzs+ send_byte ; jump if zero
ldil r3, UART_TRANS@lo
ldih r3, UART_TRANS@hi
- stb r0, 0(r3)
+ stb r1, 0(r3)
ret
;-----
send_word:
; TODO: loop? (less codesize...)
+ lrs r0, r1, 0
branch send_byte
- lrs r0, r0, 8
+ lrs r0, r1, 8
branch send_byte
- lrs r0, r0, 8
+ lrs r0, r1, 16
branch send_byte
- lrs r0, r0, 8
+ lrs r0, r1, 24
branch send_byte
ret
;-----
recv_word:
- ldil r1, 0x0
+ ldisl r0, 0x0
branch recv_byte
- or r1, r1, r0
+ or r0, r0, r1
branch recv_byte
- sll r0, r0, 8
- or r1, r1, r0
+ sll r1, r1, 8
+ or r0, r0, r1
branch recv_byte
- sll r0, r0, 16
- or r1, r1, r0
+ sll r1, r1, 16
+ or r0, r0, r1
branch recv_byte
- sll r0, r0, 24
- or r1, r1, r0
+ sll r1, r1, 24
+ or r0, r0, r1
- addi r0, r1, 0x0
ret
; FALL THROUGH ;)
bt_H:
- ldisl r0, 0x4f ; 'O'
+ ldisl r1, 0x4f ; 'O'
branch send_byte
jump bootrom
bt_W:
branch recv_word ; receive addr
- addi r6, r0, 0x0
+ mov r6, r0
branch recv_word ; receive instr
stx r0, 0(r6)
- ldisl r0, 0x44 ; 'D'
+ ldisl r1, 0x44 ; 'D'
branch send_byte
jump bootrom
bt_R:
branch recv_word ; receive addr
- ldx r1, 0(r0)
- ldisl r0, 0x46 ; 'F'
+ mov r2, r0
+ ldisl r1, 0x46 ; 'F'
branch send_byte
- addi r0, r1, 0x0
+ ldx r1, 0(r2)
branch send_word
jump bootrom
bt_Q:
branch recv_word ; receive addr
- addi r6, r0, 0x0
+ mov r6, r0
branch recv_word ; receive data
stw r0, 0(r6)
- ldisl r0, 0x41 ; 'A'
+ ldisl r1, 0x41 ; 'A'
branch send_byte
jump bootrom
bt_T:
branch recv_word ; receive addr
- ldw r1, 0(r0)
- ldisl r0, 0x47 ; 'G'
+ mov r2, r0
+ ldisl r1, 0x47 ; 'G'
branch send_byte
- addi r0, r1, 0x0
+ ldw r1, 0(r2)
branch send_word
jump bootrom
branch recv_word
jumpreg r0
-; 101 instr. please update after modification
+; 102 instr. please update after modification