dynamic memory manager (malloc & free)
[lunaix-os.git] / lunaix-os / kernel / asm / x86 / interrupts.c
index 686c43de3ec6771cf4cda3a0780d63743ce19772..7ed34273d0e2d6abbae1e19ed54b7531d499d816 100644 (file)
@@ -1,8 +1,16 @@
 #include <arch/x86/interrupts.h>
+#include <lunaix/assert.h>
 #include <libc/stdio.h>
 
-void isr0 (isr_param* param) {
-    printf("[PANIC] Exception (%d) CS=0x%X, EIP=0x%X", param->vector, param->cs, param->eip);
+void panic (const char* msg, isr_param* param) {
+    tty_set_theme(VGA_COLOR_BLACK, VGA_COLOR_LIGHT_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;
 }
 
 void 
@@ -10,7 +18,13 @@ 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
+        default:
+            panic("Unknown Interrupt", param);
+            break;  // never reach
     }
 }
\ No newline at end of file