Athletic Land (1984)

Un cartucho de 16 KB de 1984, desmontado byte a byte. El juego entero corre dentro de la interrupción, el mundo son sesenta y cuatro bytes de tabla, la liana son nueve dibujos y los créditos están dentro, escritos en tiles corrientes.

Konami · 1984 · Cartucho RC-700, 16 KB · MSX1 · página 1 · Volcado 7bd280ae…

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. Son las piezas que dibujan las rutinas, no pantallas de partida. Lo demás —el listado y las cifras— sale del binario y se reproduce con make.

El juego en cifras

100 %del binario explicado
32pantallas en la tabla
99fases hasta el final
7.448bytes de código
8.936bytes 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 0x40A7. Ese bucle vacío es el programa principal: a partir de ahí todo —el sonido, los mandos y un paso del juego— pasa dentro de la interrupción, un paso por fotograma.

Y como el juego es la interrupción, hace falta un candado: 0xE005. Si un paso tarda más de un fotograma, la interrupción siguiente toca la música y se va sin ejecutar nada más, así que la partida se ralentiza pero la música no se corta.

La tabla va detrás del call

Para saltar a una dirección calculada, 0x40A9 hace pop hl y usa la dirección de retorno: la tabla de palabras está pegada detrás del propio call. Nunca vuelve. Hay cinco tablas así, del estado del juego a lo que está haciendo el jugador.

El motor que dibuja el decorado, 0x5F65, hace lo mismo con parámetros: los seis bytes que siguen a su call son dos punteros y una dirección de vídeo, y el push hl devuelve el control justo detrás de ellos. Se le llama diecinueve veces, y cuatro de ellas para escribir colores en vez de tiles.

El mundo son sesenta y cuatro bytes

No hay mapa. La pantalla es un contador, 0xE054, que sube o baja de uno en uno —y al pasar de 255 cae al 56—, y lo que hay dentro sale de dos tablas de treinta y dos bytes: una dice los obstáculos fijos y la otra los que se mueven, indexadas por el contador módulo 32.

Encima, la fase retoca la pareja: la 1 se queda sin arañas ni abeja, la 3 sin abeja, y toda pantalla cuyo número acabe en 0, 4 u 8 sale vacía. Las acabadas en 0 son las metas, y llevan el rótulo CHILD PARK.

Lo que mata no es la altura a la que caes, sino desde la que caíste

No hay daño por caída en ninguna parte. Hay un byte, 0xE13A, que se escribe al pulsar el botón de saltar: la altura desde la que saltaste, más dieciséis. Desde el suelo, eso es el suelo.

Pero si saltas desde una tabla de surtidor de en medio, se guarda la altura de la tabla sin sumarle nada, y a partir de ahí aterrizar dieciséis o diecisiete puntos por debajo mata, estés donde estés en la pantalla. El mismo aterrizaje es inofensivo o mortal según dónde empezara el salto.

El salto es una tabla leída de ida y de vuelta

No hay una velocidad vertical en el cartucho. Un salto es una lista de incrementos entre un 0xFE y un 0xFF, que se recorre en un sentido restando —subiendo, cada vez menos— y en el otro sumando. El 0xFF le da la vuelta y el 0xFE lo termina.

El salto normal son dieciséis bytes: 4 4 3 3 3 3 2 2 2 2 1 1 1 1 0 0. Treinta y dos puntos de altura, dieciséis fotogramas para arriba y dieciséis para abajo, y la caída es la subida leída al revés porque son los mismos bytes.

Los créditos están dentro del cartucho, en tiles

En 0x447E, con el código de tile siendo el ASCII de la letra: ALL STAGE CLEAR, PROGRAM A.H Y.I, SOUND Y.O, CG R.S C.K. Ni un nombre completo: iniciales.

Se pintan en un solo sitio, 0x445B, cuando la fase da la vuelta de 99 a 00. Aparte de eso, en el cartucho no hay más firma que el KONAMI 1984 del título y del pie del marcador.

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.

0x5E8D — la banda de arriba: una copa de hojas con un tronco a cada lado. Cada mitad viene en dos formas, y los bits 1-2 del SCENE eligen la pareja por la tabla de 0x5E85
0x5E8D — la banda de arriba: una copa de hojas con un tronco a cada lado. Cada mitad viene en dos formas, y los bits 1-2 del SCENE eligen la pareja por la tabla de 0x5E85
0x5E97 — la otra pareja, las dos mitades a nivel. Las mismas dos llamadas con otras listas: nada de esto está guardado como pantalla
0x5E97 — la otra pareja, las dos mitades a nivel. Las mismas dos llamadas con otras listas: nada de esto está guardado como pantalla
0x5CC2 — uno de los cuatro cielos: seis filas de franjas sobre una línea de cerros. Los bits 2-3 del SCENE eligen cuál, por 0x5C7F
0x5CC2 — uno de los cuatro cielos: seis filas de franjas sobre una línea de cerros. Los bits 2-3 del SCENE eligen cuál, por 0x5C7F
0x5CE0 — otro de los cuatro: la misma lista de cuentas con otra lista de tiles. El decorado con cielo sale cuando no hay lianas, trampolines ni arañas
0x5CE0 — otro de los cuatro: la misma lista de cuentas con otra lista de tiles. El decorado con cielo sale cuando no hay lianas, trampolines ni arañas
0x5C91 — el seto de las filas 10 a 12 y la hierba, que solo se pinta si la pantalla no lleva surtidores ni postes
0x5C91 — el seto de las filas 10 a 12 y la hierba, que solo se pinta si la pantalla no lleva surtidores ni postes
0x5CF4 — el estanque, el bit 7 de los obstáculos fijos: filas 16 a 18, columnas 9 a 22. Pisar dentro de él ahoga
0x5CF4 — el estanque, el bit 7 de los obstáculos fijos: filas 16 a 18, columnas 9 a 22. Pisar dentro de él ahoga
0x5E58 — el rótulo CHILD PARK, en toda pantalla cuyo número acabe en 0: la entrada y las metas de cada fase, y siempre vacías
0x5E58 — el rótulo CHILD PARK, en toda pantalla cuyo número acabe en 0: la entrada y las metas de cada fase, y siempre vacías
0x555B — los nueve dibujos de la liana, uno al lado de otro. No hay animación: nueve dibujos leídos hacia delante y hacia atrás
0x555B — los nueve dibujos de la liana, uno al lado de otro. No hay animación: nueve dibujos leídos hacia delante y hacia atrás