Los implicados de alguna manera en este proyecto han sido:
race8086, luiscoco, dancresp, garillete, pser1 (Realmente el que sabe programar Dragon en assembler), jrodriguezv,
uroboros, Chema, Silicebit, gflorez, floppysoftware, blackhole y no me olvido de Minter quien nos puso el buen humor y un servidor, ron.
Creo que lo mejor de este proyecto es que está entero y vero a la vista. Cualquiera puede verlo y seguirlo desde el principio, el resultado es el que es y dudo que se pudiera hacer mejor, al menos con los medios, herramientas y conocimientos a excepción de pser1. No es pretensión abordar aspectos demasiado técnicos en este texto, serviros de los hilos que os citamos para consultar todo aquello que os llame la atención, quizá ahora desde la distancia lo veamos como un todo, pero os aseguro que el puzzle era complejo a más no poder. Menudo reto !!!
El Foro de RetroWiki en donde está todo el análisis, desarrollo y conversión es este: http://retrowiki.es/viewforum.php?f=84
Hace dos años, el 29 de Julio de 2014, se hacía de alguna forma el anuncio que íbamos a mirar de abordar este proyecto. Han trascurrido dos años y en este hobby las cosas han de ir sin prisa pero sin pausa. En algunos casos no se llegan a materializar ciertos proyectos muy deseados, pero en este en particular hay que decir que ha terminado con final feliz gracias al esfuerzo y dedicación de Pere Serrat ( pser1 ) quien de manera totalmente incondicional y altruista nos ha cautivado a todos y es uno de los mejores ejemplos de afición y de tesón.
Inicialmente la idea surgió de un post que había creado anteriormente en el tiempo en el que preguntaba que había pasado con la versión de Dragon de la archifamosa aventura The Hobbit, desarrollada por Veronika Megler y Philip Mitchell de Beam Software en 1982 y publicada por Melbourne House.
http://retrowiki.es/viewtopi ... 98&t=200031247
Y referente a esta investigación la última información que llegó nos vino de la mano de Uroboros:
Beams Dragon game ports were done by Dieter (?)
Platform/s: Dragon 32
Con esta información rastreamos la red y finalmente pudimos concluir que en todos los sites aparece referenciada la versión de Dragon 32, pero es que no hay absolutamente nada, NADA. Tal versión no se llegó ni a terminar ni a comercializar, el Dragon se quedó sin su versión Hobbit.
Y a partir de aquí se formó un frente con race8086, luiscoco y yo. Miramos las opciones desde ZX Spectrum y fue cuando pser1 se sumó y dijo :
me encanta la idea de hacer una aventura (nueva o al estilo de otra conocida) para Dragón año 2014
y se encendieron todas las luces, todas las alarmas, todas las válvulas empezaron a echar vapor !!!. POR FIN un usuario con conocimientos de 6809 ponía luz y aclaraba los conceptos y las ideas del desarrollo. Enseguida chema, dancresp, silicebit, uroboros, floppysoftware y otros pusieron su grano de arena.
A la vista está que era algo muy grande, terriblemente complejo y con mucha labor por delante. pser1 nos brindó su experiencia y su sabiduría, consiguiendo liderar el proyecto no sin muchos problemas, poca ayuda y tedio ante tal magna obra.
Tras finalmente poner encima de la mesa que la pretensión consistía en portar la versión de Z80 para ZX Spectrum a assembler MC6809 en Dragon, se dejaron de lado las propuestas alternativas y arrancó la fase de desemsamblado y estudio.
Para garantizar que pudiera funcionar sin tanta limitación pser decidió que la primera versión por cuestiones de espacio y de organización, además de la inclusión de imágenes iba a ser imposible de ejecutar sobre un Dragon 32 y se propuso el Dragon 64 con controladora de disco como sistema y requerimiento básico para que The Hobbit pudiera desenvolverse sin problemas.
Todos nos pusimos de alguna forma a investigar, aportando mucha información y sobre todo intentando entender en si la magnitud del proyecto, ni iba a ser fácil, ni rápido ni bonito.
Al mismo tiempo jltursan comenzaba a aportar las primeras soluciones y como empezar a abordar el asunto gráfico, en Dragon aunque con limitaciones, era viable.
Mientras tanto, desensamblando Z80 y procurando una versión 100% funcional compilable con PASMO, nos hicimos con lo que consideramos que iba a ser nuestra versión incial, pero muchos cambios iban a venir ya que en modo de alta resolución en Dragon los colores son un handicap y dado que el espacio estándar del prompt original de Dragon se iba a quedar insuficiente, se decidió que la presentación del juego se hiciera en modo gráfico usando el mismo juego de caracteres que el Sinclair ZX Spectrum.
Las imágenes que en la versión de Spectrum se van dibujando en color, jltursan las extrajo de la versión CGA de PC y acordamos que estás iban a ser cargadas desde disco.
Llegamos a la parte en donde comenzaba el análisis de todo el desensamblado de Z80 para Spectrum, aquí es donde race8086 y chema y yo comenzamos a identificar los bloques y de alguna forma nos empezamos a asustar porque aquello daba miedo. Luis diseñaba tools para extraer todo lo que fuera susceptible de necesitar.
Pero llegó pser1 al rescate, como siempre, de forma ordenada y clara nos preconizó con total fidelidad como iba a ir la cosa.
pser1 escribió:estoy mas liado que la pata de un romano, pero el tema es suficientemente interesante, así que vamos a comentar:
El mapa de memoria indicado se supone que es para Spectrum, ya que en Dragon está prohibido cargar nada a partir de $7FFF
El Basic empieza en $8000 hasta $BFFF y luego viene el DOS desde $C000 hasta $DFFF
Si vamos a utilizar PMODE 3 para gráficos, esto se puede llevar hasta 6144 bytes ($1800)
Veamos, el mapa de Dragon:
$0000 - $03FF variables de sistema y buffers de caset, rs232 y otras hierbas
$0400 - $05FF pantalla de texto
$0600 - $0BFF se lo come el sistema de disco (o hay que prescindir de él para liberar esta parte y cederla a los gráficos)
$0C00 - $23FF para los gráficos en PMODE 3 pantalla completa (veremos necesidad real)
quedaria libre para código Basic y ensamblador:
desde $2400 hasta $7FFF o sea: $5BFF que son solamente 23551 bytes
O sea que ya podemos irnos apretando el cinturón cantidad si queremos que sea compatible con Dragon 32 (que muchos usuarios tienen)
Loa usuarios de Dragon 64 podrían pasar a mode 64 mediante EXEC48000
cosa que les ofrece 16kbytes adicionales mas los ocupados por el DOS que se pierde (por defecto)
Esto daría: 23551 + 16384 + 1536 = 41471 bytes
A mi, personalmente, 40K de código máquina me parece una exageración a menos que contengan gráficos embebidos.
La verdad es que con poco código se pueden hacer maravillas (con el 6809 me refiero)
Así que como ya os advertí, esto no ha sido ni fácil ni un camino de rosas, al contrario... el primer flash vino cuando pser1 nos dijo:
pser1 escribió:me descargué el comprimido de race8086 y si antes dije que 40 K de código máquina me parecía una pasada, ahora lo veo 1000 veces mas pasada!
Ya se podía percibir que era algo descomunal. Pese a tener prácticamente todo en contra comenzó nuestra particular "aventura".
Llegados a este punto race8086 nos proporciona un fuente ASM Z80 de Spectrum con la versión The Hobbit 1.2 que ensambla y genera un binario 100% idéntico a la versión V1.2 original. Con las ideas claras de donde se venía y hacia donde se quería llegar empezaba el particular calvario del análisis...
Es muy difícil explicar y hacer comprender todo el trabajo que hay detrás para que podamos comentar toda la historia del desarrollo. No obstante, al estar todo publicado si tenéis curiosidad lo podéis leer cuando queráis.
Se abrió un tiempo para consultas técnicas ( ensamblador Z80 / Spectrum ) en la que a mi opinión nos faltó ayuda y colaboración, pero de eso ya tendremos tiempo de hablar en otro momento. Del mismo modo se ponía en marcha la Conversión de Código para 6809 y en paralelo el análisis. jltursan, race8086, luiscoco, pser1 y en general todos, nos volcamos con el análisis y al ver que este progresaba es cuando se le pidió al gurú que tomara el control y organizara al equipo.
En ese momento el proyecto se dividió en tres lineas: A grandes rasgos; La parte del interfaz ( totalmente controlada por pser y jltursan ), la parte del "behaviour" o comportamiento de la IA, junto a los scripts, al parser ( Inglish ), diccionarios, vocabularios, reglas y a las rutinas de control, que siempre iban a estar directa e inversamente relacionadas con el ensamblado en 6809 y con las partes de programa y la combinación de las mismas ( no iba a ser nada fácil ). También había que acometer como gestionar la base de datos de mensajes.
Por tanto, íbamos a necesitar que alguien identificara y explicara como estaban hechas las rutinas de análisis de órdenes del usuario ( para que nos entendamos, el parser ), la rutina que genera frases a partir del diccionario ( descripción de acciones de personajes, etc ) y la IA de los personajes.
El desarrollo continua y ya podemos ir viendo las primeras pinceladas...
Muchas cosas iban a cambiar....
Para desarrollar The Hobbit en Dragon, pser1 utilizó las siguientes tools:
Código: Seleccionar todo
- editor de texto para la conversión de Z-80 a 6809 --- TEXTPAD (Helios Software Solutions)
- compilador en entorno PC: ASM6809 (Ciaran Anscomb)
como genero un binario con dos partes (el Basic y el DOS quedan en medio), utilizo
- cortar el ejecutable en dos partes (siempre igual longitud): GSPLIT (qdqsoft.com)
- cargar y salvar los binarios al fichero VDK de pruebas: XROAR (Ciaran Anscomb)
- ejecutar el programa uso el mismo XROAR
- debugar: GDB (es un proyecto GNU)
- y mucha, mucha paciencia
Y para poder comparar con el original: SPECEMU (Mark Woodmass)
que permite ejecutar paso a paso, poner breakpoints, en fin lo normal para debugar.
Durante la fase de análisis no parábamos de descubrir todo tipo de triquiñuelas, en fin, ahí hubo momentos clave que se pudieron resolver exitosamente gracias a la pericia de pser1 con el assembler del 6809. Aunque inicialmente la pretensión era la de hacer funcionar The Hobbit sobre un Dragon 32, esta opción quedó en aquel momento descartada ya que iba a ir tan tan justo que no iba a caber.
Pero mientras todo esto pasaba, el análisis, desarrollo y conversión continuaba, pser1 nos sorprendía a todos al descubrir el trozo de ROM de Basic del Spectrum que copia entre áreas. jltursan, Luis y pser1 trazan las líneas maestras para alojar el programa en Dragon. Comienza a verse algo.... comienza la fase de documentación.... esto ya comienza a hincharle a todos la cabeza, pero la emoción de hacerlo nos sigue impulsando a continuar...
pser1, Luis y jltursan se llevan la palma del esfuerzo. Increíble. Estos cracks solitos resolvieron los enigmas de la piedra roseta. Habían aprendido como funcionaba The Hobbit por dentro. Ahora venía la parte de convertir todas esas ideas y conocimiento en los cimientos del nuevo programa que estaba por venir. Estaban haciendo historia, estaban haciendo ingeniería inversa a mano, a manija, a la vieja usanza. Enseñando, comentando y documentando lo que iban viendo y haciendo, todos los hilos del proyecto son para enmarcar por la calidad y la cantidad de información. Todo en perfecto Castellano, a ver quién supera eso.
Desde Octubre de 2014 hasta la Navidad y entrado enero de 2015 trabajan incesablemente resolviendo todos y cada uno de los retos a los que se van enfrentando, el proyecto estaba en marcha. Todos los días había muchas novedades y la cantidad de información os aseguro que da para hacer un libro.
Así que ya entrado 2015 dan por terminada la documentación del assembler Z80 original y se comienza la conversión, más o menos casi todo estaba etiquetado y documentado, pero eso, casi todo. Aún había un terreno inexplorado en el que nos íbamos a adentrar y de alguna manera había que romper el hielo.
En la conversión de código la ayuda de Chema fue muy importante, porque al haber portado cosas desde Z80 a 6502 y aunque este no es el 6809, contaba con la experiencia de saber que hacían ciertas rutinas.
El 14 de enero de 2015 pser1 sorprende a propios y extraños ya que el interfaz del programa aparece remozado con la apariencia del ZX Spectrum... esto se ponía realmente interesante.
Este era el estado del port a 17 de febrero de 2015.
pser1 escribió:Para hacernos una composición de lugar, detalo a continuación el contenido del directoro en el que tengo guardados los ficheros separados que contienen
solamente las rutinas de cada bloque o sección:Código: Seleccionar todo
239.594 01 - Start y MainLoop - convertido (557 lineas).txt
44.089 02 - 6DD6 y 6E97 - convertido (795 lineas).txt
41.933 03 - SayWhat y PrintMsg - convertido (703 lineas).txt
20.477 04A - IfB17AZeroClearAndJmpTable75D2 (350 lineas).txt
17.871 04B - Despacho rutinas tabla 75D2 mediante JMP ,X (314 lineas).txt
24.763 04C - Despacho rutinas tabla 8271 mediante JMP ,X (394 lineas).txt
19.768 05A - ExecuteUsrCommandsBilboEvents y DescribeActionOnScreen (303 lineas).txt
39.138 05B - AnalyzeUsrCommand (684 lineas).txt
37.086 05C - ExecuteGetB6FB y ExecuteAction (591 lineas).txt
49.340 05D - ProcesBilboEvents (771 lineas).txt
57.606 06 - Llamadas desde OBJETOS (979 lineas).txt
41.437 07 - Llamadas desde SCRIPTS (658 lineas).txt
79.436 08 - Llamadas desde ACCIONES (1433 lineas).txt
Sumando las líneas indicadas en cada fichero, se obtiene un total de 8.532
Están convertidas un total de 2.055 así que hay que aceptar que solamente tenemos un 24% de avance en cuanto a código se refiere
Está claro que en el apartado de datos con la currada que nos hicimos al principio, está hecho el 100%
El 10 de Marzo de 2015 esto es lo que ya se podía ver de forma tangible.
Se hicieron pruebas a color....
Se hizo de todo lo imaginable respecto al video y al color y era momento de tomar decisiones.
https://www.youtube.com/watch?v=w26OLlvv0bw#t=29
El 20 de octubre de 2015 se iban cerrando las consultas técnicas sobre Z80. El 19 de Abril dentro de la nueva versión 3.0 de los foros de RW, se decidió reabrir el desarrollo, habían transcurrido 6 meses y en este tiempo solo pser1 sabe que paso
http://retrowiki.es/viewtopic.php?f=84&t=68
Retomada la actividad, pser1 nos presenta una versión realmente evolucionada. El 8 de junio sabíamos por pser1:
pser1 escribió:He estado muy liado con la conversión de la ROM del cartucho Orchestra90 del CoCo para el Dragon-64.
Hace menos de quinze dias dí por cerrado el proyecto en cuanto comprobé que todo el sistema de disco
funcionaba correctamente.
Una vez dado el carpetazo, abrí de nuevo los ficheros del Hobbit y empecé donde lo dejé ... o sea perdido en el #%&& parser.
Esta vez me decidí por debugar el programa al mismo tiempo en ambos entornos, así que abrí XRoar con GDB
en una ventana y el SPecEmu en otra, puse un breakpoint en ambos en el punto siguiente a la recepción de comandos
de usario y fuí trazando PASO a PASO hasta que encontré cambios de valores o saltos a diferente punto de código.
La verdad es que jamás habría encontrado los errores de conversión realizados.
Afortunadamente, a los tres días de haberme re-incorporado me contactó James McKay (del mundo CoCo, autor de Glove),
interesándose de nuevo por el estado del programa.
Le envié la info de que disponemos on-line y, a pesar del problema que significa para el el hecho de que todo esté
en castellano, se ha ido adaptando y la verdad es que entre los dos hemos avanzado mucho. Creo que podemos dar por
solventados los problemas del parser ...
Ahora estamos en fase de pruebas para detectar otros defectos del parser antes de añadir más código al fuego (perdón, juego)
Os adjunto el VDK de la última versión así como el fuente y los dos ficheros de datos, el primero de los cuales tuve que
modificar pues tenia un dato (2 bytes) invertidos. Maldito rollo de bigendian ó lowendian
En el zip adjunto encontraréis un fichero que detalla los bugs que se han solucionado desde la última vez.
Seguiremos en contacto conforme se produzcan mejoras sustanciales.
Recordad que hay MUCHAS rutinas no implementadas que están siendo substituidas por código que devuelve OK como si todo
se hubiera realizado, pero obviamente no ha sido así. Los resultados pueden ser cualquier cosa.
De todas formas, si podéis hacer pruebas entrando órdenes para detectar cosas que no funcionen como en el original
sería de gran ayuda ...
Y desde ese momento hasta el 24 de Julio ha sido un sin parar de probar y probar, ensayo y error, depuración, depuración y más depuración... ya podíamos ir viendo que el juego ya era real y hasta jugable, no sin errores o bugs, pero pser1 en su incesable e incansable propósito sabía que estábamos cerca.
La cosa avanza y a 29 de Junio de 2016 este es el estado del juego:
pser1 escribió:- "25 - HOB0815b1.VDK" - el disco para emulador o para grabar en uno real.
- "HOBBIT15B1 - added code fromU07.txt" - la última versión del fichero fuente
- "Memory Map - The Hobbit x 6809 - 2016-06-29.txt" - mapa de memoria ... ya va quedando poco espacio!
- "Project situation - The Hobbit 2016-06-29.txt" - estado actual, hecho ya un 88%, solo faltan unas 1040 líneas!!
- "Project Evolution - The Hobbit 2016-06-29.txt" - un breve resumen de su historia
Para rematar la jugada, el día de mi cumpleaños esto es lo que estuve haciendo...
pser1 escribió:estaba pensando que tal vez tu, Rodrigo, que dominas más este juego, podrías
priorizar las pocas rutinas que me quedan por implementar.
Si te fuera posible, podrías añadir delante de cada una una cifra del 1 al 42
indicando el orden de conversión aconsejado ...
Yo arranqué ayer y convertí mas de la mitad del fichero que había preparado.
Verás que hay una línea en blanco que divide las rutinas en dos bloques.
La parte de arriba son las rutinas que tengo en mi fichero de trabajo actual.
No hay problema en añadir las de la parte de abajo que consideres necesarias ...
tal vez en sustitución de alguna de las de arriba que marques con cifra alta
para ser convertida al final
Esto marcaba que el desarrollo sobre 6809 estaba casi completado, que el programa funcionaba, que era estable y que todo apuntaba a que en breve estaría listo...
Así que dejamos de emular y directamente al Dragon
Y a partir de ese momento hasta el día en el pser1 considero que la versión H0816b1 podía ser la primera beta, este es un pequeñísimo resumen de lo acontecido.
El 20 de julio de 2016 fui capaz de jugar una partida entera sin ningún error y sin que se presentara ningún BUG, estaba claro, el Hobbit entraba en su fase de pruebas final.
Ha sido extraordinario, ha sido un proyecto fantástico. Hemos arreglado un craso fallo de la historia, ahora tendrán que corregir en todos esos sitios de internet donde dicen que hay versión de Dragon que ahora si la hay, la de pser1, que actualicen sus enlaces.
Para terminar, quisiera pedir desde este pequeño espacio una ovación y todo nuestro reconocimiento y gratitud a PSER1 por habernos dado y enseñado tanto a cambio de nada. Por hacer que se haga justicia con los Dragon y por permitirnos disfrutar tanto de su sabiduría y compañía.
Ha sido fantástico, se que aún queda hasta que salga la versión FINAL, estamos todos contigo Pere. GRACIAS INFINITAS