Knightmare

Konami dejo dos erratas en sus tablas de coseno. El cartucho lleva dos cuadrantes de coseno para sacar el seno y el coseno de un angulo, y un cuadrante de coseno solo puede bajar: estos dos suben una vez cada uno, y el valor que sube es justo el unico que se aparta de la funcion. Dentro hay ademas un truco que pide izquierda y derecha a la vez -imposible en un joystick- y da veintiseis vidas.

Konami - (c) Konami 1986 - Cartucho RC-739, 32 KB - MSX1 - paginas 1 y 2 - Volcado 6e7a8a2d...

Aqui no hay ninguna captura. Todas las imagenes estan dibujadas desde los bytes de la ROM, ejecutando en Python los mismos descompresores, espejos y montadores de bandas que corre el Z80, y cotejadas byte a byte contra la VRAM de openMSX: las ocho fases volcadas del emulador dan cero diferencias en color (6.144 bytes), patrones (6.144) y las 704 casillas del mapa. El listado y las cifras se reproducen con make, y el reensamblado devuelve la ROM byte a byte.

El cartucho en cifras

100 %del binario explicado
985bloques de codigo medidos
22,4 %del listado comentado
15.233bytes de codigo
17.535bytes de datos
0bytes sin identificar

Lo que aparecio al desmontarlo

Konami dejo dos erratas en sus tablas de coseno

El cartucho lleva dos cuadrantes de coseno, uno escalado a 255 (0x844E) y otro a 128 (0x848F), y con ellos saca el seno y el coseno de un angulo de 0 a 255. Un cuadrante de coseno solo puede bajar. Estos dos suben una vez cada uno, y el valor que sube es justo el unico que se aparta de la funcion: la entrada 58 de la primera vale 0x2F donde le tocaba 0x25, y la 12 de la segunda vale 0x74 donde le tocaba 0x7A. Las otras 64 entradas de cada tabla se ajustan al coseno con una desviacion media de 0,48 y 1,73. Son dos erratas de los datos, y estan vigiladas por un test.

Un truco que pide izquierda y derecha a la vez

0x6F44 se llama una sola vez, justo despues de poner la partida a cero. Pide que el mando lea 0x2C en sus seis bits bajos -bits 2, 3 y 5: izquierda y derecha a la vez mas el segundo boton, que en un joystick no se puede hacer- y ademas una tecla de las filas 3, 4 o 5 del teclado. Una de las tres pone 26 vidas en (0xE060); las otras dos tocan el arma de (0xE069).

El Game Master declara ocho fases y una rutina del propio cartucho

En 0x4010 va la segunda cabecera, la que lee el Konami Game Master desde la otra ranura: "CD" 07 39, o sea RC-739. Los 21 bytes que siguen se reparten con un byte de banderas, y el reparto cuadra byte a byte: acaba en 0x4024, justo antes de donde vuelve a haber codigo. Declara la variable de escena, las vidas, el record, la puntuacion, ocho fases y una direccion mas: 0x56C8, que es una rutina de este cartucho a la que nadie de dentro llama. Lo que hace son diez bytes: pasar la fase que el Game Master escribe en (0xE061) al indice interno de (0xE062).

Los tramos de cada fase se solapan una banda exacta

El decorado se monta por bandas de cuatro filas, y el mapa de bits que dice cuando avanza el puntero de bloques va seis bytes por tramo mientras que se leen siete. O sea que la ultima banda de un tramo y la primera del siguiente salen del mismo byte. Y no solo del mismo byte: el decorado que dan es identico, comprobado en los nueve empalmes de cada una de las ocho fases.

Tres paletas de un solo guion de color

Las fases 0, 3 y 7 comparten casillas y guion de color. Lo que las distingue es (0xE661): el lector de bloques (0x443B) traduce cinco codigos de color -0xE1, 0xEC, 0xE8, 0xE6 y 0xE5- restandoles 0x50, y otros 0x50 mas si el banco es el 2. Un solo bloque de 640 bytes da los tres decorados. La 5 y la 6 van mas lejos: comparten casillas y color, y solo se diferencian en el mapa.

La demostracion es una partida grabada

0x5A73 saca un byte de 0x5A95 cada ocho cuadros y se lo pasa a guarda_lo_recien_pulsado, que es la misma puerta por la que entra el mando. Son 118 pulsaciones, unos diecinueve segundos a 50 Hz. El cp 0xFF que la cerraria nunca llega: dentro del bloque no hay ni un 0xFF, y la demostracion se corta por otro lado.

