did some restructuring, got multitasking almost working
This commit is contained in:
61
kernel/interrupts.S
Normal file
61
kernel/interrupts.S
Normal file
@@ -0,0 +1,61 @@
|
||||
.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
|
||||
|
||||
.extern idtr
|
||||
.global load_idt
|
||||
load_idt:
|
||||
lidt idtr
|
||||
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!)
|
||||
|
||||
// This is a special case so we need to handle it for task switching
|
||||
.global isr32
|
||||
isr32:
|
||||
cli
|
||||
pushal
|
||||
|
||||
pushl %esp
|
||||
call schedule_next_task
|
||||
movl %eax, %esp
|
||||
|
||||
call send_eoi_master
|
||||
|
||||
popal
|
||||
|
||||
sti
|
||||
iret
|
||||
|
||||
ISR_NOERRCODE 33 # IRQ1 - Keyboard
|
||||
|
||||
ISR_NOERRCODE 46 # IRQ14
|
||||
ISR_NOERRCODE 47 # IRQ15
|
||||
Reference in New Issue
Block a user