3a_asm/2_isa: fixed our examples
authorBernhard Urban <lewurm@gmail.com>
Sun, 31 Oct 2010 23:40:55 +0000 (00:40 +0100)
committerBernhard Urban <lewurm@gmail.com>
Sun, 31 Oct 2010 23:40:55 +0000 (00:40 +0100)
2_isa/src/bittwiddling.s
2_isa/src/bootrom.s
2_isa/src/palindrom.s
2_isa/src/strncmp.s
2_isa/src/umul.s
3a_asm/notes

index 53861d5b8769883b193efe09c937e2bf0044d775..d4ecc81c50ef35e543e574d84df0011019a4edaf 100644 (file)
@@ -10,7 +10,7 @@ B4: .fill 0x0000003F
 ;int countbits(int x) {
 countbits:
        ;x == r1
-       
+
        ;load address of B0 into r3
        ldil r3, B0@lo;
        ldih r3, B0@hi;
@@ -18,7 +18,7 @@ countbits:
        ;x = (x & B0) + ((x >>  1) & B0);
        ;r0 = (x >> 1)
        lrs r0,r1,1;
-       
+
        ;load B0 into r2
        ldw r2, 0(r3);
 
@@ -27,7 +27,7 @@ countbits:
 
        ;x & B0
        and r1, r1, r2;
-       
+
        ;x = (x & B0) + ((x >>  1) & B0);
        add r0, r0, r1;
 
index d60c31692f3e7e9818cc269159211ee35bfa3f21..a18b1a68c6713e1432a9d14e9621b54a87c046d9 100644 (file)
@@ -27,30 +27,30 @@ timeout_loop:
        ldil r3, UART_STATUS@lo
        ldih r3, UART_STATUS@hi
        ldw r3, 0(r3)
-       andi r3, r3, 1 << UART_RECV_NEW
-       branchzs+ next; branch if zero
+       andx r3, 1 << UART_RECV_NEW
+       brzs+ next; branch if zero
 
        call recv_byte
        ; we received the enter bootrom sign
-       cmp r0, 0x48 ; 'H'
-       brancheq- bt_H
+       cmpi r0, 0x48 ; 'H'
+       breq- bt_H
 
 next:
        subi r3, r3, 1
-       branchnz+ timeout_loop
+       brnz+ timeout_loop
 
        ; call to default entry point
        ldil r0, DEFAULT_PROG_START@lo
        ldih r0, DEFAULT_PROG_START@hi
-       branchreg r0
+       brr r0
 
 ;-----
 send_byte:
        ldil r3, UART_STATUS@lo 
        ldih r3, UART_STATUS@hi
        ldw r3, 0(r3)
-       andi r3, r3, 1 << UART_TRANS_EMPTY
-       branchzs+ send_byte ; branch if zero
+       andx r3, 1 << UART_TRANS_EMPTY
+       brzs+ send_byte ; branch if zero
        ldil r3, UART_TRANS@lo  
        ldih r3, UART_TRANS@hi
        stb r1, 0(r3)
@@ -73,11 +73,11 @@ recv_byte:
        ldil r3, UART_STATUS@lo 
        ldih r3, UART_STATUS@hi
        ldw r3, 0(r3)
-       andi r3, r3, 1 << UART_RECV_NEW
-       branchzs+ send_byte ; branch if zero
+       andx r3, 1 << UART_RECV_NEW
+       brzs+ send_byte ; branch if zero
        ldil r3, UART_RECV@lo   
        ldih r3, UART_RECV@hi
-       lwb r0, 0(r3)
+       ldb r0, 0(r3)
        ret
 
 ;-----
@@ -87,15 +87,15 @@ recv_word:
        or r0, r0, r1
 
        call recv_byte
-       sll r1, r1, 8
+       lls r1, r1, 8
        or r0, r0, r1
 
        call recv_byte
-       sll r1, r1, 16
+       lls r1, r1, 16
        or r0, r0, r1
 
        call recv_byte
-       sll r1, r1, 24
+       lls r1, r1, 24
        or r0, r0, r1
 
        ret
@@ -105,28 +105,28 @@ bootrom:
        call recv_byte
 
        cmpi r0, 0x57 ; 'W'
-       brancheq- bt_W
+       breq- bt_W
 
        cmpi r0, 0x52 ; 'R'
-       brancheq- bt_R
+       breq- bt_R
 
        cmpi r0, 0x51 ; 'Q'
-       brancheq- bt_Q
+       breq- bt_Q
 
        cmpi r0, 0x54 ; 'T'
-       brancheq- bt_T
+       breq- bt_T
 
        cmpi r0, 0x4a ; 'J'
-       brancheq- bt_J
+       breq- bt_J
 
        ; cmpi r0, 0x48 ; 'H'
-       ; brancheq bt_H
+       ; breq bt_H
        ; FALL THROUGH ;)
 
 bt_H:
        ldisl r1, 0x4f ; 'O'
        call send_byte
-       branch bootrom
+       br bootrom
 
 bt_W:
        call recv_word ; receive addr
@@ -135,7 +135,7 @@ bt_W:
        stx r0, 0(r6)
        ldisl r1, 0x44 ; 'D'
        call send_byte
-       branch bootrom
+       br bootrom
 
 bt_R:
        call recv_word ; receive addr
