diff --git a/22display_num_in_mem_empty.asm b/22display_num_in_mem_empty.asm new file mode 100644 index 0000000..2400f07 --- /dev/null +++ b/22display_num_in_mem_empty.asm @@ -0,0 +1,213 @@ +.text + #initialize $sp + lui $sp, 0x4000 + addi $sp, $sp, 0x7ff + + # load digit to mem + lui $s0, 0x4000 + addi $s0, $s0, 0x20 + #0 + addi $s1, $zero, 0x3f + sw $s1, 0($s0) + #1 + addi $s1, $zero, 0x6 + sw $s1, 4($s0) + #2 + addi $s1, $zero, 0x5b + sw $s1, 8($s0) + #3 + addi $s1, $zero, 0x4f + sw $s1, 12($s0) + #4 + addi $s1, $zero, 0x66 + sw $s1, 16($s0) + #5 + addi $s1, $zero, 0x6d + sw $s1, 20($s0) + #6 + addi $s1, $zero, 0x7d + sw $s1, 24($s0) + #7 + addi $s1, $zero, 0x7 + sw $s1, 28($s0) + #8 + addi $s1, $zero, 0x7f + sw $s1, 32($s0) + #9 + addi $s1, $zero, 0x6f + sw $s1, 36($s0) + #A + addi $s1, $zero, 0x77 + sw $s1, 40($s0) + #B + addi $s1, $zero, 0x7c + sw $s1, 44($s0) + #C + addi $s1, $zero, 0x58 + sw $s1, 48($s0) + #D + addi $s1, $zero, 0x5e + sw $s1, 52($s0) + #E + addi $s1, $zero, 0x79 + sw $s1, 56($s0) + #F + addi $s1, $zero, 0x71 + sw $s1, 60($s0) + + # save the numbers to be sorted + lui $s0, 0x4000 + addi $s0, $s0, 0x60 + + addi $s1, $zero, 0x4b8d + sw $s1, 0($s0) + addi $s1, $zero, 0x2307 + sw $s1, 4($s0) + addi $s1, $zero, 0xfae0 + sw $s1, 8($s0) + addi $s1, $zero, 0x7815 + sw $s1, 12($s0) + addi $s1, $zero, 0xc105 + sw $s1, 16($s0) + addi $s1, $zero, 0x84f0 + sw $s1, 20($s0) + addi $s1, $zero, 0xdb6 + sw $s1, 24($s0) + addi $s1, $zero, 0xf21d + sw $s1, 28($s0) + addi $s1, $zero, 0xe97a + sw $s1, 32($s0) + addi $s1, $zero, 0xa3b6 + sw $s1, 36($s0) + addi $s1, $zero, 0x8466 + sw $s1, 40($s0) + addi $s1, $zero, 0x3a25 + sw $s1, 44($s0) + addi $s1, $zero, 0x5df + sw $s1, 48($s0) + addi $s1, $zero, 0xd2de + sw $s1, 52($s0) + addi $s1, $zero, 0xba7a + sw $s1, 56($s0) + addi $s1, $zero, 0x7809 + sw $s1, 60($s0) + addi $s1, $zero, 0xf6a8 + sw $s1, 64($s0) + addi $s1, $zero, 0x361d + sw $s1, 68($s0) + addi $s1, $zero, 0x3adb + sw $s1, 72($s0) + addi $s1, $zero, 0x969a + sw $s1, 76($s0) + +main: + addi $a0, $zero, 20 + # jal insertion_sort + + lui $s0, 0x4000 + # s1 = 0x40000010 + addi $s1, $s0, 0x10 + # s0 = 0x40000060 + addi $s0, $s0, 0x60 +display_numbers_loop: + addi $s2, $zero, 0 + addi $s3, $zero, 20 +display_single_number: + sll $t0, $s2, 2 + add $t0, $s0, $t0 + lw $a0, 0($t0) + addi $a1, $s1, 0 + jal display_number + + addi $s2, $s2, 1 + sub $t0, $s3, $s2 + bgtz $t0, display_single_number + + + jal display_empty + j display_numbers_loop + + # ------------------------------------------------------ + + # a0 is the number to be displayed, a1 is the bcd control addr +display_number: + addi $sp, $sp, -32 + sw $ra, 4($sp) + sw $s0, 8($sp) + sw $s1, 12($sp) + sw $s2, 16($sp) + sw $s3, 20($sp) + sw $s4, 24($sp) + sw $s5, 28($sp) + sw $s6, 32($sp) + + # s0 is the number to be displayed + addi $s0, $a0, 0 + + # s1 is the bcd_control addr + addi $s1, $a1, 0 + + # s2 is the base addr for display digit + lui $s2, 0x4000 + addi $s2, $s2, 0x20 + + # s3 is the counter for a complete scan of 4 digit + # addi $s3, $zero, 0x17c4 + addi $s3, $zero, 0xbe2 +all_digit_scan_loop: + # s4 is the num being shifted gradually + addi $s4, $s0, 0 + # s6 is the enable digit + addi $s6, $zero, 0x100 + + addi $s5, $zero, 4 +single_digit_loop: + # get a digit + andi $t0, $s4, 0xf + # digit * 4 is the memory shift + sll $t0, $t0, 2 + add $t0, $s2, $t0 + lw $t0, 0($t0) + or $t0, $t0, $s6 + sw $t0, 0($s1) + + srl $s4, $s4, 4 + sll $s6, $s6, 1 + + addi $t0, $zero, 0x400 +wait_time_loop: + addi $t0, $t0, -1 + bgtz $t0, wait_time_loop + + addi $s5, $s5, -1 + bgtz $s5, single_digit_loop + # end of single digit loop + + # ** depends on the clock ** + # four digit, 328.68us. + # 1s / 328.68us = 3042 = (be2)hex + + addi $s3, $s3, -1 + bgtz $s3, all_digit_scan_loop + + lw $ra, 4($sp) + lw $s0, 8($sp) + lw $s1, 12($sp) + lw $s2, 16($sp) + lw $s3, 20($sp) + lw $s4, 24($sp) + lw $s5, 28($sp) + lw $s6, 32($sp) + addi $sp, $sp, 32 + jr $ra + +display_empty: + lui $t0, 0x4000 + addi $t0, $t0, 0x10 + sw $zero, 0($t0) + + lui $t0, 0x100 +display_empty_wait_loop: + addi $t0, $t0, -1 + bgtz $t0, display_empty_wait_loop + jr $ra \ No newline at end of file diff --git a/22display_num_in_mem_empty.txt b/22display_num_in_mem_empty.txt new file mode 100644 index 0000000..83d95a2 --- /dev/null +++ b/22display_num_in_mem_empty.txt @@ -0,0 +1,165 @@ +20'd0: instruction <= 32'h3c1d4000; +20'd1: instruction <= 32'h23bd07ff; +20'd2: instruction <= 32'h3c104000; +20'd3: instruction <= 32'h22100020; +20'd4: instruction <= 32'h2011003f; +20'd5: instruction <= 32'hae110000; +20'd6: instruction <= 32'h20110006; +20'd7: instruction <= 32'hae110004; +20'd8: instruction <= 32'h2011005b; +20'd9: instruction <= 32'hae110008; +20'd10: instruction <= 32'h2011004f; +20'd11: instruction <= 32'hae11000c; +20'd12: instruction <= 32'h20110066; +20'd13: instruction <= 32'hae110010; +20'd14: instruction <= 32'h2011006d; +20'd15: instruction <= 32'hae110014; +20'd16: instruction <= 32'h2011007d; +20'd17: instruction <= 32'hae110018; +20'd18: instruction <= 32'h20110007; +20'd19: instruction <= 32'hae11001c; +20'd20: instruction <= 32'h2011007f; +20'd21: instruction <= 32'hae110020; +20'd22: instruction <= 32'h2011006f; +20'd23: instruction <= 32'hae110024; +20'd24: instruction <= 32'h20110077; +20'd25: instruction <= 32'hae110028; +20'd26: instruction <= 32'h2011007c; +20'd27: instruction <= 32'hae11002c; +20'd28: instruction <= 32'h20110058; +20'd29: instruction <= 32'hae110030; +20'd30: instruction <= 32'h2011005e; +20'd31: instruction <= 32'hae110034; +20'd32: instruction <= 32'h20110079; +20'd33: instruction <= 32'hae110038; +20'd34: instruction <= 32'h20110071; +20'd35: instruction <= 32'hae11003c; +20'd36: instruction <= 32'h3c104000; +20'd37: instruction <= 32'h22100060; +20'd38: instruction <= 32'h20114b8d; +20'd39: instruction <= 32'hae110000; +20'd40: instruction <= 32'h20112307; +20'd41: instruction <= 32'hae110004; +20'd42: instruction <= 32'h3c010000; +20'd43: instruction <= 32'h3421fae0; +20'd44: instruction <= 32'h00018820; +20'd45: instruction <= 32'hae110008; +20'd46: instruction <= 32'h20117815; +20'd47: instruction <= 32'hae11000c; +20'd48: instruction <= 32'h3c010000; +20'd49: instruction <= 32'h3421c105; +20'd50: instruction <= 32'h00018820; +20'd51: instruction <= 32'hae110010; +20'd52: instruction <= 32'h3c010000; +20'd53: instruction <= 32'h342184f0; +20'd54: instruction <= 32'h00018820; +20'd55: instruction <= 32'hae110014; +20'd56: instruction <= 32'h20110db6; +20'd57: instruction <= 32'hae110018; +20'd58: instruction <= 32'h3c010000; +20'd59: instruction <= 32'h3421f21d; +20'd60: instruction <= 32'h00018820; +20'd61: instruction <= 32'hae11001c; +20'd62: instruction <= 32'h3c010000; +20'd63: instruction <= 32'h3421e97a; +20'd64: instruction <= 32'h00018820; +20'd65: instruction <= 32'hae110020; +20'd66: instruction <= 32'h3c010000; +20'd67: instruction <= 32'h3421a3b6; +20'd68: instruction <= 32'h00018820; +20'd69: instruction <= 32'hae110024; +20'd70: instruction <= 32'h3c010000; +20'd71: instruction <= 32'h34218466; +20'd72: instruction <= 32'h00018820; +20'd73: instruction <= 32'hae110028; +20'd74: instruction <= 32'h20113a25; +20'd75: instruction <= 32'hae11002c; +20'd76: instruction <= 32'h201105df; +20'd77: instruction <= 32'hae110030; +20'd78: instruction <= 32'h3c010000; +20'd79: instruction <= 32'h3421d2de; +20'd80: instruction <= 32'h00018820; +20'd81: instruction <= 32'hae110034; +20'd82: instruction <= 32'h3c010000; +20'd83: instruction <= 32'h3421ba7a; +20'd84: instruction <= 32'h00018820; +20'd85: instruction <= 32'hae110038; +20'd86: instruction <= 32'h20117809; +20'd87: instruction <= 32'hae11003c; +20'd88: instruction <= 32'h3c010000; +20'd89: instruction <= 32'h3421f6a8; +20'd90: instruction <= 32'h00018820; +20'd91: instruction <= 32'hae110040; +20'd92: instruction <= 32'h2011361d; +20'd93: instruction <= 32'hae110044; +20'd94: instruction <= 32'h20113adb; +20'd95: instruction <= 32'hae110048; +20'd96: instruction <= 32'h3c010000; +20'd97: instruction <= 32'h3421969a; +20'd98: instruction <= 32'h00018820; +20'd99: instruction <= 32'hae11004c; +20'd100: instruction <= 32'h20040014; +20'd101: instruction <= 32'h3c104000; +20'd102: instruction <= 32'h22110010; +20'd103: instruction <= 32'h22100060; +20'd104: instruction <= 32'h20120000; +20'd105: instruction <= 32'h20130014; +20'd106: instruction <= 32'h00124080; +20'd107: instruction <= 32'h02084020; +20'd108: instruction <= 32'h8d040000; +20'd109: instruction <= 32'h22250000; +20'd110: instruction <= 32'h0c000074; +20'd111: instruction <= 32'h22520001; +20'd112: instruction <= 32'h02724022; +20'd113: instruction <= 32'h1d00fff8; +20'd114: instruction <= 32'h0c00009e; +20'd115: instruction <= 32'h08000068; +20'd116: instruction <= 32'h23bdffe0; +20'd117: instruction <= 32'hafbf0004; +20'd118: instruction <= 32'hafb00008; +20'd119: instruction <= 32'hafb1000c; +20'd120: instruction <= 32'hafb20010; +20'd121: instruction <= 32'hafb30014; +20'd122: instruction <= 32'hafb40018; +20'd123: instruction <= 32'hafb5001c; +20'd124: instruction <= 32'hafb60020; +20'd125: instruction <= 32'h20900000; +20'd126: instruction <= 32'h20b10000; +20'd127: instruction <= 32'h3c124000; +20'd128: instruction <= 32'h22520020; +20'd129: instruction <= 32'h20130be2; +20'd130: instruction <= 32'h22140000; +20'd131: instruction <= 32'h20160100; +20'd132: instruction <= 32'h20150004; +20'd133: instruction <= 32'h3288000f; +20'd134: instruction <= 32'h00084080; +20'd135: instruction <= 32'h02484020; +20'd136: instruction <= 32'h8d080000; +20'd137: instruction <= 32'h01164025; +20'd138: instruction <= 32'hae280000; +20'd139: instruction <= 32'h0014a102; +20'd140: instruction <= 32'h0016b040; +20'd141: instruction <= 32'h20080400; +20'd142: instruction <= 32'h2108ffff; +20'd143: instruction <= 32'h1d00fffe; +20'd144: instruction <= 32'h22b5ffff; +20'd145: instruction <= 32'h1ea0fff3; +20'd146: instruction <= 32'h2273ffff; +20'd147: instruction <= 32'h1e60ffee; +20'd148: instruction <= 32'h8fbf0004; +20'd149: instruction <= 32'h8fb00008; +20'd150: instruction <= 32'h8fb1000c; +20'd151: instruction <= 32'h8fb20010; +20'd152: instruction <= 32'h8fb30014; +20'd153: instruction <= 32'h8fb40018; +20'd154: instruction <= 32'h8fb5001c; +20'd155: instruction <= 32'h8fb60020; +20'd156: instruction <= 32'h23bd0020; +20'd157: instruction <= 32'h03e00008; +20'd158: instruction <= 32'h3c084000; +20'd159: instruction <= 32'h21080010; +20'd160: instruction <= 32'had000000; +20'd161: instruction <= 32'h3c080100; +20'd162: instruction <= 32'h2108ffff; +20'd163: instruction <= 32'h1d00fffe; +20'd164: instruction <= 32'h03e00008; diff --git a/22display_num_in_mem_empty_mars.txt b/22display_num_in_mem_empty_mars.txt new file mode 100644 index 0000000..9404b66 --- /dev/null +++ b/22display_num_in_mem_empty_mars.txt @@ -0,0 +1,165 @@ +3c1d4000 +23bd07ff +3c104000 +22100020 +2011003f +ae110000 +20110006 +ae110004 +2011005b +ae110008 +2011004f +ae11000c +20110066 +ae110010 +2011006d +ae110014 +2011007d +ae110018 +20110007 +ae11001c +2011007f +ae110020 +2011006f +ae110024 +20110077 +ae110028 +2011007c +ae11002c +20110058 +ae110030 +2011005e +ae110034 +20110079 +ae110038 +20110071 +ae11003c +3c104000 +22100060 +20114b8d +ae110000 +20112307 +ae110004 +3c010000 +3421fae0 +00018820 +ae110008 +20117815 +ae11000c +3c010000 +3421c105 +00018820 +ae110010 +3c010000 +342184f0 +00018820 +ae110014 +20110db6 +ae110018 +3c010000 +3421f21d +00018820 +ae11001c +3c010000 +3421e97a +00018820 +ae110020 +3c010000 +3421a3b6 +00018820 +ae110024 +3c010000 +34218466 +00018820 +ae110028 +20113a25 +ae11002c +201105df +ae110030 +3c010000 +3421d2de +00018820 +ae110034 +3c010000 +3421ba7a +00018820 +ae110038 +20117809 +ae11003c +3c010000 +3421f6a8 +00018820 +ae110040 +2011361d +ae110044 +20113adb +ae110048 +3c010000 +3421969a +00018820 +ae11004c +20040014 +3c104000 +22110010 +22100060 +20120000 +20130014 +00124080 +02084020 +8d040000 +22250000 +0c000074 +22520001 +02724022 +1d00fff8 +0c00009e +08000068 +23bdffe0 +afbf0004 +afb00008 +afb1000c +afb20010 +afb30014 +afb40018 +afb5001c +afb60020 +20900000 +20b10000 +3c124000 +22520020 +20130be2 +22140000 +20160100 +20150004 +3288000f +00084080 +02484020 +8d080000 +01164025 +ae280000 +0014a102 +0016b040 +20080400 +2108ffff +1d00fffe +22b5ffff +1ea0fff3 +2273ffff +1e60ffee +8fbf0004 +8fb00008 +8fb1000c +8fb20010 +8fb30014 +8fb40018 +8fb5001c +8fb60020 +23bd0020 +03e00008 +3c084000 +21080010 +ad000000 +3c080100 +2108ffff +1d00fffe +03e00008