La música

Todo lo que suena aquí sale de ejecutar el motor de sonido del cartucho (sonido_del_cuadro, p04:6000, y pide_sonido, p04:67FD, que apunta la pista; la interrupción lo llama en p00:41B9 con los bancos 4 y 5) 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 MSX2 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

sonido (p00:4284) mete los bancos 4 y 5 y llama a pide_sonido (p04:67FD) con el número en A: por debajo de 0x29 es un efecto, que ocupa el canal de 0xC070 si manda más que lo que suena, y del 0x29 en adelante es música de tres o cuatro canales. El número de la música de cada sala lo calcula el juego, así que casi todas son pistas «de la tabla». La RAM del sonido está en 0xC010-0xC0FB y 0xC0F0 guarda la copia del mezclador del PSG, que el arranque deja en 0xB8. Las que suenan igual que otra se publican una vez, y las que duran más de 75 segundos sin volver a empezar se cortan a los 75.

Las músicas

La música de una sala (0x32)

Lo pide pon_c602: la música 0x32 (0x2F si la pone un actor del tipo 6); dura 45,2 s y vuelve a empezar en el segundo 6,5.

La música del transceptor (0x5C)

Lo pide transceptor_texto y c900_paso_2; dura 0,1 s.

Pista 0x29 de la tabla (0x29)

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 0x2A de la tabla (0x2A)

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 0x2B de la tabla (0x2B)

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 0x2C de la tabla (0x2C)

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 0x2D de la tabla (0x2D)

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 0x2E de la tabla (0x2E)

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 0x2F de la tabla (0x2F)

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

Pista 0x30 de la tabla (0x30)

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

Pista 0x31 de la tabla (0x31)

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

Pista 0x33 de la tabla (0x33)

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 0x34 de la tabla (0x34)

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 0x35 de la tabla (0x35)

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

Pista 0x36 de la tabla (0x36)

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 0x37 de la tabla (0x37)

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 0x38 de la tabla (0x38)

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 0x39 de la tabla (0x39)

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 0x3A de la tabla (0x3A)

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 0x3B de la tabla (0x3B)

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

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 0x1F de la tabla (0x1F)

Lo pide ninguna llamada directa: sale de la tabla de pistas por un número calculado; dura 4,6 s.

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 44,0 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 0x53 de la tabla (0x53)

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).