+++ /dev/null
-\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