Monkey Academy (1984)

Un cartucho de 16 KB de 1984, desmontado byte a byte. El juego entero corre dentro de la interrupción, los cinco niveles son cinco guiones de tres a cinco bytes, la cifra que se tapa depende de la que se ve, y las frutas se tiran unos a otros.

Konami · 1984 · Cartucho RC-702, 16 KB · MSX1 · página 1 · Volcado fdf62cfa…

Aquí no hay ni una captura de pantalla. Todas las imágenes están dibujadas repitiendo lo que hace el cartucho: se reconstruye la memoria de vídeo con sus mismas copias y luego se repiten las llamadas que pintan cada cosa. Lo demás —el listado y las cifras— sale del binario y se reproduce con make.

El juego en cifras

100 %del binario explicado
8fases distintas, que se repiten
5niveles: cinco guiones
8.962bytes de código
7.422bytes de datos
0bytes sin identificar

Lo que apareció al desmontarlo

El juego entero corre dentro de la interrupción

INIT escribe jp 0x4038 en el gancho H.KEYI y se queda en un jr $ de dos bytes, en 0x419B. Ese bucle vacío es el programa principal: a partir de ahí todo —el sonido, los sprites, los mandos y un paso del juego— pasa dentro de la interrupción, un paso por fotograma, y 0xE005 es el candado que hace que un paso lento no corte la música.

La cifra que se tapa depende de la que se ve

0x7253 elige la posición del ? restando un azar de 0 a 15 al valor de la primera cifra de la ecuación. Con un 9 delante puede caer en cualquiera de las diez primeras posiciones; con un 1 delante, solo en el primer operando.

Medido en el emulador con 400 ecuaciones del nivel 1: cero excepciones, 238 con el ? en las dos primeras posiciones y solo 67 en el resultado.

Cinco niveles, cinco guiones

Lo único que distingue un nivel de otro son de tres a cinco bytes en 0x712B: 0A 0E (+ =), 0B 0E (− =), 0D 0E (÷ =), 0C 0E (× =) y 0C 10 0A 11 0E (× ( + ) =). El generador decide el resto al ver el símbolo, en BCD: la división se construye desde el cociente y la multiplicación son sumas repetidas.

Y un azar de guiones alternativos está anulado con un xor a (0x6FBC): siempre el primero.

Las frutas se tiran unos a otros

Se cogen saltando contra ellas (100 puntos) y con el botón se tiran hacia donde se mira, por una de las dos parábolas de 0x742F/0x7451. Una fruta que va por el aire mata lo que toque: al cangrejo, que enseña un 500, o al mono.

Solo el tercer cangrejo salta (0x616F), así que solo él coge frutas y las tira, y por eso la fruta que lleva un cangrejo sigue siempre al sprite de 0xE0C8: el código lo da por hecho.

Los 22 sprites están dos veces en la VRAM

INIT copia seis sprites a 0x1800 y luego los 22 a 0x18C0 sin volver a cargar HL: COPIA_A_VRAM lo conserva. El juego usa la segunda tanda —el mono es el patrón 0x18, el cangrejo el 0x30— y los seis primeros se pisan luego con el juego de sprites que toque: normal, con la fruta en la cabeza o con la tarjeta.

El profesor de arriba a la derecha es el mono del jugador en rojo oscuro, y el que trae la respuesta en globo al tercer fallo, el mismo mono trepando, espejado, en cyan.

El sonido 0xA1 es el silencio

Las tres entradas del 0xA1 en la tabla de pistas apuntan al mismo 0xFF: tres pistas mudas que callan los tres canales. Y los efectos son del mono: un actor que no sea el mono solo puede pedir el 9, el del cangrejo que se muere (0x78F7). Los pasos y saltos de los cangrejos no suenan.

Lo que el cartucho dibuja

Cada una de estas imágenes es una rutina del cartucho repetida fuera de él: los tiles se cargan como los carga la ROM y luego se llama a lo que los pinta, con sus mismos punteros y sus mismas direcciones de vídeo. Debajo de cada pie está la dirección de la rutina que la dibuja.

0x4C77 — el título, pintado fila de pixels a fila de pixels en los tiles 0xB8-0xFF desde el dibujo de 0x4CD0, con las tres bandas de color de 0x4C5F; el KONAMI de 0x6C42 y el menú de 0x6B99
0x4C77 — el título, pintado fila de pixels a fila de pixels en los tiles 0xB8-0xFF desde el dibujo de 0x4CD0, con las tres bandas de color de 0x4C5F; el KONAMI de 0x6C42 y el menú de 0x6B99
0x7595 — el LEVEL SELECT: PLAYER n, y las cinco líneas de 0x75D0, cada una con su tecla. Sale al empezar y tras cada fase superada
0x7595 — el LEVEL SELECT: PLAYER n, y las cinco líneas de 0x75D0, cada una con su tecla. Sale al empezar y tras cada fase superada
0x49B4 — la fase 1: las plataformas de 0x6705, las diez tarjetas de 0x50AE metidas (solo el canto), las frutas de 0x6806, las flores de 0x6B42 y el panel; arriba, la ecuación de la demo en los símbolos de 0x7207
0x49B4 — la fase 1: las plataformas de 0x6705, las diez tarjetas de 0x50AE metidas (solo el canto), las frutas de 0x6806, las flores de 0x6B42 y el panel; arriba, la ecuación de la demo en los símbolos de 0x7207
0x6685 — la fase 3, con la barra verde: el tile de plataforma es 0x05 + (fase / 2) & 3, cuatro colores que se turnan
0x6685 — la fase 3, con la barra verde: el tile de plataforma es 0x05 + (fase / 2) & 3, cuatro colores que se turnan
0x6685 — la fase 6, azul. Las ocho fases se indexan con (fase − 1) & 7 y se repiten; lo que cambia después es la velocidad de los cangrejos
0x6685 — la fase 6, azul. Las ocho fases se indexan con (fase − 1) & 7 y se repiten; lo que cambia después es la velocidad de los cangrejos
0x6685 — la fase 8, amarilla, la última distinta
0x6685 — la fase 8, amarilla, la última distinta
0x5040 — los diez bloques de 3x2 de las tarjetas con su cifra, y debajo una metida (solo el canto de 0x5082), una abierta con el canto debajo, y una a medio bajar
0x5040 — los diez bloques de 3x2 de las tarjetas con su cifra, y debajo una metida (solo el canto de 0x5082), una abierta con el canto debajo, y una a medio bajar
0x7207 — los diecinueve símbolos de la ecuación en bloques de 2x2: las cifras, más, menos, por, dividir, igual, un hueco, los paréntesis y el interrogante
0x7207 — los diecinueve símbolos de la ecuación en bloques de 2x2: las cifras, más, menos, por, dividir, igual, un hueco, los paréntesis y el interrogante
0x5156 — los tiles descomprimidos por RLE en el primer tercio, más los doce de 0x5EFF en 0xB8-0xC3
0x5156 — los tiles descomprimidos por RLE en el primer tercio, más los doce de 0x5EFF en 0xB8-0xC3
0x40C3 — los 64 sprites tal como los deja INIT: los 22 de 0x56BF dos veces, sus espejos desde el 38, el mono hacia la izquierda en 32-37 y la cara, la manzana y la tarjeta en 60-63
0x40C3 — los 64 sprites tal como los deja INIT: los 22 de 0x56BF dos veces, sus espejos desde el 38, el mono hacia la izquierda en 32-37 y la cara, la manzana y la tarjeta en 60-63