Diseña un sitio como este con WordPress.com
Comenzar

Cocinando la ROM del OMEGA

En los primeros tiempos de la microinformática, las memorias eran prácticamente artículos de lujo: escasas y caras, complicaban la vida de programadores y diseñadores de hardware. Con el paso del tiempo el precio de RAM y ROM ha ido bajando y ahora podemos tener capacidades considerables a precios razonables.

El Omega saca partido de esta situación e incorpora una memoria EEPROM de 512 Kb como ROM dividida en dos bancos de 256 Kb. Utilizando el jumper JP1 se puede seleccionar el banco inferior (jumper quitado) o el banco superior (jumper puesto). De esta forma tenemos dos juegos de ROM independientes que podemos crear según nuestras necesidades y activar uno u otro con sólo cambiar la posición del jumper previo al arranque del sistema.

El mapa de slots del Omega tiene este esquema:

La memoria ROM del OMEGA almacena el contenido en bloques o páginas de 16Kb, algunas programadas y otras disponibles para poderse programar. Dejando a un lado los slots de cartucho y el que contiene la RAM, el resto son cuatro bloques de 64Kb que forman el máximo de memoria ROM visible por el OMEGA, 256Kb. Como el chip ROM tiene una capacidad de 512Kb, esto permite que quepan 2 conjuntos completos seleccionables mediante el jumper JP1. Así quedaría resumido el mapa de slots contenido en la memoria ROM.

Teniendo en cuenta que la información en la memoria ROM se almacenará de manera consecutiva, tómese la siguiente imagen como referencia del formato interno del fichero a preparar.

El objetivo de este manual es aprender a Cocinar la ROM del Omega, esto es, configurar la ROM por nosotros mismos utilizando distintos módulos, componentes o bloques dentro de este esquema, de modo que preparemos un archivo válido con el contenido que debemos programar en la ROM adaptado a nuestras preferencias, que grabaremos con el programador de EPROM.

Los ingredientes

Los ingredientes, es decir, los módulos, componentes o bloques que conforman la ROM de Omega, podríamos decir que son de tres tipos:

  1. Obligatorios: la BIOS (como en todos los MSX) y la SubROM (necesaria a partir de MSX2).
  2. Opcionales o complementarios: drivers de dispositivos.
  3. Huecos: segmentos de memoria vacíos para ubicar correctamente los bloques.

Algunos de estos posibles componentes, para seguir los ejemplos que empleamos en este manual, se pueden descargar aquí:

https://drive.google.com/file/d/19Dwf2mZuCB-HZD5rBAjAGvCxBAIhByfl/view?usp=sharing

Para seguir los ejemplos de este artículo, hay que descargar el archivo, descomprimirlo, y abrir una ventana de consola en esa carpeta. La forma más fácil de hacer esto es escribir CMD en la barra de direcciones del explorador de Windows.

Al pulsar [intro], se abrirá la consola (el interprete de comandos).

A continuación, se describen los tres componentes necesarios junto con ejemplos:

a) Obligatorios:

BIOS: Es un bloque de 32 Kb con el núcleo de software del sistema MSX. Los archivos correspondientes a estos bloques se encuentran en el subdirectorio BIOS, y se puede observar que se encuentran de dos tipos:

  • C-BIOS: Es una BIOS de código abierto para MSX que no incluye BASIC, pero sí soporta el uso de cartuchos y discos. Los archivos de este sistema son:
    • 32k_cbios_msx2p_jp.rom, para MSX2+ (esto es, soportando los modos gráficos del V9958), NTSC 60 Hz versión japonesa, para el apreciar el software a la velocidad para la que fue diseñado en Japón/USA.
    • 32k_cbios_msx2p_int.rom, para MSX2+ internacional. exactamente lo mismo que el anterior pero con la configuración regional para USA y teclado internacional.
    • 32k_cbios_msx2p_pal.rom, para MSX2+ PAL 50 Hz versión internacional (teclado y configuración regional USA), para el apreciar el software a la velocidad para la que fue diseñado en europa.
  • MSX2-BIOS: Archivos:
    • 32k_msx2_pal.rom para MSX2 PAL, 50 Hz, para el software europeo a la velocidad para la que fue diseñado,
    • 32k_msx2p_int.rom para MSX2+ y NTSC internacional, y
    • 32k_msx2p_jp.rom que es la versión equivalente al anterior, específico para la configuración regional japonesa (y velocidad NTSC como en Japón).

