Aquí no hay ninguna ilustración ni captura. El rótulo y todas las pantallas están dibujados desde los bytes de la ROM, ejecutando en Python el mismo descompresor y los mismos pintores que corre el Z80, y cotejados byte a byte contra la VRAM de openMSX. El listado y las cifras salen del binario y se reproducen con make.
Copia a la RAM los 256 primeros bytes del arranque del cartucho vecino, leyéndolos con RDSLT, y busca ahí la secuencia 9B FD: es el operando de ld (0xFD9B),hl, la instrucción con la que un juego de Konami instala su rutina de interrupción en el gancho H.KEYI. La sustituye por cinco bytes (0x4CB9) y esa instrucción pasa a ser ld (0xD130),hl + call 0xD814: el gancho del juego queda guardado y el control es del Game Master. Luego ejecuta la copia parcheada, no la original.
Funciona con todo el catálogo porque todos los cartuchos de Konami arrancan igual. Comprobado sobre las 42 ROM de cartucho de la colección: las 40 de Konami llevan esa instrucción en los 256 bytes de su INIT. Las dos únicas que no la llevan son Casio World Open —que no es de Konami— y el propio Game Master.
Primero mira si el vecino trae la segunda cabecera de 0x4010, la que empieza por AB o CD. De las 42 ROM de la colección sólo la llevan cinco. Para todo lo demás suma los 256 bytes que van de 0x5000 a 0x50FF de la ROM del vecino y busca esa suma de 16 bits en la tabla de 0x5F3A: 62 entradas que apuntan a 29 cabeceras postizas de 19 bytes para 28 juegos —la tabla lleva las compilaciones alternativas de cada uno—.
La tabla está cotejada: de los 28, 25 se han comprobado sumando de verdad los bytes de sus ROM. Los otros tres no tienen ROM aquí y salen del manual, y el binario y el manual coinciden hasta en los huecos: ni uno ni otro tienen RC-719, RC-722 ni RC-726.
La tabla de trucos de 0x5B02 da una rutina por juego, y hay dos parejas que comparten la suya. Una es RC-710 y RC-711, los dos Hyper Olympic, que se distinguen dentro comparando el número de catálogo. La otra es RC-700 y RC-716: para el Game Master, Athletic Land y Cabbage Patch Kids son el mismo programa y se les tocan las mismas variables. Es exactamente lo que se midió al desensamblar el segundo, ahora dicho por la propia Konami.
El cartucho no puede pintar en la pantalla del juego sin estropearla, así que avisa con la luz del teclado: 0x4E70 llama a CHGCAP cada vez que se congela o se descongela la partida. Y al congelar calla el PSG de verdad: 0x4E85 se guarda los volúmenes de los tres canales antes de ponerlos a cero, y 0x4EF8 los devuelve al reanudar.
De paso, un ahorro de los que se ven poco: 0xD12D guarda el volumen del canal C y a la vez es el byte bajo del IY con el que se llama entre ranuras. Se puede porque CALSLT sólo mira IYh.
El Game Master ocupa la página 1. El juego al que le hace trucos ocupa también la página 1, en otra ranura: los dos no pueden estar puestos a la vez. Todo el cartucho está construido alrededor de esa pelea. Seis bloques de código se copian a la RAM y se ejecutan allí, porque conmutar la ranura desde la ROM sería serrar la rama en la que uno está sentado.
Eso obliga a leer el listado con cuidado: las direcciones absolutas de esos bloques apuntan a donde se ejecutan, no a donde están guardadas. El trazador lleva una directiva (!reubica) para seguirlos, y con ella el trazado pasó del 52,9 % al 60,0 %.
Los menús de disco y cinta sólo borran 0x100 bytes desde 0x3A00, o sea las ocho filas de abajo: lo demás se queda como estaba. Y antes, 0x4275 llama a la rutina que se lleva la VRAM del juego a la RAM para poder devolverla. Así que en la máquina real la mitad de arriba de esas pantallas es la partida corriendo, no un fondo del cartucho.
Cuatro trozos (0x6445, 0x6787, 0x6904 y 0x6938) desensamblan a Z80 correcto, empiezan justo detrás de un ret y acaban justo donde arranca una etiqueta que sí se usa. Pero no hay ni una referencia de 16 bits ni un salto relativo que caiga en ellos, buscados por los 16.384 bytes del cartucho. Más dos puertas de dos bytes (0x5022 y 0x6FB5), cada una un ld b,N puesto para poder entrar a la rutina de al lado con otro valor, a las que no salta nadie. Son restos de una compilación anterior: de este cartucho hay tres.
En los últimos 22 bytes: RC-735 y 19 bytes de katakana que dicen 10バイタノシムカートリッジ —«el cartucho para disfrutar diez veces más»—, que era su eslogan. El formato lo descubrió Manuel Pazos (@ManuelPazosMSX). De paso, esta marca confirma que el 0xBA es el alargamiento ー, que hasta ahora estaba sin cerrar.
Debajo de cada imagen está de dónde sale y qué se está viendo.
© KONAMI 1986 que fecha la compilación, y los seis atributos de sprite. Cotejada contra la VRAM de openMSX: de los 16.384 bytes, el único que discrepa es 0x39A9, y no es un error — es el cursor parpadeandoKONAMI