summaryrefslogtreecommitdiff
path: root/kernel/src/arch/x86_64/cpu/idt.asm
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/src/arch/x86_64/cpu/idt.asm')
-rw-r--r--kernel/src/arch/x86_64/cpu/idt.asm216
1 files changed, 216 insertions, 0 deletions
diff --git a/kernel/src/arch/x86_64/cpu/idt.asm b/kernel/src/arch/x86_64/cpu/idt.asm
new file mode 100644
index 0000000..78bed7e
--- /dev/null
+++ b/kernel/src/arch/x86_64/cpu/idt.asm
@@ -0,0 +1,216 @@
+%macro isr_err_stub 1
+isr_stub_%+%1:
+ cli
+ push qword (%+%1)
+ jmp asmException
+ cli
+ hlt
+%endmacro
+
+%macro isr_no_err_stub 1
+isr_stub_%+%1:
+ cli
+ push qword 0
+ push qword (%+%1)
+ jmp asmException
+ cli
+ hlt
+%endmacro
+
+extern ignoreStubC
+global ignoreStub
+ignoreStub:
+ push r15
+ push r14
+ push r13
+ push r12
+ push r11
+ push r10
+ push r9
+ push r8
+ push rbp
+ push rdi
+ push rsi
+ push rdx
+ push rcx
+ push rbx
+ push rax
+ mov rax,cr3
+ push rax
+ call ignoreStubC
+ pop rax
+ mov cr3,rax
+ pop rax
+ pop rbx
+ pop rcx
+ pop rdx
+ pop rsi
+ pop rdi
+ pop rbp
+ pop r8
+ pop r9
+ pop r10
+ pop r11
+ pop r12
+ pop r13
+ pop r14
+ pop r15
+ iretq
+
+
+extern CPUKernelPanic
+asmException:
+ push r15
+ push r14
+ push r13
+ push r12
+ push r11
+ push r10
+ push r9
+ push r8
+ push rbp
+ push rdi
+ push rsi
+ push rdx
+ push rcx
+ push rbx
+ push rax
+ mov rax,cr3
+ push rax
+ mov rdi,rsp
+ jmp CPUKernelPanic
+
+isr_no_err_stub 0
+isr_no_err_stub 1
+isr_no_err_stub 2
+isr_no_err_stub 3
+isr_no_err_stub 4
+isr_no_err_stub 5
+isr_no_err_stub 6
+isr_no_err_stub 7
+isr_err_stub 8
+isr_no_err_stub 9
+isr_err_stub 10
+isr_err_stub 11
+isr_err_stub 12
+isr_err_stub 13
+isr_err_stub 14
+isr_no_err_stub 15
+isr_no_err_stub 16
+isr_err_stub 17
+isr_no_err_stub 18
+isr_no_err_stub 19
+isr_no_err_stub 20
+isr_no_err_stub 21
+isr_no_err_stub 22
+isr_no_err_stub 23
+isr_no_err_stub 24
+isr_no_err_stub 25
+isr_no_err_stub 26
+isr_no_err_stub 27
+isr_no_err_stub 28
+isr_no_err_stub 29
+isr_err_stub 30
+isr_no_err_stub 31
+
+global isrTable
+isrTable:
+%assign i 0
+%rep 32
+ dq isr_stub_%+i
+%assign i i+1
+%endrep
+
+%macro irq_stub 1
+irq_stub_%+%1:
+ cli
+ push qword 0
+ push qword (%+%1)
+ jmp irqStub
+ cli
+ hlt
+%endmacro
+
+irq_stub 0
+irq_stub 1
+irq_stub 2
+irq_stub 3
+irq_stub 4
+irq_stub 5
+irq_stub 6
+irq_stub 7
+irq_stub 8
+irq_stub 9
+irq_stub 10
+irq_stub 11
+irq_stub 12
+irq_stub 13
+irq_stub 14
+irq_stub 15
+irq_stub 16
+irq_stub 17
+irq_stub 18
+irq_stub 19
+irq_stub 20
+irq_stub 21
+irq_stub 22
+irq_stub 23
+irq_stub 24
+irq_stub 25
+irq_stub 26
+irq_stub 27
+irq_stub 28
+irq_stub 29
+irq_stub 30
+irq_stub 31
+irq_stub 32
+
+global irqTable
+irqTable:
+%assign i 0
+%rep 32
+ dq irq_stub_%+i
+%assign i i+1
+%endrep
+
+extern irqHandler
+irqStub:
+ push r15
+ push r14
+ push r13
+ push r12
+ push r11
+ push r10
+ push r9
+ push r8
+ push rbp
+ push rdi
+ push rsi
+ push rdx
+ push rcx
+ push rbx
+ push rax
+ mov rax,cr3
+ push rax
+ mov rdi,rsp
+ xor rbp,rbp
+ nop
+ pop rax
+ mov cr3,rax
+ pop rax
+ pop rbx
+ pop rcx
+ pop rdx
+ pop rsi
+ pop rdi
+ pop rbp
+ pop r8
+ pop r9
+ pop r10
+ pop r11
+ pop r12
+ pop r13
+ pop r14
+ pop r15
+ add rsp,16
+ iretq \ No newline at end of file