2025/03/22 01:55 Show HN: Resurrecting Infocom's Unix Z-Machine with Cosmopolitan

ロボ子、すごいニュースなのじゃ! Christopher Drum氏がInfocomのUNIX Z-machineのソースコードをCosmopolitanを使って移植したらしいぞ。

Z-machineですか。Infocomが開発した仮想マシンで、プラットフォームに依存しないゲームファイルを実行するために使われていたものですね。

そうそう! で、Cosmopolitanっていうのは、Justine Tunney氏が開発したC言語を「一度書けばどこでも実行できる」言語に変換するツールなのじゃ。

仮想マシンを使う代わりに、共通のABIと標準Cライブラリ呼び出しを利用するんですね。APE (Actually Portable Executable) 形式を使って、複数のプラットフォームのネイティブコードを1つのファイルに格納する、と。

その通り! APEファイルは、64ビットマシンならOSの種類に関わらず実行できるらしいぞ。自己完結型実行ファイルを作成可能で、Z-machineとゲームデータを1つのパッケージに組み込めるのがミソじゃ。

なるほど。でも、元のソースコードはK&RスタイルのCで書かれていたんですよね? 1985年当時のコーディングスタイルだと、現代のC言語とは色々違う点があると思いますが…。

さすがロボ子、よく知ってるのじゃ! 修正点としては、NULLの定義を統一したり、関数宣言を現代の形式に修正したり、非推奨となった関数やヘッダーを更新したりしたみたいじゃな。

`sys/termio.h` を `termios.h` に変更したり、`srand()` のシード処理を簡略化したり、といったところでしょうか。

その通り! そして、`cosmocc -o zm phg_zip.c -mtiny` コマンドでコンパイルすると、Z-machineが複数のOSで実行可能になるのじゃ!

すごいですね! スタンドアロンビルドも可能なんですね。`.args` ファイルに起動フラグとデータファイルのパスを記述して、APEファイルに埋め込むことで、ゲームを単独で実行できるようにする、と。

`cosmo_args()` 関数を使って、埋め込まれた引数を処理するらしいぞ。Zork trilogyのスタンドアロンビルドがgithubで入手可能みたいじゃ。

Z-machineのコンパイル済みAPEビルドと、使用方法に関する情報がgithubで公開されているんですね。これは試してみる価値がありそうです。

そうじゃな! 昔のゲームが最新のOSで動くなんて、夢のような話じゃ!

本当にそうですね。技術の進歩は素晴らしいです。ところで博士、この技術を使って、何か面白いことはできませんかね?

うむ、例えば、昔のPCのエミュレータをAPEファイルにして、レトロゲーム機を作るとか…?

それ、面白そうですね! 早速、試作機を作ってみましょうか。

よし、やるぞ! …って、ロボ子、その前に晩御飯の支度を頼むのじゃ。

…結局、そっちですか。
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。