MSX-BASIC
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2023/05/11 21:19 UTC 版)
概要
言語の仕様としては、変数名が最初の2文字のみ有効、行番号を抽象化するラベルの概念がなく、GOTO
命令等の飛び先にラベルを指定できないなど、他機種に採用されていたマイクロソフト製BASICが拡張されていたのと比べると初期の版に近かった。
一方で、浮動小数点には仮数部は単精度6桁、倍精度14桁のBCDで演算している。他のBASICの処理系の仮数部の基底が2であるのに対して、基底を10とすることで、コンピューター初心者にも分かりやすくなっている。演算サブルーチンは仮想計算機として実装されており、仮想レジスタ相当のワークエリアに引数を書き込み処理を行うルーチンをコールする形になっている。この演算の中核部分はMath-Packとして仕様が公開されており、BASIC以外からも直接呼び出せるようになっている[1]。また、BASICのサブルーチンとして実装されているため、一部関連するBASICの機能とは不可分である。また、浮動小数点演算は精度は高いものの相応にコストが高いため、ゲームなどレスポンスや処理速度を重視するゲームなどの作成では変数を整数として宣言することがTipsとなっていた。
Z80のメモリ空間のうち前半32KBをBIOSとBASICインタプリタのROM、後半32KBにユーザーエリアと、周辺機器の使用するものを含むワークエリアが配置される。MSX2以降の追加機能やディスクドライブを接続した際のDISK-BASICのためのROMは前半32KBのスロットを切り替える形で実装されていたが、そのワークエリアはフリーエリアの末尾に配置される。そのため、機能を拡張するにつれてフリーエリアは削減される。また、後半のユーザーエリアはページが固定であることを前提に使用されるため、BASICのVersionやハードウェアに関わらず、32KiB以上実装された機種やメモリマッパを持っている機種でもBASICのユーザーエリアは増えず、初期状態で配置されるRAM以外はRAMDISK等の拡張機能で使用する形となっている。
システム部分がROMで構成されているため機能の拡張や、変更用のフックがメモリの最後部に配置されているほか、ディスクドライブなどのBIOSがワークエリアとして使用するため、ユーザーが直接メモリに書き込みを行う場合には、事前に使用可能な末尾のアドレスを確認する必要がある。BASIC上で機能の拡張を行う場合、call命令によって初期化、有効化を行う必要がありハードウェアの拡張などの場合BASICからの利用に対応している場合は、同じ手順で制御ルーチンの組み込みと初期化も行う形となっていた。
MSXのBIOSは同時期の実装におけるマシン語モニタなどとは異なり、規格としてハードウェアに対するアクセスの窓口ともなっているため、純正のシステムを離れたプログラムでもシステムコールの形で呼び出される性質のものになっているほか、マシン語モニタとして簡略化されたメモリやバイナリに対する操作は標準の構成として提供していない。スロット、ハードウェア制御以外はBASICの実装に伴うサブルーチンであるが、公開されているエントリに関してはユーザーも呼び出して利用できるのは他の環境のマシン語モニタでのエントリと同様である。
MSX規格に則ったハードウェアの持つスプライト機能、VDP命令の補助によるグラフィックス処理等によって、他の機種では難しかった高速にキャラクタが動き回るリアルタイムゲームをBASICレベルで作成することが簡単だった。また、命令単位では低級言語によるハードウェアの直接制御に肉薄する速度で動作させることが可能だったことも特徴である。ただし、グラフィックス制御に関してはアルゴリズムレベルで最適化するなどしない限り、直接ハードウェアを制御してもそれ以上の速度は望めないということでもあり、VDPの処理速度から必ずしも他の実装に対し高速なわけではない。
拡張された命令
MSXの規格にあわせた次のような命令を持っていた。
VPOKE
,VPEEK
- VRAMへの書き込み命令と読み込み関数。MSXではVRAMはVDPが管理し、CPUのアドレス空間とは別になっているため用意された。
VDP
- 画像コントローラVDPのレジスタをBASICから直接読み書きする関数。
ON
~GOSUB
- 割り込み命令。ファンクションキー押下(
KEY
)、インターバルタイマ(INTERVAL
)、スプライト衝突(SPRITE
)、プログラム中断操作(STOP
)などを検知して特定のサブルーチンをコール。 CALL
- スロットに接続されたデバイスの拡張命令を呼び出す。周辺機器の持つ拡張BIOSに
CALL
命令の処理ルーチンが格納されており、BASICプログラムから周辺機器をコントロールすることができた。短縮形はアンダーバー(_
)。- 例:MSX-DOSから「
BASIC
」コマンドでDISK-BASICを起動した場合、CALL SYSTEM
を実行するとMSX-DOSが起動。
- 例:MSX-DOSから「
PUT SPRITE
- スプライトの表示位置・パターン・色を制御。
SPRITE$(n)
- スプライトのパターンを定義する関数。
DISK-BASIC
本体またはカートリッジスロットにフロッピーディスクドライブが存在する場合、それらの内蔵ROMにより拡張されたDISK-BASICが起動した。物理的にドライブが1台の場合でも、ワークエリアは2台分確保される。CTRLキーを押しながら起動することで1台分に制限され、空きエリアを増やすことができた。また、SHIFTキーを押しながら起動するとフロッピーディスク環境は一切無効化され、従来のROM-BASICの空きエリアを前提としたアプリケーションが実行できた。
固有名詞の分類
- MSX-BASICのページへのリンク