From d842fa2a5fc2b3c64b13ddce31af6d8f2cfc48b5 Mon Sep 17 00:00:00 2001
From: Strozzi <laps15@inf.ufpr.br>
Date: Tue, 7 Jun 2016 09:06:28 -0300
Subject: [PATCH] finish tranmission tests

---
 cMIPS/tests/data.bin      | Bin 0 -> 66176 bytes
 cMIPS/tests/handlerUART.s |  34 +--
 cMIPS/tests/mainTrans.c   | 149 ++++++++++++
 cMIPS/tests/mainTrans.elf | Bin 0 -> 23424 bytes
 cMIPS/tests/mainTrans.map | 173 ++++++++++++++
 cMIPS/tests/mainTrans.o   | Bin 0 -> 3032 bytes
 cMIPS/tests/mainTrans.s   | 474 ++++++++++++++++++++++++++++++++++++++
 cMIPS/tests/prog.bin      | Bin 80 -> 4144 bytes
 8 files changed, 814 insertions(+), 16 deletions(-)
 create mode 100644 cMIPS/tests/mainTrans.c
 create mode 100755 cMIPS/tests/mainTrans.elf
 create mode 100644 cMIPS/tests/mainTrans.map
 create mode 100644 cMIPS/tests/mainTrans.o
 create mode 100644 cMIPS/tests/mainTrans.s

