Введение
Виртуальная машина для интерактивной художественной литературы – виртуальная машина Infocom. Z-машина – это виртуальная машина, разработанная Джоэлем Березом и Марком Бланком в 1979 году и использовавшаяся компанией Infocom для ее текстовых приключенческих игр. Infocom компилировал игровой код в файлы, содержащие инструкции Z-машины (называемые файлами историй или Z-кода), и таким образом мог портировать свои текстовые приключения на новую платформу, просто написав реализацию Z-машины для этой платформы. Учитывая большое количество несовместимых домашних компьютерных систем, используемых в то время, это было важным преимуществом по сравнению с использованием машинного кода или разработкой компилятора для каждой системы.
the Infocom virtual machine
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 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 or developing a compiler for each system.
История
"Z" в Z-машине означает Zork, первую приключенческую игру от Infocom. Файлы Z-кода обычно имеют имена, заканчивающиеся на z1, z2, z3, z4, z5, z6, z7 или z8, где число указывает версию Z-машины, для которой предназначен файл, согласно первому байту файла истории. Однако это современная практика. Сама Infocom использовала расширения dat (Data) и zip (ZIP = Z machine Interpreter Program), но последнее столкнулось с широким распространением zip для архивных файлов, совместимых с PKZIP, начиная с 1990-х годов, после закрытия Infocom компанией Activision. Infocom выпустила шесть версий Z-машины. Файлы версий 1 и 2 встречаются крайне редко. Известно лишь о двух файлах версии 1 и двух файлах версии 2, выпущенных Infocom. Версия 3 охватывает большинство игр, выпущенных Infocom. Более поздние версии обладали расширенными возможностями, кульминацией которых стала частичная графическая поддержка в версии 6. Компилятор (Zilch), который Infocom использовала для создания файлов историй, так и не был выпущен, хотя документация по языку ZIL (Zork Implementation Language), языку семейства Lisp, похожему на MDL, сохранилась, и была создана замена с открытым исходным кодом "ZILF". После того, как Mediagenic перевела Infocom в Калифорнию в 1989 году, Computer Gaming World заявила, что "ZIL функционально мертв", и сообщила о слухах о "совершенно новом парсере, который, возможно, никогда не будет использован". В мае 1993 года Грэм Нельсон выпустил первую версию своего компилятора Inform, который также генерирует файлы историй для Z-машины, хотя язык Inform существенно отличается от ZIL. Inform стал популярен в сообществе интерактивной фантастики. Значительная часть интерактивной художественной литературы представлена в виде файлов историй Z-машины. Потребность в создании больших игровых файлов привела Нельсона к определению версий 7 и 8 Z-машины, хотя версия 7 используется редко. В силу особенностей обработки адресов, файл истории версии 3 может быть объемом до 128K, файл истории версии 5 – до 256K, а файл истории версии 8 – до 512K. Несмотря на то, что эти размеры могут показаться небольшими по современным меркам, для текстовых приключений они достаточно велики для создания сложных игр. В 1990-х годах Грэм Нельсон разработал стандарт Z Machine, основанный на детальном изучении существующих файлов Infocom. Стандарт также включает расширения, используемые в более поздних версиях, а также ссылки на формат ресурса "Blorb", используемый Infocom, и формат файлов сохранения "Quetzal". В 2006 году Нельсон расширил Z-машину до 32-битного формата Glulx для Inform 7. Фонд технологий интерактивной фантастики, основанный в 2016 году, управляет всеми этими стандартами.
Переводчики
Интерпретаторы для файлов Z-кода доступны на широком спектре платформ. На веб-сайте Inform перечислены ссылки на свободно доступные интерпретаторы для 15 настольных операционных систем (включая 8-битные микрокомпьютеры 1980-х годов, такие как Apple II, TRS 80 и ZX Spectrum, а также объединяющие "Unix" и "Windows" в отдельные позиции), 10 мобильных операционных систем (включая Palm OS и Game Boy) и четыре платформы интерпретаторов (Emacs, Java, JavaScript и Scratch). По словам Нельсона, это "возможно, самая переносимая виртуальная машина, когда-либо созданная". Популярные интерпретаторы включают Nitfol и Frotz. Nitfol использует Glk API и поддерживает версии 1–8 Z-машины, включая графическую Z-машину версии 6. Файлы сохранения хранятся в стандартном формате Quetzal. Бинарные файлы доступны для различных операционных систем, включая классическую Mac OS, Unix-подобные системы, DOS и Windows. Frotz был написан на C Стефаном Йокишем в 1995 году для DOS. Со временем он был портирован на другие платформы, такие как Unix-подобные системы, RISC OS и iOS. Поддержка звуковых эффектов и графики варьировалась. К 2002 году разработка застопорилась, и программу подхватил Дэвид Гриффит. Кодовая база была разделена на части виртуальной машины и пользовательского интерфейса таким образом, что виртуальная машина стала независимой от любого пользовательского интерфейса. Это позволило расширить возможности портирования Frotz. Один из самых необычных портов также является одним из самых простых: бот для мгновенных сообщений использует версию Frotz с минимальной функциональностью ввода/вывода, создавая бота, с помощью которого можно играть в большинство игр Z-машины через клиент мгновенных сообщений. Другой популярный клиент для macOS и других Unix-подобных систем – Zoom. Он поддерживает тот же формат сохранения Quetzal, но структура файлов организована иначе.