updates to dsa libs
This commit is contained in:
@@ -29,6 +29,8 @@
|
|||||||
// jmp print::print_word
|
// jmp print::print_word
|
||||||
//
|
//
|
||||||
|
|
||||||
|
include maths "../maths/core.dsa"
|
||||||
|
|
||||||
dw display: 0x20000
|
dw display: 0x20000
|
||||||
dw current: 0x20000
|
dw current: 0x20000
|
||||||
|
|
||||||
@@ -155,6 +157,40 @@ _print_hex_nibble_number:
|
|||||||
addi rg1, 1
|
addi rg1, 1
|
||||||
return
|
return
|
||||||
|
|
||||||
|
// ------------------------------------------
|
||||||
|
// print whitespace
|
||||||
|
print_whitespace:
|
||||||
|
push bpr
|
||||||
|
mov spr, bpr
|
||||||
|
|
||||||
|
ldw current, rg1
|
||||||
|
lli 0x20, rg0
|
||||||
|
stb rg0, rg1
|
||||||
|
addi rg1, 1
|
||||||
|
jmp _end
|
||||||
|
|
||||||
|
// ------------------------------------------
|
||||||
|
// print newline
|
||||||
|
print_newline:
|
||||||
|
push bpr
|
||||||
|
mov spr, bpr
|
||||||
|
|
||||||
|
ldw display, rg0
|
||||||
|
ldw current, rg1
|
||||||
|
sub rg1, rg0, rg0
|
||||||
|
|
||||||
|
lwi 80, rg2
|
||||||
|
push rg0
|
||||||
|
push rg2
|
||||||
|
call maths::divmod
|
||||||
|
pop rg2
|
||||||
|
addi rg2, 80
|
||||||
|
ldw display, rg1
|
||||||
|
add rg1, rg2, rg1
|
||||||
|
|
||||||
|
// _end saves the display state
|
||||||
|
jmp _end
|
||||||
|
|
||||||
// ------------------------------------------
|
// ------------------------------------------
|
||||||
// resets the cursor position on the screen to 0x20000. (0,0)
|
// resets the cursor position on the screen to 0x20000. (0,0)
|
||||||
reset:
|
reset:
|
||||||
|
|||||||
@@ -1,18 +1,30 @@
|
|||||||
fib_n:
|
include print "../io/print.dsa"
|
||||||
pop ret
|
|
||||||
pop rg0 // n
|
fib_n:
|
||||||
|
push bpr
|
||||||
|
mov spr, bpr
|
||||||
|
|
||||||
|
ldw bpr, rg1, 8 // load op 2
|
||||||
|
|
||||||
lli 0, rg1
|
|
||||||
lli 1, rg2
|
|
||||||
|
|
||||||
start:
|
start:
|
||||||
|
mov rg1, rg2
|
||||||
add rg1, rg2, acc
|
add rg1, rg2, acc
|
||||||
|
|
||||||
|
pusha 4
|
||||||
push rg1
|
push rg1
|
||||||
|
call print::print_hex_word
|
||||||
|
pop rg1
|
||||||
|
popa 4
|
||||||
|
|
||||||
mov rg2, rg1
|
mov rg2, rg1
|
||||||
mov acc, rg2
|
mov acc, rg2
|
||||||
|
|
||||||
cmp rg0, zero
|
cmp rg0, zero
|
||||||
dec rg0
|
dec rg0
|
||||||
|
|
||||||
jgt start
|
jgt start
|
||||||
jmp 4, ret
|
|
||||||
|
stw rg1, bpr, 8
|
||||||
|
mov bpr, spr
|
||||||
|
pop bpr
|
||||||
|
return
|
||||||
|
|||||||
@@ -1,33 +1,28 @@
|
|||||||
include print "./lib/io/print.dsa"
|
|
||||||
|
|
||||||
dw idt: 0xFFFF0000
|
dw idt: 0xFFFF0000
|
||||||
dw stack: 0x10000
|
dw stack: 0x10000
|
||||||
db interrupt: "INT: Hello world"
|
|
||||||
|
|
||||||
init:
|
init:
|
||||||
|
// setup interrupt handlers
|
||||||
|
ldw idt, idr
|
||||||
|
lwi handle_hard_fault, rg0
|
||||||
|
stw rg0, idr, 4
|
||||||
// set up a stack.
|
// set up a stack.
|
||||||
ldw stack, bpr
|
ldw stack, bpr
|
||||||
mov bpr, spr
|
mov bpr, spr
|
||||||
|
|
||||||
start:
|
start:
|
||||||
ldw idt, idr
|
lwi 10, rg0
|
||||||
|
push rg0
|
||||||
lwi handle_hard_fault, rg0
|
call maths::fib_n
|
||||||
stw rg0, idr, 4
|
pop zero
|
||||||
|
hlt
|
||||||
|
|
||||||
lwi 0x1234abcd, rg0
|
|
||||||
push rg0
|
|
||||||
call print::print_hex_word
|
|
||||||
pop zero
|
|
||||||
hlt
|
|
||||||
|
|
||||||
|
|
||||||
|
// fault handler in case we fail DSA.
|
||||||
dw hard_fault_err: "FATAL: Illegal Instruction or Memory Access!"
|
dw hard_fault_err: "FATAL: Illegal Instruction or Memory Access!"
|
||||||
handle_hard_fault:
|
handle_hard_fault:
|
||||||
|
call print::clear
|
||||||
call print::reset
|
call print::reset
|
||||||
lwi hard_fault_err, rg0
|
lwi hard_fault_err, rg0
|
||||||
push rg0
|
push rg0
|
||||||
call print::print
|
call print::print
|
||||||
pop zero
|
pop zero
|
||||||
hlt
|
hlt
|
||||||
@@ -0,0 +1,83 @@
|
|||||||
|
include print "./lib/io/print.dsa"
|
||||||
|
|
||||||
|
dw idt: 0xFFFF0000
|
||||||
|
dw stack: 0x10000
|
||||||
|
init:
|
||||||
|
// setup interrupt handlers
|
||||||
|
ldw idt, idr
|
||||||
|
lwi handle_hard_fault, rg0
|
||||||
|
stw rg0, idr, 4
|
||||||
|
// set up a stack.
|
||||||
|
ldw stack, bpr
|
||||||
|
mov bpr, spr
|
||||||
|
|
||||||
|
|
||||||
|
db string: "I won, the game!"
|
||||||
|
db hexbyte: 0xab
|
||||||
|
dw hexword: 0x1234abcd
|
||||||
|
db replace: "I lost"
|
||||||
|
|
||||||
|
start:
|
||||||
|
// test print string
|
||||||
|
lwi string, rg0
|
||||||
|
push rg0
|
||||||
|
call print::print
|
||||||
|
pop zero
|
||||||
|
|
||||||
|
// test print hex byte.
|
||||||
|
ldb hexbyte, rg0
|
||||||
|
push rg0
|
||||||
|
call print::print_hex_byte
|
||||||
|
pop zero
|
||||||
|
|
||||||
|
// test print hex word.
|
||||||
|
ldw hexword, rg0
|
||||||
|
push rg0
|
||||||
|
call print::print_hex_word
|
||||||
|
pop zero
|
||||||
|
|
||||||
|
// test print char
|
||||||
|
lli 0x40, rg0 // print @
|
||||||
|
push rg0
|
||||||
|
call print::print_byte
|
||||||
|
pop zero
|
||||||
|
|
||||||
|
// test newline
|
||||||
|
call print::print_newline
|
||||||
|
|
||||||
|
lwi string rg0
|
||||||
|
push rg0
|
||||||
|
call print::print
|
||||||
|
|
||||||
|
// test print word
|
||||||
|
lwi 0x31323334, rg0 // print 1234
|
||||||
|
push rg0
|
||||||
|
call print::print_word
|
||||||
|
pop zero
|
||||||
|
|
||||||
|
// test reset cursor pos
|
||||||
|
call print::reset
|
||||||
|
|
||||||
|
// test print string at reset pos
|
||||||
|
lwi replace, rg0
|
||||||
|
push rg0
|
||||||
|
call print::print
|
||||||
|
pop zero
|
||||||
|
|
||||||
|
lli 3, rg0
|
||||||
|
ldw rg0, rg0
|
||||||
|
|
||||||
|
hlt
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// fault handler in case we fail DSA.
|
||||||
|
dw hard_fault_err: "FATAL: Illegal Instruction or Memory Access!"
|
||||||
|
handle_hard_fault:
|
||||||
|
call print::clear
|
||||||
|
call print::reset
|
||||||
|
lwi hard_fault_err, rg0
|
||||||
|
push rg0
|
||||||
|
call print::print
|
||||||
|
pop zero
|
||||||
|
hlt
|
||||||
Reference in New Issue
Block a user