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

jltursan
Mensajes: 3175
Registrado: 20 Sep 2011 13:59
Agradecido : 284 veces
Agradecimiento recibido: 805 veces

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

Mensajepor jltursan » 14 Ago 2020 14:36

Último mensaje de la página anterior:

En el código fuente del "VGM Play", que soporta los VGZ, puedes encontrar información:

https://hg.sr.ht/~grauw/vgmplay-msx/browse/src/Application.asm?rev=tip

Método Application_InflateFile

Avatar de Usuario
pser1
Mensajes: 3038
Registrado: 08 Dic 2012 18:34
Agradecido : 717 veces
Agradecimiento recibido: 784 veces

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

Mensajepor pser1 » 14 Ago 2020 16:23

jltursan escribió:En el código fuente del "VGM Play", que soporta los VGZ, puedes encontrar información:
https://hg.sr.ht/~grauw/vgmplay-msx/browse/src/Application.asm?rev=tip
Método Application_InflateFile
Muchísimas gracias -thumbup -drinks
Programación orientada a objetos en ensamblador, increíble!!
Veamos, la mayoría de clases que utiliza este método las encuentro un nivel mas arriba, pero no encuentro estas dos:
call GzipArchive_class.New
call FileReader_class.New
¿Donde podría localizarlas? Me parece que va a ser mas complicado de lo que había imaginado ...
saludos
pere

jltursan
Mensajes: 3175
Registrado: 20 Sep 2011 13:59
Agradecido : 284 veces
Agradecimiento recibido: 805 veces

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

Mensajepor jltursan » 14 Ago 2020 17:43

Es que este hombre gasta un nivel bastante importante, ¿no pensarías que te lo iba a dejar todo ahí a la vista? -grin

Si se rebusca por su github encuentras lo siguiente:

GZipReader.asm: forma parte de https://hg.sr.ht/~grauw/gunzip/browse/src?rev=tip
FileReader.asm: forma parte de https://hg.sr.ht/~grauw/neonlib/browse/src?rev=tip

Avatar de Usuario
pser1
Mensajes: 3038
Registrado: 08 Dic 2012 18:34
Agradecido : 717 veces
Agradecimiento recibido: 784 veces

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

Mensajepor pser1 » 14 Ago 2020 22:09

jltursan escribió:Es que este hombre gasta un nivel bastante importante, ¿no pensarías que te lo iba a dejar todo ahí a la vista? -grin
Si se rebusca por su github encuentras lo siguiente:
GZipReader.asm: forma parte de https://hg.sr.ht/~grauw/gunzip/browse/src?rev=tip
FileReader.asm: forma parte de https://hg.sr.ht/~grauw/neonlib/browse/src?rev=tip
Muchas gracias de nuevo -thumbup
Lo guardaré como último cartucho ...
saludos
pere

Avatar de Usuario
pser1
Mensajes: 3038
Registrado: 08 Dic 2012 18:34
Agradecido : 717 veces
Agradecimiento recibido: 784 veces

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

Mensajepor pser1 » 15 Ago 2020 12:03

Veo en los ficheros VGM, que en un sesentavo de segundo entran 735 samples, lo que indica que trabajan a 44100 samples por segundo,
ya que 44100/60=735. Esto implica que el tiempo dedicado a cada sample es de 1/(60*735) = 0,02267573 milisegundos

Como la CPU HD63C09 a doble velocidad va a 1,789MHz, cada ciclo de reloj ocupa 1/1,789=0,000558971 milisegundos
Entonces el número de ciclos por sample será de 0,02267573/0,000558971=40,5669 que yo redondeo a 40 (+1%)
Por otro lado, leyendo la hoja de datos del YM-2413 encuentro esta nota
; ------------------------------------------------------------------------------------------
b) Adress write mode ...
After writting an address, be sure to wait for 12 cycles of the master clock (oM)
before writting in sound data
c) Data write mode ...
Wait for 84 cycles of the master clock (oM) before writting in further data or another address
; ------------------------------------------------------------------------------------------
Asumiendo que el reloj principal está funcionando a 3,579545MHz, como la CPU va a 1,789MHz, la relación es de 3,579545/1,789=2,0008 probablemente debido a decimales que faltan en el 1,789. Esto nos indica, que al ir la CPU a la mitad de velocidad, cada ciclo suyo equivale
a dos ciclos del reloj principal, por lo tanto los ciclos a esperar serían
- Tras una dirección, esperar 6 ciclos y tras un valor de datos esperar 42 ciclos
Pero esto último sería una barbaridad ya que hemos visto que un sample 'ocupa' 40 ciclos. No es posible que haya que esperar mas tiempo
del que ocupa un sample. De hecho en algunos VGM he encontrado tiempos de espera exactamente de 1 sample, así que alguna cosa me
falla en estos cálculos.
¿Es posible que el reloj principal sea de 2*3,579545MHz? (o sea de 7,15909MHz)
Esto reduciría el número de ciclos a la mitad haciéndolo plausible, pero solo son ideas (deseos)
¿Alguien me podría confirmar el valor de la frecuencia 'master' en un MSX2+?

