X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/7b0dccbab69e806a63c4504c3ddb82e45241985b..b0c2a4be2d1f4f93ab01d0858979a12ef0735ec1:/lunaix-os/kernel/asm/x86/interrupts.c diff --git a/lunaix-os/kernel/asm/x86/interrupts.c b/lunaix-os/kernel/asm/x86/interrupts.c index 8dfb23b..c79ed07 100644 --- a/lunaix-os/kernel/asm/x86/interrupts.c +++ b/lunaix-os/kernel/asm/x86/interrupts.c @@ -1,8 +1,11 @@ #include -#include +#include #include +#include -void panic_msg(const char* msg) { +void +panic_msg(const char* msg) +{ tty_set_theme(VGA_COLOR_WHITE, VGA_COLOR_RED); tty_clear_line(10); tty_clear_line(11); @@ -11,32 +14,47 @@ void panic_msg(const char* msg) { printf(" %s", msg); } -void panic (const char* msg, isr_param* param) { +void +panic(const char* msg, isr_param* param) +{ char buf[1024]; - sprintf(buf, "INT %u: (%x) [%p: %p] %s", param->vector, param->err_code, param->cs, param->eip, msg); + sprintf(buf, + "INT %u: (%x) [%p: %p] %s", + param->vector, + param->err_code, + param->cs, + param->eip, + msg); panic_msg(buf); - while(1); + while (1) + ; } -void -interrupt_handler(isr_param* param) { - switch (param->vector) - { +void +interrupt_handler(isr_param* param) +{ + switch (param->vector) { case 0: panic("Division by 0", param); - break; // never reach + break; // never reach case FAULT_GENERAL_PROTECTION: panic("General Protection", param); - break; // never reach + break; // never reach case FAULT_PAGE_FAULT: - panic("Page Fault", param); - break; // never reach + void* pg_fault_ptr = cpu_rcr2(); + if (pg_fault_ptr) { + panic("Page Fault", param); + } else { + panic("Null pointer reference", param); + } + break; // never reach case LUNAIX_SYS_PANIC: panic_msg((char*)(param->registers.edi)); - while(1); - break; // never reach + while (1) + ; + break; // never reach default: panic("Unknown Interrupt", param); - break; // never reach + break; // never reach } } \ No newline at end of file