Cabbage Patch Kids

Antes de jugar, el cartucho te hace dos preguntas: qué muñeco quieres y cómo se llama. El nombre, diez letras que de fábrica dicen ANNA LEE, te acompaña abajo en la pantalla toda la partida. Y el parque por el que anda se llama BABYLAND, con los bebés creciendo en repollos.

Konami · © Konami 1984 · Cartucho RC-716, 16 KB · MSX1 · página 1 · Volcado 114945c7…

La galería no lleva capturas. Los gráficos están dibujados desde los bytes de la ROM: tools/graficos.py rehace la memoria de vídeo con las mismas copias que hace el cartucho y descomprime sus rachas con el mismo formato que corre el Z80. Las tres capturas de emulador que hay lo dicen en su pie. El listado y las cifras salen del binario y se reproducen con make.

El cartucho en cifras

100 %del binario explicado
288rutinas identificadas
7.981bytes de código
8.403bytes de datos
0bytes sin identificar
24,5 %de densidad de comentarios

Lo que apareció al desmontarlo

El cartucho arrastra datos de otro juego, y aquí no los lee nadie

Tres bloques —0x6718 (16 bytes), 0x6AA6 (251) y 0x6BF6 (172)— son, byte a byte, listas y tiles de fondo de Athletic Land, el cartucho anterior de la casa, movidos aquí +1.724, +1.002 y +1.027.

Y no se usan: ni una instrucción del binario los apunta, ni aparece su dirección dentro de ninguna tabla. Este juego es el motor de aquél recompilado —el 68,5 % de sus instrucciones se alinean una a una—, y en la mudanza se vinieron 439 bytes de decorado que ya no pinta nadie. Lo mismo pasa con la rutina muerta de 0x44D2, que es la misma que allí.

Tú eliges el muñeco y le pones nombre, y el nombre es parte de la partida

El menú no lleva directo al juego: pasa por dos pantallas. En la primera se elige el muñeco con dos bytes, 0xE05B y 0xE05C, que dan la fila y la columna de cada mitad de la figura (0x78C9 reparte cinco sprites con ellos). En la segunda se escribe el nombre: diez letras en 0xE05D, que se recorren en redondo entre el blanco y la Z (0x7968).

De fábrica dice ANNA LEE, y está escrito en los valores de arranque del jugador, en 0x44A3, junto a las vidas y el tiempo. Con dos jugadores la pantalla se repite: cada uno bautiza el suyo (0x426B).

Todo el juego corre dentro de la interrupción

INIT (0x404F) escribe jp 0x402C en el gancho H.KEYI y se queda en un jr a sí mismo para siempre. A partir de ahí, cada fotograma la interrupción toca el sonido, lee los mandos y ejecuta un paso del estado que diga 0xE000.

Y lleva candado: 0xE005. Si un paso tarda más de un fotograma, la interrupción siguiente sólo mueve la música y se va (0x404C), así que el juego se ralentiza en vez de atropellarse.

El despachador de Konami: la tabla va pegada detrás del CALL

0x4082 no recibe la tabla: se la encuentra. Hace add a,a / pop hl, y ese pop recoge la dirección de retorno, que es justo donde empieza la tabla de palabras. Luego salta con jp (hl) y no vuelve nunca al call.

Hay cinco tablas así: los 20 estados del juego (0x4144), los seis pasos del menú (0x41F8), los 17 estados del jugador (0x6016) y dos de cuatro para las pantallas de preparación. Cada una cierra clavada contra su destino más bajo, que es lo que da su tamaño.

Y lo que tiene que correr DESPUÉS del estado se empuja en la pila

Como el despachador no vuelve, no hay forma de encadenar nada detrás… salvo dejarlo puesto antes. 0x4131 mete en HL una de dos direcciones —0x4735 con partida en marcha, 0x40C1 sin ella— y hace push hl: el ret del estado aterriza ahí.

