# General Instrument AY-3-8910

Il General Instrument AY-3-8910 è un generatore sonoro programmabile, o "PSG" (da Programmable Sound Generator) a 3 voci progettato da General Instrument. Fu anche prodotto sotto licenza da parte della Yamaha (con modifiche minori come per esempio il pin per selezionare il divisore di frequenza o una tabella di inviluppo del volume con risoluzione doppia ma con doppia frequenza) con il nome YM2149F.

## Storia

Dopo la separazione del 1987 di Microchip Technology da General Instrument, il chip fu prodotto per alcuni anni con il nuovo marchio "Microchip".
Ad oggi tali chip non vengono più prodotti, ma uno stock in esaurimento è ancora ottenibile per la riparazione delle macchine vintage. È anche stata scritta una descrizione equivalente in VHDL, che può essere usata in una FPGA per la ricreazione di macchine arcade e le altre sopra menzionate. Il codice sorgente VHDL è disponibile in Internet, e compilato riempie intorno al 10% di un FPGA Xilinx XC2S300.

## Descrizione

Inizialmente era stato pensato per essere usato con il loro microprocessore a 16 bit CP1610 o con uno dei microprocessori ad 8 bit della serie PIC1650. L'AY-3-8910 e le sue varianti divennero chip popolari in parecchi videogiochi arcade e furono usati, tra gli altri, dalle console di gioco Intellivision e Vectrex e negli home computer MSX, Atari ST, Amstrad CPC, Oric 1, Colour Genie, Elektor TV Games Computer e Sinclair ZX Spectrum 128/+2/+3 nonché nella scheda sonora Mockingboard per la famiglia degli Apple II.
L'AY-3-8910 era essenzialmente una macchina a stati, dove lo stato era registrato in una serie di quattordici registri ad 8-bit. Questi erano programmati con un bus ad 8-bit che veniva usato sia per l'indirizzamento che per i dati, selezionando una delle due modalità cambiando il valore su uno dei pin esterni. Per esempio, un tipico ciclo di settaggio avrebbe prima messo il bus nella "modalità indirizzamento" per selezionare un registro e poi nella "modalità dati" per impostare il contenuto di tale registro.
Sei registri controllano le tonalità prodotte nei tre canali principali. La lunghezza d'onda da generare è impostata in due registri ad otto bit dedicati ad ogni canale, anche se il valore è limitato a 12 bit per altre ragioni, per un totale di 4096 differenti tonalità. Un altro registro controlla il periodo di un generatore pseudocasuale di rumore, mentre un altro registro controlla il mixaggio di questo rumore nei tre canali principali. Tre registri addizionali controllavano il volume dei tre canali e permettevano di attivare o disattivare l'opzionale controllo sull'inviluppo sui canali. Gli ultimi tre registri controllano la temporizzazione del controllore dell'inviluppo ADSR, impostando la durata per ogni stadio del ciclo ADSR. Diversamente dalla maggior parte dei sistemi, l'8910 usa dei tempi prefissati per la fase di sustain e release, e un pattern di attack e decay ripetibile. Per esempio il sistema può ripetere il ciclo di AD del suono più e più volte, o in alternativa invertirlo, partendo al massimo volume e riducendolo al livello di sustain senza una qualsiasi fase di attack.
Ci sono due ulteriori registri che non compongono la macchina a stati del chip e che servono come registri per la memorizzazione di dati i cui valori sono messi in uscita sulle due porte di I/O ognuna ad 8 bit. Usare questi due registri per il trasferimento di dati I/O non ha alcun effetto sulla generazione sonora. Queste due porte non sono disponibili su tutti i modelli del chip. Il chip produce un risultato molto simile a quello del Texas Instruments SN76489, presente sul mercato nel medesimo periodo.

## Versioni

