continuing with serial driver in dsa.
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
include print: "./print.dsa"
|
||||
include serial: "./serial.dsa"
|
||||
|
||||
dw idt: 0xFFFF0000
|
||||
setup_base: func
|
||||
@@ -15,8 +16,8 @@ setup_base: func
|
||||
_loop_start:
|
||||
stw rg1, rg2 // store guard into current IDT entry
|
||||
subi rg2, 4, rg2 // decrement counter
|
||||
ieq rg2, zero, rg3 // check if counter is zero
|
||||
jnz rg3, _loop_start // repeat until all entries set
|
||||
ieq rg2, idr, rg3 // check if we've reached the base address
|
||||
jez rg3, _loop_start // repeat until all entries set
|
||||
|
||||
// make sure we can handle an invalid interrupt
|
||||
lwi _handle_invalid_interrupt, rg0
|
||||
@@ -31,16 +32,12 @@ _loop_start:
|
||||
setup_io: func
|
||||
push rg0
|
||||
|
||||
lwi _serial_interrupt, rg0
|
||||
stw rg0, idr, 132 // 33*4, interrupt idx 32
|
||||
lwi serial::serial_isr, rg0
|
||||
stw rg0, idr, 128 // 32*4, interrupt idx 32
|
||||
|
||||
pop rg0
|
||||
return
|
||||
|
||||
// does nothing, but wakes the kernel
|
||||
_serial_interrupt:
|
||||
nop
|
||||
iret
|
||||
|
||||
db _invalid_int: "FATAL: Invalid Interrupt!"
|
||||
_handle_invalid_interrupt:
|
||||
|
||||
Reference in New Issue
Block a user