Uy, uy, uy, Jos'b, típico fallo chorra habemus
. Por supuesto, ya está solucionado, así que nonti preocupare. Te lo explico para que lo hagas tu, vale?.
Tu cabecera de directivas para ensamblar el ROM era la siguiente:
.bios
.page 1
.rom
.size 32
.start MAIN
MAIN:
[...]
Puede parecer que está bien a priori, pero no es así... verás, la cabecera de un ROM tiene 16 bytes (10 bytes de obligado uso y 6 reservados para un posible uso futuro).
Cabecera de un ROM:
DEFB "AB" ; expansion ROM header
DEFW initcode ; start of the init code, 0 if no initcode
DEFW callstat; pointer to CALL statement handler, 0 if no such handler
DEFW device; pointer to expansion device handler, 0 if no such handler
DEFW basic ; pointer to the start of a tokenized basicprogram, 0 if no basicprogram
DEFS 6,0 ; room reserved for future extensionsComo ves, los 10 primeros bytes son intocables, ya que significan diversas directivas para el ROM. Así que tu MAIN nunca debe ser menor a $400a (si empiezas en la pag1, claro), ya que solaparás los datos necesarios de cabecera del ROM.
En tu cabecera, al ensamblar, te resulta en lo siguiente:
db "AB" <-2 bytes (esto es el indicador de ROM)
dw INIT <-2 bytes (dirección de comienzo de ejecución del mismo)
INIT:
[...]
De este modo, tu código empezaba en $4004, cosa impensable en un ROM. Mira, es tan fácil como incluir unos cuantos bytes de sobra, como, por ejemplo, una referencia a tu juego o a ti mismo.
.bios
.page 1
.rom
.size 32
.start MAIN
db "josb rules" ;aquí he metido 10 bytes extra. Ahora MAIN será $400d.
MAIN:
[...]
Y aquí habremos ensamblado, señoras y señores, un ROM standard.
Por cierto, una pequeña pista, vale?:
xor a
ld [$f3db],a ; Desactiva sonido teclas (screen ,,0)
Ah, y se me olvidaba, felicidades por tu producción MSXera en ensamblador!. Es bastante viciante, jejeje. En cuanto la finiquites del todo te animo a que hagas otro juegecillo para MSXdev'06, que aún te quedan meses! (y así no dejas el ensamblador de pronto). De nuevo, felicidades!.