@@ -144,7 +144,7 @@ bt_R:
        call send_byte
        ldx r1, 0(r2)
        call send_word
-       branch bootrom
+       br bootrom
 
 bt_Q:
        call recv_word ; receive addr
@@ -153,7 +153,7 @@ bt_Q:
        stw r0, 0(r6)
        ldisl r1, 0x41 ; 'A'
        call send_byte
-       branch bootrom
+       br bootrom
 
 bt_T:
        call recv_word ; receive addr
@@ -162,10 +162,10 @@ bt_T:
        call send_byte
        ldw r1, 0(r2)
        call send_word
-       branch bootrom
+       br bootrom
 
 bt_J:
        call recv_word
-       branchreg r0
+       brr r0
 
 ; 102 instr. please update after modification
index 1aa4051d926b399928683f158d46692a396a8976..ce03bb6ff063d22dd4787062092621796d8e51f6 100755 (executable)
@@ -1,18 +1,18 @@
 ; palindrom checker
-
+.text
 ; r1 = str addr
 ; r2 = str len (u8)
 
        ldis r0, 0
        cmpi r2, 0
-       ldiszsd r0, 1
+       ldiszs r0, 1
        retzs           ; return 1 if strlen = 0
 
        add  r4, r1, r2 ; set r4 to end address
        subi r4, r4, 1
 
        cmp  r1, r4     ; if strlen = 1 return 1
-       brancheq- end
+       breq- end
 
 schleife:
 
@@ -27,7 +27,7 @@ schleife:
 
        cmp  r1, r4
 
-       branchlt+ schleife
+       brlt+ schleife
 
 end:
 
index f4bce89eef6c78dbd9ecfd50df87ac51be88ff99..038cece64011a6d053519a0eeb96e8a64c2e8070 100644 (file)
@@ -1,10 +1,11 @@
+.text
 strncmp:
 
 ldis r5, 0      ;
 
 strfor:
 ldis r0, 0      ;
-ldb r0, 0(r1)   ; r0 = (*b1)
+ldb r0, 0(r1)
 ldb r5, 0(r2)   ; r5 = (*b2)
 cmpi r3, 0      ; len == 0
 cmpinq r0, 0    ; (*b1) == 0
@@ -19,4 +20,4 @@ retnq           ;
 addi r1, r1 ,1  ; ++b1
 addi r2, r2, 1  ; ++b2
 subi r3, r3, 1  ; --len
-branch strfor   ;
+br strfor   ;
index 29749bea06f73300a689a0bec3ab505a5055f01e..37e04d515938461ac114eac8803bafa694e075d0 100644 (file)
@@ -1,14 +1,14 @@
+.text
 
-
-.unsignedmul:
-       ldis r3, 0         // counter initialisieren
-       andx r2, 1         // test ob gerade oder ungerade
-       addinzd r3, 1      // fals ungerade counter+1
-       addnzd r0, r0, r1  // und c=c+a;
-.loop:
-       cmp r2, r3          // compare counter == b
-       addinzd r3, 2       // counter+2
-       addnzd r0, r0, r1   // c=c+a;
-       addnzd r0, r0, r1   // c=c+a;
-       branchnz+d .loop    // jump fals noch noch nicht fertig
+unsignedmul:
+       ldis r3, 0         ; counter initialisieren
+       andx r2, 1         ; test ob gerade oder ungerade
+       addidnz r3, r3, 1      ; fals ungerade counter+1
+       adddnz r0, r0, r1  ; und c=c+a;
+loop:
+       cmp r2, r3          ; compare counter == b
+       addidnz r3, r3, 2       ; counter+2
+       adddnz r0, r0, r1   ; c=c+a;
+       adddnz r0, r0, r1   ; c=c+a;
+       brnz+ loop    ; jump fals noch noch nicht fertig
        ret
index 157d08bdb0b5dcf4c2262bc46e061cb57eb73a81..be782584a2aa71f2ae6ddb513f749f8fd1bec0e8 100644 (file)
@@ -13,20 +13,22 @@ Adressenaufloesung nicht mehr viel schief gehen.
 - .data <- done (wenn man nett ist, springt man nicht lustig zwischen diesen
 - .text <- done (sections hin und her... es *sollte* zwar gehen, aber [...] :p)
 - .include <- TODO: zu umstaendlich? :/ Mal schaun ob mir eine einfache Loesung
-  einfaellt.
+  einfaellt. Eventuell mit gcc drueberfahren
 - .org <- done
 - .fill aufloesen <- TODO: atm nur einmalig 32bit moeglich
 - .define tabelle <- done
 
-- @hi und @lo behandeln? <- TODO: doch eher second stage
+- @hi und @lo behandeln? <- done
 
 
 (2) Values die noch als String vorhanden ist, werden als instruction geparst.
-    (vgl. 3. Spalte der 'itp;...' Ausgaben). second stage = BIG TODO
+       -> done
 
 
 einschraenkungen atm:
 - gleicher Namensraum fuer labels in .text und .data! wenn einer ein Label aus
   .data laedt und dann aber eigentlich auf .text zugreift ist er selber schuld :/
 - Expr geht zwar, aber nicht geklammert
+- In manchen situationen kanns den parser noch an den einen oder anderen Space
+  oder Tab herhauen, also lieb sein!
 - viele viele mehr *testbench schreiben muss*