Sin darse cuenta de eso, esas dos rutinas no las alcanza el trazador y salen del listado como si fueran datos. Son 138 bytes de código: el parpadeo del rótulo del jugador y la lectura de teclas del menú.

La rutina que el Z80 no tiene, escrita en la RAM

El desplegador de dibujos necesita ld (IX+A),B —un desplazamiento variable—, y el Z80 sólo admite el desplazamiento fijo dentro del opcode. La solución del cartucho es escribir el byte del desplazamiento en marcha: siete bytes copiados a la RAM que hacen ld (0xE5FD),a y luego ld (ix+00h),b, donde 0xE5FD es justo el operando de esa segunda instrucción.

No lleva la marca oculta de Konami

Muchos cartuchos de la casa esconden al final de la ROM su número de catálogo y el título en katakana; lo descubrió Manuel Pazos (@ManuelPazosMSX), y gracias a él se sabe dónde mirar. Aquí no está: detrás del relleno hay datos del reproductor de sonido y ningún 0xAA que cierre la marca. El RC-716 sale del catálogo, no del binario.

Lo que el cartucho dibuja

Debajo de cada pie está de dónde sale. Se rehacen con make imagenes y no hace falta emulador.

DIBUJADO desde 0x4894 — el logotipo del título, que son tiles: el cartucho los descomprime en la tabla de patrones y luego los coloca columna a columna. Los dos de la cola de la «g» van en una tercera fila que sólo tiene dibujo en dos columnas
DIBUJADO desde 0x4894 — el logotipo del título, que son tiles: el cartucho los descomprime en la tabla de patrones y luego los coloca columna a columna. Los dos de la cola de la «g» van en una tercera fila que sólo tiene dibujo en dos columnas
DIBUJADOS repitiendo las copias de CARGA_PATRONES_Y_COLORES (0x6CA2): los tres tercios de la tabla de patrones con su color. Las flores, la hierba, el ladrillo y los repollos con cara salen de ahí
DIBUJADOS repitiendo las copias de CARGA_PATRONES_Y_COLORES (0x6CA2): los tres tercios de la tabla de patrones con su color. Las flores, la hierba, el ladrillo y los repollos con cara salen de ahí
DIBUJADOS de los seis flujos de la tabla de 0x55F5 y dos más: los 64 patrones de sprite de 16x16. El color no está aquí —lo pone la ficha de cada sprite—, así que salen en blanco
DIBUJADOS de los seis flujos de la tabla de 0x55F5 y dos más: los 64 patrones de sprite de 16x16. El color no está aquí —lo pone la ficha de cada sprite—, así que salen en blanco
DIBUJADA de 0x4A37 — los 48 glifos de ocho bytes. El código de tile ES el ASCII, así que van del 0x30 («0») al 0x5F, y detrás de la Z quedan el «with» del menú y las dos flechas del cursor
DIBUJADA de 0x4A37 — los 48 glifos de ocho bytes. El código de tile ES el ASCII, así que van del 0x30 («0») al 0x5F, y detrás de la Z quedan el «with» del menú y las dos flechas del cursor
CAPTURA de openMSX: la primera pantalla, con el cartel de BABYLAND PARK, los bebés creciendo en repollos y el nombre del muñeco abajo a la izquierda
CAPTURA de openMSX: la primera pantalla, con el cartel de BABYLAND PARK, los bebés creciendo en repollos y el nombre del muñeco abajo a la izquierda
CAPTURA: la primera de las dos pantallas de preparación, la de elegir el muñeco. Las cuatro teclas que dice son las que lee 0x79BA
CAPTURA: la primera de las dos pantallas de preparación, la de elegir el muñeco. Las cuatro teclas que dice son las que lee 0x79BA
CAPTURA: la segunda, con el nombre de fábrica. Las diez letras viven en 0xE05D y se recorren en redondo
CAPTURA: la segunda, con el nombre de fábrica. Las diez letras viven en 0xE05D y se recorren en redondo