| デザイナー | インフォコム |
|---|---|
| ビット | 16 |
| 導入 | 1979年 |
| バージョン | 1.1 (2014) |
| デザイン | CISC |
| エンディアン | ビッグ |
| オープン | はい |
Zマシンは、1979年にジョエル・ベレスとマーク・ブランクによって開発され、インフォコムがテキストアドベンチャーゲームに使用した仮想マシンです。インフォコムはゲームコードをZマシン命令(ストーリーファイルまたはZコードファイルと呼ばれる)を含むファイルにコンパイルしたため、そのプラットフォーム用のZマシン実装を作成するだけで、テキストアドベンチャーを新しいプラットフォームに移植することができました。当時、互換性のない家庭用コンピュータシステムが多数存在していたため、これはネイティブコードを使用したり、各システム用のコンパイラを開発したりするよりも重要な利点でした。
Z-machineの「Z」は、インフォコム初のアドベンチャーゲームであるZorkを表しています。インフォコムは.dat(データ)と.zip(ZIP = Z-machine Interpreter Program)というファイル拡張子を使用していましたが、後者は、アクティビジョンがインフォコムを閉鎖した 1990年代以降、PKZIP互換のアーカイブファイルで広く使用されていた.zipと衝突しました
インフォコムはZマシンを6つのバージョンで製造しました。バージョン1と2を使用したファイルは非常に稀です。インフォコムからリリースされたバージョン1のファイルは2つ、バージョン2のファイルは2つしか知られていません。バージョン3はインフォコムがリリースしたゲームの大部分をカバーしています。後のバージョンでは機能が強化され、バージョン6ではグラフィックサポートが一部追加されました。
Zコードファイルの現在の慣例により、ファイル名は通常.z1、.z2、.z3、.z4、.z5、.z6、.z7、または.z8で終わります。ここで、数字は、ストーリーファイルの最初のバイトで示される、ファイルが実行されるZマシンのバージョン番号です。 [ 1 ]前述のように、Infocomのゲームでは、.z1から.z6に相当するものが使用されていました。.z7と.z8は、Infocomが閉鎖した後に提案され採用されました。
MDLプログラミング言語は、1970年代にマサチューセッツ工科大学のコンピュータサイエンス研究所(LCS)の動的モデリンググループによってLispから派生されました。そのグループのメンバーは、Colossal Cave Adventure(1977)に触発されて、MDLでZorkを書き、 2週間後に最初のバージョンを完成させました。[ 2 ] [ 3 ]: 5–6 Adventureと同様に、ZorkはDEC PDP-10用にプログラムされました。完成版は1 MBのMDLコードを占め、実行には512 KBのRAMが必要です。当時の家庭用コンピュータにはこれらのリソースがなかったため、ゲームの移植にはかなりの労力が必要でした。[ 3 ]: 11 最終的に、開発者はZorkをパーソナルコンピュータ用の2つのゲームに分割しました。[ 4 ]
約 80 KB のストレージ容量しかないフロッピー ディスクからZork を実行するために必要な圧縮は、 Blank にとって乗り越えられない障壁のように思えました。 Berez は、 UCSD Pascal が仮想マシン(VM) モデルを使用して、プラットフォーム間で簡単に移植できる実行可能ファイルを生成していることに気付き、Blank とともに、テキスト アドベンチャー ゲームに最適化された軽量 VM の要件を考案しました。この VM は、一般的なマイクロコンピュータの比較的小さい RAM サイズを補うために、必要に応じてストレージからデータを取得して命令を実行します。[ 3 ] : 11 結果として得られた Z マシンは、ゲーム内のアイテム、場所、キャラクター、武器にオブジェクト ツリー構造を使用しました。 [ 3 ] : 11 比較すると、Z マシン パーサーは 3 KBのストレージを占有しますが、元の PDP-10 パーサーは 10 Kwords ( 36 ビット) を占有します。[ 5 ]
Zマシンを補完するため、インフォコムはMDLを簡素化した高水準コンピュータ言語Zork実装言語(ZIL)[ 5 ]と、ZILを2段階のプロセスでZマシン命令にコンパイルするZ言語インタープリタプログラム(ZIP)を開発した。これにより、テキストアドベンチャー開発はプラットフォームに依存せず、適切なZマシンインタープリタを書くだけで異なるシステムに移植できるようになった。[ 3 ]:12–13 ZIPはコンパイラ(ZILCH、ZILコンパイラハックの略)とアセンブラ(ZAP、Zマシンアセンブラプログラム)で構成される。 [ 6 ]
ZILCHはリリースされていないが、ZILに関するドキュメントは依然として存在し、オープンソースの代替言語「ZILF」[ 7 ]も開発されている。 1989年にメディアジェニックがインフォコムをカリフォルニアに移転した後、Computer Gaming World誌は「ZILは機能的に死んでいる」と述べ、「全く新しいパーサーが登場するかもしれないが、実際には使われないかもしれない」という噂を報じた[ 8 ] 。
1993 年 5 月、Graham Nelson はInformコンパイラの最初のバージョンをリリースしました。Inform のソース言語は ZIL とはまったく異なりますが、このコンパイラも出力として Z-machine ストーリー ファイルを生成します。
Informはインタラクティブフィクションコミュニティで人気を博しています。インタラクティブフィクションの大部分はZマシンのストーリーファイル形式です。より大きなゲームファイルの作成機能に対する需要に応えて、NelsonはZマシンのバージョン7と8を指定しましたが、バージョン7はほとんど使用されていません。アドレスの処理方法により、バージョン3のストーリーファイルは最大128KB、バージョン5のストーリーファイルは最大256KB、バージョン8のストーリーファイルは最大512KBまで可能です。これらのサイズは今日のコンピュータの基準からすると小さいように思えるかもしれませんが、テキストのみのアドベンチャーゲームであれば、精巧なゲームには十分な大きさです。
1990年代、グラハム・ネルソンは既存のInfocomファイルの詳細な調査に基づき、Z-Machine標準を策定しました。この標準には、ネルソンが開発した新しいバージョンで使用されている拡張機能に加え、「Blorb」リソース形式と「Quetzal」セーブファイル形式へのリンクも含まれています。[ 9 ]ネルソンは2006年、 Inform 7向けにZ-Machineを32ビットGlulx形式に拡張しました。2016年に設立されたインタラクティブフィクションテクノロジー財団は、これらの標準をすべて管理しています。[ 10 ]
ZILはMITのMDLに基づいています。以下はZork Iの真鍮製ランタンのZILでの定義です。各行の意味を説明するコメントが追加されています。[ 11 ]
<OBJECT LANTERN # _LANTERNオブジェクトを定義します( LOC LIVING -ROOM ) # _オブジェクトの初期位置を定義します( SYNONYM LAMP LANTERN LIGHT ) # _LANTERNの代わりに使用できる同義語を定義します( ADJECTIVE BRASS ) # _このランタンを他のランタンと区別するためのオプションの形容詞( DESC "brass lantern" ) # _インベントリリストの短い説明( FLAGS TAKEBIT LIGHTBIT ) # _このオブジェクトは何ができるでしょうか? TAKENできます。LIGHT を提供します。( ACTION LANTERN-F ) # _このオブジェクトに対する特別なアクションを定義するサブルーチン( FDESC "電池式ランタンがトロフィーケースにあります。" ) # _最初の遭遇時の説明( LDESC "ここには真鍮製のランタン(電池式)があります。" ) # _他の場所での後の記述( SIZE 15 ) > # _インベントリ容量を制限するために重量を定義しますMDL での同等のオブジェクトは次のように定義されます。
<OBJECT [ "LAMP" "LANTE" "LIGHT" ] [ "BRASS" ] "lamp" <+ , OVISON , TAKEBIT , LIGHTBIT> LANTERN () ( ODESC0 "トロフィーケースの上に電池式の真鍮製ランタンがあります。" ODESC1 "ここには電池式の真鍮製ランタンがあります。" OSIZE 15 OLINT [0 >] ) >戦闘を伴うより複雑な例と、それに相当するMDL Zorkは、Andrew Plotkinによる2019年のブログ記事で紹介されています。注目すべきは、Zマシンはガベージコレクションをサポートしておらず、ZILはLispのリストシステムの概念を持っていないことです。[ 12 ]

