Cuál es cuál no está cerrado. De este cartucho hay varias compilaciones distintas, y lo que esta web dice sobre versiones y regiones puede cambiar. El listado y las cifras salen del binario igualmente, y make las reproduce.
Lo que se ve cuando el juego se deja solo no lo juega ninguna inteligencia: son 64 bytes en 0x584A que llevan exactamente los mismos bits que devuelve el joystick, y el lector de mandos coge uno cada 32 fotogramas. Entre byte y byte se repite la dirección anterior.
Y encaja hasta en la duración: la demo dura 1852 pasos, o sea 58 de esos 64 bytes, y la tira acaba justo donde empieza la primera instrucción de la rutina siguiente.
Entre la inicialización de la máquina y el arranque del juego hay un ldir que copia tres bytes —C3 00 00, es decir jp 0000h— encima del despachador que gobierna todo el juego.
En un cartucho eso no hace nada, porque esa mitad del mapa de memoria es ROM y la escritura se pierde por el camino. Pero si el cartucho estuviera copiado en RAM, el despachador quedaría convertido en un salto a cero y la máquina se reiniciaría en el primer fotograma, porque el bucle de juego lo llama enseguida. Que lo hace está comprobado leyendo los bytes; para qué lo hace, cada cual.
El cartucho lleva ocho nombres de base y el recorrido tiene diez paradas. Siete nombres se reparten esas diez —tres de ellas son la misma— y el octavo, NEW ZEALAND, no lo pide nadie.
No es una impresión: no está entre las diez entradas de la tabla, ninguna instrucción lo apunta, y ninguna de las veinte direcciones de esa cadena aparece como palabra en los 16 KB del cartucho. Las otras siete sí aparecen apuntadas.
Ni un gráfico está en crudo. Hay un descompresor de 61 bytes con cuatro puertas de entrada distintas, y el formato es de los que se leen de un vistazo: un byte dice si lo que viene se repite tantas veces o si son tantos bytes tal cual.
Lo bonito es la cuarta puerta: invierte los bits de cada byte según entra, que en una pantalla de mapa de bits es un espejo horizontal. Así el borde derecho de la pista no ocupa un solo byte más que el izquierdo: es el mismo, leído al revés.
Las rutinas que hablan con el chip gráfico van por parejas: una para escribir y su gemela exacta para leer. Las dos de escribir se usan a todas horas. Las dos de leer no las llama nadie, y se puede afirmar sin miedo porque la dirección de una de ellas no aparece ni una sola vez en los 16 KB, y la única aparición de la otra es la llamada que le hace su propia gemela muerta.
Este juego no lee la pantalla nunca. Solo escribe.
Saber dónde acaba una tabla suele ser lo más incómodo de un desensamblado, porque el tamaño no está escrito en ninguna parte. Aquí casi todas lo dicen: la última palabra de la tabla acaba exactamente en el byte donde empieza su primer destino, así que solo hay un tamaño posible y no hay nada que suponer.
Y hay un segundo truco de la casa, este para ahorrar instrucciones: tres tablas se apuntan un byte antes de donde empiezan, porque su índice nunca vale cero y así se evita un dec a. El byte cero de una de ellas es el último de un jp; el de otra, un ret suelto.
Nada de esto es una captura de pantalla. Está dibujado desde los propios datos del cartucho, descomprimiéndolos igual que hace el juego y con las bases de memoria que él mismo escribe en los registros del chip gráfico. Y por eso vale como comprobación además de como ilustración: si el reparto estuviera mal, lo que saldría es ruido y no unos pingüinos.