Il chip 8910 in silicio era venduto in tre differenti package.
L'AY-3-8910 ha due porte parallele ad 8-bit di I/O di tipo general-purpose, A e B, e queste sono disponibili nel package a 40-pin dello stesso nome.
L'AY-3-8912 è lo stesso chip in un package a 28-pin, con la porta parallela B semplicemente non connessa ai pin del chip. I package più piccoli risparmiano costi e spazio sulle schede. Proprio per questo l'8912 era ampiamente la versione più popolare.
L'AY-3-8913 è lo stesso chip in un package a 24-pin, con entrambe le porte parallele non connesse. La piccola riduzione nel numero totale dei pin rispetto all'8912, lo rende meno interessante.
Il chip Yamaha YM2149F SSG (da "Software-controlled Sound Generator") ha la stessa piedinatura dell'AY-3-8910, con la differenza che il piedino 26 può dimezzare la frequenza di clock principale se messo a massa. Se lasciato scollegato, cosa che succede quando viene usato per sostituire un chip AY-3-8910, una resistenza interna si occupa di tenere il segnale sul piedino alto, così che il segnale di clock principale non viene dimezzato.
Lo Yamaha Y3439-F.
L'AY-3-8914 ha la stessa piedinatura e lo stesso package a 40 pin dell'AY-3-8910, eccetto che i registri di controllo sul chip sono mischiati, e che l'"expected input" sul pin A9 può essere diverso. Tranne questo, è esattamente identico all'AY-3-8910. Era usato sull'Intellivision della Mattel.
L'AY-3-8930 in DIP40, anche conosciuto come AY8930, è una versione avanzata ma in larga parte retrocompatibile con lo AY-3-8910. La funzione del pin BC2 è stata cambiata (è ignorato e viene assunto che lo stato del piedino sia 0), altrimenti la funzione associata ai pin sarebbe la stessa dell'AY-3-8910. Questa variante del chip aggiunge una certa quantità di miglioramenti come per esempio, inviluppi separati per i tre canali (in contrasto all'inviluppo condiviso), duty-cycle variabili, più bit di precisione per la frequenza delle note, volume, e frequenza dell'inviluppo, e un generatore di rumori molto più configurabile. Era usato sulla scheda sonora per l'IBM-PC Covox Sound Master. Un'esigua parte dei giochi si avvantaggiarono del processore oltre le normali caratteristiche dell'AY-3-8910. Questo chip è stato probabilmente prodotto solo da Microchip Technology.

## Usi

Sebbene il chip non fosse stato progettato per gestire dati grezzi in formato PCM (sonoro digitale), l'effetto può essere simulato. Il chip usava una semplice funzione di mixaggio di tipo OR per combinare rumore e generazione di toni dei suoi tre canali e poteva essere forzato a produrre un'onda a livello costante (livello non nullo). Alterando il volume, questo livello dell'onda poteva essere plasmato per ottenere la forma d'onda desiderata. Ovviamente, questo comportava un utilizzo più intensivo della CPU rispetto all'utilizzo di chip progettati espressamente per questo scopo (come per esempio il MOS Technology 8364 "Paula" usato nel Commodore Amiga); cionodimeno questa tecnica era ampiamente usata sulle piattaforme come l'Atari ST per riprodurre musica campionata, e sull'Amstrad CPC o lo ZX Spectrum per riprodurre piccoli campioni audio in alcuni giochi.
Facendo la stessa cosa ma un minor numero di volte al secondo (nell'ordine di un centinaio di volte al secondo) si può rimpiazzare la limitata funzionalità di gestione dell'inviluppo (ottenendo qualsiasi inviluppo si possa pensare), e per ultimo, ma non per questo meno importante, lavorare con i tre canali in modo indipendente. Questa operazione utilizza una potenza di CPU trascurabile (questo nel caso ci sia qualche interrupt gestito da timer o che ci sia l'interrupt di vertical blank) e può quindi essere usata nei giochi.
Ora a sua volta, la funzionalità dell'inviluppo risulta inutile e può essere regolata a frequenze molto alte, generando in realtà una forma d'onda che non è l'usuale onda quadra. La granularità con la quale è possibile impostare tali alte frequenze è comunque grossolana, e così la musica composta per il chip generalmente impiega tale tecnica solo per una linea di basso (percussioni, basso elettrico etc...).
Un altro metodo è quello di impostare in modo fisso un canale a un livello alto, e poi usare il controllo del volume come un semplice convertitore digitale-analogico logaritmico a 4-bit. Questo risultava però in una qualità audio scarsa, perché aveva solo 16 livelli di uscita e questi erano spaziati tra di loro logaritmicamente.
Un metodo più sofisticato era l'uso di tutti i tre canali collegati insieme, e di sfruttare la non linearità del mixaggio per produrre parecchi livelli di uscita intermedi. Dopo aver modellato la non linearità dei tre canali, gli sviluppatori devono trovare i valori adeguati attraverso una ricerca esaustiva. Dopo averla realizzata, devono produrre una tabella di lookup (tabella di mappatura) da 8-bit (valore del campione audio) per ottenere 3x4-bit (3 canali x 4 bit di volume). Questo permetteva di riprodurre i campioni audio in modo ragionevole, sebbene non in modo ottimale come può essere ottenuto da un reale convertitore D/A ad 8-bit. Il problema di questa tecnica era che durante la riproduzione non si poteva cambiare il valore dei tre volumi in un'operazione singola. Questo implicava livelli d'uscita indesiderati tra due campioni successivi.
Nel 2006 due sviluppatori dell'MSX crearono un encoder (codificatore) avanzato che convertiva un file di tipo wave a un'ottimale codifica di transazioni dei canali PSG usando l'algoritmo di Viterbi. Riprodussero un file wave a 44.1 kHz su un MSX vecchio di 23 anni con un rapporto segnale/rumore addirittura migliore rispetto a quello di un convertitore DAC ad 8-bit. La ricerca secondo l'algoritmo di Viterbi è piuttosto CPU intensive (richiede parecchia potenza di calcolo) e quindi, anche se fosse stato teoricamente possibile usare questo metodo già negli anni 80, non c'era ancora un computer abbastanza potente per poter effettuare l'analisi richiesta.
    Voce principale: Chiptune
Il chip AY è stato usato da un certo numero di gruppi musicali, come gli AY Riders (si veda il riferimento esterno più sotto). Alcuni dei lavori di tali gruppi sono in stile con la musica dei giochi dei computer dell'epoca; altri invece sono composizioni musicali nel loro pieno diritto.
Sono stati scritti alcuni programmi specifici per scrivere musica per il chip AY, come per esempio Vortex Tracker.

## Chip correlati

Yamaha usava il nucleo dell'YM2149F per produrre un'intera famiglia di chip sonori che erano usati nei cellulari, negli home computer, nei sistemi di videogioco sia casalinghi che arcade, ecc. Per esempio lo YM-2203 (conosciuto anche come OPN) è un YM2149F con in più una sintesi FM. Questo accade anche nei successori più avanzati di questo chip: lo YM2608 (conosciuto anche come OPNA) che teneva immutate tutte le precedenti caratteristiche e che si sviluppava ampiamente a partire da queste; lo YM2612 (conosciuto come OPN2) che era una versione ridotta dell'YM2608 da cui sono state rimosse molte caratteristiche tra cui i canali sonori dell'YM2149F e le porte di I/O; lo YM2610 (OPNB) che aggiungeva altre caratteristiche e manteneva il sonoro dell'YM2149F ma non le porte di I/O.