• R/O
  • HTTP
  • SSH
  • HTTPS

HeavyOSECPU: Commit


Commit MetaInfo

Revisión704f64422b7654fc918d74bd06f684e479bb926b (tree)
Tiempo2014-03-17 07:45:25
Autorttwilb <ttwilb@user...>
Commiterttwilb

Log Message

読みやすく

Cambiar Resumen

Diferencia incremental

--- a/jitcx86.c
+++ b/jitcx86.c
@@ -1467,6 +1467,7 @@ unsigned char *jitCompCallFunc(unsigned char *dst, void *func)
14671467 return w.dst;
14681468 }
14691469
1470+// dst に errHndl() を呼ぶコードを置く。このコードの番地はerrfncにセットされる。
14701471 unsigned char *jitCompInit(unsigned char *dst)
14711472 {
14721473 errfnc = dst;
--- a/main.c
+++ b/main.c
@@ -23,14 +23,13 @@ void putKeybuf(int i)
2323 int HeavyOSECPUMain(int argc, char **argv)
2424 {
2525 FILE *fp;
26- unsigned char *jitbuf, *sysjit00, *sysjit;
26+ unsigned char *jitbuf, *sysjit;
2727 unsigned char *systmp0, *systmp1, *systmp2;
2828 unsigned char *opTbl;
2929 HOSECPU_LabelListTag *label;
3030 int tmpsiz, i;
3131 double tm0, tm1, tm2;
3232 HOSECPU_PointerControlTag *ptrCtrl;
33- unsigned char *syslib;
3433 int argDebug = 0, stacksiz = 1;
3534 const char *cp;
3635 HOSECPU_RuntimeEnvironment env;
@@ -48,11 +47,19 @@ int HeavyOSECPUMain(int argc, char **argv)
4847 env.mainArgv = (const char **)argv;
4948 env.appBin = malloc(APPSIZ1);
5049 env.executionLevel = JITC_LV_SLOWEST;
50+
51+ if (env.mainArgc <= 1)
52+ {
53+ printf("Warning: file name is not set.\n");
54+ return 0;
55+ }
56+
57+ // JITコンパイラ用のバッファを確保
5158 jitbuf = mallocRWE(1024 * 1024); /* とりあえず1MBで */
52- //unsigned char *sysjit0 = mallocRWE(SJITSIZ1), *sysjit1 = sysjit0, *sysjit00 = sysjit0;
59+
5360 // syslib.oseのjitc結果を格納する領域を確保。
54- sysjit00 = mallocRWE(SJITSIZ1);
55- sysjit = sysjit00;
61+ sysjit = mallocRWE(SJITSIZ1 + 256); // jitCompInit() のための領域を多めにとる
62+
5663 // 現在の、jitc結果を格納するメモリへの書き込み位置のアドレス
5764 // sysjit: 現在のjitc書き込み位置
5865 // sysjit00: jitc結果の先頭
@@ -75,19 +82,30 @@ int HeavyOSECPUMain(int argc, char **argv)
7582 ptrCtrl[0].size = -2;
7683
7784 /* syslibの読み込み */
78- syslib = Init_LoadSysLib(argv[0], systmp0);
79-
85+ unsigned char const * const syslib = Init_LoadSysLib(argv[0], systmp0);
86+ if ((argDebug & 4) != 0)
87+ {
88+ fp = fopen("debug4.bin", "wb");
89+ fwrite(syslib, 1, SYSLIBSIZ1, fp);
90+ fclose(fp);
91+ }
92+
93+ // errHndl() を呼ぶコードを置く。このコードの番地はerrfncにセットされる。
8094 sysjit = jitCompInit(sysjit);
81- sysjit00 = sysjit;
95+ unsigned char const * const sysjit00 = sysjit;
96+
8297 // labelはjitc0()内で初期化される。
83- i = jitc0(&sysjit, sysjit00 + SJITSIZ1, syslib + 32, syslib + SYSLIBSIZ1, JITC_LV_SLOWEST+9, label);
98+ i = jitc0(&sysjit, sysjit00 + SJITSIZ1, syslib + 32, syslib + SYSLIBSIZ1, JITC_LV_SLOWEST + 9, label);
8499 if (i != 0){
85- fputs("syslib-file JITC error.\n", stderr);
100+ switch (i)
101+ {
102+ case 1: fputs("syslib-file header error.\n", stderr); break;
103+ default: fputs("syslib-file JITC error.\n", stderr); break;
104+ }
86105 return 1;
87106 }
88107
89- // エラー時にデバッグ用に表示する変数を加算
90- di1_serial++;
108+ di1_serial = 1;
91109
92110 /* アプリバイナリの読み込み */
93111 LoadAppBin(&env);
@@ -95,7 +113,7 @@ int HeavyOSECPUMain(int argc, char **argv)
95113 /* クロック初期化 */
96114 tm0 = clock() / (double)CLOCKS_PER_SEC;
97115
98- if (env.appBin[2] == 0xf0) {
116+ if (env.appBin[2] == 0xf0) { // 最初の2byteはOSECPUのシグネチャである
99117 // tek5圧縮がかかっている
100118 #if (USE_TEK5 != 0)
101119 env.appSize1 = tek5Decomp(env.appBin + 2, env.appBin + env.appSize0, systmp0);
@@ -107,6 +125,8 @@ int HeavyOSECPUMain(int argc, char **argv)
107125 fputs("unsupported-format(tek5)\n", stderr);
108126 return 1;
109127 }
128+
129+
110130 }
111131 //デバッグモード指定
112132 cp = searchArg(argc, (const char **)argv, "debug:", 0);
@@ -124,19 +144,19 @@ int HeavyOSECPUMain(int argc, char **argv)
124144
125145 /* フロントエンドコードをバックエンドコードに変換する */
126146 if ((env.appBin[2] & 0xf0) != 0) { // 3バイト目が00なら処理しない
127- systmp0[0] = env.appBin[0];
128- systmp0[1] = env.appBin[1];
129- env.preg[2].p = systmp0 + 2;
130- env.preg[3].p = systmp0 + SYSTMP0SIZ;
131- env.preg[4].p = env.appBin + 2;
132- env.preg[5].p = env.appBin + env.appSize1;
133- env.preg[6].p = systmp1;
134- env.preg[7].p = systmp1 + SYSTMP1SIZ;
135- env.preg[10].p = systmp2;
147+ systmp0[0] = env.appBin[0]; // 05
148+ systmp0[1] = env.appBin[1]; // E1
149+ env.preg[2].p = systmp0 + 2; // P02 : バックエンドコードを書き出すアドレス
150+ env.preg[3].p = systmp0 + SYSTMP0SIZ; // P03 : バックエンドコードを書き出すアドレスの最大値
151+ env.preg[4].p = env.appBin + 2; // P04 : フロントエンドコードが格納されたアドレス(シグネチャ除く)
152+ env.preg[5].p = env.appBin + env.appSize1; // P05 : フロントエンドコードが存在するアドレスの最大値
153+ env.preg[6].p = systmp1; // P06 : テンポラリメモリを確保したアドレス
154+ env.preg[7].p = systmp1 + SYSTMP1SIZ; // P07 : P06の最大値
155+ env.preg[10].p = systmp2; // P0A : また別のテンポラリ
136156 int pxxFlag[64], typLabel[4096];
137- env.preg[0x0b].p = (void *)pxxFlag;
138- env.preg[0x0c].p = (void *)typLabel;
139- env.preg[0x0d].p = opTbl;
157+ env.preg[0x0b].p = (void *)pxxFlag; // P0B
158+ env.preg[0x0c].p = (void *)typLabel; // P0C
159+ env.preg[0x0d].p = opTbl; // P0D
140160 jitfunc = (void *)sysjit00;
141161 (*jitfunc)(((char *)&env) + 128); /* サイズを節約するためにEBPを128バイトずらす */
142162 if (env.ireg[0] != 0) {
@@ -256,20 +276,22 @@ int HeavyOSECPUMain(int argc, char **argv)
256276 return env.appReturnCode;
257277 }
258278
279+/*
280+ * argv0 : osecpu.exe の存在するパス
281+ * tmpWprkMemory : SYSTMP0SIZ分確保されている
282+ */
259283 unsigned char *Init_LoadSysLib(char argv0[], unsigned char *tmpWorkMemory)
260284 {
261- unsigned char *syslib;
262285 FILE *fp;
263286 unsigned char *up;
264287 int appsize;
265288
266289 /* syslibの読み込み */
267- syslib = malloc(SYSLIBSIZ1);
290+ unsigned char *syslib = malloc(SYSLIBSIZ1);
268291 fp = fopen(SYSLIB_OSE, "rb");
269292 if (fp == NULL) {
270- syslib[0] = '/';
271- strcpy((char *)syslib + 1, argv0);
272- up = syslib + 1;
293+ strcpy((char *)syslib, argv0);
294+ up = syslib;
273295 while (*up != '\0'){
274296 up++;
275297 }
@@ -278,7 +300,7 @@ unsigned char *Init_LoadSysLib(char argv0[], unsigned char *tmpWorkMemory)
278300 }
279301 up++;
280302 strcpy((char *)up, SYSLIB_OSE);
281- fp = fopen((char *)syslib + 1, "rb");
303+ fp = fopen((char *)syslib, "rb");
282304 }
283305 if (fp == NULL) {
284306 fputs("syslib-file fopen error.\n", stderr);
@@ -297,10 +319,7 @@ unsigned char *Init_LoadSysLib(char argv0[], unsigned char *tmpWorkMemory)
297319 syslib[0] = 0x05;
298320 syslib[1] = 0x1b;
299321 }
300-
301- fp = fopen("syslib_dbg.ose", "wb");
302- fwrite(syslib, 1, SYSLIBSIZ1, fp);
303- fclose(fp);
322+
304323 return syslib;
305324 }
306325
@@ -309,10 +328,6 @@ void LoadAppBin(HOSECPU_RuntimeEnvironment *env)
309328 FILE *fp;
310329 const char *fileName;
311330 /* アプリバイナリの読み込み */
312- if (env->mainArgc <= 1) {
313- //アプリ名未指定なので何事もなく終了
314- exit(EXIT_SUCCESS);
315- }
316331 fileName = env->mainArgv[1];
317332 //アプリ名先頭に:n:をつけることでレベルnでの実行が可能?
318333 if (fileName[0] == ':' && fileName[2] == ':') {
--- a/osecpu.h
+++ b/osecpu.h
@@ -1,226 +1,239 @@
1-#ifndef _HDLOAD_OSECPU
2-#define _HDLOAD_OSECPU 1
3-
4-/* Visual Studio で fopen()やsprintf() などの古い関数を使用する時に出る警告を抑止する*/
5-#define _CRT_SECURE_NO_WARNINGS 1
6-
7-//
8-// Including stdc headers
9-//
10-
11-#include <stdio.h>
12-#include <string.h>
13-#include <limits.h>
14-#include <time.h>
15-#include <setjmp.h>
16-#include <stdlib.h>
17-
18-
19-//
20-// Compile options
21-//
22-
23-// Target architecture
24-// 1 : i386
25-#define JITC_ARCNUM 0x0001
26-
27-// Target operating system
28-// 1 : Windows 32bit
29-// 2 : Mac OSX 32bit
30-// 3 : blike for Linux
31-#ifdef _WIN32
32-#define DRV_OSNUM 0x0001
33-#endif
34-#ifdef __APPLE__
35-#define DRV_OSNUM 0x0002
36-#endif
37-#ifdef __linux__
38-#define DRV_OSNUM 0x0003
39-#endif
40-//#define DRV_OSNUM 0x0002
41-
42-// Decoder (syslib.ose) setting
43-// syslib.ose is necessary to work OSECPU
44-#define SYSLIB_OSE "syslib.ose"
45-
46-//
47-// Define constant values
48-//
49-
50-// SIGN1: The 2nd signature of OSECPU Format(05 e1)
51-// It will be changed in OSECPU Rev.2 to "e2" (no adaptation in their binary layers)
52-#define SIGN1 0xe1
53-
54-#define USE_DEBUGGER 1
55-#define USE_TEK5 1
56-
57-/* JITC mode flags */
58-#define JITC_LV_SLOWEST 0 /* デバッグ支援は何でもやる */
59-#define JITC_LV_SLOWER 1 /* エラーモジュールはレポートできるが、行番号は分からない、テストは過剰 */
60-#define JITC_LV_SAFE 2 /* とにかく止まる、場所は不明、テストは必要最小限 */
61-#define JITC_LV_FASTER 4 /* 情報は生成するがチェックをしない */
62-#define JITC_LV_FASTEST 5 /* 情報すら生成しない */
63-#define JITC_PHASE1 0x0001
64-#define JITC_SKIPCHECK 0x0002 /* セキュリティチェックを省略する(高速危険モード) */
65-#define JITC_NOSTARTUP 0x0004
66-#define JITC_MAXLABELS 4096
67-#define PTRCTRLSIZ 4096
68-
69-#define APPSIZ1 1 * 1024 * 1024 /* 1MB for now */
70-#define JITSIZ1 1 * 1024 * 1024 /* 1MB for now */
71-#define SJITSIZ1 1 * 1024 * 1024 /* 1MB for now */
72-#define SYSLIBSIZ1 1 * 1024 * 1024 /* 1MB for now */
73-#define SYSTMP0SIZ 1 * 1024 * 1024 /* 1MB for now */
74-#define SYSTMP1SIZ 2 * 1024 * 1024 /* 1MB for now */
75-
76-#define KEYBUFSIZ 4096
77-
78-#define KEY_ENTER '\n'
79-#define KEY_ESC 27
80-#define KEY_BACKSPACE 8
81-#define KEY_TAB 9
82-#define KEY_PAGEUP 0x1020
83-#define KEY_PAGEDWN 0x1021
84-#define KEY_END 0x1022
85-#define KEY_HOME 0x1023
86-#define KEY_LEFT 0x1024
87-#define KEY_UP 0x1025
88-#define KEY_RIGHT 0x1026
89-#define KEY_DOWN 0x1027
90-#define KEY_INS 0x1028
91-#define KEY_DEL 0x1029
92-
93-//
94-// HOSECPU structures
95-//
96-typedef struct PtrCtrl HOSECPU_PointerControlTag;
97-struct PtrCtrl {
98- int liveSign;
99- int size, typ;
100- unsigned char *p0;
101-};
102-
103-typedef struct Ptr HOSECPU_PointerRegisterEntry;
104-struct Ptr { /* 32バイト(=256bit!) */
105- unsigned char *p;
106- int typ;
107- unsigned char *p0, *p1;
108- int liveSign;
109- HOSECPU_PointerControlTag *pls;
110- int flags, dummy; /* read/writeなど */
111-};
112-
113-typedef struct LabelTable HOSECPU_LabelListTag;
114-struct LabelTable {
115- unsigned char *p, *p1;
116- int opt;
117- /*
118- * default = -1
119- * TYP_CODE = 0
120- * T_UINT8 = 3
121- *
122- * 将来的には UInt8, SInt32, Flt64, UInt8, VPtr が使えるようになる http://osecpu.osask.jp/wiki/?page0053
123- */
124- int typ;
125-};
126-
127-typedef struct Device_Window HOSECPU_Device_Window;
128-struct Device_Window {
129- int *vram;
130- int xsize, ysize;
131-};
132-
133-typedef struct Regs HOSECPU_RuntimeEnvironment;
134-struct Regs {
135- int ireg[64]; /* 32bit整数レジスタ */
136- HOSECPU_PointerRegisterEntry preg[64]; /* ポインタレジスタ */
137- //
138- int debugInfo0, debugInfo1, dmy[2]; /* 2304 */
139- HOSECPU_PointerControlTag *ptrCtrl; /* 2320 */
140- char winClosed, autoSleep;
141- jmp_buf setjmpEnv;
142- int appReturnCode; // アプリ自体の終了コード
143-
144- /* Main environment */
145- int mainArgc; // HOSECPU起動引数の個数
146- const char **mainArgv; // HOSECPU起動引数リスト
147- unsigned char *appBin; // 実行するアプリのバイナリ
148- int appSize0;
149- int appSize1;
150- int executionLevel;
151-
152- /* for-junkApi */
153- unsigned char *buf0, *buf1, *junkStack, lastConsoleChar, *junkStack1;
154-
155- HOSECPU_LabelListTag *label;
156- int maxLabels;
157- unsigned char *jitbuf, *jitbuf1;
158- void(*errHndl)(HOSECPU_RuntimeEnvironment *);
159- char dbgr;
160- int mapDi1s[16][16];
161-};
162-
163-//
164-// Grobal values
165-//
166-
167-extern int *keybuf, keybuf_r, keybuf_w, keybuf_c;
168-extern HOSECPU_Device_Window mainWindow;
169-// di1_serial: デバッグ用。プログラム中の随所で加算される変数
170-extern int di1_serial;
171-
172-//
173-// Functions
174-//
175-
176-// @main.c
177-void putKeybuf(int i);
178-int HeavyOSECPUMain(int argc, char **argv);
179-
180-// @comlib.c
181-unsigned char *ComLib_main(const unsigned char *p, unsigned char *q);
182-// @dpndenv.c
183-// OSに依存する関数群を定義する。
184-void *mallocRWE(int bytes); // 実行権付きメモリのmalloc.
185-void drv_openWin(int x, int y, unsigned char *buf, char *winClosed);
186-void drv_flshWin(int sx, int sy, int x0, int y0);
187-void drv_sleep(int msec);
188-
189-// @function.c
190-void dbgrMain(HOSECPU_RuntimeEnvironment *r);
191-const char *searchArg(int argc, const char **argv, const char *tag, int i); // コマンドライン引数処理.
192-void devFunc(HOSECPU_RuntimeEnvironment *r); // junkApiを処理する関数
193-
194-// @jitc.c
195-int jitc0(unsigned char **qq, unsigned char *q1, const unsigned char *p0, const unsigned char *p1, int level, HOSECPU_LabelListTag *label);
196-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);
197-unsigned char *jitCompCallFunc(unsigned char *dst, void *func);
198-unsigned char *jitCompInit(unsigned char *dst);
199-void errorHandler(HOSECPU_RuntimeEnvironment *r);
200-
201-// @randmt.c
202-void randStatInit(unsigned int seed);
203-void randStatNext();
204-unsigned int randGetNextUInt32(void);
205-
206-// @screen.c
207-static int iColor1[] = {
208- 0x000000, 0xff0000, 0x00ff00, 0xffff00,
209- 0x0000ff, 0xff00ff, 0x00ffff, 0xffffff
210-};
211-void putOsaskChar(int c, HOSECPU_RuntimeEnvironment *r);
212-void checkString(HOSECPU_RuntimeEnvironment *r, int rxx, int pxx);
213-void checkRect(HOSECPU_RuntimeEnvironment *r, int rxx);
214-int loadColor(HOSECPU_RuntimeEnvironment *r, int rxx);
215-
216-// @usetek.c
217-#if (USE_TEK5 != 0)
218-#include "tek.h"
219-int appackSub2(const UCHAR **pp, char *pif);
220-int appackSub3u(const UCHAR **pp, char *pif);
221-int tek5Decomp(UCHAR *buf, UCHAR *buf1, UCHAR *tmp);
222-#endif
223-
224-
225-#endif
226-
1+#ifndef _HDLOAD_OSECPU
2+#define _HDLOAD_OSECPU 1
3+
4+/* Visual Studio で fopen()やsprintf() などの古い関数を使用する時に出る警告を抑止する*/
5+#define _CRT_SECURE_NO_WARNINGS 1
6+
7+//
8+// Including stdc headers
9+//
10+
11+#include <stdio.h>
12+#include <string.h>
13+#include <limits.h>
14+#include <time.h>
15+#include <setjmp.h>
16+#include <stdlib.h>
17+
18+
19+//
20+// Compile options
21+//
22+
23+// Target architecture
24+// 1 : i386
25+#define JITC_ARCNUM 0x0001
26+
27+// Target operating system
28+// 1 : Windows 32bit
29+// 2 : Mac OSX 32bit
30+// 3 : blike for Linux
31+#ifdef _WIN32
32+#define DRV_OSNUM 0x0001
33+#endif
34+#ifdef __APPLE__
35+#define DRV_OSNUM 0x0002
36+#endif
37+#ifdef __linux__
38+#define DRV_OSNUM 0x0003
39+#endif
40+//#define DRV_OSNUM 0x0002
41+
42+// Decoder (syslib.ose) setting
43+// syslib.ose is necessary to work OSECPU
44+#define SYSLIB_OSE "syslib.ose"
45+
46+//
47+// Define constant values
48+//
49+
50+// SIGN1: The 2nd signature of OSECPU Format(05 e1)
51+// It will be changed in OSECPU Rev.2 to "e2" (no adaptation in their binary layers)
52+#define SIGN1 0xe1
53+
54+#define USE_DEBUGGER 1
55+#define USE_TEK5 1
56+
57+/* JITC mode flags */
58+#define JITC_LV_SLOWEST 0 /* デバッグ支援は何でもやる */
59+#define JITC_LV_SLOWER 1 /* エラーモジュールはレポートできるが、行番号は分からない、テストは過剰 */
60+#define JITC_LV_SAFE 2 /* とにかく止まる、場所は不明、テストは必要最小限 */
61+#define JITC_LV_FASTER 4 /* 情報は生成するがチェックをしない */
62+#define JITC_LV_FASTEST 5 /* 情報すら生成しない */
63+#define JITC_PHASE1 0x0001
64+#define JITC_SKIPCHECK 0x0002 /* セキュリティチェックを省略する(高速危険モード) */
65+#define JITC_NOSTARTUP 0x0004
66+#define JITC_MAXLABELS 4096
67+#define PTRCTRLSIZ 4096
68+
69+#define APPSIZ1 1 * 1024 * 1024 /* 1MB for now */
70+#define JITSIZ1 1 * 1024 * 1024 /* 1MB for now */
71+#define SJITSIZ1 1 * 1024 * 1024 /* 1MB for now */
72+#define SYSLIBSIZ1 1 * 1024 * 1024 /* 1MB for now */
73+#define SYSTMP0SIZ 1 * 1024 * 1024 /* 1MB for now */
74+#define SYSTMP1SIZ 2 * 1024 * 1024 /* 1MB for now */
75+
76+#define KEYBUFSIZ 4096
77+
78+#define KEY_ENTER '\n'
79+#define KEY_ESC 27
80+#define KEY_BACKSPACE 8
81+#define KEY_TAB 9
82+#define KEY_PAGEUP 0x1020
83+#define KEY_PAGEDWN 0x1021
84+#define KEY_END 0x1022
85+#define KEY_HOME 0x1023
86+#define KEY_LEFT 0x1024
87+#define KEY_UP 0x1025
88+#define KEY_RIGHT 0x1026
89+#define KEY_DOWN 0x1027
90+#define KEY_INS 0x1028
91+#define KEY_DEL 0x1029
92+
93+//
94+// HOSECPU structures
95+//
96+typedef struct PtrCtrl HOSECPU_PointerControlTag;
97+struct PtrCtrl {
98+ int liveSign;
99+ int size, typ;
100+ unsigned char *p0;
101+};
102+
103+// Ptr
104+typedef struct Ptr HOSECPU_PointerRegisterEntry;
105+struct Ptr { /* 32バイト(=256bit!) */
106+ unsigned char *p;
107+
108+ /* static char *typName[] = {
109+ "T_CODE", "T_VPTR", "T_SINT8", "T_UINT8",
110+ "T_SINT16", "T_UINT16", "T_SINT32", "T_UINT32",
111+ "T_SINT4", "T_UINT4", "T_SINT2", "T_UINT2",
112+ "T_SINT1", "T_UINT1", "T_SINT12", "T_UINT12",
113+ "T_SINT20", "T_UINT20", "T_SINT24", "T_UINT24",
114+ "T_SINT28", "T_UINT28"
115+ } ; */
116+ int typ;
117+ unsigned char *p0, *p1;
118+ int liveSign;
119+ HOSECPU_PointerControlTag *pls;
120+ int flags, dummy; /* read/writeなど */
121+};
122+
123+// LabelTable
124+typedef struct LabelTable HOSECPU_LabelListTag;
125+struct LabelTable {
126+ unsigned char *p, *p1;
127+ int opt;
128+ /*
129+ * default = -1
130+ * TYP_CODE = 0
131+ * T_UINT8 = 3
132+ *
133+ * 将来的には UInt8, SInt32, Flt64, UInt8, VPtr が使えるようになる http://osecpu.osask.jp/wiki/?page0053
134+ */
135+ int typ;
136+};
137+
138+// Device_Window
139+typedef struct Device_Window HOSECPU_Device_Window;
140+struct Device_Window {
141+ int *vram; // 初期値 : NULL
142+ int xsize, ysize; // 初期値 : 0, 0
143+};
144+
145+// Regs + env
146+typedef struct Regs HOSECPU_RuntimeEnvironment;
147+struct Regs{
148+ int ireg[64]; /* 32bit整数レジスタ */
149+ HOSECPU_PointerRegisterEntry preg[64]; /* ポインタレジスタ */
150+ //
151+ int debugInfo0, debugInfo1, dmy[2]; /* 2304 */
152+ HOSECPU_PointerControlTag *ptrCtrl; /* 2320 */
153+ char winClosed, autoSleep;
154+ jmp_buf setjmpEnv;
155+ int appReturnCode; // アプリ自体の終了コード
156+
157+ /* Main environment */
158+ int mainArgc; // HOSECPU起動引数の個数
159+ const char **mainArgv; // HOSECPU起動引数リスト
160+ unsigned char *appBin; // 実行するアプリのバイナリ
161+ int appSize0; // アプリバイナリ読み込み時のサイズ(定数)
162+ int appSize1; // アプリのフロントエンドコードのサイズ(tek解凍後)
163+ int executionLevel;
164+
165+ /* for-junkApi */
166+ unsigned char *buf0, *buf1, *junkStack, lastConsoleChar, *junkStack1;
167+
168+ HOSECPU_LabelListTag *label;
169+ int maxLabels;
170+ unsigned char *jitbuf, *jitbuf1;
171+ void(*errHndl)(HOSECPU_RuntimeEnvironment *);
172+ char dbgr;
173+ int mapDi1s[16][16];
174+};
175+
176+//
177+// Grobal values
178+//
179+
180+extern int *keybuf, keybuf_r, keybuf_w, keybuf_c;
181+extern HOSECPU_Device_Window mainWindow;
182+// di1_serial: デバッグ用。プログラム中の随所で加算される変数
183+extern int di1_serial;
184+
185+//
186+// Functions
187+//
188+
189+// @main.c
190+void putKeybuf(int i);
191+int HeavyOSECPUMain(int argc, char **argv);
192+
193+// @comlib.c
194+unsigned char *ComLib_main(const unsigned char *p, unsigned char *q);
195+// @dpndenv.c
196+// OSに依存する関数群を定義する。
197+void *mallocRWE(int bytes); // 実行権付きメモリのmalloc.
198+void drv_openWin(int x, int y, unsigned char *buf, char *winClosed);
199+void drv_flshWin(int sx, int sy, int x0, int y0);
200+void drv_sleep(int msec);
201+
202+// @function.c
203+void dbgrMain(HOSECPU_RuntimeEnvironment *r);
204+const char *searchArg(int argc, const char **argv, const char *tag, int i); // コマンドライン引数処理.
205+void devFunc(HOSECPU_RuntimeEnvironment *r); // junkApiを処理する関数
206+
207+// @jitc.c
208+int jitc0(unsigned char **qq, unsigned char *q1, const unsigned char *p0, const unsigned char *p1, int level, HOSECPU_LabelListTag *label);
209+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);
210+unsigned char *jitCompCallFunc(unsigned char *dst, void *func);
211+unsigned char *jitCompInit(unsigned char *dst);
212+void errorHandler(HOSECPU_RuntimeEnvironment *r);
213+
214+// @randmt.c
215+void randStatInit(unsigned int seed);
216+void randStatNext();
217+unsigned int randGetNextUInt32(void);
218+
219+// @screen.c
220+static int iColor1[] = {
221+ 0x000000, 0xff0000, 0x00ff00, 0xffff00,
222+ 0x0000ff, 0xff00ff, 0x00ffff, 0xffffff
223+};
224+void putOsaskChar(int c, HOSECPU_RuntimeEnvironment *r);
225+void checkString(HOSECPU_RuntimeEnvironment *r, int rxx, int pxx);
226+void checkRect(HOSECPU_RuntimeEnvironment *r, int rxx);
227+int loadColor(HOSECPU_RuntimeEnvironment *r, int rxx);
228+
229+// @usetek.c
230+#if (USE_TEK5 != 0)
231+#include "tek.h"
232+int appackSub2(const UCHAR **pp, char *pif);
233+int appackSub3u(const UCHAR **pp, char *pif);
234+int tek5Decomp(UCHAR *buf, UCHAR *buf1, UCHAR *tmp);
235+#endif
236+
237+
238+#endif
239+
Show on old repository browser