VAに搭載されているN-88日本語BASIC(V3)ってのがすごくとろい。 なぜ16ビットのくせにそんなにとろいんねん!!と何回叫んだかことか。 いろいろプログラムを作っても、とろ過ぎて使いものにならない。 インタプリンタが腐ってるとしか思えない。 主要なルーチンをマシン語にしたら使いものになるかもと考えると、どうしてもアセンブラを作る必要が出てきた(何でやねん)。
でも、今まで8086なんて触ったことがない。 アセンブラを作りながら勉強しようかと思い、図書館から本を借りてきた。 しばらく本を眺めて、基本的な命令とか必要な命令とかを取捨選択し、試行錯誤の上、それらのサブセットだけに対応した簡単なアセンブラをベーシックで作成した。
ベーシックは文字列の扱いが苦手なので、アセンブラとなるとやはり字句解析がボトルネックとなる。 このルーチンをまずアセンブリ言語で書き直し、マシン語に変換しベーシックからcall命令でリンクすることにした。 これにより結構スピードアップが図れ、作業効率が大幅に改善された。
次にニーモニック→コード変換ルーチンをマシン語にすることにした。 これは結構苦労したが、スピードはさらに速くなった。 この時点ではメインルーチンはベーシックにある。 1パス目でラベルを割り振った後、2パス目でコードを埋め込むようにした。 これでもう十分実用に耐え得るアセンブラができたが、ついでだから、もっとマシン語で書いてやれと思い、メインルーチンをマシン語に置き換えるという暴挙に出た。
これには結構時間がかかったが、完成したものは無茶苦茶速くなった。 一番最初にベーシックで作成したものに比べると、数百倍は速くなったんではないだろうか。 最後にフルセットに対応させた。 これで完全なアセンブラがアセンブリ言語で書かれたものが完成した。 自分自身のソースを自分自身でアセンブルし自分自身に置き換えることにより、どんどんバージョンアップしていくことができる。 これが結構曲者である。
さらに欲張って、C言語風にswitchやif-then-elseやbreakなどにも対応させてみた。 なかなか使い勝手が良い。 しかし、ここにきて新たな問題にぶちあたった。 アセンブラのソースがどんどん大きくなるにつれて、VA附属のエディタでは操作に不満がでてきたのだ。 したがって、どうしてもエディタを作る必要が出てきた(何でやねん)。
試行錯誤の上、附属のエディタよりできのいいエディタを完成させた。 開発環境は最高になった。 さあ、これからバリバリなんか作るぞ、というとき、不幸にもDISKがお亡くなりになった。 ファイルのバックアップを取っていて正解。。。 だと思ったのだが、実際はエディタは最新バージョンのアセンブラに対応したソースだったのに対して、バックアップしていたアセンブラは一つ前のバージョンだったためアセンブルできなかった。 こんな自分の愚かさに嫌気が差して、それ以来開発することはなくなった。
頻繁にバージョンアップするものに対しては、こまめにバックアップを取りましょう。 さもないと泣きを見ることがあります。 まあ、今回は8086の勉強ができただけでも良しとしましょう。
福本趣味のページ
福本ホームページ