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.
162 lines
3.6 KiB
Plaintext
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
|