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

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

Re: Aprendiendo a manejar el chip de video V9958

Mensajepor pser1 » 03 Jun 2020 13:17

Último mensaje de la página anterior:

He empezado a seguir 'manualmente' el código que configura y pone en marcha el YM-2149 y he tropezado con este código en
la rutina "sfx_mute" que yo esperaba que pusiera a cero los valores de Volumen de los canales, pero al hacer las operaciones
a 'mano', me sale que apunta a otros sitios ... ¿Qué es lo que hago mal?
sfx_mute:
ld a,255 ; Lowest ayFX priority
ld [ayFX_PRIORITY],a ; Priority saved (not playing ayFX stream)
ld hl,AYREGS ; regHL= $1CBE (asumo que regH=$1C y que regL = $BE)
ld a,(ayFX_CHANNEL) ; A = $01 (valor puesto en inicialización)
inc a ; A = $02
and 3 ; A = $02
add a,8 ; A = $0A
add a,l ; A = $C8
ld l,a ; regL = $C8 por tanto regHL = $1CC8
adc a,h ; A = $E4
sub l ; A = $1C
ld h,a ; regH = $1C ; ¿Qué pinta este comentario? ; y * 32 + x
ld (hl),0 ; ($1CC8)=0
ret

ayRegs rzb 14 ; structure data to be sent to the YM-2149
AR_TonA equ 00 ; $1CBE - offset for R0 - channel A frequency fine tone byte (8 bits)
ayReg01 equ 01 ; $1CBF - offset for R1 - channel A frequency rough tone byte (4 lower bits)
AR_TonB equ 02 ; $1CC0 - offset for R2 - channel B frequency fine tone byte (8 bits)
ayReg03 equ 03 ; $1CC1 - offset for R3 - channel B frequency rough tone byte (4 lower bits)
AR_TonC equ 04 ; $1CC2 - offset for R4 - channel C frequency fine tone byte (8 bits)
ayReg05 equ 05 ; $1CC3 - offset for R5 - channel C frequency rough tone byte (4 lower bits)
AR_Noise equ 06 ; $1CC4 - offset for R6 - frequency of noise (5 lower bits)
AR_Mixer equ 07 ; $1CC5 - offset for R7 - I/O port and mixer settings (6 lower bits)
AR_AmplA equ 08 ; $1CC6 - offset for R8 - channel A level (5 lower bits)
AR_AmplB equ 09 ; $1CC7 - offset for R9 - channel B level (5 lower bits)
AR_AmplC equ 10 ; $1CC8 - offset for RA - channel C level (5 lower bits)
AR_Env equ 11 ; $1CC9 - offset for RB - envelope frequency (fine adjustement) (8 bits)
ayReg12 equ 12 ; $1CCA - offset for RC - envelope frequency (rough adjustement) (8 bits)
AR_EnvTp equ 13 ; $1CCB - offset for RD - shape of en

saludos
pere

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

Re: Aprendiendo a manejar el chip de video V9958

Mensajepor pser1 » 03 Jun 2020 13:30

curiosamente, si es que la idea es poner a cero el volumen del canal en cuestión, bastaría con cambiar el inca por un deca
Incluso apuntando regHL al campo AR_Mixer, se podria evitar el add a,8
saludos
pere

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

Re: Aprendiendo a manejar el chip de video V9958

Mensajepor pser1 » 03 Jun 2020 13:47

parece ser que se vincula el canal 1 al canal C del chip de sonido, el canal 2 al canal B y el canal 3 al canal A
Bajo estas condiciones el canal uno apunta correctamente al Volume AR_AmplC, pero si llegamos a la rutina con canal 2, entonces
sfx_mute:
ld a,255 ; Lowest ayFX priority
ld [ayFX_PRIORITY],a ; Priority saved (not playing ayFX stream)
ld hl,AYREGS ; regHL= $1CBE (asumo que regH=$1C y que regL = $BE)
ld a,(ayFX_CHANNEL) ; A = $02 (valor puesto en inicialización)
inc a ; A = $03
and 3 ; A = $03
add a,8 ; A = $0B
add a,l ; A = $C9
ld l,a ; regL = $C9 por tanto regHL = $1CC9
adc a,h ; A = $E5
sub l ; A = $1C
ld h,a ; regH = $1C
ld (hl),0 ; ($1CC9)=0 ; LO ESPERADO SERIA $1CC7 para afectar al canal B, ¿No?
ret

