La máquina Z es una máquina virtual 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 para la máquina Z (denominados archivos de historia o archivos de código Z) y, por lo tanto, podía portar sus aventuras de texto a una nueva plataforma simplemente escribiendo una implementación de la máquina Z para dicha plataforma. Dada la gran cantidad de sistemas informáticos domésticos incompatibles que existían en ese momento, esto representaba una ventaja importante frente al 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 hace referencia a Zork , el primer juego de aventuras de Infocom. Infocom utilizaba las extensiones de archivo .dat (Data) y .zip (ZIP = Z-machine Interpreter Program), pero esta última entraba en conflicto con el uso generalizado de .zip para archivos comprimidos compatibles con PKZIP a partir de la década de 1990, después de que Activision cerrara Infocom.
Infocom produjo seis versiones de la máquina Z. Las versiones 1 y 2 son extremadamente raras, con solo dos archivos publicados por Infocom para cada una. La versión 3 abarca la mayoría de los juegos lanzados por Infocom. Las versiones posteriores incorporaron más funciones, culminando con la compatibilidad gráfica 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, según lo indicado por el primer byte del archivo de la historia. [ 1 ] Como se mencionó anteriormente, los juegos de Infocom usaban el equivalente de .z1 a .z6; .z7 y .z8 fueron propuestos y adoptados después de que Infocom cerrara.
Antes de la máquina Z
El lenguaje de programación MDL se derivó 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 escribieron Zork en MDL, completando la versión inicial dos semanas después. [ 2 ] [ 3 ] : 5–6 Al igual que Adventure , Zork se programó 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 insuperable para Blank. Berez se dio cuenta de que UCSD Pascal utilizaba un modelo de máquina virtual (VM) para generar archivos ejecutables que podían portarse fácilmente entre plataformas, y junto con Blank, idearon los requisitos para una VM ligera 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 de RAM relativamente pequeños en los microordenadores típicos. [ 3 ] : 11 La máquina Z resultante utilizaba una estructura de árbol de objetos para los elementos, ubicaciones, personajes y armas del juego. [ 3 ] : 11 En comparación, el analizador de la máquina Z ocupa 3 kB de almacenamiento, mientras que el analizador original del PDP-10 ocupa 44 kB (10 000 palabras de 36 bits ). [ 5 ]
ZIL y ZIP, ZILCH y ZAP
Para complementar la máquina Z, Infocom desarrolló el lenguaje de programación de alto nivel Zork Implementation Language (ZIL) mediante la simplificación de MDL [ 5 ] . Las herramientas de desarrollo de Infocom compilaban 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 Estas herramientas consistían en un compilador (ZILCH, abreviatura de ZIL Compiler Hack) y un ensamblador (ZAP, el programa ensamblador de la máquina Z). [ 6 ]
Aunque ZILCH nunca se publicó, aún existe documentación de ZIL y se ha escrito un reemplazo de código abierto llamado "ZILF" [ 7 ] . Después de que Mediagenic trasladara Infocom a California en 1989, Computer Gaming World afirmó que "ZIL... está prácticamente muerto" e informó sobre rumores de un "analizador completamente nuevo que quizás nunca se utilice" [ 8 ] .
Graham Nelson e Informa
En mayo de 1993, Graham Nelson lanzó la primera versión de su compilador Inform , que también genera archivos de historias para máquinas Z como resultado, a pesar de que el lenguaje fuente de Inform es bastante diferente de ZIL.
Inform se ha popularizado en la comunidad de ficción interactiva . Gran parte de la 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 se usa con poca frecuencia. Debido a la forma en que se manejan las direcciones, un archivo de historia de la versión 3 puede tener hasta 128 KB de longitud, uno de la versión 5 hasta 256 KB y uno de la versión 8 hasta 512 KB. Si bien 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 recientes, así como enlaces al formato de recursos " Blorb " y al 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, gestiona todos estos estándares. [ 10 ]
ZIL (Lenguaje de Implementación de Zork)
El ZIL se basa en el MDL del MIT. Aquí está la definición de la linterna de latón de Zork I en ZIL, con comentarios añadidos para ilustrar el significado de cada línea: [ 11 ]
<OBJETO LINTERNA ;"Define el objeto LINTERNA" ( LOC SALÓN ) ;"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" ( INDICADORES TOMAR OBJETO LUZ OBJETO ) ;"¿De qué es capaz este objeto? Se puede TOMAR. Proporciona LUZ." ( ACCIÓN LINTERNA-F ) ;"Subrutina que define acciones especiales con este objeto" ( FDESC "Hay una linterna a pilas en la vitrina de trofeos." ) ;"Descripción durante el primer encuentro" ( LDESC "Hay una linterna de latón (a pilas) aquí." ) ;"Descripción posterior en otras ubicaciones" ( TAMAÑO 15 ) > ;"Define el peso para limitar la capacidad del inventario"El objeto equivalente en MDL se define como:
<OBJETO [ "LÁMPARA" "LANTE" "LUZ" ] [ "LATÓN" ] "lámpara" <+ , OVISIÓN , TOMAR BIT , LIGHTBIT> LINTERNA () ( ODESC0 "Hay una linterna de latón a pilas sobre la vitrina de trofeos." ODESC1 "Aquí hay una linterna de latón (a pilas)." OSIZE 15 OLINT [0 >] ) >Un ejemplo más complejo que involucra combate, junto con su equivalente en MDL Zork, se presenta en una entrada de blog de 2019 de Andrew Plotkin. 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

