PC-8801マシン語活用マニュアル

塚越一雄著の「PC-8801マシン語活用マニュアル」がInternet Archiveにあるのを見つけた。1984年の出版されており、題名の通り、対象機種はmkIIもSRもつかない素のPC-8801だ。内容は、マシン語モニタの解析、ブレークポイントの動作の仕方、フックアドレス、ROMのバンク切替、そしてマシン語からのBASIC各種機能呼び出し方法についての解説となっている。Z80マシン語については分かっていることが前提になって、マシン語自体の解説は全く無い。

なぜ、マシン語モニタの解析から始まるのか。それは、N88-BASICでマシン語プログラムを実行するのであれば、モニタがマシン語プログラムの実行環境であり、デバッグ環境であるからだ。更には、ROM上にあるBASICサブルーチンを利用するには、ROMのバンク切替について理解する必要があり、モニタの動作の解析を通してその仕組を明らかにするという方法を取っている。ROM上にあるBASICサブルーチンを呼び出すというのは、要するにBASICから利用可能な機能をマシン語から直接利用するものであり、言ってみればUNIXでいうところのシステムコールと言えよう。ROMのバンク切替の解説の後は、テキスト画面の制御、キーボード入力、カセットレコーダの入出力、フロッピーディスクの入出力、プリンタへの出力、グラフィックの出力の各種機能の利用方法について述べている。

今の視点から本書を読んでみて面白かった点がいくつかある。一つはブレークポイントの動作について。これは、基本的に今でも同じ原理で動く[1]。仮想メモリやOSのレイヤーなどが無い分、より分かりやすいのではないだろうか。もう一つは、当時のマシン語プログラムの利用方法について。わざわざマシン語でプログラムを書くのは高速化するためだと理解していたので、マシン語からBASICのサブルーチンの機能を呼ぶのは一見意味をなさないように思われた。特に、ゲームにおいてグラフィック処理を高速化する場合はそうである。しかし、1984年1月という本書が出版された時期がどういうときだったかを考えるとおぼろげながら状況が見えてきた。ビジネス向けのPC-9801が発売されたのは1982年10月であり、執筆時点の1983年は8ビット機もビジネス用途でまだ使われていたのだろう。そうすると、コアのロジックを高速化するのにマシン語で記述し、入出力はROMにある機能に頼るというのは一つの選択肢としてあったと思われる。

それにしても、コンピュータ利用の技術史を理解するのに、このような書籍が公開されているのは素晴らしい。

[1] x86アーキテクチャLinuxでブレークポインタがどのように動くかについては、例えば "How debuggers work: Part 2 - Breakpoints - Eli Bendersky's website" を参照されたい。

 

PC‐8801 mkIIマシン語活用マニュアル

PC‐8801 mkIIマシン語活用マニュアル