make dmm.c portable
[lunaix-os.git] / lunaix-os / kernel / asm / x86 / interrupts.c
index 925c13de340acb108f72b337d27016afbaa11e98..8dfb23bf32a176e33a935b3bd455c834360fe189 100644 (file)
@@ -1,14 +1,20 @@
 #include <arch/x86/interrupts.h>
-#include <lunaix/assert.h>
+#include <lunaix/tty/tty.h>
 #include <libc/stdio.h>
 
-void panic (const char* msg, isr_param* param) {
+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: (%x) [0x%x: 0x%x] %s", param->vector, param->err_code, param->cs, param->eip, msg);
+    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);
 }
 
@@ -25,6 +31,10 @@ interrupt_handler(isr_param* param) {
         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