summaryrefslogtreecommitdiff
path: root/kernel/src/interrupt/idt.asm
diff options
context:
space:
mode:
authorTyler Murphy <=>2023-07-16 19:56:56 -0400
committerTyler Murphy <=>2023-07-16 19:56:56 -0400
commit8ad6ef551e9a1c51a77f3662978c7559556897d6 (patch)
treeed07aeae3122a009385d7db8fc98a61b25c38c99 /kernel/src/interrupt/idt.asm
parentinitial (diff)
downloadfinix-8ad6ef551e9a1c51a77f3662978c7559556897d6.tar.gz
finix-8ad6ef551e9a1c51a77f3662978c7559556897d6.tar.bz2
finix-8ad6ef551e9a1c51a77f3662978c7559556897d6.zip
time
Diffstat (limited to 'kernel/src/interrupt/idt.asm')
-rw-r--r--kernel/src/interrupt/idt.asm99
1 files changed, 99 insertions, 0 deletions
diff --git a/kernel/src/interrupt/idt.asm b/kernel/src/interrupt/idt.asm
new file mode 100644
index 0000000..6cccdc6
--- /dev/null
+++ b/kernel/src/interrupt/idt.asm
@@ -0,0 +1,99 @@
+extern idt_exception_handler
+extern idt_pic_timer
+extern idt_pic_keyboard
+extern idt_pic_mouse
+extern idt_pic_eoi
+global isr_stub_table
+
+%macro ISRErrorStub 1
+isr_stub_%+%1:
+ push dword %1
+ call idt_exception_handler
+ pop eax
+ iret
+%endmacro
+
+%macro PICGeneric 1
+isr_stub_%+%1:
+ push dword %1
+ call idt_pic_eoi
+ pop eax
+ iret
+%endmacro
+
+%macro PICTimer 1
+isr_stub_%+%1:
+ call idt_pic_timer
+ push dword %1
+ call idt_pic_eoi
+ pop eax
+ iret
+%endmacro
+
+%macro PICKeyboard 1
+isr_stub_%+%1:
+ call idt_pic_keyboard
+ push dword %1
+ call idt_pic_eoi
+ pop eax
+ iret
+%endmacro
+
+%macro PICMouse 1
+isr_stub_%+%1:
+ call idt_pic_mouse
+ push dword %1
+ call idt_pic_eoi
+ pop eax
+ iret
+%endmacro
+
+%macro ISRSyscall 1
+isr_stub_%+%1:
+ push eax
+ push ebx
+ push ecx
+ push edx
+ call idt_syscall
+ add esp, 16
+ pop eax
+ iret
+%endmacro
+
+section .text
+align 8
+%assign i 0
+%rep 32
+ ISRErrorStub i
+%assign i i+1
+%endrep
+PICTimer 32 ; 0
+PICKeyboard 33 ; 1
+PICGeneric 34 ; 2
+PICGeneric 35 ; 3
+PICGeneric 36 ; 4
+PICGeneric 37 ; 5
+PICGeneric 38 ; 6
+PICGeneric 39 ; 7
+PICGeneric 40 ; 8
+PICGeneric 41 ; 9
+PICGeneric 42 ; 10
+PICGeneric 43 ; 11
+PICMouse 44 ; 12
+PICGeneric 45 ; 13
+PICGeneric 46 ; 14
+PICGeneric 47 ; 15
+%assign i 48
+%rep 256 - 48
+ ISRErrorStub i
+%assign i i+1
+%endrep
+
+section .rodata
+align 8
+isr_stub_table:
+%assign i 0x00
+%rep 256
+ dd isr_stub_%+i
+%assign i i+0x01
+%endrep