Existen intérpretes para archivos de código Z en una amplia variedad de plataformas. Infocom adaptó rápidamente los juegos a las nuevas computadoras porque solo tenía que escribir un intérprete. [ 13 ] A partir de julio de 1984 La compañía publicó juegos para 15 computadoras diferentes, además de CP/M y MS-DOS genéricos . [ 14 ] El sitio web Inform enumera enlaces a intérpretes disponibles gratuitamente para 15 sistemas operativos de escritorio (incluidas microcomputadoras de 8 bits de la década de 1980 como la Apple II , TRS-80 y ZX Spectrum , y agrupando "Unix" y "Windows" como uno solo), 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". [ 15 ]
Entre los intérpretes más populares se encuentran Nitfol y Frotz . Nitfol utiliza la API Glk y admite las versiones 1 a 8 de la máquina Z, incluida la versión 6 de la máquina Z gráfica. Los archivos de guardado se almacenan en el formato de guardado estándar de Quetzal . Hay archivos binarios disponibles para varios sistemas operativos , incluidos Mac OS clásico , sistemas tipo Unix y Windows . [ 16 ]
Frotz fue escrito en C por Stefan Jokisch en 1995 para DOS. Con el tiempo, se adaptó a otras plataformas, como sistemas tipo Unix , [ 17 ] RISC OS , [ 18 ] e iOS . [ 19 ] Se admitieron efectos de sonido y gráficos en diversos grados. En 2002, el desarrollo se estancó y David Griffith retomó el programa. El código fuente se dividió entre la máquina virtual y la interfaz de usuario, de tal manera que la máquina virtual se independizó de cualquier interfaz de usuario. Esto permitió una mayor variedad en la adaptación de Frotz. Una de las adaptaciones más curiosas es también una de las más sencillas: un bot de mensajería instantánea se integra con una versión de Frotz con la funcionalidad mínima de E/S, creando un bot con el que se puede jugar a la mayoría de los juegos de Z-machine usando un cliente de mensajería instantánea. [ 20 ]
Otro cliente popular para macOS y otros sistemas tipo Unix es Zoom . [ 21 ] Admite el mismo formato de guardado Quetzal , pero el empaquetado de la estructura de archivos es diferente.
Véase también
Referencias
- ↑ "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". Computer . 12. IEEE Computer Society: 51–59 . doi : 10.1109/MC.1979.1658697 .
- 1 2 3 4 5 Briceno, Hector; Chao, Wesley; Glenn, Andrew; Hu, Stanley; Krishnamurthy, Ashwin; Tsuchida, Bruce (15 de diciembre de 2000). "Desde la cima de su éxito: La historia de Infocom, Inc." (PDF) . Curso 6.933J/STS.420J del MIT (Estructura de las revoluciones de la ingeniería) . Recuperado 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 .
- 1 2 Blank, Marc S.; Galley, SW (julio de 1980). "Cómo adaptar un programa grande a una máquina pequeña o cómo instalar el gran imperio subterráneo en tu escritorio" . Creative Computing . págs. 80–87 . Recuperado el 7 de enero de 2025 .
- ↑ Plotkin, Andrew. "El catálogo de INFOCOM obsesivamente completo" . eblong.com . Consultado el 3 de enero de 2025 .
- ↑ McGrew, Tara. "ZILF" . zilf.io. Consultado el 18 de abril de 2026 .
- ↑ "Dentro de la industria: el traslado de Infocom a la costa oeste genera controversia" . Computer Gaming World . N.° 63. Septiembre de 1989. pág. 10.
- ↑ "Inform - ZMachine - Standards" . inform-fiction.org . Consultado el 26 de marzo de 2018 .
- ↑ "Especificaciones de Glk, Glulx y Blorb" . Interactive Fiction Technology Foundation. 16 de noviembre de 2022.
- ↑ Maher, Jimmy (7 de enero de 2012). "ZIL y la Z-Machine" . The Digital Antiquarian . Consultado el 3 de enero de 2025 .
- ↑ Plotkin, Andrew (17 de abril de 2019). "¿Qué es ZIL, después de todo?" . Zarf .
- ↑ Mace, Scott (2 de abril de 1984). "Juegos con ventanas" . InfoWorld . pág. 56. Consultado el 10 de febrero de 2015 .
- ↑ "Formulario de pedido de Infocom (BB-84)" (PDF) . Museo de la Historia de los Juegos de Aventura por Computadora . Consultado el 19 de febrero de 2026 .
- ↑ Nelson, Graham. "Acerca de los intérpretes" . Sitio web de Inform . Consultado el 7 de noviembre de 2009 .
- ↑ "if-archive/infocom/interpreters/nitfol" . Consultado el 29 de octubre de 2016 .
- ↑ "Archivo README de Frost en Gitlab" . Consultado el 19 de febrero de 2019 .
- ↑ "Página principal de RISC OS Frotz" . 18 de septiembre de 1999. Archivado del original el 15 de octubre de 2021.
- ↑ "Frotz en la App Store" . App Store .
- ↑ "Frotz DUMB archivo en Gitlab" . Consultado el 19 de febrero de 2019 .
- ↑ "Logical Shift Zoom" . Consultado el 29 de octubre de 2016 .
Enlaces externos
- El documento de estándares de la máquina Z
- Aprender ZIL en Wayback Machine (archivado el 7 de agosto de 2010) (PDF) es el manual de Infocom ZIL de 1989.
- Descripción de ZIP en Wayback Machine (archivado el 9 de marzo de 2012) (PDF) el programa intérprete 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.
- Motores de ficción interactiva
- Máquinas virtuales
- Infocom