aboutsummaryrefslogtreecommitdiff
path: root/src/kernel/interrupts/isr.asm
diff options
context:
space:
mode:
Diffstat (limited to 'src/kernel/interrupts/isr.asm')
-rw-r--r--src/kernel/interrupts/isr.asm337
1 files changed, 67 insertions, 270 deletions
diff --git a/src/kernel/interrupts/isr.asm b/src/kernel/interrupts/isr.asm
index cf75157..adabac6 100644
--- a/src/kernel/interrupts/isr.asm
+++ b/src/kernel/interrupts/isr.asm
@@ -1,277 +1,74 @@
-global isr0
-global isr1
-global isr2
-global isr3
-global isr4
-global isr5
-global isr6
-global isr7
-global isr8
-global isr9
-global isr10
-global isr11
-global isr12
-global isr13
-global isr14
-global isr15
-global isr16
-global isr17
-global isr18
-global isr19
-global isr20
-global isr21
-global isr22
-global isr23
-global isr24
-global isr25
-global isr26
-global isr27
-global isr28
-global isr29
-global isr30
-global isr31
-
-; 0: Divide By Zero Exception
-isr0:
- cli
- push byte 0
- push byte 0
- jmp isr_common_stub
-
-; 1: Debug Exception
-isr1:
- cli
- push byte 0
- push byte 1
- jmp isr_common_stub
-
-; 2: Non Maskable Interrupt Exception
-isr2:
- cli
- push byte 0
- push byte 2
- jmp isr_common_stub
-
-; 3: Int 3 Exception
-isr3:
- cli
- push byte 0
- push byte 3
- jmp isr_common_stub
-
-; 4: INTO Exception
-isr4:
- cli
- push byte 0
- push byte 4
- jmp isr_common_stub
-
-; 5: Out of Bounds Exception
-isr5:
- cli
- push byte 0
- push byte 5
- jmp isr_common_stub
-
-; 6: Invalid Opcode Exception
-isr6:
- cli
- push byte 0
- push byte 6
- jmp isr_common_stub
-
-; 7: Coprocessor Not Available Exception
-isr7:
- cli
- push byte 0
- push byte 7
- jmp isr_common_stub
-
-; 8: Double Fault Exception (With Error Code!)
-isr8:
- cli
- push byte 8
- jmp isr_common_stub
-
-; 9: Coprocessor Segment Overrun Exception
-isr9:
- cli
- push byte 0
- push byte 9
- jmp isr_common_stub
-
-; 10: Bad TSS Exception (With Error Code!)
-isr10:
- cli
- push byte 10
- jmp isr_common_stub
-
-; 11: Segment Not Present Exception (With Error Code!)
-isr11:
- cli
- push byte 11
- jmp isr_common_stub
-
-; 12: Stack Fault Exception (With Error Code!)
-isr12:
- cli
- push byte 12
- jmp isr_common_stub
-
-; 13: General Protection Fault Exception (With Error Code!)
-isr13:
- cli
- push byte 13
- jmp isr_common_stub
-
-; 14: Page Fault Exception (With Error Code!)
-isr14:
- cli
- push byte 14
- jmp isr_common_stub
-
-; 15: Reserved Exception
-isr15:
- cli
- push byte 0
- push byte 15
- jmp isr_common_stub
-
-; 16: Floating Point Exception
-isr16:
- cli
- push byte 0
- push byte 16
- jmp isr_common_stub
-
-; 17: Alignment Check Exception
-isr17:
- cli
- push byte 0
- push byte 17
- jmp isr_common_stub
-
-; 18: Machine Check Exception
-isr18:
- cli
- push byte 0
- push byte 18
- jmp isr_common_stub
-
-; 19: Reserved
-isr19:
- cli
- push byte 0
- push byte 19
- jmp isr_common_stub
-
-; 20: Reserved
-isr20:
- cli
- push byte 0
- push byte 20
- jmp isr_common_stub
-
-; 21: Reserved
-isr21:
- cli
- push byte 0
- push byte 21
- jmp isr_common_stub
-
-; 22: Reserved
-isr22:
- cli
- push byte 0
- push byte 22
- jmp isr_common_stub
-
-; 23: Reserved
-isr23:
- cli
- push byte 0
- push byte 23
- jmp isr_common_stub
-
-; 24: Reserved
-isr24:
- cli
- push byte 0
- push byte 24
- jmp isr_common_stub
-
-; 25: Reserved
-isr25:
- cli
- push byte 0
- push byte 25
- jmp isr_common_stub
-
-; 26: Reserved
-isr26:
- cli
- push byte 0
- push byte 26
- jmp isr_common_stub
-
-; 27: Reserved
-isr27:
- cli
- push byte 0
- push byte 27
- jmp isr_common_stub
-
-; 28: Reserved
-isr28:
- cli
- push byte 0
- push byte 28
- jmp isr_common_stub
-
-; 29: Reserved
-isr29:
- cli
- push byte 0
- push byte 29
- jmp isr_common_stub
-
-; 30: Reserved
-isr30:
- cli
- push byte 0
- push byte 30
- jmp isr_common_stub
-
-; 31: Reserved
-isr31:
- cli
- push byte 0
- push byte 31
- jmp isr_common_stub
+%macro ISR_NOERRCODE 1
+ global isr%1
+ isr%1:
+ cli
+ push byte 0
+ push %1
+ jmp isr_common_stub
+%endmacro
+
+%macro ISR_ERRCODE 1
+ global isr%1
+ isr%1:
+ cli
+ push byte %1
+ jmp isr_common_stub
+%endmacro
+
+ISR_NOERRCODE 0
+ISR_NOERRCODE 1
+ISR_NOERRCODE 2
+ISR_NOERRCODE 3
+ISR_NOERRCODE 4
+ISR_NOERRCODE 5
+ISR_NOERRCODE 6
+ISR_NOERRCODE 7
+ISR_ERRCODE 8
+ISR_NOERRCODE 9
+ISR_ERRCODE 10
+ISR_ERRCODE 11
+ISR_ERRCODE 12
+ISR_ERRCODE 13
+ISR_ERRCODE 14
+ISR_NOERRCODE 15
+ISR_NOERRCODE 16
+ISR_NOERRCODE 17
+ISR_NOERRCODE 18
+ISR_NOERRCODE 19
+ISR_NOERRCODE 20
+ISR_NOERRCODE 21
+ISR_NOERRCODE 22
+ISR_NOERRCODE 23
+ISR_NOERRCODE 24
+ISR_NOERRCODE 25
+ISR_NOERRCODE 26
+ISR_NOERRCODE 27
+ISR_NOERRCODE 28
+ISR_NOERRCODE 29
+ISR_NOERRCODE 30
+ISR_NOERRCODE 31
extern fault_handler
-
-; Stores the ISR in the stack and calls the C fault handler
isr_common_stub:
- pusha
- push ds
+push ds
push es
push fs
- push gs
- mov ax, 0x10
- mov ds, ax
- mov es, ax
- mov fs, ax
- mov gs, ax
- mov eax, esp
- push eax
- mov eax, fault_handler
- call eax
- pop eax
- pop gs
+ push gs
+ pusha
+
+ mov ax, 0x10
+ mov ds, ax
+ mov es, ax
+ mov fs, ax
+ mov gs, ax
+
+ push esp
+ call fault_handler
+ add esp, 4
+
+ popa
+ pop gs
pop fs
pop es
- pop ds
- popa
- add esp, 8
- iret
+ pop ds
+ iret \ No newline at end of file