documentation changes and new dsa binaries and test files.
This commit is contained in:
@@ -1,2 +1,4 @@
|
||||
/target
|
||||
Cargo.lock
|
||||
/doc/.obsidian
|
||||
/.idea
|
||||
|
||||
Generated
+2
@@ -14,6 +14,8 @@
|
||||
<sourceFolder url="file://$MODULE_DIR$/dsx/dsx_client/src" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/dsx/dsx_common/src" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/dsx/dsx_server/src" isTestSource="false" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/.idea/caches" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/doc/.obsidian" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/target" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 1.9 MiB |
+26
@@ -0,0 +1,26 @@
|
||||
# High Level programming language
|
||||
|
||||
```dsc
|
||||
class User {
|
||||
priv const MAX: u32 = u32::MAX;
|
||||
priv static COUNT: Atomic<u32> = 0;
|
||||
|
||||
priv field id: u32;
|
||||
priv field name: String;
|
||||
priv field age: u8;
|
||||
|
||||
pub fn new(view: UserView) -> Self {
|
||||
let id = COUNT.fetch_add(1);
|
||||
Self { ... }
|
||||
}
|
||||
|
||||
pub view UserView { name, age };
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let user1 = User::new("name1", 1)
|
||||
|
||||
let user2view = User::UserView { "name2", 2 };
|
||||
let user2 = User::new(user2view)
|
||||
}
|
||||
```
|
||||
@@ -0,0 +1 @@
|
||||
# Intermediate/Systems programming language
|
||||
@@ -0,0 +1,12 @@
|
||||
## What are processes in this context?
|
||||
|
||||
- a trait that a type must implement in order to be coordinated by some "process manager"
|
||||
## Required Capabilities?
|
||||
- start
|
||||
- pause
|
||||
- resume
|
||||
- terminate
|
||||
- report progress & send back logs
|
||||
- communicate when there's an error
|
||||
## How to coordinate them
|
||||
- run each process in parallel
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,161 @@
|
||||
; ==== 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
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,592 @@
|
||||
; ==== symbols ====
|
||||
; _print_hex_nibble 0x00000328 TEXT global
|
||||
; increment 0x000000ec TEXT global
|
||||
; _clear_loop 0x000003ec TEXT global
|
||||
; end 0x000000c0 TEXT global
|
||||
; reset 0x000003bc TEXT global
|
||||
; _print_end 0x00000288 TEXT global
|
||||
; decrement 0x000000f4 TEXT global
|
||||
; open_left 0x000001c8 TEXT global
|
||||
; open_right 0x0000017c TEXT global
|
||||
; expr_end 0x00000198 TEXT global
|
||||
; newline 0x00000378 TEXT global
|
||||
; input 0x0000013c TEXT global
|
||||
; loop_start 0x00000050 TEXT global
|
||||
; loop_end 0x000000e4 TEXT global
|
||||
; _traverse_right 0x00000158 TEXT global
|
||||
; dec_ptr 0x0000010c TEXT global
|
||||
; expr_start 0x0000014c TEXT global
|
||||
; print_hex_byte 0x000002e4 TEXT global
|
||||
; print_byte 0x000002b0 TEXT global
|
||||
; success 0x000009e8 DATA global
|
||||
; data 0x000005e8 DATA global
|
||||
; error 0x000005c4 DATA global
|
||||
; clear 0x000003d4 TEXT global
|
||||
; _print_hex_byte 0x00000304 TEXT global
|
||||
; _bf_reset_clear_data 0x00000208 TEXT global
|
||||
; bf_reset 0x000001e4 TEXT global
|
||||
; _end 0x00000404 TEXT global
|
||||
; _traverse_left_start 0x000001a0 TEXT global
|
||||
; _init 0x00000000 TEXT global
|
||||
; counter 0x000005dc DATA global
|
||||
; _print_loop 0x0000026c TEXT global
|
||||
; print_whitespace 0x00000354 TEXT global
|
||||
; inc_ptr 0x000000fc TEXT global
|
||||
; current 0x000009f8 DATA global
|
||||
; _traverse_right_start 0x00000154 TEXT global
|
||||
; print 0x00000244 TEXT global
|
||||
; init 0x00000010 TEXT global
|
||||
; stack 0x000005e0 DATA global
|
||||
; _traverse_left 0x000001a4 TEXT global
|
||||
; start 0x0000001c TEXT global
|
||||
; close_left 0x000001dc TEXT global
|
||||
; input_addr 0x000005e4 DATA global
|
||||
; close_right 0x00000184 TEXT global
|
||||
; display 0x000009f4 DATA global
|
||||
; _newline_done 0x000003b0 TEXT global
|
||||
; program 0x0000041c DATA global
|
||||
; _newline_mod 0x000003a0 TEXT global
|
||||
; _print_hex_nibble_number 0x00000344 TEXT global
|
||||
; output 0x0000011c TEXT global
|
||||
|
||||
; ==== data ====
|
||||
db "++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++>++++++++++++++++>>+<<[>>>>++++++++++<<[->+>-[>+>>]>[+[-<+>]>+>>]<<<<<<]>[<+>-]>[-]>>>++++++++++<[->-[>+>>]>[+[-<+>]>+>>]<<<<<]>[-]>>[++++++++++++++++++++++++++++++++++++++++++++++++.[-]]<[++++++++++++++++++++++++++++++++++++++++++++++++.[-]]<<<++++++++++++++++++++++++++++++++++++++++++++++++.[-]<<<<<<<.>.>>[>>+<<-]>[>+<<+>-]>[<+>-]<<<-]<<++..."
|
||||
db "Invalid Instruction!"
|
||||
dw 0x00000000
|
||||
dw 0x000000ff
|
||||
dw 0x00000000
|
||||
dw 0x00000001
|
||||
dw 0x00000003
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
db "Success!"
|
||||
dw 0x00000000
|
||||
dw 0x00000000
|
||||
dw 0x00000002
|
||||
dw 0x00000002
|
||||
|
||||
; ==== text ====
|
||||
_init:
|
||||
ldw stack, Bpr, 0x0000
|
||||
mov Bpr, Spr
|
||||
init:
|
||||
ldw counter, Rg7, 0x0000
|
||||
start:
|
||||
call bf_reset
|
||||
lwi program, Rg0
|
||||
lwi data, Rg1
|
||||
lli Rg8, 0x002b
|
||||
lli Rg9, 0x002d
|
||||
lli Rga, 0x003e
|
||||
lli Rgb, 0x003c
|
||||
lli Rgc, 0x002e
|
||||
lli Rgd, 0x002c
|
||||
lli Rge, 0x005b
|
||||
lli Rgf, 0x005d
|
||||
loop_start:
|
||||
ldb Rg0, Rg3, 0x0000
|
||||
ieq Rg3, Rg8, Rg4
|
||||
jnz Rg4, increment
|
||||
ieq Rg3, Rg9, Rg4
|
||||
jnz Rg4, decrement
|
||||
ieq Rg3, Rga, Rg4
|
||||
jnz Rg4, inc_ptr
|
||||
ieq Rg3, Rgb, Rg4
|
||||
jnz Rg4, dec_ptr
|
||||
ieq Rg3, Rgc, Rg4
|
||||
jnz Rg4, output
|
||||
ieq Rg3, Rgd, Rg4
|
||||
jnz Rg4, input
|
||||
ieq Rg3, Rge, Rg4
|
||||
jnz Rg4, expr_start
|
||||
ieq Rg3, Rgf, Rg4
|
||||
jnz Rg4, expr_end
|
||||
ieq Rg3, Zero, Rg4
|
||||
jnz Rg4, end
|
||||
lwi error, Rg2
|
||||
push Rg0
|
||||
push Rg1
|
||||
push Rg2
|
||||
call print
|
||||
pop Zero
|
||||
pop Rg1
|
||||
pop Rg0
|
||||
end:
|
||||
call newline
|
||||
lwi success, Rg0
|
||||
push Rg0
|
||||
call print
|
||||
pop Zero
|
||||
subi Rg7, Rg7, 0x0001
|
||||
jnz Rg7, start
|
||||
hlt
|
||||
loop_end:
|
||||
addi Rg0, Rg0, 0x0001
|
||||
jmp loop_start
|
||||
increment:
|
||||
addi Rg2, Rg2, 0x0001
|
||||
jmp loop_end
|
||||
decrement:
|
||||
subi Rg2, Rg2, 0x0001
|
||||
jmp loop_end
|
||||
inc_ptr:
|
||||
stw Rg2, Rg1, 0x0000
|
||||
addi Rg1, Rg1, 0x0004
|
||||
ldw Rg1, Rg2, 0x0000
|
||||
jmp loop_end
|
||||
dec_ptr:
|
||||
stw Rg2, Rg1, 0x0000
|
||||
subi Rg1, Rg1, 0x0004
|
||||
ldw Rg1, Rg2, 0x0000
|
||||
jmp loop_end
|
||||
output:
|
||||
push Rg0
|
||||
push Rg1
|
||||
push Rg2
|
||||
call print_byte
|
||||
pop Zero
|
||||
pop Rg1
|
||||
pop Rg0
|
||||
jmp loop_end
|
||||
input:
|
||||
ldw input_addr, Rg2, 0x0000
|
||||
jmp loop_end
|
||||
expr_start:
|
||||
ieq Rg2, Zero, Rg4
|
||||
jez Rg4, loop_end
|
||||
_traverse_right_start:
|
||||
push Rg8
|
||||
_traverse_right:
|
||||
addi Rg0, Rg0, 0x0001
|
||||
ldb Rg0, Rg3, 0x0000
|
||||
ieq Rg3, Rge, Rg4
|
||||
jnz Rg4, open_right
|
||||
ieq Rg3, Rgf, Rg4
|
||||
jnz Rg4, close_right
|
||||
ieq Rg3, Zero, Rg4
|
||||
jnz Rg4, end
|
||||
jmp _traverse_right
|
||||
open_right:
|
||||
push Zero
|
||||
jmp _traverse_right
|
||||
close_right:
|
||||
pop Rg4
|
||||
ieq Rg4, Zero, Rg5
|
||||
jnz Rg5, _traverse_right
|
||||
addi Rg0, Rg0, 0x0001
|
||||
jmp loop_start
|
||||
expr_end:
|
||||
ieq Rg2, Zero, Rg4
|
||||
jnz Rg4, loop_end
|
||||
_traverse_left_start:
|
||||
push Rg8
|
||||
_traverse_left:
|
||||
subi Rg0, Rg0, 0x0001
|
||||
ldb Rg0, Rg3, 0x0000
|
||||
ieq Rg3, Rge, Rg4
|
||||
jnz Rg4, open_left
|
||||
ieq Rg3, Rgf, Rg4
|
||||
jnz Rg4, close_left
|
||||
ieq Rg3, Zero, Rg4
|
||||
jnz Rg4, end
|
||||
jmp _traverse_left
|
||||
open_left:
|
||||
pop Rg4
|
||||
ieq Rg4, Zero, Rg5
|
||||
jnz Rg5, _traverse_left
|
||||
addi Rg0, Rg0, 0x0001
|
||||
jmp loop_start
|
||||
close_left:
|
||||
push Zero
|
||||
jmp _traverse_left
|
||||
bf_reset:
|
||||
push Bpr
|
||||
mov Spr, Bpr
|
||||
push Rg0
|
||||
push Rg1
|
||||
call clear
|
||||
call reset
|
||||
lli Rg0, 0x0100
|
||||
lwi data, Rg1
|
||||
_bf_reset_clear_data:
|
||||
subi Rg0, Rg0, 0x0001
|
||||
stw Zero, Rg1, 0x0000
|
||||
addi Rg1, Rg1, 0x0004
|
||||
igt Rg0, Zero, Rg4
|
||||
jnz Rg4, _bf_reset_clear_data
|
||||
pop Rg1
|
||||
pop Rg0
|
||||
lwi program, Rg0
|
||||
lwi data, Rg1
|
||||
lli Rg2, 0x0000
|
||||
mov Bpr, Spr
|
||||
pop Bpr
|
||||
ret
|
||||
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
|
||||
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user