littlebigcomputer/programs/parva/binary_to_decimal_1.lbpasm
2023-10-30 17:50:05 +01:00

103 lines
2.1 KiB
Text

lw x0, value
li x1, 0
# https://ridiculousfish.com/blog/posts/labor-of-division-episode-i.html
dec_to_bin_loop:
lw x4, ten_powers(x1)
beqz x4, end_dec_to_bin_loop
slli x5, x1, 1
lw x3, ten_divisors(x5)
lw x5, (ten_divisors + 1)(x5)
mulhu x6, x0, x3
sub x7, x0, x6
srli x7, x7, 1
add x3, x7, x6
srl x3, x3, x5 # x3 = digit of result
sw x3, result_string(x1)
mulu x3, x3, x4
sub x0, x0, x3
addi x1, x1, 1
b dec_to_bin_loop
end_dec_to_bin_loop:
sw x0, result_string(x1)
li x0, -1
li x6, 1 # cursor x
li x7, 1 # cursor y
sw x0, 0b01_0100_000000(upper) # gpu clear screen
skip_zeroes:
addi x0, x0, 1
lw x1, result_string(x0)
beqz x1, skip_zeroes
print_loop:
sd x67, 0b01_0000_000000(upper) # gpu move cursor
lw x1, result_string(x0)
bltz x1, end_print_loop
slli x1, x1, 1
lw x2, char_pixels(x1)
lw x3, (char_pixels + 1)(x1)
sd x23, 0b01_0010_000000(upper) # gpu print char
addi x6, x6, 4
addi x0, x0, 1
b print_loop
end_print_loop:
sd x01, 0b01_0011_000000(upper) # gpu show buffer
wfi
ten_powers:
.data 10000000
.data 1000000
.data 100000
.data 10000
.data 1000
.data 100
.data 10
.data 0
ten_divisors:
.data 0xad7f2a 23 # 10000000
.data 0x0c6f7b 19 # 1000000
.data 0x4f8b59 16 # 100000
.data 0xa36e2f 13 # 10000
.data 0x0624de 9 # 1000
.data 0x47ae15 6 # 100
.data 0x99999a 3 # 10
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
result_string:
.repeat 0 8
.data -1
value:
.data 6942069