OSDN Git Service

svn rev.329より移動。
[chnosproject/CHNOSProject.git] / CHNOSProject / chnos / tolset_chn_000 / chnos_009 / chnos / xception.c
diff --git a/CHNOSProject/chnos/tolset_chn_000/chnos_009/chnos/xception.c b/CHNOSProject/chnos/tolset_chn_000/chnos_009/chnos/xception.c
new file mode 100644 (file)
index 0000000..dcd1d03
--- /dev/null
@@ -0,0 +1,274 @@
+\r
+#include "core.h"\r
+\r
+/*CPU Exceptions*/\r
+uchar *cpu_exceptions[0x20] = {\r
+       "Divided by zero.",\r
+       "Reserved.",\r
+       "Nonmaskable interrupt.",\r
+       "Breakpoint.",\r
+       "Overflow.",\r
+       "Outside BOUND.",\r
+       "Invalid opcode.",\r
+       "Disable Device.",\r
+       "Double fault.",\r
+       "Coprocessor Segment Overrun.",\r
+       "Invalid task status segment.",\r
+       "Segment not present.",\r
+       "Stack Segment Fault.",\r
+       "General Protection Exception.",\r
+       "Page fault.",\r
+       "Reserved.",\r
+       "Floating point error.",\r
+       "Alignment Check.",\r
+       "Machine Check.",\r
+       "SIMD floating-point exception.",\r
+       "Reserved.",\r
+       "Reserved.",\r
+       "Reserved.",\r
+       "Reserved.",\r
+       "Reserved.",\r
+       "Reserved.",\r
+       "Reserved.",\r
+       "Reserved.",\r
+       "Reserved.",\r
+       "Reserved.",\r
+       "Reserved.",\r
+       "Reserved."\r
+};\r
+\r
+uchar *cpu_exception_infos[16] = {\r
+       "EDI      ",\r
+       "ESI      ",\r
+       "EBP      ",\r
+       "ESP      ",\r
+       "EBX      ",\r
+       "EDX      ",\r
+       "ECX      ",\r
+       "EAX      ",\r
+       "DS       ",\r
+       "ES       ",\r
+       "ERRORCODE",\r
+       "EIP      ",\r
+       "CS       ",\r
+       "EFLAGS   ",\r
+       "APP's ESP",\r
+       "APP's SS "\r
+};\r
+\r
+void CPU_Exception_Abort(int exception, int *esp)\r
+{\r
+       int i;\r
+\r
+Emergency_Out_Reset();\r
+Emergency_Out("Exception 0x%02X:%s", exception, cpu_exceptions[exception]);\r
+for(i = 0; i < 8; i++){\r
+       Emergency_Out("%s0x%08X %s0x%08X", cpu_exception_infos[i << 1], esp[i << 1], cpu_exception_infos[(i << 1) + 1], esp[(i << 1) + 1]);\r
+}\r
+Emergency_Out("CR0 = 0x%08X", Load_CR0());\r
+Emergency_Out("CR2 = 0x%08X", Load_CR2());\r
+Emergency_Out("CR3 = 0x%08X", Load_CR3());\r
+\r
+       debug("Exception 0x%02X:\n%s\n", exception, cpu_exceptions[exception]);\r
+\r
+       debug("#PUSHAD by _asm_CPU_ExceptionHandler\n");\r
+       for(i = 0; i <= 7; i++){\r
+               debug("%s:0x%08X\n", cpu_exception_infos[i], esp[i]);\r
+       }\r
+\r
+       debug("#PUSH by _asm_CPU_ExceptionHandler\n");\r
+       for(i = 8; i <= 9; i++){\r
+               debug("%s:0x%08X\n", cpu_exception_infos[i], esp[i]);\r
+       }\r
+\r
+       debug("#PUSH by CPU\n");\r
+       for(i = 10; i <= 15; i++){\r
+               debug("%s:0x%08X\n", cpu_exception_infos[i], esp[i]);\r
+       }\r
+\r
+       debug("#Control Registers\n");\r
+       debug("CR0 = 0x%08X\n", Load_CR0());\r
+       debug("CR2 = 0x%08X\n", Load_CR2());\r
+       debug("CR3 = 0x%08X\n", Load_CR3());\r
+\r
+       for(;;){\r
+               IO_HLT();\r
+       }\r
+}\r
+\r
+uint *CPU_Exception_Fault(int exception, int *esp)\r
+{\r
+       UI_Task *nowtask;\r
+       uchar s[128];\r
+\r
+       nowtask = MultiTask_Get_NowTask();\r
+       if(nowtask->cons != 0 && nowtask->cons->app_cs != 0){\r
+               sprintf(s, "\nException 0x%02X:\n\t%s\n", exception, (uchar *)cpu_exceptions[exception]);\r
+               InputBox_Put_String(nowtask->cons->input, s);\r
+               sprintf(s, "\t%s:0x%08X\n", cpu_exception_infos[11], esp[11]);  //EIP\r
+               InputBox_Put_String(nowtask->cons->input, s);\r
+       } else{\r
+               CPU_Exception_Abort(exception, esp);\r
+       }\r
+       return &nowtask->tss.esp0;\r
+}\r
+\r
+void CPU_ExceptionHandler00(int *esp)\r
+{\r
+       CPU_Exception_Abort(0x00, esp);\r
+}\r
+\r
+void CPU_ExceptionHandler01(int *esp)\r
+{\r
+       CPU_Exception_Abort(0x01, esp);\r
+}\r
+\r
+void CPU_ExceptionHandler02(int *esp)\r
+{\r
+       CPU_Exception_Abort(0x02, esp);\r
+}\r
+\r
+void CPU_ExceptionHandler03(int *esp)\r
+{\r
+       CPU_Exception_Abort(0x03, esp);\r
+}\r
+\r
+void CPU_ExceptionHandler04(int *esp)\r
+{\r
+       CPU_Exception_Abort(0x04, esp);\r
+}\r
+\r
+void CPU_ExceptionHandler05(int *esp)\r
+{\r
+       CPU_Exception_Abort(0x05, esp);\r
+}\r
+\r
+void CPU_ExceptionHandler06(int *esp)\r
+{\r
+       CPU_Exception_Abort(0x06, esp);\r
+}\r
+\r
+void CPU_ExceptionHandler07(int *esp)\r
+{\r
+       CPU_Exception_Abort(0x07, esp);\r
+}\r
+\r
+void CPU_ExceptionHandler08(int *esp)\r
+{\r
+       CPU_Exception_Abort(0x08, esp);\r
+}\r
+\r
+void CPU_ExceptionHandler09(int *esp)\r
+{\r
+       CPU_Exception_Abort(0x09, esp);\r
+}\r
+\r
+void CPU_ExceptionHandler0a(int *esp)\r
+{\r
+       CPU_Exception_Abort(0x0a, esp);\r
+}\r
+\r
+void CPU_ExceptionHandler0b(int *esp)\r
+{\r
+       CPU_Exception_Abort(0x0b, esp);\r
+}\r
+\r
+void CPU_ExceptionHandler0c(int *esp)\r
+{\r
+       CPU_Exception_Abort(0x0c, esp);\r
+}\r
+\r
+uint *CPU_ExceptionHandler0d(int *esp)\r
+{\r
+       return CPU_Exception_Fault(0x0d, esp);\r
+}\r
+\r
+void CPU_ExceptionHandler0e(int *esp)\r
+{\r
+       CPU_Exception_Abort(0x0e, esp);\r
+}\r
+\r
+void CPU_ExceptionHandler0f(int *esp)\r
+{\r
+       CPU_Exception_Abort(0x0f, esp);\r
+}\r
+\r
+void CPU_ExceptionHandler10(int *esp)\r
+{\r
+       CPU_Exception_Abort(0x10, esp);\r
+}\r
+\r
+void CPU_ExceptionHandler11(int *esp)\r
+{\r
+       CPU_Exception_Abort(0x11, esp);\r
+}\r
+\r
+void CPU_ExceptionHandler12(int *esp)\r
+{\r
+       CPU_Exception_Abort(0x12, esp);\r
+}\r
+\r
+void CPU_ExceptionHandler13(int *esp)\r
+{\r
+       CPU_Exception_Abort(0x13, esp);\r
+}\r
+\r
+void CPU_ExceptionHandler14(int *esp)\r
+{\r
+       CPU_Exception_Abort(0x14, esp);\r
+}\r
+\r
+void CPU_ExceptionHandler15(int *esp)\r
+{\r
+       CPU_Exception_Abort(0x15, esp);\r
+}\r
+\r
+void CPU_ExceptionHandler16(int *esp)\r
+{\r
+       CPU_Exception_Abort(0x16, esp);\r
+}\r
+\r
+void CPU_ExceptionHandler17(int *esp)\r
+{\r
+       CPU_Exception_Abort(0x17, esp);\r
+}\r
+\r
+void CPU_ExceptionHandler18(int *esp)\r
+{\r
+       CPU_Exception_Abort(0x18, esp);\r
+}\r
+\r
+void CPU_ExceptionHandler19(int *esp)\r
+{\r
+       CPU_Exception_Abort(0x19, esp);\r
+}\r
+\r
+void CPU_ExceptionHandler1a(int *esp)\r
+{\r
+       CPU_Exception_Abort(0x1a, esp);\r
+}\r
+\r
+void CPU_ExceptionHandler1b(int *esp)\r
+{\r
+       CPU_Exception_Abort(0x1b, esp);\r
+}\r
+\r
+void CPU_ExceptionHandler1c(int *esp)\r
+{\r
+       CPU_Exception_Abort(0x1c, esp);\r
+}\r
+\r
+void CPU_ExceptionHandler1d(int *esp)\r
+{\r
+       CPU_Exception_Abort(0x1d, esp);\r
+}\r
+\r
+void CPU_ExceptionHandler1e(int *esp)\r
+{\r
+       CPU_Exception_Abort(0x1e, esp);\r
+}\r
+\r
+void CPU_ExceptionHandler1f(int *esp)\r
+{\r
+       CPU_Exception_Abort(0x1f, esp);\r
+}\r