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

2 comentarios:

  1. Excelente tutorial... muy bien explicado.
    Se podria hacer lo mismo con juegos en codigo maquina en formato DSK?
    Puedo crear un menu en BASIC que invoque a cada uno de los juegos?

    ResponderEliminar
    Respuestas
    1. Si el programa no utiliza la zona de memoria de MSX-DOS, no debería haber problema. Si es un juego en formato BIN, desde BASIC puedes utilizar el BLOAD. SI es un juego en formato COM, con MSX-DOS versión 2.0 puedes utilizar CALL SYSTEM.

      Eliminar