944BASIC


まずは簡単なところから。フォトフレーム サンプルをいじってみます。

実行してみる
フォトフレーム実行中 ファイルリスト 画面の左上に小さくBMPが表示され、上下にスクロールします。ちなみに僕のZauはMI-C1なので横画面です^^;

リストをみてみる
PHOTOFRM.BAS PHOTOFRM.BASをエディタで開きます。
右のリストのように非情に簡単なプログラムです。ですが実行してみてわかったようにZaurusにしては意外と 良い動きをしてくれてますね。
でわ、リストをチェックしてみます。


REM 944BASIC 'フォトフレーム'

リマーク(REM)行なので3、7行目も含んでコメント(任意の文字列)になりますが、1行目だけは特別な意味を 持っているらしく、944BASICを素で実行したときにリストアップされるコメントをここで指定できるようです。 あまり長い文字列を入力するとブチ切られるので、全角10文字までにしておきましょう。
※ポイント→一行目のREMは特別な意味を持つ。
REM 944BASIC 'Label'


SCREEN 0,0,100,60

次は画面の設定です。944BASICで使用する画面サイズの指定をSCREENで行います。使用する画面の左上のX,Y 座標とX,Yそれぞれのサイズを指定します。連続的にスクリーンの位置やサイズを変更することも出来ますが、 おおよそ実用的なスピードではありませんでした(笑)まぁ、聞き流してください^^;


BITMAP "F1:\944BASIC\SAMPLE01.BMP",0,0

画像ファイルの読み込みですね。Windows BitMap形式(*.BMP)のファイルを読み込み表示します。今のところ 読み込むファイル名以外のパラメータはいじらないほうがよさそうです^^; ことごとくリセット要求を食らいまし た(笑)


*LOOP SYNC
  :
GOTO *LOOP

プログラムのループを形成するところです。*〜で名前をつけたところにGOTOで飛ぶことが出来ます。 この辺は問題ないですね。あ、SYNCでループ毎に一度ZaurusOS側に処理を移しているのはキー入力の反応を 確実にするためですね。ループの中にキー入力が存在しないので、下手すると944BASICから処理が戻ってこなくな ります^^;ただ、やたらにSYNCを入れると処理自体が遅くなってしまいます。


GCOPY 0,0,0,ABS(280-(I%500)),100,60

リファレンスには裏画面から画面に画像転送表示とあります。ハテ?BITMAP命令で読み込んだ画像は GCOPYが実行される前から表示されてるので(説明は後)裏画面ではないはづ。。。とりあえず、 表示もスクロールの処理もちゃんと動いているのでこの際BITMAP命令は裏表両方に画像をロードするという ことにしておく。多分あってるでしょう。
※ポイント→画像ロード系命令は表裏両方にロードするということに しておく


I=I+1

これは説明するまでもないですね。Iという名前の変数の内容に1を足してIに入れるってだけです。 変数は使用した時点で0(Zero)が入ってるってことですね。果てし無く(?)増えていきます。。。

いぢってみる
さて、与えられたプログラムを実行して楽しむ。これはこれで楽しいのですが、折角のBASIC。ここはいろいろと いじってみましょう。
昔は僕もこうやってBASICを覚えました…。懐かしいです。。。

さてさて、実際いぢると言ってもいきなり何がどうできるかは判りにくいですね。では上で説明したものをちょっと まとめてみます。
機能的にはこんなことをやっています。これからどういう改造が可能でしょうか? と、上のリストからぱっと思いついただけでもこんだけ出てきます。出てきますね?出てきてください(笑)
それでは実際にいぢっていってみましょう。

・リストラベルの変更
特に騒ぐほどのものでもないのですが、シングルクォーテーションの間の文字列を変更するだけで可能なので ちゃっちゃとやっちゃいましょう。

REM 944BASIC 'フォトフレーム'
     ↓
REM 944BASIC 'フォトフレーム改'

こんな感じでしょうか?お好きな文字列でOKです。ついでに表示画面の位置も変えてしまいます。 サイズは今回は変更せずに位置だけの変更。右に70、下に60ドット移動させます。

