SSブログ

割り込みの悪魔(月刊ASCII 1992年5月号6) [月刊アスキー廃棄(スクラップ)]

特集の「これで分かった PC-9801&MS-DOS」をスクラップする。
今回は「割り込みの悪魔」をスクラップする。
ASCII1992(05)c06割り込みの悪魔_W520.jpg
 街の喧騒に嫌気がさして,この春から隠遁生活を送ることにした.日がな一日,文芸誌に依頼された原稿を書くほかは,山と鳥だけを眺めて暮らす予定だ。ただ原稿を書くにはパソコンがいる.それに当分街には出られなくなるので、退屈したときのために,パソコン用の周辺機器をいくつか買い込んだ.
 まず,多色表示とWindows 3.0の環境改善にグラフィックボード(アイ・オー・データ機器のGA-1024i).音楽演奏には必須のMIDIボード(ローランドのミュージ郎300),それに,山の音を録音するためにサンプリングもできるFM音源ボード(エムエスエーのスピークボード)の3点だ.
 しかし……,いきなり3枚差すというのは無謀なのだろうか。正常に動いてくれたのはグラフィックボードだけ。楽しみにしていたミュージ郎も動いてくれないし.空気がきれいなところだとパソコンは誤動作するのだろうか。窓の外は4月も終わりだというのに雪が舞い始めた。と……

コンコン
 この夜更けに,こんな山中の小屋の戸を叩く者がいる.
「だれじゃ」
「夜分申し訳ありません。道に迷いまして……。恐れ入りますが,今晩泊めていただけないでしょうか」
「おお,見れば白髪かと思うほどに頭に雪が乗っておる。おもてなしはできないが,休んでいきなされ」
「これはまたなんとお礼を申し上げたらよいかときにご老人,何か悩みごとでもあるのではありませんか? どうも顔色がすぐれないようですが」
「分かりますかな.実は,初めて周辺機器を装着してみたのだが,どいつもこいつも動いてくれんのです」
「たとえば、どういうことでしょう」
「そうですな。ほれ,ハードディスクからの起動はちゃんとできるのですが,ここで“ミュージ郎”なるソフトを動かそうとするとですな,音楽を演奏しようとしたところで」
「おや」
「……このように,うんともすんとも言わなくなってしまうのです」


ASCII1992(05)c06割り込みの悪魔画面_W520.jpg
「なるほど、なるほど.わたくし,多少は心得がございますから,ちょっと見せていただけますか」
「どうぞどうぞ。実は途方にくれておったところです」
 30半ばと見える職業不詳の男は,ボードとマニュアルを並べてなにやらぶつぶつ言っていたが,やおら懐から紙とペンを取り出すと,こんなことを書いた.


ASCII1992(05)c06割り込みの悪魔メモ_W520.jpg
 「周辺機器の中には,“割り込み”という処理を利用するものがあります.98ですと,周辺機器が使える割り込みの番号は0から6までの7種類なのです.このメモのINT[13]というのが割り込みのことですね」
