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 se vuelven a montar los caracteres y el mapa con sus mismas tablas. Lo demás —el listado y las cifras— sale del binario y se reproduce con make.
SCREEN 2 no tiene registro de desplazamiento, así que Pippols se lo fabrica: en la VRAM hay 192 caracteres (del 0x40 al 0xFF) que son ocho copias del mismo juego de 24, cada una bajada un pixel más. Desplazar la pantalla un pixel es sumarle 24 al número de carácter y volver a escribir la tabla de nombres entera, 24 filas por 22 columnas, cada fotograma; no se toca ni un patrón.
De los doce caracteres de cada mitad, cuatro son costuras (0x56ED): el final de una tira arriba y el principio de otra abajo. Sin ellas el dibujo se partiría a media altura en cuanto el desplazamiento no fuera cero.
Una fase son trece tramos de 24 filas; un tramo, seis piezas de cuatro columnas; y las 44 piezas se montan en RAM pegando grupos de tres filas de un diccionario de 25 (0x54C0). La lista de índices —ocho por pieza— son 328 bytes, y con eso está descrito el camino entero.
El bucle de 0x5496, sin embargo, lee 352 índices: las 24 últimas lecturas caen ya dentro del código de 0x5653, y de ahí salen tres piezas de basura. No importa, porque ningún tramo apunta a ellas. A las piezas 0 y 1, que están bien montadas, tampoco.
En openMSX, sobre un Philips VG-8020 (PAL, 71 591 ciclos por fotograma) y con 1112 fotogramas de la demo: repintar la tabla de nombres se lleva 32 557 ciclos de media, el 45,5 % del fotograma, y la interrupción entera 52 533, el 73,4 %. Son 732,7 escrituras al puerto del VDP por fotograma.
Por eso el programa principal no hace nada: se queda en un jr $ de dos bytes en 0x4074 y todo el juego corre dentro de la interrupción, un paso por fotograma.
Los puntos son tres bytes BCD, pero el panel pinta las seis cifras y detrás un cero fijo. Lo que se ve es diez veces el contador, y por eso todas las puntuaciones acaban en cero. La primera vida extra cae a los 20 000 y luego cada 60 000.
En 0x717D hay un jr nz,$+4 que va a parar a 0x7181, y 0x7181 no es el principio de nada: es el byte de desplazamiento del jr z de la línea de arriba. Se ejecuta como dec b, que ahí da igual porque el bucle de enemigos guarda BC en la pila, y sigue de largo. Es el único sitio del cartucho donde se entra a una instrucción por en medio.
Las 18 pantallas del mundo comparten los dibujos del fondo: hay ocho fases pero sólo cinco juegos de tiras, y lo que cambia de una pantalla a otra es un intercambio de tres parejas de tintas (0x577D) sobre los 96 bytes de color. La misma flor sale roja o rosa, el mismo árbol verde o azul.
Y el recorrido no es una fila: la tabla de 0x7B62 da dos destinos por pantalla, y se toma uno u otro según se vaya subiendo o bajando.
En la tabla de 0x785A cada objeto lleva su pareja (patrón, color). El objeto 8 —la bota, que hace andar una vez y media más rápido— y el 9 —el escudo— llevan el mismo patrón, 0xC0, y sólo se diferencian en el color. Los objetos 1 y 4 hacen lo mismo con el patrón 0xA4.
Cada una de estas imágenes es el cartucho repetido fuera de él: las tiras del fondo se descomprimen como las descomprime la ROM, los 192 caracteres se generan con el mismo bucle y el mapa se monta con las mismas tablas. Debajo de cada pie está la dirección de la rutina de donde sale.