X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=2_isa%2Fsrc%2Fbootrom.s;h=d38e1854527f517791893b82811e21e057a93780;hb=e342529c0374b6173bd50f346c088fc7e5eccfdc;hp=dc484d7fea490ffa0b0b5d321494cba2ea36319d;hpb=0221dfbdde27d9a2113565b7cd0d9109e65513ee;p=calu.git diff --git a/2_isa/src/bootrom.s b/2_isa/src/bootrom.s index dc484d7..d38e185 100644 --- a/2_isa/src/bootrom.s +++ b/2_isa/src/bootrom.s @@ -9,6 +9,10 @@ .define UART_TRANS_EMPTY, 0x1 .define UART_RECV_NEW, 0x2 + .define PBASE, 0x2030 + .define PADDR, 0x4 + .define PDATA, 0x8 + ;----- start: br+ main @@ -18,16 +22,14 @@ start: main: ldi r10, UART_BASE@lo ldih r10, UART_BASE@hi + ldi r11, PBASE@lo + ldih r11, PBASE@hi poll: - ldw r3, UART_STATUS(r10) - andx r3, UART_RECV_NEW - brzs+ poll; branch if zero - call recv_byte ; we received the enter bootrom sign xor r1, r1, r1 cmpi r0, 0x48 ; 'H' - breq- bt_H + breq+ bt_H br poll ; else ;----- @@ -35,7 +37,7 @@ send_byte: ldw r3, UART_STATUS(r10) andx r3, UART_TRANS_EMPTY brnz+ send_byte ; branch if not zero - stb r1, UART_TRANS(r10) + stw r1, UART_TRANS(r10) ret ;----- @@ -56,12 +58,11 @@ recv_byte: andx r3, UART_RECV_NEW brzs+ recv_byte; branch if zero xor r0, r0, r0 - ldb r0, UART_RECV(r10) + ldw r0, UART_RECV(r10) ret ;----- recv_word: - xor r0, r0, r0 xor r1, r1, r1 call recv_byte or r1, r0, r1 @@ -79,13 +80,14 @@ recv_word: or r1, r0, r1 addi r0, r1, 0 - ret ;----- bootrom: - br tehend call recv_byte + ldi r1, 0x50 ; 'P' + call send_byte + br tehend xor r1, r1, r1 cmpi r0, 0x57 ; 'W' @@ -110,14 +112,14 @@ bootrom: bt_H: ldi r1, 0x4f ; 'O' call send_byte - ; br bootrom ; FIXME - br tehend + call send_byte + br bootrom bt_W: call recv_word ; receive addr - mov r6, r0 + stw r0, PADDR(r11) call recv_word ; receive instr - stx r0, 0(r6) + stw r0, PDATA(r11) ldi r1, 0x44 ; 'D' call send_byte br bootrom