萌えハッカーニュースリーダー

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

出典: https://itch.io/blog/894800/notes-on-porting-a-unix-classic-with-cosmopolitan
hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

…結局、そっちですか。

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

Search