大昔に作ったBASICコンパイラの話(1982年)

2018/01/04昔のパソコン

Twitter TLにて、PC9801用のBASICコンパイラの内部構造が話題になっていた。あのころはメモリも少ないし、アプリケーションはハードウェアにべったり依存しているし、今から振り返ると奇妙に感じる部分も多々あった。その代わりハードウェアの参照は透明だし(直叩きできるし)、ソフトウェアの規模も小さいし、電源切っても壊れないし、突つき回して勉強するにはいい環境だったと思う。

そのPC9801が発売されるよりもさらに前。私は8bit機で遊んでいた。当時の補助記憶はカセットテープ。何をするにもプログラム読み込ませて何分も待つ必要がある環境。私の使っていたマシン(BASIC MASTER L2II)はマイナー機種だったので、ゲームは数少なく、他機種のプログラムを移植する必要があった。そのおかげで移植とかデバッグの腕は上がったと思う。

コンパイラにハマった頃

8bit機+テープ環境では実用になる言語は限られてくる。Tiny BASIC系の言語や、さらに小さなVTLを元にした言語(GAMEなど)も使われていた。私はそのうちの1つKumajiri(くまじり)※1にハマっていた。GAME言語にちょこっとだけ構造化構文を追加した言語。中間言語(K-Code)を使っていて、コンパイラも実行環境も小さかった。プログラムが大きいとテープでのロード時間が馬鹿にならないので、小さいことは正義だ。

※1 中間コードを利用した6800用コンパイラ kumajiri

Kumajiriでゲームを作って遊んでいるときに、この中間言語を使えばBASICコンパイラが作れるんじゃね?と思いついた。言語仕様をばっさり削って整数型と四則演算だけ動くようにした習作が下記のプログラム。BASICコンパイラ自体をBASICで書いた。字句解析はBASICインタプリタに丸投げして、BASICの中間コードをメモリから読み出してコンパイルする。

インタプリタに寄生する利点は他にもあって、BASICインタプリタの内蔵エディタを使うのでメモリが節約できること。なにせV-RAMから何から全部合わせて32KBしかメモリが存在しないのだから。そのためコンパイラ自体は行番号10000以降に置いて、1-9999行までをコンパイル対象にした。

言語仕様を削ったのでプログラムは非常に小さい。下図が全リストだ。

BASIC MASTER USERS GROUP会報 No.4 (1982.4)
(大学合格発表直後〜入学前の暇な頃に書いたのだと思う)


これをセルフコンパイルできるようにし他の命令も追加すれば実用になるかなーと、野望は大きかったのだが、私の興味がFM-8という機種に移ってしまい、このコンパイラは塩漬けになった。

そもそも自分でコンパイラ作らなくても良い環境になったし、ゲームも大量に出回って遊ぶだけでも時間なくなったからなあ。BASIC MASTERはマイナー機種だったので遊ぶだけでは時間潰せなかったのは、自分としては幸いだったと今では思う。

追記: テープからサルベージしたバージョンをgithubに置きました。

動作環境が作れていないので、動くかどうかわかりません。こんなの見る人いるんかな。

昔のパソコン

Posted by ず@沖縄