Todas las imágenes de aquí son capturas del cartucho. Y ninguna se ha hecho a mano: un guion arranca la ROM en openMSX sin pintar nada, vuelca la memoria de vídeo en unos instantes fijos y el PNG se monta desde el volcado. La primera pasada no pulsa una sola tecla, porque el demo se juega solo. El listado y las cifras salen del binario y se reproducen con make.
Declara riichi, canta pon y chi, se defiende cuando va perdiendo y gana manos caras. Pero no evalúa su mano en ningún momento, y las dos piezas que lo sostienen son igual de descaradas.
La primera: su mano no se roba, se construye. Antes de repartir nada, 0x78CE arma catorce fichas a medida —un palo, unos cuantos tríos, escaleras o parejas, y una pareja al final— y luego quita una. La máquina empieza cada mano a una sola ficha de completarla, y las copias que gasta se descuentan de los contadores para que al jugador no le salgan después.
La segunda: no descarta de su mano. Sus trece fichas no se mueven; lo que va a su río es una ficha sorteada del muro (0x583C) y pasada por un filtro: los cuatro primeros descartes son honores, los cuatro siguientes unos, doses, ochos y nueves, nunca una de sus propias esperas y nunca del palo al que va. O sea el orden en que descarta una persona, obtenido sin mirar la mano.
Al pintar la mano del rival boca abajo, una de las fichas se dibuja como hueco, y parece que dice de dónde acaba de robar. La mitad de las veces no es verdad: 0x553C elige ese hueco al azar o el de la robada según el bit 0 de la semilla, y solo se vuelve honesto cuando la máquina está en riichi.
Junto al filtro de descartes hay una comprobación para no soltar terminales, y está mal escrita. Compara el número de la ficha con el 1 y, si no lo es, se vuelve; y si lo es, compara ese mismo 1 con el 9, que tampoco cuadra, y se vuelve igual.
5961: cp 1 5963: jr nz,5987 ; no es un 1 -> se acepta 5965: cp 9 ; A vale 1: nunca es 9 5967: jr nz,5987 ; -> se acepta igual 5969: call ... ; devolver al monton y sortear otra: 596C: call ... ; TRES instrucciones que no corren nunca
El sorteo que hay debajo está perfectamente formado y no se ejecuta jamás.
Con tsumo, el pago sale de las tablas de «al robar», que son lo que pagaría un solo jugador en una mesa de cuatro. Pero 0x5B85 carga la misma cifra en los dos pendientes y luego solo rebaja el del que paga, no el del que cobra: el perdedor paga la parte de uno y el ganador cobra la cifra entera del ron.
Se crean puntos de la nada, y la pantalla del recuento lo imprime sin disimulo, con ハライ (lo pagado) y トクテン (lo cobrado) en dos líneas distintas. En el demo se pagan 6.000 y se cobran 18.000, y los dos marcadores acaban en 23.000 y 48.000.
Al arrancar el demo, el cartucho escribe un 8 en el byte del estado. Ese 8 no llega a despacharse nunca —la instrucción siguiente hace inc, así que el estado que corre es el 9—, y sin embargo se escribe:
418C: ld a,008h 418E: ld (0E000h),a ; el estado... que se convertira en 9 418F: rra ; el mismo 8, rotado: sale un 4 4190: ld (0E040h),a ; y ese 4 es LA DIFICULTAD
De rebote, el demo juega en la dificultad de en medio: 0xE040 vale 4 durante todo el ciclo, y la barra de arriba lo rotula セミプロ, mientras que una partida empezada con la tecla 1 pone アマ en el mismo sitio.
Cada ficha se dibuja con seis tiles, dos de ancho por tres de alto, y las hileras caen siempre a caballo de dos tercios de pantalla. En el tercio de en medio solo se ve la fila de abajo de las fichas de arriba y la de arriba de las de abajo: la fila del medio de cada ficha no se dibuja nunca ahí.
Y ahí es donde está el texto. Cruzando la tabla de fichas con las tablas de nombres de 124 volcados de memoria de vídeo, de los 97 tiles que usa la barra central 56 son exactamente el par central de alguna ficha. El mismo número de tile es media ficha en un tercio y un kanji en otro.
No hay un modo demo aparte. Cuando nadie toca nada, el cartucho recorre la misma máquina de estados que una partida, con las mismas rutinas; lo único que cambia es de dónde salen las pulsaciones. 0x416B engancha el bloque de 0x4AE8 —ciento cuatro bytes— en lugar del teclado, con las mismas máscaras de bits que arma el lector de verdad y un formato de longitud variable: el nibble bajo de cada entrada dice si ocupa uno o dos bytes.
Por eso sale igual cada vez: dos arranques en frío independientes dan la misma traza, instante a instante. Lo que no es constante es cuánto dura cada vuelta —se miden 163,53, 168,96 y 170,56 segundos entre pasadas por el estado 0—, porque la semilla del azar sale del registro R del refresco de memoria y con ella cambia la mano que se construye la máquina.
Muchos cartuchos de Konami de esta época esconden al final de la ROM su número de catálogo RC-7xx y el título del juego en katakana; lo descubrió Manuel Pazos (@ManuelPazosMSX).
Este no. En los 32768 bytes no hay ni un RC-7 en ASCII, ni la palabra KONAMI: el contenido acaba en 0x9FE4, en la tabla de semitonos, y detrás solo hay 8.219 bytes de 0xFF. El RC-707 sale del catálogo, no del binario.
Debajo de cada imagen está el estado del juego en que se hizo la captura y qué se está viendo.