Nemesis

El Gradius de Konami metido en un MegaROM de 128 KB para MSX1: doce fases, treinta y un tipos de bicho y un medidor de mejoras, con los mapas montados columna a columna en la RAM.

Konami · © Konami 1986 · MegaROM RC-742, 128 KB, mapper Konami4 · MSX1 · 16 bancos de 8 KB · Solo 6 bancos llevan código

Aquí no hay ninguna ilustración ni captura. Las pantallas y los doce mapas están dibujados desde los bytes de la ROM, ejecutando en Python el mismo descompresor de rachas, el mismo cargador de caracteres y el mismo montador de columnas que corre el Z80. El listado y las cifras salen del binario y se reproducen con make.

El cartucho en cifras

100 %del binario explicado
916rutinas bautizadas
12fases dibujadas
25.471bytes de código
105.601bytes de datos
23,4 %de líneas comentadas

Lo que apareció al desmontarlo

Las fases no van en orden, y cuatro de ellas son de bonus

De una fase se sale por dos sitios: acaba_la_fase le suma uno al numero de fase, y salta_a_la_fase le mete uno escrito a mano. A este segundo saltan OCHO sitios, cada uno con el suyo, y de ahi sale el recorrido de verdad: 1 - 2 - 9 - 3 - 10 - 4 - 11 - 5 - 6 - 7 - 12 - 8. Las fases 9 a 12 son de bonus: no llevan jefe y su final devuelve la fase a la 3, la 4, la 5 y la 8. Y lo que las abre es el blanco del final de la fase: 0xB130, la unica instruccion de los 128 KB que para la pantalla, es la que miran los finales de la 2, la 3, la 4 y la 7.

La VRAM de este cartucho va del revés que la de la BIOS

Los ocho bytes de 0x575A programan los registros del VDP y no dejan nada donde lo deja la BIOS: los patrones viven en 0x2000 y los colores en 0x0000, la tabla de nombres en 0x3800 y los atributos de sprite en 0x3B00, pegados detrás de ella. Quien lea las direcciones de este listado esperando el reparto de siempre se equivocará en todas.

El mapa no está en la pantalla: está en la RAM, y se corre a mano

Las veintidós filas de treinta y dos casillas viven en 0xED00. Cada paso de scroll, 0x469D las corre una columna a la izquierda con veintidós ldir, 0x46AE mete por la derecha la columna nueva y 0x47FE sube los 704 bytes enteros a la VRAM con outi. La columna que entra sale del guión de la fase: cada cuatro columnas, seis números de pieza, y cada pieza son cuatro por cuatro caracteres. Con eso están dibujados los doce mapas de abajo, sin tocar el emulador.

Todo el azar del cartucho es el registro R del Z80

No hay ni una semilla ni un generador. Lo que hace de azar es ld a,r, el registro de refresco, que va contando solo con cada instrucción: de ahí salen cuál de los dos dibujos de estrella se pone en cada columna de cielo (0x4750), por qué puerta cae cada piedra de la lluvia (0xABC2), cuántos cuadros dura cada dibujo del bicho que parpadea a destiempo (0xB016 y 0xBC59) y cuántos anda el que camina por el suelo (0xAAE6).

Cada bicho es un número y dos rutinas

Un objeto se resume en su tipo, del 1 al 0x1F. Ese número manda en dos tablas gemelas: la de p00:0x5DFD dice quién lo mueve cada cuadro y la de p01:0x6B46 quién acaba de montarlo al nacer. De los treinta y un tipos, veinte tienen en el banco 3 al menos una de las dos, y dieciseis las dos, y por eso 0xA7B9..0xB537 es el trozo de código más largo del cartucho.

La espiral se hace sin senos: un octavo y una multiplicación

El tipo 0x1D se cierra en espiral alrededor de un centro, y para eso no hay tabla de senos: se toma la diferencia hasta el centro en una dirección, se parte por ocho con tres sra a y se le suma a la otra, y con la otra al revés. Eso es un giro de unos siete grados por paso. El radio se encoge aparte, multiplicando las dos coordenadas por un byte que empieza en 0xFF y baja de uno en uno cada 0x3C cuadros.

La demo no la juega ninguna máquina lista: es una grabación