SubROM: Contiene nuevos comandos de MSX-BASIC y el BIOS para nuevos dispositivos añadidos por MSX2/2+. En la carpeta de ejemplos, los archivos se encuentran también en el subdirectorio BIOS, y son:

  • 16k_cbios_msx2p_subrom.rom para acompañar a las C-BIOS,
  • 16k_msx2_subrom.rom, para utilizar con las BIOS de MSX2
  • 16k_msx2p_subrom.rom para emplear con la BIOS de MSX2+

b) Opcionales:

Se trata fundamentalmente de controladores de dispositivos para el manejo de hardware por parte de los programas de usuario. Entre ellos están los siguientes (y sus respectivos archivos en el subdirectorio Extra):

  • Driver Kanji: El driver Kanji permite gestionar y mostrar caracteres en japonés e incluye una extensión para BASIC. Se encuentra en el archivo 32k_kanji.bin
  • MSX Music: Contiene la extensión MSX-MUSIC y las rutinas que gestionan la FM-Pac. Si tu FM-Pac no tiene su propia ROM (como por ejemplo el sombrero FMPAC), necesitas incluir este bloque en el Omega. Se encuentra en el archivo 16k_fm_opl.bin
  • BASIC Kun: También llamado X-BASIC, es un compilador de BASIC que permite hacer que los programas escritos en este lenguaje se ejecuten más rápido. Se encuentra en el archivo 16k_basic_kun.bin
  • Driver disco CDX2: Contiene la ROM para la interfaz de disco de tipo Microsol CDX-2. La CDX-2 funciona por puertos, por lo que puede instalarse dentro del Omega sin necesidad de usar un slot de cartucho (es el sombrero controlador de disco). Se encuentra en el archivo 16k_fastdrom11_cdx2.bin

c) Huecos:

Dado que no todos los módulos son del mismo tamaño (los hay de 16 y de 32 Kb), y además no todos pueden estar en cualquier lugar de la ROM, será necesario un componente más que podemos llamar «huecos«, es decir, archivos de tamaño 16, 32, 48 y 64 Kb para rellenar el puzle de los 4×64 Kb que contendrá nuestro fichero ROM. Estos citados huecos son respectivamente los archivos 16k_ff.bin, 32k_ff.bin, 48k_ff.bin y 64k_ff.bin del subdirectorio “Hueco”.

Ejemplos:

  1. Una ROM basada en C-BIOS para MSX2+, NTSC (60Hz) o PAL (50Hz) contendría los módulos:
32k_cbios_msx2p_jp.rom  |
o                       |
32k_cbios_msx2p_int.rom | +16k_cbios_logo_msx2p.rom+16k_cbios_msx2p_sub.rom
o                       |
32k_cbios_msx2p_pal.rom |

Esto es, uno de los dos módulos de 32 Kb correspondientes a la BIOS, el logo de C-BIOS, y la SubROM correspondiente a esa BIOS.

Nota: No se está indicando aún en estos ejemplos el orden concreto de los módulos, la zona donde se ubica cada uno, o los huecos, esto se aclara más adelante en la sección de las recetas.

  1. Una ROM basada en MS-BIOS para MSX2+, NTSC y 60 Hz contendría los módulos:
32k_msx2p_int.bin  |
o                  | + 16k_msx2p_subrom.bin
32k_msx2p_jp.rom   |

Esta es la BIOS del sistema más completa que puede llevar el Omega. Incluye BASIC 3.0, que soporta los modos gráficos extra del V9958. Al ser de 60 Hz, permite ver el software japonés a la velocidad para la que fue diseñado.

  1. Una ROM para MSX2, PAL, 50 Hz contendría los módulos:
32k_msx2_pal.bin + 16k_msx2_subrom.bin

