X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/9406e904ddad5db2ba2dd550e21bbb224899fd79..d07db7c15d6cf9d6c0fd07ea29cca77a89b02a79:/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 7ed3427..8dfb23b 100644 --- a/lunaix-os/kernel/asm/x86/interrupts.c +++ b/lunaix-os/kernel/asm/x86/interrupts.c @@ -1,16 +1,21 @@ #include -#include +#include #include -void panic (const char* msg, isr_param* param) { - tty_set_theme(VGA_COLOR_BLACK, VGA_COLOR_LIGHT_RED); +void panic_msg(const char* msg) { + tty_set_theme(VGA_COLOR_WHITE, VGA_COLOR_RED); tty_clear_line(10); tty_clear_line(11); tty_clear_line(12); tty_set_cpos(0, 11); - printf(" INT %u: [0x%x: 0x%x] %s", param->vector, param->cs, param->eip, msg); - __spin: - goto __spin; + printf(" %s", msg); +} + +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); + panic_msg(buf); + while(1); } void @@ -23,6 +28,13 @@ interrupt_handler(isr_param* param) { case FAULT_GENERAL_PROTECTION: panic("General Protection", param); break; // never reach + case FAULT_PAGE_FAULT: + panic("Page Fault", param); + break; // never reach + case LUNAIX_SYS_PANIC: + panic_msg((char*)(param->registers.edi)); + while(1); + break; // never reach default: panic("Unknown Interrupt", param); break; // never reach