IL SID
Intervista a Bob Yannes, il progettista
del SID
Datasheet SID 6581(Acrobat
Reader .PDF 1,6Mb)
Il Sound Interface Device (SID) è uno dei circuiti integrati proprietari
presenti nel C64, ma ancora oggi molte persone non hanno una buona conoscenza del SID - il
significato dei suoi registri, come vengono generati i suoni, ecc. (anch'io rientravo in
questa categoria fino a poco fa).
Questa pagina è stata realizzata proprio per ovviare a questa situazione con una
panoramica generale del chip, in maniera comprensibile da quasi tutti.
Il SID è piuttosto semplice: ci sono un totale di tre voci ed anche tre filtri, dai quali
una voce può essere elaborata. E' possibile utilizzare il SID anche per leggere le
paddles (formate da un potenziometro).
Tutte e tre le voci hanno un numero di caratteristiche in comune. Possono essere
selezionati quattro tipi di forme d'onda: triangolare, a dente di sega, rettangolare e
rumore. La forma d'onda determina la "base suono" del suono.
E' possibile impostare più tipi di forme d'onda in una voce, con il risultato di ottenere
una mescolanza delle forme d'onda stesse, benchè il rumore non possa essere selezionato
da più voci contemporaneamente. La frequenza di ogni voce spazia da circa 0 Hz a 4000 Hz,
divisa in 65536 passi. Frequenze più alte possono essere generate tramite la modulazione
ad anello. In accordo con "Mapping the 64", la frequenza esatta può essere
calcolata come di seguito:
FREQUENZA = (VALORE REGISTRO * CLOCK)/16777216 Hz
Dove CLOCK=1022730 per i sistemi NTSC e CLOCK=985250 per i sistemi PAL.
Una delle più importanti caratteristiche del SID è l'inviluppo
ADSR, facile da comprendere. Come creare l'effetto inviluppo ADSRutilizzando un comune
stereo: prima di tutto portare il volume da dove si trova a zero (il mio volume
normalmente è a 11, quindi ho bisogno di un pò di tempo...). Adesso alzare fino ad
un certo livello, ad esempio 5. Appena arrivati a 5, portarlo di nuovo indietro, fino a 2.
Lasciarlo a 2 fino a quando non ti annoi (...) e poi riportalo a zero.
ADSR sta per Attack (attacco) Decay (decadimento) Sustain (sostegno) Release (rilascio).
La prima parte della prova precedente (volume da 0 a 5) è la fase di Attack (attacco):
cambiare il valore di attack significa cambiare la velocità con cui il voume arriva al
suo massimo. La seconda parte (volume che torna a 2) è la fase di Decay (decadimento):
cambiare il valore di decay significa cambiare la velocità con cui si passa dal valore
massimo al valore di sustain (nel nostro caso: 2). Cambiando il valore di sustain
(sostegno) si cambia il livello del volume di sostegno (nella prova precedente era 2): il
suono rimarrà a questo volume fino a quando non inizierà la fase di rilascio (Release).
Cambiando il valore di release cambierà la velocità con cui si passerà dal valore di
sustain a zero.
Sono disponibili due importanti caratteristiche per ogni
voce: la modulazione ad anello e la sincronizzazione. La modulazione ad anello produce
sovra-toni non armonici, ad esempio suoni simili ad una campana od un gong. La
sincronizzazione invece combina due forme d'onda tra di loro in modo speciale, e tende ad
amplificare le alte frequenze contenute nella forma d'onda.
Queste due caratteristiche modulano la voce con una "sotto" essa; ad esempio la
voce 1 è modulata con la voce 3, la voce 2 con la 1, ecc.
La modulazione ad anello può essere applicata solamente alla forma d'onda triangolare;
quindi se per la voce 1 è impostata la modulazione ad anello, la voce 1 dovrà essere
impostata con forma d'onda triangolare.
Sono disponibili anche tre filtri, che possono essere combinati. Questi filtri non sono
applicabili separatamente per ogni voce, ma possono essere utilizzati dalle tre voci
insieme. Qualsiasi suono generato dal SID conterrà un certo numero di frequenze, le quali
verranno trattate in maniera particolare dai filtri.
Per usare i filtri, deve essere prima selezionata la
frequenza di cutoff; tutte le componenti di frequenza sopra o sotto la frequenza di cutoff
verranno ridotte di volume -- più queste frequenze saranno lontane e più verranno
attenuate. I filtri passa-basso permetteranno alle frequenze inferiori a quella di cutoff
di passare, mentre tutte le altre verranno attenuate; analogamente i filtri passa-alto si
comportano in maniera opposta, permettendo il transito alle sole frequenze superiori a
quella di cutoff. Il filtro passa-banda invece fa passare solamente le frequenze
corrispondenti a quella di cutoff, attenuando tutte le altre. Quando i filtri passa-alto
& basso vengono attivati simultaneamente, il risultato viene chiamato filtro notch.
Ad esempio, prendiamo un'onda sonora a dente di sega della frequenza di 100Hz; quest'onda
contiene una serie di armoniche di frequenza superiore, in particolare a 200Hz, 300Hz,
400Hz, 500Hz, e così via. Se il filtro passa-basso è impostato e la frequenza di cutoff
è di 380Hz, le frequenze di armonica a 200 e 300Hz passeranno normalmente, mentre le
altre superiori verranno attenuate (quella a 500Hz sarà più attenuata di quella a
400Hz).
La risonanza è una caratteristica particolare che risalta le frequenze vicina a quella di cutoff, questo crea un particolare effetto tipo filtro tagliente. Un difetto dei filtri è che il loro effetto varia leggermente da SID a SID (chip diversi), quindi il suono filtrato di una macchina potrebbe essere leggermente differente di quello generato in un'altra macchina con le stesse impostazioni. Il gioco "Beach head" permette all'utente di cambiare le impostazioni dei filtri, in modo da compensare questo difetto. Tratto da "Mapping the 64" la frequenza di cutoff esatta è data da:
FREQUENZA = (VALORE REGISTRO * 5.8) + 30 Hz
Nota che la frequenza di cutoff ha una larghezza di soli 11 bits e quindi il valore è impostabile da 0 a 2047.
Un'altra impostazione è il bit 7 della locazione 54286 ($D418), che disconnette l'uscita della voce 3; questo permette il suo uso, specialmente nell'inviluppo del registro di output, senza sentirla. Le forme d'onda sono "l'impronta" del suono; il suono è il come due sensori ai lati della tua testa interpretano le variazioni di pressione nell'aria. Gli altoparlanti convertono una tensione elettrica (il voltaggio) in pressione, mentre i generatori di forme d'onda sono coloro che controllano il voltaggio.
La prima forma d'onda è quella triangolare; questa è la più vicina approssimazione del SID ad una pura forma d'onda sinusoidale. Essa parte da un certo valore, aumenta fino ad un livello massimo e poi decrementa fino ad un valore minimo, e così via. Matematicamente questa forma d'onda è espressa da:
sen(x) - sen(3x)/9 + sen(5x)/25 - sen(7x)/49 + ...
e quindi un'onda triangolare di frequenza fondamentale pari a 100Hz contiene armoniche di frequenze a 300Hz, 500Hz, 700Hz e così via. Nota che l'ampiezza di ogni armonica decrementa come il quadrato della frequenza.
La seconda forma d'onda è quella a dente di sega. Questa forma d'onda si incrementa fino ad un valore massimo come quella triangolare, ma poi decrementa rapidamente fino al minimo, assumendo la forma di metà di un triangolo. Questa onda è espressa da:
sen(x) + sen(2x)/2 + sen(3x)/3 + sen(4x)/4 + ...
Questa forma d'onda ha molte più armoniche alte rispetto all'onda triangolare -- sono presenti più armoniche, e la loro ampiezza decrementa meno rapidamente di quelle dell'onda triangolare (es. comparare sen(3x)/3 con sen(3x)/9).
La prossima forma d'onda è la quadra (o pulse). L'onda quadra assume un valore alto e basso; il SID permette di settare quanto far durare l'onda al livello alto e quanto al livello basso. Il rapporto del tempo del segnale che sta alto rispetto al tempo totale di un ciclo completo è chiamato duty-cycle; se il duty-cycle è di 1/2 avremo una forma d'onda quadra:
sen(x) + sen(3x)/3 + sen(5x)/5 + ...
Una cosa chiara per le forme d'onda pulse è che al variare del duty-cycle il contenuto di armoniche varia ampiamente. Le onde pulse possono avere una distribuzione di energia irregolare nelle varie armoniche, a differenza delle armoniche nell'onda a dente di sega, dove decrementano gradatamente.
L'ultima forma d'onda è quella del rumore (noise). Essa è
semplicemente una forma d'onda generata casualmente; i valori casuali escono dal
generatore in accordo con la frequenza impostata. Ovviamente il risultato non può essere
rappresentato da un'espressione d'armonica come le forme d'onda precedenti, ma lo spettro
di frequenza può essere descritto.
Il rumore bianco contiene tutte le frequenze in uguale proporzione. Quello generato dal
SID è noto come rumore blu: viene impostata una frequenza minima e tutte le frequenze al
di sopra di questa minima vengono generate con le stesse probabilità; in questo modo il
rumore del SID viene indirizzato verso le alte frequenze.
Alcune parole sulla modulazione ad anello e sulla sincronizzazione: la modulazione ad anello è la moltiplicazione di due segnali. Per vedere cosa succede, considera la moltiplicazione di due forme d'onda sinusoidali insieme:
sen(f1) * sen(f2) = sen(f1-f2+pi/2)/2 - sen(f1+f2+pi/2)/2
dove una abile ed elegante identità è usata. La cosa importante da notare è che due nuove frequenze vengono generate, f1+f2 e f1-f2, con una ampiezza più piccola e fase differente. Se si prova la modulazione ad anello tra due frequenze che differiscono di 1 o 2, risulteranno due onde le cui frequenze fondamentali saranno leggermente differenti, ottenendo un effetto simile a dei colpi. In breve, l'uso della modulazione ad anello crea un'intera gamma di nuove armoniche sommate e differenti, che danno l'effetto del suono di una campana. E' quindi chiaro che con questo sistema è possibile generare frequenze superiori a quella massima impostabile dal SID.