PCIデバイス一覧表示ソフト PCIlistVersion 1.48  説明書

Copyright(C) 2003-2018 まりも

■ 目的

 PC/AT互換機のBIOSメニューやITFでは、PCIデバイスのリストが表示されるものがありますが、PC-98ではそのような機構はないため、各種フリーソフトを用いて表示することになります。 しかし、マシン固有の「IRQ routing table」という情報を表示してくれるソフトウェアは、ほとんどありません。そこで本プログラムでは通常のデバイスリスト列挙表示に加えて、オプションでIRQ routing tableを表示させることにしました。このデータは、PCIスロットを自前で増設したりする際に役立ちます(後に詳しく述べます)。なおこのプログラムは、以前に公開していたpciirqr というプログラムと機能的にほぼ同じです。

■ 使い方

 DOSのコマンドラインから、ただ

PCIlist

と打ち込みます。この場合はデバイスを列挙して表示します。見方は後で説明します。

PCIlist -b

とコマンドオプションを付けると、ベースアドレスレジスタ(リソース割り当て)の内容を表示します。

PCIlist -r

とすると、このマシンの「IRQ routing table」を表示します。ただし正常に表示できるのは、PCI BIOS 2.1のこのファンクションが装備されている場合に限ります。PCI BIOS 2.0では装備されていないものがあります。ACPI BIOS以降のPC/ATでは、このファンクションが削られてしまっていることが多く、その場合は正常に表示できません。

PCIlist -v

のときは、PCIデバイスのチップリビジョンやサブシステムベンダ名、IDなどを表示します。

 いずれもDOSの「標準出力」に出力表示されます。実行結果をファイルに保存したいときは、リダイレクト機能を使って下さい。例えばkekka.txtなどとすると kekka.txtに取り込まれます。

■ 表示の見方

1.コマンドオプション無しの表示結果

下記のようになります。

オプションなしでの実行結果 PC-9821 PCI device list

 まず  PCI BIOS バージョン、最大バス番号を表示します。PCI-PCIブリッジがあったり、AGPを搭載している以外の場合は、Last bus No.は0でになるでしょう。[注意] PC-9821のPCI BIOSには、PCI-PCIブリッジの処理が正しくおこなえない問題があるため、実装されているよりも少ない数になっていることがあります。上記の場合最大BUS番号は5でなければならないのですが、PCI BIOSファンクションの返す値は4です。

 デバイス番号というのは、PCIデバイスの論理的番号のことで、マザーボードによってさまざまです。ClassというのはPCIデバイスの種類、Vendorというのは製造ベンダー名です。私が知っている名前とコード以外の場合は、Unknownと表示されます。

 IRQは現在設定されている値を示します。不使用のデバイスでは -- となり、IRQを使う可能性はあるもののBIOSによって無効化されているものは、 ** という表示がなされます。INTは、割り込みピンのどれが使用されているのかを示すものです。通常はINT[A]ですが、多機能デバイスでは[B]..[D]を使う場合があります。これが無しのデバイスは、IRQを割り当てる必要がありません。

 以下はPCIコマンドレジスタの各ビットの表示で、B/M はYesならバスマスタ可能デバイスであることを示します。同様に、P/Eはパリティエラー応答可能、I/OはI/O空間使用、MEMはメモリアドレス空間使用を意味します。MWIは、メモリライトアンドインバリデイトというコマンドを使用するか否かを決めるビットの状態を表示しています。SERは、システムエラーの通知可/不可の設定状態です。ビデオカード以外は「可」となっているのが普通です。

 PCIステータスレジスタの表示は o (状態が1)か - (状態が0)で示しています。PEDは、ステータスレジスタの、パリティエラー検出ビットの状態を示します。本当にデータが化けていなくとも、なぜかホストブリッジはPEを検出してしまう場合があるようです。これによってパリティエラー停止になるようなことは、パリティエラー応答が「可」に設定されてしまっているXt13,Xt16など例外を除き、普通はありません。DPDはデータパリティエラーがあったことを示しますが、まずこれが検出されることはありません。もしこれが1のときには本当にデータバケが発生していると考えられます。SEDは、システムエラー通報があったことを示しますが、これを表示できる以前にシステムがハングアップしていると思われます。しかし一部のPCIデバイス(VIA製 USBカード)では、なぜかこのビットが立ちます。といっても、実際にSERR#ピンがアサートされることはありませんでした。というように、ステータスレジスタの使われ方には、謎が多いです(私が知らないだけともいう:-)。

 なおPCI-PCIブリッジのステータスについては、ステータスレジスタ(06-07)ではなく、セカンダリステータスレジスタ(1E-1Fh)の内容を表示しています。ここでPEやDPにエラーが発生している場合は、その配下のデバイスからのメモリライトでなんらかのエラーが発生している可能性があります。

 一番右側のCL はcache line size レジスタの値表示です。ゼロのときは- で表示し、それ以外のときは値を表示します。昔のIntel CPUマシンでは 8 です。PCIexpressアーキテクチャマシンでは 16となっています。K6-III搭載機でも16になっている場合があります。

