見出し画像

6K BASIC

元祖パソコンと呼ばれる御三家Apple,PET,TRSはいずれもBASICのROMが組み込まれていて、すぐにBASICが使えることが売りでした。無印のアップルに載っていたROMには「整数BASIC」または「6K BASIC」と呼ばれるBASIC インタプリタが書き込まれていました。

元々メモリがあまり潤沢ではないミニコンで手軽に使える高級言語として開発されたBASICインタプリタですが、それでもマイコンに載せるにはやや大きすぎて、一部の機能だけに絞ったサブセットBASICが多く開発されました。特に日本ではTinyBASICと呼ばれた2K程度のメモリ(ROMひとつぶん)で実装できるインタプリタが流行りました。Appleの6K BASICが6Kと呼ばれる由縁としてインタプリタ(など)のサイズが6Kバイトだったことによります。TinyBASICに比べればグラフィックスなどを含み、それなりの機能が実装されていましたが、それでも整数しか扱うことが出来ず、ゲーム用と称されることもありました。

6K BASICの特徴としては、1行を入力した時点で、プログラムの文字列は「中間コード」と呼ばれる符号に翻訳されてからメモリに格納されました。従って、この時点でプログラムとして解釈されなければエラーになって、メモリに残されることもありません。この符号を解釈してプログラムは実行されるので、インタプリタとはいえ、実行の都度、文字列を解釈することに比べれば、かなり実行速度もあがります。他にもメモリ管理にも工夫があり、高級言語で書いても十分なパフォーマンスが発揮されるのでゲームなど速度が重視される場合でもBASICが愛用されました。実は10K BASICよりも結構速いので、主流がPlusになりROMに10K BASICが搭載されても、わざわざメモリに読み込んで使われることもありました。ただ本当に最低限の機能しか無くて、モニタROMに含まれるルーチンをCALL命令で呼び出したり、高速化が要求される部分だけPOKEでマシン語を書き込んで使うなんて言うことも当たり前でした。

どうして最初から10K BASICを搭載しなかったのかというと、単にインタプリタの開発が間に合わなかったのが原因だとは思いますが、当初の基板はRAMメモリが4×3の12Kしか使えなかったので、インタプリタだけではなくコードや変数領域のコンパクトさがより重視されたことも間違いないと思います。

ただ本来BASICが得意なはずの文字列処理は褒められたものではなく、文字列を配列として処理する必要があるので、ゲンナリするところもありました。C++のstringではなくてCのchar配列のイメージです。確かに速かったんですけど(6K BASICの命令に文字列関連が含まれていないのはこのためです)。

6K BASICにはデバッグで用いられるTRACEコマンドはもちろん、変数の値に変更があった場合に表示されるDSP命令も実装されていたのですが、これが意外と使いにくくて普通にPRINT文でデバッグしていた覚えがあります。

またFOR文に厄介なバグが有り、NEXT文の時点で制御変数に演算を行って「から」FOR文を抜けるかの判定が行われるので、ここで TO 32767 とかだと NEXT の時点で > 32767 エラーとなってしまい処理が終わってしまうというのが難点でした。他にもいくつかの有名なバグがあったようで、人によってはパッチをあてたROMに取り替えたりなんていうこともあったみたいです。

初心者がゲームを書くには十分ですし、機能が少ない分、覚えるのも楽でした。また足りない部分をマシン語で補うので、マシン語を覚える入り口としても役に立ちましたね。

整数BASIC
https://en.wikipedia.org/wiki/Integer_BASIC
https://apple.fandom.com/wiki/Integer_BASIC
AppleII[6K-BASIC]
http://www.openspc2.org/BASIC/HTML/AppleII[6K-BASIC].html
Tiny BASIC
https://ja.wikipedia.org/wiki/Tiny_BASIC


この記事が気に入ったらサポートをしてみませんか?