Este repositorio contiene un desensamblado comentado de Konami's Billiards para MSX (Konami, 1984, cartucho RC-706). Todo lo que hay aquí sale del binario y se puede volver a generar desde él.
La ROM va en la raíz, como billiards.rom. Son 16384 bytes exactos:
sha256 38741612e0b20e39dfd834106a3d5ef5a24c06fb947a104c044f1cdd269c46d9
make comprueba lo verifica.
make verify
Esto reensambla el listado con pasmo y compara el resultado con la ROM original, byte a byte. Si sale OK: reproducible byte a byte, el desensamblado no se ha inventado nada: es el mismo cartucho escrito de otra forma.
make # el ciclo entero: listado, notas, verify, sanity y tests
make listado # regenera src/billiards.asm desde el trazado y las notas
make sanity # las comprobaciones que el reensamblado NO cubre
make test # los tests
make densidad # cuántos comentarios lleva cada rutina
make imagenes # rehace los dibujos de docs/imagenes desde la ROM
make web # regenera el sitio
make sanity es la que vigila lo que un reensamblado correcto puede esconder: que unos datos se estén leyendo como código. Los bytes salen iguales de todas formas, porque no cambian; lo único que cambia es lo que decimos de ellos.
src/billiards.asm el listado, GENERADO — no se edita a mano
src/billiards.notes las anotaciones, ancladas a dirección
src/billiards.entries los puntos de entrada que no se deducen solos
src/billiards.nocode los tramos que no son código
tools/ el trazador, el generador y las comprobaciones
docs/ este sitio
El listado no se edita: se edita el .notes y se vuelve a generar. Cada anotación va anclada a una dirección, así que sobrevive a un retrazado y no se descoloca si algo se mueve.
Las directivas del .notes son cinco: L pone nombre y descripción a una etiqueta, C cuelga un comentario de una instrucción, B mete una cabecera de bloque, D declara un rango de datos con su nombre y F dice de cuántos bytes son las filas de una tabla.
make imagenes
No hay ni una captura de pantalla en este sitio. tools/graficos.py repite, instrucción a instrucción, las rutinas de carga del cartucho y sus dos intérpretes de dibujo sobre una memoria de vídeo vacía, y luego revela esa VRAM como la revelaría el VDP. No hace falta emulador, y que la mesa salga bien es la mejor prueba de que las rutinas se han leído bien.