13 INT番号
 INTとは,割り込み(Interrupt)の略で,ハードウェア割り込みとソフトウェア割り込みがあるが,周辺機器接続の際にトラブルの原因となるのは主にハードウェア割り込みのほうだ。
 ハードウェア割り込みとは,周辺機器CPUに対して,何らかの処理を要求する合図のことである。このときCPUが、どの周辺機器から合図(割り込み)が来たかをはっきり判別できるように,周辺機器ごとに「INT番号」を決めておく必要がある。合図によって,CPUに別の仕事をやらせることを「割り込み処理」という.食事中に電話のベル(合図)が鳴れば,食事を中断して電話の相手と話をする、というのと同じだ。
 98の場合,INT番号はシステムに予約されているものと,ユーザーが使えるものとがある.ユーザーが使えるのは,INT 0からINT 6と呼ばれている7つ(厳密にはINT 4に2種類があるた8つ)だが,このうち,INT 3はSASIのHDDに,INT 4はFDDに,INT 6はマウスに使われているため,周辺機器側で利用できるのはINT 0,1,2,5の4つしかない(表1.なおマウスのINT番号は変更可能).FM音源が内蔵されていれば,INT 5も使えなくなる.
 複数の周辺機器を用いている場合,I/Oアドレス同様,「INT番号が重なる」ことでソフトが動かなくなることがよくある.割り込み処理は,ある特定の周辺機器に対して行なわれるもので,複数の周辺機器から同じ割り込みの合図が来ては適切な処理は期待できない(図2).通常は,そういう不都合を回避できるように,周辺機器はINT番号を変更できるように作ってあるのが普通だ。ただ,周辺機器を利用するためのソフトウェアはたいていデフォルトのINT番号を想定して書かれているため,ボード側でINT番号を変更した場合はそれに合わせてソフトウェアのセットアップが必要になる(画面2)また,2チャンネルRS-232C増設ボード(PC-9861/K,AIWA B98-01)のように,1枚のボードで2つのINT番号を必要とするものもある。
 INT番号はI/Oほど選択肢が多くないため,重なるという事故も発生しやすいSCSIのHDDをメーカーのセットアップのまま装着すれば,たいていSASIのHDDと重なるし(INT 3),だからといってSCSIのHDDをINT 2にする今度はMIDIインターフェイスと重なる.INT 5はFM音源がじゃまをするし,INT 4やINT 6は論外……ボードを2枚差しただけでこの始末なのだ。
 また,ノーマルモードとハイレゾモードではマウスのINT番号が変わる(ノーマル時はINT 6,ハイレゾではINT 2)ため,モードを切り替えたら動かなくなるという事故も起こる.このほか,98NOTEのうちNS/E以降はレジューム機能のためにINT 2を使っている.


ASCII1992(05)c28ハード表1_W338.jpg
ASCII1992(05)c28ハード図2_W520.jpg
INT番号足りなかった。困ったものだ。
ASCII1992(05)c28ハード画面2_W432.jpg
「割り込みとはなんじゃろう」
「ちょっと急いでこの仕事をやってくれという合図,みたいなものでしょうか」
「ほう」
「ところが,今お使いのパソコンは,このように同じ割り込み番号を,2つのボードが取り合っているのです」
「取り合ってはいかんのですな」
「もちろんです。パソコン側は,誰が割り込みをかけたか分からなくなってしまいますから」
「なーるほど.……ということは,残念ながらどれか諦めんといかん」
「それには及びません。INT番号を変えてやればいいのです」
「そんなことができる」
「普通はできるようになっています」
「ではまず,MIDIボードをINT 1にでもして」
「いえ。それはやめたほうがいいでしょう」
「それはまたなぜ」
「MIDIボードを使うプログラムは,INT 2を使うものと思って作られているものがほとんどなのです。それを変えてしまったら,ソフトが動かなくなる可能性があります。今お使いのミュージ郎はINTの変更に対応できるみたいですが,これから導入されるかもしれない音楽ソフトが対応していると期待するのは甘いかもしれません」
「しかしそんなことを言ったらSCSIインターフェイスも同じなのではありませんかな」
「SCSIインターフェイスは,ボードのほうを変更すれば,あとは自動的にまわりもうまくセットアップされるようになっているのです」
「えらいんですな」
「まあ,そんなところです……とりあえずSCSIをINT 1に逃がしましょう。これで少なくともミュージ郎は動くようになるはずです」
「ところで,このメモではグラフィックボードが入っとらんが」
「このグラフィックボードは,割り込みは使っていないんです。周辺機器がどれも割り込みを使うわけではありません」
「あとは,INT 5のほうか」
「ああっ! これは内蔵FM音源の上位互換のボードですね」
「そうじゃったかもしれん」
「ご老人,これはいけません。INTだけではなく,I/Oアドレス[12]ROMアドレス[15]まで重なってしまいます」
「そうぽんぽんと新しい用語を出さんでもらえんかな」
「つまり,同じボードを2枚差しているようなものなのですから,これでは動作しません」
「マニュアルどおり内蔵FM音源を殺せば問題はないのじゃが,せっかくなら内蔵音源も外付けボードも同時に使いたいではないか」
「そういうご希望でしたら,I/OとINTを変えて,ROMを殺してしまえば……しかしそこまですると,付属のソフトが動作するかどうか」
「まあ,物理的に動かんのじゃ話にならんから,適当にやってみてくれんかな.あとでメーカーに聞いてみる」
「それがいいですね」
「いやそれにしたも今日はまったく,助かりましたわ」
「いえいえ。雪の中を野宿するのに比べたら.はっはっ」
 翌朝,男は早々に下山した。昨日はパソコンの相手で1日つぶしてしまったから、私も今日は山歩きでもするとしよう.と……