saludos
pere

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

Re: Aprendiendo a manejar el chip de video V9958

Mensajepor pser1 » 03 Jun 2020 16:59

he estado probando y solo con tener algun DOS activo (cualquiera) ya funciona el motor AGD-V9958 y todos los programas.
Mas adelante veré porqué fracasa cuando no hay ninguno :-(
Me temo que tendrá que ver con la rutina de CONTROLMENU ya que la primera pantalla (de selección) se muestra, pero al pulsar cualquier tecla
no sucede nada de nada y hay que resetear el Dragón.
La prioridad ahora es el sonido que no anda ni palante ni patrás ;-)
saludos
pere

jltursan
Mensajes: 2959
Registrado: 20 Sep 2011 13:59
Agradecido : 244 veces
Agradecimiento recibido: 719 veces

Re: Aprendiendo a manejar el chip de video V9958

Mensajepor jltursan » 03 Jun 2020 18:36

En cuanto pueda le echo un ojo a la rutina de mute. El comentario iba de regalo cuando hice el copy/paste -grin

Lo del sonido, ¿ahora mismo te refieres únicamente a los SFX, verdad?

¿Estás seguro que la rutina de volcado de datos a los 14 registros del PSG implicados lo hace correctamente?, siempre se puede probar con un conjunto único de valores que genere un sonido constante.

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

Re: Aprendiendo a manejar el chip de video V9958

Mensajepor pser1 » 03 Jun 2020 18:46

jltursan escribió:En cuanto pueda le echo un ojo a la rutina de mute. El comentario iba de regalo cuando hice el copy/paste -grin
Lo del sonido, ¿ahora mismo te refieres únicamente a los SFX, verdad?
¿Estás seguro que la rutina de volcado de datos a los 14 registros del PSG implicados lo hace correctamente?, siempre se puede probar con un conjunto único de valores que genere un sonido constante.
Efectivamente, de momento solamente SFX
Y, tras corregir algunos bugs que no vi por mas que repasé el código dos veces, ya se oyen ruidos. Es un buen paso adelante -thumbup
Lo que sucede es que no se parecen casi nada a lo que se escucha reproduciendo los sonidos en el ayFXPlayer -507
No sé si puede afectar el hecho de reproducir a 60fps, igual bajando a 30fps se parecerían mas ...
Seguiré revisando el código añadido para sonidos con el XRoar-GDB, así es como he ido encontrando errores hasta ahora.
Me ha parecido que se envían los 14 registros correctamente. Lo que voy a verificar es si el puntero a los sonidos recibe el valor correcto,
me refiero que no se salte el primer frame o mas -banghead
muchas gracias, seguiré comentando avances ...
saludos
pere

jltursan
Mensajes: 2959
Registrado: 20 Sep 2011 13:59
Agradecido : 244 veces
Agradecimiento recibido: 719 veces

Re: Aprendiendo a manejar el chip de video V9958

Mensajepor jltursan » 03 Jun 2020 18:49

Si generas un banco con un único sonido igual está más fácil el probar...

De momento te puedo decir que mi reproducción es a 50fps y a 60fps no debería sonar muy diferente, algo más rápido, nada más.

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

Re: Aprendiendo a manejar el chip de video V9958

Mensajepor pser1 » 03 Jun 2020 19:27

He probado a 30 fps (una de cada dos interrupciones) y prácticamente suena igual. Al ser sonidos en lugar de notas el
efecto es poco notable ...
Haré un debug manual sobre el código porqué me temo que algo funciona distinto en mi 6309 respecto al código Z80
saludos
pere

jltursan
Mensajes: 2959
Registrado: 20 Sep 2011 13:59
Agradecido : 244 veces
Agradecimiento recibido: 719 veces

Re: Aprendiendo a manejar el chip de video V9958

Mensajepor jltursan » 03 Jun 2020 20:57

