OSDN Git Service

API comment added
authorttwilb <ttwilb@users.sourceforge.jp>
Thu, 13 Mar 2014 05:49:53 +0000 (14:49 +0900)
committerttwilb <ttwilb@users.sourceforge.jp>
Thu, 13 Mar 2014 05:49:53 +0000 (14:49 +0900)
function.c
main.c

index 43750fd..3c96cdb 100644 (file)
@@ -44,6 +44,7 @@ void devFunc0001(int len, unsigned char *puc, HOSECPU_RuntimeEnvironment *r)
        return;
 }
 
+// drawString
 void devFunc0006(int mod, int sx, int sy, int x, int y, int c, int len, unsigned char *puc, HOSECPU_RuntimeEnvironment *r)
 {
        int xx;
@@ -269,7 +270,8 @@ void devFunc(HOSECPU_RuntimeEnvironment *r)
                        printf("R31=%d(dec)\n", r->ireg[0x31]);
                        break;
                        
-               case 0xff01:
+               case 0xff01:    // junkApi_fopenRead(_filesize, _p, arg) R31=arg; PCALL(P28); _filesize=R30; _p=P31
+                       
                        /* return: R30, P31 */
                        if (r->buf0 == NULL){
                                r->buf0 = malloc(1024 * 1024);
@@ -296,7 +298,7 @@ void devFunc(HOSECPU_RuntimeEnvironment *r)
                        r->ireg[0x30] = i;
                        break;
                        
-               case 0xff02:
+               case 0xff02:    // junkApi_fopenWrite(arg, filesize, p) R31=arg; R32=filesize; P31=p;
                        /* return: none */
                        if (r->mainArgc <= r->ireg[0x31]) {
                                fprintf(stderr, "devFunc: error: R30=ff02: argc error: R31=%08X\n", r->ireg[0x31]);
@@ -315,7 +317,7 @@ void devFunc(HOSECPU_RuntimeEnvironment *r)
                        fclose(fp);
                        break;
                        
-               case 0xff03:
+               case 0xff03:    // junkApi_allocBuf(_p) _p=P31
                        /* return: P31 */
                        if (r->buf1 == NULL){
                                r->buf1 = malloc(1024 * 1024);
@@ -329,23 +331,23 @@ void devFunc(HOSECPU_RuntimeEnvironment *r)
                        printf("P31.(p-p0)=%d(dec)\n", (int)(r->preg[0x31].p - r->preg[0x31].p0));
                        break;
                        
-               case 0xff05:
+               case 0xff05:    // junkApi_writeStdout(len, p) R31=len; P31=p;
                        fwrite(r->preg[0x31].p, 1, r->ireg[0x31], stdout);
                        break;
                        
-               case 0xff06:
+               case 0xff06:    // jnukApi_exit(i) R31=i;
                        // R31はリターンコード.
                        // これを反映すべきだが、現状は手抜きでいつも正常終了.
                        longjmp(*(r->setjmpEnv), 1);
                        break;
                        
-               case 0xff07:
+               case 0xff07:    // junkApi_putConstString0(s) DB(0xff,0x00,0x00); DB%(s,0x00);
                        // マシになった文字列表示.OSASK文字列に対応.offにすれば通常の文字列処理もできる.現状はonのみサポート.
                        checkString(r, 0x31, 0x31);
                        devFunc0001(r->ireg[0x31], r->preg[0x31].p, r);
                        break;
                        
-               case 0xff08:
+               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
                        // JITC on JITC
                        // R31: 言語(back-end, front-end, ...
                        // R32: level
@@ -380,14 +382,14 @@ void devFunc(HOSECPU_RuntimeEnvironment *r)
                        r->ireg[0x30] = -1;
                        break;
                        
-               case 0xff09:
+               case 0xff09:    //putStringDec
                        // たぶんbit7を使ったテキストはうまく処理できない(これはもはや仕様にしても問題ないかも).
                        checkString(r, 0x31, 0x31);
                        len = devFunc0016(sizeof pucbuf, pucbuf, r->ireg[0x31], r->preg[0x31].p, r->ireg[0x32], (int *)r->preg[0x32].p, r);
                        devFunc0001(len, pucbuf, r);
                        break;
                        
-               case 0xff40:
+               case 0xff40:    // junkApi_openWin(xsiz, ysiz) R31=xsiz; R32=ysiz;
                        /* R31とR32でサイズを指定 */
                        mainWindow.xsize = r->ireg[0x31];
                        mainWindow.ysize = r->ireg[0x32];
@@ -405,7 +407,7 @@ void devFunc(HOSECPU_RuntimeEnvironment *r)
                        }
                        break;
                        
-               case 0xff41:
+               case 0xff41:    // junkApi_flushWin(xsiz, ysiz, x0, y0) R31=xsiz; R32=ysiz; R33=x0; R34=y0
                        /* R31とR32でサイズを指定、R33とR34でx0,y0指定 */
                        if (r->ireg[0x31] == -1) {
                                r->ireg[0x31] = mainWindow.xsize; r->ireg[0x33] &= 0;
@@ -417,7 +419,7 @@ void devFunc(HOSECPU_RuntimeEnvironment *r)
                        drv_flshWin(r->ireg[0x31], r->ireg[0x32], r->ireg[0x33], r->ireg[0x34]);
                        break;
                        
-               case 0xff42:
+               case 0xff42:    // junkApi_sleep(opt, msec) R31=opt; R32=msec
                        if (r->ireg[0x32] == -1) {
                                r->autoSleep = 1;
                                longjmp(*(r->setjmpEnv), 1);
@@ -441,7 +443,7 @@ void devFunc(HOSECPU_RuntimeEnvironment *r)
                        }
                        break;
                        
-               case 0xff43:
+               case 0xff43:    // junkApi_inkey(_i, mod) R31=mod; _i=R30 
                        //  1:peek
                        //  2:stdin
                        //      4,8: ソース指定.
@@ -475,7 +477,7 @@ void devFunc(HOSECPU_RuntimeEnvironment *r)
                        if (r->ireg[0x30] == 4135) r->ireg[0x33]++;
                        break;
                        
-               case 0xff44:
+               case 0xff44:    // junkApi_drawPoint(mod, x, y, c) R31=mod; R32=x; R33=y; R34=c
                        c = loadColor(r, 0x34);
                        if (r->ireg[0x32] < 0 || r->ireg[0x32] >= mainWindow.xsize ||
                                r->ireg[0x33] < 0 || r->ireg[0x33] >= mainWindow.ysize){
@@ -498,7 +500,7 @@ void devFunc(HOSECPU_RuntimeEnvironment *r)
                        }
                        break;
                        
-               case 0xff45:
+               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
                        //drawLine
                        c = loadColor(r, 0x36);
                        if (r->ireg[0x32] < 0 || r->ireg[0x32] >= mainWindow.xsize ||
@@ -654,7 +656,7 @@ void devFunc(HOSECPU_RuntimeEnvironment *r)
                        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);
                        break;
                        
-               case 0xff49:
+               case 0xff49:    // junkApi_rand(_r, range) R31=range; _r=R30
                        // **** junkApi_rand(i, max) ****
                        // 0 <= i <= maxとなるiを返す。
                        // max==0のとき、iはSINT32全体を範囲とする乱数となる。
@@ -672,7 +674,7 @@ void devFunc(HOSECPU_RuntimeEnvironment *r)
                        r->ireg[0x30] = (int)(time(NULL) ^ (long)0x55555555);
                        break;
                        
-               case 0xff4c:
+               case 0xff4c:    // drawStringDec
                        checkString(r, 0x37, 0x31);
                        len = devFunc0016(sizeof pucbuf, pucbuf, r->ireg[0x37], r->preg[0x31].p, r->ireg[0x38], (int *)r->preg[0x32].p, r);
                        devFunc0006(r->ireg[0x31], r->ireg[0x32], r->ireg[0x33], r->ireg[0x34], r->ireg[0x35], loadColor(r, 0x36), len, pucbuf, r);
diff --git a/main.c b/main.c
index 293622e..6101a96 100644 (file)
--- a/main.c
+++ b/main.c
@@ -118,10 +118,12 @@ int HeavyOSECPUMain(int argc, char **argv)
        if (cp != NULL){
                stacksiz = strtol(cp, NULL, 0);
        }
+
+       // jitbufは先頭。 jpは現在位置
        jp = jitbuf; /* JIT-pointer */
        
        /* フロントエンドコードをバックエンドコードに変換する */
-       if ((env.appBin[2] & 0xf0) != 0) {
+       if ((env.appBin[2] & 0xf0) != 0) {                              // 3バイト目が00なら処理しない
                systmp0[0] = env.appBin[0];
                systmp0[1] = env.appBin[1];
                env.preg[2].p = systmp0 + 2;
@@ -190,10 +192,13 @@ int HeavyOSECPUMain(int argc, char **argv)
        }
        
        env.buf0 = env.buf1 = NULL;
-       env.preg[0x28].p = p28;
+
+       // p28にapiをコールするアドレスを設定
+       env.preg[0x28].p = p28; // p28には、devFuncをコールするコードが書かれている
        env.preg[0x28].typ = 0; // TYP_CODE
-       env.preg[0x28].p0 = p28;
-       env.preg[0x28].p1 = p28 + 1;
+       env.preg[0x28].p0 = p28;                // アドレス演算できる範囲を制限
+       env.preg[0x28].p1 = p28 + 1;    // アドレス演算できる範囲を制限
+
        //env.preg[0x00].p = malloc(1024 * 1024) + (1024 * 1024 - 32);
        env.junkStack = malloc(stacksiz << 20);
        env.junkStack1 = env.junkStack + (stacksiz << 20);