Aquí no hay ni una captura de pantalla. Todas las imágenes están dibujadas desde la cinta: una herramienta repite el descompresor del propio juego sobre los mapas comprimidos y luego revela cada baldosa como la revelaría el VDP, con sus patrones y sus colores. Que las pantallas salgan bien es la prueba de que las rutinas se han entendido bien. El listado y las cifras salen del binario y se reproducen con make.
De 0xC000 en adelante, dentro del bloque del juego, hay un programa entero que no es el juego: un monitor de código máquina con su intérprete de órdenes, su desensamblador, su paso a paso, su volcado de registros y sus mensajes de error en francés. Son 4.377 bytes, el 7,5 % de la cinta.
Va firmado, en 0xD948: Auteur:Claude SABLATOU, MONITEUR MSX, Copyright (C) 1984 LORICIELS. Y la portada del juego, que se lee descomprimiendo el mapa de 0x4281, dice (C) 1986 PAR SABLATOU CLAUDE. El autor del juego se dejó dentro su propia herramienta de trabajo: un monitor de Loriciels de 1984 viajando en un juego de Microids de 1986.
El punto de entrada del monitor, 0xC924, se llama de verdad desde el código del juego, en 0x9C6D:
9C6D 3A 9B FC ld a,(0xFC9B) ; INTFLG 9C70 FE 03 cp 3 9C72 CC 24 C9 call z,0xC924 ; y al monitor
0xFC9B es INTFLG, la variable donde la BIOS anota que se ha pulsado STOP, y el valor 3 es el de CTRL+STOP. Hay una segunda llamada suelta, call 0xC924 en 0xAA95, a la que ya no llega ningún salto.
Medido: los bytes y qué es 0xFC9B. Que la intención fuera dejarse una puerta abierta es una lectura, no un dato.
Reconoce sus órdenes buscando la inicial tecleada en una tabla de quince entradas de tres bytes que empieza en 0xD5C6 (ld hl,0xD5C6 / ld b,15, en 0xC28D). En 0xD5C6 no hay ninguna tabla.
Las 24 fichas de pantalla del juego ocupan de 0xD0C0 a 0xD8FF, 88 bytes cada una, y 0xD5C6 cae en mitad de la ficha número 14. Los datos del juego se escribieron encima de la tabla de órdenes. Con las quince claves a cero, cualquier tecla recorre las quince entradas sin éxito, imprime Commande illegale y vuelve a pedir: el monitor arranca, pinta los registros y no hace nada más. De ahí salen 2.094 bytes de código al que no llega nadie.
El paso a paso funciona copiando la instrucción del programa detenido a un buffer de cuatro bytes en 0xCC5F y ejecutándola allí. 0xCBB9 pone esos cuatro bytes a cero antes de cada paso, así que lo que quedó grabado en la cinta es lo último que pasó por ahí:
CC5F 2A 78 80 00 ld hl,(0x8078)
Y 0x8078 cae dentro de la página de variables de este mismo juego.
Medido: los cuatro bytes, que 0xCBB9 los borra y 0xCBDB los rellena, y dónde cae 0x8078. Que fuera una sesión de depuración de este juego encaja, pero el binario no lo dice.
El juego no cabe en la RAM que ve un MSX arrancado desde BASIC. Lo que hace es buscar un slot con 64 KB y meter 26 KB en las páginas 0 y 1, debajo de la ROM.
Los siete bloques que la cinta trae detrás del cargador no se ejecutan donde se cargan: cada uno lleva pegada una rutinilla que conmuta el slot, hace un LDIR y lo devuelve. Por eso aquí hay trece listados y no siete, y por eso el verify tiene dos pasos.
Los cinco trozos escondidos coinciden byte a byte con la RAM de openMSX con el juego en marcha, y con las instantáneas de un replay grabado en otra máquina. Dos medidas independientes.
:RUN que los separaEn la cinta hay tres ficheros con nombre y los tres se llaman DEMON: el cargador BASIC, un BIN de 249 bytes que carga en 0x8180 y un BIN de 24.576 que carga en 0x8000.
La línea 50 del cargador es BLOAD"CAS:DEMON",R:RUN. Como la cinta es secuencial, la primera vez encuentra el BIN pequeño —el cargador de los siete bloques— y, después del RUN, la segunda pasada encuentra el grande, que ya es el juego. Se llaman igual a propósito.
Si el mapa de la portada se vuelca como texto, sólo se leen dos filas: L'INTRUSION en la 17 y (C) 1986 PAR SABLATOU CLAUDE en la 19. Lo demás sale como puntos.
Y no es que no haya nada: es que el título está hecho de baldosas gráficas, no de ASCII. Dibujada con sus patrones, la pantalla pone DEMONIA en letras enormes ocupando las ocho primeras filas, con L'INTRUSION pequeño debajo, de subtítulo. Es el rótulo de la cabecera de esta página, recortado de ahí mismo.
0x9134: la misma instrucción escrita dos veces, ld hl,0x8058 seguida de ld hl,0x8058. Tres bytes que no hacen nada.
Ocho bytes de ret condicionales imposibles: en 0x823A hay tres ret nc seguidos, y en 0x8C3E y 0xBFE3 hay pares y ternas de ret nz. Cuando dos vuelven con la misma condición, el segundo no llega a correr nunca.
Cincuenta bytes de NOP dentro de código vivo, en once rachas. Las dos de seis de 0xDC01 y 0xDC12 están justo delante y justo detrás de un LDIR que copia tablas a la RAM escondida: exactamente donde iría una conmutación de slot que alguien quitó.
Debajo de cada pie está la dirección de donde sale. Todas se rehacen con make imagenes y no hace falta emulador.