Aprendiendo a manejar los chips de video V9958 y sonido YM-2149

Avatar de Usuario
pser1
Mensajes: 2994
Registrado: 08 Dic 2012 18:34
Agradecido : 700 veces
Agradecimiento recibido: 771 veces

Re: Aprendiendo a manejar los chips de video V9958 y sonido YM-2149

Mensajepor pser1 » 27 Jun 2020 18:25

Último mensaje de la página anterior:

antes de 'añadir' el código para enviar los 14 bytes de los registros a un fichero de salida en hexadecimal para facilitar comparación con el fichero
.pt3, voy a tratar de llegar a 40-50 frames a ver si hay suerte y aparecen divergencias ... Le doy este sábado de margen -thumbup
saludos
pere

Avatar de Usuario
pser1
Mensajes: 2994
Registrado: 08 Dic 2012 18:34
Agradecido : 700 veces
Agradecimiento recibido: 771 veces

Re: Aprendiendo a manejar los chips de video V9958 y sonido YM-2149

Mensajepor pser1 » 27 Jun 2020 19:40

odio a los roedores -banghead
Para repetir un comando en DBG basta con pulsar Ctrl+P (previous), pero por torpeza he pulsado la 'O' en su lugar y resulta que
esto equivale a 'cOntinue', así que he perdido todo control sobre el programa -banghead
En fin tiempo para añadir lo de imprimir frame y sus datos ...
saludos
pere

Avatar de Usuario
pser1
Mensajes: 2994
Registrado: 08 Dic 2012 18:34
Agradecido : 700 veces
Agradecimiento recibido: 771 veces

Re: Aprendiendo a manejar los chips de video V9958 y sonido YM-2149

Mensajepor pser1 » 27 Jun 2020 21:42

se me acumulan los problemas ...
El programa ya imprime el número de frame y los bytes enviados, pero ... no acaba nunca!
Ya había puesto una llamada a Music_LoopOff en lugar de Music_LoopOn, así que ahora tendré que encontrar y verificar las
condiciones que deben darse para finalizar la música en lugar de seguir enviando datos indefinidamente.
Mirando el fichero de salida he encontrado las mismas secuencias mas de una vez, pero preferiría que fuese el programa
quien decidiera que se acabó la información del .pt3 y cerrara el sonido.
saludos
pere

jltursan
Mensajes: 2943
Registrado: 20 Sep 2011 13:59
Agradecido : 240 veces
Agradecimiento recibido: 712 veces

Re: Aprendiendo a manejar los chips de video V9958 y sonido YM-2149

Mensajepor jltursan » 27 Jun 2020 23:49

Entonces es que el loopoff tampoco funciona correctamente. La rutina que controla eso es CHECKLP, es muy sencilla y basada en el bit 0 de la variable de configuración PT3_SETUP.

Avatar de Usuario
pser1
Mensajes: 2994
Registrado: 08 Dic 2012 18:34
Agradecido : 700 veces
Agradecimiento recibido: 771 veces

Re: Aprendiendo a manejar los chips de video V9958 y sonido YM-2149

Mensajepor pser1 » 28 Jun 2020 00:01

jltursan escribió:Entonces es que el loopoff tampoco funciona correctamente. La rutina que controla eso es CHECKLP, es muy sencilla y basada en el bit 0 de la variable de configuración PT3_SETUP.
Exactamente, esto mismo he visto hasta ahora. Pero la llamada a CHECKLP puede ser omitida (como es el caso) mientras no se dé la condición de fin de fichero:
ldx 	pt3_CrPsPtr		; get pointer			
leax 1,x ; increment pointer
lda ,x ; get byte
inca ; increment byte
bne PlNlp ; if not zero, jump to PlNlp
lbsr CheckLP ; call CheckLP

El único valor que evitará que se 'salte' la llamada a CheckLP es 255 y solamente he encontrado un byte con este valor en el fichero
en offset $006D desde el principio del fichero FlipFlap.pt3.
El puntero pt3_CrPsPtr recibe inicialmente el valor $5164, como el fichero empieza en $5100, significa que empieza en offset $64, no lejos del
que marca el final (+9 bytes) pero si el valor apuntado se aumenta a cada llamada a Music_Play, solamente en 9 llamadas debería apuntar
al byte 255 que debería cerrar el sonido. Pero por algún motivo ésto *NO* sucede -banghead
Trataré de echarle una ojeada poniendo un breakpoint en este punto ...
saludos
pere

Avatar de Usuario
pser1
Mensajes: 2994
Registrado: 08 Dic 2012 18:34
Agradecido : 700 veces
Agradecimiento recibido: 771 veces

Re: Aprendiendo a manejar los chips de video V9958 y sonido YM-2149

Mensajepor pser1 » 28 Jun 2020 00:07

