Files
DSA/resources/bench_decomp.txt
zxq5 27d38eaf89 mega refactor:
essentially completely reorganised the project.
previous contents of the dsa folder have now been split into emulator/ tooling/ and libraries/
libraries is for common functionality across crates, tooling is for core binaries needed for building and debugging DSA projects, including dsx client/server/build
emulator contains the dsa_emulator crate that implements the core DSA emulator, the dsa_gui crate that implements the graphical user interface for the emulator & all future tooling under a unified application, and finally the dsa_cli crate which will eventually provide lightweight wrapper for the core emulator, simply providing a tool for running DSA binaries without the overhead of a heavy GUI.
2026-08-01 01:28:11 +01:00

162 lines
3.6 KiB
Plaintext

; ==== symbols ====
; clear 0x000001d0 TEXT global
; _loop 0x00000018 TEXT global
; print_whitespace 0x00000150 TEXT global
; _print_hex_nibble_number 0x00000140 TEXT global
; _init 0x00000000 TEXT global
; _print_loop 0x00000068 TEXT global
; print_hex_byte 0x000000e0 TEXT global
; _print_hex_byte 0x00000100 TEXT global
; _end 0x00000200 TEXT global
; print_byte 0x000000ac TEXT global
; _newline_mod 0x0000019c TEXT global
; reset 0x000001b8 TEXT global
; _newline_done 0x000001ac TEXT global
; msg 0x00000218 DATA global
; display 0x00000228 DATA global
; current 0x0000022c DATA global
; _clear_loop 0x000001e8 TEXT global
; _print_hex_nibble 0x00000124 TEXT global
; print 0x00000040 TEXT global
; stack 0x00000224 DATA global
; _print_end 0x00000084 TEXT global
; newline 0x00000174 TEXT global
; ==== data ====
db "hello world"
dw 0x00000000
dw 0x00000010
dw 0x00000000
dw 0x00000002
dw 0x00000002
; ==== text ====
_init:
ldw stack, Bpr, 0x0000
mov Bpr, Spr
lwi 0x000f4240, Rg5
_loop:
call reset
lwi msg, Rg0
push Rg0
call print
pop Zero
subi Rg5, Rg5, 0x0001
igt Rg5, Zero, Rg4
jnz Rg4, _loop
hlt
print:
push Bpr
mov Spr, Bpr
push Rg0
push Rg1
push Rg2
push Rg3
ldw Bpr, Rg0, 0x0008
ldw current, Rg1, 0x0000
_print_loop:
ldb Rg0, Rg2, 0x0000
ieq Rg2, Zero, Rg3
jnz Rg3, _print_end
stb Rg2, Rg1, 0x0000
addi Rg0, Rg0, 0x0001
addi Rg1, Rg1, 0x0001
jmp _print_loop
_print_end:
stw current, Rg1, 0x0000
pop Rg3
pop Rg2
pop Rg1
pop Rg0
mov Bpr, Spr
pop Bpr
ret
print_byte:
push Bpr
mov Spr, Bpr
push Rg0
push Rg1
ldw Bpr, Rg0, 0x0008
ldw current, Rg1, 0x0000
stb Rg0, Rg1, 0x0000
addi Rg1, Rg1, 0x0001
pop Rg1
pop Rg0
jmp _end
print_hex_byte:
push Bpr
mov Spr, Bpr
ldw Bpr, Rg0, 0x0008
ldw current, Rg1, 0x0000
call _print_hex_byte
jmp _end
_print_hex_byte:
lli Rg2, 0x000f
push Rg0
shr Rg0, Rg0, Zero, 4
and Rg0, Rg2, Rg0
call _print_hex_nibble
pop Rg0
and Rg0, Rg2, Rg0
call _print_hex_nibble
ret
_print_hex_nibble:
lli Rg3, 0x000a
ilt Rg0, Rg3, Rg4
jnz Rg4, _print_hex_nibble_number
addi Rg0, Rg0, 0x0037
stb Rg0, Rg1, 0x0000
addi Rg1, Rg1, 0x0001
ret
_print_hex_nibble_number:
addi Rg0, Rg0, 0x0030
stb Rg0, Rg1, 0x0000
addi Rg1, Rg1, 0x0001
ret
print_whitespace:
push Bpr
mov Spr, Bpr
ldw current, Rg1, 0x0000
lli Rg0, 0x0020
stb Rg0, Rg1, 0x0000
addi Rg1, Rg1, 0x0001
jmp _end
newline:
push Bpr
mov Spr, Bpr
ldw display, Rg0, 0x0000
ldw current, Rg1, 0x0000
sub Rg1, Rg0, Rg2
lli Rg3, 0x0050
_newline_mod:
ilt Rg2, Rg3, Rg4
jnz Rg4, _newline_done
sub Rg2, Rg3, Rg2
jmp _newline_mod
_newline_done:
sub Rg1, Rg2, Rg1
addi Rg1, Rg1, 0x0050
jmp _end
reset:
push Bpr
mov Spr, Bpr
ldw display, Rg1, 0x0000
jmp _end
clear:
push Bpr
mov Spr, Bpr
lli Rg0, 0x01f4
ldw display, Rg1, 0x0000
_clear_loop:
subi Rg0, Rg0, 0x0001
stw Zero, Rg1, 0x0000
addi Rg1, Rg1, 0x0004
igt Rg0, Zero, Rg4
jnz Rg4, _clear_loop
jmp _end
_end:
stw current, Rg1, 0x0000
mov Bpr, Spr
pop Bpr
ret