isa/examples: adapted sum and bootrom
authorBernhard Urban <lewurm@gmail.com>
Wed, 27 Oct 2010 17:53:13 +0000 (19:53 +0200)
committerBernhard Urban <lewurm@gmail.com>
Wed, 27 Oct 2010 17:53:13 +0000 (19:53 +0200)
2_isa/src/bootrom.s
2_isa/src/sum.s

index 13e4e45b21c4b81cde0f41e27ba9aa2cf49ac212..2801118558b7dde0e897ba210aa7fdd2242292c6 100644 (file)
@@ -1,12 +1,6 @@
        .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)
@@ -25,6 +19,7 @@ main:
        ; setup stackframe
        ldil r15, STACKSTART@lo
        ldih r15, STACKSTART@hi
+       movst r15
 
        ldil r3, TIMEOUT_START@lo
        ldih r3, TIMEOUT_START@hi
@@ -59,18 +54,19 @@ send_byte:
        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
 
@@ -88,23 +84,22 @@ recv_byte:
 
 ;-----
 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
 
 
@@ -132,43 +127,43 @@ bootrom:
        ; 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
 
@@ -176,4 +171,4 @@ bt_J:
        branch recv_word
        jumpreg r0
 
-; 101 instr. please update after modification
+; 102 instr. please update after modification
index af748fc405561819f9f2e09a51f8f0dbcc2a6fb5..acafa3726fbb7792c0bf16a0168a3baa2af8dbf7 100644 (file)
@@ -4,14 +4,16 @@ sum:
        ;r2 = arr
        ;r3 = i
        ;r0 = sum
-       ldis r0, 0;
        ;r4 arr data
+       ldis r0, 0
+       addi r3, r1, 0
+       retze- ; check len != 0
 loop:
        ;load arr data
-       ldw r4, r2;
+       ldw r4, 0(r2);
        ;sum += arr[i];
        add r0, r0, r4;
        subi r3, r3, 1;
        retze-;
-       addi r1, r1, 4;
+       addi r2, r2, 4;
        branch+ loop;