Programación de ROMs de MSX » History » Version 1

Txinto Vaz, 09/09/2013 07:45 PM

1 1 Txinto Vaz
h1. Programación de ROMs de MSX
2 1 Txinto Vaz
3 1 Txinto Vaz
{{>toc}}
4 1 Txinto Vaz
5 1 Txinto Vaz
h2. El sistema de Nerlaska
6 1 Txinto Vaz
7 1 Txinto Vaz
Está documentado aquí: documents#2.  Este documento incluye ficheros accesorios y utilidades para Windows.
8 1 Txinto Vaz
9 1 Txinto Vaz
Los pasos que deben ejecutarse (ver el detalle en el documento) son 3:
10 1 Txinto Vaz
# Compilar con unos parámetros determinados.
11 1 Txinto Vaz
# Añadir 16 bytes al inicio para [[el arranque de las MSX ROM]].
12 1 Txinto Vaz
# Rellenar hasta los 16 Kb (o los que sean).
13 1 Txinto Vaz
14 1 Txinto Vaz
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.
15 1 Txinto Vaz
16 1 Txinto Vaz
# Compilar con unos parámetros determinados.
17 1 Txinto Vaz
# Rellenar hasta los 16 Kb (o los que sean).
18 1 Txinto Vaz
## 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.
19 1 Txinto Vaz
# Añadir 16 bytes al inicio para el arranque de las MSX ROM.
20 1 Txinto Vaz
## Esto es muy sencillo de realizar con la herramienta 'cat' de Linux: cat rom_header.bin programa.bin > programa.rom
21 1 Txinto Vaz
22 1 Txinto Vaz
h2. Evolución hacia 'startups'
23 1 Txinto Vaz
24 1 Txinto Vaz
Añadimos aquí un apunte de Alberto Orante que explica este tema con detalle.
25 1 Txinto Vaz
26 1 Txinto Vaz
<pre>
27 1 Txinto Vaz
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:
28 1 Txinto Vaz
29 1 Txinto Vaz
DEFB "AB" ; expansion ROM header
30 1 Txinto Vaz
DEFW initcode ; start of the init code, 0 if no initcode
31 1 Txinto Vaz
DEFW callstat; pointer to CALL statement handler, 0 if no such handler
32 1 Txinto Vaz
DEFW device; pointer to expansion device handler, 0 if no such handler
33 1 Txinto Vaz
DEFW basic ; pointer to the start of a tokenized basicprogram, 0 if no basicprogram
34 1 Txinto Vaz
DEFS 6,0 ; room reserved for future extensions
35 1 Txinto Vaz
http://www.msx.org/forum/msx-talk/general-discussion/header-rom-cartridge
36 1 Txinto Vaz
37 1 Txinto Vaz
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.
38 1 Txinto Vaz
39 1 Txinto Vaz
si utilizas un startup te ahorras todo esto. Cuando hizo el tutorial Nerlaska no se habían creado los startups para ROMs.
40 1 Txinto Vaz
41 1 Txinto Vaz
http://msx.atlantes.org/sdcc_msx/msxsdcc03.zip
42 1 Txinto Vaz
 
43 1 Txinto Vaz
Una vez compilado, lo que faltará es ampliar el fichero al tamaño de ROM exacto.
44 1 Txinto Vaz
45 1 Txinto Vaz
</pre>
46 1 Txinto Vaz
47 1 Txinto Vaz
Y otro posterior:
48 1 Txinto Vaz
49 1 Txinto Vaz
<pre>
50 1 Txinto Vaz
Te mando tres versiones de los startups para diferentes tipos de ROMs:
51 1 Txinto Vaz
52 1 Txinto Vaz
el ultimo valor antes de la extensión, es la dirección de memoria en hexadecimal donde se aloja la ROM.
53 1 Txinto Vaz
54 1 Txinto Vaz
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.
55 1 Txinto Vaz
56 1 Txinto Vaz
__sfr __at 0xA8 g_slotPort;
57 1 Txinto Vaz
58 1 Txinto Vaz
59 1 Txinto Vaz
__asm
60 1 Txinto Vaz
    di
61 1 Txinto Vaz
    ld sp, (#0xFC4A)
62 1 Txinto Vaz
    ei
63 1 Txinto Vaz
__endasm;
64 1 Txinto Vaz
65 1 Txinto Vaz
  g_slotPort = (g_slotPort & 0xCF) | ((g_slotPort & 0x0C) << 2);
66 1 Txinto Vaz
</pre>
67 1 Txinto Vaz
68 1 Txinto Vaz
NOTA: En esta página se encuentran los archivos mencionados por Alberto