* HLX-003の補足ページ#1
-(by [[K]], 2021.11.30)

** (1) C言語ではできるけど、HLX-003ではできないこと(将来のバージョンでは改善されます)。
-[1]浮動小数点演算はできません、ポインタ演算も代入しかできません(加減算はうまくいきません)。
-[2]配列は一次元のみです。配列変数に対して、++や--はできません(つまりa[i]++;ができない)。+=や*=もできません。でも代入はできるのでa[i]=a[i]+2;ならできます。
-[3]標準関数はほとんど使えません。
-[4]関数は void aMain() { ... } しか宣言できません。宣言した関数を呼び出すこともできません。
-[5]構造体も使えません。
-[6]配列宣言時の初期化では、定数式が使えません。定数は使えます。

** (2) mandel1_opt.c
 #include <acl.c>
 
 #ifdef AUSE_HLX
     regVarOpt(0, zx, zy, xx, yy, cx, cy, n, sn);	// for spd.
     regVarOpt(1, n, zx, zy, x, y, sy, sx, c, sn);	// for siz.
     regVarOpt(15, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);  // for no-opt. (reg-var off)
     regVarOpt(16, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);  // for spd. (reg-var off)
     regVarOpt(17, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);  // for siz. (reg-var off)
 #endif
 
 void aMain()
 {
     AWindow *w = aOpenWin(512, 384, "mandel", 1);
     AInt x, y;
     for (y = 0; y < 384; y++) {
         for (x = 0; x < 512; x++) {
             AInt sn = 0, sx, sy, n;
             AInt c, cx, cy, zx, zy, xx, yy;
             for (sx = 0; sx < 4; sx++) {
                 // cx = (x * 4 + sx) * 56 + 4673536;
                 cx = x; cx *= 4; cx += sx; cx *= 56; cx += 4673536;
                 for (sy = 0; sy < 4; sy++) {
                     // cy = (y * 4 + sy) * (-56) - 124928;
                     cy = y; cy *= 4; cy += sy; cy *= -56; cy -= 124928;
                     zx = cx; zy = cy;
                     for (n = 1; n < 447; n++) {
                         xx = zx * zx; xx = xx >> 24; // aMul64Shr(zx, zx, 24);
                         yy = zy * zy; yy = yy >> 24; // aMul64Shr(zy, zy, 24);
                         if (xx + yy > 0x4000000) break;
                         zy *= zx; zy = zy >> 23; // aMul64Shr(zy, zx, 23);
                         zx = xx; zx += cx; zx -= yy; // zx = xx + cx - yy;
                         zy += cy;
                     }
                     sn += n;
                 }
             }
             n = sn >> 4;
             c = aRgb8(n, 0, 0);
             if (n >= 256) {
                 c = aRgb8(0, 0, 0);
                 if (n < 447)
                     c = aRgb8(255, n - 255, 0);
             }
             aSetPix0(w, x, y, c);
         }
 //      aLeapFlushAll(w, 128);
     }
     aPrintTime();
     aWait(-1);
 }


トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS