[14539]  VGAカードのBIOS飛ばし
投稿者:YU さん   2001-06-13 04:05:12
新しくPCIタイプのVGAカードが発売されるたびに、PC-9821で使えるかどうかということが話題になりますが、100%確実にBIOSを「飛ばす」方法がようやくわかったので報告します。
ただし、BIOSを飛ばしても、「メモリカウントの直後にハングアップ」しなくなるだけで、Windows2000などが動作することを保証するわけではありませんので、念のため。

まず、マシンの起動時にハングアップするボードは、当然のことながらBIOSの書き換えが必要です。BIOSの書き換え中に電源を切ったりする、いわゆる「BIOS飛ばし」と呼ばれる技を使って成功する場合もありますが、成功率が低いですし、故障につながる可能性もあるので、精神衛生上よくありません。
最悪、そのボードがAT互換機でもまったく動作しなくなってしまう可能性もあります。

そこでPCI規格のデータシートを見ると、BIOS ROMの中には「PCIデータストラクチャ」という領域があり、その中に「コードタイプ」という1バイトのデータが書き込まれています。PC-9821本体のBIOSはこのバイトをチェックして、0x00ならBIOS ROMの初期化ルーチンにジャンプするという処理を行っています。これを0x01に書き換えてしまえばパソコン本体のBIOSはビデオカードのBIOSに制御を移さなくなるため、絶対にここでハングアップすることがなくなるのです。

「コードタイプ」の書き込まれている位置の具体的なアドレスですが、これはBIOSのバージョンが変わると移動する可能性があるので、新しいビデオカードやBIOSが出るたびに調べなくてはなりません。
まず、BIOSのROMイメージデータファイルをバイナリエディタなどで開きます。
そして、先頭からのオフセットアドレス0x0018〜0x0019に格納されているワードデータを見ます。そして、このワードデータに0x0014を足した物が、コードタイプが書き込まれているオフセットアドレスになるのです。
あと、BIOS ROMイメージファイルの末尾のバイトは、ファイル全体のチェックサムになっていますので、コードタイプを書き換えると同時に、チェックサムを1減らさなくてはなりません。つまり、書き換えるのは合計で2バイトになります。

以上の処理を自動的に行うプログラムを作成すれば、どんなビデオカードにも使える汎用の9821対応BIOSパッチプログラムができあがります。
最新のカードだけでなく、過去に発売された様々なビデオカードの動作報告を期待したいところです。
応用としては、メルコのWGP-FXが著作権の問題なしに98で使えるようになる可能性もあるので、誰か試してみませんか?
  1. YU さん   2001-06-13 04:25:14
    過去ログを調べて見ると、以前発表されたG400のBIOSパッチはまったく同じことをやっていますね。
    ということで、これで間違いなさそうだという確信が少し強まりました。ぜひ色々なビデオカードでの実験結果をお願いします。
  2. dtx さん   2001-06-13 12:44:30
    物によっては、起動時のVGABIOS内部でチップの初期化などを行っている場合もあるそうですので、それだけでは動作しないかも。
  3. yosh さん   2001-06-13 18:49:31
    G450PCIのBIOSパッチを公開していますが、G200とMillennium2の方は同様の方法でOKです
    と言うよりもこの方法を使えばRADEON PCIですらセカンダリモニタとして使えますから
    ただATiの方は一般にはBIOSフラッシュツールが出ていないので、基板から剥がして
    ROMライタで書き込みを行うと言う動作が必要でしょうね

    RADEON PCIですがプライマリモニタとしてはドライバが弾いてくれるので
    今現在の所成功していません...、一瞬だけWindowsの画面が出るのですがその後青窓です(はぁ・・・
  4. R220 さん   2001-06-14 00:25:40
    ドライバ側でVGABIOSの領域を見に行くものもあるのですが・・・。
  5. 土野明日香 さん   2001-06-15 00:57:08
     どもどもっ★土野明日香です。

     拡張ROM-BIOSのヘッダから1Ch〜33hの間に、
     50 43 39 38 CB 90 90 90 CB 90 90 90 CB 90 90 90 CB 90 90 90 CB 90 90 90
     と入れておけば、G/Aに限らずどんなボードでも大丈夫では?