mirror of
https://github.com/Asraelite/littlebigcomputer.git
synced 2025-07-17 08:16:50 +00:00
103 lines
2.1 KiB
Text
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
|