+;* bootROM, a very small bootloader for $NAME
+;*
+;* protocol details:
+;* abbrv: H = Host, CPU = C
+;*
+;* value/cmd | direction | comment
+;* ------------------------------------------------------------
+;* 'H' | H -> C | enter bootROM ("HI")
+;* 'O' | C -> H | ack bootROM entry ("OH HAI")
+;*
+;* 'W'0xZZZZZZZZ0xYYYYYYYY| H -> C | write instr (0xYY...Y) to
+;* | address (0xZZ...Z)
+;* 'D' | C -> H | instr write done
+;*
+;* 'R'0xZZZZZZZZ | H -> C | read instr from address (0xZZ..Z)
+;* 'F'0xYYYYYYYY | C -> H | instr read done and return instr
+;*
+;* 'Q'0xZZZZZZZZ0xYYYYYYYY| H -> C | write data (0xYY...Y) to
+;* | address (0xZZ...Z)
+;* 'A' | C -> H | data write done
+;*
+;* 'T'0xZZZZZZZZ | H -> C | read data from address (0xZZ..Z)
+;* 'G'0xYYYYYYYY | C -> H | read done and return data
+;*
+;* 'J'0xZZZZZZZZ | H -> C | jump to address (0xZZ...Z)
+;*/
.data
.text
call recv_byte
lls r1, r1, 8
- or r1, r0, r1
+ or r0, r0, r1
+ xor r1, r1, r1
- addi r0, r1, 0
ret
;-----
cmpi r0, 0x57 ; 'W'
breq- bt_W
- cmpi r0, 0x52 ; 'R'
- breq- bt_R
+ ;cmpi r0, 0x52 ; 'R'
+ ;breq- bt_R
cmpi r0, 0x51 ; 'Q'
breq- bt_Q
br bootrom
bt_W:
- ; call recv_word ; receive addr
- ; stw r0, PADDR(r11)
- ; call recv_word ; receive instr
- ; stw r0, PDATA(r11)
- ; ldi r1, 0x44 ; 'D'
- ; call send_byte
+ ldi r1, 0x57 ; 'W'
+ call send_byte
+ call recv_word ; receive addr
+ stw r0, PADDR(r11)
+ call recv_word ; receive instr
+ stw r0, PDATA(r11)
+ ldi r1, 0x44 ; 'D'
+ call send_byte
br bootrom
-bt_R:
+;bt_R: ;lesen von IRAM wird nicht unterstuetzt
;call recv_word ; receive addr
;mov r2, r0
;ldi r1, 0x46 ; 'F'
;ldx r1, 0(r2)
;call send_word
;br bootrom
- br tehend
bt_Q:
+ ldi r1, 0x51 ; 'Q'
+ call send_byte
call recv_word ; receive addr
- mov r6, r0
+ addi r6, r0, 0
call recv_word ; receive data
stw r0, 0(r6)
ldi r1, 0x41 ; 'A'
br bootrom
bt_J:
- call recv_word
- brr r0
-
tehend:
xor r1, r1, r1
ldi r1, 0x41 ; 'A'