PokuG stdio.h

stdio.hはおまじない

MENU

IRQ(INT)とI/OアドレスとDMA

IRQ(INT)とI/OアドレスとDMA

この知識はPC98だからというものではなく、どのパソコンでも共通のものだったと思います。

WindowsならPlug&Playの機能でIRQ及びI/Oアドレスを自動で割り振りますが、MS-DOSでは重複しないように手動で設定しないといけないので解説します。

ちなみにMS-DOSでIRQもしくはI/Oアドレスが重複しているとドライバを読み込んだ時点でOSがハングしてました。

IRQとINT

IRQ

IRQとは「割り込み要求」とも呼ばれます。
割り込みというのは各種デバイスがCPUとやり取りする際に発生し、
どのデバイスからの要求なのかを識別するために用いられます。

98を含む昔のPCは0~15までの16種類までのIRQで、絶対的にIRQの数が少ない為にパソコンに拡張カードが数枚しかささらなかったと聞いたことがあります。

なお、IRQは番号が小さいほど優先度が高くなるようです。
下の図からタイミングを計るタイマーが昔も今も一番優先順位が高いですね。


左がWindows95で確認したIRQ。
右がWindows11で確認したIRQ。

INT

PC-9821ではユーザーが使用できるIRQをINTと呼んでいます。
98ではユーザーが使用できる空いているIRQだけを説明書などに提示する風習があり、それをINTと呼んでいました。

INTとIRQの比較表

INTとIRQの比較表です。

IRQ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
INT 0 1 2 3 41 42 5 6

例えばIRQ3がINT0の事になります。

PC9821のINIの例

下の画像は "PC-9821V200" のステップアップガイドの抜粋です。
ユーザーが使用できるIRQ(INI)の一覧になります。

何か増設する場合は使用していないIRQ(INI)を選び設定します。
もし空きがない場合は、既に設定してあるIRQ(INI)をずらしたり、デバイスを無効にしたりして空を捻出します。

I/Oポートアドレス

CPUと各種デバイスがデータをやり取りするための窓口としての領域に付けられた住所のことです。
「入出力ポート」とも呼ばれます。

この値もかぶってしまうと問題になります。
ちなみに管理人はI/Oポートアドレスがかぶってしまうという経験はありません。


左がWindows95で確認したIRQ。
右がWindows11で確認したIRQ。

DMAチャネル

DMAチャネルとは、CPUを使わずにデバイスとメインメモリとの間でデータ転送を行うために使われるのがDMAチャネルと呼ばれています。

CPUが他の処理を実行中でもデータ転送を行うことができるので、CPUに負荷がかからずデータを転送できます。

この値もかぶってしまうと問題になります。
IRQ(INT)に比べるとDMAチャネルが重複するケースはまれですが、SoundBlaster互換の音源などはDMAを使用しているようです。

PC9821のDMAチャネルの例

下の画像は "PC-9821V200" のステップアップガイドの抜粋です。

IRQ(とINT)とI/Oポートアドレス、DMAの競合を防ぐには

基本CバスなどのボードのディップスイッチでIRQ(とINT)とI/Oポートアドレスが設定できるものは、ディップスイッチを操作して競合を防ぎます。
もうIRQ(とINT)の空きがないなどディップスイッチで解決できない場合は、システムセットアップメニューかPCIセットアップユーティリティを使用します。

システムセットアップメニュー

9821の場合は"HELPキー" を押しながら98の電源を入れるとシステムセットアップメニュー画面が起動します。
DOS/V機のBIOSみたいなものだと思います。
この画面で競合を回避します。

PCIセットアップユーティリティ


PCIセットアップユーティリティというツールを使用します。

詳細は以下。
PCIセットアップユーティリティを使用する - PokuG stdio.h


終わり

IRQ(とINT)とI/Oポートアドレス、DMAは被らないように設定しましょう!