Lo que comparten
Todos contra todos, buscando tiras de bytes idénticas de 32 o más: 570 de las 1.176 parejas posibles comparten algo, y en 305 de ellas hay código.
Lo primero que sale al ordenar por cuántos cartuchos comparten un trozo son
cuarenta y seis bytes que están en veintiséis cartuchos de Konami… y no son una
rutina: son la tipografía. 3E 63 03 0E 03 63 3E dibuja un
3 y 7C 66 63 63 63 66 7C una D. Konami
reutilizaba sus dibujos tanto como su código, y una matriz de bytes no
distingue.
Aquí se distingue sin adivinar: el listado de cada juego ya sabe qué bytes son código, porque los lleva como instrucciones con su dirección delante. Si la dirección de la tira aparece así, es código; si no, son datos.
| bytes | cartuchos | nombres distintos | cómo lo llaman |
|---|---|---|---|
| 36 | 18 | 12 | LEE_EL_TECLADO, LEE_MANDOS, LEE_TECLADO, L_45E8, lee_el_mando, lee_el_mando_1, lee_el_teclado, lee_las_filas_7_y_8_del_teclado, lee_los_mandos, lee_mando_y_teclado, lee_teclado_1, teclado_del_jugador_1 |
| 161 | 12 | 11 | L_464F, L_4716, L_4766, L_4867, L_4902, L_4A02, L_4A54, L_4B2F, L_4C0C, L_4C45, PINTA_TIRA_BUCLE |
| 170 | 11 | 6 | SUBE_LOGOTIPO, baja_un_paso, barre_la_pantalla, sube_el_logotipo_una_fila, sube_el_rotulo, tarea_0_desplaza_logo |
| 53 | 11 | 9 | ACTUALIZA_CANAL_7D6A, L_52B9, MUSICA_EVENTO_LARGO, NOTA_DE_UN_BYTE, corre_el_canal_nota_larga, lee_una_nota_de_musica, lee_una_nota_larga, manda_de_la_melodia, mandatos_largos |
| 50 | 9 | 7 | L_7BA6, L_9F80, MIRA_LA_OCTAVA, corre_el_canal_barrido, melodia_octava, mira_el_prefijo_de_octava, mira_si_hay_octava_si_no |
| 174 | 9 | 5 | SUBE_LOGOTIPO, baja_un_paso, barre_la_pantalla, sube_el_logotipo_una_fila, sube_el_rotulo |
La misma lectura de mandos —ld a,7 y la llamada 0x0141 del BIOS,
que lee una fila del teclado— está byte a byte en dieciocho cartuchos y se llama
de doce maneras distintas, porque los repositorios se escribieron a lo largo de
meses sin un sitio donde mirar. Éste es ese sitio.
Y hay una pieza de 161 bytes repartida por doce cartuchos que diez de ellos
dejaron sin nombre (L_4716, L_4766, L_4867…):
sólo Ping Pong la bautizó, como PINTA_TIRA_BUCLE.
Compara bytes, así que sólo encuentra una rutina compartida si además la ensamblaron en la misma dirección: en cuanto cambia el mapa de memoria, la misma rutina da bytes distintos porque sus direcciones lo son. Por eso de aquí no sale una separación limpia en dos armazones —a umbral bajo todos los Konami quedan conectados y a umbral alto se deshacen en fragmentos—, sino un continuo.
Un aviso concreto: la lectura de mandos de 65 bytes que Athletic Land comparte con Antarctic Adventure está en la Antarctic europea y en la japonesa 1.ª, y no en la 2.ª, que es la que su Makefile elige por defecto y la que mide esta base. Un hallazgo puede depender de qué volcado se mire.