en realidad, hay tres puntos mas arriba del código que he copiado antes que pueden 'saltarse' dicha parte
pasando directamente a PL2, PL1A, PL1B, por lo que puede que *nunca* se llegue a ejecutar la parte que mueve el puntero ...
Los campos de control para estos controles son: delyCnt, chanA+ch_NtSkCn, pt3_AdInPtA así que puede ser mas complicado encontrar
cual de ellos está fallando
saludos
pere

Avatar de Usuario
pser1
Mensajes: 2994
Registrado: 08 Dic 2012 18:34
Agradecido : 700 veces
Agradecimiento recibido: 771 veces

Re: Aprendiendo a manejar los chips de video V9958 y sonido YM-2149

Mensajepor pser1 » 29 Jun 2020 12:57

Al final acabé añadiendo las variables que controlan los posibles 'saltos' dentro de PT3_PLAY y también la variable
pt3_setup que en caso de ser igual a 1 debería 'evitar' que la canción se repitiera en bucle.
Pero lo que sucede es que se repite en bucle infinito -banghead
Adjunto en fichero zip tres documentos:
- Debug02.asm contiene la secuencia de envíos de los dos primeros bucles ...
- Debug02-P1.asm contiene solamente la primera parte
- Debug02-P2.asm contiene solamente la segunda parte (primera repetición en bucle)
Comparando los dos ficheros P1 y P2, se observa que los 'datos' son absolutamente idénticos,
obviamente el primer doble byte es distinto ya que es el contador de número de envío realizado desde PSGROUT
Y como es lógico éste no es el motivo por el cual el sonido suena mal y los efectos no se oyen, simplemente
es *otro* problema añadido que, obviamente, hay que solucionar -banghead

Cuando quiero imprimir variables, en Dragón las convierto a formato hexadecimal y ya una vez son 'caracteres', las
envío a la rutina de impresora [$A002]. Como el comando de arranque de XRoar que uso, contiene un parámetro que le indica
donde deseo que se envíen los datos de la impresora, luego puedo abrirlo y verificar ...
¿Existe alguna forma parecida para hacer lo mismo en SpecEmu?
Necesitaría la rutina de envío a impresora y que parámetros necesita, además de lo que se deba cambiar en SpecEmu
para genera un fichero de salida ... con los datos enviados a la impresora. Así sería mucho mas fácil comparar la
ejecución del programa en ambas máquinas -nb
saludos
pere
ValoresPsgrOut.zip
(49.41 KiB) No descargado aún

jltursan
Mensajes: 2943
Registrado: 20 Sep 2011 13:59
Agradecido : 240 veces
Agradecimiento recibido: 712 veces

Re: Aprendiendo a manejar los chips de video V9958 y sonido YM-2149

Mensajepor jltursan » 29 Jun 2020 15:07

Uf, eso habría que preguntarlo en el subforo adecuado; es posible que alguno de los emuladores permitan hacer eso que dices; pero es un uso muy particular.

¿No sería más fácil general la salida en un área de memoria y volcar la misma a un binario?. Partiendo de que estés probando la rutina de reproducción sola, yo me haría la demo con el reproductor y nada más, con eso ocupas lo mínimo y tienes prácticamente toda la memoria para volcar.

Avatar de Usuario
pser1
Mensajes: 2994
Registrado: 08 Dic 2012 18:34
Agradecido : 700 veces
Agradecimiento recibido: 771 veces

Re: Aprendiendo a manejar los chips de video V9958 y sonido YM-2149

Mensajepor pser1 » 29 Jun 2020 15:48

jltursan escribió:Uf, eso habría que preguntarlo en el subforo adecuado; es posible que alguno de los emuladores permitan hacer eso que dices; pero es un uso muy particular.
¿Quieres decir que si un programa en ensamblador Z80 llama a la rutina en ROM (Basic) para imprimir, esto NO genera ningún fichero de salida en cualquier emulador? Me parece raro ...
¿No sería más fácil general la salida en un área de memoria y volcar la misma a un binario?. Partiendo de que estés probando la rutina de reproducción sola, yo me haría la demo con el reproductor y nada más, con eso ocupas lo mínimo y tienes prácticamente toda la memoria para volcar.
El programa que estoy trazando/comparando solamente contiene la parte de música del motor, nada más.
Me ocupa 5,5k porqué obligo a dejar espacio en blanco para que las variables empiecen en $4800 y el fichero .pt3 en $5100, de esta forma
puedo comparar datos sin tener que hacer cálculos de posiciones relativas entre máquinas ...
De todas formas fíjate que cada iteración de la canción realiza unas 2560 llamadas a la rutina psgrout. Cada una de ellas me está grabando 2+14+7 bytes, cada uno dos caracteres hexadecimales, lo cual daría la brutalidad de 107400 bytes.
Un punto positivo es que al abrir el .pt3 en VTracker, éste muestra que se han de reproducir 2560 frames, así que parece correcta esta cantidad
y además los 40 primeros devolvían los mismos valores en ambas máquinas ...
Revisaré el código asumiendo los valores de variables correspondientes al punto en que se debería cerrar la música, a ver si encuentro el gazapo.
Por si acaso, si tuvieras que imprimir algo desde ensamblador Z80, ¿Que rutina de ROM llamarías? ¿Qué registro(s) usaría como parámetros de entrada?
muchas gracias
pere

