did some restructuring, got multitasking almost working

This commit is contained in:
2026-06-26 20:05:01 -05:00
parent 57d7d34c6d
commit 43bc0df81a
35 changed files with 481 additions and 307 deletions

61
kernel/interrupts.S Normal file
View 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