OSDN Git Service

キーボード関連の構造体化
[heavyosecpu/HeavyOSECPU.git] / jitc.c
1 #include "osecpu.h"\r
2 #include "jitc.h"\r
3 \r
4 //\r
5 // JITC common functions (architecture not dependent)\r
6 //\r
7 \r
8 void errorHandler(HOSECPU_RuntimeEnvironment *r)\r
9 {\r
10         puts("security error! abort...");\r
11         printf("debugInfo0=%d, debugInfo1=%d\n", r->debugInfo0, r->debugInfo1);\r
12 #if     (ENABLE_DEBUG_CODE != 0)\r
13         printf("Last opcode may be 0x%02X (Backend).\n", r->dbg_currentCode);\r
14 #endif\r
15         \r
16 #if     (ENABLE_DEBUG_CODE_ADDR != 0)\r
17         printf("At backend code bin +0x%04X.\n", r->dbg_currentCodeAddress);\r
18 #endif\r
19         \r
20 #if (USE_DEBUGGER != 0)\r
21         dbgrMain(r);\r
22 #endif\r
23         exit(1);\r
24 }\r
25 \r
26 int jitCompCmdLen(const unsigned char *src)\r
27 {\r
28         //BCode命令長を取得する\r
29         int i = 1;\r
30         \r
31         if (0x01 <= *src && *src < 0x04){\r
32                 // LB, LIMM, PLIMM\r
33                 i = 6;\r
34         } else if (*src == 0x04){\r
35                 // CND\r
36                 i = 2;\r
37         } else if (0x08 <= *src && *src < 0x0d){\r
38                 // LMEM, SMEM, ??, ??, ??\r
39                 i = 8 + src[7] * 4;\r
40         } else if (0x0e <= *src && *src < 0x10){\r
41                 // PADD, PDIF\r
42                 i = 8;\r
43         } else if (0x10 <= *src && *src < 0x1c){\r
44                 // CP/OR, XOR, AND, ADD, SUB, MUL, SHL, SAR, DIV, MOD,\r
45                 i = 4;\r
46         } else if (0x1c <= *src && *src < 0x1f){\r
47                 // ??, ??, PCP\r
48                 i = 3;\r
49         } else if (*src == 0x1f){\r
50                 // ??\r
51                 i = 11;\r
52         } else if(0x20 <= *src && *src < 0x2e){\r
53                 // CMPE, CMPNE, CMPL, CMPGE, CMPLE, CMPG, TSTZ, TSTNZ,\r
54                 // PCMPE, PCMPNE, PCMPL, PCMPGE, PCMPLE, PCMPG,\r
55                 i = 4;\r
56         } else if (*src == 0x2f){\r
57                 // ??\r
58                 i = 4 + src[1];\r
59         } else if (0x30 <= *src && *src < 0x34){\r
60                 // ??, ??, MALLOC, ??\r
61                 i = 4;\r
62         } else if (0x3c <= *src && *src < 0x3e){\r
63                 // ??, ??\r
64                 i = 7;\r
65         } else if (*src == 0xfe){\r
66                 // REMARK\r
67                 i = 2 + src[1];\r
68         }\r
69 \r
70         return i;\r
71 }\r
72 \r
73 void PRegCopy(HOSECPU_PointerRegisterEntry *dst, HOSECPU_PointerRegisterEntry *src)\r
74 {\r
75         // 以下の方法で代入するとMacではアライメントエラーで落ちるのです...\r
76         // *dst = *src;\r
77         // ということで、memcpyによる実装に変更しました。\r
78         \r
79         memcpy(dst, src, sizeof(HOSECPU_PointerRegisterEntry));\r
80 }\r
81 \r
82 \r
83 \r
84 \r