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

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