Aqui no hay ninguna captura. Todas las imagenes estan dibujadas desde los bytes de la ROM, ejecutando en Python el descompresor, el motor de figuras y el interprete de rotulos que corre el Z80, y cotejadas byte a byte contra la VRAM de openMSX: las cinco pantallas dan cero diferencias en color, patrones y patrones de sprite. El listado y las cifras se reproducen con make, y el reensamblado devuelve la ROM byte a byte.
Los doce bytes que INIT copia de 0x40CF a 0xE053 son las cuatro marcas a batir: 1'45"34 en el ciclismo, 17,97 m en el triple salto, 100 puntos en el curling y 5,90 m en la pertiga. Son los unicos valores de toda la RAM de trabajo que no arrancan a cero.
Estan en RAM y no en ROM porque el juego los sobrescribe: 0x93D1 mete el tiempo del ciclista encima del record en cuanto se mejora. La ROM no guarda ningun record: guarda el valor de salida, y a partir de ahi la marca a batir es la del jugador.
La demostracion no la juega una maquina: la reproduce. Cada prueba tiene su cinta de mandos guardada en la ROM y el bucle la va soltando fotograma a fotograma como si fuera el mando. Por eso la demostracion hace siempre exactamente lo mismo, con las mismas marcas.
Y hay una excepcion que se nota: el ciclismo no tiene grabacion. Ahi el rival se mueve con ld a,r -el registro de refresco de la DRAM, que va subiendo con cada instruccion- usado como dado. Es la unica prueba en la que la demostracion no sale igual dos veces.
La tabla de 0x7346 no es una curva a ojo: son noventa grados de seno, un byte por grado, con el 0xFF en el noventa. Con ella y un desplazamiento de un cuarto de vuelta salen las dos componentes de cualquier angulo.
Y en el curling ni siquiera se calcula el angulo: las dos curvas de la piedra normalizan el vector -lo dividen por su modulo aproximado- y se quedan con las dos componentes. La piedra sale recta sin que el cartucho sepa nunca cuantos grados lleva.
La tabla de periodos del sonido parecia tener diez entradas y sobraban dos indices que nadie sabia de donde salian. Los dos que faltaban estan escondidos en la entrada [0] de la tabla de pistas, la que se daba por muerta porque ninguna pista la usa: sus dos bytes son la continuacion de la tabla de al lado.
Es el mismo truco que el de la tabla de listones de la pertiga, apuntada dos bytes por debajo para que el indice empiece en uno en vez de en cero. Dos bytes ahorrados, dos veces.
Las cuatro pruebas mueven la pantalla, y ninguna lo hace igual:
El ciclismo no tiene el circuito en la VRAM. Vive en dos ventanas de la RAM -0xE140 y 0xE260, nueve filas de treinta y dos casillas- que se desplazan una columna por fotograma y se vuelcan enteras. Y el ciclista tampoco es un sprite: son cuatro casillas de la tabla de patrones, con ocho copias del dibujo corridas un pixel cada una generadas al arrancar la prueba rotando los bits.
El salto -triple y pertiga- guarda la pista dos veces, en su sitio y corrida cuatro pixeles, y alterna: por eso se mueve de medio tile en medio tile. El corrimiento se hace en la RAM, con sla y rl encadenados sobre doce tiles seguidos.
Y el curling no guarda media pista: la mitad derecha del hielo esta espejada a mano, bit a bit, al montarla.
Los ultimos dieciseis bytes del cartucho -0xBFF0 a 0xBFFF- llevan el titulo del juego en katakana y del reves: ハイパースポーツ3, su longitud (0x0D), el 0x33 del RC-733 y un 0xAA que cierra. No lo lee nadie: no hay una sola instruccion del cartucho que apunte ahi.
La marca la descubrio Manuel Pazos, y esta en muchos de los cartuchos de Konami de estos anos. Aqui esta entera y cuadra con el numero de catalogo.
Debajo de cada imagen esta de donde sale y que se esta viendo.