2.コマンドオプション /b のときの表示結果

PCIlist /bの実行結果

 PCIデバイスの占有ベースアドレスのみを表示します。なるべく情報を整理して、1行につき1デバイスの情報を表示したかったので、ベースアドレス情報のみ別途表示としました。表示されるBase address は16進数表記で、4桁表示は I/Oアドレス、8桁表示はメモリアドレスの占有を意味しています(間違えないよう)。表示はベースアドレスのみであり、通常デバイスの場合はアドレス範囲を表示しません。 ROM()と付いている表示は、拡張ROMを実装できる可能性があるボードです。PnPシステムは一応アドレスを割り付けます。しかし必ずしもROMが載っているとは限りません。またこのアドレスはDOSではアクセスできません。DOSメモリ空間でいう拡張ROM領域(C000:0?D000:FFFF)とは別です。Prefetch というのは、プリフェッチ可能なメモリのアドレス空間です。ビデオカードのメモリが割り付けられることがあります。なおバージョン1.40からは、アドレス数値が16進数であることを示す「h」を省きました。これはアドレス表示で1行が長くならないようにするためです(長いと改行が入って見づらくなる)。

 PCI-PCIブリッジが存在する場合は、2次側のバス番号を表示します。これにより、どのデバイスが配下にあるかを知ることができます。例えば 0:18にあるPCI-PCIブリッジの二次側バス番号は2です。これにぶら下がっているのは、バス番号2に並んでいるものということになります。ここではVGA VIDEOボードとPCI-PCIブリッジがさらに2個あります(CHANPON-ZERO3使用)。

 システムBIOSでは、二段目のPCI-PCIブリッジとその配下のデバイスに、リソースを正しく割り当てられなかったり、バス番号すら有効でなくなってしまったりすることがあります。本ソフトではPCI BIOSの返す通りに表示するので、誤りがあると表示もおかしくなります。システム内にPCI-PCIブリッジが存在するときにリソース割り当てを正しく行なうには、拙作"PCISET"が必要です(PC-9821専用)。

3.コマンドオプション /r のときの表示結果

このオプションのあるときは、IRQ routing情報を表示します。下記はRv20の例です。

PCIlist /rの実行結果

 PCIデバイスには、割り込みコントローラから4本の割り込み線が来ています。これらはPIRQ#0..3という信号線名で識別されます。これらの線がスロット上の割り込みピンのどれに配線されているかという情報が、routing情報です。

 この例では PIRQ#0 には IRQ 6が割り当てられており、その配線がスロット#2(デバイス番号12)のINT#Aに繋がっています。このとき、このスロット上にあるデバイスのIRQの値は、システムBIOSによって6 と割り当てられることになります。デバイスのIRQの値はこのような仕組みで決定されます。PIRQ#で *** と表示されている所は、IRQの割り当てがありません。これは、その線がINT#Aに繋がっているスロット#2(デバイス12)にデバイスが存在しないため、システムBIOSがIRQを割り当てなかったことを意味します。なお、PCI-PCIブリッジが存在するスロットの場合は、IRQは表示されません。これはPCI-PCIブリッジ自体はIRQを使用しないためです。ただしPIRQ#の配線は、セカンダリバス側にスルー接続されていますので、二次側のデバイス番号0,4,8,12,16...となるデバイスのIRQは、一次側のINT#Aが接続されるPIRQ#のIRQと同じになります(この例ではIRQは10)。二次側はデバイス番号の4の剰余値に従ってPIRQ#nの線がINT#Aに接続されます。

 表示結果のより詳しい考察には、PCIバスの仕様・動作、およびCPUアーキテクチャである「割り込み」に関する一定の知識が必要です。PCI-PCIブリッジを使用したボードを接続した場合、デバイスが多くなった分、IRQの共有で問題が起こりやすくなります。とくにMS-DOSモードでブートデバイスのIRQにシェア(共有)が発生すると、システムが起動できなくなる場合があります。

 しかし、本ソフトを用いることで、割り込み線の配線状態から、どのデバイスにどのIRQが割り振られるか、あるいはIRQのシェアが必ず発生するかを調べあげることができます。つまり、どのスロットにどのカードを挿すのが最適であるかの判断に活用できます。思うようにIRQが割り当てられない理由を発見することにも使えるでしょう。複合ボード使用時の応用例については、同梱の "Apply.txt"をお読み下さい。

 【注意】ACPIアーキテクチャのAT互換機では、このオプションは正常に表示されません。PCI BIOS 2.1のみ対応です。

