domingo, 22 de noviembre de 2020

Recopilación de juegos BASIC en cartucho.

Tras terminar de rescatar todos los listados de programas en BASIC para ordenadores MSX que conservo de los años 80, que son sólo una parte de los que hice, me he planteado hacer una recopilación en cartucho. Esto, que en su día era impensable de forma artesanal, en la actualidad es bastante sencillo y barato debido a las herramientas software y hardware disponibles. Vamos a hacer un repaso de cuales son y cómo funcionan. Lo primero es seleccionar los programas que tenemos disponibles, que están descritos en diversas entradas de este blog:

La idea fundamental es crear un disco con los programas y a partir de él generar una ROM que se almacenará en un cartucho con una FlashRAM. Y ya está. Sencillo, no? Como dijo Jack el Destripador, vamos por partes.

Creación del disco

Necesitamos crear un disco MSX-DOS en el que cargaremos los archivos necesarios para arrancar el sistema operativo, para ejecutar nuestros programas, y, obviamente, los programas que queremos almacenar. 

Comenzamos formateando un disco físico de 3.5" en el propio ordenador MSX, en este caso 2DD (doble cara y doble densidad). Grabamos los archivos de sistema necesarios para que el disco sea autoejecutable:

  • COMMAND.COM
  • MSXDOS.SYS
  • AUTOEXEC.BAT

En este último escribimos el nombre del programa que queremos que se ejecute. En el caso, como el que nos ocupa, de que este programa esté escrito en BASIC el contenido de este archivo será:

BASIC nombre.BAS

Por último grabamos todos los programas y archivos que hemos desarrollado y queremos incluir en nuestra recopilación. Comprobamos que el disco arranca correctamente y que todo funciona bien. En mi caso, he preparado una etiqueta para darle un aire semi-profesional. Este es el aspecto:


Una vez que este paso está superado, copiamos todos los archivos a nuestro ordenador y creamos una imagen de disco. Para ello podemos utilizar una imagen que previamente tengamos (podemos borrar todos los archivos), podemos utilizar un emulador de MSX, o podemos utilizar la herramienta DiskMgr, de Rudolf Lechleitner. Con cualquiera de estos métodos creamos un archivo que llamaremos recopila.dsk.

Una vez creada la imagen de disco, vamos a utilizar la herramienta dsktool, de Ricardo Bittencourt, que es capaz de trabajar con archivos de imagen de disco en formato FAT12. Aunque se podrá hacer también con DiskMgr, yo prefiero esta porque es de línea de comandos y puedo automatizar algunos procesos mediante shell-scripts. Para añadir el primer de los archivos haremos:

dsktool a recopila.dsk COMMAND.COM

Y después repetimos con el resto de los archivos de nuestro disco físico. Llegados a este punto ya tendremos la primera etapa terminada. Para verificar que todo está correcto vemos el contenido de la imagen:

dsktool l recopila.dsk

que nos muestra la siguiente salida por pantalla:

DskTool v1.30 (C) 1998 by Ricardo Bittencourt