12 I/Oアドレス
 I/Oとは入出力(Input/Output)の略号で,パソコンではCPUと,その周辺ハードウェアとのデータのやりとり(入出力)のことを指す。
 パソコンにはRS-232C端子や拡張スロットなどを経由して周辺機器を接続するが,それらとデータをやりとりするのは「I/Oポート」と呼ばれるところ(信号線)である.ハードディスク,マウス,キーボードなど,画面表示以外の作業はすべてI/Oポートを介して行なわれているのだ.
 I/Oポートにもメモリと同じように番号が付いており、その番号をI/Oアドレスという。たとえばプリンタへのデータ送信は,I/Oアドレス40H番のポートを使っている.ポート番号は0からFFFFHまでがある.
 PC-9801シリーズに限らず,パソコンメーカーは機種ごとにどのI/Oアドレスには何がつながっているかを決めておまたユーザーが自由に使えるI/Oアドレスも決まっている(xxD0~xxDFHのうち偶数の番地,およびxnE0~xnEFHの番地xは任意の16進数,nは0~7).ただし98シリーズの場合,ノーマルモードとハイレゾモードでI/Oアドレスが異なるデバイスがあるので注意が必要だ.
 さて,周辺機器を接続するとき問題になるのは「I/Oアドレスが重なる」ことだ。複数のボードを98に差していて,そのボードが同じI/Oアドレスを使っていたら,当然その先につながっているものは正常に動作しない(図1).

 他のメーカーがたまたま自社と同じI/Oアドレスを使う可能性を考慮して,ほとんどの周辺機器メーカーは利用するI/Oアドレスを変更できるようにしている。たいていはボード上にあるディップスイッチやジャンパスイッチを切り替えることで実現し,やり方はマニュアルに記述してある.
 ただし,I/Oアドレスを変更してしまうと,デフォルトのI/Oアドレスを前提に作られているプログラムは動作しなくなってしまう.I/Oアドレスを変更した場合は,それに合わせてアプリケーションソフト(場合によってはデバイスドライバ)のセットアップを行なう必要がある(画面1).もし不幸にもそういったセットアップ機能がソフトにない場合は,もう片方のボードのほうで対処するか,最悪の場合はどちらかをあきらめなくてはならない.
 周辺機器がうまく動作しないときには,自分が今使っているボードどうしのI/0アドレスが重なっていないかどうかチェックすることになる(本体が使っているI/Oと重なっている可能性もゼロではないが,普通そのような設計はしないはずだ).なお,現実的にはI/Oアドレスが重なるということはあまりない。同じボードを2枚差して別々に制御しようとする場合に注意するくらいだろう.

ASCII1992(05)c27ハード図1_W520.jpg
ASCII1992(05)c28ハード画面1_W436.jpg
I/Oアドレスのバッティング。気づかないことがあった。困ったものだった。
15 ROMアドレス
 拡張スロットに装着するボードには,ボード上にROMが搭載されているものがある.SCSIインターフェイスボード,RS-232Cボード,FM音源ボード,LANボードなどにはたいていROMがある.ROMは,メモリ編で述べた「拡張ROM領域」内に,重ならないように配分する必要がある.ボードによってはこのアドレスを移動させることができるようになっている(画面3).EMSやUMBのことも考えてセットアップしよう.

ASCII1992(05)c29ハード画面3_W520.jpg
セットアップは面倒だった。
コンコン
 また扉を叩く者がいる.忘れ物でもしたのだろうか.
「ちわー。宅急便す」
「なに,物を買った覚えはないが」
「東京のAhSKI編集部からです」
 箱を開けると,真新しいファクスボードが出てきた。一緒に紙切れが入っている.先生,お元気ですか? さて、先生の原稿は図が多いので、お気軽に送信していただけるよう,ファクスボードをお送りいたしました。電子メールで画像ファイルを送るより安いでしょう? では次の原稿の締め切りまであと5日です.よろしくお願いします。

 FAXボード?INT番号が足りないではないか。

nice!(0)  コメント(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。