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







