The Z-machine is a virtual machine that was developed by Joel Berez and Marc Blank in 1979 and used by Infocom for its text adventure games. Infocom compiled game code to files containing Z-machine instructions (called story files, or Z-code files), and could therefore port all its text adventures to a new platform simply by writing a Z-machine implementation for that platform. With the large number of incompatible home computer systems in use at the time, this was an important advantage over using native code.
The compiler (called Zilch) which Infocom used to produce its story files has never been released, although documentation of the language used (called ZIL, for Zork Implementation Language) is still in existence.
The "Z" of Z-machine stands for Zork, Infocom's first adventure game. Z-code files usually have names ending in .z1, .z2, .z3, .z4, .z5, .z6, .z7 or .z8 (and occasionally .dat), where the number is the version number of the Z-machine on which the file is intended to be run, as given by the first byte of the story file.
Infocom produced six versions of the Z-machine. Files using versions 1 and 2 are very rare. Only two version 1 files are known to have been released by Infocom, and only two of version 2. The later versions had more capabilities, culminating in some graphic support in version 6.
In May 1993, Graham Nelson released the first version of his Inform compiler, which also generates Z-machine story files as its output, even though the Inform source language is quite different from ZIL.
Inform has since become very popular in the interactive fiction community and, as a consequence, a large proportion of the interactive fiction now produced is in the form of Z-machine story files. Demand for the ability to create larger game files led Graham Nelson to specify versions 7 and 8 of the Z-machine, though version 7 is very rarely used. Because of the way addresses are handled, a version 3 story file can be up to 128K in length, a version 5 story can be up to 256K in length, and a version 8 story can be up to 512k in length. Though these sizes may seem small by today's computing standards, for text-only adventures, these are large enough for very elaborate games made with Inform 6. Inform 7, however, has larger demands: only very small games written in pre-6G60 versions of I7 will fit in a .z5, and moderately large games may exceed the capacities of .z8, especially those compiled in recent versions of I7 or utilizing images or sounds. This has contributed to a more widespread adoption of Glulx, which has much greater capacity.
Assorted Z-machine interpreters
Interpreters for Z-code files are available on a wide variety of platforms. In fact, since interpreters are available for a wide range of platforms - for example, on various old machines (such as the Apple II, TRS-80 and Sinclair), portable machines (such as Palm OS devices and the Nintendo Game Boy) and most modern platforms - it can be claimed that Z-code is one of the most portable computer languages ever invented.
The following is a list of various Z-Machine interpreters, but not all of these should be recommended for use now. For recommendations, see the FAQ.
- Aimfiz (SDL, cross-platform)
- Bocfel (various)
- Flashonate (Flash)
- Flaxo (Flash)
- Frobnitz (PalmOS)
- Frotz (various)
- GLUZMA (Glulx)
- Infuse (Unix)
- Jzip (UNIX/DOS)
- Leaflet (Flash, proprietary)
- M4ZVM (Trs-80)
- MaxZip (OS9)
- Nitfol (various)
- Ozmoo (Commodore 64)
- Parchment (HTML, includes Gnusto)
- Rezrov (Perl)
- XZip (*nix/X-Windows)
- Zax (Java/application only)
- Zip (various)
- ZLR (.NET)
- ZMPP (Java/application or applet)
- ZORKMID (Unix, with debugging)
- Zplet (Java/application or applet)
- ZXZVM (Spectrum)