Esta es la BIOS que llevaban los últimos MSX europeos (MSX2). Permite ejecutar el software europeo a la velocidad para la que fue diseñado.

Las recetas

Vamos a seguir un procedimiento similar al que se siguió para el caso de la Configuración avanzada EEPROM Cartucho MSX 64K en:

https://msxmakers.design.blog/proyectos/cartucho-msx-eeprom-64kb/msx-eeprom-cartridge-64k/configuracion-avanzada-eeprom-cartucho-msx-64k/: Cocinando la ROM del OMEGA

La idea es concatenar todos los bloques de ROM en un solo archivo. Las normas para llevarlo a cabo correctamente son sencillas:

  • La BIOS debe estar en el slot 0, mientras que la SubROM estará en el slot 3-0, y ambos al principio de sus bloques de 64 Kb.
  • Los módulos opcionales que se utilicen deben ubicarse cada uno en la página para la que fueron diseñados.
  • Los drivers o juegos pueden estar en el slot 3-1 ó 3-3, pero siempre en el bloque de 16k/32k o página para la que fueron diseñados.
  • Los bloques/slots vacíos los vamos a rellenar con huecos del tamaño adecuado para completar cada slot con 64 Kb.

Receta 1: C-BIOS internacional

El mapa de slots con C-BIOS es este:

Combinamos los bloques a través de sus archivos desde línea de comandos escribiendo:

copy /b Bios\32k_cbios_msx2p_int.rom + Bios\16k_cbios_logo_msx2p.rom + Hueco\16k_ff.bin + Bios\16k_cbios_msx2p_sub.rom + Hueco\48k_ff.bin + Hueco\64k_ff.bin + Hueco\64k_ff.bin 256k\256k_cbios_int.bin

Girando el mapa de slots se explica mejor lo que estamos haciendo; concatenar módulos para componer un bloque de ROM de 256 Kb.

Receta 2: MSX2 internacional, PAL y con soporte FMpac

copy /b Bios\32k_msx2_pal.bin + Hueco\32k_ff.bin + Bios\16k_msx2_subrom.bin + Hueco\48k_ff.bin + Hueco\64k_ff.bin + Hueco\16k_ff.bin + Extra\16k_fm_opl.bin + Hueco\32k_ff.bin 256k\256k_msx2_int_pal_fm.bin

Cabe destacar que el módulo para MSX-Music sólo puede estar en la segunda página de 16 Kb, es decir, empezando en 4000h para todas las recetas en las que se use.

Receta 3: MSX2+ con Kanji, FM y BASIC Kun

En este caso, se puede observar que el módulo BASIC Kun debe copiarse siempre, para cualquier receta, en la tercera página (el tercer bloque de 16 Kb), o lo que es lo mismo, empezando en la dirección 8000h.

Versión japonesa:

copy /b Bios\32k_msx2p_jp.bin + Hueco\32k_ff.bin + Bios\16k_msx2p_subrom.bin + Extra\32k_kanji.bin + Hueco\16k_ff.bin + Hueco\64k_ff.bin + Hueco\16k_ff.bin + Extra\16k_fm_opl.bin + Extra\16k_basic_kun.bin + Hueco\16k_ff.bin 256k\256k_msx2p_jp_fm_xbasic.bin

Para la versión internacional, sólo cambia el primer archivo:

copy /b Bios\32k_msx2p_int.bin + Hueco\32k_ff.bin + Bios\16k_msx2p_subrom.bin + Extra\32k_kanji.bin + Hueco\16k_ff.bin + Hueco\64k_ff.bin + Hueco\16k_ff.bin + Extra\16k_fm_opl.bin + Extra\16k_basic_kun.bin + Hueco\16k_ff.bin 256k\256k_msx2p_jp_fm_xbasic.bin

Receta 4: MSX2 internacional PAL, disco, FM, BASIC Kun

copy /b Bios\32k_msx2_pal.bin + Hueco\32k_ff.bin + Bios\16k_msx2_subrom.bin + Hueco\48k_ff.bin + Hueco\16k_ff.bin + Extra\16k_fastdrom11_cdx2.bin + Hueco\32k_ff.bin + Hueco\16k_ff.bin + Extra\16k_fm_opl.bin + Extra\16k_basic_kun.bin + Hueco\16k_ff.bin 256k\256k_msx2_int_pal_disco_fm_xbasic.bin

