手元に『インターフェース』1989年1月号のおかむらみちお氏(多分「岡村」)の割り込みに関する記事の一部のコピーがあります。ファイルに綴じてずっと持っています。章、節は次の通りです。
3 アセンブラでの割込み
3.1 アセンブラの問題点
3.2 割込み用テンプレートの作成
3.3 割込みプログラムの実例
3.4 割込みのマスク
3.5 割込みが終わったときにすること
3.6 元の割込みベクタを利用する方法
3.7 デバッグの方法
4 コンパイラからの割込み
4.1 割込みへの要求
4.2 Cとアセンブラの場合
4.3 割込みでCの関数を実行するには
4.4 フラグを見に行く方式
4.5 第3の方式
ご存じの方は「ああ、ああいう感じのヤツだ」とすぐお分かりでしょう。
アセンブラというのはコンピュータを直にコントロールできる言語です。CやBASICなどよりずっとハードウェア寄りです。割り込みとは……例えばマウスを動かす、キーが押される、……その他、何かイベント発生時に通知されるのですが、それを「割込みが入った」と表現するのです。今、例えばWindowsではマウスが動かされれば実行中のプログラムにOSから「マウスが動いたよ」というメッセージが送られます。趣味でやっていたのではっきりしたことは書けませんが、当時はこうしてOSレベルで割込みを管理しているわけではなかったのだと思います。例えば、どういう割込みが入ったら自分が今書いているプログラムのどこへジャンプしてくればいいのか、用意されている「割込みベクタ」という領域にジャンプ先を自分でセットなどしていたのです。詳しくは憶えていませんが、どの割込みを活かすか(有効にするか)、殺すか、場合によっては割込みコントローラ(多分そういうLSI)に自分で信号を送らなければならないケースもありました。今でも必要なことはあると思いますが。
この記事で印象的だったのは、アセンブラのマニュアルに関する次の記述です。
「ユーザがまごつく原因の一つは、……個々の機能の説明はあるがそれをどういう順に並べて、できあがりはどうなるかというプログラム全体のサンプルや説明がないところにある。……ことわりがないから順序など関係ないと思うと大違いで、さっぱり消えないエラー・メッセージが、(命令の)置き場所一つできれいに解決したりする。なぜ、それならそうと書いてくれないのだろう。……この手のアセンブラで当たり前のプログラムをとまどわずに書けるようになる方が、割込みをマスタするのより難しい。……芥川の蜘蛛の糸のように、登ってくる人を制限するためにこうなっているのだろうか。……アセンブラに限らないが、ユーザ側でこうした時間の浪費に対処するには、成功した使い方を残しておいて、テンプレートのように利用するのがよい」(赤字は筆者)
プログラミングしていて何か実現したいとき、前に近いことをやった覚えがある……ということがあります。分かりやすく、最小限の動くプログラムを残しておくと有効です。あちこち調べ直すのは時間の無駄ですしストレスです。個人的には「最小限の」というのは大事で、表示にこだわったりエラー処理を丁寧にしたり、……としているとパッと見たときにどこが大事な部分なのか分かりません。ブログにプログラムを載せるとき、ぼくはよく「最小限のプログラムです」と書いています。備忘録でもあるので、これは大事なことなのです。
ぼくの勘違いでなければ、岡村氏はこの頃、本を出していてぼくもそれを買って勉強していました。1990年代前半、MS-DOSの頃です。まだまだOSもむき出しみたいな感じで、メモリなども自由にあちこち書き換えたり自由にやっていました(今では自分が実行しているプログラムの外のメモリはいじれません。多分)。何をやろうとしても分からないことばかりで、でも面白かった。夏休みに汗をかきながら割込みプログラム、常駐プログラムを書いていたことを憶えています。今では複数のプログラム(ソフトウェア)が動いていることなど当たり前ですよね。でも昔はワープロを使っている間は別の、例えば画像の表示ソフトは使えませんでした。いったんワープロを終了させなければならなかったのです! 常駐プログラムを書けるようになると、制限はありますが実現できたのです。
もちろん今は今で面白いことはたくさんあります。昔とは比較にならないほど、大きなことも簡単にできるようになっています。それでも昔は面白かったという気がします。目標を実現するためにどうしたらいいか分からなくて、少ない情報に頼らなければならなかった。実験しては(さっきの話の通りで)「ああ、こうすればいいんだ」の繰り返し。(ヤマトの沖田艦長並みに)何もかもみな懐かしい……。