summaryrefslogtreecommitdiffhomepage
path: root/dev/Kernel/HALKit/AMD64/HalInterruptAPI.asm
diff options
context:
space:
mode:
authorAmlal EL Mahrouss <amlalelmahrouss@icloud.com>2024-08-15 18:35:34 +0200
committerAmlal EL Mahrouss <amlalelmahrouss@icloud.com>2024-08-15 18:35:34 +0200
commitf3d931aa7cfaf96baef8383b59a8938779541ee7 (patch)
treefdb9fc51badb3dbd03e46ab0766a49d9522e13e2 /dev/Kernel/HALKit/AMD64/HalInterruptAPI.asm
parent86640816e8b1d3595365f1fcc8a2a9e61fb40ff1 (diff)
[IMP] Moved source code into dev/ folder.
Signed-off-by: Amlal EL Mahrouss <amlalelmahrouss@icloud.com>
Diffstat (limited to 'dev/Kernel/HALKit/AMD64/HalInterruptAPI.asm')
-rw-r--r--dev/Kernel/HALKit/AMD64/HalInterruptAPI.asm242
1 files changed, 242 insertions, 0 deletions
diff --git a/dev/Kernel/HALKit/AMD64/HalInterruptAPI.asm b/dev/Kernel/HALKit/AMD64/HalInterruptAPI.asm
new file mode 100644
index 00000000..093da0db
--- /dev/null
+++ b/dev/Kernel/HALKit/AMD64/HalInterruptAPI.asm
@@ -0,0 +1,242 @@
+;; /*
+;; * ---------------------------------------------------
+;; *
+;; * Copyright ZKA Technologies., all rights reserved.
+;; *
+;; * File: HalInterruptAPI.asm
+;; * Purpose: Interrupt routing, redirect raw interrupts into their handlers.
+;; *
+;; * ---------------------------------------------------
+;; */
+
+[bits 64]
+
+%define kInterruptId 0x21
+
+%macro IntExp 1
+global __NEW_INT_%1
+__NEW_INT_%1:
+ cld
+
+ iretq
+%endmacro
+
+%macro IntNormal 1
+global __NEW_INT_%1
+__NEW_INT_%1:
+ cld
+
+ iretq
+%endmacro
+
+; This file handles the core interrupt table
+; Last edited 31/01/24
+
+global ke_handle_irq
+global kInterruptVectorTable
+
+extern _hal_handle_mouse
+extern idt_handle_gpf
+extern idt_handle_pf
+extern ke_io_write
+extern idt_handle_ud
+
+section .text
+
+IntNormal 0
+IntNormal 1
+
+IntNormal 2
+
+IntNormal 3
+IntNormal 4
+IntNormal 5
+
+;; Invalid opcode interrupt
+__NEW_INT_6:
+ cli
+
+ push rax
+
+ mov rcx, rsp
+ call idt_handle_ud
+
+ pop rax
+
+ sti
+ iretq
+
+IntNormal 7
+IntExp 8
+IntNormal 9
+IntExp 10
+IntExp 11
+
+IntExp 12
+
+__NEW_INT_13:
+ cli
+
+ push rax
+
+ mov rcx, rsp
+ call idt_handle_gpf
+
+ pop rax
+
+ sti
+ iretq
+
+__NEW_INT_14:
+ cli
+
+ push rax
+
+ mov rcx, rsp
+ call idt_handle_pf
+
+ pop rax
+
+ sti
+ iretq
+
+IntNormal 15
+IntNormal 16
+IntExp 17
+IntNormal 18
+IntNormal 19
+IntNormal 20
+IntNormal 21
+IntNormal 22
+IntNormal 23
+IntNormal 24
+IntNormal 25
+IntNormal 26
+IntNormal 27
+IntNormal 28
+IntNormal 29
+IntExp 30
+
+IntNormal 31
+
+IntNormal 32
+IntNormal 34
+
+IntNormal 33
+IntNormal 35
+IntNormal 36
+IntNormal 37
+IntNormal 38
+IntNormal 39
+IntNormal 40
+IntNormal 41
+IntNormal 42
+IntNormal 43
+
+__NEW_INT_44:
+ cli
+
+ ;; TODO: CoreEvents dispatch routine.
+
+ push rax
+ call _hal_handle_mouse
+ pop rax
+
+ sti
+ iretq
+
+IntNormal 45
+IntNormal 46
+IntNormal 47
+IntNormal 48
+IntNormal 49
+
+[extern hal_system_call_enter]
+[extern hal_kernel_call_enter]
+
+__NEW_INT_50:
+ cli
+
+ push rcx
+ push rdx
+ push rax
+
+ call hal_system_call_enter
+
+ pop rax
+ pop rdx
+ pop rcx
+
+ sti
+ iretq
+
+__NEW_INT_51:
+ cli
+
+ push rcx
+ push rdx
+ push r8
+ push r9
+ push rax
+
+ call hal_kernel_call_enter
+
+ pop rax
+ pop r9
+ pop r8
+ pop rdx
+ pop rcx
+
+ sti
+ iretq
+
+IntNormal 52
+IntNormal 53
+IntNormal 54
+IntNormal 55
+IntNormal 56
+IntNormal 57
+IntNormal 58
+IntNormal 59
+IntNormal 60
+
+%assign i 61
+%rep 195
+ IntNormal i
+%assign i i+1
+%endrep
+
+section .text
+
+[global hal_load_gdt]
+
+hal_load_gdt:
+ lgdt [rcx]
+ push 0x08
+ lea rax, [rel rt_reload_segments]
+ push rax
+ retfq
+rt_reload_segments:
+ mov ax, 0x10
+ mov ds, ax
+ mov es, ax
+ mov fs, ax
+ mov gs, ax
+ mov ss, ax
+ ret
+
+global hal_load_idt
+
+hal_load_idt:
+ lidt [rcx]
+ sti
+ ret
+
+section .data
+
+kInterruptVectorTable:
+ %assign i 0
+ %rep 256
+ dq __NEW_INT_%+i
+ %assign i i+1
+ %endrep