muchas gracias de antemano
Buen fin de semana
pere

Avatar de Usuario
pser1
Mensajes: 3038
Registrado: 08 Dic 2012 18:34
Agradecido : 717 veces
Agradecimiento recibido: 784 veces

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

Mensajepor pser1 » 15 Ago 2020 12:07

Por cierto, he comprobado, gracias al programa que extrae los comandos de un fichero VGM a format plano .TXT, que el
número de samples total de la canción es la suma de los valores indicados en los comandos wait.
Esto implica que los tiempos utilizados en enviar comandos *DEBEN* ser descontados del WAIT siguiente para que el
total no exceda de lo previsto.
Creo que, como no lo estoy haciendo, esto modifica levemente la canción comparada con el sonido en la web, sin ser muy notable.
saludos
pere

jltursan
Mensajes: 3175
Registrado: 20 Sep 2011 13:59
Agradecido : 284 veces
Agradecimiento recibido: 805 veces

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

Mensajepor jltursan » 15 Ago 2020 13:40

pser1 escribió:Veo en los ficheros VGM, que en un sesentavo de segundo entran 735 samples, lo que indica que trabajan a 44100 samples por segundo,
ya que 44100/60=735. Esto implica que el tiempo dedicado a cada sample es de 1/(60*735) = 0,02267573 milisegundos

Como la CPU HD63C09 a doble velocidad va a 1,789MHz, cada ciclo de reloj ocupa 1/1,789=0,000558971 milisegundos
Entonces el número de ciclos por sample será de 0,02267573/0,000558971=40,5669 que yo redondeo a 40 (+1%)
Por otro lado, leyendo la hoja de datos del YM-2413 encuentro esta nota
; ------------------------------------------------------------------------------------------
b) Adress write mode ...
After writting an address, be sure to wait for 12 cycles of the master clock (oM)
before writting in sound data
c) Data write mode ...
Wait for 84 cycles of the master clock (oM) before writting in further data or another address
; ------------------------------------------------------------------------------------------
Asumiendo que el reloj principal está funcionando a 3,579545MHz, como la CPU va a 1,789MHz, la relación es de 3,579545/1,789=2,0008 probablemente debido a decimales que faltan en el 1,789. Esto nos indica, que al ir la CPU a la mitad de velocidad, cada ciclo suyo equivale
a dos ciclos del reloj principal, por lo tanto los ciclos a esperar serían
- Tras una dirección, esperar 6 ciclos y tras un valor de datos esperar 42 ciclos
Pero esto último sería una barbaridad ya que hemos visto que un sample 'ocupa' 40 ciclos. No es posible que haya que esperar mas tiempo
del que ocupa un sample. De hecho en algunos VGM he encontrado tiempos de espera exactamente de 1 sample, así que alguna cosa me
falla en estos cálculos.
¿Es posible que el reloj principal sea de 2*3,579545MHz? (o sea de 7,15909MHz)
Esto reduciría el número de ciclos a la mitad haciéndolo plausible, pero solo son ideas (deseos)
¿Alguien me podría confirmar el valor de la frecuencia 'master' en un MSX2+?

muchas gracias de antemano
Buen fin de semana
pere


Tomando como modelo el Panasonic FS-A1WSX...

XTAL_FS_A1WSX.png
XTAL_FS_A1WSX.png (86.29 KiB) Visto 382 veces

Lo que nos deja en velocidad estandar (dividiendo por 6) una frecuencia exacta de 21,47727 / 6 = 3,579545Mhz

Avatar de Usuario
pser1
Mensajes: 3038
Registrado: 08 Dic 2012 18:34
Agradecido : 717 veces
Agradecimiento recibido: 784 veces

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

Mensajepor pser1 » 15 Ago 2020 14:18

@jltursan
A mi ya me parece que la frecuencia es 3,579545 MHz, lo que NO entiendo es el motivo por el cual en la hoja de datos del YM2413
se 'avisa' de que hay que dejar 84 ciclos del reloj principal después de haber escrito un valor en un registro.
Si se utilizara el valor de la frecuencia del oscilador, sería 6 veces mayor que 3,579 lo cual permitiría reducir a la sexta parte
los ciclos calculados en base a 1,789MHz:
- 1 ciclo tras escribir dirección
- 7 ciclos tras escribir datos
Esto sería mucho mejor, por supuesto, pero ... ¿Se puede verificar si sería correcto?
saludos
pere

jltursan
Mensajes: 3175
Registrado: 20 Sep 2011 13:59
Agradecido : 284 veces
Agradecimiento recibido: 805 veces

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

Mensajepor jltursan » 15 Ago 2020 15:27

Pues a ver, no tengo ni idea; pero leyendo el manual:

1) Escribir la dirección: 12 ciclos de espera entre una y otra.
2) Escribir dato: 84 ciclos de espera entre uno y otro.

En el caso de un MSX estandar, el reloj de referencia en el equipo y el YM2413 es el mismo por lo que 1 ciclo YM = 1 ciclo Z80. Con ello, es evidente que no debemos preocuparnos por el retardo al escribir las direcciones, hagamos lo que hagamos siempre va a haber 12 ciclos entre una y otra. La escritura del dato al menos va a tener un retardo equivalente a lo que nos cueste escribir la dirección + escribir el propio dato, lo que nos falte habrá que insertarlo por enmedio.

Como referencia vuelve a emplear el proyecto "VGM Play": https://hg.sr.ht/~grauw/vgmplay-msx/browse/src/drivers/MSXMusic.asm?rev=release-1.3

En el driver de MSXMUSIC encuentras la rutina de escritura:

Código: Seleccionar todo

   ; e = register
   ; d = value
   SafeWriteRegister:
      ld a,e
   ; a = register
   ; d = value
   WriteRegister:
      out (MSXMusic_ADDRESS),a
      in a,(MSXMusic_ADDRESS)  ; wait 12 / 3.58 µs
      in a,(MSXMusic_ADDRESS)  ;  "
      ld a,d
      out (MSXMusic_DATA),a
      in a,(09AH)  ; wait 84 / 3.58 µs
      in a,(09AH)  ; R800: 72 / 7.16 µs
      ret

Vienen comentados los microsegundos que se deben esperar en función de la velocidad del procesador. Toma como base la de los 3.58Mhz, 84 ciclos son exactamente 84/3,579545 =23,466669 = 24uSegs para estar seguros.

Espero que te pueda servir de modelo para los cálculos con el 6309 :-)

Avatar de Usuario
pser1
Mensajes: 3038
Registrado: 08 Dic 2012 18:34
Agradecido : 717 veces
Agradecimiento recibido: 784 veces

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

Mensajepor pser1 » 15 Ago 2020 15:38

Hola,
he probado a reducir a la mitad los tiempos entre escrituras al YM2413 y aunque algunas canciones
suenan aceptablemente, otras tienen problemas especialmente con frecuencias altas.
Probaré reduciendo solamente después de valores, manteniendo los 6 tras direcciones
Ya os cuento ...
saludos
pere

Avatar de Usuario
pser1
Mensajes: 3038
Registrado: 08 Dic 2012 18:34
Agradecido : 717 veces
Agradecimiento recibido: 784 veces

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

Mensajepor pser1 » 15 Ago 2020 15:40

Nota final,
el simple hecho de reducir de 42 a 21 los ciclos tras enviar datos al YM2413 se traduce en sonidos agudos destrozados.
He de volver a los 42 me guste o no :-(
saludos
pere

Pd Ahora me leeré tus últimos mensajes, estaba haciendo pruebas con el editor del hilo abierto escribiendo ...

Avatar de Usuario
pser1
Mensajes: 3038
Registrado: 08 Dic 2012 18:34
Agradecido : 717 veces
Agradecimiento recibido: 784 veces

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

Mensajepor pser1 » 15 Ago 2020 15:47

@jltursan
no hace mas que validar lo que decía, los 84 ciclos de 3,85MHz equivalen a 42 ciclos a 1,789MHz y esta cantidad
supera la que ocupa una muestra (735 en un sesentavo de segundo)
Como la música suena bastante bien a pesar de oirse a través de una TV de baja calidad de sonido ... me lo quedo así
Y de momento me olvidaré del tema de descontar el tiempo empleado en enviar comandos ... la diferencia es imperceptible
Muchas gracias una vez mas -thumbup -drinks
saludos
pere

Avatar de Usuario
pser1
Mensajes: 3038
Registrado: 08 Dic 2012 18:34
Agradecido : 717 veces
Agradecimiento recibido: 784 veces

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

Mensajepor pser1 » 15 Ago 2020 16:25

está claro que hay dos tipos de ficheros VGM, unos pequeños de juegos que utilizan solamente el YM2413
y luego otros que llegan a tener canciones de mas de 3 Mb, que además utilizan el YM2149 (AY-3-8910) y parecen mas elaborados
sobre todo parecen utilizar mas canales ...
Al principio había pensado en utilizar los 128 Kb de memoria VRAM para cargar una canción, pero con las dimensiones que estoy
encontrando ahora, parece mas indicado grabar ficheros con todas las canciones de un juego en un solo fichero en la tarjeta
del SDC y luego leer en plan 'streaming' a un buffer grande desde el cual se irán reproduciendo las canciones secuencialmente.
Es parecido a la solución que empleé para mostrar fotos en varios modos gráficos, allí me bastaba con cargar algo menos de 120Kb de datos
Aquí tendré que encontrar alguna forma para ir llenando el buffer a medida que se va reproduciendo, tal vez un buffer circular
de 4-8 Kb sería suficiente, habrá que ver como intercalar las lecturas de la tarjeta al buffer aprovechando los WAIT grandes,
en fin solo son ideas a revisar ... mas adelante
saludos
pere

jltursan
Mensajes: 3175
Registrado: 20 Sep 2011 13:59
Agradecido : 284 veces
Agradecimiento recibido: 805 veces

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

Mensajepor jltursan » 16 Ago 2020 14:50

Vaya parece que lo vas encaminando...y suena bien lo que vas proponiendo, ¡ánimo! :-)

Avatar de Usuario
pser1
Mensajes: 3038
Registrado: 08 Dic 2012 18:34
Agradecido : 717 veces
Agradecimiento recibido: 784 veces

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

Mensajepor pser1 » 17 Ago 2020 14:18

Hola,
como me descargué el programa VGMTool, he mirado con él los ficheros VGM 'grandes' que había bajado hace unos días y, para mi sorpresa,
*todos* son para el chip YM2162, creo que es un OPN2 que permite has seis canales pero con cuatro operadores por canal
Como no es esto lo que tenemos en la placa D-MSX2 los borraré y volveré a buscar mas ficheros.
Los que tengo actualmente de la página "SMS Power!" son mayoritariamente para YM2413 o bien para el SN76496 que tampoco está en
nuestro nuevo módulo. Los que me interesan son los que trabajen con el YM2413 y/o YM2149 (equiv. a AY-3-8910)
saludos
pere

Pd de momento no necesito devanarme los sesos pensando en el método de streaming ...

Avatar de Usuario
pser1
Mensajes: 3038
Registrado: 08 Dic 2012 18:34
Agradecido : 717 veces
Agradecimiento recibido: 784 veces

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

Mensajepor pser1 » 17 Ago 2020 14:21

No se si será normal, pero todos los ficheros VGM que tengo actualmente y que tenga la opción de 'loop' hailitada,
muestran el punto de re-entrada pero luego resulta que la longitud del bucle *SIEMPRE* es hasta el final del fichero
A mi me facilita la programación, pero habitualmente, en una partitura al final hay algunas notas que sirven para dar
la entrada al punto de bucle, pero a la 'segunda pasada' éstas ya no se tocan puesto que no se repite el bucle ...
¿Es normal o es pura casualidad? Lo cierto es que lo veo en todos los ficheros ...
saludos
pere

Avatar de Usuario
pser1
Mensajes: 3038
Registrado: 08 Dic 2012 18:34
Agradecido : 717 veces
Agradecimiento recibido: 784 veces

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

Mensajepor pser1 » 19 Ago 2020 18:31

Hola amigos ...
al final haré una grabación en mp3 de algunas de las canciones de Final Fantasy II que pueden cargarse en mi reproductor actual
para que podáis escuchar el resultado aunque lo reproduzca en un TV mas o menos 'añejo'
He ido modificando el reproductor para que respete los bucles que indica la cabecera y además acepta comandos para el YM2149
(o sea un AY-3-8910). Como he usado instrucciones del HD6309, he optado por entrar en modo nativo para darle mas 'ciclos'
Tal como está ahora, ya me gusta, desde un pequeño programa Basic voy cargando los vgm y se ejecuta el 'player'

Estoy buscando ficheros VGM que utilicen los dos chips del MSX2 o sea el YM2149 y el YM2413 pero parece que no hay nada publicado
Posiblemente estoy buscando con combinaciones de palabras equivocadas ... o desafortunadas por ahora -banghead
Agradeceré cualquier información, enlace a páginas donde se puedan descargar ficheros .VGM o comprimidos .VGZ para ambos chips
muchas gracias -thumbup
pere


Volver a “Software MSX”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados