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);
+}