diff --git a/cMIPS/tests/data.bin b/cMIPS/tests/data.bin
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..361f7170d993098fc6007255f1bddd4666d1671e 100644
GIT binary patch
literal 66176
zcmd<$G%!%mRmjXMNi8ZWEhypQV&LL5FjUZ0NUcatEhx#%&w~gVDd;K`6y=wsCWFKj
z$};nF5<x78tg(WwLUC$(Zfaf$SX3b`u`~y2m<iZ?h2qrY{JfOJqDqC_)ZF}{N-i!2
zFkoR2W?*4ZV_;!$VPIiMU|?ZjWMBYeCI$uuW(EcZRt5$J4h9AWUIqpRQ3eJEB?blt
za|Q;6NCpOm2@DJjFBupZDj69Vl9(76ZZk75*s?J&NN_PQgbFY)<VrCx9MWQ7(065E
z_?XYYps<yJK~R;E!SEI%gVTQ|hT@wn3|nuoGiYq$VYu5R!oX^)$nfa6DZ_J?aE6m-
zdKflbe9TZeuYggrAcScV-%;k%b&_nkz4tgRcz*CNoq0|2?$UFbU~h~PqaiRF0;3@?
z8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*O
zqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8Umvs
zFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF
z0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*
zAut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?
z8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*O
zqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8Umvs
zFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF
z0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*
zAut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?
z8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*O
zqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?!~rt{
z0|Ofa1A{Y^Zido_p)?~S0|N^K1A`-!ZiLbYp)?~CR31t<Lg|B0nvoeQ52YKS^g$>+
z#Dj0hJD**Efq{#Gfx#V0w?paUP?}v3Di5XGq4aSm%`OC$htlm(`Z$zk7lz71>2@f6
H97+QKWvy8m

literal 0
HcmV?d00001

diff --git a/cMIPS/tests/handlerUART.s b/cMIPS/tests/handlerUART.s
index d92eaf5..77e018e 100644
--- a/cMIPS/tests/handlerUART.s
+++ b/cMIPS/tests/handlerUART.s
@@ -9,50 +9,52 @@
     sw    $a2, 7*4($k0)
     sw    $a3, 8*4($k0)
     sw    $v0, 9*4($k0)
-
-    jal disableInterr   #$v0 = status
-    nop
+    sw    $ra, 10*4($k0)
 
     andi  $a1, $k1, UART_rx_irq # Is this reception?
-    beq   $a1, $zero, UARTrxinter #   no, maybe transmission?
+    bne   $a1, $zero, UARTrxinter #   no, maybe transmission?
     nop
     andi  $a1, $k1, UART_tx_irq # Is this transmission?
-    bne   $a1, $zero, UARTret     #   no, it was nothing
+    beq   $a1, $zero, UARTret     #   no, it was nothing
     nop
 
     lui   $a2, %hi(ntx)
     ori   $a2, $a2, %lo(ntx)
     lw    $a1, 0($a2)
 
+#    jal   print
+#    move  $a0, $a1
+
+#    lui   $a0, %hi(HW_uart_addr)# get device's addres
+#    ori   $a0, $a0, %lo(HW_uart_addr)
+
     li    $a3, 16
-    beq   $a3, $a1, overrun     # empty Q
+    beq   $a3, $a1, endUH     # empty Q
     nop
 
     addi  $a1, $a1, 1
     sw    $a1, 0($a2)           # update ntx, one more free space
 
-    # STORE AND THEN INCREMENTS
+    # INCREMENTS AND THEN LOAD
     lui   $a2, %hi(tx_q)
     ori   $a2, $a2, %lo(tx_q)
-    
     lui   $a1, %hi(tx_hd)
     ori   $a1, $a1, %lo(tx_hd)
     lw    $a3, 0($a1)
     nop
+    addi  $a3, $a3, 1           #increment Q head
+    andi  $a3, $a3, 0xf         # modulo 16
+    sw    $a3, 0($a1)            # store new head index
     add   $a2, $a2, $a3         # a2 <- &(tx_q[tx_hd])
     lb    $a3, 0($a2)           # get char from Q head
     nop
-    addi  $a3, $a3, 1           #increment Q head
-    andi  $a3, $a3, 0xf         # modulo 16
-    sw    $a3, 0(a1)            # store new head index
 
-    sw    $a2, 0(a0)            # write char in txreg
+    sw    $a3, 1*4($a0)            # write char in txreg
 
 
-endHU: 
+endUH: 
     
-    jal   enableInterr
-    nop
+    lw    $ra, 10*4($k0)
     lw    $v0, 9*4($k0)
     lw    $a3, 8*4($k0)
     b     UARTret
@@ -107,7 +109,7 @@ overrun:
     #... (doing absolutely nothing besides stacking and unstacking regs)
     lw $a1, 0*4($k0)            # get status from memory
     nop
-    andi $a1, $a1, 0xFFFFFFF1   # set overun bit to 1 
+    ori $a1, $a1, 0x00000001   # set overun bit to 1 
     # sw $a1, ???   ---+          Dunno where to save Status
     b endUH         #  |
     nop         #   <--+
diff --git a/cMIPS/tests/mainTrans.c b/cMIPS/tests/mainTrans.c
new file mode 100644
index 0000000..1f3b0aa
--- /dev/null
+++ b/cMIPS/tests/mainTrans.c
@@ -0,0 +1,149 @@
+#include "cMIPS.h"
+#include "../include/vetorFib.h"
+#include "../include/structUart.h"
+
+#define OBOUND_MESG "Out of bounds\n"
+#define OVERUN_MESG "Overun\n"
+#define MAXPOW 7
+#define SPEED 1
+#define COUNT ((SPEED+1)*100)
+
+// ----------------------- begin driver?
+extern UARTdriver Ud;
+volatile Tserial *uart;
+#if 0
+int proberx () {
+    return Ud.nrx;
+}
+
+int probetx () {
+    return Ud.ntx;
+}
+
+void ioctl (int c) {
+    uart->cs.ctl = (Tcontrol)c;
+}
+
+int iostat() {
+    return (int)uart->cs.stat;
+}
+#endif
+int Putc (char c) {
+    int ntx = Ud.ntx;
+    if (ntx == 0)
+        return 0;
+    if (ntx == 16 && uart->cs.stat.txEmpty)  // Empty Q && Tx
+        uart->d.tx = (unsigned int) c;                   // 32-bits
+    else {                                      // Sending smthng
+        disableInterr();
+        Ud.ntx--;
+        // INCREMENTS AND THEN STORE
+        Ud.tx_tl = (Ud.tx_tl+1)&0xF;          // modulo 16
+        Ud.tx_q[Ud.tx_tl] = c;
+        enableInterr();
+    }
+    return 1;
+}
+// ------------------------- end driver?
+// ------------------------- begin main()
+int Strlen (char *c) {
+    int i= 0;
+    while(c[i++]-10);
+    return i-1;
+}
+
+int pow16 (int ex) {
+    int i, ret=1;
+    for (i= 0; i< ex/2; i++)
+        ret*=16;
+    ret *= ret;
+    return (ex%2?ret*16:ret);
+}
+
+int hex2int (char *hex) {
+    int s= Strlen(hex), i, ans= 0;
+    #if 0
+        Test Signal...
+    switch (hex[0]) {
+        case 'F':
+        case 'f':
+        case 'E':
+        case 'e':
+        case 'D':
+        case 'd':
+        case 'C':
+        case 'c':
+        case 'B':
+        case 'b':
+        case 'A':
+        case 'a':
+        case '9':
+            ans = hex[0]*pow16(s-1);
+    }
+    #endif
+    for (i= 0; i< s; i++) {
+        hex[i]-= 48;
+        if (hex[i] > 9)
+            hex[i] -= 7;
+        if (hex[i] > 15)
+            hex[i] -= 32;
+        ans += hex[i] * pow16(s-(i+1));
+    }
+    return ans;
+}
+
+int int2hex (char *c, int i) {
+    int j= 0, val;
+    int p;
+    p = pow16(MAXPOW);
+    while (p > 0) {
+        val= 0;
+        if (i/p) {
+            val= i/p;
+            i%= p;
+        }
+        if ((val < 10) && (j || val)) { // impede que '0' sejam escritos à esquerda
+            c[j++] = val+'0';
+        }
+        else if (val > 9)
+            c[j++] = 'a'+ (val-10);
+        p/=16;
+    }
+    c[j] = 10;
+    return j-1;
+}
+
+int main () {
+    Tcontrol ctrl;
+    char p[15]; 
+    int fib, j, s, val, rx, sent;
+    volatile int *counter;
+
+    counter = (int *)IO_COUNT_ADDR;
+    uart= (void *)IO_UART_ADDR;
+    // initialize UART control
+    ctrl.rts= 0;
+    ctrl.intTX= 1;              // Both interruption
+    ctrl.intRX= 0;
+    ctrl.speed= SPEED;
+    uart->cs.ctl = ctrl;
+
+    Ud.ntx = 16;
+    for (fib= 0; fib< 44; fib++) {
+        int2hex(p, buf[fib]);
+        j= -1;
+        do {
+            j++;
+            while (((rx = Ud.nrx) != 16) && (!Putc(p[j])));
+            if (rx == 16) {
+                // Empty it
+                j--;
+            }
+        } while (p[j] != 0);
+    }
+
+    startCounter (COUNT , 0);
+    while ((val= (readCounter() && 0x3FFFFFFF)) < COUNT);
+
+    return val;
+}
diff --git a/cMIPS/tests/mainTrans.elf b/cMIPS/tests/mainTrans.elf
new file mode 100755
index 0000000000000000000000000000000000000000..a73f99acc6b431bc192157a69ccb28fed6608503
GIT binary patch
literal 23424
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
V)RjOsPa>Fs!4%x)0O>;XB>)Mw(T)HB

literal 0
HcmV?d00001

diff --git a/cMIPS/tests/mainTrans.map b/cMIPS/tests/mainTrans.map
new file mode 100644
index 0000000..ecfd517
--- /dev/null
+++ b/cMIPS/tests/mainTrans.map
@@ -0,0 +1,173 @@
+
+Allocating common symbols
+Common symbol       size              file
+
+_excp_saves         0x40              /home/bcc/laps15/nobackup/TrabRob/cmips/cMIPS/include/start.o
+uart                0x4               mainTrans.o
+
+Discarded input sections
+
+ .reginfo       0x0000000000000000       0x18 /home/bcc/laps15/nobackup/TrabRob/cmips/cMIPS/include/handlers.o
+ .MIPS.abiflags
+                0x0000000000000000       0x18 /home/bcc/laps15/nobackup/TrabRob/cmips/cMIPS/include/handlers.o
+ .reginfo       0x0000000000000000       0x18 /home/bcc/laps15/nobackup/TrabRob/cmips/cMIPS/include/cMIPSio.o
+ .MIPS.abiflags
+                0x0000000000000000       0x18 /home/bcc/laps15/nobackup/TrabRob/cmips/cMIPS/include/cMIPSio.o
+ .reginfo       0x0000000000000000       0x18 mainTrans.o
+ .MIPS.abiflags
+                0x0000000000000000       0x18 mainTrans.o
+
+Memory Configuration
+
+Name             Origin             Length             Attributes
+rom              0x0000000000000000 0x0000000000004000 xr
+ram              0x0000000000040000 0x0000000000020000 !xr
+sdram            0x0000000004000000 0x0000000002000000 !xr
+io               0x000000003c000000 0x0000000000020000 !xr
+*default*        0x0000000000000000 0xffffffffffffffff
+
+Linker script and memory map
+
+
+.text           0x0000000000000000     0x1030
+ *(.text .text.*)
+ .text          0x0000000000000000      0x524 /home/bcc/laps15/nobackup/TrabRob/cmips/cMIPS/include/start.o
+                0x0000000000000000                _start
+                0x00000000000000f4                exit
+                0x00000000000000f4                _exit
+                0x0000000000000130                _excp_0000
+                0x0000000000000200                _excp_0100
+                0x0000000000000280                _excp_0180
+                0x0000000000000334                _excp_0180ret
+                0x0000000000000400                _excp_0200
+                0x00000000000004e0                _excp_BFC0
+                0x0000000000000500                PT_update
+ .text          0x0000000000000524      0x464 /home/bcc/laps15/nobackup/TrabRob/cmips/cMIPS/include/handlers.o
+                0x0000000000000524                extCounter
+                0x0000000000000564                UARTinterr
+                0x00000000000006b8                countCompare
+                0x00000000000006d4                enableInterr
+                0x00000000000006ec                disableInterr
+                0x0000000000000708                handle_Mod
+                0x0000000000000808                handle_TLBL
+                0x00000000000008bc                TLB_purge
+                0x0000000000000920                cmips_delay
+                0x0000000000000938                cmips_kmsg
+ .text          0x0000000000000988      0x2e8 /home/bcc/laps15/nobackup/TrabRob/cmips/cMIPS/include/cMIPSio.o
+                0x0000000000000988                from_stdin
+                0x0000000000000998                to_stdout
+                0x00000000000009a8                print
+                0x00000000000009b4                readInt
+                0x00000000000009dc                writeInt
+                0x00000000000009e8                writeClose
+                0x00000000000009f8                dumpRAM
+                0x0000000000000a08                readStats
+                0x0000000000000a10                memcpy
+                0x0000000000000b38                memset
+                0x0000000000000c14                startCounter
+                0x0000000000000c44                stopCounter
+                0x0000000000000c60                readCounter
+ .text          0x0000000000000c70      0x3c0 mainTrans.o
+                0x0000000000000c70                Putc
+                0x0000000000000d28                Strlen
+                0x0000000000000d54                pow16
+                0x0000000000000da8                hex2int
+                0x0000000000000e7c                int2hex
+                0x0000000000000f4c                main
+                0x0000000000001030                _etext = .
+
+.data           0x0000000000040000      0x148
+                0x0000000000040000                _bdata = .
+ *(.data .data.*)
+ .data          0x0000000000040000        0x0 /home/bcc/laps15/nobackup/TrabRob/cmips/cMIPS/include/start.o
+ .data          0x0000000000040000       0x94 /home/bcc/laps15/nobackup/TrabRob/cmips/cMIPS/include/handlers.o
+                0x0000000000040080                _kmsg_list
+ .data          0x0000000000040094        0x0 /home/bcc/laps15/nobackup/TrabRob/cmips/cMIPS/include/cMIPSio.o
+ .data          0x0000000000040094       0xb4 mainTrans.o
+                0x0000000000040094                buf
+                0x0000000000040148                _edata = .
+
+.data1
+ *(.data1)
+
+.rodata
+ *(.rodata .rodata.*)
+
+.MIPS.abiflags  0x0000000000040148       0x18
+ .MIPS.abiflags
+                0x0000000000040148       0x18 /home/bcc/laps15/nobackup/TrabRob/cmips/cMIPS/include/start.o
+
+.rodata1
+ *(.rodata1)
+
+.lit8
+ *(.lit8)
+
+.lit4
+ *(.lit4)
+
+.sdata
+ *(.sdata .sdata.*)
+
+.sbss           0x0000000000040160        0x4
+ *(.sbss .sbss.*)
+ *(.scommon .scommon.*)
+ .scommon       0x0000000000040160        0x4 mainTrans.o
+                0x0000000000040160                uart
+
+.bss            0x0000000000040170       0xf0
+ *(.bss .bss.*)
+ .bss           0x0000000000040170        0x0 /home/bcc/laps15/nobackup/TrabRob/cmips/cMIPS/include/start.o
+ .bss           0x0000000000040170       0xac /home/bcc/laps15/nobackup/TrabRob/cmips/cMIPS/include/handlers.o
+                0x0000000000040170                _counter_val
+                0x0000000000040194                Ud
+                0x00000000000401cc                _uart_buff
+ .bss           0x000000000004021c        0x0 /home/bcc/laps15/nobackup/TrabRob/cmips/cMIPS/include/cMIPSio.o
+ .bss           0x000000000004021c        0x0 mainTrans.o
+ *(COMMON)
+ *fill*         0x000000000004021c        0x4 
+ COMMON         0x0000000000040220       0x40 /home/bcc/laps15/nobackup/TrabRob/cmips/cMIPS/include/start.o
+                0x0000000000040220                _excp_saves
+                0x0000000000040260                _end = .
+                0x0000000000020000                end_RAM = 0x20000
+                0x0000000000010000                half_RAM = (end_RAM / 0x2)
+                0x0000000000050000                base_PT = (_bdata + half_RAM)
+
+.PT             0x0000000000050000      0x280
+ *(.PT)
+ .PT            0x0000000000050000      0x280 /home/bcc/laps15/nobackup/TrabRob/cmips/cMIPS/include/start.o
+                0x0000000000050000                _PT
+LOAD /home/bcc/laps15/nobackup/TrabRob/cmips/cMIPS/include/start.o
+LOAD /home/bcc/laps15/nobackup/TrabRob/cmips/cMIPS/include/handlers.o
+LOAD /home/bcc/laps15/nobackup/TrabRob/cmips/cMIPS/include/cMIPSio.o
+LOAD mainTrans.o
+OUTPUT(mainTrans.elf elf32-littlemips)
+
+.reginfo        0x0000000000000000       0x18
+ .reginfo       0x0000000000000000       0x18 /home/bcc/laps15/nobackup/TrabRob/cmips/cMIPS/include/start.o
+
+.pdr            0x0000000000000000      0x480
+ .pdr           0x0000000000000000       0xe0 /home/bcc/laps15/nobackup/TrabRob/cmips/cMIPS/include/start.o
+ .pdr           0x00000000000000e0      0x140 /home/bcc/laps15/nobackup/TrabRob/cmips/cMIPS/include/handlers.o
+ .pdr           0x0000000000000220      0x1a0 /home/bcc/laps15/nobackup/TrabRob/cmips/cMIPS/include/cMIPSio.o
+ .pdr           0x00000000000003c0       0xc0 mainTrans.o
+
+.gnu.attributes
+                0x0000000000000000       0x10
+ .gnu.attributes
+                0x0000000000000000       0x10 /home/bcc/laps15/nobackup/TrabRob/cmips/cMIPS/include/start.o
+ .gnu.attributes
+                0x0000000000000010       0x10 /home/bcc/laps15/nobackup/TrabRob/cmips/cMIPS/include/handlers.o
+ .gnu.attributes
+                0x0000000000000020       0x10 /home/bcc/laps15/nobackup/TrabRob/cmips/cMIPS/include/cMIPSio.o
+ .gnu.attributes
+                0x0000000000000030       0x10 mainTrans.o
+
+.mdebug.abi32   0x0000000000000000        0x0
+ .mdebug.abi32  0x0000000000000000        0x0 /home/bcc/laps15/nobackup/TrabRob/cmips/cMIPS/include/cMIPSio.o
+ .mdebug.abi32  0x0000000000000000        0x0 mainTrans.o
+
+.comment        0x0000000000000000       0x11
+ .comment       0x0000000000000000       0x11 /home/bcc/laps15/nobackup/TrabRob/cmips/cMIPS/include/cMIPSio.o
+                                         0x12 (size before relaxing)
+ .comment       0x0000000000000011       0x12 mainTrans.o
diff --git a/cMIPS/tests/mainTrans.o b/cMIPS/tests/mainTrans.o
new file mode 100644
index 0000000000000000000000000000000000000000..7b0f84a19d6b095e28ed48af6e11de6010057046
GIT binary patch
literal 3032
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

literal 0
HcmV?d00001

diff --git a/cMIPS/tests/mainTrans.s b/cMIPS/tests/mainTrans.s
new file mode 100644
index 0000000..3cc53c6
--- /dev/null
+++ b/cMIPS/tests/mainTrans.s
@@ -0,0 +1,474 @@
+	.file	1 "mainTrans.c"
+	.section .mdebug.abi32
+	.previous
+	.nan	legacy
+	.module	fp=32
+	.module	nooddspreg
+	.text
+	.align	2
+	.globl	Putc
+	.set	nomips16
+	.set	nomicromips
+	.ent	Putc
+	.type	Putc, @function
+Putc:
+	.frame	$sp,24,$31		# vars= 0, regs= 2/0, args= 16, gp= 0
+	.mask	0x80010000,-4
+	.fmask	0x00000000,0
+	.set	noreorder
+	.set	nomacro
+	lui	$2,%hi(Ud+52)
+	lw	$2,%lo(Ud+52)($2)
+	nop
+	beq	$2,$0,$L4
+	li	$3,16			# 0x10
+
+	addiu	$sp,$sp,-24
+	sw	$31,20($sp)
+	sw	$16,16($sp)
+	sll	$16,$4,24
+	bne	$2,$3,$L3
+	sra	$16,$16,24
+
+	lui	$2,%hi(uart)
+	lw	$3,%lo(uart)($2)
+	nop
+	lw	$2,0($3)
+	nop
+	sll	$2,$2,25
+	bgez	$2,$L3
+	nop
+
+	sw	$16,4($3)
+	b	$L2
+	li	$2,1			# 0x1
+
+$L3:
+	jal	disableInterr
+	nop
+
+	lui	$2,%hi(Ud)
+	addiu	$4,$2,%lo(Ud)
+	lw	$2,52($4)
+	nop
+	addiu	$2,$2,-1
+	sw	$2,52($4)
+	lw	$3,28($4)
+	nop
+	addiu	$3,$3,1
+	andi	$2,$3,0xf
+	sw	$2,28($4)
+	addu	$2,$2,$4
+	jal	enableInterr
+	sb	$16,32($2)
+
+	b	$L2
+	li	$2,1			# 0x1
+
+$L4:
+	j	$31
+	move	$2,$0
+
+$L2:
+	lw	$31,20($sp)
+	lw	$16,16($sp)
+	j	$31
+	addiu	$sp,$sp,24
+
+	.set	macro
+	.set	reorder
+	.end	Putc
+	.size	Putc, .-Putc
+	.align	2
+	.globl	Strlen
+	.set	nomips16
+	.set	nomicromips
+	.ent	Strlen
+	.type	Strlen, @function
+Strlen:
+	.frame	$sp,0,$31		# vars= 0, regs= 0/0, args= 0, gp= 0
+	.mask	0x00000000,0
+	.fmask	0x00000000,0
+	.set	noreorder
+	.set	nomacro
+	move	$2,$0
+	b	$L8
+	li	$6,10			# 0xa
+
+$L9:
+	move	$2,$5
+$L8:
+	addiu	$4,$4,1
+	lb	$3,-1($4)
+	nop
+	bne	$3,$6,$L9
+	addiu	$5,$2,1
+
+	j	$31
+	nop
+
+	.set	macro
+	.set	reorder
+	.end	Strlen
+	.size	Strlen, .-Strlen
+	.align	2
+	.globl	pow16
+	.set	nomips16
+	.set	nomicromips
+	.ent	pow16
+	.type	pow16, @function
+pow16:
+	.frame	$sp,0,$31		# vars= 0, regs= 0/0, args= 0, gp= 0
+	.mask	0x00000000,0
+	.fmask	0x00000000,0
+	.set	noreorder
+	.set	nomacro
+	srl	$5,$4,31
+	addu	$5,$5,$4
+	sra	$5,$5,1
+	blez	$5,$L14
+	li	$2,1			# 0x1
+
+	move	$3,$0
+$L12:
+	addiu	$3,$3,1
+	bne	$3,$5,$L12
+	sll	$2,$2,4
+
+	b	$L17
+	mult	$2,$2
+
+$L14:
+	mult	$2,$2
+$L17:
+	andi	$4,$4,0x1
+	beq	$4,$0,$L15
+	nop
+
+	mflo	$2
+	j	$31
+	sll	$2,$2,4
+
+$L15:
+	mflo	$2
+	j	$31
+	nop
+
+	.set	macro
+	.set	reorder
+	.end	pow16
+	.size	pow16, .-pow16
+	.align	2
+	.globl	hex2int
+	.set	nomips16
+	.set	nomicromips
+	.ent	hex2int
+	.type	hex2int, @function
+hex2int:
+	.frame	$sp,40,$31		# vars= 0, regs= 6/0, args= 16, gp= 0
+	.mask	0x801f0000,-4
+	.fmask	0x00000000,0
+	.set	noreorder
+	.set	nomacro
+	addiu	$sp,$sp,-40
+	sw	$31,36($sp)
+	sw	$20,32($sp)
+	sw	$19,28($sp)
+	sw	$18,24($sp)
+	sw	$17,20($sp)
+	sw	$16,16($sp)
+	jal	Strlen
+	move	$16,$4
+
+	blez	$2,$L24
+	addiu	$17,$2,-1
+
+	move	$19,$0
+	li	$20,-1			# 0xffffffffffffffff
+$L23:
+	lbu	$2,0($16)
+	nop
+	addiu	$3,$2,-48
+	sll	$3,$3,24
+	sra	$3,$3,24
+	slt	$4,$3,10
+	beq	$4,$0,$L20
+	move	$18,$16
+
+	b	$L21
+	sb	$3,0($16)
+
+$L20:
+	addiu	$2,$2,-55
+	sb	$2,0($16)
+$L21:
+	lb	$2,0($18)
+	nop
+	slt	$3,$2,16
+	bne	$3,$0,$L22
+	addiu	$2,$2,-32
+
+	sb	$2,0($18)
+$L22:
+	jal	pow16
+	move	$4,$17
+
+	lb	$3,0($18)
+	nop
+	mult	$3,$2
+	mflo	$2
+	addu	$19,$19,$2
+	addiu	$17,$17,-1
+	bne	$17,$20,$L23
+	addiu	$16,$16,1
+
+	b	$L27
+	move	$2,$19
+
+$L24:
+	move	$19,$0
+	move	$2,$19
+$L27:
+	lw	$31,36($sp)
+	lw	$20,32($sp)
+	lw	$19,28($sp)
+	lw	$18,24($sp)
+	lw	$17,20($sp)
+	lw	$16,16($sp)
+	j	$31
+	addiu	$sp,$sp,40
+
+	.set	macro
+	.set	reorder
+	.end	hex2int
+	.size	hex2int, .-hex2int
+	.align	2
+	.globl	int2hex
+	.set	nomips16
+	.set	nomicromips
+	.ent	int2hex
+	.type	int2hex, @function
+int2hex:
+	.frame	$sp,32,$31		# vars= 0, regs= 3/0, args= 16, gp= 0
+	.mask	0x80030000,-4
+	.fmask	0x00000000,0
+	.set	noreorder
+	.set	nomacro
+	addiu	$sp,$sp,-32
+	sw	$31,28($sp)
+	sw	$17,24($sp)
+	sw	$16,20($sp)
+	move	$17,$4
+	move	$16,$5
+	jal	pow16
+	li	$4,7			# 0x7
+
+	blez	$2,$L29
+	move	$5,$0
+
+$L34:
+	bne	$2,$0,1f
+	div	$0,$16,$2
+	break	7
+1:
+	mflo	$3
+	beq	$3,$0,$L30
+	nop
+
+	bne	$2,$0,1f
+	div	$0,$16,$2
+	break	7
+1:
+	mfhi	$16
+	slt	$4,$3,10
+	beq	$4,$0,$L31
+	addu	$4,$17,$5
+
+$L35:
+	addu	$4,$17,$5
+	addiu	$3,$3,48
+	sb	$3,0($4)
+	b	$L32
+	addiu	$5,$5,1
+
+$L31:
+	addiu	$3,$3,87
+	sb	$3,0($4)
+	addiu	$5,$5,1
+$L32:
+	bgez	$2,$L33
+	move	$3,$2
+
+	addiu	$3,$2,15
+$L33:
+	sra	$2,$3,4
+	bgtz	$2,$L34
+	nop
+
+	b	$L40
+	addu	$17,$17,$5
+
+$L30:
+	bne	$5,$0,$L35
+	nop
+
+	b	$L32
+	nop
+
+$L29:
+	addu	$17,$17,$5
+$L40:
+	li	$2,10			# 0xa
+	sb	$2,0($17)
+	addiu	$2,$5,-1
+	lw	$31,28($sp)
+	lw	$17,24($sp)
+	lw	$16,20($sp)
+	j	$31
+	addiu	$sp,$sp,32
+
+	.set	macro
+	.set	reorder
+	.end	int2hex
+	.size	int2hex, .-int2hex
+	.align	2
+	.globl	main
+	.set	nomips16
+	.set	nomicromips
+	.ent	main
+	.type	main, @function
+main:
+	.frame	$sp,64,$31		# vars= 16, regs= 8/0, args= 16, gp= 0
+	.mask	0x807f0000,-4
+	.fmask	0x00000000,0
+	.set	noreorder
+	.set	nomacro
+	addiu	$sp,$sp,-64
+	sw	$31,60($sp)
+	sw	$22,56($sp)
+	sw	$21,52($sp)
+	sw	$20,48($sp)
+	sw	$19,44($sp)
+	sw	$18,40($sp)
+	sw	$17,36($sp)
+	sw	$16,32($sp)
+	li	$2,1006632960			# 0x3c000000
+	addiu	$4,$2,224
+	lui	$3,%hi(uart)
+	sw	$4,%lo(uart)($3)
+	li	$3,17			# 0x11
+	sw	$3,224($2)
+	li	$3,16			# 0x10
+	lui	$2,%hi(Ud+52)
+	sw	$3,%lo(Ud+52)($2)
+	lui	$21,%hi(buf)
+	addiu	$21,$21,%lo(buf)
+	lui	$22,%hi(buf+176)
+	addiu	$22,$22,%lo(buf+176)
+	lui	$18,%hi(Ud)
+	li	$17,16			# 0x10
+$L45:
+	lw	$5,0($21)
+	jal	int2hex
+	addiu	$4,$sp,16
+
+	li	$19,-1			# 0xffffffffffffffff
+	addiu	$20,$19,1
+$L53:
+	addiu	$2,$sp,16
+	addu	$16,$2,$20
+	addiu	$2,$18,%lo(Ud)
+$L52:
+	lw	$2,48($2)
+	nop
+	beq	$2,$17,$L51
+	addiu	$2,$sp,16
+
+	lb	$4,0($16)
+	jal	Putc
+	nop
+
+	beq	$2,$0,$L52
+	addiu	$2,$18,%lo(Ud)
+
+	move	$19,$20
+	addiu	$2,$sp,16
+$L51:
+	addu	$2,$2,$19
+	lb	$2,0($2)
+	nop
+	bne	$2,$0,$L53
+	addiu	$20,$19,1
+
+	addiu	$21,$21,4
+	bne	$22,$21,$L45
+	move	$5,$0
+
+	jal	startCounter
+	li	$4,200			# 0xc8
+
+$L46:
+	jal	readCounter
+	nop
+
+	b	$L46
+	nop
+
+	.set	macro
+	.set	reorder
+	.end	main
+	.size	main, .-main
+
+	.comm	uart,4,4
+	.globl	buf
+	.data
+	.align	2
+	.type	buf, @object
+	.size	buf, 180
+buf:
+	.word	1
+	.word	1
+	.word	2
+	.word	3
+	.word	5
+	.word	8
+	.word	13
+	.word	21
+	.word	34
+	.word	55
+	.word	89
+	.word	144
+	.word	233
+	.word	377
+	.word	610
+	.word	987
+	.word	1597
+	.word	2584
+	.word	4181
+	.word	6765
+	.word	10946
+	.word	17711
+	.word	28657
+	.word	46368
+	.word	75025
+	.word	121393
+	.word	196418
+	.word	317811
+	.word	514229
+	.word	832040
+	.word	1346269
+	.word	2178309
+	.word	3524578
+	.word	5702887
+	.word	9227465
+	.word	14930352
+	.word	24157817
+	.word	39088169
+	.word	63245986
+	.word	102334155
+	.word	165580141
+	.word	267914296
+	.word	433494437
+	.word	701408733
+	.space	4
+	.ident	"GCC: (GNU) 5.1.0"
diff --git a/cMIPS/tests/prog.bin b/cMIPS/tests/prog.bin
index bd31b673a85d5d5bc5702c072f8f6e55d600d816..33794068ce2915144852d3f29871b00bc0e4ef4e 100644
GIT binary patch
literal 4144
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

literal 80
zcmZQzU|?`y;J0Dm7qDSuU{+ybU{TRv5L1z0NMR7tU|?Wjc(2O9@N_LBL$U$`1M4~l
ThUdLM{vQ_u=|jf~3=B>Hs8R~t

-- 
GitLab