Avatar de Usuario
pser1
Mensajes: 2994
Registrado: 08 Dic 2012 18:34
Agradecido : 700 veces
Agradecimiento recibido: 771 veces

Re: Aprendiendo a manejar los chips de video V9958 y sonido YM-2149

Mensajepor pser1 » 29 Jun 2020 15:58

Otra alternativa sería colcar el programa lo mas bajo posible en memoria y hacer que la rutina psgrout grabara los datos en un área de memoria justo a partir del punto en que acabe el fichero .pt3
Pare ello solo necesito saber donde puedo ubicar el programa en un Spectrum-48k y saber hasta donde puedo ir 'pokeando' sin meterme
en el área de ROM
muchas gracias
pere

Avatar de Usuario
pser1
Mensajes: 2994
Registrado: 08 Dic 2012 18:34
Agradecido : 700 veces
Agradecimiento recibido: 771 veces

Re: Aprendiendo a manejar los chips de video V9958 y sonido YM-2149

Mensajepor pser1 » 29 Jun 2020 16:37

increíble!
El programa estaba funcionando correctamente y *NO* se 'embuclaba' el solito sinó que le ayudaba yo con el código que añadí
para hacer las pasadas automáticas y evitar tener que lanzar un exec para cada frame -banghead
Lo he trazado poniendo un breakpoint en el punto donde debería finalizar y desde ahí le he hecho continuar tal como haría
el programa sin mis cambios ... y finaliza correctamente.
Bueno, podré utilizar el fichero mientras debugo en SpecEmu para ir comparando los 14 registros y estas variables de control
saludos
pere

Avatar de Usuario
pser1
Mensajes: 2994
Registrado: 08 Dic 2012 18:34
Agradecido : 700 veces
Agradecimiento recibido: 771 veces

Re: Aprendiendo a manejar los chips de video V9958 y sonido YM-2149

Mensajepor pser1 » 29 Jun 2020 18:53

por si sonaba la flauta, he vuelto a probar el juego Diamond Geezer con la última versión de la parte de música que he estado trazando
y suena horroroso con el volumen modulado primero ascendente y luego descendente eliminando totalmente los efectos ...
Así que no queda mas remedio que encontrar el punto en el que la versión 6309 *no* envía los mismos datos que el Z-80
Echaré una rápida revisión al código z-80 de los comentarios de mi código convertido, no sea que haya código z-80 que no
corresponde al que debería estar para la ultimísima vesion para el MSX ...
saludos
pere

Avatar de Usuario
pser1
Mensajes: 2994
Registrado: 08 Dic 2012 18:34
Agradecido : 700 veces
Agradecimiento recibido: 771 veces

Re: Aprendiendo a manejar los chips de video V9958 y sonido YM-2149

Mensajepor pser1 » 29 Jun 2020 22:51

Visto que imprimir en Z-80 implica cosas complicadas para mi, he optado por la opción mas hardcore propuesta por jltursan.
He hecho que el programa Z-80 guarde 16 bytes (por alinear frames) en cada 'pasada' en el área de $8000-$f000
Al llegar el puntero a $f000 se ha detenido el programa. Me he guardado un snapshot y lo he abierto con un editor hexadecimal que me
ha permitido cortar la parte que necesitaba ($8000-$efff), lo he guardado como fichero "16 bit Intel Hex" y así lo he podido
comparar con el fichero que me generó el 6309. Sorprendentemente son IGUALES! Revisados 1792 frames sobre 2560 ...
Así que a ver quien entiende esto. Los dos programas envían al chip YM2149 los mismos valores de los registros, pero mientras que
la versión en Dragón suena fatal, la versión de MSX suena correctamente.
Por cierto, tengo otros programas para Dragón que envían una canción a tres voces o envían octavas de notas y suenan perfectamente.
Esto implica que hay que buscar 'culpables' en otra zona que no sea precisamente el proceso del fichero .pt3

¿Es posible que el ordenador MSX lleve a cabo alguna inicialización que yo no hago para Dragón?
La verdad es que no se me ocurre donde mirar -banghead
Cualquier sugerencia será super bien recibida -drinks -nb
saludos
pere

