Karoshi MSX Community

Desarrollo MSX => Desarrollo (Español/Spanish) => Mensaje iniciado por: aorante en 13 de Abril de 2011, 01:58:08 pm



Título: rutina que copia valores registros del PSG desde la RAM
Publicado por: aorante en 13 de Abril de 2011, 01:58:08 pm
Hola compañeros.

Hoy me he puesto a optimizar (o simplificar), una rutinilla que utilizo en el player (para el PSGed v2) que copia de la RAM al PSG (un buffer con los valores de los registros 0 al 13). Para ello he investigado un poco como funcionan las instrucciones OTIR y OUTI.
Después de comprobar que OTIR no sirve (o eso creo) para el PSG, he utilizado OUTI.

Quería compartir con vosotros la rutina por si ha alguien le sirve o por si detectáis algún error o forma de mejorarla.

Código:
; copia registros PSG desde buffer
RAM2PSG_CPY:
ld HL,#PSG_RAM ; direccion de memoria del buffer
ld B,#14       ; numero de registros
xor A
ld C,#0xA1     ; numero de puerto para outi
LOOP:
out (#0xA0),A
inc A
outi 
JR NZ,LOOP 
ret

Saludos!


Título: Re: rutina que copia valores registros del PSG desde la RAM
Publicado por: Iggy Rock en 13 de Abril de 2011, 05:52:32 pm
Mas compacta no podrías ser! ;D

El único problema que tiene es el reg. 13. Si escribes en cada interrupción, por ejemplo para hacer un slide o para controlar los volumenes de los tres canales, este registro que define la forma de la envolvente se reinicia y suena bastante feo. Si no es este caso y solo actualizas el PSG  es perfecto.


Título: Re: rutina que copia valores registros del PSG desde la RAM
Publicado por: aorante en 13 de Abril de 2011, 07:18:00 pm
El único problema que tiene es el reg. 13. Si escribes en cada interrupción, por ejemplo para hacer un slide o para controlar los volumenes de los tres canales, este registro que define la forma de la envolvente se reinicia y suena bastante feo. Si no es este caso y solo actualizas el PSG  es perfecto.

Tienes razón.  :D
En el player que he programado, utilizo esta rutina para copiar hasta el 12, y el 13 lo lanzo aparte, cuando es necesario.


Título: Re: rutina que copia valores registros del PSG desde la RAM
Publicado por: Iggy Rock en 14 de Abril de 2011, 04:26:10 pm
;)

Aprovecho para lanzarte yo una pregunta: He notado que si en el mixer (reg 7) activo el bit correspondiente a ruido en un canal donde está sonando una envolvente la diferencia es notable. ¿¿Como afecta el seleccionar ruido a las envolventes?? Por cierto que esto me pasa tanto en un PSG interno como en el extra de la MegaFlashROM SCC+


Título: Re: rutina que copia valores registros del PSG desde la RAM
Publicado por: aorante en 14 de Abril de 2011, 08:12:56 pm
Hola!

Aprovecho para lanzarte yo una pregunta: He notado que si en el mixer (reg 7) activo el bit correspondiente a ruido en un canal donde está sonando una envolvente la diferencia es notable. ¿¿Como afecta el seleccionar ruido a las envolventes?? Por cierto que esto me pasa tanto en un PSG interno como en el extra de la MegaFlashROM SCC+

No te acabo de entender.  ???
¿También tienes activado el tono en el mismo canal?
Lo único que se del tema, es lo que dijo en estos foros Madonna Mk2, de que la mezcla del ruido y el tono es bastante mala.
El efecto de la envolvente sobre el ruido debería ser igual que con el tono ya que, lo que tiene que hacer es variar el volumen de diferentes formas (reg 13)...

La gracia de la percusión de Roxy Musak es que en lugar de usar la típica configuración tono + ruido, la cual es muy pobre en el PSG ya que hace una mezcla lógica (no me acuerdo si mediante OR o AND) y pierde potencia y definición, usa 2 canales, uno con el tono y otro con el ruido.

Te recomiendo que leas ese mensaje. Madonna Mk2 habla de algunas técnicas muy interesantes...  :)

Saludos!


Título: Re: rutina que copia valores registros del PSG desde la RAM
Publicado por: Iggy Rock en 16 de Abril de 2011, 01:58:38 pm
Ops! disculpa. Mejor con un listado en basic:


Código:
10 sound 0,0
20 sound 1,0
30 sound 8,&H10
40 sound 11,&H28
50 sound 12,0
60 sound 13,14   ; 8,10 o 12
70 A%=&B10111001
80 sound 7,A%
90 A$=input$(1)
100 A%=A% xor 1
110 goto 80

pulsa cualquier tecla para notar el cambio. A bote pronto parece que el volumen de la envolvente varia.


Título: Re: rutina que copia valores registros del PSG desde la RAM
Publicado por: aorante en 19 de Abril de 2011, 11:42:23 am
pulsa cualquier tecla para notar el cambio. A bote pronto parece que el volumen de la envolvente varia.

Que bueno!  :)

No conocía este efecto!

En este programa estas modificando el bit 0 del registro 7 del mixer, con lo que activas y desactivas el tono del canal A. Si tocas el bit 3 y lo pones a 0 sonará el ruido y no se aprecia este efecto que describes.
En ninguno de los dos casos suena el tono (lo tienes con valor 0), si no que es un sonido que emite la envolvente cuando el valor del periodo es bajo (el efecto de modulación de amplitud que describía Madonna Mk 2).

Es muy interesante esta variación de volumen..

Saludos!


Título: Re: rutina que copia valores registros del PSG desde la RAM
Publicado por: Iggy Rock en 19 de Abril de 2011, 12:17:51 pm
Si que es interesante. Ademas, si das valores de frecuencia a los registros 0 y 1 y mantienes activado el ruido tambien tiene otro efecto curioso. Ya te pondré otro ejemplo.

Bueno, a lo que íbamos: a veces hay que pensarse volcar a saco todos los registros.