pser1 escribió:parece ser que se vincula el canal 1 al canal C del chip de sonido, el canal 2 al canal B y el canal 3 al canal A
Bajo estas condiciones el canal uno apunta correctamente al Volume AR_AmplC, pero si llegamos a la rutina con canal 2, entonces
sfx_mute:
ld a,255 ; Lowest ayFX priority
ld [ayFX_PRIORITY],a ; Priority saved (not playing ayFX stream)
ld hl,AYREGS ; regHL= $1CBE (asumo que regH=$1C y que regL = $BE)
ld a,(ayFX_CHANNEL) ; A = $02 (valor puesto en inicialización)
inc a ; A = $03
and 3 ; A = $03
add a,8 ; A = $0B
add a,l ; A = $C9
ld l,a ; regL = $C9 por tanto regHL = $1CC9
adc a,h ; A = $E5
sub l ; A = $1C
ld h,a ; regH = $1C
ld (hl),0 ; ($1CC9)=0 ; LO ESPERADO SERIA $1CC7 para afectar al canal B, ¿No?
ret

saludos
pere

Revisando la rutina ya he recordado que pasaba...y revisando un poco más me he dado cuenta de que funcionaba de chiripa -shock .

Básicamente trataba de poner a 0 el mixer correspondiente al registro asociado al ayFX_CHANNEL; el porque de esa parafernalia de sumar 1 y de enmascarar con 3 era debido a que el contenido de ayFX_CHANNEL cuando se solicitaba un mute era un canal que ya había sido decrementado en 1 y suponía que para poder recuperar el valor anterior había que sumar. Tras ello y obtenido el 0,1 o 2 y sumado 8, ya se obtenía el mixer correcto. Primer error bien gordo, tienes razón cuando dices que los índices se asocian en orden inverso al registro por lo que la operación correcta no era esa. Voy ver que sería necesario...
Segundo error, el ayFX_MODE no me molesto en cambiarlo y se inicializa a 0, lo que significa que no hay rotación de canales y por tanto, el canal 1 con el que se inicializa ayFX_CHANNEL permanece invariable y con ese valor, el mute devuelve siempre el registro 10 que corresponde al mixer del canal C, el que siempre reproduce el SFX y por tanto, se hace el silencio correctamente. El segundo error corregía el primero -shock -shock

Voy a ver si lo corrijo y al menos lo dejo bien...y de paso debería probar con un ayFX_MODE distinto (=1) para ver que tal funciona con el reparto en canales.

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

Re: Aprendiendo a manejar el chip de video V9958

Mensajepor pser1 » 03 Jun 2020 23:01

jltursan escribió:Revisando la rutina ya he recordado que pasaba...y revisando un poco más me he dado cuenta de que funcionaba de chiripa -shock .
Básicamente trataba de poner a 0 el mixer correspondiente al registro asociado al ayFX_CHANNEL; el porque de esa parafernalia de sumar 1 y de enmascarar con 3 era debido a que el contenido de ayFX_CHANNEL cuando se solicitaba un mute era un canal que ya había sido decrementado en 1 y suponía que para poder recuperar el valor anterior había que sumar. Tras ello y obtenido el 0,1 o 2 y sumado 8, ya se obtenía el mixer correcto. Primer error bien gordo, tienes razón cuando dices que los índices se asocian en orden inverso al registro por lo que la operación correcta no era esa. Voy ver que sería necesario...
Segundo error, el ayFX_MODE no me molesto en cambiarlo y se inicializa a 0, lo que significa que no hay rotación de canales y por tanto, el canal 1 con el que se inicializa ayFX_CHANNEL permanece invariable y con ese valor, el mute devuelve siempre el registro 10 que corresponde al mixer del canal C, el que siempre reproduce el SFX y por tanto, se hace el silencio correctamente. El segundo error corregía el primero -shock -shock
Voy a ver si lo corrijo y al menos lo dejo bien...y de paso debería probar con un ayFX_MODE distinto (=1) para ver que tal funciona con el reparto en canales.
Genial! Ya me pasarás la versión definitiva para adaptar la conversión 6309-V9958 a ella -thumbup
De momento, tras revisar por cuarta vez el fuente, he encontrado varios errores de conversión muy enrevesados, pero que ahí estaban
Una vez corregidos, el juego DiamondGeezer funciona de perlas y suena tal como oigo los sonidos en el PC con el ayFXPlayer -thumbup
muchas gracias una vez mas ...seguimos en contacto!
saludos
pere

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

