# General Instrument AY-3-8910

El AY-3-8910 es un PSG (del inglés programmable sound generator) de 3 voces diseñado por General Instrument en 1978, inicialmente para usarlo con su CPU de 16 bits CP1610 o uno de los ordenadores de 8 bits basados en PIC1650. El 8910 y sus variantes fueron muy populares en los Arcades, y fueron utilizados, entre otros, en las videoconsolas Intellivision y Vectrex y en los ordenadores domésticos Timex Sinclair 2068, Timex Computer 2068, Spectravideo SVI-328, MSX, Atari ST, Amstrad CPC, Oric 1, Oric Atmos y Sinclair ZX Spectrum 128/+2/+3, y en la tarjeta de sonido Mockingboard para el Apple II. Fue producido bajo licencia por Yamaha como el YM2149.
Tenía un rendimiento muy similar al del Texas Instruments SN76489 y ambos fueron comercializados en el mismo período.
Estos chips ya no se fabrican, pero existe un stock menguante para la reparación de viejas máquinas. Una descripción VHDL ha sido escrita para utilizarla en recreaciones basadas en FPGA de Arcades y las máquinas citadas. El código fuente VHDL está disponible en Internet, y compilado ocupa casi un 10% de una FPGA Xilinx XC2S300.

## Descripción

El 8910 es esencialmente una máquina de estado finito, con el estado cargado en una serie de 16 registros de 8 bits . Estos son programados sobre un bus de 8 bits que se utilizan para direccionamiento y datos a través de los pines externos. Por ejemplo, un ciclo típico pondría el bus en modo direccionamiento para seleccionar un registro, y entonces cambia al modo datos para fijar el contenido.
Seis registros controlan los tonos producidos en los tres canales primarios. El tono a generar se almacena en dos registros de 8 bits dedicados a cada canal, pero el valor está limitado a 12 bits por otras razones, con un total de 4096 tonos diferentes. Otro registro controla el periodo de un pseudoaleatorio generador de ruido blanco, mientras que otro controla la mezcla de ese ruido en los tres canales de sonido.
Tres registros adicionales controlan el volumen de los canales, al igual que activan y desactivan el envolvente. Finalmente los tres últimos registros controlan los tiempos del control envolvente ADSR (Attack, Decay, Sustain, Release o Ataque, Decaimiento, Sostenido y Relajación), fijando la duración de cada estado en el ciclo. A diferencia de otros sistemas, el 8910 usa tiempos fijos para el Sostenido y la Relajación, y un patrón repetible de Ataque y Decaimiento. Por ejemplo, el sistema puede repetir el ciclo AD del sonido repetidamente, o alternativamente invertirlo, comenzando ruidosamente y reduciendo al nivel de Sostenido sin fase de Ataque.

## Variantes del chip

El chip 8910 se comercializó en tres encapsulados diferentes.
El AY-3-8910 tiene dos puertos de entrada/salida de 8 bits de propósito general, A y B, y está disponible en encapsulado de 40 pines con el mismo nombre.
El AY-3-8912 es el mismo chip en un encapsulado de 28 pines, pero con el puerto paralelo B no conectado a ningún pin. Encapsulados más pequeños ahorran costes y espacio en la placa madre. El 8912 es la versión más popular.
El AY-3-8913 es el mismo chip en un encapsulado de 24 pines, con ambos puertos paralelos desconectados. La pequeña reducción en el número de pines sobre el 8912 lo hacen menos interesante.
El chip YM2149 tiene los mismos pines que el AY-3-8910, con la diferencia de que el pin 26 puede dividir el reloj si el estado es bajo. Si permanece desconectado, puede reemplazar al chip AY-3-8910, internamente es puesto alto y no divide el reloj en dos, justo como el AY-3-8910.

## Usos creativos

Aunque el chip no fue diseñado para manejar datos crudos PCM (Sampler digital), el efecto puede simularse. El chip usa una simple función de mezcla basada en OR para combinar ruido y tono en sus tres canales y se podía persuadir para producir una onda de nivel no cero. Alterando el volumen esta onda de nivel puede disfrazase de onda de formato. Obviamente, esto requiere más uso de CPU que un chip diseñado para este propósito (como el chip de sonido 8364 Paula del Commodore Amiga), pero era sin embargo una técnica ampliamente utilizada en plataformas tales como el Atari ST para reproducir música sampleada, y en el Amstrad CPC para reproducir samples cortos en varios videojuegos.
Hacer la misma cosa varias veces por segundo (del orden de cientos por segundo) puede reemplazar la limitada funcionalidad envolvente (cualquier envolvente que se pueda pensar), y al final trabajar con cada uno de los tres canales individualmente. Esto toma recursos insignificantes de la CPU (proporcionada cuando hay una interrupción del contador de tiempo o del sincronismo vertical) y se puede utilizar en juegos.
Alternativamente, la funcionalidad ahora inútil del envolvente se puede fijar a una alta frecuencia, generando realmente una forma de onda que no sea el la onda cuadrada habitual. La granularidad con que la alta frecuencia se puede fijar sin embargo es baja, y así la música compuesta para el chip generalmente usa esta técnica para las líneas de bajos.
Otro método es poner una salida de canal a nivel alto, usar entonces el control de volumen como un simple DAC logarítmico de 4 bits. Esto produce mala calidad porque sólo tiene 16 niveles de salida y están espaciadas logarítmicamente.
El método más sofisticado es usar los tres canales unidos, y explotar la no linealidad de la mezcla para producir más niveles intermedios de salida. La no linealidad no tiene actualmente ningún modelo matemático adecuado, y por ello los desarrolladores deben de encontrar valores adecuados para experimentar. Habiendo hecho eso, se produce una tabla de búsqueda de 8 bits a 3x4 bits. Esto permite sampleos de audio de 8 bits bastante adecuados, aunque no tanto como la de un verdadero convertidor digital-analógico de 8 bits.
Alguna gente, especialmente usuarios del ZX Spectrum, usan el chip AY para crear música. Ver los enlaces externos de Chiptune y los AY Riders para ampliar la información.

## Desarrollos posteriores

Yamaha usó el núcleo YM-2149 para producir una familia completa de chips de sonido que fueron utilizados en teléfonos móviles, videojuegos, etc. Por ejemplo, el YM-2203 (también conocido como OPN) es un YM-2149 con FM. No obstante, su sucesor, el YM-2612 (también conocido como OPN2) hereda sólo la parte FM del YM-2203.