現代のコンピュータには「テキストアドベンチャー」をプレイするための洗練された方法が数多くありますが、愛好家はLinux上でCP/Mエミュレータを介してZork 1を実行し、MS-DOSのインスピレーションとなったオリジナルのオペレーティングシステム環境を体験することができます。このプロセスには、z80packのような専用のエミュレーションツールを使用して、現代のハードウェアとZ80マイクロプロセッサアーキテクチャの間のギャップを埋める必要があります。

記事では、CP/MがZ80アーキテクチャを使用したマイクロコンピュータ向けに設計された方法を説明しています。
CP/Mエミュレーションのアーキテクチャ
Linux上でCP/Mを実行するための最も一般的なアプローチは、z80packのようなZ80エミュレータを使用することです。CP/Mはメモリや特定のハードウェアインターフェースが限られたマイクロコンピュータ向けに設計されていたため、エミュレータはOSが起動しバイナリを実行できる環境を再現する必要があります。
セットアップには、コアエミュレータとサポートツールのソースからのビルドが含まれます。機能した後は、システムを初期化してコマンドプロンプトを提供するCP/M 3イメージなどの必要なブートファイルを提供するためのディスクイメージライブラリが必要です。
「CP/Mエミュレータを使用してZorkをプレイする実用的な理由は全くありません。」
— Kevin Boone: Playing Zork 1 on a CP/M emulator on Linux
仮想ディスクとユーザーエリアの管理
現代のオペレーティングシステムとは異なり、CP/Mディスクはサブディレクトリをサポートしていません。その代わりに、番号付きの「ユーザーエリア」を使用してファイルを整理します。Zork 1を実行するには、バイナリ(ZORK1.COM)とそのデータファイル(ZORK1.DAT)を仮想ディスクイメージのデフォルトのユーザーエリア(エリアゼロ)にコピーする必要があります。
ユーザーは、ドライブI:用の4Mbハードディスクイメージなど、さまざまな種類の仮想ドライブを作成できます。cpmtoolsのようなツールを使用してこれらのイメージを管理し、コンテンツをリスト表示したり、ホストシステムとエミュレートされた環境の間でファイルをコピーしたりすることができます。
HN Digestによる図表(kevinboone.meの報告数値を引用)。数値はソースの表記通り。
ターミナル互換性と入力処理
特定の技術的なハードルとして「バックスペース」キーがあります。現代のLinuxターミナルは通常DELコード(ASCII 127)を生成しますが、Zork 1は文字を消去するために伝統的な「ctrl-h」(ASCII 8)コードを必要とします。これには、ターミナルエミュレータを構成してバックスペースキーを正しくマッピングする必要があります。
ターミナルが構成され、シェルに`stty erase`コマンドで更新されると、ユーザーはゲームを実行できます。その結果、ゲームのテキスト出力がホストのターミナルに直接渡され、ヴィンテージのマイクロコンピュータの体験を模倣する機能的な環境が構築されます。

このスクリーンショットは、ゲームのテキスト出力がホストターミナルに渡される機能的な環境を例示しています。
トレードオフと現代的な代替手段
この方法の主なトレードオフは複雑さです。現代的な手法は大幅に簡単であるため、特にZorkのためにCP/Mエミュレータを使用する実用的な理由はありません。エミュレータは主に教育目的、またはレトロコンピューティングアーキテクチャへの深い習熟のために使用されます。
cpmulatorのような新しいプロジェクトは、ローカルファイルシステムとやり取りするGoベースのエミュレータを使用することで、より合理的な体験を提供します。これにより複雑な仮想ディスク管理の必要性はなくなりますが、物理的なトラックやセクタを参照するAPI呼び出しに対する完全なディスクサポートを欠く可能性があります。
Hacker Newsの読者の反応
- 代替案: あるコメント投稿者は、LinuxおよびBSDシステムでこれらの種類のゲームをプレイする方法としてFrotzエミュレータを使用することを提案しました。 コメント ↗
- 代替案: 別のユーザーは、仮想ディスクの代わりにローカルファイルシステムを使用する、自身で開発したGoベースのCP/Mエミュレータを共有し、Dockerを介してソフトウェアを実行する方法を提示しました。 コメント ↗
- 体験談: ある読者は、学部生として勉強していた際にDECSYSTEM-2060でZorkをプレイした個人的な経験を共有しました。 コメント ↗
Hacker Newsのスレッドで出た意見の要約です。事実として検証されたものではありません。 議論の全文を読む ↗