★ APPLICATIONS ★ PROGRAMMATION ★ Sintetizador de sonidos para CPC ★ |
Control del PSG (Amstrad Personal) | Applications Programmation |
Una de las cualidades más sobresalientes del Ams-trad es su chip de sonido. Este potente chip dispone de tres canales independientes de sonido, además de una serie de envolventes predefinidas y de un generador de ruidos. El nombre técnico de este chip es el de PSG AY-3-8912 o, para entendernos, generador de sonidos programable. Originalmente, el AY-3-8912 fue diseñado para conectarse directamente a las líneas de dirección del Z80. Pero la gente de Amstrad lo usó de una manera realmente extraña, pues el chip está conectado al PPI, por lo que su programación desde Código Máquina es realmente difícil. Con el programa de este artículo podremos mandar datos al chip directamente, lo que nos permitirá una experimentación con el mismo para su mayor comprensión y utilidad. Antes de explicar su funcionamiento, vamos a hacer una pequeña introducción de cómo está conectado el PSG al Amstrad, y de los registros de que dispone. El PSG dispone de 16 registros, y el método para acceder a ellos es similar al utilizado en el CRTC, es decir, primero se selecciona un registro y después podremos leer o escribir en él. La forma de seleccionar si es lectura o escritura se realiza a través de los dos bits más altos del puerto C del PPI, accesible por &F6xx, donde xx puede ser cualquier valor. El bit 6 es la línea BC1, mientras el bit 7 es BDIR. La tabla de funcionamiento de estos dos bits es la siguiente:
Los registros R0 a R5, tomados por parejas, informan al PSG del tono de cada uno de sus canales A, B y C, respectivamente. Los registros pares (R0, R2, R4) son los 8 bits menos significativos del tono, mientras los registros impares (Rl, R3, R5), los 4 bits más significativos, por lo que en total, el tono viene determinando 12 bits. El registro R6 determina el periodo de ruido, del cual sólo son significativos sus 5 bits mas bajos, por lo que el valor podrá variar entre 0 y 31, siendo 0 la ausencia de ruido. El registro R7 controla la mezcla entre los tres canales y el generador de ruido. También controla el puerto de entrada-salida del que se hablará más adelante. El significado de cada bit viene explicado en la siguiente tabla, teniendo en cuenta que un 0 en un bit activa ese canal, mientras un 1 lo desactiva.
Así, por ejemplo, si mandamos al registro 7, el siguiente valor en binario 110010, activamos el sonido en el canal A y C, y además en el canal A activamos el generador de ruido. Los registros R8 a R10 controlan los volúmenes de los canales A, B y C, respectivamente. Los valores pueden variar entre 0 y 15. Además, el bit 4 controla si está activa o no la envolvente, que actuará sobre la amplitud del sonido. Los registros Rll y R12 controlan el periodo de la envolvente de forma similar a como lo realizan los registros R0 a R5 sobre el tono. El registro R13 define la envolvente a utilizar, y sólo son significativos los 4 bits de menor peso. Hay que señalar que si el bit 4 de los registros R8 a R10 está a cero, cualquier valor mandado a R3 será ignorado, por lo que si queremos que la envolvente actúe sobre el sonido, deberemos poner a uno el bit 4 del canal o canales sobre los que queremos que actúe. Las distintas envolventes de las que dispone tienen el siguiente efecto:
Por último, los registros R14 y R15 se encargan de gestionar la puerta de entrada y salida de la que está dotado el PSG, pero su uso no tiene efecto alguno sobre el sonido. En cuanto al uso del programa, no puede ser más fácil. Una vez ejecutado, la pantalla aparece dividida en dos partes. En la superior se nos muestra en una primera columna y entre corchetes los valores que actualmente tiene el PSG en cada uno de sus registros, a continuación un dígito que va desde 0 hasta D, que será la tecla que deberemos pulsar para seleccionar un registro y mandarle un valor, y una descripción de cada uno de los registros. A su vez y entre paréntesis los bits significativos de cada registro. Si pulsamos la tecla P, el programa nos permitirá elegir entre unos sonidos de prueba que lleva incorporados el programa Basic. Como se ha dicho antes, si queremos mandar un valor a un registro, deberemos pulsar la tecla correspondiente. Si nos hemos equivocado al elegir el registro, bastará con responder con la tecla Enter, y así el programa no mandará ningún valor. Es recomendable no hacer sonar el PSG con algún comando Basic Si mandamos un valor al registro 7, el programa siempre pondrá a 1 el bit 7, y a 0 el bit 6, pues de no ser así, los resultados no serían los esperados, ya que esos dos bits definen el estado del puerto de entrada y salida del que dispone el PSG, aunque siempre podemos quitarlo, e intentar experimentar. Pero lo verdaderamente útil de este programa, es que nos permite utilizar los sonidos que definamos en nuestros programas Basic. Para esto será necesario copiar el listado 2 con el Cargador Universal y salvarlo en el disco con el nombre de “SONIDO.BIN”. Así, cuando ejecutemos el creador de sonidos y creamos que tenemos un sonido bonito, o simplemente que nos guste, deberemos dar a la tecla S (S = Salvar). Tras esto, nos pedirá el nombre con el que queremos salvar el sonido en cinta o disco. El programa salvará el sonido como una subrutina Basic que podremos mergear en nuestros programas. Para luego poder hacer uso del sonido, en la primera línea de nuestro programa deberemos añadir las siguientes instrucciones: MEMORY &9FFF:LOAD “SONIDO. BIN”,&A000Y cuando queramos que suene deberemos hacer un GOSUB 65000, que es el número de línea a partir del cual se generará la subrutina, aunque siempre podremos renumerarlo.
|