Buenas jrcp_kun,
lo tengo rulando pero me he encontrado con algún problema.
la variable que creo es la tblATRsSPRsRAM
si le pongo esto no me va.
tblATRsSPRsRAM:
.ds 4
ahora si lo pongo en c000 si me va
tblATRsSPRsRAM equ $c000
en vez de ds 4 que tengo que poner??
Creo que debes estar utilizando el compilador asMSX y por defecto estarás haciendo una ROM.
Si es así, lo correcto sería algo así (según lo que entiendo que estás intentando hacer en tu ejemplo):
tblATRsSPRsRAM:
.ds NUM_ATR*4+1
supongo que no te funciona porque estarás declarando la etiqueta en una zona de la ROM y no en la RAM.
Por eso cuando pones:
tblATRsSPRsRAM equ $c000
... si te funciona. Porque estás haciendo que la etiqueta
tblATRsSPRsRAM indique la dirección $C000, en la que por defecto está la RAM.
Antes de declarar todas las variables, tablas, etc. que vayan en RAM debes indicar al compilador que quieres que se declaren en la página 3 ($C000) que por defecto contendrá la RAM.
Si miras el código de ejemplo que ha puesto TheNestruo:
; Tamaño de la tabla de atributos de sprites (en número de sprites)
SPRATR_COUNT equ 1
; Tamaño de la tabla de atributos de sprites (en bytes)
SPRATR_SIZE equ SPRATR_COUNT * 4 + 1 ; (+1 para albergar un SPAT_END)
; (...)
; En ROM:
INICIALIZACION:
ld hl, SPRATR_0
ld de, spratr_buffer
ld bc, SPRATR_SIZE
ldir
; (...)
BUCLE:
halt
; Vuleca el buffer de SPRATR utilizando la BIOS
ld hl, spratr_buffer
ld de, SPRATR
ld bc, SPRATR_SIZE
call LDIRVM
; (...)
jr BUCLE
; (...)
SPRATR_0:
.db 96 -1, 128, 0, 15
.db SPAT_END
; En RAM:
spratr_buffer:
spratr_player:
spratr_player_xy:
spratr_player_y:
.byte
spratr_player_x:
.byte
spratr_player_pattern:
.byte
spratr_player_color:
.byte
; (...)
.byte ; (para albergar un SPAT_END)
... verás que indica que una parte va en la ROM y otra en la RAM.
Pues para la parte de la RAM debes asegurarte de ponerle
ORG $C000 antes de empezar las declaraciones ... algo así:
ORG $C000
; En RAM:
spratr_buffer:
spratr_player:
spratr_player_xy:
spratr_player_y:
.byte
spratr_player_x:
.byte
spratr_player_pattern:
.byte
spratr_player_color:
.byte
; (...)
.byte ; (para albergar un SPAT_END)
En el caso concreto de tu ejemplo, deberías poner todo el código y tablas en ROM al principio del código,
después indicar que empieza la zona de la RAM (con el ORG $C000) y acabar con la declaración de todas
las variables (por el código que has puesto parece que ahora sólo tienes tblATRsSPRsRAM).
Creo que así debería funcionar ... espero que te sirva de ayuda.