Re: Aprendiendo a manejar el chip de video V9958

Mensajepor pser1 » 04 Jun 2020 15:27

Hola de nuevo,
ya tengo 'afinado' el juego Diamond Geezer para que utilice mas SOUNDs y le he querido cambiar colores.
Patético tener que hacer cálculos al revés para pasar de colores V9958 a los valores necesarios para la función COLOUR
claramente enfocada a recibir valores de Spectrum, así que me he decidido a modificar la función INK que añadí en su
momento para FOGGY en colores que permitía seleccionar el color de primer término. Ahora acepta un valor 0-255 y lo
guarda como color primer término-fondo por lo que puedo entrar valores 'reales' para V9958
Esto además me permite mezclar colores 'brillantes' con colores normales, cosa que en los valores de Spectrum no se podía
hacer ya que si el bit de brillo está a 1, entonces ambos colores son 'brillantes'.
He hecho una búsqueda en todos los juegos convertidos y, lógicamente, solo FOGCO lo utiliza, más adelante le cambiaré
el nombre a la función a VCOLOUR y mantendré COLOUR para las conversiones de juegos AGD de Spectrum
Además he reutilizado la función PAPER que hacia algo parecido para Foggy Color para cambiar el color de fondo y ahora
se limita a enviar a la pantalla MC6847 (la salida normal) el valor de cuatro variables, cosa que puedo modificar en el 'motor'
y me sirve para debugar en tiempo real. Ha sido de increíble ayuda para verificar el tema de creación de patrones para
detectar cuando se desbordaba el contador ... Posiblemente también le cambiaré el nombre mas adelante
A ver si me animo y hago un vídeo con el juego y los sonidos del YM-2149 para poder subirlo ...
saludos
pere

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

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

Mensajepor pser1 » 04 Jun 2020 18:04

@jltursan
He estado mirando el código de la rutina Sfx_Mute y la voy a dejar así para CoCo-Dragón
Sfx_Mute
lda #255 ; Lowest ayFX priority
sta ayFX_Priority ; save (not playing ayFX)
ldx #ayRegs ; point to ayRegs begining
lda #11 ; to point to AR_Env
suba ayFX_Channel ; subtract channel number
; inca ; increment it
; anda #3 ; use only two lower bits (0-3)
; adda #8 ; set bit 3
; for channels 1-2-3
; result will be
; 10-9-8
; as expected
clr a,x ; clear pointed byte
rts ; return

De esta forma seguirá mapeando canal 1 al canal C, pero borrará el que 'toca'
El tema de tener mas de un sonido a la vez, ¿Está solamente controlado por la variable "ayFX_Mode"?
Está iniciada siempre a valor cero, pero se le podría poner un uno ... ¿Podría dar problemas este cambio?
saludos
pere

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

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

Mensajepor pser1 » 04 Jun 2020 18:39

he hecho una prueba a lo bruto.
Pongo ayFX_Mode a 1 (multi sonido) y luego en el AGD del juego he colocado dos y hasta tres SOUND seguidos
empleando diferentes sonidos.
En principio funciona ya que se oyen mezclados, pero por algún motivo algún sonido no 'cierra' el volumen a cero y deja
un ruido de fondo hasta que se genera un ruido que si cerra a cero ...
Lo dejaré como estaba porqué entiendo que el tema de efectos se pretende, por diseño, limitar a un solo canal para dejar mas
canales a la música ...
Dejaré ayFX_Mode a cero de nuevo, pero la rutina la mantengo con la modificación ... voy a probar de nuevo
saludos
pere

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

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

Mensajepor pser1 » 05 Jun 2020 16:14

