Emulando Advent tal y como fue creada

Avatar de Usuario
Colossus
Miembro de honor
Miembro de honor
Mensajes: 4891
Registrado: 05 May 2004, 17:49
Gracias recibidas: 1 vez

Emulando Advent tal y como fue creada

Mensajepor Colossus » 15 Oct 2012, 18:42

(por Colossus)

Como tal vez ya sepáis la primera aventura conversacional de la historia fue advent (también llamada "Adventure", "Colossal Cave", "La aventura original" en España...). Es un programa tan influyente que inspiró a los fundadores de compañías como Adventure International, Infocom o Sierra. Podéis encontrar más información sobre ella en www.rickadams.org/adventure/index.html.



Hace tiempo que me apetecía ejecutar advent en un emulador de la máquina en la que fue programada, en una versión tan fiel al original como fuera posible. Finalmente decidí intentarlo en serio, y acabé consiguiéndolo, pero fue mucho más complicado de lo que pensaba. He decidido explicar aquí, paso a paso, todo el proceso, por si alguien siente curiosidad por reproducir un trocito de historia en su propia casa (espero vuestros comentarios al respecto). Vamos allá.





1. ¿La Aventura Original?



Lo primero era saber cómo fue realmente advent. Y esto no resultó tan fácil de averiguar como pudiera parecer.

Lo que todo el mundo sabe es que advent fue originalmente programada en FORTRAN por William Crowther, y ampliada posteriormente por Don Woods en los años 70. Pero... ¿cuándo y en qué ordenador hicieron Crowther y Woods sus respectivas versiones? ¿Se conserva en algún sitio el código fuente original de alguna de ellas? No es fácil seguirle la pista a advent porque ha habido literalmente cientos de versiones para todos los ordenadores imaginables (como muestra ver Adventure Family Tree). Y la información que hay en Internet es imprecisa y contradictoria.



Para no alargarme demasiado diré que, tras mucho indagar, llegué a las siguientes conclusiones:




  1. William Crowther realizó su "advent preliminar" en 1975, en un ordenador DEC PDP-10.



  2. Don Woods encontró una versión del programa de Crowther en un DEC PDP-10, y programó su versión (lo que hoy consideramos "La Aventura Original") en otro PDP-10 en 1976.




La primera afirmación es sólo la conjetura más probable. La fecha podría tener un error de un año arriba o abajo, y el ordenador tal vez fuera otro modelo de PDP o un CDC 6600. La segunda afirmación es totalmente fiable por que ¡el propio Don Woods me lo confirmó en un mail el 19-6-2003! (pero ver apartado 7 más abajo). Por desgracia Woods no sabe cuándo ni en qué ordenador hizo Crowther su versión.



Aclarado esto quedaba decidir cuál de los códigos fuente que circulan por la red era el más parecido al original. Le pregunté de nuevo a Woods por el que me parecía el mejor candidato (ifarchive.org/if-archive/games/source/adv350-pdp10.tar.gz) y me contestó que "Esa parece ser mi versión de 1976. La única versión más antigua sería la de Crowther, y yo no conservo una copia." De hecho parece que nadie conserva una copia más antigua que esa, por lo que ya tenía lo que estaba buscando (pero ver apartado 7 más abajo). Ahora faltaba compilarlo y hacerlo funcionar en el emulador adecuado.





2. El emulador.



Necesitaba un PDP-10 emulado. Escogí el SIMH (simh.trailing-edge.com), capaz de emular decenas de ordenadores antiguos.

Para hacerlo funcionar en Linux, en mi caso un Red Hat 7.3, lo primero es descargarse los fuentes en la página del emulador (hay también ejecutables para Windows). Para compilar, crear en el directorio del SIMH un directorio llamado bin, y sustituir /BIN por ./bin/ en el makefile. Ejecutar make all . Esto crea los ejecutables de los distintos emuladores, incluyendo el pdp10 que necesitamos. El emulador, sin embargo, resulta completamente inútil sin el software adecuado.





3. Dando vida a un PDP-10.



Esto fue, con mucho, lo más difícil de todo el proceso. El DEC PDP-10 es un ordenador antiguo, muy diferente a lo que estamos acostumbrados a ver hoy en dia. Me llevó mucho tiempo saber qué necesitaba instalar en el ordenador emulado, y más todavía averiguar cómo se utilizaba lo instalado. Lo que precisamos es básicamente una imagen de un disco duro virtual para el simulador, con el sistema operativo TOPS10 y un compilador de FORTRAN instalados. Hay dos formas de conseguirlo:




  1. Forma difícil (la que yo empleé): Consiste en bajarse las imágenes de cintas de backup del TOPS10 y el FORTRAN de pdp-10.trailing-edge.com e instalarlo todo desde cero. Es muy laborioso pero se aprende bastante. Yo lo conseguí siguiendo un par de logs que encontré en la red. Por si a alguien se anima los he puesto en tops10inst.txt y fortv11bas17inst.txt. Aunque no vayáis a usarlos resulta muy interesante echarles un vistazo para apreciar cómo eran los sistemas operativos de la época.



  2. Forma fácil: Bajarse una imagen de disco con todo instalado. Tenéis una en www.shocking.com/~talon/pdp10 (este enlace ya no está activo, la dirección es ahora www.steubentech.com/~talon/pdp10). Yo la he probado y funciona, pero el resto de este artículo se basa en una imagen obtenida mediante la "forma difícil". Usando la imagen precompilada el proceso será casi idéntico al aquí descrito, pero puede ser necesario algún pequeño cambio.






