fixed a couple of emulator bugs, including fixing shift instructions. finished implementing lib/io/print/print_hex_byte and print_hex_word

This commit is contained in:
2025-06-25 16:22:32 +01:00
parent c171b0db89
commit 1101331f70
9 changed files with 162 additions and 124 deletions
+40 -17
View File
@@ -82,14 +82,48 @@ print_byte:
// ------------------------------------------
// prints the value of arg[0] to the screen in hex.
print_hex_word:
push bpr
mov spr, bpr
ldw current, rg1
ldb bpr, rg0, 8
push rg0
call _print_hex_byte
addi spr, 4
ldb bpr, rg0, 9
push rg0
call _print_hex_byte
addi spr, 4
ldb bpr, rg0, 10
push rg0
call _print_hex_byte
addi spr, 4
ldb bpr, rg0, 11
push rg0
call _print_hex_byte
addi spr, 4
jmp _end
// ------------------------------------------
// prints the last byte of arg[0] to the screen in hex.
print_hex_byte:
push bpr
mov spr, bpr
// put arg byte in rg0
ldw bpr, rg0, 8
ldw current, rg1
call _print_hex_byte
jmp _end
// function body
_print_hex_byte:
// mask to get lower nibble
lli 0xF, rg2
// save rg0 state
@@ -102,8 +136,9 @@ print_hex_byte:
and rg0, rg2, rg0
call _print_hex_nibble
jmp _end
return
// print a hex digit
_print_hex_nibble:
lli 10, rg3
cmp rg0, rg3
@@ -111,26 +146,14 @@ _print_hex_nibble:
addi rg0, 0x37, rg0
stb rg0, rg1
addi rg1, 1
jmp _end
return
// helper function.
_print_hex_nibble_number:
addi rg0, 0x30, rg0
stb rg0, rg1
addi rg1, 1
jmp _end
// ------------------------------------------
// prints the value of arg[0] to the screen in hex.
print_hex_word:
push bpr
mov spr, bpr
ldw bpr, rg0, 8
ldw current, rg1
stw rg0, rg1
addi rg1, 4
jmp _end
return
// ------------------------------------------
// resets the cursor position on the screen to 0x20000. (0,0)
+2 -2
View File
@@ -16,9 +16,9 @@ start:
stw rg0, idr, 4
lli 0x20, rg0
lwi 0x1234abcd, rg0
push rg0
call print::print_hex_byte
call print::print_hex_word
pop zero
hlt
Binary file not shown.