La máquina Z es una máquina virtual que fue desarrollada por Joel Berez y Marc Blank en 1979 y utilizada por Infocom para sus juegos de aventuras de texto . Infocom compilaba el código del juego en archivos que contenían instrucciones de la máquina Z (llamados archivos de historia o archivos de código Z) y, por lo tanto, podía trasladar sus aventuras de texto a una nueva plataforma simplemente escribiendo una implementación de la máquina Z para esa plataforma. Con la gran cantidad de sistemas informáticos domésticos incompatibles que se utilizaban en ese momento, esto era una ventaja importante sobre el uso de código nativo o el desarrollo de un compilador para cada sistema.
Historia y diseño
Nomenclatura y convenciones
La "Z" de Z-machine significa Zork , el primer juego de aventuras de Infocom. Infocom utilizó las extensiones de archivo .dat (Data) y .zip (ZIP = Z-machine Interpreter Program), pero esta última entró en conflicto con el uso generalizado de .zip para archivos de almacenamiento compatibles con PKZIP a partir de los años 90, después de que Activision cerrara Infocom.
Infocom produjo seis versiones de la máquina Z. Los archivos que utilizan las versiones 1 y 2 son muy raros. Solo se conocen dos archivos de la versión 1 publicados por Infocom y solo dos de la versión 2. La versión 3 cubre la mayoría de los juegos publicados por Infocom. Las versiones posteriores tenían más capacidades, que culminaron en cierto soporte gráfico en la versión 6.
La convención moderna para los archivos de código Z generalmente tiene nombres que terminan en .z1, .z2, .z3, .z4, .z5, .z6, .z7 o .z8, donde el número es el número de versión de la máquina Z en la que se pretende ejecutar el archivo, como lo indica el primer byte del archivo de la historia. [1] Como se señaló anteriormente, los juegos de Infocom usaban el equivalente de .z1 a .z6; .z7 y .z8 se propusieron y adoptaron después de que Infocom cerrara.
Antes de la máquina Z
El lenguaje de programación MDL fue derivado de Lisp en el Instituto Tecnológico de Massachusetts por el grupo de Modelado Dinámico del Laboratorio de Ciencias de la Computación (LCS) en la década de 1970; inspirados por Colossal Cave Adventure (1977), los miembros de ese grupo continuaron escribiendo Zork en MDL, completando la versión inicial dos semanas después. [2] [3] : 5–6 Al igual que Adventure , Zork fue programado para el DEC PDP-10 ; la versión final ocupa 1 MB de código MDL y requiere 512 KB de RAM para ejecutarse. Debido a que las computadoras domésticas contemporáneas no tenían estos recursos, se necesitó un esfuerzo considerable para portar el juego. [3] : 11 Finalmente, los desarrolladores dividieron Zork en dos juegos para computadoras personales. [4]
La compresión necesaria para ejecutar Zork desde disquetes con aproximadamente 80 KB de almacenamiento parecía una barrera infranqueable para Blank. Berez se dio cuenta de que UCSD Pascal usaba un modelo de máquina virtual (VM) para generar archivos ejecutables que pudieran trasladarse fácilmente a través de plataformas y, junto con Blank, idearon los requisitos para una VM liviana optimizada para juegos de aventuras de texto, que recuperaría datos y ejecutaría instrucciones según fuera necesario desde el almacenamiento para compensar los tamaños relativamente pequeños de RAM en los microordenadores típicos. [3] : 11 La máquina Z resultante usó una estructura de árbol de objetos para los elementos, ubicaciones, personajes y armas del juego. [3] : 11 A modo de comparación, el analizador sintáctico de la máquina Z ocupa 3 kB de almacenamiento, mientras que el analizador sintáctico PDP-10 original ocupa 10 Kwords ( 36 bits ). [5]
CERO y CERO, CERO y ZAP
Para complementar la máquina Z, Infocom desarrolló el lenguaje de computadora de alto nivel Zork Implementation Language (ZIL) al agilizar el MDL, [5] y el Programa de Intérprete del Lenguaje Z (ZIP), que convierte ZIL en instrucciones de la máquina Z en un proceso de dos etapas; esto hizo que el desarrollo de aventuras de texto fuera independiente de la plataforma y permitió la portabilidad a diferentes sistemas simplemente escribiendo un intérprete de la máquina Z apropiado. [3] : 12–13 ZIP consta de un compilador (ZILCH, abreviatura de ZIL Compiler Hack) y un ensamblador (ZAP, el Programa de Ensamblador de la Máquina Z). [6]
ZILCH nunca fue publicado, aunque todavía existe documentación de ZIL y se ha escrito un reemplazo de código abierto, "ZILF" [7] . Después de que Mediagenic trasladara Infocom a California en 1989, Computer Gaming World declaró que "ZIL... está funcionalmente muerto" y difundió rumores sobre un "analizador completamente nuevo que tal vez nunca se use". [8]
Graham Nelson yInformar
En mayo de 1993, Graham Nelson lanzó la primera versión de su compilador Inform , que también genera archivos de historias de Z-machine como salida, aunque el lenguaje fuente de Inform es bastante diferente de ZIL.
Inform se ha vuelto popular en la comunidad de ficción interactiva . Una gran proporción de ficción interactiva se presenta en forma de archivos de historias de la máquina Z. La demanda de la capacidad de crear archivos de juego más grandes llevó a Nelson a especificar las versiones 7 y 8 de la máquina Z, aunque la versión 7 rara vez se utiliza. Debido a la forma en que se manejan las direcciones, un archivo de historia de la versión 3 puede tener una longitud de hasta 128K, una historia de la versión 5 puede tener una longitud de hasta 256K y una historia de la versión 8 puede tener una longitud de hasta 512K. Aunque estos tamaños pueden parecer pequeños para los estándares informáticos actuales, para aventuras de solo texto, son lo suficientemente grandes para juegos elaborados.
Durante la década de 1990, Graham Nelson elaboró un estándar Z-Machine basado en estudios detallados de los archivos Infocom existentes. El estándar también incluye extensiones utilizadas por sus versiones más nuevas, así como enlaces al formato de recursos " Blorb " utilizado por Infocom y un formato de archivo de guardado " Quetzal ". [9] En 2006, Nelson amplió Z-Machine al formato Glulx de 32 bits para Inform 7. La Interactive Fiction Technology Foundation , fundada en 2016, administra todos estos estándares. [10]
ZIL (lenguaje de implementación de Zork)
El ZIL se basa en el MDL del MIT. A continuación se muestra la definición de la linterna de bronce de Zork I en el ZIL, con comentarios adicionales para ilustrar el significado de cada línea: [11]
<OBJETO LINTERNA # _Define el objeto LINTERNA ( LOC SALA DE ESTAR ) # _Define la ubicación inicial del objeto ( SINÓNIMO LÁMPARA LINTERNA LUZ ) # _Define sinónimos que se pueden usar en lugar de LINTERNA ( ADJETIVO LATÓN ) # _Adjetivo opcional para distinguir esta linterna de otras linternas ( DESC "linterna de latón" ) # _Breve descripción en la lista de inventario ( BANDERAS TAKEBIT LIGHTBIT ) # _¿De qué es capaz este objeto ? Se puede TOMAR . Proporciona LUZ . ( ACTION LANTERN-F ) # _Subrutina que define acciones especiales con este objeto ( FDESC "Hay una linterna a batería en la vitrina de trofeos." ) # _Descripción durante el primer encuentro ( LDESC "Hay una linterna de bronce (a batería) aquí." ) # _Descripción posterior en otras ubicaciones ( SIZE 15 ) > # _Define el peso para limitar la capacidad del inventario
El objeto equivalente en MDL se define como:
<OBJECT [ "LAMPARA" "LANTE" "LUZ" ] [ "LATÓN" ] "lámpara" <+ , OVISON , TAKEBIT , LIGHTBIT> LINTERNA () ( ODESC0 "En la vitrina de trofeos hay una linterna de latón (que funciona con pilas)". ODESC1 "Aquí hay una linterna de latón (que funciona con pilas)". OSIZE 15 OLINT [0 >] ) >
En una publicación de blog de 2019 de Andrew Plotkin se presenta un ejemplo más complejo que involucra combate, junto con su equivalente MDL Zork. Cabe destacar que la máquina Z no tiene soporte para recolección de basura y ZIL no tiene el concepto del sistema de listas de Lisp. [12]
Intérpretes

