Z -машина — это виртуальная машина , разработанная Джоэлом Березом и Марком Бланком в 1979 году и использовавшаяся Infocom для своих текстовых приключенческих игр . Infocom компилировала игровой код в файлы, содержащие инструкции Z-машины (называемые файлами историй или файлами Z-кода), и поэтому могла портировать свои текстовые приключения на новую платформу, просто написав реализацию Z-машины для этой платформы. С большим количеством несовместимых домашних компьютерных систем, используемых в то время, это было важным преимуществом по сравнению с использованием собственного кода или разработкой компилятора для каждой системы.
«Z» в Z-machine означает Zork , первую приключенческую игру Infocom. Файлы Z-code обычно имеют имена, заканчивающиеся на .z1, .z2, .z3, .z4, .z5, .z6, .z7 или .z8, где число — это номер версии Z-machine, на которой предполагается запустить файл, как указано в первом байте файла истории. [1]
Однако это современная конвенция. Сама Infocom использовала расширения .dat (Data) и .zip (ZIP = Z-machine Interpreter Program), но последнее противоречило широко распространенному использованию .zip для совместимых с PKZIP архивных файлов, начиная с 1990-х годов, после того как Activision закрыла Infocom. Infocom выпустила шесть версий Z-machine. Файлы, использующие версии 1 и 2, очень редки. Известно, что Infocom выпустила только два файла версии 1 и только два файла версии 2. Версия 3 охватывает большинство выпущенных Infocom игр. Более поздние версии имели больше возможностей, достигнув кульминации в некоторой графической поддержке в версии 6.
Компилятор (называемый Zilch) , который Infocom использовал для создания своих файлов историй, так и не был выпущен, хотя документация используемого языка ZIL , языка семейства Lisp , похожего на MDL , все еще существует, и была написана замена с открытым исходным кодом "ZILF" [2] . После того, как Mediagenic переместила Infocom в Калифорнию в 1989 году, Computer Gaming World заявила, что "ZIL ... функционально мертв", и сообщила о слухах о "совершенно новом парсере, который, возможно, никогда не будет использоваться". [3] В мае 1993 года Грэм Нельсон выпустил первую версию своего компилятора Inform , который также генерирует файлы историй Z-machine в качестве своего вывода, хотя исходный язык Inform сильно отличается от ZIL.
Inform стал популярен в сообществе интерактивной фантастики . Большая часть интерактивной фантастики представлена в виде файлов историй Z-machine. Потребность в возможности создания больших игровых файлов привела к тому, что Нельсон указал версии 7 и 8 Z-machine, хотя версия 7 используется редко. Из-за способа обработки адресов файл истории версии 3 может иметь длину до 128 Кб, история версии 5 может иметь длину до 256 Кб, а история версии 8 может иметь длину до 512 Кб. Хотя эти размеры могут показаться небольшими по сегодняшним стандартам вычислений, для текстовых приключений они достаточно велики для сложных игр.
В 1990-х годах Грэм Нельсон разработал стандарт Z-Machine, основанный на детальном изучении существующих файлов Infocom. Стандарт также включает расширения, используемые его новыми версиями, а также ссылки на формат ресурсов « Blorb », используемый Infocom, и формат файлов сохранения « Quetzal ». [4] В 2006 году Нельсон расширил Z-machine до 32-битного формата Glulx для Inform 7. Фонд Interactive Fiction Technology Foundation , основанный в 2016 году, управляет всеми этими стандартами. [5]
ZIL основан на MDL от MIT. Вот определение латунного фонаря Zork I:
<ОБЪЕКТ ФОНАРЬ ( МЕСТО ГОСТИНАЯ ) ( СИНОНИМ ЛАМПА ФОНАРЬ СВЕТ ) ( ПРИЛАГАТЕЛЬНОЕ ЛАТУНЬ ) ( УБЫТКИ "латунный фонарь" ) ( ФЛАГИ ТАКЕБИТ СВЕТОБИТ ) ( ДЕЙСТВИЕ ФОНАРЬ-Ф ) ( FDESC "На ящике с трофеями находится фонарь на батарейках." ) ( LDESC "Здесь есть латунный фонарь (на батарейках)." ) ( РАЗМЕР 15 ) >
Более сложный пример, включающий бой, вместе с его эквивалентом MDL Zork, представлен в блоге Эндрю Плоткина 2019 года. Примечательно, что Z-машина не поддерживает сборку мусора , а ZIL не имеет концепции системы списков Lisp. [6]
Интерпретаторы для файлов Z-code доступны на самых разных платформах. На сайте Inform перечислены ссылки на свободно доступные интерпретаторы для 15 настольных операционных систем (включая 8-битные микрокомпьютеры 1980-х годов, такие как Apple II , TRS-80 и ZX Spectrum , и группирующие "Unix" и "Windows" как по одной), 10 мобильных операционных систем (включая Palm OS и Game Boy ) и четыре платформы интерпретаторов (Emacs, Java, JavaScript и Scratch). По словам Нельсона, это "возможно, самая портативная виртуальная машина из когда-либо созданных". [7]
Популярные интерпретаторы включают Nitfol и Frotz. Nitfol использует API Glk и поддерживает версии 1–8 Z-машины, включая графическую версию 6 Z-машины. Файлы сохранения хранятся в стандартном формате сохранения Quetzal . Двоичные файлы доступны для нескольких различных операционных систем , включая классическую Mac OS , Unix-подобные системы, DOS и Windows . [8]
Frotz был написан на языке C Стефаном Йокишем в 1995 году для DOS. Со временем он был портирован на другие платформы, такие как Unix-подобные системы, [9] RISC OS , [10] и iOS . [11] Звуковые эффекты и графика поддерживались в разной степени. К 2002 году разработка застопорилась, и программу подхватил Дэвид Гриффит. Кодовая база была разделена между виртуальной машиной и частями пользовательского интерфейса таким образом, что виртуальная машина стала независимой от любого пользовательского интерфейса. Это позволило больше разнообразить портирование Frotz. Один из странных портов также является одним из самых простых: бот для обмена мгновенными сообщениями оборачивается вокруг версии Frotz с минимальной функциональностью ввода-вывода, создавая бота, с помощью которого можно играть в большинство игр Z-machine, используя клиент для обмена мгновенными сообщениями. [12]
Другим популярным клиентом для macOS и других Unix-подобных систем является Zoom. [13] Он поддерживает тот же формат сохранения Quetzal , но упаковка файловой структуры отличается.