やってみましょう!MSXBASICその2

その1へ戻る
・VRAMを使って2色刷りをやってみる
・はじめてのBASICプログラミング
・プログラムを保存する
・プログラムをつなげる
・プログラムを連結させる
・コラム:前のプログラムが上書きされる
その3へ進む


VRAMを使って2色刷りまで拡げる

ここではSCREEN1でどんな事ができるかをやってみます。
ムービーでは表示しない文字を変えていきます。
どういうふうに作るかがわかればよいです。

COLOR15,4,7:SCREEN1:WIDTH32

VRAMは文字(フォント)の形状をパターンジェネレータという部分で
記憶しています。A(エー)という筆記したAそのものの画像のエリアです。
このような画面用の記憶エリアをVRAMと呼んでいます。
SCREEN1では8文字ごとに色を変えることもできます。

DATAの部分を1と0で好きな形<パターン>を作ってみるといいです。
見て欲しいのは変更した行をRETURNしています。

SCREEN1の使い方:
http://zoome.jp/fullmsx-movies/diary/3/

100 CLS:A=ASC("<文字>")
110 FORI=0TO7
120 READA$
130 VPOKEA*8+I,VAL("&B"+A$)
140 NEXT
150 VPOKE&h2000+A\8,&H[2バイトの16進色コード]
160 DATA 00000000
170 DATA 00000000
180 DATA 00000000
190 DATA 00000000
200 DATA 00000000
210 DATA 00000000
220 DATA 00000000
230 DATA 00000000

プログラムを書き換えた行はRETURNキーを押します。
ここで画面を消すときはCLSを入力してください。

・VRAMの初期化
VRAMを初期化したい場合はSCREEN1と入力します。
次にCOLOR15,4,7で色も初期化されます。
画面を戻したい場合はSCREEN1と入力できますが、
SCREEN1の文字または色が変わってしまったりする場合に
F1キーで回避できるようにします。
KEY 1,"SCREEN1"+CHR$(13)
さらにShift+F1でColor15,4,7が入ります。

・VRAMのフォントを見る
FORI=30TO255:?CHR$(I);:NEXT

・VRAM パターンのセーブ
BSAVE"TEST.CHR",0,&H0A00,S

・VRAMパターンのロード
BLOAD"TEST.CHR",S

・カラーテーブルの保存指定
BSAVE"TEST.CLR",&H2000,&H2200,S

MSXBASICはじめてのプログラミン グ

MSXBASICは他のBASICでは真似の出来ないマイクロソフトで最高のBASIC言語でした。
ここではその幾つかを説明します。
 短いプログラムなら10行、長 めのプログラムは100行から打ちはじめます。

ふつうは10行飛びで打ちます。最初は詰めずにやってみましょう。

10 SCREEN 1
20 LOCATE 5,10
30 PRINT"MSX BASIC"
40 I$=INPUT$(1)
50 FOR X=13 TO 18
60      LOCATE 0,X
70      PRINT"PROGRAM"
60 NEXT

シングルステートメントでも実行可能ですが、下のようにマルチステートメントで関連付けることで見やすくなります。

10 SCREEN 1
20 LOCATE 5,10:PRINT"MSX BASIC"
30 I$=INPUT$(1)
40 FOR X=13 TO 18
50      LOCATE 0,X:PRINT"PROGRAM"
60 NEXT

 BASICではこのように構文を書くのが一般的ですが、
LINE INPUTの記述の場合でもLINEINPUTと詰めることでメモリを少なくします。

10 SCREEN1:LOCATE5,10:PRINT"MSX BASIC":I$=INPUT$(1):FORX=13TO18:LOCATE0,X:PRINT"PROGRAM":NEXT

上のプログラムでは1行にできますが、できる構文とできない構文があります。次は括弧つきの構文です。

10 I$=INPUT$(1)
20 A=ASC(I$)
30 PRINT A

キーを押すとキャラクターコードを表示するプログラムは

10 PRINT ASC(INPUT$(1))

のように括弧つきの構文にすることで1行にすることもできます。

プログラムを保存する

 これをFILE.BASとして保存しましょう。

SAVE”FILE.BAS”

これで保存されました。このようにしてBASICプログラムを作ります。

いかがでしょうか?では本格的にやってみましょう。

プログラムをつなげる

■1つの行にまとめる

MSXBASICに慣れてきたと思います。

MSX:MSXBASICプログラム連結

次はプログラム行を増やしたり連結する話です。
同じプログラムで異なる行にしたい場合、
40行の上に180と入力してリターンすると180行にコピーされます。
それでは連結する話です。上の画像を見てください。
list 40-50が2つ表示されています。1つ目は40行の最後にカーソルがあります。
50行も40行にしてみます。
この状態でスペースを押します。そうすると50行の「5」にカーソルがきますが、
40行に50行が入ったことになります。
2つ目はこの状態で(S=5)の後ろで
deleteキーを押したままにすると50行が引き寄せられます。
これで2つのプログラムが1つのプログラムになりました。

■行の分身をつくる

40 A=ASC("e"):FOR I=0 TO 6:READ I$:NEXT

この行を40行と45行に分けたいとします。
上書きモードの状態で40行の0を5に変えます。

45 A=ASC("e"):FOR I=0 TO 6:READ I$:NEXT

リストをしてみます。
list
40 A=ASC("e"):FOR I=0 TO 6:READ I$:NEXT
45 A=ASC("e"):FOR I=0 TO 6:READ I$:NEXT
Ok
このようになりました。
40行は
40 A=ASC("e")■FOR I=0 TO 6:READ I$:NEXT
までカーソルをもっていき、[ctrl]+[e]で
40 A=ASC("e")■
となります。これでリターンします。
45行は
45 A=ASC■FOR I=0 TO 6:READ I$:NEXT
という具合で
45
FOR I=0 TO 6:READ I$:NEXT
とします。
これで

40 A=ASC("e")

45 FOR I=0 TO 6:READ I$:NEXT


と分かれます。
1行のプログラムが長い場合は
文頭から前[ctrl]+[b]、後[ctrl]+[f]の移動も便利です。

プログラムを連結させる

現在のようにコピー&ペーストがなかった時代でしたから
プログラムをテキストファイル(アスキーファイル)にして連結させます。


1.アスキーファイルにする方法

SAVE"ASCII.BAS"
というように今まではBASファイルで保存していましたね。
100行から380行までがプログラムで追加したい行を1000とするならば

RENUM 1000

と行番号をリナンバーします。100行が1000行に変更された具合です。
SAVE"ASCII.ASC",A
アスキーファイルにします。わかりやすいようにASCファイルとしました。
一時的に使うファイルですから
SAVE"A",A
でも何でもかまいません。
アスキーファイルにするとテキストエディタで編集することもできます。

2.アスキーファイル

そして、MERGE(マージ)コマンドで混合させます。
最初にメインのプログラムをロードして

LOAD"MAIN.BAS"
Ok
MERGE"ASCII.ASC"
Ok


となればMAIN.BASのプログラムの後にASCII.ASCが入ります。

もう、ここまでできればMSXBASICのプログラマーの仲間入りですね。

<はみだしコラム>
MSXBASICでは「上書きしますか?」などの
ポップアップなどは表示されないので
上書きされて前のプログラムが消えてしまうことがあります。
消しても良いかわからない場合はFILES.BASをFILES2.BASなどにして
保存します。

ただ別名で保存すると、そのファイルを開けないことがあります。
異なるプログラムでFILES.BASを参照している場合は
FILES2.BASに書き換えなどをしてください。

プログラムの不具合の原因になる場合があります。


次へ