El código

El juego entero vive en la interrupción

INIT pone el modo 1, engancha H.KEYI (0xFD9A) con un jp 0x402C, pone la RAM a cero y se queda para siempre en el jr $ de 0x40A9. Todo lo demás pasa en el gancho, una vez por cuadro: el sonido primero, después los mandos y después la escena. El cerrojo de 0xE005 cuenta las interrupciones solapadas: si un cuadro tarda más de la cuenta, la siguiente se atiende al salir, sin volver a la pila.

Las tablas van pegadas detrás del call

despacha_por_tabla (0x404E) saca con pop hl su propia dirección de retorno, que es donde empieza la tabla. Así se reparten las escenas, los cinco montajes (0x5FEF), los cinco arranques (0x60B6) y los cinco cuadros (0x4C93).

Tres máquinas de datos

Reescritas en Python en tools/:

Y la pista, desde las tablas

tools/pista.py es el cuadro de partida rutina a rutina: parte del estado que dejan 0x604C y el arranque de cada número (0x60B6), y en cada cuadro mueve y pinta lo que mueve y pinta el juego. Contra 43 volcados de openMSX: 0 bytes distintos (make coteja_pista). tools/corre_circus.py, que ejecuta el cartucho en el Z80 de tools/z80run.py, queda como segunda vara (make coteja_arranque), no como fuente de las imágenes.