MUSICA en el FM77AV2
Re: Temas AGD
Este es el reproductor empleado:
Encontrarás el código del reproductor, el área de variables RAM y una API que le añadí.
Encontrarás el código del reproductor, el área de variables RAM y una API que le añadí.
Re: Temas AGD
Muchas gracias, Césarjimbobaby escribió: ↑02 Nov 2024 09:171794000Hz para MAIN en modo "a tope sin MMR".pser1 escribió: ↑01 Nov 2024 19:48 Una buena aproximación es decir que Dragón std funciona a 0,89MHz por lo tanto a 2x será a unos 1,78MHz los otros decimales deben ser porqué en algún momento alguien me dió un valor en lugar de 0,89 con mas decimales también ...
Probablemente podríamos recalcular estos valores para el FM77AV, pero ¿Qué frecuencia deberíamos tomar? 2MHz si deshabilitamos el MMR al principio de la rutina de reproducción o 1,6MHz si el MMR está todavía activo?
1565000Hz para MAIN + MMR
Sin MMR no veo mucha diferencia con el Dragon...
Como el reproductor independiente deshabilita el MMR antes de empezar a procesar el fichero .PT3 no hará falta recalcular las notas ...
Lo cual implica, por lo que hemos oído en el wav de José Luis, que algo habrá que hacer en el motor para FM77AV para subir una octava.
Primero, esperaremos a ver como funciona la conversión 'literal' del código Z80 de MSX2 que ha subido José Luis ...
saludos
Re: Temas AGD
Muchas gracias, José Luis
Ya tengo trabajo para unos días
Espero ponerme con ello a partir del próximo lunes. Esta vez hare conversión literal línea a línea sin intentar optimizar nada de entrada.
El pequeño co&$azo que supone la inversión de bytes en valores de 16 bits obligará a usar mas líneas de código y no poder utilizar las lecturas - grabaciones de 16 bits que permite el 6809. Pero parece obligatorio empezar con una conversión exacta, aunque duela
saludos
Re: Temas AGD
Acabo de comparar los ficheros que has subido aquí con los que convertí en su momento y me da la impresión de que son exactamente lo mismo.
La diferencia es que lo que ahora tienes como PT3-AGD aparece en el fichero PT3-ROM que yo convertí ...
Así que forzosamente metí la pata en mas de un punto al convertirlo para el V9958, además me 'atreví' a utilizar opcodes especiales que solo funcionan con un HD6309, que podrían dar problemas con un MC6809 así que la conversión literal me parece un paso obligatorio para salir de dudas y obtener un 'player' operativo sin errores, aunque sea mas lento. Luego ya se podrá ir optimizando
saludos
Re: Temas AGD
Hola,
parece que al final encontré algunos 'bugs' en la versión anterior del reproductor de música para FM77AV2
Ahora ya no se oyen las notas agudas 'fuera de lugar' al principio de LOVINGU, en su lugar produce unos trinos o lo que sea
De paso he subido 5 semitonos todas las notas para que sea lo mas cercano a lo que se oye con el VortexTracker
Cuando pueda, lo pasaré a disquete para escucharlo en la máquina real. Será una buena forma de descubrir si hay diferencias de frecuencia
al reproducir las canciones, que solo podría ser motivado por estar trabajando mi FM77AV y el XM7 a distintas frecuencias de reloj, así
que a esperar los resultados, a menos que alguien pueda hacer esta misma prueba antes que yo
El fichero fuente en ensamblador ahora contiene en las rutinas para música, a la derecha, el código original Z80 de los MSX2 que me
facilitó José Luis. He procurado alinearlo lo mejor posible dejando líneas en blanco en el código de 6809 o del Z80 para facilitar comparaciones
Ahora, idealmente, debería aplicar las correcciones hechas aquí en los motores para FM77AV2 y para V9958 ...
saludos
parece que al final encontré algunos 'bugs' en la versión anterior del reproductor de música para FM77AV2
Ahora ya no se oyen las notas agudas 'fuera de lugar' al principio de LOVINGU, en su lugar produce unos trinos o lo que sea
De paso he subido 5 semitonos todas las notas para que sea lo mas cercano a lo que se oye con el VortexTracker
Cuando pueda, lo pasaré a disquete para escucharlo en la máquina real. Será una buena forma de descubrir si hay diferencias de frecuencia
al reproducir las canciones, que solo podría ser motivado por estar trabajando mi FM77AV y el XM7 a distintas frecuencias de reloj, así
que a esperar los resultados, a menos que alguien pueda hacer esta misma prueba antes que yo
El fichero fuente en ensamblador ahora contiene en las rutinas para música, a la derecha, el código original Z80 de los MSX2 que me
facilitó José Luis. He procurado alinearlo lo mejor posible dejando líneas en blanco en el código de 6809 o del Z80 para facilitar comparaciones
Ahora, idealmente, debería aplicar las correcciones hechas aquí en los motores para FM77AV2 y para V9958 ...
saludos
Re: Temas AGD
He estado probando a ver (en el emu, claro), comparando las formas de onda y lo que escucho. Ciertamente ahora se escucha mejor , pero comparado con el ejemplo de Jose Luis, la bateria me parece muy saturada, hasta el punto del clipping. He probado con otro emulador por si fuese algo "soft" pero parece que hace lo mismo.pser1 escribió: ↑07 Nov 2024 15:43 Ahora ya no se oyen las notas agudas 'fuera de lugar' al principio de LOVINGU, en su lugar produce unos trinos o lo que sea
De paso he subido 5 semitonos todas las notas para que sea lo mas cercano a lo que se oye con el VortexTracker
Cuando pueda, lo pasaré a disquete para escucharlo en la máquina real. Será una buena forma de descubrir si hay diferencias de frecuencia
al reproducir las canciones, que solo podría ser motivado por estar trabajando mi FM77AV y el XM7 a distintas frecuencias de reloj, así
que a esperar los resultados, a menos que alguien pueda hacer esta misma prueba antes que yo
Lo que ya no se es si eso es debido al chip fisico en si o a otra cosa, tampoco veamos fantasmas .
Tambien he observado que el ejemplo de Jose Luis es ligeramente mas rapido (unos 70ms por minuto). Pero vamos que es por los valores del Timer A, que igual que se usa un $55/2 se podria usar otro valor muy parecido ($56/2, p.e.) . Pero da igual porque luego el hardware tendra el suyo
PC 386
Re: Temas AGD
Pues si, César ...jimbobaby escribió: ↑07 Nov 2024 16:56 He estado probando a ver (en el emu, claro), comparando las formas de onda y lo que escucho. Ciertamente ahora se escucha mejor , pero comparado con el ejemplo de Jose Luis, la bateria me parece muy saturada, hasta el punto del clipping. He probado con otro emulador por si fuese algo "soft" pero parece que hace lo mismo.
Lo que ya no se es si eso es debido al chip fisico en si o a otra cosa, tampoco veamos fantasmas .
Tambien he observado que el ejemplo de Jose Luis es ligeramente mas rapido (unos 70ms por minuto). Pero vamos que es por los valores del Timer A, que igual que se usa un $55/2 se podria usar otro valor muy parecido ($56/2, p.e.) . Pero da igual porque luego el hardware tendra el suyo
Yo también oigo la música distorsionada cuando está alto el volumen. Y lo malo es que el volumen lo marca la canción.
Solo hay que comparar 'LOVINGU' super alto el volumen respecto a 'CSTPLVNU' que lo tiene muy bajo
Si bajo el volumen a piñón fijo, las canciones 'suaves' casi no se oirán.
Podría aplicar la reducción gradual que añadí para el V9958 con tal de bajar el volumen para que los efectos fuesen mas audibles ...
Ya hablaremos de velocidad/frecuencia cuando hayamos podido probar en el hdw real.
De hecho la batería suele 'estar' producida mediante 'ruidos', así que desconozco como controlar su volumen. Y si no recuerdo mal puede generarse
ruido en cualquiera de los tres canales ...
A saber que tal se ha implementado la emulación del YM2149 o del AY-3-8910 en MAME/MESS
saludos
Re: Temas AGD
Puede que tenga que ver el hecho de que lo que "emula" el YM2203 es el YM2149 en lugar del AY-8910 y el YM2149 tiene un conversor D/A con un control de volumen de 32 pasos en lugar de los 16 pasos del AY. El caso es que más de un MSX usa el mismo YM2149 y tampoco es que de repente suene más alto...
Re: Temas AGD
Exactamente, José Luis. Esto lo vi ayer leyendo las hojas de especificaciones del YM2149 y del AY-3-8910jltursan escribió: ↑08 Nov 2024 09:12 Puede que tenga que ver el hecho de que lo que "emula" el YM2203 es el YM2149 en lugar del AY-8910 y el YM2149 tiene un conversor D/A con un control de volumen de 32 pasos en lugar de los 16 pasos del AY. El caso es que más de un MSX usa el mismo YM2149 y tampoco es que de repente suene más alto...
De todas formas, para obtener los 32 pasos, se requiere poner el bit4 del byte de volumen a 1 y solo entonces se usan los bits del generador de envolvente ...
Yo he probado el programa en la máquina real y suena bastante parecido a lo que da el XM7, tal vez menos distorsionado, pero sigue notándose el efecto desagradable si bien es cierto que parece que LOVINGU es la única canción que lo provoca ...
Quizás sea mejor quitarla del pack de 36 y poner otra en su lugar!
saludos
Re: Temas AGD
Relacionado con el nivel de volumen he encontrado una parte de código que se utiliza precisamente para esto:
Sin embargo en el Z80 al mismo tiempo el nibble alto queda 'copiado' en el nibble bajo.
Esto lo puedo hacer con un 'adca #0' después de cada 'lsla' de forma que el 'carry' se 'pasa' al bit0 cada vez
Pero creo recordar que esto empeoraba el sonido, aunque no estoy muy seguro de ello
El valor de 'ch_Volume' mas el valor de la 'envolvente', si es necesario, se envía a 'AR_AmplX' que finalmente es enviado al YM2149
donde los cinco bits mas bajos se interpretan como volumen.
Si esto es así, entonces el player 6809 que pone ceros en los cuatro bits bajos ¿Como diablos funciona?
saludos
EDITO 17:29 Acabo de probar los 'adca #0' y el sonido no cambia para mí ...
PD_Vol lsla ; move PD_VOL: RLCA lsla ; four times RLCA lsla ; to the left RLCA lsla ; low nibble to high nibble RLCA sta ch_Volume-12,y ; store into Volume LD [IX+(CHNPRM_Volume-12)],A bra PD_Lp2 ; jump to PD_Lp2 JR PD_LP2La versión 6809 simplemente envía el nibble bajo al alto perdiéndose la información que había en el nibble alto.
Sin embargo en el Z80 al mismo tiempo el nibble alto queda 'copiado' en el nibble bajo.
Esto lo puedo hacer con un 'adca #0' después de cada 'lsla' de forma que el 'carry' se 'pasa' al bit0 cada vez
Pero creo recordar que esto empeoraba el sonido, aunque no estoy muy seguro de ello
El valor de 'ch_Volume' mas el valor de la 'envolvente', si es necesario, se envía a 'AR_AmplX' que finalmente es enviado al YM2149
donde los cinco bits mas bajos se interpretan como volumen.
Si esto es así, entonces el player 6809 que pone ceros en los cuatro bits bajos ¿Como diablos funciona?
saludos
EDITO 17:29 Acabo de probar los 'adca #0' y el sonido no cambia para mí ...
Re: Temas AGD
Mirando de nuevo la hoja de características del YM2149, indica que el volumen siempre será de 1V máximo, pero mientras que la izquierda del gráfico muestra 16 niveles (escalones) de 0V a 1V, a la derecha se muestran 32 escalones.jltursan escribió: ↑08 Nov 2024 09:12 Puede que tenga que ver el hecho de que lo que "emula" el YM2203 es el YM2149 en lugar del AY-8910 y el YM2149 tiene un conversor D/A con un control de volumen de 32 pasos en lugar de los 16 pasos del AY. El caso es que más de un MSX usa el mismo YM2149 y tampoco es que de repente suene más alto...
Para utilizar 5 bits en lugar de cuatro, en el YM2149, se define en el bit 4 del valor del volumen. Si es cero se aplican los bits 0-1-2-3 (16 valores)
pero si está a 1, entonces se obvian estos y se utilizan los cinco bits bajos del generador de envolvente
En el AY-8910 su utilizan solamente los 4 bits bajos del generador de envolvente en caso de estar el bit4 a 1
No sé si esto puede afectar en algo (?)
saludos
Re: Temas AGD
No tengo ni la menor idea de como va eso de mezclar efectos y musica. Poder se ha de poder porque en su epoca en el spectrum los juegos lo hacian, pero tambien recuerdo limitaciones al respecto en el Amiga (claro que era sonido diferente hecho de formas diferentes).pser1 escribió: ↑08 Nov 2024 16:28 Sabemos como 'saltarnos' uno de cada 6 /FS para procesar la música a 50fps pero el envío se seguiría haciendo a 60fps
Si pasamos a los efectos también a 50 fps éstos durarán un 20% de tiempo adicional y posiblemente suenen algo mas 'graves'
¿Creéis que se podría dejar a los efectos a 60fps y solo procesar nuevos valores de música a 50fps?
O tal vez esto pueda provocar efectos imprevistos ...
De entrada la logica me diria que si tengo tres canales ABC, podria usar 2 para musica y uno para efectos, pero dudo que las canciones se limiten en ese aspecto y ya digo que no tengo ni idea.
Supongo que la respuesta sera... probando a ver que tal . Pero vamos que el mismo problema (no de timing 60/50 sino de simultaneidad musica+fx) lo habreis tenido en las demas plataformas con chip AY.
PD: siempre hay la posibilidad super molona de usar la parte de FM del YM2203 para musica y dejar el YM249F solo para efectos .
PC 386
Re: Temas AGD
Um,. te cuento en líneas generales como funciona todo el tinglado.pser1 escribió: ↑08 Nov 2024 16:28 Hola,
estoy pensando en añadir ya el código para música en el motor AGD para el FM77AV2 pero me asaltan algunas dudas ...
Tenemos efectos FX y música al mismo tiempo, pero ambas partes comparten la estructura que se envía al YM2149
que es en realidad una tabla de 14 bytes uno por registro y hasta ahora los enviábamos a cada /FS por lo tanto 60 veces por segundo.
Pero hemos descubierto que las canciones .PT3 están previstas para reproducirse a 50 ciclos por segundo.
Sabemos como 'saltarnos' uno de cada 6 /FS para procesar la música a 50fps pero el envío se seguiría haciendo a 60fps
Si pasamos a los efectos también a 50 fps éstos durarán un 20% de tiempo adicional y posiblemente suenen algo mas 'graves'
¿Creéis que se podría dejar a los efectos a 60fps y solo procesar nuevos valores de música a 50fps?
O tal vez esto pueda provocar efectos imprevistos ...
Y ya puestos a hablar de efectos, tal vez sería el momento de comentar el fichero SPRNGBOT.AFB que subió José Luis.
En él, cada efecto tiene asociado un nombre, pero de alguno de ellos hay varios, léase efectoX1,efectoX2 ...
En cualquier caso deberíamos asociar el efecto preferido a cada llamada a efecto en el fichero AGD
saludos
El tema de la reproducción de un PT3 a 50Hz ya lo hemos solucionado aun cuando el ISR se ejecute a 60Hz, bien, ¿que pasa ahora si queremos emplear el reproductor de efectos ayFX al mismo tiempo?.
El reproductor ayFX "parasita" el reproductor PT3, lo que hace exactamente es que machaca el buffer de los registros PSG previamente relleno por el reproductor PT3. En el ISR se añade a continuación de la llamada al play del PT3, la llamada al play del ayFX de manera que los datos generados por este último se escribirán encima de los que había generado el reproductor de música. Al final, cuando ya se tiene un buffer definitivo, es este el que se reproducirá con la llamada a "psgrout" (que por cierto, se invoca al principio del ISR por lo que siempre se reproduce lo que queda generado en el ISR anterior).
Dado que el ISR se ejecuta a 60Hz según dices; pero se ha controlado que el reproductor de música/SFX funcione a 50Hz despreciando una interrupción de cada seis; ambos procesos, el PT3 y el ayFX se ejecutarán a la misma velocidad de 50Hz, no debería haber inconsistencias.
La cuestión de que los SFX se zampen las notas del PT3 es inevitable. En el código de mi reproductor había algunas triquiñuelas para intentar minimizar eso. Desde compilación podías fijar un canal para la reproducción de las notas del SFX o bien, hacer que el canal fuera rotando para cada nota del SFX y así tratar de minimizar el impacto sobre un único canal. Ninguno de los sistemas era perfecto y dependían muchísimo del tipo de canción que sonara así que eso es lo que hay.
En el FM77AV podríamos enviar el SFX al YM2203; pero habría que ver hasta que punto habría que adaptar los datos AY a lo que puedan necesitar los canales del OPN. Supongo que de momento lo más práctico es tirar con lo que tenemos y más adelante igual descubrimos como va eso.
Re: Temas AGD
Y ya puestos, os subo el reproductor independiente, que no deja de ser una parte del motor AGD actual ...
Al reproducir algunos ficheros .PT3 de juegos se produce un cambio de volumen inesperado que no sucede al usar el Vortex Player
así que algún efecto sigue siendo mal interpretado o el generador de envolvente nos está fallando. A saber si es un tema de inversión de bytes
en una cantidad de 16 bits u otra clase de error que se me escapa
Mantengo LOVINGU en la colección de 36 canciones ya que sirve de test para futuras versiones ...
saludos
Al reproducir algunos ficheros .PT3 de juegos se produce un cambio de volumen inesperado que no sucede al usar el Vortex Player
así que algún efecto sigue siendo mal interpretado o el generador de envolvente nos está fallando. A saber si es un tema de inversión de bytes
en una cantidad de 16 bits u otra clase de error que se me escapa
Mantengo LOVINGU en la colección de 36 canciones ya que sirve de test para futuras versiones ...
saludos
Re: Temas AGD
Chip físico sólo hay uno, el YM2203; pero ahora mismo estamos utilizando únicamente los registros bajos, que son compatibles con los del PSG, los tres canales que ya conocemos del AY. Libres nos quedan los de FM, que son los registros superiores y nos proporcionan otros tres canales más de sonido.Yo creía que solamente teníamos disponible un chip de sonido, el YM2203. ¿Qué es eso del YM249F o te refieres al YM2149F? ¿Existe realmente un segundo chip de sonido en el FM77AV? O simplemente lo emula el YM2203 ...
Eso está bien. SI se puede deshabilitar la música y dejar sólo los efectos opcionalmente, siempre se pueden recuperar un buen puñado de ciclos. Los efectos, aunque estén sonando, casi no consumen.- '3' para silenciar/habilitar la música (se comporta como conmutador)