Windows11で昔のPCゲームを遊ぼう(Hyper-V編)

　どうも、毎年草野マサムネ(σ_σ)さんと関口和之(￣灬￣)さんの誕生日祝いで技術ブログを書いている龍石茜(りゅうせきあかね)と申します。予約投稿が上手くいっていれば或いは執筆が間に合えばお二人の誕生日である12/21にはこの記事が公開されている筈。お二人ともお誕生日おめでとうございます。

　筆者は2019年5月3日から1990年代に発売されたWindows/Macintosh向けCD-ROMソフト(別名マルチメディアソフト、インタラクティブソフト)形式PCゲーム(以後便宜的に「プチレトロゲー」と呼称)の中で特にまともなプレイ動画が存在しないものを中心に現代の環境で実行しプレイ動画をアップするアーカイブ企画「**平成考古学**」を立ち上げスローペースに活動しています。
　平成考古学立ち上げのきっかけは、初めてのQiita記事で記しました。

 https://qiita.com/kan8lovers/items/d1ca447db5a94ad99646

　本記事は上記記事のWindows 11版になります。
　また、本記事のMacintosh編をアドカレ2024のWindowsカテゴリにアップしています(予約投稿が上手くいっていれば、本記事と同日に公開されている筈)。

# Windows 11で1990年代のプチレトロゲーを遊ぶ為に構築した環境
:::note info
　本記事では「Hyper-V機能の有効化」や「仮想マシンの新規作成方法」等の手順は省略しました。Qiita内にも読みやすい記事がありますので、そちらをご覧ください。
:::

ホストOS:Windows 11 Pro(64bit)
仮想化技術:クライアントHyper-V
ゲストOS(以下「仮想マシン」と表記):Windows 10 Pro(32bit)
　※Microsoftの公式DLページからISOイメージをDLの上、DVD-Rに焼きOSインストール
メモリ:RAM 8192MB/動的メモリ有効(最小512MB、最大1048756MB、メモリバッファー20%、メモリの重み:真ん中より一段階高め)
仮想プロセッサ:3個
DVDドライブ:Hyper-V起動前にソフトのディスクを投入した上で、Hyper-Vマネージャー>設定タブ>ハードウェア>DVDドライブのメディア欄で「物理CD/DVDドライブ」にチェックを入れる
もしくは、ホストOSに指定のISOファイルを保存後Hyper-Vマネージャー>設定タブ>ハードウェア>DVDドライブのメディア欄で「イメージファイル」にチェックを入れ、「参照」ボタンをクリックして指定のISOファイルを選択して「開く」をクリック
ネットワークアダプター:Default Switch(セキュリティが気になる人はInternal Switchを指定し、固定IPアドレスを振ってあげること)

#### Windows 10 32bit環境の動作確認結果
<dl>
    <dt>問題なく動作</dt>
    <dd>眠れぬ夜の小さなお話</dd>
    <dd>Damn!moonriders</dd>
    <dd>ぼのいぢり</dd>
    <dd>YMO SELFSERVICE(LAYER1)</dd>
    <dt>起動はするが不安定or進行不可</dt>
    <dd>ペンギンピアノ</dd>
    <dd>YMO SELFSERVICE(LAYER2)</dd>
    <dd>ALeX-WORLD(Windows 7 32bit仮想マシンではほぼ正常動作)</dd>
    <dt></dt>
</dl>

　ソフトによってはHybrid CD-RMにもかかわらず片方のOSでしか動作しないケース、ムービーは見られてもクリック可能になってからクリックしても何も起きない=ゲームが進行しないといったケースも見受けられました。
　Windows/Macintosh共に現代技術でのエミュレーションも完璧ではない様です。
　2024年時点でほぼ全バージョンのOld Macが揃っているInfinite Mac(kanjitalk7.appはその中のひとつ)に対抗して、Hyper-VにWindowsOS全バージョンとはゆかずとも複数OSの仮想マシンを揃えておくのが理想かも知れません。

# 音を出しながらゲームをするのに必要な準備
　2021年に書いた記事では仮想マシンのOSがWindows 7を前提とした内容の為、リモートデスクトップを経由したやり方を紹介していました。これは何故かというと、Windows 7は拡張セッションモード未対応だったからです。[^1]
　**拡張セッションモード**とは、リモートデスクトップのアプリケーションをわざわざ使用せずともHyper-Vの仮想マシンウインドウでリモートデスクトップ接続と同じ状態に出来る……本記事的には音が出せる様になるモードです(仮想マシンのOSがWindowsの時のみ)。
　仮想マシンのOSがWindows 10の場合は、既定で拡張セッションモードが有効になります。
　本記事は仮想マシンに「拡張セッションモードに対応するOS」をインストール済みの前提で手順を記載致します。

### モード確認
　Hyper-Vで任意の仮想マシンを起動し、仮想マシンウインドウを開きます。
　その際メニューバー右側にあるアイコンを確認し、現在のモードを確認します。
　下記画像の、赤丸で囲った部分のアイコンが灰色の場合は「基本モード(拡張セッションモード使用不可能)」である事を表しています。仮想マシン側の音を出すには、リモートデスクトップから接続する為の設定が必要です。
　赤丸で囲った部分のアイコンがフルカラーなら、「拡張セッションモード」です。このアイコンをクリックすると、基本モードに切り替わります。
　赤丸で囲った部分のアイコンがフルカラーかつ右上に「+」マークが付いている場合、「基本モード(拡張セッションモード使用可能)」です。このアイコンをクリックすると、拡張セッションモードに切り替わります。
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183862/efad3e9f-d563-dcab-327b-83a979ad2657.png "基本モードのみ使用可")　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183862/cedbe2df-e2e2-c61f-f131-158b44e75d64.png "拡張セッションモード(基本モードへ切り替え可能)")　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183862/c190da0a-1227-4cc3-43aa-a4ea44046bbf.png "基本モード(拡張セッションモードへ切り替え可能)")

　仮想マシンのOSがWindows10なのにアイコンが灰色になっているという方は、リモートデスクトップが有効になっていない可能性があります。次の項目で確認していきます。

### リモートデスクトップ有効化
1. 仮想マシン内スタートメニューから「システム」>「リモートデスクトップ」を選択
1. 「リモートデスクトップを有効にする」が「オフ」になっている場合、「オン」へ変更
既に「オン」の場合は次へ
1. 「リモートデスクトップを有効にしますか？」というポップアップが表示されたら、「確認」を選択
1. 「リモートデスクトップを有効にする」が「オン」になっている事を確認

#### Windows 10/11のバージョン2004以降の場合、以降の設定を実施
1. 仮想マシンを一旦ログアウトし、拡張セッションモードから基本モードに切り替えた上で再ログイン
1. スタートメニューから「サインイン オプション」を選択
1. [Require Windows Hello sign-in for Microsoft accounts](Microsoft アカウントに Windows Hello サインインを要求する)という項目がある場合には、オフにする
 ※職場用或いは学生用アカウントでサインインしている場合は項目が表示されない
1. 仮想マシンを一度シャットダウンし、Hyper-Vウインドウのメニューバーから「切断」を選択
1. Hyper-Vマネージャーのメニューバーから「接続」を選択し、仮想マシンのウインドウが表示されたら画面内の「起動」をクリック
1. 「画面の設定」ポップアップが表示されたら、「オプションの表示」を選択
1. ポップアップのタブ「ローカルリソース」を選択
1. 「リモートオーディオ」の「設定」を選択
1. 「リモートオーディオ再生」の項目で、「このコンピューターで再生する」を選択
1. 「OK」→「接続」の順に選択
1. 仮想マシンのサインイン画面が表示されるので、通常どおりサインイン

　以上の設定が済めば、リモートデスクトップを別途起動せずともプチレトロゲーを仮想マシン上で遊んだ時にちゃんと音が出る……筈です。
 
# 64bit仮想マシンを使えない理由
　2021年に記事を書いた時点ではプチレトロゲーの実行が出来ない理由を「bit数が高すぎると古いソフトの動作が出来なくなる」位のふわっとした理解しかしていませんでした。
　本記事執筆にあたり改めて調べたところ、歴代WindowsOSやWindows API、CPUとはそもそも何かといった低レイヤ技術の不明点が次々襲いかかってくる為頭がパンクしそうでした。とは言え少しでも正しく理解していなければインフラエンジニアの名折れ。今更かよ、と突っ込まれたら「そのとおりでございます」と申し上げるしかありません。
　ひとまず2024/12/21時点では「筆者はこう理解した」という形でまとめます。
 
