Aquí no hay ninguna ilustración ni captura. El rótulo, el paisaje y la fase entera están dibujados desde los bytes de la ROM, ejecutando en Python los mismos descompresores que corre el Z80, y comprobados byte a byte contra la VRAM del emulador. El listado y las cifras salen del binario y se reproducen con make.
Konami escondía al final de muchos cartuchos su número de catálogo y el título en katakana; lo descubrió Manuel Pazos (@ManuelPazosMSX) y el bloque vive en el offset 0x3FF0. Éste no la lleva, y no por no mirar: se rastrearon las 16.384 posiciones de la ROM con un buscador validado antes contra cuatro cartuchos de la misma familia que sí la llevan, que es la única manera de fiarse de un negativo. La razón se ve en el volcado: la ROM llega llena de datos hasta 0x7FFB y sólo sobran cuatro bytes de relleno. No cabe.
No hay niveles: hay una fase que se repite, y lo único que sube es la dificultad (0xE1D3, con tope 2). El paisaje va comprimido: 244 bytes eligen, cada ocho filas, cuál de veinte tiras se dibuja. Y el desplazamiento fino no se calcula, está guardado: cada tira tiene ocho versiones, la misma empezada de cero a siete filas más abajo, y el índice es 2·(posición y 7).
Sale dos veces en la fase, en dos mitades, y su cuerpo no son sprites: las tiras de paisaje de tipo 18 y 19 son las únicas del mapa que usan los caracteres 0xB0–0xEC, y cada una aparece una sola vez. Encima van los sprites de las piezas a las que se dispara. El juego lo arranca tres pasos antes de que asome, para que dé tiempo a descomprimir sus gráficos.
0x6917 son nueve direcciones de disparo, un cuarto de vuelta con radio 320. Siete de las nueve cuadran al bit con 320·sen y 320·cos; las entradas 3 y 5 contienen exactamente lo de la otra. No es redondeo: es una errata, y dos de los nueve ángulos de disparo enemigo apuntan al espejo del que les tocaba.
En 0x6684 un jr c aterriza en el último byte del ld bc,0x0300 de 0x6686. Ese byte es 0x03, y suelto se ejecuta como inc bc: con acarreo BC queda en 0xFE01, y sin acarreo se ejecuta el ld entero. Un byte ahorrado frente a un jp. En 0x69A1 hacen lo mismo con el 03 de un ld (hl),3.
De los dos descompresores de la casa, el de la tabla de nombres (0x43D8) tiene una segunda puerta en 0x43F3: entrando por ahí escribe ceros en vez del dato. Así el cartucho no guarda un guión para poner cada cosa y otro para quitarla, sino uno solo.
Debajo de cada imagen está de dónde sale y qué se está viendo.