-#ifndef _HDLOAD_OSECPU
+#ifndef _HDLOAD_OSECPU
#define _HDLOAD_OSECPU 1
/* Visual Studio で fopen()やsprintf() などの古い関数を使用する時に出る警告を抑止する*/
// 1 : Windows 32bit
// 2 : Mac OSX 32bit
// 3 : blike for Linux
-
#ifdef _WIN32
#define DRV_OSNUM 0x0001
#endif
// syslib.ose is necessary to work OSECPU
#define SYSLIB_OSE "syslib.ose"
+//
+// Define constant values
+//
-/*
- * The 2nd signature of OSECPU Format(05 e1)
- * It will be changed in OSECPU Rev.2 to "e2" (no adaptation in their binary layers)
- */
+// SIGN1: The 2nd signature of OSECPU Format(05 e1)
+// It will be changed in OSECPU Rev.2 to "e2" (no adaptation in their binary layers)
#define SIGN1 0xe1
#define USE_DEBUGGER 1
-#define USE_TEK5 0 //元々は1
+#define USE_TEK5 1
+
+/* JITC mode flags */
+#define JITC_LV_SLOWEST 0 /* デバッグ支援は何でもやる */
+#define JITC_LV_SLOWER 1 /* エラーモジュールはレポートできるが、行番号は分からない、テストは過剰 */
+#define JITC_LV_SAFE 2 /* とにかく止まる、場所は不明、テストは必要最小限 */
+#define JITC_LV_FASTER 4 /* 情報は生成するがチェックをしない */
+#define JITC_LV_FASTEST 5 /* 情報すら生成しない */
+#define JITC_PHASE1 0x0001
+#define JITC_SKIPCHECK 0x0002 /* セキュリティチェックを省略する(高速危険モード) */
+#define JITC_NOSTARTUP 0x0004
+#define JITC_MAXLABELS 4096
+#define PTRCTRLSIZ 4096
#define APPSIZ1 1 * 1024 * 1024 /* 1MB for now */
-#define JITSIZ1 1 * 1024 * 1024 /* 1MB for now */
-#define SJITSIZ1 1 * 1024 * 1024 /* 1MB for now */
+#define APPJITSIZE 1 * 1024 * 1024 /* 1MB for now */
+#define SYSJITSIZ1 2 * 1024 * 1024 /* 1MB for now */
#define SYSLIBSIZ1 1 * 1024 * 1024 /* 1MB for now */
#define SYSTMP0SIZ 1 * 1024 * 1024 /* 1MB for now */
#define SYSTMP1SIZ 2 * 1024 * 1024 /* 1MB for now */
#define KEYBUFSIZ 4096
+#define KEY_ENTER '\n'
+#define KEY_ESC 27
+#define KEY_BACKSPACE 8
+#define KEY_TAB 9
+#define KEY_PAGEUP 0x1020
+#define KEY_PAGEDWN 0x1021
+#define KEY_END 0x1022
+#define KEY_HOME 0x1023
+#define KEY_LEFT 0x1024
+#define KEY_UP 0x1025
+#define KEY_RIGHT 0x1026
+#define KEY_DOWN 0x1027
+#define KEY_INS 0x1028
+#define KEY_DEL 0x1029
+
//
// HOSECPU structures
//
};
typedef struct Ptr HOSECPU_PointerRegisterEntry;
-struct Ptr { /* 32バイト(=256bit!) */
+struct Ptr {
+ // 32バイト(=256bit!)
unsigned char *p;
+
+ /* static char *typName[] = {
+ "T_CODE", "T_VPTR", "T_SINT8", "T_UINT8",
+ "T_SINT16", "T_UINT16", "T_SINT32", "T_UINT32",
+ "T_SINT4", "T_UINT4", "T_SINT2", "T_UINT2",
+ "T_SINT1", "T_UINT1", "T_SINT12", "T_UINT12",
+ "T_SINT20", "T_UINT20", "T_SINT24", "T_UINT24",
+ "T_SINT28", "T_UINT28"
+ } ; */
int typ;
unsigned char *p0, *p1;
int liveSign;
int typ;
};
+typedef struct Device_Window HOSECPU_Device_Window;
+struct Device_Window {
+ int *vram;
+ int xsize, ysize;
+};
+
typedef struct Regs HOSECPU_RuntimeEnvironment;
struct Regs {
- int ireg[64]; /* 32bit整数レジスタ */
- HOSECPU_PointerRegisterEntry preg[64]; /* ポインタレジスタ */
+ int ireg[64]; // 整数レジスタ (4 * 64) = 256
+ HOSECPU_PointerRegisterEntry preg[64]; // ポインタレジスタ (32 * 64) = 2048
//
- int debugInfo0, debugInfo1, dmy[2]; /* 2304 */
- HOSECPU_PointerControlTag *ptrCtrl; /* 2320 */
+ int debugInfo0; // 2304
+ int debugInfo1; // 2308
+ int dbg_currentCode; // 2312
+ int dmy; // 2316
+ //
+ HOSECPU_PointerControlTag *ptrCtrl; // 2320
char winClosed, autoSleep;
- jmp_buf *setjmpEnv;
+ jmp_buf setjmpEnv;
+ int appReturnCode; // アプリ自体の終了コード
/* Main environment */
int mainArgc; // HOSECPU起動引数の個数
int executionLevel;
/* for-junkApi */
- //int argc;
- //const char **argv;
unsigned char *buf0, *buf1, *junkStack, lastConsoleChar, *junkStack1;
-
+
HOSECPU_LabelListTag *label;
int maxLabels;
unsigned char *jitbuf, *jitbuf1;
int mapDi1s[16][16];
};
-
//
-// Define constant values
+// Grobal values
//
-#define KEY_ENTER '\n'
-#define KEY_ESC 27
-#define KEY_BACKSPACE 8
-#define KEY_TAB 9
-#define KEY_PAGEUP 0x1020
-#define KEY_PAGEDWN 0x1021
-#define KEY_END 0x1022
-#define KEY_HOME 0x1023
-#define KEY_LEFT 0x1024
-#define KEY_UP 0x1025
-#define KEY_RIGHT 0x1026
-#define KEY_DOWN 0x1027
-#define KEY_INS 0x1028
-#define KEY_DEL 0x1029
-
-//
-// Grobal static values
-//
-
-static int *keybuf, keybuf_r, keybuf_w, keybuf_c;
-static int *vram = NULL, v_xsiz, v_ysiz;
-
-//デバッグ用。プログラム中の随所で加算される変数
-static int di1_serial = 0;
+extern int *keybuf, keybuf_r, keybuf_w, keybuf_c;
+extern HOSECPU_Device_Window mainWindow;
+// di1_serial: デバッグ用。プログラム中の随所で加算される変数
+extern int di1_serial;
//
// Functions
// @function.c
void dbgrMain(HOSECPU_RuntimeEnvironment *r);
const char *searchArg(int argc, const char **argv, const char *tag, int i); // コマンドライン引数処理.
-void randStatInit(unsigned int seed);
-void randStatNext();
void devFunc(HOSECPU_RuntimeEnvironment *r); // junkApiを処理する関数
// @jitc.c
-/* JITCのフラグ群 */
-#define JITC_LV_SLOWEST 0 /* デバッグ支援は何でもやる */
-#define JITC_LV_SLOWER 1 /* エラーモジュールはレポートできるが、行番号は分からない、テストは過剰 */
-#define JITC_LV_SAFE 2 /* とにかく止まる、場所は不明、テストは必要最小限 */
-#define JITC_LV_FASTER 4 /* 情報は生成するがチェックをしない */
-#define JITC_LV_FASTEST 5 /* 情報すら生成しない */
-#define JITC_PHASE1 0x0001
-#define JITC_SKIPCHECK 0x0002 /* セキュリティチェックを省略する(高速危険モード) */
-#define JITC_NOSTARTUP 0x0004
-#define JITC_MAXLABELS 4096
-#define PTRCTRLSIZ 4096
+void errorHandler(HOSECPU_RuntimeEnvironment *r);
+void PRegCopy(HOSECPU_PointerRegisterEntry *dst, HOSECPU_PointerRegisterEntry *src);
+// @jitcx86.c
int jitc0(unsigned char **qq, unsigned char *q1, const unsigned char *p0, const unsigned char *p1, int level, HOSECPU_LabelListTag *label);
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);
unsigned char *jitCompCallFunc(unsigned char *dst, void *func);
unsigned char *jitCompInit(unsigned char *dst);
-void errorHandler(HOSECPU_RuntimeEnvironment *r);
+void jitcRunBinary(void (*bin)(char *), HOSECPU_RuntimeEnvironment *env);
+
+// @randmt.c
+void randStatInit(unsigned int seed);
+void randStatNext();
+unsigned int randGetNextUInt32(void);
// @screen.c
static int iColor1[] = {
void checkRect(HOSECPU_RuntimeEnvironment *r, int rxx);
int loadColor(HOSECPU_RuntimeEnvironment *r, int rxx);
+// @usetek.c
#if (USE_TEK5 != 0)
-/* tek.cを移植するのは大変だと思ったので、断念 */
-#error "tek is not supported. edit switch.h and set USE_TEK5=0"
-// #include "tek.c"
-// int tek5Decomp(unsigned char *buf, unsigned char *buf1, unsigned char *tmp);
+#include "tek.h"
+int appackSub2(const UCHAR **pp, char *pif);
+int appackSub3u(const UCHAR **pp, char *pif);
+int tek5Decomp(UCHAR *buf, UCHAR *buf1, UCHAR *tmp);
#endif
#endif
-