MSX-BASIC

概要

言語の仕様としては、変数名が最初の2文字のみ有効、行番号を抽象化するラベルの概念がなく、GOTO命令等の飛び先にラベルを指定できないなど、他機種に採用されていたマイクロソフト製BASICが拡張されていたのと比べると初期の版に近かった。
浮動小数点にはBCD（仮数部は6桁または14桁）を使用していた。
Z80のメモリ空間のうち前半32KBをBIOSとBASICインタプリタのROM、後半32KBにユーザーエリアと、周辺機器の使用するものを含むワークエリアが配置される。MSX2以降の追加機能やディスクドライブを接続した際のDISK-BASICのためのROMは前半32KBのスロットを切り替える形で実装されていたが、そのワークエリアはフリーエリアの末尾に配置される。そのため、機能を拡張するにつれてフリーエリアは削減される。また、後半のユーザーエリアはページが固定であることを前提に使用されるため、BASICのVersionやハードウェアに関わらず、32KiB以上実装された機種やメモリマッパを持っている機種でもBASICのユーザーエリアは増えず、初期状態で配置されるRAM以外はRAMDISK等の拡張機能で使用する形となっている。
システム部分がROMで構成されているため機能の拡張や、変更用のフックがメモリの最後部に配置されているほか、ディスクドライブなどのBIOSがワークエリアとして使用するため、ユーザーが直接メモリに書き込みを行う場合には、事前に使用可能な末尾のアドレスを確認する必要がある。BASICからの利用を前提としたハードウェアでは、カートリッジ内に制御BIOSと、拡張BASICを持っており、使用前にcall命令によって、初期化を行うことで拡張される。
MSXのBIOSは通常のパソコンのBIOSとは意味合いが異なり、ハードウェアを隠蔽するために起動時だけでなくハードウェアドライバやシステムコールとして常に使われる性質が強い。MSX-BASICの内部処理もほとんどの場合BIOSを経由して処理が行われ、BIOSの中にはBASICインタプリタ向けの機能もいくつか存在している。前述のBASIC上で行われるBCD浮動小数点演算もMATHPACKと呼ばれるサブルーチンライブラリとしてBASIC内で実装されており、機械語ベースのユーザープログラムやMSX-DOSアプリケーションからの使用も可能になっていた。
また、MSX規格に則ったハードウェアの持つスプライト機能、VDP命令の補助によるグラフィックス処理等によって、他の機種では難しかった高速にキャラクタが動き回るリアルタイムゲームをBASICレベルで作成することが簡単だった。また、命令単位では低級言語によるハードウェアの直接制御に肉薄する速度で動作させることが可能だったことも特徴である。ただし、グラフィックス制御に関してはアルゴリズムレベルで最適化するなどしない限り、直接ハードウェアを制御してもそれ以上の速度は望めないということでもあり、VDPの処理速度から必ずしも他の実装に対し高速なわけではない。

DISK-BASIC

本体またはカートリッジスロットにフロッピーディスクドライブが存在する場合、それらの内蔵ROMにより拡張されたDISK-BASICが起動した。物理的にドライブが1台の場合でも、ワークエリアは2台分確保される。CTRLキーを押しながら起動することで1台分に制限され、空きエリアを増やすことができた。また、SHIFTキーを押しながら起動するとフロッピーディスク環境は一切無効化され、従来のROM-BASICの空きエリアを前提としたアプリケーションが実行できた。

バージョン

MSX-BASICにはMSXの規格と対応するいくつかのバージョンが用意された。ローマ字入力等の一部を除けば、規格の拡張に伴い機能に対応する予約語の追加が主な変更点となる。但し、メモリについては積極的にフリーエリアや、ワークエリアとして使用するような拡張はされず、RAMDISKなど拡張ストレージとしての対応に留まっている。すべてのバージョンで文法に上位互換性があり、大幅なシステムプログラムの更新が行われたturboRを除けばスイッチ、システムの読み込みなどによるモード変更やシステムの変更などを必要とせずにそのまま旧版のソフトウェアが実行可能である。MSX turboRではプロセッサの変更やMSX-DOSの改版に伴い、起動時に「1」キーを押し続けるか、MSX-DOS1またはDISK-BASICのVersion1でフォーマットしたディスクで起動するとDISK-BASICがVersion1でZ80ベースの互換モードで起動し、互換性を維持している。

BASICコンパイラ

MSX-BASICには「MSXべーしっ君」という名称でMSX独自の機能を活用できるコンパイラも存在した。
アスキーに所属していたプログラマ・鈴木仁志が開発した。初版は雑誌に発表、1986年にアスキーからROMカートリッジで発売された。製品名は当時ログイン誌で連載していた4コママンガのタイトルから取られており、ソフトのパッケージにも主人公・べーしっ君のイラストが描かれ、一見するとゲームソフトのようだった。付属のフロッピーディスクにはサンプルのマンデルブロ集合の描画やワイヤーフレームの3D迷路自動作成のプログラムが収められていた。
MSX2+が発表されると新機能に対応した「べーしっ君ぷらす」が発売されたほか、サンヨーのMSX2+であるWAVY77シリーズに同等のものが内蔵された。また、MSXturboRが発表されるとソフトベンダーTAKERUからディスク版で「べーしっ君たーぼ」が発売された。
なお、MSX-BASICのコンパイラは、べーしっ君以外にも、ソフトウエスト、ハート電子産業がそれぞれ開発・発売していたものが存在する。

仕様

オンメモリのコンパイラで、拡張BASICとして実装されている。ROM媒体や本体内蔵のバージョンではROMカートリッジや本体内のスロットに、ディスク媒体のバージョンではメインRAMの未使用領域（裏RAM）に格納されて動作する。
既存のBASICプログラムを、少しの手直しをするだけで高速化できるというコンセプトで設計されている。
一般的なコンパイラと違い、中間コードや機械語オブジェクトをファイルとしては生成せず、実行のたびにその都度機械語オブジェクトを生成する仕様となっている。このため、MSXべーしっ君で書かれたプログラムはMSX-BASICのプログラムソースそのものであり、一般のBASICプログラムと同等に管理できるため、BASICの扱いの簡便さと機械語の高速さを併せ持った開発環境となっている。
実行速度は最大で10倍程度も高速化される。
MSX-BASICの完全互換ではなく、ディスク入出力など未サポートの命令が一部あるため、プログラム全体をコンパイルするか一部分のみをコンパイルするかを選択できるようになっている。
RUN の代わりに拡張命令 CALL RUN により実行開始した場合、プログラム全体の機械語オブジェクトを生成し実行する。
一部分のみをコンパイルする場合は、BASICプログラム内に拡張命令（CALL TURBO ON、CALL TURBO OFF）を組み込む。実行時にその拡張命令に処理が移ると、ワークエリアにその範囲の機械語オブジェクトが一時的に生成されて実行される仕組みとなっている。範囲外の箇所はそのままBASICで動作するため、MSXべーしっ君非対応の命令がプログラムソース中に同居できる。
浮動小数点数は、MSX-BASICがBCDで実装しているのに対して効率化を理由に3バイトの2進数という独自方式で実装しているため、非コンパイル部分と受け渡しすることはできない。