From: Bernhard Urban Date: Tue, 26 Oct 2010 18:29:59 +0000 (+0200) Subject: isa/examples: minor fixes at bootrom.s X-Git-Tag: bootrom_v1~253 X-Git-Url: http://wien.tomnetworks.com/gitweb/?p=calu.git;a=commitdiff_plain;h=5a92a4cb0b3bff34af40c6f2f0faf0be34bb28e0 isa/examples: minor fixes at bootrom.s --- diff --git a/2_isa/src/bootrom.s b/2_isa/src/bootrom.s index 9ae2570..13e4e45 100644 --- a/2_isa/src/bootrom.s +++ b/2_isa/src/bootrom.s @@ -17,9 +17,44 @@ 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 @@ -27,6 +62,7 @@ send_byte: stb r0, 0(r3) ret +;----- send_word: ; TODO: loop? (less codesize...) branch send_byte @@ -38,9 +74,11 @@ send_word: 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 @@ -48,6 +86,7 @@ recv_byte: lwb r0, 0(r3) ret +;----- recv_word: ldil r1, 0x0 branch recv_byte @@ -69,6 +108,7 @@ recv_word: ret +;----- bootrom: branch recv_byte @@ -136,36 +176,4 @@ bt_J: 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