lunes, 19 de octubre de 2020

Recuperación de código MBASIC para Apple II desde listados

Suele ocurrir que hayamos perdido el material en soporte magnético (ya sean cintas o disquetes) de programas desarrollados en los años 80. Si entonces fuimos algo cuidadosos (cosa habitual, porque era fácil  tener problemas con los soportes y los lectores de la época) es posible que conservemos el código en formato papel, más parecido al pergamino que otra cosa. Llegados a este caso, y si queremos recuperar esas joyas de la historia (o que simplemente les tengamos cierto cariño), no tenemos más remedio que optar por una de dos opciones: a) ponernos como locos a copiar código (tarea nada agradecida, sobre todo con presbicia, que sin duda tendremos si el código de los 80 es nuestro), b) echar mano de la tecnología para automatizar en lo posible el proceso. 

Cuando empece a recuperar el material de los 80 para MSX seguí el camino "a", no por falta de usar tecnología, sino porque en su día no di con la combinación adecuada y de forma fiable. Ahora sí lo he conseguido con la "b", de forma bastante fiable, robusta y práctica. Lo que no quita para que el proceso no sea ni mucho menos automático, pero sí mucho más productivo que la otra opción. 

Para ilustrar el proceso vamos a partir del programa de matriculación de alumnos del I.B. Jiménez de la Espada que desarrollé sobre 1985-1986 en lenguaje MBASIC para el ordenador Apple IIe con sistema operativo CP/M. Fue el primer programa de matriculación que se utilizó en el instituto, y yo debería de tener unos 16 años. De entonces conservo un tocho de papeles que son los listados de los programas, que intuyo que son versiones finales, y lo sabré cuando finalice al 100% el proceso de recuperación. El aspecto de los mismos es el siguiente:


Pues bien, en esta entrega voy a describir el proceso que he seguido para recuperar dichos códigos. Aunque en este ejemplo utilizo código BASIC de un Apple II, el proceso es aplicable a otros sistemas de la época, y lo estoy utilizando también tanto para BASIC y ensamblador Z80 de MSX.

Como se puede observar en la imagen anterior, se trata de una impresión matricial, donde el papel está amarronado (en este caso habiendo estado muy bien conservado, sin que le diera la luz), y con la tinta bastante descolorida. Lo primero antes de nada es tratarlo digitalmente para conseguir un mayor contraste. Para este trabajo he utilizado la herramienta Graphic Converter, que es una especie de Photoshop en pequeño, y cuya herramienta "Niveles Automáticos" produce el siguiente resultado:


El siguiente paso es utilizar un programa OCR para extraer el texto de la imagen. En la actualidad hay OCRs a patadas, muchos de ellos gratuitos y con una calidad de reconocimiento bastante aceptable. El problema que presentan la mayoría es que no están preparados para reconocer este tipo de caracteres, y producen resultados tan malos que no sirven para nada. Y en esas estaba atascado hasta que por casualidad  leí que Google tenía un OCR gratuito integrado en su herramienta. Me pongo a ello. Subo la imagen a una carpeta de mi Drive de Google. La selecciono y la abro con la herramienta Google Docs. Esta detecta automáticamente que es una imagen y extrae de la misma todo el texto en bruto, sin saltos de línea y dejando un único espacio en blanco, produciendo el siguiente resultado:


Ooooooh !!! Pues no es un código directamente ejecutable, pero el texto tiene bastante información para ahorrarnos un trabajado tremendo. Como se puede observar, se han cambiado algunos símbolos, han desaparecido otros, y de vez en cuando alguna letra o número se han alterado. La confusión del cero "0" y la letra "O" es un clásico. También el uno "1" y la letra "I". Llegados a este punto, usar una herramienta simple y adecuada para la edición de código es muy interesante. En este caso utilizo el editor de programación Geany, que incluye coloreado de sintaxis para una gran cantidad de lenguajes de programación. En concreto incluye BASIC, lo que nos va a hacer la tarea más sencilla indicándonos visualmente muchos errores de transcripción. Las palabras clave de BASIC las colorea, por lo que si alguna no sale en color, es que hay un error. Así se cazan las alteraciones de GOTO, por ejemplo, donde una de las letras es un número. Es un BASIC genérico, y no lleva colorización de comandos específicos de MBASIC o AppleSoft BASIC, como VTAB y HTAB, que serán un porcentaje muy pequeño del total de comandos que se usarán. 

