Z-machine

**Z-machine** とは、Joel BerezとMarc Blankによって1979年に開発され、Infocom社のインタラクティブフィクションに使用された仮想マシンである。

## 概要
Infocom社では、"ストーリー ファイル" または "Z-codeファイル" と呼ばれるZ-machineの命令でゲームのプログラム コードを作成することにより、新しいプラットフォームへのインタラクティブフィクションの移植を容易にしていた。当時のほとんどの家庭用コンピュータは相互に互換性がなく、このZ-codeを使用した移植の容易さは、ネイティブなコードを書いたり、各システム専用のコンパイラを開発するよりも大きな利便性をもたらした。

Z-machineの "Z" はInfocom社が最初にリリースしたアドベンチャーゲームである「Zork」から取られている。Z-codeファイルは、通常そのファイル名に、z1、z2、z3、z4、z5、z6、z7、またはz8という接尾子を付け、そのファイルが対応するZ-machineのバージョン番号を表している。またストーリー ファイルの場合は、最初のバイトで指定される。Infocom社では、.datおよび.zip (Z-machine Interpreter Programの略) という拡張子を使用していたが、昨今では.zipが圧縮ファイルの拡張子として広く使われるようになり、拡張子の競合が起こる。

Infocom社は、6バージョンのZ-machineを開発した。バージョン1および2は、あまり利用されていない。Infocom社より、バージョン1のファイルが2つ、バージョン2のファイルが2つ、リリースされているのが知られているだけである。Infocom社がリリースしたゲームでは、主にバージョン3が使用されていた。それ以降のバージョンではより多くの機能が追加され、バージョン6ではグラフィックを一部サポートするまでになった。

ただし、使用される言語のドキュメント
Infocom社がストーリー ファイルを生成するために使用していた*Zilch* と呼ばれるコンパイラは、リリースはされていないが、ZIL (Zork Implementation Language) と呼ばれる言語の仕様書が現存する。1993年5月にはGraham Nelsonが、Z-machineのストーリー ファイルを生成するコンパイラ "Inform" の最初のバージョンをリリースした。ただし、Informに使用するソース言語はZILとまったく異なる。Informが生成するファイルは、バージョン5である。

Informはインタラクティブフィクションのコミュニティで評判になり、以後ほとんどのインタラクティブフィクションがZ-machineのストーリー ファイル形式で作成されるようになった。より大規模なゲームの作成とそのために必要な機能が求められるようになり、Graham NelsonがZ-machineのバージョン7および8の仕様を定めることになったが、バージョン7が使用されることはまれであった。これは、アドレスの処理方法により、ストーリー ファイルのサイズが、バージョン3では128K、バージョン5では256K、バージョン8では512Kという制限があったためである。現在の標準から比べると、これらの制限は小さく感じるが、テキストのみで構成されるアドベンチャー ゲームにとっては、たとえ複雑なゲームであっても十分なサイズである。

1990年代に、既存のInfocomファイルの入念な調査を基に、Graham NelsonがZ-machineの標準を策定した。

## インタプリタ
Z-codeファイルのインタプリタは、さまざまなプラットフォームで利用できる。Informのウェブサイトの一覧は、15のデスクトップOSで無償で利用可能なインタープリターへのリンクがある。これには、UnixやWindowsシリーズはもちろん、Apple II、TRS-80、およびSinclairといった1980年代の8ビットのコンピュータも含まれる。さらに、Palm OSやゲームボーイなど10のモバイルOS、Emacs、Java、およびJavaScriptの3つのインタープリター プラットフォームへのリンクもある。Graham Nelsonは、「おそらくこれは、かつて作成された中でも最も移植可能性の高い仮想マシンだろう」と語っている。

インタープリターとして、NitfolおよびFrotzがよく知られている。NitfolはGlk APIを使用し、グラフィックが利用できるバージョン6を含む、Z-machineのバージョン1から8までをサポートする。保存ファイルは、標準のQuetzal形式で保存される。現在では、Macintosh、Linux、MS-DOS、およびWindowsなど、いくつかのOSで互換性のあるバイナリファイルが利用できる。

### Frotz
もともと**Frotz** は、1995年にStefan JokischによってC言語でMS-DOS上で作成され、その後、Unix、RISC OS、およびMacintoshなどいくつかのプラットフォームに移植された。それぞれ程度の差はあるものの、効果音とグラフィックにも対応していた。2002年になると開発は滞り、プログラムはDavid Griffithに引き渡された。この後、任意のユーザー インターフェイスで仮想マシンが独立して実行できるように、コードの仮想マシン部分とユーザー インターフェイス部分が明確に分割された。これにより、Frotzは様々なプラットフォームに移植されることになる。ユニークかつシンプルな移植の一例として、インスタント メッセンジャーのボットとしてFrotzが組み込まれたことがある。入出力はある程度制限されるが、ユーザーは、インスタント メッセンジャーのクライアントを使用して、Z-machineのゲームを楽しめる。

## その他のユーティリティ
ZorkToolsは、オブジェクトや語彙の一覧表示など、通常のZ-codeのストーリー ファイルで実現できない機能を提供する、ユーティリティ群である。

## 関連項目
*Glulx - Z-machineに似ているが、従来からあるいくつかの制限がない。
*SCUMM (Script Creation Utility for Maniac Mansion) - ルーカスアーツ社が開発した、Z-machineに似たグラフィカルなシステム。

## 脚注


## 外部リンク
*Z-machineの標準文書
*Learning ZIL (PDF) - Infocom社によるZILのマニュアル。1989年。
*Description of ZIP (PDF) -　ZIP (Z-Language Interpreter Program) に関するInfocom社の内部文書。1989年3月23日。
*各プラットフォーム向けのインタプリタ
*vbccz - Z-machineを対象としたCコンパイラ。
*How to Fit a Large Program Into a Small Machine - Z-machineの設計と開発に関する説明。
*Frotzホームページ - Frotzコア、Unix、および疑似バージョンのホームページ。作者が知る限りのすべての移植版の一覧がある。
*CellarDoor - PalmOS用Z-machineインタープリター。
*XZip - X Window (Unix/Linux) 用のフリーのZ-machineインタープリター。