1 #ifndef _HDLOAD_OSECPU
\r
2 #define _HDLOAD_OSECPU 1
\r
4 /* Visual Studio で fopen()やsprintf() などの古い関数を使用する時に出る警告を抑止する*/
\r
5 #define _CRT_SECURE_NO_WARNINGS 1
\r
8 // Including stdc headers
\r
23 // Target architecture
\r
25 #define JITC_ARCNUM 0x0001
\r
27 // Target operating system
\r
28 // 1 : Windows 32bit
\r
29 // 2 : Mac OSX 32bit
\r
30 // 3 : blike for Linux
\r
32 #define DRV_OSNUM 0x0001
\r
35 #define DRV_OSNUM 0x0002
\r
38 #define DRV_OSNUM 0x0003
\r
40 //#define DRV_OSNUM 0x0002
\r
42 // Decoder (syslib.ose) setting
\r
43 // syslib.ose is necessary to work OSECPU
\r
44 #define SYSLIB_OSE "syslib.ose"
\r
47 // Define constant values
\r
50 // SIGN1: The 2nd signature of OSECPU Format(05 e1)
\r
51 // It will be changed in OSECPU Rev.2 to "e2" (no adaptation in their binary layers)
\r
54 #define USE_DEBUGGER 1
\r
55 #define USE_TEK5 0 //元々は1
\r
57 /* JITC mode flags */
\r
58 #define JITC_LV_SLOWEST 0 /* デバッグ支援は何でもやる */
\r
59 #define JITC_LV_SLOWER 1 /* エラーモジュールはレポートできるが、行番号は分からない、テストは過剰 */
\r
60 #define JITC_LV_SAFE 2 /* とにかく止まる、場所は不明、テストは必要最小限 */
\r
61 #define JITC_LV_FASTER 4 /* 情報は生成するがチェックをしない */
\r
62 #define JITC_LV_FASTEST 5 /* 情報すら生成しない */
\r
63 #define JITC_PHASE1 0x0001
\r
64 #define JITC_SKIPCHECK 0x0002 /* セキュリティチェックを省略する(高速危険モード) */
\r
65 #define JITC_NOSTARTUP 0x0004
\r
66 #define JITC_MAXLABELS 4096
\r
67 #define PTRCTRLSIZ 4096
\r
69 #define APPSIZ1 1 * 1024 * 1024 /* 1MB for now */
\r
70 #define JITSIZ1 1 * 1024 * 1024 /* 1MB for now */
\r
71 #define SJITSIZ1 1 * 1024 * 1024 /* 1MB for now */
\r
72 #define SYSLIBSIZ1 1 * 1024 * 1024 /* 1MB for now */
\r
73 #define SYSTMP0SIZ 1 * 1024 * 1024 /* 1MB for now */
\r
74 #define SYSTMP1SIZ 2 * 1024 * 1024 /* 1MB for now */
\r
76 #define KEYBUFSIZ 4096
\r
78 #define KEY_ENTER '\n'
\r
80 #define KEY_BACKSPACE 8
\r
82 #define KEY_PAGEUP 0x1020
\r
83 #define KEY_PAGEDWN 0x1021
\r
84 #define KEY_END 0x1022
\r
85 #define KEY_HOME 0x1023
\r
86 #define KEY_LEFT 0x1024
\r
87 #define KEY_UP 0x1025
\r
88 #define KEY_RIGHT 0x1026
\r
89 #define KEY_DOWN 0x1027
\r
90 #define KEY_INS 0x1028
\r
91 #define KEY_DEL 0x1029
\r
94 // HOSECPU structures
\r
96 typedef struct PtrCtrl HOSECPU_PointerControlTag;
\r
103 typedef struct Ptr HOSECPU_PointerRegisterEntry;
\r
104 struct Ptr { /* 32バイト(=256bit!) */
\r
107 unsigned char *p0, *p1;
\r
109 HOSECPU_PointerControlTag *pls;
\r
110 int flags, dummy; /* read/writeなど */
\r
113 typedef struct LabelTable HOSECPU_LabelListTag;
\r
114 struct LabelTable {
\r
115 unsigned char *p, *p1;
\r
122 * 将来的には UInt8, SInt32, Flt64, UInt8, VPtr が使えるようになる http://osecpu.osask.jp/wiki/?page0053
\r
127 typedef struct Device_Window HOSECPU_Device_Window;
\r
128 struct Device_Window {
\r
133 typedef struct Regs HOSECPU_RuntimeEnvironment;
\r
135 int ireg[64]; /* 32bit整数レジスタ */
\r
136 HOSECPU_PointerRegisterEntry preg[64]; /* ポインタレジスタ */
\r
138 int debugInfo0, debugInfo1, dmy[2]; /* 2304 */
\r
139 HOSECPU_PointerControlTag *ptrCtrl; /* 2320 */
\r
140 char winClosed, autoSleep;
\r
141 jmp_buf *setjmpEnv;
\r
143 /* Main environment */
\r
144 int mainArgc; // HOSECPU起動引数の個数
\r
145 const char **mainArgv; // HOSECPU起動引数リスト
\r
146 unsigned char *appBin; // 実行するアプリのバイナリ
\r
149 int executionLevel;
\r
152 unsigned char *buf0, *buf1, *junkStack, lastConsoleChar, *junkStack1;
\r
154 HOSECPU_LabelListTag *label;
\r
156 unsigned char *jitbuf, *jitbuf1;
\r
157 void(*errHndl)(HOSECPU_RuntimeEnvironment *);
\r
159 int mapDi1s[16][16];
\r
166 extern int *keybuf, keybuf_r, keybuf_w, keybuf_c;
\r
167 extern HOSECPU_Device_Window mainWindow;
\r
168 // di1_serial: デバッグ用。プログラム中の随所で加算される変数
\r
169 extern int di1_serial;
\r
176 void putKeybuf(int i);
\r
177 int HeavyOSECPUMain(int argc, char **argv);
\r
180 unsigned char *ComLib_main(const unsigned char *p, unsigned char *q);
\r
182 // OSに依存する関数群を定義する。
\r
183 void *mallocRWE(int bytes); // 実行権付きメモリのmalloc.
\r
184 void drv_openWin(int x, int y, unsigned char *buf, char *winClosed);
\r
185 void drv_flshWin(int sx, int sy, int x0, int y0);
\r
186 void drv_sleep(int msec);
\r
189 void dbgrMain(HOSECPU_RuntimeEnvironment *r);
\r
190 const char *searchArg(int argc, const char **argv, const char *tag, int i); // コマンドライン引数処理.
\r
191 void devFunc(HOSECPU_RuntimeEnvironment *r); // junkApiを処理する関数
\r
194 int jitc0(unsigned char **qq, unsigned char *q1, const unsigned char *p0, const unsigned char *p1, int level, HOSECPU_LabelListTag *label);
\r
195 int jitCompiler(unsigned char *dst, unsigned char *dst1, const unsigned char *src, const unsigned char *src1, const unsigned char *src0, HOSECPU_LabelListTag *label, int maxLabels, int level, int debugInfo1, int flags);
\r
196 unsigned char *jitCompCallFunc(unsigned char *dst, void *func);
\r
197 unsigned char *jitCompInit(unsigned char *dst);
\r
198 void errorHandler(HOSECPU_RuntimeEnvironment *r);
\r
201 void randStatInit(unsigned int seed);
\r
202 void randStatNext();
\r
203 unsigned int randGetNextUInt32(void);
\r
206 static int iColor1[] = {
\r
207 0x000000, 0xff0000, 0x00ff00, 0xffff00,
\r
208 0x0000ff, 0xff00ff, 0x00ffff, 0xffffff
\r
210 void putOsaskChar(int c, HOSECPU_RuntimeEnvironment *r);
\r
211 void checkString(HOSECPU_RuntimeEnvironment *r, int rxx, int pxx);
\r
212 void checkRect(HOSECPU_RuntimeEnvironment *r, int rxx);
\r
213 int loadColor(HOSECPU_RuntimeEnvironment *r, int rxx);
\r
215 #if (USE_TEK5 != 0)
\r
216 /* tek.cを移植するのは大変だと思ったので、断念 */
\r
217 #error "tek is not supported. edit switch.h and set USE_TEK5=0"
\r
218 // #include "tek.c"
\r
219 // int tek5Decomp(unsigned char *buf, unsigned char *buf1, unsigned char *tmp);
\r