Copiamos el texto de Google Docs a Geany, e introducimos un salto de línea antes de cada número de línea de código. Algo que se hace muy rápida y sencillamente a mano. El resultado es el siguiente:


Ya solo nos queda trabajarlo un poquito, verificando con el listado en papel. El trabajo requiere un poco de dedicación, pero la productividad es muy grande. Una vez verificado, el resultado es el siguiente:


Con todo y con eso, todavía tendremos algunos errores, pocos, que se nos habrán escapado, y, además, tenemos que pasarlo a un formato que nos permita cargarlo en un ordenador de esa época. Para esto tenemos alguna alternativa muy tediosa, que incluye tener que hacer toda la depuración en al Apple II, cuyo editor de BASIC es más bien pedestre, o bien utilizar un emulador de la máquina en sí. En este caso decidí usar el emulador Virtual II que es una maravilla. Aunque se puede utilizar de forma gratuita con ciertas limitaciones, la versión completa de pago es fundamental para este trabajo. Sólo con la facilidad y esfuerzo que nos ahorramos se paga sólo. Entre otras opciones permite emular la tarjeta Microsoft SoftCard CP/M, que es necesaria para ejecutar el código MBASIC. El proceso de trabajo es muy sencillo. Cargamos una imagen de disco 5 1/4" con el Sistema Operativo CP/M y el intérprete de MBASIC. Hay un montón de webs para descargar las imágenes. Entre ellas la Apple II CP/M Library y la Apple II Asimov. Aparte de la imagen que necesitamos hay literalmente cientos de imágenes. Ejecutamos el emulador y cargamos la imagen de CP/M. Al arrancar entramos en el intérprete de MBASIC, como se muestra en las siguientes capturas de pantalla del Virtual II:


Tan solo nos queda hacer copia y pega del código desde Geany hasta Virtual II. El pegado se hace simulando la entrada desde teclado, por lo que es equivalente a teclear el mismo código en la interfaz del MBASIC. Este lo entiendo, a todos los efectos, como si lo estuviéramos tecleando. Esto es mu conveniente por dos razones. Por un lado podemos pasar todo el texto de Geany al intérprete de MBASIC de una tacada. Ya solo esto es fundamental, tal y como podemos ver en la siguiente captura:


Pero una vez que lo tenemos copiado, donde verdaderamente podemos alcanzar unas cotas bastante altas de productividad es cuando ejecutamos y depuramos. En lugar de editar en el emulador, editamos en Geany cada vez que detectemos un error, y hacemos copia y pega solamente de las líneas que acabamos de modificar. Verdaderamente cómodo. Después de sucesivas iteraciones con el OCR, con el editor y con el emulador conseguimos recuperar el código sin problemas. ¿Que cómo queda el resultado? Pues un programa de gestión no es muy agradecido, pero bueno, aquí van un par de capturas de pantalla:






jueves, 8 de octubre de 2020

Modernización de un Apple IIc

