littlebigcomputer/programs/parva_0.1/binary_to_decimal_2.lbpasm
2024-01-09 21:05:38 +01:00

109 lines
2.2 KiB
Text

li sp, stack
j main
main:
sw x0, gpu_clear_screen(upper)
li x6, 1
li x7, 1
sd x67, cursor_pos
li a0, 6942069
call print_number
li x6, 1
li x7, 7
sd x67, cursor_pos
li a0, 12345678
call print_number
wfi
.eq gpu_clear_screen 0b01_0100_000000
.eq gpu_move_cursor 0b01_0000_000000
.eq gpu_print_char 0b01_0010_000000
.eq gpu_show_buffer 0b01_0011_000000
# void print_number(*void return: ra, int number: a0)
.address 128
print_number:
push ra
mv x0, a0
li x2, 0
li x4, 10000000
.align 2
print_number__bin_to_dec_loop:
divu x3, x0, x4
remu x0, x0, x4
sw x3, print_number__result_string(x2)
divui x4, x4, 10
addi x2, x2, 1
bnez x4, print_number__bin_to_dec_loop
li x0, -1
ld x67, cursor_pos
print_number__skip_zeroes:
addi x0, x0, 1
lw x4, print_number__result_string(x0)
beqz x4, print_number__skip_zeroes
print_number__print_loop:
lw x4, print_number__result_string(x0)
bltz x4, print_number__end_print_loop
sd x67, gpu_move_cursor(upper)
slli x4, x4, 1
ld x23, print_number__char_pixels(x4)
addi x6, x6, 4
addi x0, x0, 1
sd x23, gpu_print_char(upper)
b print_number__print_loop
print_number__end_print_loop:
sd x01, gpu_show_buffer(upper) # gpu show buffer
sw x6, (cursor_pos + 0)
pop ra
j ra
print_number__char_pixels:
.data 0b111000_101000_101000_101000 # 0
.data 0b111000_000000_000000_000000
.data 0b001000_001000_001000_001000 # 1
.data 0b001000_000000_000000_000000
.data 0b111000_001000_111000_100000 # 2
.data 0b111000_000000_000000_000000
.data 0b111000_001000_111000_001000 # 3
.data 0b111000_000000_000000_000000
.data 0b101000_101000_111000_001000 # 4
.data 0b001000_000000_000000_000000
.data 0b111000_100000_111000_001000 # 5
.data 0b111000_000000_000000_000000
.data 0b111000_100000_111000_101000 # 6
.data 0b111000_000000_000000_000000
.data 0b111000_001000_001000_010000 # 7
.data 0b010000_000000_000000_000000
.data 0b111000_101000_111000_101000 # 8
.data 0b111000_000000_000000_000000
.data 0b111000_101000_111000_001000 # 9
.data 0b001000_000000_000000_000000
print_number__result_string:
.repeat 0 8
.data -1
# end print_number()
.align 2
cursor_pos:
.data 1
.data 1
.align 2
stack:
.data 0