diff --git a/src/kernel/cpu/interrupts.c b/src/kernel/cpu/interrupts.c index e2db3be..a5b7436 100644 --- a/src/kernel/cpu/interrupts.c +++ b/src/kernel/cpu/interrupts.c @@ -57,9 +57,26 @@ registers *int_handler(registers *r) { if(int_handlers[r->int_no]) return int_handlers[r->int_no](r); - debug_error("Unhandled interrupt occurred\n"); - debug_error("Interrupt number: %d, Error code: %d\n", r->int_no, r->err_code); - PANIC("Unhandled interrupt"); - //for(;;); + if(r->int_no < IRQ_BASE) + { + debug_error("UNHANDLED EXCEPTION\n"); + switch(r->int_no) { + case 14: + debug_error("Page fault\n"); + break; + case 6: + debug_error("Invalid opcode\n"); + } + debug_error("Interrupt number: %d, Error code: %d\n", r->int_no, r->err_code); + PANIC("Unhandled interrupt\n"); + } else if(r->int_no < IRQ_BASE + MAX_IRQS) { + debug_error("UNHANDLED IRQ\n"); + debug_error("IRQ: %d", r->int_no - IRQ_BASE); + PANIC("Unhandled IRQ\n"); + } else { + debug_error("UNKNOWN INTERRUPT\n"); + debug_error("Interrupt number: %d\n", r->int_no); + PANIC("Unknown interrupt\n"); + } return r; } \ No newline at end of file