Problemas de tamaño

Door assembler

Champion (378)

afbeelding van assembler

28-11-2010, 10:52

El proyecto en el que estoy liado empieza a crecer, y ya ha superado la barrera de los 16 KB.

No sé si es por eso (espero que sí, y que tenga fácil solución), pero en el emulador funciona bien, y en una máquina real (Toshiba HX-10, NMS-8245), no.

He probado a separar el código en páginas diferentes, de forma que no haya código que le pille justo en el cambio de página.
He probado a eliminar el código del PT3Player y ayFXPlayer.

No hay forma de que ni siquiera así, me funcione AHORA en real, cuando antes sí lo hacía.

Esto es un extracto del fichero SYM

; Symbol table from msxtank.asm
; generated by asMSX v.0.12g
; global and local labels
.page 3
C000h buffer_sprites
...
C1B3h VAR0END
.page 2
8004h INIT
...
8DE3h inicializa_sonido
8DEAh dys
8E0Ah dxs
8E2Ah sonidos ;<-datos de sonido eliminados
8E2Ah musica ;<-datos de música eliminados
8E2Ah vpokes
91D2h vpokes_col
957Ah locates
...
9EF2h dir_15_t ;<-Final del código en ROM
; other identifiers
...

Aquí vienen mis preguntas, a ver si puedo solucionarlo, no vaya a ser que por una tontería, me quede atascado.

¿Qué he podido tocar que lo haya jodido todo?
¿Cuando tengo un código que supera los 16KB, tengo que indicar de alguna manera que quiero usar esas páginas en concreto?
¿Estoy limitado a usar la página de 8000h-BFFFh, o puedo usar también la de 4000h-7fffh? (supongo que la de 0000h-3fff está en uso por la bios)

Muchas gracias por vuestro interés.

Aangemeld of registreer om reacties te plaatsen

Van dioniso

Champion (475)

afbeelding van dioniso

28-11-2010, 12:09

Para ROM mayor de 16k tienes que situar la/s página/s correcta/s. Pásate por aquí.

Van pitpan

Prophet (3131)

afbeelding van pitpan

30-11-2010, 21:04

No te compliques. Lo que te sucede es que la BIOS, al cargar la ROM, sólo localiza las primeras 16 KB de la ROM, que son las que llevan la firma "AB" al principio. Para que te encuentre las otras 16 KB de ROM tienes que convencerla: en asMSX está automatizado con la macroinstrucción SEARCH.

La cabecera completa para hacer una ROM de 32 KB completamente funcional en asMSX sería la siguiente:

.bios
.page 1
.rom
.start INICIO

INICIO:
.search

Y a partir de aquí, todo tu código.

Ya nos contarás si te funciona o no...

Van assembler

Champion (378)

afbeelding van assembler

01-12-2010, 09:21

Para ROM mayor de 16k tienes que situar la/s página/s correcta/s. Pásate por aquí.
Ayer leí el artículo y quise probarlo, pero salí tarde del curro y como que no apetecía mucho ponerse delante del ordenador
Gracias por el aporte.

He probado con el .search, y de primeras no funcionaba.

Revisando con el depurador del blueMSX, he visto que no activaba la rom: iba directamente al DISK-BASIC.

He metido algo de código delante del .search (xor a, nop, ld a,'H', algo de relleno en definitiva) y todo se ha ido a su sitio.

Luego, he probado solo con un par de nop y volvía a fallar.

Con tres nop de relleno sí funciona. ¿Qué será será? Whatever will be will be

No sé si es un fallo mio, o un bug del asMSX, pero ya tira.

Muchas gracias pitpan por la ayuda, y por el asMSX.

Sigo desarrollando... Running Naked in a Field of Flowers

Van pitpan

Prophet (3131)

afbeelding van pitpan

01-12-2010, 18:09

Con el asMSX que usas, la opción correcta sería la siguiente:

.bios
.page 1
.rom
.start INICIO

.org 4010h
INICIO:
.search

(tu código a partir de aquí)

Así te funcionará perfecto. De la otra forma puede dar algún problema de incompatibilidad.

Van mohai

Paladin (841)

afbeelding van mohai

27-12-2010, 15:16

Ten en cuenta que, cuando arranca el cartucho, para ese slot sólo está habilitada la página donde está corriendo. En el resto de la memoria del Z80 tendrás RAM o BIOS, según le toque. Para acceder al resto de código de tu cartucho, tendrás que habilitar la página correspondiente (una especie de función tipo "¿Dónde estoy?" y no te olvides de los sub-slots) o usar las funciones del asMSX.

Si estás usando un emulador con opción montor, te será fácil ver cómo está dispuesta la memoria en cada momento.

Van anonymous

incognito ergo sum (109)

afbeelding van anonymous

28-12-2010, 12:03

Realmente cuando programas en ensamblador tienes TODA la máquina para tí solito. Si encima pasas de la BIOS puedes utilizar toda la RAM superior disponible sin miedo a machacar variables esenciales que puedan colgar el ordenador.

Como bien te dice mohai, lo primero que hay que hacer es situar las páginas de tu ROM de forma adecuada, para que así el programa encuentre lo que supone debe estar donde sabe que está. Sin ese paso, que es fundamental, no hay manera de hacerlo bien.

Si quieres código que hace eso directamente, mándame un privado que te lo envío.

Van assembler

Champion (378)

afbeelding van assembler

28-12-2010, 12:25

Gracias por vuestros aportes. Estoy utilizando las macroinstrucciones del asMSX, con los apuntes de pitpan.

Ahora mismo tengo el programa parado porque afortunadamente (viendo como está el pais), tengo trabajo de más, y cuando llego a casa tengo pocas ganas de engancharme con el ordenador, pero sigo con él en la cabeza.