4. Metiendo los fuentes en el ordenador emulado.



Ahora que tenía un PDP-10 funcionando necesitaba una manera de pasar las fuentes al ordenador emulado, pues la idea de teclear los más de 300Ks de código y datos no me resultaba demasiado atractiva. Por suerte encontré un programa capaz de volcar ficheros a una imagen de cinta de backup utilizable por el emulador. Se llama backwr.



El procedimiento a seguir sería:




  1. Bajarse las fuentes de advent del ifarchive.



  2. Bajarse la utilidad backwr de ftp.stacken.kth.se/pub/pdp10/backwr



  3. Una vez descomprimido todo y compilado el backwr (con make ) ejecutar ./backwr cTf advent.tap adven.f4 advn2.f4 adven.dat . Con esto volcamos los ficheros en un formato reconocible por la unidad de cinta emulada.




Para mayor comodidad, y para facilitar la vida a los usuarios de Windows, he colocado el fichero en advent.tap (pulsar con el botón derecho sobre el enlace para salvarlo si el navegador os muestra el contenido del fichero en lugar de abrir una ventana de diálogo para la descarga). He subido también la utilidad backwr a la zona de descargas por si dejara de estar disponible en la red.




5. Restaurar, compilar y ejecutar.



Ya casi estaba. El problema de la compilación pensaba haberlo resulto cuando encontré un hilo en GoogleGroups donde alguien explicaba el proceso con bastante detalle. Por desgracia dicha explicación era demasiado vaga en un punto: "Utilizar la utilidad BACKUP del TOPS10 para cargar los ficheros". Pues bien, tenía el emulador, el compilador de FORTRAN, instrucciones para la compilación, una cinta con los fuentes... ¡pero no sabía cómo utilizar la utilidad de BACKUP para traerme los ficheros al disco duro de trabajo!



Me leí un montón de fragmentos de manuales arcaicos, pero en todos daban demasiadas cosas por supuesto, y nada parecía funcionar. Decidí entonces pasar de la teoría a la práctica. Después de estudiarme varios documentos con sesiones de TOPS10 conseguí finalmente, a base de intuición-prueba-error, dar con la secuencia de comandos que necesitaba. Una vez cargados los fuentes la compilación no fue difícil. Y, tras cuatro dias de trabajo, pude disfrutar de advent tal y como fue concebida en 1976.



Aquí va lo que falta para completar el puzzle. Un log de mi sesión de compilación en el PDP10, profusamente comentado: compilaradvent.txt.





6. WELCOME TO ADVENTURE!! WOULD YOU LIKE INSTRUCTIONS?



"Cuando hallabas una zona nueva de tierra desconocida, sentías como si de verdad estuvieras allí, descubriéndola por ti misma. Se tiene todo tipo de sensaciones que no obtienes cuando simplemente lees."


Roberta Williams, hablando de advent en una entrevista de 1984.




7. Actualización: la versión de Crowther.



En agosto de 2007, Dennis G. Jerz publicó un extenso artículo llamado Examining Will Crowther s Original “Adventure” in Code and in Kentucky, en el que detalla las conclusiones de sus investigaciones sobre advent. El texto, extremadamente interesante y muy bien documentado, revela varios aspectos que se desconocían sobre el programa. Por ejemplo concluye que el código de Crowther data, efectivamente, de 1975-76, pero que Woods comenzó a trabajar en su versión en 1977 (y no en 1976 como el propio Woods creía hasta que Jerz se puso en contacto con él).



Con todo, lo más sorprendente del artículo es el anuncio de que en 2005 ¡se logró recuperar el código fuente original de Crowther! Examinando copias de respaldo de la Universidad de Stanford se localizó la cuenta que Woods tenía en el Stanford Artificial Intelligence Lab por aquel entonces, y entre esos datos había varios ficheros con las primeras revisiones de Woods y el código original de Crowther. Dichos ficheros están preservados en www.ifarchive.org/if-archive/games/source/adv_crowther.zip (en el archivo comprimido, los ficheros advf4.77-03-11 y advdat.77-03-11 son la versión de Crowther).



El proceso para compilar y ejecutar dichos archivos en un simulador de PDP-10 sería similar al descrito más arriba. Además, desde la distribución R 1.4, la imagen de disco para PDP-10 que se ofrece en //www.steubentech.com/~talon/pdp10/
incluye ya la versión de Crowther compilada por lo que basta descargar dicha imagen y ejecutarla en un simulador. La misma página ofrece un log de una sesión de emulación a modo de ejemplo.



Postdata: En la versión de Advent original existía un casi olvidado modo especial de mantenimiento (llamado MAGIC MODE), que desapareció en la mayoría de las conversiones posteriores. Para acceder a dicho modo hay que superar una enrevesada prueba de autentificación que incluye la introducción de una clave que es necesario calcular en tiempo de ejecución. Tras examinar el código en Fortran he logrado descifrar el algoritmo que genera dicha clave, y he programado una pequeña utilidad que hace el trabajo por nosotros. Incluye instrucciones, y podéis encontrarla en la zona de descargas. También existe una versión en línea.



Autor:
Texto: Colossus




Consultar artículo original en los antiguos foros

Volver a “Articulos”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados