#include "osecpu.h"\r
+#include "jitc.h"\r
\r
extern unsigned char fontdata[]; // @fontdata.c\r
\r
unsigned char pucbuf[256];\r
\r
//サイズを節約するためにEBPを128バイトずらしているのを元に戻す\r
- r = (HOSECPU_RuntimeEnvironment *) (((char *)r) - 128);\r
+ r = (HOSECPU_RuntimeEnvironment *) (((char *)r) - jitCompA0001_EBP128);\r
\r
if (r->winClosed != 0){\r
longjmp(r->setjmpEnv, 1);\r
\r
case 0xff42:\r
// junkApi_sleep(opt, msec) R31=opt; R32=msec\r
+ // opt:\r
+ // 1 = ついでにウィンドウを更新する\r
+ // 2 = キー入力されるまでずっと待つ\r
if (r->ireg[0x32] == -1) {\r
+ // sleep forever (事実上実行は終了)\r
r->autoSleep = 1;\r
longjmp(r->setjmpEnv, 1);\r
}\r
if (r->ireg[0x32] < 0){\r
+ // マイナス秒スリープするなんておかしい\r
(*(r->errHndl))(r);\r
}\r
+ //スリープしたので終了時の自動スリープ無効\r
r->autoSleep = 0;\r
if ((r->ireg[0x31] & 1) == 0 && mainWindow.vram != NULL){\r
+ // opt1:ついでにウィンドウを更新する\r
drv_flshWin(mainWindow.xsize, mainWindow.ysize, 0, 0);\r
}\r
for (;;) {\r
}\r
drv_sleep(r->ireg[0x32]);\r
if ((r->ireg[0x31] & 2) != 0 && keybuf_c <= 0){\r
+ // opt2:キー入力があったので戻る\r
continue;\r
}\r
+ // 時間指定ならここに来て終了\r
break;\r
}\r
break;\r
\r
case 0xff43:\r
// junkApi_inkey(_i, mod) R31=mod; _i=R30\r
- // 1:peek\r
+ // 1:peek(キーを「のぞき見る」だけで、バッファは進めない)\r
// 2:stdin\r
// 4,8: ソース指定.\r
// 16: shift, lock系を有効化.\r
// 32: 左右のshift系を区別する.\r
- if (r->ireg[0x31] == 2) { // なぜ3にしなかったのか...\r
+ // カーソルキーの左右でR32は減少,増加する。\r
+ // カーソルキーの上下でR33は減少,増加する。\r
+ if (r->ireg[0x31] == 2) {\r
+ // 標準入力から\r
r->ireg[0x30] = fgetc(stdin);\r
if (r->ireg[0x30] == EOF){\r
- r->ireg[0x30] = -1;\r
+ r->ireg[0x30] = KEY_EMPTY;\r
}\r
break;\r
}\r
r->ireg[0x30] |= -1;\r
if (keybuf_c > 0) {\r
+ // 入力された文字がある\r
r->ireg[0x30] = keybuf[keybuf_r];\r
if ((r->ireg[0x31] & 16) == 0){\r
+ // shift, lockキー([C]マークのあるキー)の無効化\r
r->ireg[0x30] &= 0x3e3effff;\r
}\r
if ((r->ireg[0x31] & 32) == 0){\r
+ // 左右の区別を無効化\r
r->ireg[0x30] |= (r->ireg[0x30] >> 8) & 0xff0000;\r
}\r
if ((r->ireg[0x31] & 1) != 0) {\r
+ // peekでないならバッファを進める\r
keybuf_c--;\r
keybuf_r = (keybuf_r + 1) & (KEYBUFSIZ - 1);\r
}\r
}\r
r->ireg[0x32] = r->ireg[0x33] = 0;\r
- if (r->ireg[0x30] == 4132) r->ireg[0x32]--;\r
- if (r->ireg[0x30] == 4133) r->ireg[0x33]--;\r
- if (r->ireg[0x30] == 4134) r->ireg[0x32]++;\r
- if (r->ireg[0x30] == 4135) r->ireg[0x33]++;\r
+ if (r->ireg[0x30] == KEY_LEFT){\r
+ r->ireg[0x32]--;\r
+ }\r
+ if (r->ireg[0x30] == KEY_UP){\r
+ r->ireg[0x33]--;\r
+ }\r
+ if (r->ireg[0x30] == KEY_RIGHT){\r
+ r->ireg[0x32]++;\r
+ }\r
+ if (r->ireg[0x30] == KEY_DOWN){\r
+ r->ireg[0x33]++;\r
+ }\r
break;\r
\r
case 0xff44:\r