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 |