La música

Todo lo que suena aquí sale de ejecutar el motor de sonido del cartucho (suena_un_cuadro, 0x7A18, y pide_un_sonido, 0x799C, que le reparte las voces; lo llama la interrupción en 0x406E) 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.

Cotejado con openMSX

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.

Cómo se pide una pieza

pide_un_sonido recibe el número en A. Por debajo de 0x89 son efectos y del 0x89 en adelante la música usa más voces. La música de cada fase es la 0x89 o la 0x8B según el bit 0 del contador de fase. Las voces ocupan 11 bytes cada una desde 0xE010. El motor lee el registro 7 del PSG con RDPSG y conserva solo los bits del mezclador que le importan; el arranque del MSX lo deja en 0xB8 y aquí se parte de ese valor. Las pistas «de la tabla» están en la tabla de pistas pero ninguna rutina las pide con un ld a; se omiten otras más largas y sin repetición (0x9D, 0xA2 a 0xA4).

Las músicas

La música de la fase (una de las dos) (0x89)

Lo pide la rutina de 0x4226: el bit 0 del contador de fase (0xE051) elige entre la 0x89 y la 0x8B; dura 25,6 s y vuelve a empezar en el segundo 0,0.

La música de la fase (la otra) (0x8B)

Lo pide la rutina de 0x4226, cuando el bit 0 del contador de fase es 0; dura 30,4 s y vuelve a empezar en el segundo 0,0.

Se pierde una vida (0x8D)

Lo pide pierde_una_vida; dura 6,4 s.

Remate de la vida perdida (0x90)

Lo pide remata_la_vida_perdida; dura 8,3 s.

La pieza del 0x42A9 (0x93)

Lo pide L_42A9; dura 4,8 s.

El fin de fase (0x96)

Lo pide la rutina de 0x4250; dura 0,1 s y vuelve a empezar en el segundo 0,0.

Una pista de la tabla (0x8A)

Lo pide ninguna llamada directa: está en la tabla de pistas; dura 25,6 s y vuelve a empezar en el segundo 12,8.

Otra pista de la tabla (0x8C)

Lo pide ninguna llamada directa: está en la tabla de pistas; dura 21,6 s y vuelve a empezar en el segundo 6,4.

Una tercera pista de la tabla (0x8E)

Lo pide ninguna llamada directa: está en la tabla de pistas; dura 8,3 s.

Una cuarta pista de la tabla (0x8F)

Lo pide ninguna llamada directa: está en la tabla de pistas; dura 8,3 s.

Una quinta pista de la tabla (0x91)

Lo pide ninguna llamada directa: está en la tabla de pistas; dura 8,3 s.

Una sexta pista de la tabla (0x92)

Lo pide ninguna llamada directa: está en la tabla de pistas; dura 8,2 s.

Una séptima pista de la tabla (0x94)

Lo pide ninguna llamada directa: está en la tabla de pistas; dura 38,4 s y vuelve a empezar en el segundo 0,0.

Una octava pista de la tabla (0x95)

Lo pide ninguna llamada directa: está en la tabla de pistas; dura 38,4 s y vuelve a empezar en el segundo 0,0.

Una novena pista de la tabla (0x9F)

Lo pide ninguna llamada directa: está en la tabla de pistas; dura 9,2 s.

Una décima pista de la tabla (0xA0)

Lo pide ninguna llamada directa: está en la tabla de pistas; dura 7,5 s y vuelve a empezar en el segundo 3,2.