Los intérpretes para archivos Z-code están disponibles en una amplia variedad de plataformas. El sitio web Inform incluye enlaces a intérpretes disponibles gratuitamente para 15 sistemas operativos de escritorio (incluidos microordenadores de 8 bits de la década de 1980 como Apple II , TRS-80 y ZX Spectrum , y agrupando "Unix" y "Windows" como uno solo cada uno), 10 sistemas operativos móviles (incluidos Palm OS y Game Boy ) y cuatro plataformas de intérpretes ( Emacs , Java, JavaScript y Scratch). Según Nelson, es "posiblemente la máquina virtual más portátil jamás creada". [13]
Entre los intérpretes más populares se encuentran Nitfol y Frotz. Nitfol utiliza la API Glk y es compatible con las versiones 1 a 8 de la máquina Z, incluida la versión 6 de la máquina Z gráfica. Los archivos guardados se almacenan en el formato de guardado estándar de Quetzal . Los archivos binarios están disponibles para varios sistemas operativos diferentes , incluido el clásico Mac OS , sistemas similares a Unix , DOS y Windows . [14]
Frotz fue escrito en C por Stefan Jokisch en 1995 para DOS. Con el tiempo fue portado a otras plataformas, como sistemas tipo Unix , [15] RISC OS , [16] e iOS . [17] Los efectos de sonido y los gráficos fueron soportados en diversos grados. Para 2002, el desarrollo se estancó y el programa fue retomado por David Griffith. La base de código fue dividida entre la máquina virtual y las porciones de interfaz de usuario de tal manera que la máquina virtual se volvió independiente de cualquier interfaz de usuario. Esto permitió una mayor variedad en la portabilidad de Frotz. Una de las portaciones más extrañas es también una de las más simples: un bot de mensajería instantánea se envuelve alrededor de una versión de Frotz con la mínima funcionalidad de E/S creando un bot con el que uno puede jugar la mayoría de los juegos de Z-machine usando un cliente de mensajería instantánea. [18]
Otro cliente popular para macOS y otros sistemas similares a Unix es Zoom. [19] Admite el mismo formato de guardado Quetzal , pero el empaquetado de la estructura de archivos es diferente.
Véase también
- Glulx : similar a la máquina Z, pero alivia varias limitaciones heredadas
- Informar : un lenguaje informático que puede producir programas de máquinas Z
- SCUMM – Utilidad de creación de guiones para Maniac Mansion de LucasArts , un sistema gráfico similar a Z- machine
- TADS : al igual que Glulx, está diseñado para solucionar algunas de sus limitaciones
Referencias
- ^ "El documento de estándares de la máquina Z". inform-fiction.org . Consultado el 26 de marzo de 2018 .
- ^ Lebling, P. David; Blank, Marc S.; Anderson, Timothy A. (abril de 1979). "Zork: un juego de simulación de fantasía computarizado". Computadora . 12 . IEEE Computer Society: 51– 59. doi :10.1109/MC.1979.1658697.
- ^ abcde Briceno, Hector; Chao, Wesley; Glenn, Andrew; Hu, Stanley; Krishnamurthy, Ashwin; Tsuchida, Bruce (15 de diciembre de 2000). "Desde la cima de su carrera: la historia de Infocom, Inc." (PDF) . MIT Course 6.933J/STS.420J (Estructura de las revoluciones de ingeniería) . Consultado el 3 de enero de 2025 .
- ^ Lebling, P. David (diciembre de 1980). "Zork y el futuro de las simulaciones de fantasía computarizadas". BYTE . págs. 172– 182.
- ^ ab Blank, Marc S.; Galley, SW (julio de 1980). "Cómo hacer que un gran programa quepa en una pequeña máquina o cómo hacer que el gran imperio subterráneo quepa en tu escritorio". Creative Computing . págs. 80– 87 . Consultado el 7 de enero de 2025 .
- ^ Plotkin, Andrew. "El catálogo obsesivamente completo de INFOCOM". eblong.com . Consultado el 3 de enero de 2025 .
- ^ McGrew, Jesse. "ZILF". zilf.io . Consultado el 22 de noviembre de 2020 .
- ^ "Dentro de la industria: la decisión de Infocom de trasladarse a la Costa Oeste genera controversia". Computer Gaming World . N.º 63. Septiembre de 1989. pág. 10.
- ^ "Inform - ZMachine - Estándares". inform-fiction.org . Consultado el 26 de marzo de 2018 .
- ^ "Especificaciones de Glk, Glulx y Blorb". Fundación de Tecnología de Ficción Interactiva. 16 de noviembre de 2022.
- ^ Maher, Jimmy (7 de enero de 2012). «ZIL y la máquina Z». The Digital Antiquarian . Consultado el 3 de enero de 2025 .
- ^ Plotkin, Andrew (17 de abril de 2019). "¿Qué es ZIL de todos modos?". Zarf .
- ^ Nelson, Graham. "Acerca de los intérpretes". Sitio web Inform . Consultado el 7 de noviembre de 2009 .
- ^ "if-archive/infocom/interpreters/nitfol" . Consultado el 29 de octubre de 2016 .
- ^ "Archivo README de Frotz en Gitlab" . Consultado el 19 de febrero de 2019 .
- ^ "La página de inicio de RISC OS Frotz". 18 de septiembre de 1999.
- ^ "Frotz en la App Store". App Store .
- ^ "Archivo DUMB de Frotz en Gitlab" . Consultado el 19 de febrero de 2019 .
- ^ "Zoom por desplazamiento lógico" . Consultado el 29 de octubre de 2016 .
Enlaces externos
- El documento de estándares de Z-Machine
- Aprendiendo ZIL en Wayback Machine (archivado el 7 de agosto de 2010) (PDF) es el manual ZIL de Infocom de 1989
- Descripción de ZIP en Wayback Machine (archivada el 9 de marzo de 2012) (PDF) el programa de interpretación de lenguaje Z (documento interno de Infocom) de 1989
- Intérpretes
- Cómo adaptar un programa grande a una máquina pequeña describe la creación y el diseño de la máquina Z