Las ocho fases, enteras

Cada una es una tira de 256 x 1952 pixeles, dibujada desde la ROM bloque a bloque; ninguna es una captura. Se leen de abajo arriba, que es como se juegan. Arrastra de lado para ver las ocho.

<b>Fase 1.</b> La tira entera, en vertical: 61 bandas de cuatro filas, montadas bloque a bloque. Se lee de abajo arriba, que es como se juega, y la banda de arriba es la puerta del jefe. Los rios y los puentes NO son casillas de la fase: los sube <code>monta_el_marcador</code> (0x565C), y son los mismos en las ocho.
Fase 1. La tira entera, en vertical: 61 bandas de cuatro filas, montadas bloque a bloque. Se lee de abajo arriba, que es como se juega, y la banda de arriba es la puerta del jefe. Los rios y los puentes NO son casillas de la fase: los sube monta_el_marcador (0x565C), y son los mismos en las ocho.
<b>Fase 2.</b> El desierto. Trae 61 casillas propias, menos que ninguna otra.
Fase 2. El desierto. Trae 61 casillas propias, menos que ninguna otra.
<b>Fase 3.</b> Las mismas casillas que la 1, pasadas por el traductor de <code>0x443B</code> con <code>(0xE661)</code> a uno.
Fase 3. Las mismas casillas que la 1, pasadas por el traductor de 0x443B con (0xE661) a uno.
<b>Fase 4.</b> Otra vez las casillas de la 1. Lo unico que cambia es la paleta: por eso los muros son rosa y no gris.
Fase 4. Otra vez las casillas de la 1. Lo unico que cambia es la paleta: por eso los muros son rosa y no gris.
<b>Fase 5.</b> De ladrillo. La 5 y la 6 comparten casillas y color y solo se diferencian en el mapa.
Fase 5. De ladrillo. La 5 y la 6 comparten casillas y color y solo se diferencian en el mapa.
<b>Fase 6.</b> La gemela de la 5, con otro mapa.
Fase 6. La gemela de la 5, con otro mapa.
<b>Fase 7.</b> La del agua, y la unica que carga nueve casillas de mas, en <code>0x2470</code> (0x553E).
Fase 7. La del agua, y la unica que carga nueve casillas de mas, en 0x2470 (0x553E).
<b>Fase 8.</b> El castillo, con el jefe final esperando en la banda de arriba.
Fase 8. El castillo, con el jefe final esperando en la banda de arriba.
<b>Fase 1, con sus objetos.</b> Los 36 registros de la lista de 0x6AF8 puestos donde nacen y ya rotos: en el sitio de cada interrogante, lo que suelta (pergamino amarillo una vida, cian 500 puntos, azul bomba, rojo congelar; bloque gris; cartel EXIT con su fase de destino; puente), con marco blanco si el bloque es visible y magenta punteado si esta escondido. Las franjas cian de los bordes son los pasadizos.
Fase 1, con sus objetos. Los 36 registros de la lista de 0x6AF8 puestos donde nacen y ya rotos: en el sitio de cada interrogante, lo que suelta (pergamino amarillo una vida, cian 500 puntos, azul bomba, rojo congelar; bloque gris; cartel EXIT con su fase de destino; puente), con marco blanco si el bloque es visible y magenta punteado si esta escondido. Las franjas cian de los bordes son los pasadizos.
<b>Fase 2, con sus objetos.</b> 42, y dos salidas: a la 3 y a la 4.
Fase 2, con sus objetos. 42, y dos salidas: a la 3 y a la 4.
<b>Fase 3, con sus objetos.</b> 42, con los tres primeros puentes escondidos y la salida a la 5.
Fase 3, con sus objetos. 42, con los tres primeros puentes escondidos y la salida a la 5.
<b>Fase 4, con sus objetos.</b> 46: seis puentes, nueve bloques grises en filas de tres y la salida a la 6, la ultima.
Fase 4, con sus objetos. 46: seis puentes, nueve bloques grises en filas de tres y la salida a la 6, la ultima.
<b>Fase 5, con sus objetos.</b> 52, la que mas; ya sin salidas.
Fase 5, con sus objetos. 52, la que mas; ya sin salidas.
<b>Fase 6, con sus objetos.</b> 50, y todos escondidos.
Fase 6, con sus objetos. 50, y todos escondidos.
<b>Fase 7, con sus objetos.</b> 45, diecinueve de ellos puentes: la del agua.
Fase 7, con sus objetos. 45, diecinueve de ellos puentes: la del agua.
<b>Fase 8, con sus objetos.</b> 43, todos escondidos, y trece bloques grises.
Fase 8, con sus objetos. 43, todos escondidos, y trece bloques grises.

