ESXi7にWindows98をインストールした

目次

Ryzen CPUを使ってるESXiサーバにWindows 98をVMで入れようとしたら引っかかるところがあったのでメモ

追記(2023/09/07)

これで全て解決した。 https://github.com/JHRobotics/patcher9x

ReleasesからFDイメージ(今回はpatcher9x-0.8.50-boot.ima)をダウンロードして起動 -> CD-ROMドライブに移動して SETUP.EXE /NM で普通にインストール -> 再度FDで起動して patch9x -> 全てdefaultを選択してパッチ当て -> 再起動でOK。

リポジトリのREADMEによると、どうやら当初書いていたVME bugではなくTLB invalidation bugとCPUが速すぎることによる0除算発生によるエラーが原因だったよう。
パッチの制作者様に感謝…。

環境

  • ESXiホスト
    • OS: ESXi 7.0 Update 3g (20328353)
    • CPU: AMD Ryzen 7 1700
  • ゲストOS: Windows 98 SE

やったこと

詳しくは調べられていないが、どうやらRyzen CPUにはVME bugと呼ばれるバグがあるらしく、VMでWindows 9x(16bitが使えるOS?)を動かすと問題が発生する。
試しに何も対策をせずにインストールすると、以下の画面のようにEXPLORERが6d007eHの例外を吐いて落ち、「SHELL32.DLL ファイルは 欠落エクスポート GDI32.DLL にリンクされています。」というエラーが表示されたきりセットアップが進まなくなってしまった。

セットアップ中に出るエラー画面

この問題は32ビットプロテクトモードのディスクドライバを使用しない設定にすることで回避ができるが、Windowsのセットアップ中に問題が起きるため回避設定が入れられない。

そこで今回は、Windows98のインストール後かつセットアップ前に起動ディスク(FD)で起動し、レジストリを修正することで上記の設定を入れ、この問題を回避することにした。

FDで起動するタイミングは、1回目~2回目の再起動後。3回目の再起動後には例外が出てしまうためこのタイミングになる。

起動ディスクで起動したら、EDITコマンドなどを使いC直下など適当な場所に以下の内容を書いたファイルを作成する。今回は C:\FIX.REG とした。

regファイルの内容

REGEDIT4

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem]
"ForceRMIO"=hex:01,00,00,00

その後、 cd C:\WINDOWS でカレントディレクトリをWINDOWSのフォルダにし、以下のコマンドを実行する。

REGEDIT /L:SYSTEM.DAT /R:USER.DAT C:\FIX.REG

このコマンドで Importting file (100% complete) になったら対応は完了。
FDを外して RESTART コマンドで再起動すれば正常にセットアップが完了する。

Windows98起動

なお、この対策を行ったからかWindows98からCDドライブが見えず、VMware Toolsのインストールが行えなかったため、再び起動ディスクで起動して一時的にCDからHDDにファイルをコピーすることでドライバのインストールを行った。

XCOPY32.EXEはC:\WINDOWS\COMMANDの下に入っているので以下のような感じでコピーした。

MD C:\CDROM
CD C:\WINDOWS\COMMAND
XCOPY32 /E E:\ C:\CDROM

※長いファイル名に対応させるためにXCOPY32を使っているが、ファイル名が削られるような気がするので、もしかしたら何か間違っているかもしれない。

なお、Windows9x用のVMware ToolsのISOは以下のURLからダウンロードできる。
https://customerconnect.vmware.com/jp/downloads/details?downloadGroup=VMTOOLS10012&productId=614

また、7-Zip 9.20はWindows 9xでも動作するため入れておくと便利かもしれない。

ドライバ導入済みWindows98起動