Avatar de Usuario
pser1
Mensajes: 2994
Registrado: 08 Dic 2012 18:34
Agradecido : 700 veces
Agradecimiento recibido: 771 veces

Re: Aprendiendo a manejar los chips de video V9958 y sonido YM-2149

Mensajepor pser1 » 30 Jun 2020 10:32

Ante la desesperación que me produjo comprobar que mi versión convertida para 6309 estaba generando las misma secuencia
de valores en los registros del YM2149 que se generan desde Z-80, decidí hacer una prueba a mi aire.
Como tengo dos programas que envían datos al YM2149 y generan música correctamente, creé un programa nuevo que en lugar de utilizar
una partitura como datos de entrada, usara la ristra de frames generados por las máquinas al procesar el fichero FlipFlap.pt3
He tenido que cambiar básicamente la rutina llamada para leer las tres series de datos (una por canal) para que leyera a cada
interrupción un bloque de datos para enviárselos al YM2149 ... y funciona perfectamente. Suena tal como se oye en VTracker -thumbup

Ahora si que ha quedado demostrado que el tema es de inicialización (configuración) del chip de sonido ...
Tendré que modificar el motor de música-efectos para que su configuración sea igual a la del último programa de pruebas que he hecho
No deja de sorprenderme el hecho de que los efectos funcionen sin problemas y solamente la música vaya fatal.
saludos
pere

Avatar de Usuario
pser1
Mensajes: 2994
Registrado: 08 Dic 2012 18:34
Agradecido : 700 veces
Agradecimiento recibido: 771 veces

Re: Aprendiendo a manejar los chips de video V9958 y sonido YM-2149

Mensajepor pser1 » 30 Jun 2020 12:48

Una vez funcionando el 'nuevo' programa que envía la ristra de datos obtenidos del fichero .pt3 al YM2149
usando las interrupciones propias de Dragón, o sea el IRQ del retrazado vertical (/FS), me he estado peleando
con el V9958 para conseguir que fuesen sus interrupciones NMI las que determinaran el envío de datos al YM2149
Ahora funciona correctamente, así que ahora podré comparar cosas mas parecidas, me refiero al motor AGD con
música/efectos con este último programa de pruebas, a ver si consigo que el motor también funcione correctamente
saludos
pere

Avatar de Usuario
pser1
Mensajes: 2994
Registrado: 08 Dic 2012 18:34
Agradecido : 700 veces
Agradecimiento recibido: 771 veces

Re: Aprendiendo a manejar los chips de video V9958 y sonido YM-2149

Mensajepor pser1 » 30 Jun 2020 13:22

sigo haciendo pruebas.
Al comparar la música que se oye al usar el IRQ de Dragón (50 Hz) con la que genera el V9958 en modo NTSC(60 Hz), se nota
el incremento de velocidad, un 20% más rápida la versión NTSC. Así que he configurado el V9958 para que genere salida PAL y
lógicamente ahora crea NMIs a 50Hz y suena a la misma velocidad que en el VTracker
Ya no se me ocurren mas pruebas. Ahora a tratar de encontrar el motivo por el que el motor AGD suena tan mal, comparando
con el código de este último programa de pruebas que funciona y suena correctamente ...
saludos
pere

Avatar de Usuario
pser1
Mensajes: 2994
Registrado: 08 Dic 2012 18:34
Agradecido : 700 veces
Agradecimiento recibido: 771 veces

Re: Aprendiendo a manejar los chips de video V9958 y sonido YM-2149

Mensajepor pser1 » 30 Jun 2020 17:54

A pesar de copiar 'literalmente' en el motor de música la partes 'nuevas' que me funcionan individualmente, se niega a hacer nada -banghead
El siguiente paso que he hecho ha sido mantener el programa que lee la serie de frames ya decodificados anteriormente y sustituir la
parte de lectura de datos de dicha tabla por una llamada a Music_Play del motor MSX incluyendo en el fichero todo el motor de música
y curiosamente me ha dado problemas hasta que he visto que en el programa no había el equivalente del MUSICA 1,0 que aparece en el
fichero AGD. He 'emulado' esta llamada y ahora está funcionando -thumbup
Como resumen:
- el programa utiliza las interrupciones del V9958 (retrazo vertical PAL a 50Hz)
- contiene *todo* el motor de música AGD
- Al arrancar, el programa llama a Music_Init que a su vez *emite* el MUSIC 1,0 llamando a Music_LoopOff y Music_Set
- La rutina de interrupción solamente incrementa el contador/timer
- Las llamadas a PsgrOut y a Music_Play las hago desde la rutina VSync. Esto difiere del método usado en el motor.
Veré si poco a poco puedo conseguir que este programa aplique el mismo procedimiento que el motor AGD
saludos
pere


Volver a “Software MSX”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado