X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/cd09c4b222e4ddf45a42522563ae2471a829d1c8..4c6d990440cdba6c7dd294adb7e435770ffcbcc4:/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 39682a3..8dfb23b 100644 --- a/lunaix-os/kernel/asm/x86/interrupts.c +++ b/lunaix-os/kernel/asm/x86/interrupts.c @@ -1,9 +1,21 @@ #include +#include #include -void isr0 (isr_param* param) { - tty_clear(); - printf("[PANIC] Exception (%d) CS=0x%X, EIP=0x%X", param->vector, param->cs, param->eip); +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(" %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 @@ -11,7 +23,20 @@ interrupt_handler(isr_param* param) { switch (param->vector) { case 0: - isr0(param); - break; + panic("Division by 0", param); + break; // never reach + 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 } } \ No newline at end of file