Revisión | f26f3c31cf3d5cd80d2be5d7056c15f3eb382957 (tree) |
---|---|
Tiempo | 2014-03-13 14:49:53 |
Autor | ttwilb <ttwilb@user...> |
Commiter | ttwilb |
API comment added
@@ -44,6 +44,7 @@ void devFunc0001(int len, unsigned char *puc, HOSECPU_RuntimeEnvironment *r) | ||
44 | 44 | return; |
45 | 45 | } |
46 | 46 | |
47 | +// drawString | |
47 | 48 | void devFunc0006(int mod, int sx, int sy, int x, int y, int c, int len, unsigned char *puc, HOSECPU_RuntimeEnvironment *r) |
48 | 49 | { |
49 | 50 | int xx; |
@@ -269,7 +270,8 @@ void devFunc(HOSECPU_RuntimeEnvironment *r) | ||
269 | 270 | printf("R31=%d(dec)\n", r->ireg[0x31]); |
270 | 271 | break; |
271 | 272 | |
272 | - case 0xff01: | |
273 | + case 0xff01: // junkApi_fopenRead(_filesize, _p, arg) R31=arg; PCALL(P28); _filesize=R30; _p=P31 | |
274 | + | |
273 | 275 | /* return: R30, P31 */ |
274 | 276 | if (r->buf0 == NULL){ |
275 | 277 | r->buf0 = malloc(1024 * 1024); |
@@ -296,7 +298,7 @@ void devFunc(HOSECPU_RuntimeEnvironment *r) | ||
296 | 298 | r->ireg[0x30] = i; |
297 | 299 | break; |
298 | 300 | |
299 | - case 0xff02: | |
301 | + case 0xff02: // junkApi_fopenWrite(arg, filesize, p) R31=arg; R32=filesize; P31=p; | |
300 | 302 | /* return: none */ |
301 | 303 | if (r->mainArgc <= r->ireg[0x31]) { |
302 | 304 | fprintf(stderr, "devFunc: error: R30=ff02: argc error: R31=%08X\n", r->ireg[0x31]); |
@@ -315,7 +317,7 @@ void devFunc(HOSECPU_RuntimeEnvironment *r) | ||
315 | 317 | fclose(fp); |
316 | 318 | break; |
317 | 319 | |
318 | - case 0xff03: | |
320 | + case 0xff03: // junkApi_allocBuf(_p) _p=P31 | |
319 | 321 | /* return: P31 */ |
320 | 322 | if (r->buf1 == NULL){ |
321 | 323 | r->buf1 = malloc(1024 * 1024); |
@@ -329,23 +331,23 @@ void devFunc(HOSECPU_RuntimeEnvironment *r) | ||
329 | 331 | printf("P31.(p-p0)=%d(dec)\n", (int)(r->preg[0x31].p - r->preg[0x31].p0)); |
330 | 332 | break; |
331 | 333 | |
332 | - case 0xff05: | |
334 | + case 0xff05: // junkApi_writeStdout(len, p) R31=len; P31=p; | |
333 | 335 | fwrite(r->preg[0x31].p, 1, r->ireg[0x31], stdout); |
334 | 336 | break; |
335 | 337 | |
336 | - case 0xff06: | |
338 | + case 0xff06: // jnukApi_exit(i) R31=i; | |
337 | 339 | // R31はリターンコード. |
338 | 340 | // これを反映すべきだが、現状は手抜きでいつも正常終了. |
339 | 341 | longjmp(*(r->setjmpEnv), 1); |
340 | 342 | break; |
341 | 343 | |
342 | - case 0xff07: | |
344 | + case 0xff07: // junkApi_putConstString0(s) DB(0xff,0x00,0x00); DB%(s,0x00); | |
343 | 345 | // マシになった文字列表示.OSASK文字列に対応.offにすれば通常の文字列処理もできる.現状はonのみサポート. |
344 | 346 | checkString(r, 0x31, 0x31); |
345 | 347 | devFunc0001(r->ireg[0x31], r->preg[0x31].p, r); |
346 | 348 | break; |
347 | 349 | |
348 | - case 0xff08: | |
350 | + case 0xff08: // junkApi_jitc2(_rc, _p, mod, lev, di1, len, s) R31=mod; R32=lev; R33=di1; R34=len; P31=s; _rc=R30; _p=P31 | |
349 | 351 | // JITC on JITC |
350 | 352 | // R31: 言語(back-end, front-end, ... |
351 | 353 | // R32: level |
@@ -380,14 +382,14 @@ void devFunc(HOSECPU_RuntimeEnvironment *r) | ||
380 | 382 | r->ireg[0x30] = -1; |
381 | 383 | break; |
382 | 384 | |
383 | - case 0xff09: | |
385 | + case 0xff09: //putStringDec | |
384 | 386 | // たぶんbit7を使ったテキストはうまく処理できない(これはもはや仕様にしても問題ないかも). |
385 | 387 | checkString(r, 0x31, 0x31); |
386 | 388 | len = devFunc0016(sizeof pucbuf, pucbuf, r->ireg[0x31], r->preg[0x31].p, r->ireg[0x32], (int *)r->preg[0x32].p, r); |
387 | 389 | devFunc0001(len, pucbuf, r); |
388 | 390 | break; |
389 | 391 | |
390 | - case 0xff40: | |
392 | + case 0xff40: // junkApi_openWin(xsiz, ysiz) R31=xsiz; R32=ysiz; | |
391 | 393 | /* R31とR32でサイズを指定 */ |
392 | 394 | mainWindow.xsize = r->ireg[0x31]; |
393 | 395 | mainWindow.ysize = r->ireg[0x32]; |
@@ -405,7 +407,7 @@ void devFunc(HOSECPU_RuntimeEnvironment *r) | ||
405 | 407 | } |
406 | 408 | break; |
407 | 409 | |
408 | - case 0xff41: | |
410 | + case 0xff41: // junkApi_flushWin(xsiz, ysiz, x0, y0) R31=xsiz; R32=ysiz; R33=x0; R34=y0 | |
409 | 411 | /* R31とR32でサイズを指定、R33とR34でx0,y0指定 */ |
410 | 412 | if (r->ireg[0x31] == -1) { |
411 | 413 | r->ireg[0x31] = mainWindow.xsize; r->ireg[0x33] &= 0; |
@@ -417,7 +419,7 @@ void devFunc(HOSECPU_RuntimeEnvironment *r) | ||
417 | 419 | drv_flshWin(r->ireg[0x31], r->ireg[0x32], r->ireg[0x33], r->ireg[0x34]); |
418 | 420 | break; |
419 | 421 | |
420 | - case 0xff42: | |
422 | + case 0xff42: // junkApi_sleep(opt, msec) R31=opt; R32=msec | |
421 | 423 | if (r->ireg[0x32] == -1) { |
422 | 424 | r->autoSleep = 1; |
423 | 425 | longjmp(*(r->setjmpEnv), 1); |
@@ -441,7 +443,7 @@ void devFunc(HOSECPU_RuntimeEnvironment *r) | ||
441 | 443 | } |
442 | 444 | break; |
443 | 445 | |
444 | - case 0xff43: | |
446 | + case 0xff43: // junkApi_inkey(_i, mod) R31=mod; _i=R30 | |
445 | 447 | // 1:peek |
446 | 448 | // 2:stdin |
447 | 449 | // 4,8: ソース指定. |
@@ -475,7 +477,7 @@ void devFunc(HOSECPU_RuntimeEnvironment *r) | ||
475 | 477 | if (r->ireg[0x30] == 4135) r->ireg[0x33]++; |
476 | 478 | break; |
477 | 479 | |
478 | - case 0xff44: | |
480 | + case 0xff44: // junkApi_drawPoint(mod, x, y, c) R31=mod; R32=x; R33=y; R34=c | |
479 | 481 | c = loadColor(r, 0x34); |
480 | 482 | if (r->ireg[0x32] < 0 || r->ireg[0x32] >= mainWindow.xsize || |
481 | 483 | r->ireg[0x33] < 0 || r->ireg[0x33] >= mainWindow.ysize){ |
@@ -498,7 +500,7 @@ void devFunc(HOSECPU_RuntimeEnvironment *r) | ||
498 | 500 | } |
499 | 501 | break; |
500 | 502 | |
501 | - case 0xff45: | |
503 | + case 0xff45: // junkApi_drawLine(mod, x0, y0, x1, y1, c) DB(0xfe,0x05,0x01); DDBE(0x0003); R30=0xff45; R31=mod; R32=x0; R33=y0; R34=x1; R35=y1; R36=c | |
502 | 504 | //drawLine |
503 | 505 | c = loadColor(r, 0x36); |
504 | 506 | if (r->ireg[0x32] < 0 || r->ireg[0x32] >= mainWindow.xsize || |
@@ -654,7 +656,7 @@ void devFunc(HOSECPU_RuntimeEnvironment *r) | ||
654 | 656 | devFunc0006(r->ireg[0x31], r->ireg[0x32], r->ireg[0x33], r->ireg[0x34], r->ireg[0x35], loadColor(r, 0x36), r->ireg[0x37], r->preg[0x31].p, r); |
655 | 657 | break; |
656 | 658 | |
657 | - case 0xff49: | |
659 | + case 0xff49: // junkApi_rand(_r, range) R31=range; _r=R30 | |
658 | 660 | // **** junkApi_rand(i, max) **** |
659 | 661 | // 0 <= i <= maxとなるiを返す。 |
660 | 662 | // max==0のとき、iはSINT32全体を範囲とする乱数となる。 |
@@ -672,7 +674,7 @@ void devFunc(HOSECPU_RuntimeEnvironment *r) | ||
672 | 674 | r->ireg[0x30] = (int)(time(NULL) ^ (long)0x55555555); |
673 | 675 | break; |
674 | 676 | |
675 | - case 0xff4c: | |
677 | + case 0xff4c: // drawStringDec | |
676 | 678 | checkString(r, 0x37, 0x31); |
677 | 679 | len = devFunc0016(sizeof pucbuf, pucbuf, r->ireg[0x37], r->preg[0x31].p, r->ireg[0x38], (int *)r->preg[0x32].p, r); |
678 | 680 | devFunc0006(r->ireg[0x31], r->ireg[0x32], r->ireg[0x33], r->ireg[0x34], r->ireg[0x35], loadColor(r, 0x36), len, pucbuf, r); |
@@ -118,10 +118,12 @@ int HeavyOSECPUMain(int argc, char **argv) | ||
118 | 118 | if (cp != NULL){ |
119 | 119 | stacksiz = strtol(cp, NULL, 0); |
120 | 120 | } |
121 | + | |
122 | + // jitbufは先頭。 jpは現在位置 | |
121 | 123 | jp = jitbuf; /* JIT-pointer */ |
122 | 124 | |
123 | 125 | /* フロントエンドコードをバックエンドコードに変換する */ |
124 | - if ((env.appBin[2] & 0xf0) != 0) { | |
126 | + if ((env.appBin[2] & 0xf0) != 0) { // 3バイト目が00なら処理しない | |
125 | 127 | systmp0[0] = env.appBin[0]; |
126 | 128 | systmp0[1] = env.appBin[1]; |
127 | 129 | env.preg[2].p = systmp0 + 2; |
@@ -190,10 +192,13 @@ int HeavyOSECPUMain(int argc, char **argv) | ||
190 | 192 | } |
191 | 193 | |
192 | 194 | env.buf0 = env.buf1 = NULL; |
193 | - env.preg[0x28].p = p28; | |
195 | + | |
196 | + // p28にapiをコールするアドレスを設定 | |
197 | + env.preg[0x28].p = p28; // p28には、devFuncをコールするコードが書かれている | |
194 | 198 | env.preg[0x28].typ = 0; // TYP_CODE |
195 | - env.preg[0x28].p0 = p28; | |
196 | - env.preg[0x28].p1 = p28 + 1; | |
199 | + env.preg[0x28].p0 = p28; // アドレス演算できる範囲を制限 | |
200 | + env.preg[0x28].p1 = p28 + 1; // アドレス演算できる範囲を制限 | |
201 | + | |
197 | 202 | //env.preg[0x00].p = malloc(1024 * 1024) + (1024 * 1024 - 32); |
198 | 203 | env.junkStack = malloc(stacksiz << 20); |
199 | 204 | env.junkStack1 = env.junkStack + (stacksiz << 20); |