APPLICATIONSPROGRAMMATION ★ Sintetizador de sonidos para CPC ★

Control del PSG (Amstrad Personal)Applications Programmation
★ Ce texte vous est présenté dans sa version originale ★ 
 ★ This text is presented to you in its original version ★ 
 ★ Este texto se presenta en su versión original ★ 
 ★ Dieser Text wird in seiner Originalfassung präsentiert ★ 

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:

BC1BDIRSignificado
00Inactivo
01Lee del PSG
10Escribe el PSG
11Selección del registro

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.

BITValor 0Valor 1
0Activa sonido canal ADesactiva canal A
1Activa sonido canal BDesactiva canal B
2Activa sonido canal CDesactiva canal C
3Activa ruido canal BDesactiva ruido A
4Activa ruido canal BDesactiva ruido B
5Activa ruido canal BDesactiva ruido C

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:

  • 0 a 3: Empieza con una amplitud máxima y se va debilitando hasta silenciarse.
  • 4 a 7: Sube hasta el máximo y después bruscamente pasa al silencio.
  • 8: Como 0 a 3, pero repitiéndolo sin parar.
  • 9: Como 0 a 3, pero de un modo más marcado.
  • 10: Comienza alto, baja, sube y se repite.
  • 11: Ataque fuerte, se debilita hasta llegar al silencio, y después vuelve al máximo quedándose en él.
  • 12: Sube hasta el máximo y se repite.
  • 13: Sube hasta el máximo y se queda en él.
  • 14: Al revés que en la envolvente 10.
  • 15: Igual que en 4 a 7,

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
(por ejemplo el CHR&(7)), porque si lo hacemos, el intérprete Basic cambiará todos los valores del PSG que tengamos en ese momento, con lo que perderíamos los datos que tuviésemos.

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”,&A000

Y 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.

Amstrad Personal

★ PUBLISHER: Amstrad Personal
★ YEAR: 1988
★ CONFIG: 64K + AMSDOS
★ LANGUAGE:
★ LiCENCE: LISTING
★ COLLECTION: AMSTRAD PERSONAL 1988
★ AUTHOR: Daniel Calvo
 

★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listing:
» Control  del  PSG    (Amstrad  Personal)    LISTING    SPANISHDATE: 2022-09-23
DL: 103
TYPE: PDF
SiZE: 802Ko
NOTE: 4 pages/PDFlib v1.6

★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Coding » Menu - PSG / AY3
» Coding » Clefs1 33 Circuit Ay3 8912 Psg - Struct
» Coding » AMSLIVE n°15 - PPI / PSG
» Coding » Clefs1 33 Circuit Ay3 8912 Psg - Prog
» Applications » PSG-Programmer (CPC Amstrad International)
» Applications » PSG - Der Prüfsummengenerator 1 (CPC Magazin)
Je participe au site:
» Pour ce titre nous ne disposons de fichier executable sur CPC (Dump, Saisie du listing) , alors si vous avez ça dans vos cartons ou vous désirez usé vos petit doigts boudinés sur votre clavier faites le nous savoir.
» Vous avez des infos personnel ?
» Vous avez remarqué une erreur dans ce texte ?
» Aidez-nous à améliorer cette page : en nous contactant via le forum ou par email.

CPCrulez[Content Management System] v8.7-desktop/c
Page créée en 437 millisecondes et consultée 454 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.