* OSECPU-ASKA入門 #0002
-(by [[K]], 2013.06.07)
** (0) はじめに
-以下の記事はver.0.46のWindows版を前提にしています。他の版を使っている場合は適宜読み替えてください。
--たとえば osecpu046a.zip とかのことです

~
-もくじ
--[[page0036]]: #0000
--[[page0037]]: #0001
--[[page0038]]: #0002

** (1) for構文 #0
-for構文は、OSECPU-ASKAでは実は奥が深くていろいろな使い方ができるのですが、まあ最初から全てを説明しても分かりにくくなるだけなので、まずは簡単に。
 #include "osecpu_ask.h"
 
     int32s xsiz:R00, ysiz:R01, x0:R02, y0:R03, col:R04, i:R05;
 
     for (i = 0; i != 128; i++) {
         xsiz = ysiz = (144 - i) * 2;
         x0 = (320 - 144) + i;
         y0 = (240 - 144) + i;
         col = i * 0x020201;
         junkApi_fillOval(0, xsiz, ysiz, x0, y0, col);
     }
-このfor文は、i=0から127まで { } のプログラムを1回ずつ実行しています。このように繰り返し処理をするときに便利です。
--iは1ずつ増えています。それは「i++」と書いてあるからです。 i = i + 2 とか書いてあったら、2ずつ増えて64回しか繰り返さなくなります。
--iが127で終わってしまうのは、i=128になったときに、「i != 128」が成立しなくなるためです。
--ASKAではC言語などとは異なり、繰り返し実行する命令が1つしかなくても { } でくくることを省略できません。
-C言語やそのほかの言語でも、for構文を持つ言語の多くは
 for (i = 0; i < 128; i++) {
    ...
 }
-のような書き方をするのが普通だと思います。つまりノットイコールではなく不等号を使うわけです。OSECPU-ASKAでもこれは問題なくできますので、そうしたければそうしてもらってかまわないのです。しかしノットイコールで書いたほうがちょっとだけ最適化が有利になります。
--まあ気にしないでもいいんですけどね。
--ノットイコールの場合だけ最適化が有利になるというのは、もちろんただの手抜きです。この手のループはカウンタ変数が増えていく場合と減っていく場合があると思うのですが、そう考えると<だったり>だったりするわけです。でも!=だったらどっちでも同じで処理できて判定処理が楽だからとりあえずこれだけでいいや、という情けない理由なのです。
** (2) コメントについて
-ASKAでは /*  */ 型のコメントと、// 型のコメントをサポートしています。・・・たぶん。
--あれ、最近 /*  */ 型は使ってないからちょっと自信ない・・・。
--// 型は間違いなくできますので、こっちがおすすめです。
--/*  */ 型は仮にできたとしても、行をまたぐとうまく行かない可能性があります。いろいろ大変なんです。
-// 型のコメントについてですが、現在プリプロセッサの文字コード認識力がいまいちなので、コメントの最後の文字が全角だといろいろ予期しない結果になることがあります。
ということで、「.」をつけるなどして、とにかくコメントの最後が半角文字で終わるようにしてあげてください。
--おっと、もちろん半角カタカナもやめてあげてくださいね!・・・これらは末尾に使えないだけで、途中なら何でもいいです。・・・たぶん。
--OSECPU-ASKAは短期間で無理やり作った言語なので、いろいろ行き届かないところがあります。そこは言語に対するおもいやりとやさしさでカバーしてください。

** (3) できそうでできないこと
-変数の宣言時に、初期値の代入を書く。
 int32s i:R12 = 3; // これはできない. できたらうれしいのはわかりますが.

~
-レジスタ割り付けを書かない変数宣言。
 int32s i, j, k; // これはC言語ぽくってかっこいいけど、でもできない.

~
-intと書いてみたい。
 int i:R12; // ダメです. エラーです.
--まあこれについては #define  int  int32s とかやればできるかもしれないですが(できないかもしれない)。

~
-できそうでできないことはきっとたくさんあります。このwikiで紹介されていないことはできないことだと思っておくくらいがちょうどいいかと思います。
--言語に対するおもいやりとやさしさをお願いします!
** (4) 色の指定と16進数について
-色の指定でどうしても16進数を使うことになると思うので、解説しておこうと思います。
-とはいえ、0,1,2,3,4,5,6,7,8,9ときてそこからA,B,C,D,E,Fと数えて次が10になる、なんていうのはまあ分かっているとしましょう。

~
-プログラムでは col = i * 0x020201; なんていう表現が出てきましたが、これがどういうことか簡単に説明してみます。
 i=  0 のとき col=0x000000
 i=  1 のとき col=0x020201
 i=  2 のとき col=0x040402
 i=  3 のとき col=0x060603
 i= 10 のとき col=0x14140a
 i=127 のとき col=0xfefe7f
-あのプログラムはこうやって色を計算していたわけです。

~
-たとえばこういう計算もできるのです。
 col = red * 0x10000 + green * 0x100 + blue; // red, green, blueは0~255.

~
-ホームページとかで色を使う程度だと、計算で色を作るということに慣れていないと思いますが、16進数といえども結局はただの数字なので、こんな風に計算で色を作ることができるのです。
//c+=0x100; // xxyy00

~
** つづく
-[[page0039]]につづく

* こめんと欄
#comment

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