チップセットの判別法

 ソフトウェア的にマザーボードのチップセット(Intel i810など)を判別する方法はいくつか考えられる。
 1つは、レジストリ情報から取り出す方法。例えばあるWindows Meマシンでは下のようなレジストリが見つかる。

[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Class\System\0009]
"DriverDesc"="Intel 82439HX Pentium(r) Processor to PCI bridge"

 ここから、チップにIntel 82439HXが使われているから、このマシンは430HXだと判断することができる。

 しかし、このレジストリはWindowsにインストールされたドライバのための記述のため、間違えたドライバがインストールされている場合にはうまく判断できないことがある。

 ※ 同じレジストリ項目から、使われているビデオカードを判別することも可能だが、ビデオカードを交換しても古いカードのレジストリ情報が残っているため判別することができない。


 以上のような問題があるため今回はもっとスマート(?)な方法を紹介する。
 その方法は、チップセットが割り当てられているI/Oポートに直接アクセスしてしまおうというものだ。

 チップセットはPCIのデバイスとしてI/Oポートが割り当てられている。チップセットを判別するためのアクセス手順は以下の通り

 1.I/Oポート0x0CF8に0x80000000をDWORDとして書き込む
 2.I/Oポート0x0CFCからDWORD分読み込む

 たったこれだけの操作でいい。例えば読み出した結果が0x71208086ならばi810となる。

0x71208086のうち、下位の2Byte(0x8086)はVendor IDを示す。Intelは0x8086だ。
0x71208086のうち、上位の2Byte(0x7120)はDevice IDを示す。Intel i810は0x7120だ。


【チップセット例】

  0x71208086  i810
  0x71248086  i810E
  0x74101022  AMD-760
  0x06301039  SiS 630


カテゴリー「VC++ TIPS」 のエントリー