En el banco 12 hay, por fase, una lista de parejas [cuántos cuadros][qué vale el mando]. 0x5CDA la va leyendo y mete el valor grabado en 0xE009, la misma casilla donde 0x5767 deja lo que lee del joystick de verdad, encendiéndole además el bit del disparo. Y arranca con todo puesto: 0x5CB8 llama a la misma rutina que da la clave HYPER.

Las claves de teclado solo se leen con el juego en pausa

0x44E7 mira la tecla GRAPH y, con la pantalla parada, 0x50C9 va guardando letras en 0xE1E8 hasta que se pulsa RETURN; entonces se compara lo escrito contra las palabras de 0x51BF. Si se escriben jugando no pasa nada: el teclado de las claves solo existe mientras el juego está parado.

La tabla de puntos de control se queda corta: la fase 12 lee código

La tabla de 0x4214 dice a qué distancia vuelve a arrancar cada fase si ya habías llegado hasta ahí, y se lee con HL = 0x4212 y DOS VECES el número de fase. Tiene once entradas: la fase 1 coge la de 0x4214 y la 11 la de 0x4228. La fase 12 lee en 0x422A, que ya es código -los dos primeros bytes de un call-, y le sale 0xBACD, o sea 47.821. Como el scroll no llega ni de lejos a esa distancia, la fase 12 arranca siempre en 0x20: el fallo es real y su efecto es ninguno.

La marca escondida de Konami: RC-742 y グラディウス

Al final del banco 3, en el offset 0x07FFF del volcado, están el código de cartucho RC-742 y ocho caracteres en katakana que se leen グラディウス, o sea Gradius. Es la firma que Konami escondía en sus cartuchos, y quien la descubrió y la documentó fue Manuel Pazos.

Lo que el cartucho dibuja

Debajo de la imagen está de dónde sale y qué se está viendo. Los mapas son la fase entera, de punta a punta.

