• R/O
  • HTTP
  • SSH
  • HTTPS

HeavyOSECPU: Commit


Commit MetaInfo

Revisión53a2ae5571cc5991f74e3f18144e32a7b0d88606 (tree)
Tiempo2014-03-10 10:08:07
Autorttwilb <ttwilb@user...>
Commiterttwilb

Log Message

VisualStudioでの警告抑制とコメント付加

Cambiar Resumen

Diferencia incremental

--- a/jitc.c
+++ b/jitc.c
@@ -1412,7 +1412,10 @@ unsigned char *jitCompCallFunc(unsigned char *dst, void *func)
14121412 jitCompPutByte1(w.dst, 0x55); /* PUSH(EBP); */
14131413 jitCompPutByte1(w.dst, 0xe8); /* CALL(func); */
14141414 int j = ((unsigned char *)func) - (w.dst + 4);
1415+
1416+ //この関数の中では結局w->dstしか参照していない
14151417 jitCompPutImm32(&w, j);
1418+
14161419 jitCompPutByte1(w.dst, 0x58); /* POP(EAX); */ /* (win32では不要なのだけど、MacOSには必要らしい) */
14171420 jitCompPutByte1(w.dst, 0x58); /* POP(EAX); */
14181421 jitCompPutByte1(w.dst, 0x61); /* POPAD(); */
@@ -1543,6 +1546,15 @@ void errHndl(struct Regs *r)
15431546 // ここに帰ってきてはいけない.
15441547 }
15451548
1549+/*
1550+ * qq : 出力バイナリの書き込み位置のアドレスへの参照(書き込み位置を呼び出しに反映させるため参照渡しにする)
1551+ * q1 : 出力バイナリの書き込み位置のアドレスの最大値
1552+ * p0 : (*.ose)バイナリの読み込み位置のアドレス(ヘッダ部除去済)
1553+ * p1 : (*.ose)バイナリの読み込み位置の取りうる最大値
1554+ * (ただし、「確保したメモリ」の最大値なのでこれより手前にゴミデータが入っているかもしれない)
1555+ * ret=1 : ヘッダのエラー
1556+ * ret=2 : jitコンパイルエラー
1557+ */
15461558 int jitc0(unsigned char **qq, unsigned char *q1, const unsigned char *p0, const unsigned char *p1, int level, struct LabelTable *label)
15471559 {
15481560 unsigned char *q = *qq;
--- a/main.c
+++ b/main.c
@@ -14,7 +14,14 @@ int osecpuMain(int argc, char **argv)
1414 {
1515 unsigned char *appbin = malloc(APPSIZ1), *up;
1616 unsigned char *jitbuf = mallocRWE(1024 * 1024); /* とりあえず1MBで */
17- unsigned char *sysjit0 = mallocRWE(SJITSIZ1), *sysjit1 = sysjit0, *sysjit00 = sysjit0;
17+ //unsigned char *sysjit0 = mallocRWE(SJITSIZ1), *sysjit1 = sysjit0, *sysjit00 = sysjit0;
18+
19+ // syslib.oseのjitc結果を格納する領域を確保。
20+ unsigned char *sysjit00 = mallocRWE(SJITSIZ1);
21+
22+ // 現在の、jitc結果を格納するメモリへの書き込み位置のアドレス
23+ unsigned char *sysjit = sysjit00;
24+
1825 unsigned char *systmp0 = malloc(SYSTMP0SIZ);
1926 unsigned char *systmp1 = malloc(SYSTMP1SIZ);
2027 unsigned char *systmp2 = malloc(1024 * 1024), *opTbl = malloc(256);
@@ -58,19 +65,32 @@ int osecpuMain(int argc, char **argv)
5865 return 1;
5966 }
6067 if (syslib[0] == 0x05 && syslib[1] == 0xc1) {
68+
69+ // 一体この部分ではなにをやっているのだろう?
70+ // OSECPUに0x05, 0x1bという命令はないが... ヘッダ?
71+ // どうせ初めからの32バイトは無視されるのだろうに...
72+
6173 memcpy(systmp0, syslib, appsiz0);
6274 ComLib_main(systmp0 + 2, syslib + 2);
6375 syslib[0] = 0x05;
6476 syslib[1] = 0x1b;
6577 }
6678
67- sysjit1 = jitCompInit(sysjit1);
68- sysjit0 = sysjit1;
69- i = jitc0(&sysjit1, sysjit00 + SJITSIZ1, syslib + 32, syslib + SYSLIBSIZ1, JITC_LV_SLOWEST + 9, label);
79+ // jutc.cのerrHndl()をCALLするネィティブコードを挿入。
80+ // sysjitの値は次の書き込み位置へずらされる。
81+ // 元々のsysjitはsysjit00へ保存されている。
82+ sysjit = jitCompInit(sysjit);
83+
84+ // sysjit (アドレス変数)は下の関数の実行で変更される(だから参照渡し)
85+ // もちろんsysjitの値は次の書き込み位置へずらされる。
86+ // labelはjitc0()内で初期化される。
87+ i = jitc0(&sysjit, sysjit00 + SJITSIZ1, syslib + 32, syslib + SYSLIBSIZ1, JITC_LV_FASTEST, label);
7088 if (i != 0) {
7189 fputs("syslib-file JITC error.¥n", stderr);
7290 return 1;
7391 }
92+
93+ // エラー時にデバッグ用に表示する変数を加算
7494 di1_serial++;
7595
7696 /* アプリバイナリの読み込み */
@@ -138,7 +158,7 @@ int osecpuMain(int argc, char **argv)
138158 regs.preg[0x0b].p = (void *)pxxFlag;
139159 regs.preg[0x0c].p = (void *)typLabel;
140160 regs.preg[0x0d].p = opTbl;
141- jitfunc = (void *)sysjit0;
161+ jitfunc = (void *)sysjit;
142162 (*jitfunc)(((char *)&regs) + 128); /* サイズを節約するためにEBPを128バイトずらす */
143163 if (regs.ireg[0] != 0) {
144164 jp = regs.preg[2].p - 1;
--- a/osecpu.h
+++ b/osecpu.h
@@ -3,6 +3,10 @@
33
44 // プロジェクトのすべてのファイルで読み込むヘッダ
55
6+
7+/* Visual Studio で fopen()やsprintf() などの古い関数を使用する時に出る警告を抑止する*/
8+#define _CRT_SECURE_NO_WARNINGS 1
9+
610 #include <stdio.h>
711 #include <string.h>
812 #include <limits.h>
@@ -69,6 +73,8 @@ struct Regs {
6973
7074 static int *keybuf, keybuf_r, keybuf_w, keybuf_c;
7175 static int *vram = NULL, v_xsiz, v_ysiz;
76+
77+//デバッグ用。プログラム中の随所で加算される変数
7278 static int di1_serial = 0;
7379
7480 // main.c
--- a/switch.h
+++ b/switch.h
@@ -5,7 +5,6 @@
55 * このファイルを編集することでコンパイルの仕方を変更できます
66 */
77
8-
98 /*
109 * CPUのアーキテクチャ
1110 * 1 : i386
Show on old repository browser