4.コマンドオプション /v のときの表示結果

このオプションのあるときは、チップのベンダコード、デバイスコード、サブシステムIDなどの情報を表示します。下記はRvII26の例です。

PCIlist /vの実行結果

 まず、Revというのはチップのハードウェアリビジョンです。同一ベンダ・デバイスIDのチップであっても、リビジョンが異なると、特性や動作が異なる場合があります。SubSystemVebdorのところは、現時点で社名がわかるものについてはそれを表示します。Subsystemコードは16進数4桁で示します。

 この例のバス番号[0]:デバイス番号[12]には、NECの新チップuPD720101を使用したI-O data製のUSB2.0ボードが載っていることを示しています。いっぽうバス番号[1]:デバイス番号[0]および[3]には、USB2.0/IEEE1394コンビネーションボードが載っており、USB2.0チップは同じNEC製です。しかしチップリビジョンをみると古いものになっています。このボードのサブシステムベンダIDから、ボードの製造メーカはIOIであることがわかります。各ベンダが供給するデバイスドライバの中には、同一チップであっても他社のサブシステムIDとなるものに対しては動作しないように設計されている製品がありますが、そうしたことを調べる場合に、この /V オプション表示が参考になるでしょう。

■ 参考

 最近のPCIexpressバス搭載のAT互換機での表示例を示しておきます。PCI BIOSの リビジョンも3.0となっています。

ATの実行結果

intel製マザーボードBOXDG41TY での/b オプション表示
空のカードスロットのカードコントローラボードを搭載した状態

intel Core2機での実行結果

ASUStek製マザーボード P8B75-M(SATA IDE互換モード)での全表示

intel 7chipset世代PCでの実行結果

 バージョン1.45から次のオプションが追加されました。

■ ご注意

 本プログラムは、(オプション -p -n -cを除き)何かに作用するものではなく、PCIデバイスを列挙表示するだけのものです。実行してなにか弊害が発生するということは一切ありません。もし異常があるようなら、そもそもハードウェアに障害があると考えられます。

 Windows2000やNTのコマンドプロンプト下では実行できません。PCI BIOS自体が見えないようになっているので、エラーで停止します。Windows9xのDOSプロンプト(DOS窓)ならば実行できます。ただしベースアドレス取得時に割り込み禁止を一瞬行ないますので、何かのデバイスが動作している最中に実行しないほうがよいでしょう。

■ 開発履歴

日付    版  内容
2003. 4. 1 1.00 PCILIST として公開
2003.11.17 1.10 表示項目変更、PCI-PCIブリッジのステータスは二次側を表示
2004. 2.25 1.11 ベンダ名追加
2004. 3.29 1.12 ベンダ時の表示乱れ修正、ベンダIDを表示するように改め
2004. 4.14 1.13 INT#の無接続時の表示を元のバージョンと同じに戻した
2004. 6. 1 1.14 オプション -r 表示時のメッセージ文字を修正
2004.10. 3 1.20 PCI BIOS 2.1完全準拠でない機種(Xa7など)で-rの表示に対応
2005. 9. 8 1.30 サブシステム名やチップリビジョン表示のオプション -vを追加
2005. 9.11 1.32 ROMアドレス表示がおかしくなっていたのを修正、ベンダ名追加
2005.12.17 1.33 ベンダ名追加
2007. 8. 1 1.34 サブベンダ名追加
2008.10.27 1.35 CLASS名、ブリッジ名追加、USB 2.0が表示されない問題、最大バス番号まで表示しない問題(いずれもAT互換機)を修正
2009. 5. 1 1.36 -bオプションで、マザーボードのチップセット内PCI-PCIブリッジのアドレス表示がなされない問題を修正
2009. 5.31 1.37 "GFX bridge"という表記を"PCIexpress"に変更
2010. 4.15 1.38 デバイスclass名に誤った文字列が表示される場合があるのを修正、ベンダ名追加
2010. 5. 5  1.39 デバイスの存在しないスロットに故障表示がされるのを修正、サブベンダ名追加
2012. 3. 8  1.39d サブベンダ名追加
2012. 9.13  1.39f サブベンダ名追加
2012.10.17  1.40 PCカードに対応(既にしていたが明記していなかった)、ベンダ名追加、アドレス数値の末尾hを省略
2017. 7. 1  1.45 オプションを追加 -p -c -n
2018.11.11  1.46 USBデバイスclassの表示文字数を修正
2018.11.13  1.47 INT#が不正な値のときに文字列表示が乱れないようにした
2018.11.15  1.48 'NEC'という文字列の後に不正な文字が書かれる問題を修正


元に戻る