include fib: "./lib/maths/fib.dsa" 
include maths: "./lib/maths/core.dsa"
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

dw string: "hello world"
start:

	lwi 37, rg0
	lwi 12, rg1
	push rg0
	push rg1
	call maths::divmod
	pop rg0 // result
	pop rg1 // remainder

	push rg1
	push rg0
	call print::print_hex_byte
	call print::print_whitespace
	pop zero
	call print::print_hex_byte
	call print::print_newline

	lwi string, rg0
    //lwi 10, rg0
    pusha 4
	push rg0
	call print::print
    //call fib::fib_n
    pop zero
	call print::print_newline
	popa 4

	pusha 4
	push rg0
	call print::print
    //call fib::fib_n
    pop zero
	call print::print_newline
	popa 4

	pusha 4
	push rg0
	call print::print
    //call fib::fib_n
    pop zero
	call print::print_newline
	popa 4

	pusha 4
	push rg0
	call print::print
    //call fib::fib_n
    pop zero
	call print::print_newline
	popa 4

    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