per-line scrolling test
[mdlife] / src / debug.c
index d6220c0..4616177 100644 (file)
@@ -73,3 +73,45 @@ void dbg_putchar(int c)
                dbg_printchar(cur_x++, cur_y, c);
        }
 }
+
+static const char *exc_str[] = {
+       "unknown", "",
+       "bus error",
+       "address error",
+       "illegal instruction",
+       "divide by zero",
+       "chk",
+       "trap",
+       "priviledge violation",
+       "trace",
+       "op 1010",
+       "op 1111",
+       "", "",
+       "format error",
+       "uninitialized vector",
+       "", "", "", "", "", "", "", "",
+       "spurious interrupt"
+};
+
+struct frame {
+       uint16_t padding;
+       uint16_t status;
+       uint32_t pc;
+       /* group 2 */
+       uint16_t fmtoffs;
+       uint16_t other[1];
+} __attribute__((packed));
+
+void exc_dump(unsigned int num, struct frame *frm)
+{
+       dbg_setcursor(1, 1);
+
+       if(num < sizeof exc_str / sizeof *exc_str) {
+               printf("Exception %xh: %s\n", num, exc_str[num]);
+       } else {
+               printf("Exception %xh\n", num);
+       }
+
+       printf("status: %x\n", frm->status);
+       printf("pc: %x\n", frm->pc);
+}