Apple IIやNEC PC-8001が発売される直前のこと。ICチップとしてのZ80等は売られていましたが、完成品のパソコンは無く、マニアは自分で回路図を描いて半田ごてとネジ回しで何とか動くコンピュータを作っていました。米国では早々に組み立てキットが発売され、日本ではNECのTK-80が売られていたか。
TK-80は当時としてはかなり売れたと聞いています。ネット情報ではROMが768バイトでRAMが512バイトとか。この容量ではボード上のLEDを光らせることくらいしかできません。
何とかもっと便利に使えないか、ということで、米国でtiny BASICの計画がマニア雑誌で提案されたそうです。4KB程度のRAMで動作する高級言語です。
元の資料はネットで容易に見ることができます。INPUT、PRINT、LET、GO TO、IF-THEN、GOSUB、RETURNの7命令で、変数はA-Zの26個で16bitの整数のみ。ビデオ端末でゲームが出来るようにPRINT文での文字列出力と、配列と乱数関数が必須となっていました。私はこの直後の展開を知りません。知ったのはbitと呼ばれる情報系月刊誌の特集号に載っていた東大版Palo-Alto tiny BASICです。これにはFOR/NEXTループが追加されていました。
この東大版Palo-Alto tiny BASICはソースコードと共に内容の詳しい解説が載っていて、その後の我が国のパソコン界に与えた影響は絶大だったと思います。私もROMに焼いて動作させたことがあって、良くできていると感心したものです。
最大の特徴は、人間が読めるソースコードをそのままCPUが解釈・実行したことだと思います。さすがに行番号は2進化されていますが、他はそのままです。その後のマイクロソフトBASICはキーワードが中間コードに置き換えられていましたが、それすら省略されていました。
GOTOとIF-THENの飛び先は行番号で、行番号はすべての行に付いていましたから容易にスパゲッティプログラムが出来てしまうのでフローチャートは必須でした。その際、プログラムの先頭から行番号を逐次に検索するのでとても効率が悪く、その代わりとしてFOR/NEXTループに入るとメモリ上に専用の枠組みが作られてここは高速に回転します。GOSUB/RETURNも一時記憶のスタックを使いますから、2種類のスタック(後入れ先出し)が用意されるのと同等になります。
このFOR/NEXTループの専用設計の元は私の想像ではFORTRANがそうなっているのだと思います。たとえばC言語ではループ専用の枠組みは概念すら無いです。しかし、なぜかこの設計はマイクロソフトBASICと我が国のポケットコンピュータに引き継がれました。
本稿の目的は何とかしてエレガントなtiny BASICが現時点で設計できるか、です。ええ、単なる私の趣味です。実用性はほとんどありません。
マイクロソフトBASICの1行単位の中間言語へのコンパイルは、前項で述べたダートマスBASICの名残だと思います。TSSではおそらく一行単位で実行が打ち切られて、他のユーザや内部ジョブの1行が次に実行されます。これであたかもマルチタスクのように見せることが出来る、というか本物のマルチタスクです。BASICでははっきりしませんが、別ジョブ起動命令やロック命令があったりすると雰囲気が出て、そのような処理系は別にあります。
ですから想像をたくましくすると、最初はマイクロソフトBASICはマルチタスクを目指していたものの、パーソナルコンピュータなのでその機会が失われたのだと思います。今はOSによる機械語レベルのマルチタスクですから、BASICに仕掛けを組み込む必要はありません。
tiny BASICにはTSSは考慮されておらず、FORTRANやC言語みたいに単にアルゴリズムを記述するだけです。
いやなに、数年前に発売された現代版tiny BASICを冠した本のBASICが1行コンパイラだったので、ちょっと私は腰を抜かした、ってこと。このあたり、米国の電子計算機の技術の厚さと、我が国のマイコンの位置づけがよく分かる事例だと思いました。