Aunque las computadoras modernas ofrecen numerosas formas optimizadas de jugar 'aventuras de texto', los entusiastas aún pueden ejecutar Zork 1 a través de un emulador de CP/M en Linux para experimentar el entorno del sistema operativo original que inspiró a MS-DOS. Este proceso requiere cerrar la brecha entre el hardware moderno y la arquitectura del microprocesador Z80 utilizando herramientas de emulación especializadas como z80pack.

Una fotografía de primer plano de un chip de microprocesador Zilog Z80.
La arquitectura del microprocesador Z80 sirvió como base para el sistema operativo CP/M.kevinboone.me

El artículo explica cómo CP/M fue diseñado para microcomputadoras que utilizaban la arquitectura Z80.

La arquitectura de la emulación de CP/M

Para ejecutar CP/M en Linux, el enfoque más común es utilizar un emulador Z80 como z80pack. Debido a que CP/M fue diseñado para microcomputadoras con memoria limitada e interfaces de hardware específicas, el emulador debe recrear el entorno donde el sistema operativo pueda arrancar y ejecutar binarios.

La configuración implica construir el emulador principal y las herramientas de soporte desde el código fuente. Una vez funcional, el sistema requiere una biblioteca de imágenes de disco para proporcionar los archivos de arranque necesarios, como la imagen CP/M 3, que permite que el sistema se inicialice y proporcione una línea de comandos.

“No hay absolutamente ninguna razón práctica para jugar Zork usando un emulador de CP/M.”

— Kevin Boone: Playing Zork 1 on a CP/M emulator on Linux

Gestión de discos virtuales y áreas de usuario

A diferencia de los sistemas operativos modernos, los discos de CP/M no admiten subdirectorios. En su lugar, utilizan 'áreas de usuario' numeradas para organizar los archivos. Para ejecutar Zork 1, el binario (ZORK1.COM) y su archivo de datos (ZORK1.DAT) deben copiarse en el área de usuario por defecto (área cero) de una imagen de disco virtual.

Los usuarios pueden crear diferentes tipos de unidades virtuales, como una imagen de disco duro de 4Mb para la unidad I:. Se utilizan herramientas como cpmtools para gestionar estas imágenes, permitiendo a los usuarios listar contenidos y copiar archivos entre el sistema anfitrión y el entorno emulado.

Especificaciones de disco y memoria CP/M: Disco flexible estándar 720kB; Ejemplo de disco duro 4Mb; Disco duro máximo CP/M-3 500Mb
Especificaciones de disco y memoria CP/Mkevinboone.me

Gráfico elaborado por HN Digest a partir de cifras de kevinboone.me; los valores se muestran como en la fuente.

Compatibilidad de terminal y manejo de entrada

Un obstáculo técnico específico involucra la tecla de 'retroceso' (backspace). Las terminales modernas de Linux suelen generar un código DEL (ASCII 127), pero Zork 1 requiere el código tradicional 'ctrl-h' (ASCII 8) para borrar caracteres. Esto requiere configurar el emulador de terminal para mapear correctamente la tecla de retroceso.

Una vez que la terminal está configurada y el shell se actualiza con el comando `stty erase`, el usuario puede ejecutar el juego. El resultado es un entorno funcional donde la salida de texto del juego se pasa directamente a la terminal del anfitrión, imitando la experiencia de una microcomputadora antigua.

Una captura de pantalla que muestra una lista de código y la salida de la terminal para ejecutar Zork 1.
Una interfaz de terminal que demuestra la ejecución de Zork 1 dentro de un entorno emulado.kevinboone.me

Esta captura de pantalla ilustra el entorno funcional donde la salida de texto del juego se pasa a la terminal del anfitrión.

Compensaciones y alternativas modernas

La principal compensación de este método es la complejidad; no hay una razón práctica para usar un emulador de CP/M específicamente para Zork, ya que los métodos modernos son significativamente más fáciles. El emulador se utiliza principalmente con fines educativos o para construir una familiaridad más profunda con la arquitectura de la informática retro.

Proyectos más nuevos como cpmulator ofrecen una experiencia más simplificada mediante el uso de un emulador basado en Go que interactúa con el sistema de archivos local. Si bien esto elimina la necesidad de una gestión compleja de discos virtuales, puede carecer de soporte completo de disco para cualquier llamada de API que haga referencia a pistas o sectores físicos.

Qué dicen los lectores de Hacker News

  • Alternativa: Un comentarista sugirió usar el emulador Frotz como una forma de jugar este tipo de juegos en sistemas Linux y BSD. comentario ↗
  • Alternativa: Otro usuario compartió un emulador de CP/M basado en Go que desarrolló, el cual utiliza el sistema de archivos local en lugar de discos virtuales, ofreciendo una forma de ejecutar el software a través de Docker. comentario ↗
  • Experiencia: Un lector compartió su experiencia personal de jugar Zork en un DECSYSTEM-2060 mientras estudiaba como estudiante de grado. comentario ↗

Resumen de opiniones del hilo de Hacker News; no son hechos verificados. Leer el debate completo ↗