Zコードファイルのインタープリタは、様々なプラットフォームで利用可能です。Infocomは、インタープリタを作成するだけで済むため、ゲームを新しいコンピュータに迅速に移植することができました。[ 13 ] Informのウェブサイトには、15種類のデスクトップオペレーティングシステム( Apple II、TRS-80、ZX Spectrumなどの1980年代の8ビットマイクロコンピュータを含み、「Unix」と「Windows」をそれぞれ1つとしてグループ化)、10種類のモバイルオペレーティングシステム(Palm OSとGame Boyを含む)、および4つのインタープリタプラットフォーム(Emacs、Java、JavaScript、Scratch)用の無料で入手可能なインタープリタへのリンクが掲載されています。Nelson氏によると、これは「おそらくこれまでに作成された中で最も移植性の高い仮想マシン」です。[ 14 ]
人気のあるインタープリタには、NitfolとFrotzがあります。NitfolはGlk APIを利用し、Zマシンのバージョン1から8(グラフィカルZマシンのバージョン6を含む)をサポートしています。保存ファイルは標準のQuetzal形式で保存されます。バイナリファイルは、従来のMac OS、Unix系システム、Windowsなど、複数のオペレーティングシステムで利用可能です。[ 15 ]
Frotzは1995年にStefan JokischによってDOS用にC言語で書かれました。その後、Unix系システム[ 16 ] やRISC OS [ 17 ]、iOS [ 18 ]などの他のプラットフォームにも移植されました。サウンドエフェクトとグラフィックは様々なレベルでサポートされていました。2002年までに開発は行き詰まり、David Griffithがこのプログラムを引き継ぎました。コードベースは仮想マシンとユーザーインターフェース部分に分割され、仮想マシンはどのユーザーインターフェースからも独立しました。これにより、Frotzの移植に多様性が生まれました。奇妙な移植の一つは、最も単純なものでもあります。インスタントメッセージボットを最小限のI/O機能を持つFrotzのバージョンにラップし、インスタントメッセージクライアントを使用してほとんどのZマシンゲームをプレイできるボットを作成しました。[ 19 ]
macOSやその他のUnix系システムで人気のクライアントとしてはZoomがあります。 [ 20 ]同じQuetzal保存形式をサポートしていますが、ファイル構造のパッケージ化が異なります。