La música

Todo lo que suena aquí sale de ejecutar el motor de sonido del cartucho (cuadro_de_sonido, 0x8082 del banco 14, y la rutina de p14:86BA que reparte los canales; lo llama la interrupción en p00:4030) 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_sonido (p00:4145) y pide_sonido_si_esta_activo (p00:413A, que mira antes el bit 6 de 0xE002) guardan los registros, mapean los bancos 14 y 15 y llaman a la rutina de p14:86BA con el número en A. Los números bajos son efectos y del 0x3B en adelante hay música; el juego calcula el de cada fase, así que casi todas son pistas «de la tabla». Las voces ocupan 21 bytes desde 0xE010 y 0xE079 guarda la copia del mezclador del PSG, que el arranque deja en 0xB8. Las pistas que duran más de 75 segundos sin volver a empezar se cortan a los 75, y así se dice en cada una. Solo hay dos pistas cotejadas con openMSX, la 0x3B y la 0x44; las demás salen del mismo motor.

Las músicas

La pieza de estado_9_ultimo (0x56)

Lo pide estado_9_ultimo; se corta a los 75 s (la pieza sigue).

La pieza del 0x74EC (0x38)

Lo pide L_74EC; dura 1,3 s.

Pista 0x3B de la tabla (0x3B)

Lo pide ninguna llamada directa: sale de la tabla de pistas por un número calculado; dura 26,4 s y vuelve a empezar en el segundo 0,2.

Pista 0x3C de la tabla (0x3C)

Lo pide ninguna llamada directa: sale de la tabla de pistas por un número calculado; se corta a los 75 s (la pieza sigue).

Pista 0x3D de la tabla (0x3D)

Lo pide ninguna llamada directa: sale de la tabla de pistas por un número calculado; se corta a los 75 s (la pieza sigue).

Pista 0x3E de la tabla (0x3E)

Lo pide ninguna llamada directa: sale de la tabla de pistas por un número calculado; se corta a los 75 s (la pieza sigue).

Pista 0x3F de la tabla (0x3F)

Lo pide ninguna llamada directa: sale de la tabla de pistas por un número calculado; se corta a los 75 s (la pieza sigue).

Pista 0x40 de la tabla (0x40)

Lo pide ninguna llamada directa: sale de la tabla de pistas por un número calculado; se corta a los 75 s (la pieza sigue).

Pista 0x41 de la tabla (0x41)

Lo pide ninguna llamada directa: sale de la tabla de pistas por un número calculado; dura 22,4 s y vuelve a empezar en el segundo 0,0.

Pista 0x42 de la tabla (0x42)

Lo pide ninguna llamada directa: sale de la tabla de pistas por un número calculado; se corta a los 75 s (la pieza sigue).

Pista 0x43 de la tabla (0x43)

Lo pide ninguna llamada directa: sale de la tabla de pistas por un número calculado; se corta a los 75 s (la pieza sigue).

Pista 0x44 de la tabla (0x44)

Lo pide ninguna llamada directa: sale de la tabla de pistas por un número calculado; se corta a los 75 s (la pieza sigue).

Pista 0x45 de la tabla (0x45)

Lo pide ninguna llamada directa: sale de la tabla de pistas por un número calculado; se corta a los 75 s (la pieza sigue).

Pista 0x46 de la tabla (0x46)

Lo pide ninguna llamada directa: sale de la tabla de pistas por un número calculado; se corta a los 75 s (la pieza sigue).

Pista 0x47 de la tabla (0x47)

Lo pide ninguna llamada directa: sale de la tabla de pistas por un número calculado; se corta a los 75 s (la pieza sigue).

Pista 0x48 de la tabla (0x48)

Lo pide ninguna llamada directa: sale de la tabla de pistas por un número calculado; se corta a los 75 s (la pieza sigue).

Pista 0x49 de la tabla (0x49)

Lo pide ninguna llamada directa: sale de la tabla de pistas por un número calculado; se corta a los 75 s (la pieza sigue).

Pista 0x4A de la tabla (0x4A)

Lo pide ninguna llamada directa: sale de la tabla de pistas por un número calculado; dura 44,8 s y vuelve a empezar en el segundo 5,6.

Pista 0x4B de la tabla (0x4B)

Lo pide ninguna llamada directa: sale de la tabla de pistas por un número calculado; se corta a los 75 s (la pieza sigue).

Pista 0x4C de la tabla (0x4C)

Lo pide ninguna llamada directa: sale de la tabla de pistas por un número calculado; se corta a los 75 s (la pieza sigue).

Pista 0x4D de la tabla (0x4D)

Lo pide ninguna llamada directa: sale de la tabla de pistas por un número calculado; dura 32,0 s y vuelve a empezar en el segundo 0,0.

Pista 0x4E de la tabla (0x4E)

Lo pide ninguna llamada directa: sale de la tabla de pistas por un número calculado; se corta a los 75 s (la pieza sigue).

Pista 0x4F de la tabla (0x4F)

Lo pide ninguna llamada directa: sale de la tabla de pistas por un número calculado; se corta a los 75 s (la pieza sigue).

Pista 0x50 de la tabla (0x50)

Lo pide ninguna llamada directa: sale de la tabla de pistas por un número calculado; dura 21,3 s y vuelve a empezar en el segundo 0,0.

Pista 0x51 de la tabla (0x51)

Lo pide ninguna llamada directa: sale de la tabla de pistas por un número calculado; se corta a los 75 s (la pieza sigue).

Pista 0x52 de la tabla (0x52)

Lo pide ninguna llamada directa: sale de la tabla de pistas por un número calculado; se corta a los 75 s (la pieza sigue).

Pista 0x53 de la tabla (0x53)

Lo pide ninguna llamada directa: sale de la tabla de pistas por un número calculado; dura 24,0 s y vuelve a empezar en el segundo 0,8.

Pista 0x54 de la tabla (0x54)

Lo pide ninguna llamada directa: sale de la tabla de pistas por un número calculado; se corta a los 75 s (la pieza sigue).

Pista 0x55 de la tabla (0x55)

Lo pide ninguna llamada directa: sale de la tabla de pistas por un número calculado; se corta a los 75 s (la pieza sigue).