Lo que el cartucho dibuja

Debajo de cada imagen esta de donde sale y que se esta viendo.

La pantalla del titulo, montada ejecutando los pasos de <code>monta_el_titulo</code> (0x47BA). El rotulo grande son 33 casillas -once por tres- escritas por un bucle desde la 0x60.
La pantalla del titulo, montada ejecutando los pasos de monta_el_titulo (0x47BA). El rotulo grande son 33 casillas -once por tres- escritas por un bucle desde la 0x60.
El cartel de KONAMI de la presentacion, en el sitio al que llega tras sus catorce pasos.
El cartel de KONAMI de la presentacion, en el sitio al que llega tras sus catorce pasos.
La primera pantalla de la fase 1 con su marcador, tal como sale del emulador: el cotejo byte a byte da CERO diferencias.
La primera pantalla de la fase 1 con su marcador, tal como sale del emulador: el cotejo byte a byte da CERO diferencias.
Los doce fotogramas de Popolon. Son TRES sprites -dos del fotograma y uno del banco de la fase- y cada fotograma ocupa 64 bytes justos. Los cuatro ultimos son la explosion.
Los doce fotogramas de Popolon. Son TRES sprites -dos del fotograma y uno del banco de la fase- y cada fotograma ocupa 64 bytes justos. Los cuatro ultimos son la explosion.
El jefe de la fase 1, montado con los SIETE sprites que declara la tabla de <code>0x902D</code>, cada uno con su desplazamiento y su color.
El jefe de la fase 1, montado con los SIETE sprites que declara la tabla de 0x902D, cada uno con su desplazamiento y su color.
Y el de la fase 3, que son NUEVE, de la tabla de <code>0x9338</code>.
Y el de la fase 3, que son NUEVE, de la tabla de 0x9338.
Los dieciseis tipos de bicho, uno por bloque de <code>0xA993</code>. No caben a la vez: el cartucho los recarga en TRES ranuras de la hoja de sprites (0x1D00, 0x1E00 y 0x1F00) segun lo que vaya saliendo.
Los dieciseis tipos de bicho, uno por bloque de 0xA993. No caben a la vez: el cartucho los recarga en TRES ranuras de la hoja de sprites (0x1D00, 0x1E00 y 0x1F00) segun lo que vaya saliendo.
Los 42 fotogramas de la tabla de <code>0x7772</code>, cada uno con el bloque de SU tipo cargado en la ranura: sin eso el byte de patron es relativo y no dibuja nada. El fondo es gris a proposito, que casi todos son siluetas de color 1, o sea negras.
Los 42 fotogramas de la tabla de 0x7772, cada uno con el bloque de SU tipo cargado en la ranura: sin eso el byte de patron es relativo y no dibuja nada. El fondo es gris a proposito, que casi todos son siluetas de color 1, o sea negras.
Las siete armas de la tabla de <code>0x63FB</code>, pareja <code>[patron][color]</code>. Solo las dos ultimas se animan, con cuatro fotogramas cada una.
Las siete armas de la tabla de 0x63FB, pareja [patron][color]. Solo las dos ultimas se animan, con cuatro fotogramas cada una.
Los siete fotogramas de salida del disparo, de la tabla de <code>0x8250</code>, que <code>0x8231</code> indexa con la cuenta.
Los siete fotogramas de salida del disparo, de la tabla de 0x8250, que 0x8231 indexa con la cuenta.
Y la materia prima: los 37 patrones fijos que <code>0x54BE</code> sube al empezar cada fase -las armas, los disparos y los objetos-. Van en blanco porque un patron de sprite NO tiene color propio: se lo pone cada tabla que lo usa, y ahi arriba estan los que lo tienen.
Y la materia prima: los 37 patrones fijos que 0x54BE sube al empezar cada fase -las armas, los disparos y los objetos-. Van en blanco porque un patron de sprite NO tiene color propio: se lo pone cada tabla que lo usa, y ahi arriba estan los que lo tienen.