MELODIOSO C64
Storia della generazione del suono all'epoca del Commodore 64
.:Introduzione
.:Generare suoni
.:Onde sonore
.:Suoni con il C64
.:Forme d'onda
.:Suoni con il C64

Centro del sistema sonoro del COMMODORE 64 era un integrato programmabile detto SID (Sound Interface Device, cioè dispositivo di interfaccia per il suono).
Come per il VIC II esisteva una zona di memoria riservata al SID, ove si potevano effettuare le POKE per ottenere i suoni desiderati. Tale zona iniziava alla locazione 54272 (D400H) ed era composta da 29 registri, cioè i byte in cui si effettuavano le POKE.
Il SID metteva a disposizione 3 diversi canali o VOCI per produrre suoni, che erano totalmente indipendenti tra loro. Per ognuna delle voci erano riservati 7 registri e gli ultimi 8 erano comuni alle 3 voci.
In particolare il registro numero 24 (il 25-esimo), cioè quello all'indirizzo 54296, controllava il volume di tutte le tre voci. Il valore assoluto del volume poteva variare tra 0 (bassissimo, non eliminava completamente il suono) e 15 (il massimo, molto spesso si poneva il volume a 15 e poi lo si regolava più finemente con il volume del proprio televisore) e la sua variazione si otteneva modificando i bit 0-3 del registro indicato e lasciando inalterati i restanti bit.

Se V è il volume e VP il valore precedentemente posto in questo byte:
POKE 54296,VP AND 240 + V
selezionava il volume desiderato.

Torniamo adesso un attimo alla caratteristica del suono chiamata frequenza.
L'orecchio umano riesce a percepire suoni la cui frequenza sia compresa tra 20 e 20000 Hz. Il SID era in grado di generare suoni di frequenza compresa tra 0 Hz e 4000 Hz (cioè poteva generare anche suoni sotto la soglia uditiva umana).
Per indicare al SID la frequenza del suono che si voleva ottenere si doveva trasformarla in un numero a 16 bit, compreso tra 0 e 65535. Erano i primi due registri di ogni voce che contenevano il byte basso e il byte alto di questo numero a 16 bit. Poichè il valore massimo della frequenza era 4000 Hz e i numeri rappresentabili con 16 bit sono da 0 a 65535, il numero da scrivere in memoria era:

N = Frequenza / (4000 / 65535) = Frequenza / 0.06097
(ovvero N = Frequenza * 16.3835)

il che vuol dire che la variazione di N di una unità equivaleva ad una variazione della frequenza di soli 0.06 Hz.
Per trovare gli 8 bit più significativi (byte alto) e i meno significativi (byte basso) del numero N:

NHI = INT(N / 256) e NLO = N - NHI * 256

Continua: Forme d'onda
By site.melodiosoc64