Cómo está hecho el listado y por qué se puede confiar en él.
Nadie edita el .asm. Lo genera tools/mkasm.py a partir de tres cosas:
tools/z80trace.py), que sigue el código desde los puntos de entrada y marca qué bytes son instrucciones;Así los comentarios sobreviven a un retrazado: si mañana se descubre que un bloque era código, se retraza y los comentarios siguen en su sitio.
make verify
ensambla el listado con pasmo y compara el resultado con la ROM. Byte a byte, el mismo sha256. Sin eso, todo lo demás sobra.
Reensamblar no distingue entre unos bytes leídos como código y los mismos bytes leídos como datos: el binario sale igual. Por eso hay tres comprobaciones más:
El trazado estático no llega a todo. Los que hay que declarar a mano están en src/holeinonepro.entries, cada uno con su justificación:
jp (hl) usan para despachar los estados del editor.ret.| código trazado | 14.186 bytes (43,3 %) |
| datos identificados | 18.582 bytes (56,7 %) |
| sin explicar | 0 |
| instrucciones | 7.133 |
| comentarios de línea | 3.169 |
| densidad | 44,4 % |
| rutinas por debajo del 10 % | 0 |
destinos de call sin bautizar | 0 |
Los tres últimos son el listón de la serie, y los tres están cerrados.
En 0x6485–0x6564 hay una biblioteca pequeña y bien hecha, y en 0x6564 la rutina que le monta las tablas en RAM al arrancar:
Con eso se hace todo: el ángulo entre dos puntos, la distancia, la descomposición de la velocidad en sus dos componentes y el rozamiento.
Doce pistas de PSG, con la tabla de punteros en 0x6B55 y el intérprete en 0x6B83, que corre una vez por interrupción.
Las reglas, leídas del código: un byte con el bit 7 o el 6 puestos es una nota —los seis bits de abajo indexan, por dos, la tabla de tonos de 0x6C0D—; con el bit 5 a cero es una espera en cuadros; y el resto son órdenes: 0x2D guarda la forma de envolvente, 0x33 es un salto, 0x3D es la parada y 0x3E pone a cero los registros 0 a 5.
Dónde acaba cada pista no está escrito. Siguiéndolas con ese mismo intérprete (tools/pistas.py) salen doce tiras que encajan sin un hueco, y aparecen dos cosas: cinco pistas comparten cola —la 5 desemboca en la 6, la 6 en la 0, la 0 en la 1, la 1 en la 7, y las cinco acaban en la misma parada de 0x6D7A— y la 11 es la única que da vueltas, porque acaba en un salto a sí misma. La nota más alta que usan las doce es la 43, que es justo donde acaba la tabla de tonos.
Esta lectura reproduce el intérprete del cartucho, pero no está contrastada con el emulador. Los límites están medidos; que suene lo que aquí se dice, no se afirma.