SCREEN 0,0,100,60
    ↓
SCREEN 70,60,100,60

適時SAVEしならが変更結果を実行確認してみてください。この変化が簡単に分かるのがお手軽で良いですね。

・読み込む画像の変更
単純にやるとファイル名を変更するだけです。

BITMAP "F1:\944BASIC\SAMPLE01.BMP",0,0
          ↓
BITMAP "F1:\944BASIC\NURIE.BMP",0,0

ですが、コレだけではやはりつまらないので、ちょこっと違うことをやってみます。

BITMAP "F1:\944BASIC\SAMPLE01.BMP",0,0
          ↓
JPEG "F1:\944BASIC\944.JPG",0,0,240,100

表示される画像をJPEGにしてみました。この一文はDEMO.BASから持ってきたものです。パラメータはここでも やはりいじらないでおきます^^;(反映されなかったり、表示されなかったりで…。リファレンス待ちです(笑))
また、先ほど裏画面云々の話をしましたが、ここで確認してみることにします。変更 したJPEG命令の下の行に以下のようにMESSAGE命令を追加してみてください。

JPEG "F1:\944BASIC\944.JPG",0,0,240,100
          ↓
JPEG "F1:\944BASIC\944.JPG",0,0,240,100
MESSAGE '表示されてる?'

これで、GCOPYで裏画面から画面に画像転送表示される前、画像をロードした直後にその画像が表示されてる かどうか。が判ります。画像、表示されますよね?^^; と言うことで画像ロード命令は裏表両方〜。と結論付けた わけです。MESSAGE命令の副作用で…。と心配ならMESSAGE命令をKEYWAIT等に変更して 確認してみてください。なに言ってんだか分からない人は読み飛ばしてOKです。^^;

・スクロールの変更
このプログラムで一番面白い部分です。実態は一つの画像の描画開始位置を少しずつずらして表示していき、スクロール しているように見せているのですが、ABS(絶対値)と%(剰余)でこの位置を求めているのがソレっぽくて いいですね。
値を変更しないと確認できる画像が表示されている時間が短いので、常に動いている画像を確認できるような範囲に変更 してみます。944.JPGの大きさが240x100なので表示位置のY座標は0〜99を取れます。また、表示ウィンドウが 縦60ドットなので40ドットだけ上下に動かせば画像の上から下までちょうど見渡せる動きが出来るようになります。って なわけで以下のように変更してみました。

GCOPY 0,0,0,ABS(280-(I%500)),100,60
        ↓
GCOPY 0,0,0,ABS(40-(I%80)),100,60

計算すれば分かりますが、一番内側の括弧の中(I%80)は0→79の間の値を繰り返します。それを40から引い てやり、その絶対値(ABS)を取れば40→0→39を繰り返すことになり、Y座標に割り当てられたこの値は画像を上下 にスクロールしているように見せてくれるのです。
ちなみにループの前に以下の行を入れておくと、画像の上から スクロールをはじめます。

I=40

で、こんな感じで変更を加えましたが、折角ですので横スクロールもさせてみます。今は0になってるX座標の部分 を変更すればよいわけで、、、

GCOPY 0,0,0,ABS(40-(I%80)),100,60
        ↓
GCOPY 0,0,ABS(140-(I%280)),ABS(40-(I%80)),100,60

改造後 こうなります。実行して動きを確認してみてください。ぼよんぼよん動きます(笑)


ひととおり説明してきましたが、いかがでしたでしょうか?BASICの簡易性とプログラムの楽しさを感じてくれたらとりあえ ず成功です(笑)BASICは可読性の有るリスト状態で配布されるので他の人のプログラムを実行しながら学ぶのに最適だと思い ます。しかもZaurusというPDA単体でその楽しさが味わえるのですからiアプリなんて使ってる場合じゃありません(爆)ぜひ 色んなプログラムをいぢり倒してみてください。
ちなみにスクロールはBOXMOVEを使っても出きそう・・・かな?(笑)


戻る