:::note warn
筆者は中一の数学で躓く程の超文系偏重人間の為、誤った理解をしている可能性があります。明らかな間違いは記事へのコメントや筆者のSNSへご指摘願います。
:::
<br>

### 「bit数が高すぎると古いソフトの動作が出来なくなる」を再定義
　まず、2021年時点でのふわっと理解文を噛み砕いてみる事にします。
　上記文章での「bit数」は「**CPUが一度に処理出来る情報量**」を指しています。マザーボードに取り付けられている四角いチップを思い浮かべて頂きまして、そのチップの持つ汎用レジスタ(CPUの記憶装置)の幅をbit単位で数えている様です(参考：[この辺り](https://wa3.i-3-i.info/word18106.html)の[ページ](https://ja.wikipedia.org/wiki/CPU))。
　「古いソフト」は「**16bitCPU或いはOSでの動作に対応するアプリケーション**」の事ですが、ここは本記事の趣旨に沿って「Windows 3.1対応ソフト」位の意味に超訳します。今回調べ直した際に初めて知りましたが、Windowsの歴史においてはWindows 95から32bitOSだったのですね。1990年代に発売されたPCゲームのパッケージに「Windows 3.1/95対応」と記載されているものを時たま見かけますが、これは「16bit/32bit両方のOSに対応している」事を示すという事になります。

　以上を踏まえると「動作させたいソフトの対応する処理能力に対し、OS側の処理能力が高すぎると却ってソフトが動かなくなる」という解釈になります。
　では何故その様な事態が発生してしまうか、Microsoft公式の回答は……

https://learn.microsoft.com/ja-jp/troubleshoot/windows-client/application-management/x64-windows-not-support-16-bit-programs?source=recommendations

> x64 ベースのバージョンの Windows では、16 ビット プログラム、16 ビット プロセス、または 16 ビット コンポーネントはサポートされていません。

　これはそのまま、「**64bitOSのWindowsでは、Windows 3.1対応のソフトが動作しない**」と読み取れます。では32bitOSのWindowsは、どうやって16bitプログラム・プロセス・コンポーネントをサポートしていたのでしょう。Microsft公式にもうひとつ手がかりがありました。
 
https://learn.microsoft.com/ja-jp/windows/compatibility/ntvdm-and-16-bit-app-support?source=recommendations

> NTVDM または NT Virtual DOS Machine は、1993 年に導入されたシステム コンポーネントであり、Windows NT ファミリのすべての IA-32 エディション (64 ビット バージョンの OS には含まれていません) に対して導入されました。 このコンポーネントを使用すると、32 ビット Windows オペレーティング システムで 16 ビット Windows アプリケーションを実行できるほか、16 ビットと 32 ビットの両方の DOS アプリケーションを実行できます。

　新単語が登場しましたので、先に「Virtual DOS Machine」から確認です。
　「仮想DOSマシン」は本記事で散々取り扱ったHyper-V上の仮想マシンとは**別物**であり、「Windows上で16bitアプリケーションを実行する為の[環境](https://ja.wikipedia.org/wiki/%E4%BB%AE%E6%83%B3DOS%E3%83%9E%E3%82%B7%E3%83%B3)或いは[機能](https://www.weblio.jp/content/VDM)」を指します。[^2]
　[こちらの記事](https://xtech.nikkei.com/it/article/COLUMN/20051118/224885/)によると、NTVDM(NT VIrtual DOS Machine)は「既存の16ビット・アプリケーションを32ビットWindowsで動作させるための仮想DOSマシン」との事。わざわざ冒頭にNTと付くのは、Windows NT系OS[^3]に入っているアプリケーション(ntvdm.exe)の為。

　単語の意味が分かった所で、互換性クックブックから再度該当箇所を引用します。
 
> NTVDM または NT Virtual DOS Machine は、1993 年に導入されたシステム コンポーネントであり、Windows NT ファミリのすべての IA-32 エディション (64 ビット バージョンの OS には含まれていません) に対して導入されました。

　つまりこの文章は、「Windows 3.1対応ソフトの実行環境を作れるアプリケーション(NT Virtual DOS Machine/ntvdm.exe)が32bitのWindowsOSに入っていて後方互換で動作可能になっているが、64bitのWindowsOSにはそれが入っていない」という事になります。64bitのWindowsでは後方互換が切られてしまった訳ですね。
　「**64bitOSのWindowsでは、Windows 3.1対応のソフトが動作しない**」の真の意味は「**64bitOSのWindowsでは、Windows 3.1対応ソフト動作環境を用意するアプリケーションが導入されなくなった事により後方互換が切られた為、Windows3.1で動く位古いソフトは動作しない**」という事でした。少しは正しく理解出来たかと存じます。

 <br>

　書かれている事の意味が分かったところで、このポップアップ画面を見かけると憎しみの感情がふつふつ沸き立ってくるのは変わりませんがね！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183862/2c498490-f219-6692-ea68-4837ed234a43.png)

# 平成パソコン文化の消滅危機を救え！
　懸命なQiita読者の中には、前章の途中である事に気付いた方もいらっしゃるでしょう。
　64bitOSのWindowsがWindows 3.1対応アプリケーション互換を切ったという事は、即ち「**Windows 10のサポート期間終了が実質的なWindows 3.1時代のプチレトロゲープレイ環境の終焉**」を意味する事に。[^4]
　プチレトロゲーが64bit仮想マシンで動かない理由をふわっとした理解しかしていなかった頃でさえ、プレイ動画のひとつも上がらないマイナープチレトロゲーにとってはプレイ環境の喪失に伴う文化的共倒れの危機と隣り合わせにある事はすぐに認識出来ました。
　その危機感から興した「平成のパソコン文化保護活動」としての「平成考古学」については(多分)同日アップの「[Windows11で昔のPCゲームを遊ぼう(Macintosh編)](https://qiita.com/kan8lovers/private/c51235c0352abd0067e8)」という記事で宣伝させて頂いておりますが、実は似た様な活動をされている方が既にいらっしゃるので勝手に紹介致します。

### 21世紀のインタラクティブ伝道師・小光/Komitsu様
　1993年生まれで芸術系大学・大学院のご出身。現在は多摩美術大学美術学部の情報デザイン学科 メディア芸術コースで非常勤講師をされている傍ら、アニメ・ゲーム系のイベントに出展されている様です。そして筆者が呼ぶところのプチレトロゲー≒1990年代のCD-ROMを遊ぶイベント「**小光とあそばnight!**」を2019年から不定期開催中。
　筆者が「平成考古学」と称してプチレトロゲープレイ環境構築の試行錯誤を始めた年にはもうPowerBookG4やMacBookPro実機を用いたイベントを主催されていました。
　更に新作インタラクティブアニメーションまで制作してのけたとの事([Steam](https://store.steampowered.com/app/2932550/Five_Years_Old_Memories/)やiPad向けに配信中)。完全に平成考古学の**上位互換**です。本当にありがとうございました。
　いつか彼女の主催イベントに参加して1990年代CD-ROM(マルチメディア・インタラクティブ・エデュテイメント)関連の情報交換や、お互いの活動について語り合える機会があったら嬉しいです。

https://komi2.tumblr.com/

# で、お前はこの一年何をしたの？
　参加カレンダーの趣旨からずっと外れた事ばかり書いてしまった為、最後にこの一年の実績を振り返って本記事を締めたいと存じます。

### 2024年やった事
<dl>
<dt>仕事</dt>
<dt>2023/10～2024/09：RHEL/Solaris混在環境→RHELオンリー環境へサーバ移行</dt>
    <dd>案件詳細を言及するのは控えますが、Apache/PHP/Pukiwiki/tftpを初めて経験しました。</dd>
    <dd>移行残台数があと僅かのタイミングでチームリーダーが二案件掛け持ちになった為筆者が主担当としてレビューイを任される事もありましたが、チームレビュー段階で大惨敗して結局従来どおりチームリーダーがレビューイという形に戻してもらったという失敗がありました。あの時は本当に申し訳なかったので、物事の理解力をより深めたい……</dd>
<dt>2024/10～11：社内向けHyper-Vマニュアル作成&グループミーティングでの発表</dt>
    <dd>次の現場が決まるまでの待機期間を利用し、2022年に途中まで作りかけたHyper-Vマニュアルの初版完成。</dd>
    <dd>更に先月末、一桁人数グループ向けとは言え社内で上記マニュアルを基にした発表を行いました。</dd>
    <dd>自社の社員に初めて平成考古学の活動を公表。本記事や同日公開の記事で紹介したkanjitalk7.appにも言及したところ、一部社員が話題に食いついてくれました。今後は社内懇親会などの機会で所属部署以外の方にも平成考古学を周知し、社内サークル設立基準を満たせるレベルまで賛同者を集めていきたいところです。</dd>
<dt>2024/12：目標達成に向けた訓練としてQiitaアドカレ記事執筆</dt>
    <dd>筆者は上長と相談して今年度の目標を「<b>誰が読んでも意味を間違えない文章を書ける様にする事</b>」としています。</dd>
    <dd>待機期間続行中の為、目標達成の為の指標として「グループミーティング発表内容を一般向けにWEB記事として公開」すべく「仕事」としてQiita Advent Calendar 2024の記事執筆を進めていました。</dd>
    <dd>各現場や案件で頑張っている皆様からすると「遊んでいる」と思われるかも知れませんが、記事の正確性担保の為Hyper-V検証やり直しや低レイヤ技術の調査と「誰が読んでも意味を間違えない文章」を目指した執筆の両立は正直大変でした。</dd>
    <dd>読んだ人が少しでも「分かりやすい！」と感じて頂けますように。</dd>
</dl>

# 最後に
　「推し🤠が昔作ったPCゲームを遊びたい♡」という邪念で2019年から始めた「平成考古学」。社内向け発表や社内外向け成果物作成が、この五年間の集大成になりました。
　漸くスタート地点に立てた気がします。来年以降も深掘り頑張ります。

　最後までご覧くださり、本当にありがとうございました。
　皆さん、メリークリスマス！そしてよいお年をお迎えください。

# 参考サイト
+++++Hyper=V仮想マシン構築時の参考+++++
Microsoft Docs
「Windows 10 上に Hyper-V をインストールする」https://docs.microsoft.com/ja-jp/virtualization/hyper-v-on-windows/quick-start/enable-hyper-v
「DISM の概要」https://learn.microsoft.com/ja-jp/windows-hardware/manufacture/desktop/what-is-dism?view=windows-11
「仮想マシンのエクスポートとインポート」https://docs.microsoft.com/ja-jp/windows-server/virtualization/hyper-v/deploy/export-and-import-virtual-machines
「Hyper-Vマネージャーを使用して仮想スイッチを作成する」https://learn.microsoft.com/ja-jp/windows-server/virtualization/hyper-v/get-started/create-a-virtual-switch-for-hyper-v-virtual-machines?tabs=hyper-v-manager
「Windows での Hyper-V の概要」https://learn.microsoft.com/ja-jp/virtualization/hyper-v-on-windows/about/

　
IT用語辞典e-words
「Intel VT-x」https://e-words.jp/w/Intel_VT.html 
　
TechLog
【Hyper-V】仮想マシンの３つのインポート方法の違い（一意なIDについて）」https://bizlog.tech/hyperv-import-vmid/
　
Yanor.net/Wiki
「仮想マシンのインポート（エクスポートなし・VM構成ファイルから直接）」https://yanor.net/wiki/?Windows+Server/Hyper-V/%E4%BB%AE%E6%83%B3%E3%83%9E%E3%82%B7%E3%83%B3%E3%81%AE%E3%82%A4%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%88%EF%BC%88%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%9D%E3%83%BC%E3%83%88%E3%81%AA%E3%81%97%E3%83%BBVM%E6%A7%8B%E6%88%90%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%8B%E3%82%89%E7%9B%B4%E6%8E%A5%EF%BC%89

朝から昼寝
「Hyper-VのDefault Switchの正体を調べる」https://happynap.net/2022-09-28-154544/

Qiita
「Ｈyper-Ｖ内部ネットワーク設定(固定IP)」https://qiita.com/naozo-se/items/d704ba94110fd3ca3efa 2024/10/23閲覧
「Windows10のHyper-Vで立てた仮想マシン(WindowsXP)からインターネットに繋げたくないけどホストから仮想マシンにリモートデスクトップ接続したい」https://qiita.com/pasta04/items/d5b14b03175553b787c4

+++++ふわっとした理解を正しい理解にする為の参考+++++
Microsoft Learn
「64 ビット バージョンの Windows では、16 ビット コンポーネント、16 ビット プロセス、または 16 ビット アプリケーションはサポートされていません」https://learn.microsoft.com/ja-jp/troubleshoot/windows-client/application-management/x64-windows-not-support-16-bit-programs?source=recommendations
「NTVDM と 16 ビット アプリのサポート」https://learn.microsoft.com/ja-jp/windows/compatibility/ntvdm-and-16-bit-app-support?source=recommendations

Wikipedia
「仮想DOSマシン」https://ja.wikipedia.org/wiki/%E4%BB%AE%E6%83%B3DOS%E3%83%9E%E3%82%B7%E3%83%B3
「仮想86モード」https://ja.wikipedia.org/wiki/%E4%BB%AE%E6%83%B386%E3%83%A2%E3%83%BC%E3%83%89
「MS-DOS」https://ja.wikipedia.org/wiki/MS-DOS
「Microsoft Windows 3.x」https://ja.wikipedia.org/wiki/Microsoft_Windows_3.x
「Windows 9x系」https://ja.wikipedia.org/wiki/Windows_9x%E7%B3%BB
「Microsoft Windows 95」https://ja.wikipedia.org/wiki/Microsoft_Windows_95
「Windows NT系」https://ja.wikipedia.org/wiki/Windows_NT%E7%B3%BB
「x64」https://ja.wikipedia.org/wiki/X64
「Windows API」https://ja.wikipedia.org/wiki/Windows_API
「WOW64」https://ja.wikipedia.org/wiki/WOW64
「CPU」https://ja.wikipedia.org/wiki/CPU
「プロセッサ」https://ja.wikipedia.org/wiki/%E3%83%97%E3%83%AD%E3%82%BB%E3%83%83%E3%82%B5

IT用語辞典バイナリ
「仮想DOSマシン」https://www.weblio.jp/content/VDM

日経クロステック
「x64で本格化する64ビットWindowsの時代(2)」https://xtech.nikkei.com/it/article/COLUMN/20051118/224885/
「64ビット版Vista最大の欠点」https://xtech.nikkei.com/it/article/OPINION/20080725/311538/

ASCII.jp
「Windows 10までほとんど手が入れられてこなかったWindowsのコンソール機能」https://ascii.jp/elem/000/001/718/1718052/
「インテルの新命令セットでついに16bitモードが廃止に」https://ascii.jp/elem/000/004/148/4148667/

その他新旧様々な個人サイトやブログ記事等を参考にしました。ありがとうございました。


[^1]: 拡張セッションモードに対応するゲストOSはクライアントが「Windows 8.1」、サーバーが「Windows Server 2012 R2」以降。ソースは→https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-R2-and-2012/dn282278(v=ws.11)
[^2]: 「仮想DOSマシン」についてWikipediaでは「環境」、weblio(IT用語辞典バイナリ)では「機能」と定義が別れており、Microsoft公式の「コンポーネント」表記に従えば「機能」が近い意味合いになります。しかし両者の記事におけるNTVDMの説明から「仮想DOSマシン機能により実行環境を作り、その中で16bitアプリケーションを実行する」と読み取れる為、Wikipediaで定義した様に「環境」の意味で捉える事も可能と判断し両サイトの定義を尊重しました。
[^3]: Windows 3.1のOS系統(DOS系)とは完全に別ラインで開発されたOS系統であり、1993年に「Windows NT 3.1」が初登場。以後紆余曲折を経てWindowsOSの主流系統になり、現在のWindows 11に至ります。
[^4]: Windows 10までと違い、Windows 11はシステム要件として64bitCPUを求められる為。