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

aorante mvac7, 09/11/2013 07:48 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 2 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 3 aorante mvac7
Aplicaciones necesarias:
23 3 aorante mvac7
* Small Device C Compiler suite (http://sdcc.sourceforge.net/)
24 3 aorante mvac7
* Hex2bin (http://sourceforge.net/projects/hex2bin/)
25 3 aorante mvac7
26 1 Txinto Vaz
h2. Evolución hacia 'startups'
27 1 Txinto Vaz
28 1 Txinto Vaz
Añadimos aquí un apunte de Alberto Orante que explica este tema con detalle.
29 1 Txinto Vaz
30 1 Txinto Vaz
<pre>
31 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:
32 1 Txinto Vaz
33 1 Txinto Vaz
DEFB "AB" ; expansion ROM header
34 1 Txinto Vaz
DEFW initcode ; start of the init code, 0 if no initcode
35 1 Txinto Vaz
DEFW callstat; pointer to CALL statement handler, 0 if no such handler
36 1 Txinto Vaz
DEFW device; pointer to expansion device handler, 0 if no such handler
37 1 Txinto Vaz
DEFW basic ; pointer to the start of a tokenized basicprogram, 0 if no basicprogram
38 1 Txinto Vaz
DEFS 6,0 ; room reserved for future extensions
39 1 Txinto Vaz
http://www.msx.org/forum/msx-talk/general-discussion/header-rom-cartridge
40 1 Txinto Vaz
41 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.
42 1 Txinto Vaz
43 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.
44 1 Txinto Vaz
45 1 Txinto Vaz
http://msx.atlantes.org/sdcc_msx/msxsdcc03.zip
46 1 Txinto Vaz
 
47 1 Txinto Vaz
Una vez compilado, lo que faltará es ampliar el fichero al tamaño de ROM exacto.
48 1 Txinto Vaz
49 1 Txinto Vaz
</pre>
50 1 Txinto Vaz
51 1 Txinto Vaz
Y otro posterior:
52 1 Txinto Vaz
53 1 Txinto Vaz
<pre>
54 1 Txinto Vaz
Te mando tres versiones de los startups para diferentes tipos de ROMs:
55 1 Txinto Vaz
56 1 Txinto Vaz
el ultimo valor antes de la extensión, es la dirección de memoria en hexadecimal donde se aloja la ROM.
57 1 Txinto Vaz
58 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.
59 1 Txinto Vaz
60 1 Txinto Vaz
__sfr __at 0xA8 g_slotPort;
61 1 Txinto Vaz
62 1 Txinto Vaz
63 1 Txinto Vaz
__asm
64 1 Txinto Vaz
    di
65 1 Txinto Vaz
    ld sp, (#0xFC4A)
66 1 Txinto Vaz
    ei
67 1 Txinto Vaz
__endasm;
68 1 Txinto Vaz
69 1 Txinto Vaz
  g_slotPort = (g_slotPort & 0xCF) | ((g_slotPort & 0x0C) << 2);
70 1 Txinto Vaz
</pre>
71 1 Txinto Vaz
72 1 Txinto Vaz
NOTA: En esta página se encuentran los archivos mencionados por Alberto