Aquí no hay ninguna ilustración. Las pantallas son capturas del cartucho corriendo en openMSX, tomadas por un guion que solo cambia el número de prueba que el propio juego usa como índice; el logotipo y la hoja de la fuente están dibujados desde los bytes de la ROM, ejecutando en Python el mismo intérprete de guiones que ejecuta el Z80. El listado y las cifras salen del binario y se reproducen con make.
El cartucho tiene cuatro pruebas y los 400 metros no existen en el arcade del que viene. Aparecen aquí sin costar casi nada: la prueba 4 reaprovecha la lista de pantallas y el marcador de la 1, y lo único que cambia es el rótulo de la pizarra.
Ese rótulo, en 0x6332, es el de los 100 metros con el primer glifo cambiado de «1» a «4». Un byte.
0x5695 suma al reloj de la prueba 1,665 centésimas por cuadro, que es un sesentavo de segundo. Medido en openMSX en dos máquinas, con el mismo guion:
Philips VG-8020 (PAL) 50 Hz 0,8325 s de juego por segundo real C-BIOS MSX1 JP (NTSC) 60 Hz 0,9990 s de juego por segundo real
En un MSX europeo un «12,00» son 14,4 segundos de verdad. Y ojo con leerlo al revés: eso es un periodo, no una velocidad. El juego no va lento; el que cuenta corto es el cronómetro. Las marcas de clasificación y los récords están pensados para la máquina japonesa.
0x5174 lleva 00 09 95 / 00 08 90 / 00 83 98 / 00 43 86, que INIT copia a 0xE040: 9,95 en los 100 m, 8,90 en longitud, 83,98 en martillo y 43,86 en los 400. Los cuatro son récords del mundo de verdad, pero dos ya estaban batidos cuando el cartucho llegó a las tiendas: Calvin Smith corrió 9,93 el 3 de julio de 1983 y Litvinov dejó el martillo en 84,14 ese mismo año.
Los dos que aguantaban eran los de México 68, que llevaban quince años sin que nadie los tocara. Las fechas no salen del cartucho: son un cotejo con las progresiones públicas. Del cartucho sale la cifra.
Los 51 glifos de 0x6002 van ordenados: 0..9, el espacio, y luego el alfabeto de la A a la Y saltándose la Q, la X y la Z. Con la A en el índice 0x0B, la P cae en 0x1A y la siguiente ya es la R.
Y sin embargo la Q existe: está al final, en el índice 0x2C, fuera del alfabeto y entre los símbolos. El motivo es la única palabra del juego que la necesita, el rótulo QUALIFY del marcador, que en 0x5F87 es la tira 2C 1E 0B 16 13 10 21. Alguien montó el alfabeto sin las tres letras que no hacían falta, y después tuvo que añadir una.
Esto es de lo que solo se ve dibujando: leyendo el bloque, los 51 glifos son 408 bytes iguales. La hoja está más abajo.
0x4C49 copia los glifos normales de 8x8 a un papel en RAM, y 0x4CAB da tres pasadas sacando los dos bits altos de cada byte y metiéndolos en el byte de ocho posiciones antes. Una fila de ocho glifos da cuatro filas de patrón: la letra sale al doble sin ocupar el doble en la ROM.
El ahorro tiene precio, y está medido: tres rótulos declaran veinticuatro bytes de largo y solo llevan dieciséis suyos, así que se llevan ocho del bloque de detrás.
La demo no lleva una partida grabada: la juega la interrupción. Con 0xE002 a 1, 0x4030 mete en 0xE00B un valor de ld a,r —el registro de refresco de la memoria— enmascarado a dos bits, una vez cada cuatro cuadros. Eso es todo el piloto.
Y hay una trampa que solo caza el emulador. El bit 7 de 0xE029 parece el interruptor de la demo, porque 0x5849 lo pone y 0x4030 lo mira; pero muestreado en las dos situaciones vale igual en la demo y en una partida de verdad. El que manda es 0xE002.
Las cuatro fichas de actor viven seguidas en 0xE120, 0xE130, 0xE140 y 0xE150, de dieciséis bytes cada una. El bit 2 de una ficha hace que ese actor suba el contador de la que tiene 0x11 bytes por detrás, y el bit 3 el de la que tiene 0x0F por delante.
Así el decorado se arrastra en cadena sin que nadie lleve una lista de quién empuja a quién: la relación está en la distancia entre las fichas.
Comparando el código con los operandos de dieciséis bits puestos a cero —para que una rutina reensamblada en otro sitio también se vea—, este cartucho comparte 6.298 bytes, el 67,5 %, con su cartucho hermano. Con cualquier otro cartucho Konami de MSX de esta serie no llega al 2 %, y sus tramos comunes más largos van de 21 a 42 bytes, frente a los 681 seguidos que comparte con el hermano.
O sea que los dos Hyper Olympic no son ni el armazón de unos ni el de los otros. Son un tercero, y de momento solo tiene dos miembros. Las cifras completas, una por cartucho, están en Hallazgos.
Muchos cartuchos de la casa esconden al final de la ROM su número de catálogo RC-7xx y el título en katakana, detrás del relleno; lo descubrió Manuel Pazos (@ManuelPazosMSX).
Aquí no está: el último byte útil es código del reproductor de sonido y solo queda un 0xFF de relleno. Se comprobó con tools/marca_konami.py, que en el mismo tiro sí la encuentra en otro cartucho de la casa, así que el método funciona. El RC-710 viene del catálogo, no del binario.
Debajo de cada imagen está de dónde sale y qué se está viendo.
pantalla_del_menu y las cuatro líneas del menú. La que se elija deja en 0xE01B un número del 1 al 4, y de ahí salen el número de jugadores y el mandotools/graficos.py. Se ve de un vistazo lo que el listado afirma: no hay X ni Z, y la Q está al final, fuera del alfabeto