La pantalla de presentación, montada como la monta el cartucho: seis bloques comprimidos del banco 9 a los tres tercios de patrones y de colores, los caracteres del marco desde el banco 10 y la tabla de nombres, 768 bytes sin comprimir, del principio del banco 9
La pantalla de presentación, montada como la monta el cartucho: seis bloques comprimidos del banco 9 a los tres tercios de patrones y de colores, los caracteres del marco desde el banco 10 y la tabla de nombres, 768 bytes sin comprimir, del principio del banco 9
La pantalla del título, la otra: monta_la_pantalla_del_titulo (0x5B31) descomprime sus patrones de 0x9C57 y sus colores de 0x9EAB en los tres tercios, y encima escribe_el_panel_del_titulo (0x5B77) pone el panel del logotipo, cinco filas de 28 caracteres desde la casilla 0x3882
La pantalla del título, la otra: monta_la_pantalla_del_titulo (0x5B31) descomprime sus patrones de 0x9C57 y sus colores de 0x9EAB en los tres tercios, y encima escribe_el_panel_del_titulo (0x5B77) pone el panel del logotipo, cinco filas de 28 caracteres desde la casilla 0x3882
EL MISMO BINARIO LLEVA LOS DOS NOMBRES. Este es el otro panel, el de 0x9BCB, dibujado igual que el de la cabecera. El cartucho lee el juego de caracteres de la máquina en 0x002B de la BIOS y, con el nibble bajo a cero -máquina japonesa-, escribe éste; con cualquier otra cosa, el de 0x9B3F, que pone NEMESIS. No son dos versiones del cartucho: los dos paneles están pegados el uno al otro en el banco 9
EL MISMO BINARIO LLEVA LOS DOS NOMBRES. Este es el otro panel, el de 0x9BCB, dibujado igual que el de la cabecera. El cartucho lee el juego de caracteres de la máquina en 0x002B de la BIOS y, con el nibble bajo a cero -máquina japonesa-, escribe éste; con cualquier otra cosa, el de 0x9B3F, que pone NEMESIS. No son dos versiones del cartucho: los dos paneles están pegados el uno al otro en el banco 9
Fase 1 entera. Los primeros 0x80 pasos son cielo -una estrella por columna, en la fila que diga la tabla de 0x478E- y a partir de ahí manda el guión: el suelo con volcanos y vegetación, y el techo
Fase 1 entera. Los primeros 0x80 pasos son cielo -una estrella por columna, en la fila que diga la tabla de 0x478E- y a partir de ahí manda el guión: el suelo con volcanos y vegetación, y el techo
Fase 2: estalactitas y estalagmitas, y al final las construcciones de piedra. Todo sale del mismo juego de piezas de 0x8000 del banco 11
Fase 2: estalactitas y estalagmitas, y al final las construcciones de piedra. Todo sale del mismo juego de piezas de 0x8000 del banco 11
Fase 3. Aquí no hay terreno ninguno: su tramo de guión es 0xFFFF, o sea que 0x46AE manda SIEMPRE a la rutina de estrellas y la fase entera es cielo. Lo mismo pasa con la sexta
Fase 3. Aquí no hay terreno ninguno: su tramo de guión es 0xFFFF, o sea que 0x46AE manda SIEMPRE a la rutina de estrellas y la fase entera es cielo. Lo mismo pasa con la sexta
Fase 4, la de los cristales
Fase 4, la de los cristales
Fase 5. Es la única con motor de fondo propio -0xB2AA, en el banco 3- y usa el otro juego de piezas, el de 0x8FF0. Casi todo lo que se mueve en ella no está en el mapa: son rectángulos de caracteres que se borran y se vuelven a pintar cada cuadro
Fase 5. Es la única con motor de fondo propio -0xB2AA, en el banco 3- y usa el otro juego de piezas, el de 0x8FF0. Casi todo lo que se mueve en ella no está en el mapa: son rectángulos de caracteres que se borran y se vuelven a pintar cada cuadro
Fase 6. La otra fase de puro cielo, como la tercera
Fase 6. La otra fase de puro cielo, como la tercera
Fase 7, la única que lleva las apariciones escritas una a una: cuarenta y tres palabras en 0xAF3F, cada una con nueve bits de distancia, cinco de fila y dos de variante
Fase 7, la única que lleva las apariciones escritas una a una: cuarenta y tres palabras en 0xAF3F, cada una con nueve bits de distancia, cinco de fila y dos de variante
Fase 8, la del laberinto de celdas
Fase 8, la del laberinto de celdas
Fase 9, la primera de las cuatro de BONUS: se entra tocando el blanco al final de la segunda, y al acabar se sale a la tercera
Fase 9, la primera de las cuatro de BONUS: se entra tocando el blanco al final de la segunda, y al acabar se sale a la tercera
Fase 10, de BONUS: se entra desde la tercera y se sale a la cuarta
Fase 10, de BONUS: se entra desde la tercera y se sale a la cuarta
Fase 11, de BONUS: se entra desde la cuarta y se sale a la quinta
Fase 11, de BONUS: se entra desde la cuarta y se sale a la quinta
Fase 12, de BONUS: se entra desde la septima y se sale a la octava, que es la ultima
Fase 12, de BONUS: se entra desde la septima y se sale a la octava, que es la ultima
Los 256 caracteres de cada uno de los tres tercios con los que se dibuja la primera fase, tal como los deja el cargador de 0x42FC. En el tercero se leen los rótulos del medidor de mejoras: <code>SPEED UP</code>, <code>MISSILE</code>, <code>DOUBLE</code>, <code>LASER</code> y <code>OPTION</code>
Los 256 caracteres de cada uno de los tres tercios con los que se dibuja la primera fase, tal como los deja el cargador de 0x42FC. En el tercero se leen los rótulos del medidor de mejoras: SPEED UP, MISSILE, DOUBLE, LASER y OPTION
Y los del final de la partida, que salen del banco 10. La tabla de nombres de esa pantalla casi no se usa: lo unico que se escribe encima es el dibujo de cuatro por cuatro del flujo de 0x4FB2
Y los del final de la partida, que salen del banco 10. La tabla de nombres de esa pantalla casi no se usa: lo unico que se escribe encima es el dibujo de cuatro por cuatro del flujo de 0x4FB2
Los patrones de sprite de 16x16 descomprimidos en la VRAM 0x1800. Los tres primeros son la nave con sus tres inclinaciones; detrás van las opciones, los disparos, las explosiones y los bichos
Los patrones de sprite de 16x16 descomprimidos en la VRAM 0x1800. Los tres primeros son la nave con sus tres inclinaciones; detrás van las opciones, los disparos, las explosiones y los bichos