Todo lo que suena aquí sale de ejecutar el motor de sonido del cartucho (toca_el_sonido, 0x5C0E, y pide_un_sonido_sin_mirar_la_partida, 0x5BCA, que le reparte los canales; lo llama la interrupción en 0x4038) en un Z80 emulado, cuadro a cuadro y a 60 por segundo, igual que lo llama el juego. Lo que el motor escribe en el PSG pasa a sonido con un AY-3-8910 (tools/musica.py). Cada MP3 es la pieza entera hasta donde vuelve a empezar, más 8 segundos de la vuelta apagándose; las que no se repiten acaban donde acaba el motor.
Las escrituras al PSG se han comparado cuadro a cuadro con las de openMSX (C-BIOS MSX1 japonés). En todos los cuadros el PSG queda igual:
El timbre no está cotejado: es el de un AY-3-8910 de manual, no una grabación del emulador. Las sondas están en tools/omsx_psg.tcl y tools/coteja_psg.py.
pide_un_sonido recibe el número en A y solo suena con partida de verdad (bit 6 de 0xE002); la otra entrada se salta esa comprobación. Por debajo de 0x87 es un efecto de un canal, del 0x87 al 0x89 usa dos y del 0x8A en adelante los tres. Las 0x86 y 0x87 son pistas largas de la tabla que ninguna rutina pide con un ld a. El motor no escribe el mezclador del PSG: lo deja el arranque, y aquí se parte de su mismo valor, 0xB8.
La música del final (0x8A)
Lo pide estado_12_fin_de_tacada (0x44F6); dura 3,2 s.
La mesa limpia (0x88)
Lo pide la rutina de 0x4E60: la mesa se ha quedado sin bolas; dura 2,4 s.
El jingle de salida (0x8D)
Lo pide estado_8_confirma_la_seleccion (0x443C); dura 2,8 s.
Una pista larga de la tabla (0x86)
Lo pide ninguna llamada directa: está en la tabla de pistas; dura 64,3 s.
Otra pista larga de la tabla (0x87)
Lo pide ninguna llamada directa: está en la tabla de pistas; dura 25,2 s.