先日、
の中でMSX BASICについて触れたので、WebMSXについて書こうかなと思います。
先日も紹介しましたが、
のサイトでオンラインシミュレーターが使用できるので、ブラウザ上でMSX BASICを体験できるようになっています。
サイトにアクセスすると、
のような画面になり、すぐに
のようなロゴが登場し、その後、MSX BASICが起動します。
ここからコマンドを打つことになりますが、MSXは使ったことがないので、手探りでコマンドを打ち込んでいきます。
その当時のPCはROM BASICは特殊な仕様なので、ほとんどがストレージにアクセスして読み込む仕様になっていましたが、1990年代のようなHDDが存在しているわけではないので、8BITパソコンの時代だとカセットテープやFDDを使うような仕様になっていました。
と言っても、FDDは上級機種のみですから、ほとんどの場合が倍速テープレコーダーを使ってメモリーにアプリケーションを常駐させて使用すると言う構造ですから、BASICを使用する場合だと
■ 読み込み
■ 起動
と言う流れになっていました。MSX規格の製品はROMで実装されているので、
■ プログラムの記録
■ プログラムの読み込み
がテープレコーダーと言う仕組みになっていただけで、データの保存の必要がないゲームについてはファミコンと同様にROMで提供されていました。
BASICは方言はあるものの、基本部分は同じなので、
■ 表示 : PRINT
■ 入力 : INPUT
で行えるようになっていますが、DOSコマンドでコマンドプロンプトを消す時に使用する 【 cls 】 はBASICでも実装されているので、コードを書く際には、
■ 画面の初期化
■ 変数の初期化
■ 処理
のような流れで記述を刷る事になります。ということで、
のようにCLSコマンドを打ち込むと
のように画面が初期化されます。マニュアルも見ずにコードを書いてみたのですが、MSX BASICでは、
PRINT="文字列"
ではだめなようで、
PRINT "文字列"
のような書式になっているようでした。
最初に行うことは、文字の表示になりますから、
のようなコードを打ち込んで実行してみましした。すると、号当たり前にように
のようにPRINT文で指定した値が表示されました。コードの内容ですが、最初のREMはコメントなので、Pythonの#と同じ効果を持っています。
そして、CLSで画面の初期化を行って、PRINT文で文字列の表示を行っています。
変数を使う
BASICの変数は、
■ A : 数字
■ A$ : 文字列
なので、コレを使い分ける必要があります。変数の宣言での
■ i数値型
■ 文字列型
のような判断がこの$の有無になっています。変数の宣言は
【 数値 】
変数名=値
【 文字列 】
変数名$=値
のようになります。実際に
のようなコードを書いて実行してみると、
のように変数を参照しているので数字と文字が表示されます。
参照した変数は、数式で利用できるので、
のようにprint文に数式を指定すると、
のように計算結果を得ることができます。
コードを消去する
コードを打ち込むとLISTで表示できますが、現在記録されているコードを消すこともできます。
この時に 【 NEW 】 を使用します。実際に
のようにコマンドを入力して実行するとコードが消えるので、その後にLISTを使用してコードの表示を行っても、何も表示されなくなります。
入力待ちを使う
BASICでも入力待ちが使用できるのですが、この時に使用するのが 【 INPUT 】 になります。この書式は、
【 INPUT"表示する文字列";変数名 】
になりますが、
のように文字列の表示をしない場合医には、
【 INPUT 変数名 】
だけでも利用できます。INPUTを使用すると
のようにプロンプトが出るので
のように数値を打ち込んで、ENTERキーを押すことで値が変数に代入されます。先程のコードではその数値を使用して演算する仕組みになっています。
通常の記述だと
のようになりますが、実行すると
のようになります。
テキストの制御
BASICの場合、他の言語でコンソールアプリを作る場合に必要となる
■ 文字単位での整数座標による制御
■ イベントハンドラ(キー)イベント
が使用できるようになっていますが、この際に使用するのが、
■ LOCATE
■ INKEY$
になります。LOCATEは二次元配列を使った整数座標を数値の指定だけで指定できる作りになっています。
INKEY$は、1文字入力で文字を指定できるので、アルファベットのキーの判定ができます。
MSX BASICの場合、カーソルキーを認識できるSTICKと言うものもありますが、これがカーソルキーとコントローラーの双方に対応した入力になります。
その他絵M、
■ LOCATEで座標の初期化
■ STICKやINKEY$でキー判定
■ IFで条件を作る
■ GOTOで先頭の行に戻る
のような形でループさせるとキー入力と座標の変化を常に取得できる状態になります。この構造を見ると、
■ LOCATEで座標の初期化
■ STICKやINKEY$でキー判定
■ IFで条件を作る
は一つの処理の塊と考えることが出来るので、通常だと関数にまとめることができそうですが、関数と同じ機能としてはGOSUBがあるので、GOSUBにまとめておいて、IFステートメントで条件分岐で判定が生じたときだけ実行して実行後にRETURNで戻るようにするとメインループに無駄な行を含まずに済みます。
ちなみに、WebMSXは、 MSX2準拠のようなので、BASICなのに 【 関数 】 が実装されています。また、MSX2はカラーを使ったスプライトを使えますが、WebMSXでもカラーの指定をしたスプライトを用意して動かすことができるようです。