La galería no lleva capturas. Los gráficos están dibujados desde los bytes de la ROM: tools/graficos.py rehace la memoria de vídeo con las mismas copias que hace el cartucho y descomprime sus rachas con el mismo formato que corre el Z80. Las tres capturas de emulador que hay lo dicen en su pie. El listado y las cifras salen del binario y se reproducen con make.
Tres bloques —0x6718 (16 bytes), 0x6AA6 (251) y 0x6BF6 (172)— son, byte a byte, listas y tiles de fondo de Athletic Land, el cartucho anterior de la casa, movidos aquí +1.724, +1.002 y +1.027.
Y no se usan: ni una instrucción del binario los apunta, ni aparece su dirección dentro de ninguna tabla. Este juego es el motor de aquél recompilado —el 68,5 % de sus instrucciones se alinean una a una—, y en la mudanza se vinieron 439 bytes de decorado que ya no pinta nadie. Lo mismo pasa con la rutina muerta de 0x44D2, que es la misma que allí.
El menú no lleva directo al juego: pasa por dos pantallas. En la primera se elige el muñeco con dos bytes, 0xE05B y 0xE05C, que dan la fila y la columna de cada mitad de la figura (0x78C9 reparte cinco sprites con ellos). En la segunda se escribe el nombre: diez letras en 0xE05D, que se recorren en redondo entre el blanco y la Z (0x7968).
De fábrica dice ANNA LEE, y está escrito en los valores de arranque del jugador, en 0x44A3, junto a las vidas y el tiempo. Con dos jugadores la pantalla se repite: cada uno bautiza el suyo (0x426B).
INIT (0x404F) escribe jp 0x402C en el gancho H.KEYI y se queda en un jr a sí mismo para siempre. A partir de ahí, cada fotograma la interrupción toca el sonido, lee los mandos y ejecuta un paso del estado que diga 0xE000.
Y lleva candado: 0xE005. Si un paso tarda más de un fotograma, la interrupción siguiente sólo mueve la música y se va (0x404C), así que el juego se ralentiza en vez de atropellarse.
0x4082 no recibe la tabla: se la encuentra. Hace add a,a / pop hl, y ese pop recoge la dirección de retorno, que es justo donde empieza la tabla de palabras. Luego salta con jp (hl) y no vuelve nunca al call.
Hay cinco tablas así: los 20 estados del juego (0x4144), los seis pasos del menú (0x41F8), los 17 estados del jugador (0x6016) y dos de cuatro para las pantallas de preparación. Cada una cierra clavada contra su destino más bajo, que es lo que da su tamaño.
Como el despachador no vuelve, no hay forma de encadenar nada detrás… salvo dejarlo puesto antes. 0x4131 mete en HL una de dos direcciones —0x4735 con partida en marcha, 0x40C1 sin ella— y hace push hl: el ret del estado aterriza ahí.
Sin darse cuenta de eso, esas dos rutinas no las alcanza el trazador y salen del listado como si fueran datos. Son 138 bytes de código: el parpadeo del rótulo del jugador y la lectura de teclas del menú.
El desplegador de dibujos necesita ld (IX+A),B —un desplazamiento variable—, y el Z80 sólo admite el desplazamiento fijo dentro del opcode. La solución del cartucho es escribir el byte del desplazamiento en marcha: siete bytes copiados a la RAM que hacen ld (0xE5FD),a y luego ld (ix+00h),b, donde 0xE5FD es justo el operando de esa segunda instrucción.
Muchos cartuchos de la casa esconden al final de la ROM su número de catálogo y el título en katakana; lo descubrió Manuel Pazos (@ManuelPazosMSX), y gracias a él se sabe dónde mirar. Aquí no está: detrás del relleno hay datos del reproductor de sonido y ningún 0xAA que cierre la marca. El RC-716 sale del catálogo, no del binario.
Debajo de cada pie está de dónde sale. Se rehacen con make imagenes y no hace falta emulador.