Utility to manage MSX DOS 1.0 diskette images (3.5"360/720Kb).

(2010) Updated by Tony Cruise

(2017) Updated by NataliaPC

This file is under GNU GPL, read COPYING for details


Disk image size:  720Kb

Standard format


Name of volume:   SNYJX101


COMMAND.COM      6656 14/10/2020  7:23:04 ----

MSXDOS.SYS       2432 14/10/2020  7:23:04 ----

AUTOEXEC.BAT       21 15/11/2020 12:51:36 ----

EXAMEN.BAS       3775 22/11/2020 11:19:44 ----

LECCION.BAS     22432 22/11/2020 11:23:02 ----

PRESENT.BAS      2044 22/11/2020 11:19:14 ----

BCN92.BAS       11182 21/11/2020 21:57:24 ----

CRAZYP.BAS      14736 22/11/2020 11:26:00 ----

SKRAM.BAS        9175 22/11/2020 11:52:18 ----

RECOPILA.BAS     1087 22/11/2020 11:24:00 ----


652288 bytes free


Ya solo nos queda probar la imagen en un emulador. Yo utilizo OpenMSX que es el que más me gusta. Con esto nos aseguramos que hemos creado la imagen correctamente, y que en el emulador tenemos lo mismo que en el ordenador real. Y con esto terminamos esta etapa.

Creación de un cartucho

Comenzaremos con crear un archivo de imagen ROM a partir de nuestra imagen de disco. Para ello utilizaremos el programa dsk2rom, de Vincent van Dam. El funcionamiento es muy ingenioso. Este programa crea una ROM con un driver virtual para acceder al sistema de ficheros de la imagen un disco almacenado en memoria. Como el tamaño de la imagen de disco es mayor que la memoria máxima direccionable por el Z-80, el propio programa incluye diferentes mappers para esta operación. Además, permite utilizar el compresor Pletter para reducir el tamaño de la imagen.

El funcionamento es muy sencillo. Simplemente lo invocamos con los parámetros adecuados. En este caso utilizaremos el mapper ASCII de 8 bits y el nivel de compresión 2 para Pletter. Estas opciones nos valdrán para la mayoría de casos. Lo invocamos de la forma:

dsk2rom -asfc 2 recopila.dsk RECOPILA.ROM

Lo siguiente es probar la imagen de la ROM en un emulador. La cargamos en el OpenMSX y tras el proceso de arranque de la máquina se muestra la pantalla de inicio del programa. Probamos todas las opciones y comprobamos que la ROM es correcta.


Ya solo nos queda la operación más delicada de todo el proceso, la grabación del cartucho. Esta operación hay que hacerla en el propio ordenador MSX. Debemos de tener algún dispositivo de almacenamiento que nos permita tener tanto el programa de carga como nuestra imagen ROM. Debido al tamaño necesitaremos utilizar por lo menos un disco de 3.5".

Existen diferente modelos y tipos en el mercado, con más o menos memoria, mappers, etc. En general son dispositivos con una FlashRAM donde se almacena la imagen de la ROM, y una electrónica para comunicarse a través del puerto de expiación del MSX. En este caso he optado por un cartucho multimapper de 2Mb distribuido por Carmeloco. Junto con el cartucho nos proporciona el programa cargador de la flash.


Como se puede observar la placa tiene una serie de jumpers. Estos son fundamentales para las distintas operaciones. Comenzaremos cargando la flash. Para ello hay que abrir el puente PRG y cerrar el puente A16. Introducimos el cartucho con el ordenador apagado y lo encendemos. Cuando cargue el dispositivo de almacenamiento donde tenemos la imagen, utilizamos el comando:

FL16 RECOPILA.ROM

El proceso dura unos minutos. La salida del mismo es la siguiente:

Tras los cuales apagamos el ordenador, cerramos el puente PRG, quitamos el puente A16 y cerramos el puente A8. Metemos la placa dentro de la carcasa del cartucho, y lo volvemos a insertar en el ordenador, este apagado.  En mi caso le he añadido una etiqueta y me ha quedado semi-profesional.

Ya solo resta encender y ... voilà, a disfrutar de un cartucho personalizado.



El código fuente y las imágenes de disco y ROM están disponibles en GitHub:

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

domingo, 15 de noviembre de 2020

Anatomía del Aparato Digestivo. Programa didáctico

Este programa escrito en BASIC para ordenadores MSX1 (1985), con una extensión considerable,  Anatomía del Aparato Digestivo, es un programa didáctico con lecciones y test. Lo escribí conjuntamente con dos compañeros de instituto Antonio Alcántara Lapaz y Julian Alcántara Lapaz y fue nuestra participación en el I Concurso de Programas MSX (1985), organizado por Sony España, y cuyo premio se falló en 1986.

Aunque era una buena idea, no teníamos las herramientas (ni probablemente conocimientos) para  hacerlo suficientemente sólido. El problema fundamental que nos encontramos era su extensión. Para poder encajar los diferentes diagramas del aparato digestivo y sus textos explicativos tuvimos que utilizar las 28k disponibles en MSX BASIC. Para ello hubo que simplificar excesivamente la mecánica y, además, no incluir una instrucciones de uso en el programa (que no eran muy evidentes). Dicho lo cual, creo que fue un programa faraónico, con la dificultad de hacerlo por trozos y entre varias personas, y haciendo los gráficos en papel y su posterior digitalización a mano. En mi caso, además, mi ordenador Sony HB-55P sólo tenia 16k de memoria, y me dejaba unas 12k en MSX BASIC, por lo que sólo podía trabajar con fragmentos pequeños. Para poder realizar la integración del programa acomplejo me tuvieron que dejar una ampliación de memoria de 64K.

Como el resto de los programas de la época, no lo conservo en forma digital. Sólo disponía de un listado apergaminado. Al contrario del resto de entradas de este blog, y teniendo en cuanta la extensión del listado, he utilizado una estrategia más profesional. Siguiendo el modelo descrito en Recuperación de código MBASIC he digitalizado y pasado por OCR el listado completo. Una vez en el editor de texto innumerables iteraciones de corrección de código y ejecución, sobre todo dejándome los ojos en los comandos DRAW de los listados. Como no me apetecía recorrer el camino de almacenar el programa en cinta, lo he fragmentado para poder ser ejecutado desde diskette, ya que el MSX DISK BASIC solo deja 24k de memoria libre. Aprovechando esto, he añadido una fundamental pantalla de instrucciones, que es la única diferencia con respecto al programa original. Y ya de paso le he preparado una etiqueta, que le da un aire casi profesional.




Pasemos a hablar del programa. Es un programa didáctico básico, muy sencillo y sobrio de aspecto, pero con una cantidad de información bastante elevada (por ello su tamaño en BASIC). Técnicamente no es muy complejo (no hay ensamblador ni manejo directo del VDP), su gran dificultad el modo en que se desarrolló y su tamaño. El programa está organizado en lecciones sobre la anatomía y funcionamiento del aparato digestivo:
  • Cuerpo entero
  • Boca
  • Dientes
  • Esófago-Estómago
  • Hígado-Páncreas
  • Pared Intestinal
  • Intestino
Al usuario se le presenta la opción de seguir en continuo todas las lecciones de forma secuencia o de forma individual. En cada lección se presenta un diagrama de la parte estudiada, con referencias a las distintas partes de la anatomía, y una o varias pantallas con textos explicativos de las funcionalidades de los elementos. Una vez revisados todos los contenidos, el usuario puede realizar una evaluación tipo test para comprobar su conocimiento de los contenidos. Las preguntas de este test no son nada triviales, y no es fácil superarlo si antes no se han leído bastante bien las explicaciones de las lecciones.






El código está disponible en GitHub: