大昔に作ったBASICコンパイラの話(1982年)
Twitter TLにて、PC9801用のBASICコンパイラの内部構造が話題になっていた。あのころはメモリも少ないし、アプリケーションはハードウェアにべったり依存しているし、今から振り返ると奇妙に感じる部分も多々あった。その代わりハードウェアの参照は透明だし(直叩きできるし)、ソフトウェアの規模も小さいし、電源切っても壊れないし、突つき回して勉強するにはいい環境だったと思う。
そのPC9801が発売されるよりもさらに前。私は8bit機で遊んでいた。当時の補助記憶はカセットテープ。何をするにもプログラム読み込ませて何分も待つ必要がある環境。私の使っていたマシン(BASIC MASTER L2II)はマイナー機種だったので、ゲームは数少なく、他機種のプログラムを移植する必要があった。そのおかげで移植とかデバッグの腕は上がったと思う。
コンパイラにハマった頃
8bit機+テープ環境では実用になる言語は限られてくる。Tiny BASIC系の言語や、さらに小さなVTLを元にした言語(GAMEなど)も使われていた。私はそのうちの1つ
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に置きました。
動作環境が作れていないので、動くかどうかわかりません。こんなの見る人いるんかな。
ディスカッション
コメント一覧
久しぶりにBASICみました。
大先輩流石ですね。
maijunさん、こんばんは。
それは年寄りという意味かな(^^;;;
Visual ではない BASIC を使ったことのある人って何歳以上かなあ。MSX-BASICがあるから意外に若い人も使ってたのか?