Ciao Marcus,
immagino tu ti riferisca all'uso del test bit in combinazione con l'onda di rumore bianco.
L'argomento é piuttosto complesso, spero di spiegarmi decentemente e soprattutto di non dire fesserie!! :D
Per emettere suoni il SID utilizza un accumulatore a 24 bit al quale, ad ogni ciclo, viene sommata una frequenza di 12 bit (quella che si può impostare con i registri visibili esternamente).
Acc: 24 bit
Freq: 12 bit
Acc = Acc + Freq
- Nella forma d'onda triangolare l'output é dato dai 12 bit più significativi dell'accumulatore stesso;
output_triangolare = Acc >> 12
- Nella forma d'onda dente di sega viene analizzato il bit più significativo dell'accumulatore: se é uguale si prendono gli 11 bit seguenti così come sono, se é a 1 si prendono invertiti;
se Acc & 0x800000 = 0 output_dentedisega = Acc >> 11
altrimenti output_dentedisega = not (Acc >> 11)
- Nella forma d'onda quadra c'é un operazione di confronto sui 12 bit più significativi dell'accumulatore e l'output può essere 000 o FFF in base all'esito.
se Acc > compare output_quadra = $FFF
altrimenti output_quadra = 0
- Nella forma d'onda noise viene usato uno shift register da 23 bit e vengono caricati 8 bit come nello schema qua sotto. Il shift register viene spostato a sinistra di un bit ogni qualvolta il bit 19 dell'accumulatore viene portato a 1: questo permette di legare comunque la generazione della forma d'onda alla frequenza scelta.
I valori instantanei delle forme d'onda sono numeri a 12 bit: nel caso di triangolare, e quadrata la dimensione é già esatta; nel caso della forma d'onda dente si sega gli 11 bit vengono spostati a sinistra di un bit; nel caso della noise gli 8 bit vengono spostati a sinistra di 4 posizioni.
///
// ----------------------->---------------------
// | |
// ----EOR---- |
// | | |
// 2 2 2 1 1 1 1 1 1 1 1 1 1 |
// Register bits: 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 <---
// | | | | | | | |
// OSC3 bits : 7 6 5 4 3 2 1 0
//
Pescato dai sorgenti di resid
SounDemoN si é accorto che manipolando il bit di test possono accadere due cose:
- se il test bit viene portato a 0 lo shift register viene ruotato di 1 bit a sinistra
- se il test bit viene portato a 1 il bit 19 dello shift register viene invertito ed il risultato inserito nel bit 1 del registro stesso
Oltre a questo già sapeva che impostando più forme d'onda contemporaneamente vengono resettati i bit 22, 20, 16, 13, 11, 7, 4 e 2 dello shift register.
Combinando opportunamente queste tre ultime affermazioni é possibile creare delle forme d'onda "personalizzate".
Ciò significa di fatto "bombardare" il registro forma d'onda di una specifica voce del sid, con valori che modificano il test bit e/o le forme d'onda selezionate, con lo scopo di ottenere un valore di output specifico.
Spero di essere stato chiaro...
Ti consiglio di dare comunque un'occhiata ai link che ti ha proposto iAN.