aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/interrupts/generic.c
diff options
context:
space:
mode:
authorGravatar ornitorrincos 2026-08-18 12:15:05 +0200
committerGravatar ornitorrincos 2026-08-18 12:15:05 +0200
commit132d3236bb884433bf94e961f6d32264e0334aec (patch)
tree06638976b06f019ea4037175ff228f8271057c44 /kernel/interrupts/generic.c
Diffstat (limited to '')
-rw-r--r--kernel/interrupts/generic.c95
1 files changed, 95 insertions, 0 deletions
diff --git a/kernel/interrupts/generic.c b/kernel/interrupts/generic.c
new file mode 100644
index 0000000..900c7e3
--- /dev/null
+++ b/kernel/interrupts/generic.c
@@ -0,0 +1,95 @@
+#include "generic.h"
+#include "../kprintf.h"
+#include "../asm_inline.h"
+
+void generic_interrupt(trapframe* f)
+{
+
+ kprintf("!!!! INTERRUPT !!!!\n");
+ kprintf("ARG: %p\n", f);
+ switch(f->trapno)
+ {
+ case 0x0:
+ kprintf("NO: %s | ERR_ %lX\n", "Division Error", f->err);
+ break;
+ case 0x1:
+ kprintf("NO: %s | ERR_ %lX\n", "Debug", f->err);
+ break;
+ case 0x2:
+ kprintf("NO: %s | ERR_ %lX\n", "Non-Maskable", f->err);
+ break;
+ case 0x3:
+ kprintf("NO: %s | ERR_ %lX\n", "Breakpoint", f->err);
+ break;
+ case 0x4:
+ kprintf("NO: %s | ERR_ %lX\n", "Overflow", f->err);
+ break;
+ case 0x5:
+ kprintf("NO: %s | ERR_ %lX\n", "Bound Range Exceeded", f->err);
+ break;
+ case 0x6:
+ kprintf("NO: %s | ERR_ %lX\n", "Invalid Opcode", f->err);
+ break;
+ case 0x7:
+ kprintf("NO: %s | ERR_ %lX\n", "Device Not Available", f->err);
+ break;
+ case 0x8:
+ kprintf("NO: %s | ERR_ %lX\n", "Double Fault", f->err);
+ break;
+ case 0xA:
+ kprintf("NO: %s | ERR_ %lX\n", "Invalid TSS", f->err);
+ break;
+ case 0xB:
+ kprintf("NO: %s | ERR_ %lX\n", "Segment Not Present", f->err);
+ break;
+ case 0xC:
+ kprintf("NO: %s | ERR_ %lX\n", "Stack-Segment fault", f->err);
+ break;
+ case 0xD:
+ kprintf("NO: %s | ERR_ %lX\n", "General Protection Fault", f->err);
+ break;
+ case 0xE:
+ kprintf("NO: %s | ERR_ %lX\n", "Page Fault", f->err);
+ break;
+ case 0x10:
+ kprintf("NO: %s | ERR_ %lX\n", "x87 Floating Point Exception", f->err);
+ break;
+ case 0x11:
+ kprintf("NO: %s | ERR_ %lX\n", "Alignment Check", f->err);
+ break;
+ case 0x12:
+ kprintf("NO: %s | ERR_ %lX\n", "Machine Check", f->err);
+ break;
+ case 0x13:
+ kprintf("NO: %s | ERR_ %lX\n", "SIMD Floating Point Exception", f->err);
+ break;
+ case 0x14:
+ kprintf("NO: %s | ERR_ %lX\n", "Virtualization Exception", f->err);
+ break;
+ case 0x15:
+ kprintf("NO: %s | ERR_ %lX\n", "Control Protection Exception", f->err);
+ break;
+ case 0x1C:
+ kprintf("NO: %s | ERR_ %lX\n", "Hypervisor Injection Exception", f->err);
+ break;
+ case 0x1D:
+ kprintf("NO: %s | ERR_ %lX\n", "VMM Communication Exception", f->err);
+ break;
+ case 0x1E:
+ kprintf("NO: %s | ERR_ %lX\n", "Security Exception", f->err);
+ break;
+ default:
+ kprintf("NO: %lX | ERR: %lX\n", f->trapno, f->err);
+ }
+ kprintf("RAX: %lX | RBX: %lX | RCX: %lX | RDX: %lX\n", f->rax, f->rbx, f->rcx, f->rdx);
+ kprintf("RSI: %lX | RDI: %lX | RBP: %lX\n", f->rsi, f->rdi, f->rbp);
+ kprintf("R8: %lX | R9: %lX | R10: %lX | R11: %lX\n", f->r8, f->r9, f->r10, f->r11);
+ kprintf("R12: %lX | R13: %lX | R14: %lX | R15: %lX\n", f->r12, f->r13, f->r14, f->r15);
+ kprintf("===================\n");
+ hlt();
+
+ //if(f->err == 0xE)
+ //{
+ // hlt();
+ //}
+}