Después de una temporada sin cacharrear con ordenadores antiguos, ahora le toca el turno a un Apple IIc que tenía guardado, fabricado en 1986. En mi época de bachillerato aprendí a realizar programs de gestión (con bases de datos) en un Apple IIe. Como aún no tengo uno (en su día eran carísimos), pretendo recuperar los programas que hice en su día con el Apple IIc, que los conservo sólo impresos en papel. Para poder recuperarlos es imprescindible (para mi salud) poder interactuar con el Apple IIc y con mi ordenador de trabajo. Buscando en Internet encontré la unidad Floppy Disk Emulator de BMOW (Big Mess 'O Wires), que permite utilizar una memoria SD como almacén de floppys de 5 1/4", que permite ser instalada en un Apple IIc (que no tiene puertos de expansión como el resto de los Apple II).

El dispositivo es muy cuco. Lo compré con su caja, con el adaptador Iic, y con un emulador de sonido (una tarjeta con un relevista que se activa al ir accediendo a los distintos sectores del disco).


Lo recibí a los pocos días de comprarlo, y me puse manos a la obra. Primero desmontar el ordenador. La tapa superior es fácil quitarla, pero hay que llevar mucho cuidado con las pestañas de plástico, que al tener tanto años ya no son tan flexibles. Una vez quitada la tapa accedemos al interior.


Para instalar el adaptador sólo hay que desconectar el cable de la unidad de disco, insertar la placa nueva y conectar el cable original por el otro lado. 



Esta unidad tiene como opción la capacidad de arrancar el ordenador con el floppy original o con el emulador. Para hacer la selección tenemos un cable que hemos de sacar fuera del ordenador. Para ello se  puede utilizar el hueco de la ranura del conector DB del disco. El hueco es pequeño pero suficiente. 



Cerramos la tapa del ordenador. Conectamos la unidad emuladora y el simulador de sonido, configuramos la SD (me venía preconfigurada con el firmware de emulación de disco de Apple II). Una vez listos arrancamos el ordenador, seleccionamos el disco que queremos insertar y ... voilà !!!. El ordenador arrancando con el DOS 3.3 en la unidad D1 (emulada).



Además, podemos utilizar la unidad de 5 1/4" original a la vez, en este caso como unidad D2. Para probarlo inserto un diskette con un pequeño programa BASIC que he recuperado de un listado de 1986. Y así luce casi 35 años después.


miércoles, 12 de junio de 2019

aMazeing. Programa para generar juegos (1)

Después de copiar el listado del juego Cuarta Dimensión (que ya comenté en esta entrada del blog) me quedé con ganas de ver cómo funcionaba originalmente. Faltaba la parte en ensamblador, y los movimientos de los sprites eran muy burdos. Me decidí entonces a hacer una revisión del mismo y hacer un juego simple pero jugable. Sin embargo, me daba mucha pereza hacerlo al estilo ochentero.

La solución que se me ha ocurrido es programar la herramienta aMazeing, para generar automáticamente juegos con scroll horizontal a partir de la definición de los elementos más importantes: pantalla base, juegos de caracteres, y mapa del laberinto o cueva. Para ello he ido desarrollando una aplicación sencilla que está escrita en el leguaje de programación Java.

La aplicación está en un estado muy preliminar, por lo que iré describiendo los avances de la misma en otras entradas del blog. Y cuando esté terminada la subiré a GitHub.

De momento sólo permite especificar la aplicación en SCREEN 1, y podemos definir el juego de caracteres (patrones) así como los colores de los patrones, y definir el mapa del juego, estableciendo los patrones que aparecerán en las distintas posiciones del mapa. Ahora mismo sólo se puede generar código en BASIC.

Lo primero que se hace es ir editando la tabla de patrones, que en el modo de pantalla SCREEN1 tiene 256 caracteres diferentes, cada uno con dos colores: uno para la tinta y otro para el papel. Y los colores de los caracteres se agrupan en bloques de 8, por lo que tenemos como máximo 32 combinaciones de color diferentes. Se puede modificar la paleta estándar de MSX, que está formada por 16 colores distintos.



La edición de cada patrón es muy sencilla. Por un lado se modifican los pixels, indicando si son papel ("0") o tinta ("1"). Después se especifican los colores para la tinta y el papel.


Una vez que tenemos definidos los patrones, editamos el mapa, y situamos en el mismo los patrones que queremos que aparezcan. Todas estas tareas eran muy muy tediosas en su día, y contar con una herramienta para poderlo hacer de forma gráfica es muy conveniente.


Finalmente, generamos el código del juego. Ahora mismo sólo genera código BASIC, bastante optimizado, pero como se puede apreciar, con desplazamiento muy lento.



El código del programa generado está disponible en GitHub:
 https://github.com/humbertomb/mymsx/tree/master/amazeing/DIMENS41.BAS

Cuarta Dimensión. Juego de scroll horizontal

Mi tercer programa con cierta complejidad (1987), Cuarta Dimensión, juego tipo scroll horizontal programado en BASIC y ensamblador Z80 para ordenadores MSX1. No se publicó, y no tuvo ninguna distribución. Fue más que nada una prueba de concepto.

Como el resto de los programas de la época, no lo conservo en forma digital. Sólo he encontrado un listado apergaminado con la parte del programa en BASIC. Y no he encontrado nada de la parte en ensamblador, que es la que realiza los movimientos. Con paciencia lo he ido tecleando en mi Sony HB-700S y he conseguido recuperarlo algunas cosas. La versión del listado no es muy estable, y he te nido que reprogramar el desplazamiento en BASIC.

Pasemos a hablar del juego. Es el típico juego de scroll en una cueva/laberinto, muy sencillo de aspecto y sin un argumento de juego desarrollado, ya que la idea era aprender la técnica para hacer desplazamientos en ensamblador con manejo directo del VDP en el modo SCREEN 1. No tiene música, y el único efecto sonoro son las explosiones. Este juego lo hice con 17 años, cuando estaba aprendiendo a programar en ensamblador, y toda la parte gráfica la hacía pintando primero en una libreta con hojas cuadriculadas.



El código está disponible en GitHub:
 https://github.com/humbertomb/mymsx/tree/master/dimens4


lunes, 6 de mayo de 2019

Crazy Pilot. Juego de habilidad

Mi segundo programa con cierta complejidad (1985), Crazy Pilot, juego tipo laberinto programado en BASIC para ordenadores MSX1. No se publicó, y su distribución fue muy limitada, solo entre mis amigos.

Como el resto de los programas de la época, no lo conservo en forma digital. Sólo disponía de un listado apergaminado. Con paciencia lo he ido tecleando en mi Sony HB-700S y he conseguido recuperarlo completamente. La versión del listado era de las últimas, ya que sólo contiene un par de errores pequeños que he corregido.

Pasemos a hablar del juego. Es el típico plataformas en laberinto, muy sencillo de aspecto. El juego estéticamente es sobrio, los efectos sonoros son adecuados (explosiones, disparos, etc), y como música un fragmento de la ópera Carmen (Georges Bizet). Técnicamente no es muy complejo (no hay ensamblador ni manejo directo del VDP), pero sin embargo tiene muchos elementos de jugabilidad, y es un juego que no es sencillo de jugar ya que requiere cierta habilidad. Este juego lo hice con 15 años, justo después de haber realizado Barcelona'92.

El juego consiste en dos escenarios, que se repiten según los vas pasando. El objetivo es pilotar un helicóptero a lo largo de unas cavernas, recogiendo los radares y evitando ser alcanzado por la artillería y misiles enemigos. Si eres alcanzado o te chocas con las paredes pierdes una vida. La partida acaba cuando pierdes todas las vidas. Tanto los radares recogidos como los cañones destruidos dan puntos. 



El código está disponible en GitHub:
 https://github.com/humbertomb/mymsx/tree/master/crazypilot

lunes, 29 de abril de 2019

Simphony. Programa musical

Mi participación en el  II Concurso de Programas MSX (1986), Simphonyorganizado por Sony España, y cuyo premio se falló en 1987. Es una aplicación musical programada en ensamblador para ordenadores MSX1, y que cuenta con un pequeño cargador escrito en BASIC. Conseguí uno de los terceros premios de 100.000 ptas, bastante dinero para la época, que utilicé para comprarme un Sony HB-700S (yo el dinero ni lo vi, ya me llegó en especie). En la siguiente imagen aparece la nota de prensa con los resultados publicados en MSX Club de Programas nº 28 (1987).


Este juego lo hice con 16 años, e iba aprendiendo ensamblador a la vez que lo desarrollaba. Estaba bien para aquella época, pero con un poco más de experiencia y documentación se podría haber hecho algo más fino. Como nota anecdótica, el ordenador MSX en el que lo desarrollé tenía solo 16Kb de RAM, y tuve que pedir prestada una ampliación de memoria para poder ensamblarlo. Y el programa para ensamblar estaba escrito en BASIC. Y, por supuesto, nada de depurador. En aquella época todo lo escribía en papel, depuración también en papel, y cuando ya estaba más o menos clara la cosa, a picar tecla y a hincharse a cuelgues.

Poner el programa en marcha de nuevo ha sido un poco locura. No conservo nada de él, excepto el listado anexo al contrato que firmé con Sony. Más de 20 páginas en ensamblador sin etiquetas y una página en BASIC. Una vez descartada la opción del escaseado con OCR (por la poca fiabilidad en el reconocimiento de números hexadecimales), me puse manos a la obra tecleando el programa desde cero. El código BASIC lo tecleé directamente en el ordenador MSX. El código ensamblador, después de haber probado distintas combinaciones en el propio ordenador MSX, al final me decanté por hacerlo en mi Mac. Para ello usé el editor Geany, el ensamblador Glass (aprovecho para dar las gracias a su desarrollador), y el emulador OpenMSX.

Después de un laborioso proceso de depuración y etiquetado, conseguí hacerlo funcionar (y de paso solucionar algunos fallos del programa original). Desde luego nada que ver con el proceso de trabajo en los 80, que era muy muy penoso. No se si ahora tendría la fuerza de voluntad para desarrollar en esas condiciones. Me ha resultado muy entretenido volver a programar en ensamblador del Z80 después de 30 años. Está claro que es como montar en bicicleta.

El programa es de un uso relativamente sencillo. Tenemos dos teclados en pantalla (de dos y una octavas), y utilizamos el teclado del ordenador para tocas las notas, y en todo momento se nos marca cual es en los teclados de la pantalla. Además, dispone de varias opciones para aplicar algunos efectos de sonido y acompañamientos. El programa puede hacer sonar hasta tres notas simultáneamente (una por cada teclado mas el acompañamiento), debido a que ese es el número máximo soportado por el PSG de MSX. Tenemos opciones para grabar y reproducir las notas tocadas. Además, podemos salvar y cargar dichas secuencias en cinta.

Tanto el código fuente como los ejecutables están disponibles en GitHub:

https://github.com/humbertomb/mymsx/tree/master/simphony1

viernes, 26 de abril de 2019

Skram Omega. Juego tipo shooter muy rápido

Mi segunda publicación en la revista MSX Club de Programas nº 26 (1987), Skram Omega, juego tipo shooter programado en BASIC y ensamblador para ordenadores MSX1. 

Como en la práctica totalidad de los programas de aquella época, no co los conservo en forma digital. De este juego tan solo conservo un listado parcial (no encuentro ni la revista). Gracias a la preservación que hace la gente del MSX, he conseguido la revista en PDF y el código de la web de recopilaciones de Archivos MSX Basic. La verdad es que es increíble que 30 años después pueda encontrar este material.
Pasemos a hablar del juego. Es el típico shooter, muy sencillo de aspecto, con un formato adecuado para publicar en revista. El juego no va a pasar a los anales de la historia del videojuego por sus características estéticas y de jugabilidad, pero técnicamente tiene su aquel, ya que para conseguir velocidad de ejecución hay rutinas en ensamblador y acceso directamente a los registros del VDP. Este juego lo hice ya con 17 años, y se nota una diferencia técnica muy importante respecto al anterior juego Barcelona'92.


Una característica curiosa del juego es que tiene un scroll horizontal, pero en sentido de izquierda a derecha, justo al contrario de lo habitual, lo que añade mucha complicación a la hora de jugar. El movimiento es muy muy rápido, y hasta que se le coge el truquillo, las partidas pueden durar entre dos y cinco segundos. Llevamos un avión que tiene que esquivar unos misiles que le llegan de frente (muchos) y a la vez tiene que bombardear unos vehículos acorazados que están en el suelo. La partida finaliza cuando te quedas sin bombas (sólo tienes 50) o te alcanza un misil. Al acabar obtienes una puntuación según el número de blancos alcanzados.


El código está disponible en GitHub:
 https://github.com/humbertomb/mymsx/tree/master/skram

jueves, 25 de abril de 2019

Reparación de un Amiga 2000


Hace unas semanas, y después de haber puesto en marcha mis MSXs, decidí meterle mano a mi Amiga 2000, pensando en que no iba a estar en muy mal estado. Conexión de cables, monitor, etc; botón de encendido, muchísimo ruido, y ... nada. Pantalla completamente negra. Después de haber retirado todas las tarjetas de expansión y repetido el proceso varias veces, pasamos a consultar el manual (si, es siempre lo último que hay que hacer :-). Pantalla negra indica que puede ser algo relacionado con el microprocesador. Inspeccionado la placa se observa que tiene un aspecto peor que lamentable. La batería del RTC estalló hace tiempo, y el ácido ha corroído una parte importante de la placa, que es justo donde está el microprocesador y la ROM. Esto es algo muy habitual en estos ordenadores. Y ya tenemos pista para investigar. Fotografía del estado inicial de la placa.


Con la ayuda de mi hermano (en realidad gracias a mi hermano con un poco de ayuda mía), limpiamos toda la placa con alcohol isopropílico (como si lo regalaran, vamos, para una boda), y cambiamos la batería por una pila de botón. Revisamos un poco por encima el MC68000 con un osciloscopio, y tenemos señal de reloj (en la imagen un divisor por 10, de la frecuencia de reloj de 7.09MHz) y trasiego por los buses de datos y direcciones. 



Si hay vida, hay esperanza. Pero seguimos con la pantalla negra. Habría que seguir todas las pistas y soldaduras, al menos las del micro y las de la ROM. Para evitar sorpresas y retrasos, compro un micro y una ROM nuevas. Conseguir un micro de esa época y en buen estado es una historia. Pero lo conseguí sin tener que arruinarme. Las ROMs se siguen vendiendo nuevas y programadas en la actualidad. Diversas combinaciones de micro y ROM, con sus numerosos encendidos y apagados de ordenador. En todos los casos lo mismo: pantalla negra.



Aquí no hay más remedio que meter mano hasta el fondo. Desoldamos los zócalos del micro y de la ROM. Por suerte sólo estropeamos un pad (de los 88 posibles entre los dos zócalos). Manual de servicio del Amiga 2000 en mano, repasamos todas las pistas que van desde el micro a la RAM y a la ROM, pasando por los distintos buffers y selectores de banco de memoria. Encontramos dos pistas sin continuidad (debido a la corrosión), una del bus de datos, y otra del bus de direcciones en sentido a la ROM. Soldamos cables, soldamos unos nuevos zócalos con patillas torneadas, ponemos el micro y la ROM originales, encendemos, otra vez mucho ruido, nervios (por qué no decirlo), y ... , funciona. Aparece la pantalla de introducción de disco.



Introducimos un disquete de arranque y, ... , no va. Era obvio que no podía ir a la primera. Pero tampoco fue con los sucesivos discos que probamos. A revisar disquetera de 3.5" toca. Con ese tiempo es habitual que algo tengan. Como tengo varias de PC de la época, ni me molesto en reparar. Para adaptarlas al amiga hay que cambiar un puente y añadir una línea. Muy sencillo. Minucia para lo que ya llevamos. 

Vuelta a probar. Cablear, montar, disco de arranque y, ..., ahora si. El ordenador ha vuelto a vivir. Todavía quedan cosas por hacer, pero lo básico ya está hecho. Pues nada, a disfrutarlo un poco. Probamos una demo con música de Michael Jackson. Cómo se oye el equipo con unos altavoces con subwoofer amplificados, de los normales. En su día usábamos unos altavoces muy muy cutres.


Después del relax toca ir montando las diversas placas de expansión del ordenador: una aceleradora con un MC68EC030 a 40 MHz y 4Mb de RAM, un disco duro SCSI de 425Mb, una ampliación de memoria de 2Mb de RAM, y una tarjeta AT con un 80286 a 8MHz y 1Mb de RAM. Se van probando una a una, repasando la configuración de jumpers y demás (aquí fui muy blando, leí los manuales antes de ponerme manos a la obra), y al final todas acaban funcionado, excepto el disco duro, que incluso habiendo intentado una RCP de urgencia, no ha superado la prueba. Se da de baja. Pasamos programas de test para verificar los dispositivos, la memoria y las expansiones. Todo OK.


Como el disco duro SCSI está mal, y no hay forma de encontrar un disco SCSI con mínima confianza, decido comprar una tarjeta IDE que, además de permitirme usar un disco de PC, me permite añadir una unidad de CD-ROM y un adaptador IDE-CompactFlash. La compro en AMIGAstore.eu, que además de ser muy majos están en Lorca, a tiro de piedra de Cartagena. Alargamos cables de alimentación, añadimos nuevos, pasamos como podemos los cables planos y, tachan, redoble de los buenos, funciona todo.



Formateo y particionado del disco duro, instalación del Workbench 3.1, e instalación de mil utilidades, commodities, y demás chorradas por las que el Amiga se hizo famoso. Y ya está plenamente operativo el ordenador. Ahora a disfrutarlo.



NOTA. Esto que ocurre en una página de blog, en la realidad ha llevado casi dos meses de echarle muchas horas :-). Estad prevenidos por si a alguien se le ocurre hacer algo parecido.




