先日、Windows95の入った古いコンピュータを入手して、起動できる状態までリストアして遊んだのだが、その過程でもともとOSの入っていた古いHDDを取り外しており、ここに入っているOSをどこかに温存しておけないかなと思った。
いろいろ調べた結果、以下の方法でVirtualBoxの仮想マシンとして取り込むことに成功したのでメモ。
ディスクをイメージ化する
今回はMicrosoftが公開しているDisk2vhdを使って、VHDとして吸い出すことにした。
Disk2vhd – Sysinternals | Microsoft Learn
この方法をとった理由は、VHDであればホストのWindows上でマウントしてそのまま中身のファイルを書き換えることができ、VirtualBoxも仮想マシンのディスクとしてVHDを変換無しでそのまま使用することができるため。
使い方は簡単で、仮想化したいマシンから取り出したOSの入ったディスクをホストマシンにつないだら、Disk2vhdを起動してイメージの出力先とイメージ化したいディスクを選択し、「Create」ボタンを押すだけ。


仮想マシンの作成
VirtualBoxであらかじめ仮想マシンを作成しておく。OSのタイプを適切に選択しておけば、エミュレートするチップセットなどもOSに適したものが自動的に設定される。


ディスクは先ほど抽出したイメージを別途指定するので、ここでは作成しない。


仮想マシンが作成できたら、作成先のディレクトリにDisk2vhdで作成したイメージを移動させておく。

再度VirtualBoxの画面に戻り、「設定」→「ストレージ」を開き、「コントローラ: IDE」の「ハードディスクの追加」を押し、「追加」ボタンでDisk2vhdで作成したイメージを指定する。

そのほか、ネットワークやUSBなど不要なものは設定画面で無効化しておく。

高速なCPUに対応させる
Windows95を高速なCPUのコンピュータで動かそうとすると、保護エラーが発生して起動しないというのは割と有名な話。実際、自分の環境でも同エラーで起動させることができなかった。
事前に対処する必要があるのだが、やること自体は単純で、対策の施されたドライバファイルを配置し、これを読み込ませるように設定ファイルを書き換えるだけ。ただ、このドライバファイルの入手方法に関しては実際のところいろいろグレーなところがありそうなので入手元の明示は控えておく。
探す場合は、「WAITFIX.VXD」で検索してみるとよい。今回はこのファイルを何らかの方法で入手出来ている前提で進める。
どうやって読み込ませるかだが、今時のWindowsはVHDファイルをマウントしてそのまま中のファイルを読み書きできる。VHDファイルを右クリックしてマウントしてもよいし、ディスクの管理から「操作」→「VHDの接続」でマウントさせることもできる。

マウントしたディスクの\windows\system 配下に WAITFIX.VXD をコピーしたら、\windows\SYSTEM.INI をエディタで開き、[386Enh] の下に、「device=waitfix.vxd」の記載を追記して上書きする。
[386Enh]
device=mksvpd.386
ebios=*ebios
woadbcsfont=app932.fon
device=waitfix.vxd
device=vime.vxd
そうしたら、VHDをマウント解除しておく。
起動してみる
この状態で仮想マシンを起動すれば一応起動はするが、もともととはハードウェアが異なるので、もろもろドライバが当たっていない状態になる。

この状態でOKを押して、ハードウェアの追加を進めて行っても、少なくともディスプレイアダプタに関しては適切なものをインストールすることはできない。
新しいバージョンのWindowsであればVirtualBoxのGuest Additionsをインストールすることでドライバが当たるのだが、残念ながらWindows95向けのGuest Additionsは提供されておらず手動で適用する必要がある。
ディスプレイドライバの適用
これについてもネット上に転がっているドライバを適用することで解決できるようなので、利用させていただく。
VBEMP 9x Project – Universal VESA/VBE Video Display Driver (zcm.com.au)
→ Release version beta 2014.02.14 欄の 140214.zip へのリンクから入手する。
いったん仮想マシンはシャットダウンし、 WAITFIX.VXD をコピーしたときと同じ要領でホストマシンでVHDをマウント、適当なところに上記zipファイルを展開して保存しておく。VHDのマウント解除を忘れないこと。
再度仮想マシンを起動し、ハードウェアウィザードの開始を要求されたら「OK」で進めていく。
以下の画面では「いいえ」を選択し、手動でドライバを選択する。

ディスプレイアダプタを選択。

「ディスク使用」ボタンを押したら、先ほどVHDをマウントしてディスプレイドライバを格納したディレクトリ配下の「128mb」を選択して先に進む。

私はとりあえず以下を選択しておいた。

最終的にこんな画面になって、インストール完了したように見えるのでOS再起動。

だが、再起動してもやはりドライバのエラーになってしまう。

今度は次の画面で「はい」を選んで進んでみる。

何やらたくさん検出されるので、完了を押して再起動する。

その後も、何度か再起動を求められたり、以下のようなエラーが出たり怪しい挙動が続く。

ただ、最終的には以下のようにドライバが認識された状態になり、画面のプロパティからも画面解像度や色数を選択できるようになる。


残念ながら、私の環境では解像度は800×600止まりで、XGA解像度には設定できず。まぁ、遊びで使うならこの程度でも問題はない。また、何度か再起動する過程でオーディオ関連のドライバなども適用されたようで、音も出るようになった。
コメント