started on isr/idt stuff
This commit is contained in:
54
kernel/idt_stubs.s
Normal file
54
kernel/idt_stubs.s
Normal file
@@ -0,0 +1,54 @@
|
||||
.code32
|
||||
|
||||
.macro ISR_NOERRCODE num
|
||||
.global isr\num
|
||||
isr\num:
|
||||
pushl $0
|
||||
pushl $\num
|
||||
jmp isr_common_stub
|
||||
.endm
|
||||
|
||||
.macro ISR_ERRCODE num
|
||||
.global isr\num
|
||||
isr\num:
|
||||
pushl $\num
|
||||
jmp isr_common_stub
|
||||
.endm
|
||||
|
||||
.extern common_interrupt_handler
|
||||
isr_common_stub:
|
||||
pushal
|
||||
|
||||
pushl %esp
|
||||
call common_interrupt_handler
|
||||
addl $4, %esp
|
||||
|
||||
popal
|
||||
addl $8, %esp
|
||||
iret
|
||||
|
||||
.global master_eoi
|
||||
master_eoi:
|
||||
movb $0x20, %al
|
||||
outb %al, $0x20
|
||||
ret
|
||||
|
||||
.extern idtr
|
||||
.global load_idt
|
||||
load_idt:
|
||||
lidt idtr
|
||||
ret
|
||||
|
||||
.global enable_int
|
||||
enable_int:
|
||||
sti
|
||||
ret
|
||||
|
||||
ISR_NOERRCODE 0 # Divide by Zero
|
||||
ISR_NOERRCODE 1 # Debug
|
||||
ISR_ERRCODE 8 # Double Fault (Has Error Code!)
|
||||
ISR_ERRCODE 13 # General Protection Fault (Has Error Code!)
|
||||
ISR_ERRCODE 14 # Page Fault (Has Error Code!)
|
||||
|
||||
ISR_NOERRCODE 32 # IRQ0 - Timer
|
||||
ISR_NOERRCODE 33 # IRQ1 - Keyboard
|
||||
Reference in New Issue
Block a user