lunes, 22 de abril de 2019

Barcelona'92. Juego de pruebas deportivas

Mi primera publicación en la revista MSX Club de Programas nº 3-4 (1985), Barcelona'92, juego de las Olimpiadas programado en BASIC para ordenadores MSX1
Esta pasada Navidad puse en marcha mi ordenador Sony HB-700S de 1988 (MSX2). Disquetera cambiada, placa de teclado limpiada, y limpieza general. El ordenador funciona bastante bien, aunque el puerto de juegos A tiene alguna conexión mala. Y el vídeo pierde la sincronía tras un reset. Pero por lo demás, estupendo para el tiempo que tiene.  
Tras varias mudanzas en pésimas condiciones, no conservo cintas con programas de esta época. Y sólo conservo listados en papel de alguno de los programas que hice, más parecidos a un pergamino que a un listado.
Como aperitivo de vuelta al MSX, he comenzado desde lo más bajo. He copiado a mano el listado del juego, y lo he ido grabando en una cassette (si, ese chisme que se rebobina con el boli BIC). Pura experiencia ochentera !!! Antes de que alguien piense "qué bruto!! se podría usar un OCR y ya tienes mucho ganado". Hasta ahí también llegué yo solito. Probé un montón, y no me generaban nada usable. El problema es que los OCRs no están pensados para escanear listados de impresora matricial de baja resolución: los puntos son muy gruesos, y los ceros tienen una línea en medio. Al final dediqué a la búsqueda más tiempo del que necesité para copiar el listado. Y, además, me sirvió para repasar mi BASIC.
Una vez que el programa estaba copiado y depurado, encontré el código disponible en una web con recopilaciones de Archivos MSX Basic 😬. Para el siguiente programa ya iré directamente a esta web. Aún tengo unos cuantos más.
Vamos ahora a hablar del juego. Antes de que nadie se parta el pecho, hay que pensar que lo programé con 15 años. Y el primer ordenador lo toqué con casi 14 años. La idea es similar al juego Track & Field de Konami (1983) pero en pobre. El juego es para dos jugadores reales, y no se puede competir contra el ordenador. Hay cuatro pruebas diferentes: 100 m lisos, 100 m vallas, natación, y tiro con arco. Cada prueba da puntos. Gana el jugador que más puntos consigue. En todas las pruebas excepto el tiro con arco participan los dos jugadores de forma simultánea.

El código está disponible en GitHub:
https://github.com/humbertomb/mymsx/tree/master/bcn92