Programación de ROMs de MSX

El sistema de Nerlaska

Está documentado aquí: documents#2. Este documento incluye ficheros accesorios y utilidades para Windows.

Los pasos que deben ejecutarse (ver el detalle en el documento) son 3:
  1. Compilar con unos parámetros determinados.
  2. Añadir 16 bytes al inicio para el arranque de las MSX ROM.
  3. Rellenar hasta los 16 Kb (o los que sean).

Para los pasos 2 y 3, Nerlaska provee o documenta herramientas en Windows. Hecha la búsqueda de los equivalentes en Linux hemos encontrado cómo solucionar esos pasos. En realidad hay que ejecutar el paso 3 antes que el 2.

  1. Compilar con unos parámetros determinados.
  2. Rellenar hasta los 16 Kb (o los que sean).
    1. Esto lo logramos añadiendo el parámetro '-l’ de SDCC. Para 16kb hay que añadir '-l 4000’. Consultar los SDCC argumentos para documentarse.
  3. Añadir 16 bytes al inicio para el arranque de las MSX ROM.
    1. Esto es muy sencillo de realizar con la herramienta 'cat’ de Linux: cat rom_header.bin programa.bin > programa.rom

Aplicaciones necesarias:

Evolución hacia 'startups’

Añadimos aquí un apunte de Alberto Orante que explica este tema con detalle.

El sistema de Nerlaska, que es el que utilizo yo, en realidad es el más engorroso por que hay que añadir externamente la cabecera de la ROM que son 16Bytes:

DEFB "AB" ; expansion ROM header
DEFW initcode ; start of the init code, 0 if no initcode
DEFW callstat; pointer to CALL statement handler, 0 if no such handler
DEFW device; pointer to expansion device handler, 0 if no such handler
DEFW basic ; pointer to the start of a tokenized basicprogram, 0 if no basicprogram
DEFS 6,0 ; room reserved for future extensions
http://www.msx.org/forum/msx-talk/general-discussion/header-rom-cartridge

Ha de empezar con "AB" y luego ha de tener el initcode que es la dirección de ejecución de nuestro programa. El resto si no se utiliza ha de ser ceros.

si utilizas un startup te ahorras todo esto. Cuando hizo el tutorial Nerlaska no se habían creado los startups para ROMs.

http://msx.atlantes.org/sdcc_msx/msxsdcc03.zip

Una vez compilado, lo que faltará es ampliar el fichero al tamaño de ROM exacto.

Y otro posterior:

Te mando tres versiones de los startups para diferentes tipos de ROMs:

el ultimo valor antes de la extensión, es la dirección de memoria en hexadecimal donde se aloja la ROM.

En el caso de la ROM de 32k, tiene una función que coloca la página 2 de la ROM en el slot de acceso del z80. En el fuente de holamundo hay un par de lineas que hacen lo mismo y que habría que quitar aunque no creo que provoque un error.

__sfr __at 0xA8 g_slotPort;

__asm
    di
    ld sp, (#0xFC4A)
    ei
__endasm;

  g_slotPort = (g_slotPort & 0xCF) | ((g_slotPort & 0x0C) << 2);

NOTA: En esta página se encuentran los archivos mencionados por Alberto

CRT0MSX.S View (861 Bytes) Txinto Vaz, 09/09/2013 07:43 PM

rehellosc2_rom.zip (5.04 KB) Txinto Vaz, 09/09/2013 07:44 PM