Ya tocaba alguna actualización, ¿No?
He finalizado la conversión de la parte del motor AGD (de MSX) que gestiona los efectos especiales a través del chip de audio YM-2149
que en Dragón tenemos accesible, de momento, via el módulo externo CoCo-PSG de Ed Snider.
Mi Dragón 64 tiene en este momento un multipack que me permite conectar dos módulos, el que lleva la gráfica V9958 (WordPak2+) y
el susodicho CoCo-VGA que lleva el YM-2149 y otras cosas mas.
La placa que está diseñando John Whitworth donde colaboran también Bas Gialopsos y Phil-Harvey Smith, llevará los dos chips
mencionados y otro de regalo como el MSX-Next si no voy equivocado ...
Os adjunto enlace al vídeo que he grabado ... en pésimas condiciones -banghead
Tuve que poner una montaña de libros delante del televisor para que el móvil pudiera grabar directamente, por ello sentado ante
el Dragón no veía nada de pantalla, me he tenido que poner en pié y alargar el cuello para ver la pantalla así que perdía de vista
el teclado demasiado a menudo. En fin es una forma de tratar de ocultar lo horrible que soy como jugador -507
El próximo paso ya es el motor MSX que gestiona la música a tres canales -thumbup
https://youtu.be/dnuiz5J4bCs
saludos
pere

jltursan
Mensajes: 2959
Registrado: 20 Sep 2011 13:59
Agradecido : 244 veces
Agradecimiento recibido: 719 veces

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

Mensajepor jltursan » 05 Jun 2020 17:45

En principio funciona ya que se oyen mezclados, pero por algún motivo algún sonido no 'cierra' el volumen a cero y deja
un ruido de fondo hasta que se genera un ruido que si cerra a cero ...

Eso es precisamente con lo que me estoy peleando -banghead

Como era de esperar, al no haber probado nunca el ayFX_MODE=1, viene con sorpresita. Cuando lo tenga al 100% ya veré si merece realmente la pena dejarlo accesible de alguna manera o si es mucho mejor que el canal estático, dejarlo a 1 por defecto.

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

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

Mensajepor pser1 » 05 Jun 2020 22:30

jltursan escribió:Eso es precisamente con lo que me estoy peleando -banghead
Como era de esperar, al no haber probado nunca el ayFX_MODE=1, viene con sorpresita. Cuando lo tenga al 100% ya veré si merece realmente la pena dejarlo accesible de alguna manera o si es mucho mejor que el canal estático, dejarlo a 1 por defecto.

Estaría bien poder mezclar mas de un sonido, así se podrían oir a la vez los 'rebotes' de algunos sprites cuando cambian de dirección y hay varios en pantalla ...
Por supuesto, si en un juego va a haber música, entonces será mejor limitar los sonidos/efectos a un canal solamente, pero ésto
podría dejarse en manos de desarrollador del juego ...
Si quieres que haga alguna prueba, solo tienes que decírmelo. Ahora me tomaré un tiempo sin hacer nada que no sea la conversión de
laparte del PT3 Player para añadir música al motor AGD para CoCo-Dragon
saludos
pere

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

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

Mensajepor pser1 » 06 Jun 2020 11:57

jltursan escribió:Eso es precisamente con lo que me estoy peleando -banghead
Como era de esperar, al no haber probado nunca el ayFX_MODE=1, viene con sorpresita. Cuando lo tenga al 100% ya veré si merece realmente la pena dejarlo accesible de alguna manera o si es mucho mejor que el canal estático, dejarlo a 1 por defecto.

Hola José Luis,
he estado echando una ojeada al motor sfx y me da la impresión de que se diseñó claramente para emitir un único sonido, de lo contrario
no veo porqué se definieron variables 'globales' si puedes llegar a tener tres instancias en marcha, me refiero a
ayFX_Mode	rzb	1		; ayFX mode
ayFX_Bank rzb 2 ; Current ayFX Bank
ayFX_Priority rzb 1 ; Current ayFX stream priotity
ayFX_Pointer rzb 2 ; Pointer to the current ayFX stream
ayFX_Tone rzb 2 ; Current tone of the ayFX stream
ayFX_Noise rzb 1 ; Current noise of the ayFX stream
ayFX_Volume rzb 1 ; Current volume of the ayFX stream
ayFX_Channel rzb 1 ; PSG channel to play the ayFX stream

Las dos primeras son comprensibles, pero a partir de la tercera, para mi, deberían ser tablas de tres elementos usando como índice
el canal PSG que utilizan, pero puedo andar muy desencaminado, por supuesto ...
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