Como se observa, la zona en la que se debe ubicar el módulo Disk ROM es en el segundo bloque de 16 Kb (2ª página), que podría estar configurado también en el slot 3-0.

Receta 5: MSX2+ Kanji, disco, FM, BASIC Kun

Cuando usemos el Kanji driver, su ubicación será siempre en el segundo y tercer bloque de 16 Kb (ocupa 32 Kb).

Versión japonesa:

copy /b Bios\32k_msx2p_jp.bin + Hueco\32k_ff.bin + Bios\16k_msx2p_subrom.bin + Extra\32k_kanji.bin + Hueco\16k_ff.bin + Hueco\16k_ff.bin + Extra\16k_fastdrom11_cdx2.bin + Hueco\32k_ff.bin + Hueco\16k_ff.bin + Extra\16k_fm_opl.bin + Extra\16k_basic_kun.bin + Hueco\16k_ff.bin 256k\256k_msx2p_jp_disco_fm_xbasic.bin

Versión internacional:

copy /b Bios\32k_msx2p_int.bin + Hueco\32k_ff.bin + Bios\16k_msx2p_subrom.bin + Extra\32k_kanji.bin + Hueco\16k_ff.bin + Hueco\16k_ff.bin + Extra\16k_fastdrom11_cdx2.bin + Hueco\32k_ff.bin + Hueco\16k_ff.bin + Extra\16k_fm_opl.bin + Extra\16k_basic_kun.bin + Hueco\16k_ff.bin 256k\256k_msx2p_int_disco_fm_xbasic.bin

Combinando recetas

Me gustaría comentar que el fichero obtenido hasta ahora ya se podría grabar en un omega, siempre que el sistema ya esté funcionando y tengamos un sistema de disco (msx-ide por ejemplo) y así grabaríamos una mitad de su chip ROM, es decir… serviría para una actualización desde el propio OMEGA.

Para ello tendríais que utilizar el software desarrollado por el usuario retrocanada76 en:

https://github.com/lfantoniosi/oflash

Este video muestra como funciona:

Por otro lado, si lo que queréis es programar el chip del Omega desde un programador eeprom, hay que sumar 2 de estos ficheros de 256Kb en uno del tamaño de la memoria ROM completa (512 Kb). Para ello sólo hay que elegir cuales son las 2 opciones que queremos tener y utilizar un comando adecuado para sumarlos. Por ejemplo:

MSX2 internacional PAL & C-BIOS MSX 2+ internacional

copy /b 256k\256k_msx2_int_pal_fm.bin + 256k\256k_cbios_int.bin omega_msx2_int_pal_fm_cbios.bin

MSX2+ Japón Kanji FM BASIC Kun & MSX 2+ internacional Kanji FM BASIC Kun

copy /b 256k\256k_msx2p_jp_fm_xbasic.bin + 256k\256k_msx2p_int_fm_xbasic.bin omega_msx2p_jp_int_fm_xbasic.bin

MSX2+ Japón Kanji disco FM BASIC Kun & MSX2+ internacional Kanji disco FM BASIC Kun

copy /b 256k\256k_msx2p_jp_disco_fm_xbasic.bin + 256k\256k_msx2p_int_disco_fm_xbasic.bin omega_msx2p_jp_int_disco_fm_xbasic.bin

MSX2+ Japón Kanji disco FM BASIC Kun & MSX2 internacional PAL disco FM BASIC Kun

copy /b 256k\256k_msx2p_jp_disco_fm_xbasic.bin + 256k\256k_msx2_int_pal_disco_fm_xbasic.bin omega_msx2p_jp_msx2_int_pal_disco_fm_xbasic.bin

Es recomendable comprobar el tamaño del archivo final, el cual debería ser 524288 bytes.

Por último, sólo queda programar la EEPROM con este archivo y probar.

Bon appétit.

Deja una respuesta

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s

A %d blogueros les gusta esto: