Analogamente ai tradizionali dischi in vinile, i CD-ROM contengono una singola traccia a spirale che parte dal
centro e si sviluppa verso l'esterno. Questa traccia, lunga quasi cinque chilometri e mezzo, è divisa in
blocchi di uguale lunghezza chiamati settori.
I dati sono memorizzati mediante l'alternarsi di piccole depressioni di lunghezza variabile (pits) e di aree piatte
(lands). La testina di lettura è costituita da un piccolo laser (Light Amplification by Stimulated Emission
of Radiation) a bassa potenza e da un fotodiodo: quando il raggio laser colpisce una zona piatta viene riflesso
e per mezzo di uno specchio colpisce il fotodiodo, mentre quando viene colpita una depressione la luce del laser
viene dispersa ed il fotodiodo non riceve alcun segnale (vedi figura).
Contrariamente a quanto sarebbe lecito aspettarsi, lands e pits non rappresentano le cifre binarie 0 e 1. Se
così fosse, un singolo bit occuperebbe sulla traccia uno spazio pari a circa 300 nm: il CD dovrebbe allora
disporre di un clock accuratissimo che faccia corrispondere ad ogni tick un intervallo di 300 nm alla velocità
di rotazione del disco (che oltretutto è variabile). Con le odierne tecnologie un simile dispositivo risulta
praticamente inattuabile.
Il metodo usato si basa invece sull'alternarsi di lands e pits. Quando il CD rileva una transizione da land a pit
o viceversa, fa partire un timer: alla successiva transizione il valore del timer è proporzionale al numero
di bit rappresentato dal pit o land in questione. Ogni transizione da land a pit corrisponde ad un 1 (uno), altrimenti
si ha uno 0 (zero).
Per non incorrere nel problema di partenza, le transizioni devono essere frequenti, in modo da poter resettare
il timer. In pratica la minima lunghezza di un pit o di un land è di circa 900 nm (3 bit) e la massima circa
3300 nm (11 bit). A causa di questa limitazione non si possono avere due 1 consecutivi ed il numero di zeri tra
due bit a 1 può andare da un minimo di due ad un massimo di dieci.
Purtroppo già una semplice coppia di byte può assumere moltissimi valori che violano la regola precedente,
perciò bisogna adottare una codifica diversa da quella a cui siamo abituati. La tecnica usata nei CD si
chiama EFM (Eight to Fourteen Modulation) e fa corrispondere ad ognuno dei 256 possibili valori di un byte un codice
di 14 bit che sia in accordo con le limitazioni sopra descritte. Inoltre tra due codici consecutivi si trovano
tre bit di separazione che hanno lo scopo di limitare la lunghezza di una eventuale sequenza di bit uguali che
si può creare accostando due codici di 14 bit.
Memorizzati in questa forma, i dati vengono divisi in settori da 2352 byte l'uno. Un settore contiene 12 byte di
dati per la sincronizzazione, un header di 4 byte, 2048 byte di dati con correzione d'errore e 288 byte di codici
per correggere eventuali errori (se i dati non sono sensibili ad errori occasionali, per es. audio digitalizzato
o animazioni video, si può fare a meno della correzione d'errore e aumentare così la capacità
del CD). Dato che i settori hanno tutti uguale lunghezza e che la testina deve poter leggere i dati sempre alla
stessa velocità (CLV, Constant Linear Velocity, contrapposto al metodo usato negli hard-disk, Constant Angular
Velocity o CAV), la velocità del disco varia da circa 500 giri/min per i settori più interni a circa
200 giri/min per quelli più esterni. Il dover cambiare la velocità di rotazione del disco costituisce
una delle principali cause della lentezza del tempo di accesso nei CD.
Per quanto riguarda la capacità, nonostante il grande numero di bit "sprecati" per l'EFM e la
correzione di errore (e il meglio deve ancora venire nel prossimo paragrafo), le cose si fanno decisamente interessanti.
Un CD può contenere infatti ben 333.000 settori, pari a 74 minuti alla velocità standard di lettura
(75 settori al secondo). Dato che gli ultimi 14 minuti si trovano sulla parte più esterna del disco, che
è la più difficile da incidere, non è raro imbattersi in CD che contengono "solo"
270.000 settori (60 minuti). In soldoni, come direbbe un noto magistrato, 333.000 settori corrispondono a ben 650
MB di dati (742 MB senza correzione d'errore).
Visto che i CD hanno un transfer-rate standard di 150 K/sec e che i CD audio sono digitalizzati con 16 bit per
canale a 44.1 KHz, per suonare un CD abbiamo bisogno di trasferire ben 172 K/sec. Sappiamo già che la velocità
di lettura è di 75 settori/sec e che un settore contiene 2352 byte, e per l'appunto 75*2352 è uguale
a 172 K. Sembrerebbe di dover fare a meno dei byte dedicati alla correzione d'errore, ma per fortuna non è
così.
I dati memorizzati su CD sono innanzitutti divisi in pacchetti da 24 byte chiamati frame. Ogni frame è organizzato
come segue:
Descrizione Lunghezza (bit) pattern di sincronizzazione 24 + 3 control byte 14 + 3 primo pacchetto dati 12 * (14 + 3) = 204 correzione di errore 4 * (14 + 3) = 68 secondo pacchetto dati 12 * (14 + 3) = 204 correzione di errore 4 * (14 + 3) = 68 ---------------------- Totale: 588 bit
Dunque per memorizzare 192 bit ne vengono impiegati 588! Il metodo impiegato per la correzione degli errori prende
il nome di Cross Interleave Reed-Solomon Coding (CIRC). L'efficacia di questo sistema è notevole: per ogni
frame i 24 byte di dati vengono inviati al primo decodificatore Reed-Solomon, che usando i primi 4 byte extra è
capace di individuare e correggere un errore ogni 32 byte. Successivamente i 24 byte di dati e i rimanenti 4 byte
extra vengono spediti, a differenti intervalli, al secondo decodificatore R-S. L'interleaving dei byte permette
di scomporre errori di tipo burst, cioè su molti byte consecutivi, in tanti errori che coinvolgono un solo
byte per ogni blocco. Se ci sono errori il secondo decoder R-S usa gli ultimi 4 byte per aggiustare i 24 byte di
dati. Dopo essere stati deinterallacciati per ripristinare l'ordine di partenza i dati possono essere finalmente
inviati in uscita.
Le specifiche per i CD permettono di avere fino a 220 errori al secondo. L'algoritmo CIRC riesce quasi sempre a
correggere perfettamente questi errori ed a fornire dati corretti. Errori estesi fino a 450 byte consecutivi, per
merito dell'interleaving, vengono corretti senza perdita di informazione. E' comunque possibile che qualcosa sfugga,
ma di solito si tratta di piccoli "click" che all'ascolto vengono a malapena percepiti.
Possiamo adesso precisare le affermazioni del paragrafo precedente: un settore contiene 98 frame, per un totale
di 98*24 = 2352 byte corretti dal CIRC.
Dato che nei CD-ROM l'integrità dei dati è più importante che nei CD audio, di questi 2352
byte gli ultimi 288 sono riservati per un ulteriore livello di correzione di errore. Abbiamo infatti 4 byte di
EDC (Error Detecting Code) che contengono il CRC dei dati precedenti e 276 byte di ECC (Error Correcting Code)
che ultilizzando ancora la tecnica dell'interleaving ed i codici Reed-Solomon servono a correggere gli errori sfuggiti
ai precedenti controlli. La probabilità che rimangano errori non corretti o non rilevati diventa a questo
punto bassissima.
Ogni settore ha un mode byte che specifica il tipo di dati in esso contenuti:
Modo Contenuto 0 Tutti i byte valgono zero 1 2048 byte di dati più EDC/ECC 2 CD audio o altri tipi di dati
Quindi uno stesso CD può contenere sia dati che audio (eventualmente i dati devono venire prima).
Lo standard per i CD-ROM è stato definito da un gruppo di aziende conosciuto col nome di High Sierra
Group. Il formato proposto da questo gruppo si è infatti diffuso rapidamente e nel 1988 è stato accolto
dall'ISO e integrato nel documento siglato ISO-9660. Conosciuto anche come "Yellow Book", permette a
diversi sistemi operativi di leggere lo stesso CD-ROM fornendo le specifiche del file-system e dell'organizzazione
dei dati su CD.
In seguito questo standard è stato esteso per venire incontro alle esigenze delle applicazioni multimediali
più avanzate: il CD-ROM XA (Extended Architecture) permette l'interleaving di dati e audio, quest'ultimo
compresso con la tecnica ADPCM (Adaptive Delta Pulse Code Modulation) ed esteso ad un massimo di 16 canali.
Per i CD-DA (Digital Audio) invece, lo standard prende il nome di "Red Book". L'audio viene campionato
a 16 bit con una frequenza di 44.1 KHz, il che permette una gamma dinamica di circa 96 dB. Ce ne occuperemo meglio
il prossimo mese.
Molto simile al CD XA è il CD-I (Interactive) o "Green Book" sviluppato dalla Philips nel 1986.
Diretto concorrente del CDTV (Commodore Dynamic Total Vision) viene implementato come sistema stand-alone basato
su una CPU Motorola di classe 680x0 e consente di immagazzinare dati, immagini, video (MPEG) e audio.
Infine abbiamo il Photo CD della Kodak che fa uso di dischi riscrivibili per comprimere e memorizzare fino ad un
centinaio di fotografie sullo stesso disco. Essendo basato sulla stessa struttura del CD XA e del CD-I, i lettori
CD che supportano questi standard possono leggere anche i Photo CD facendo uso di un appropriato software. Il Photo
CD, in ogni caso, è disponibile anche in versione stand-alone collegabile ad un normale televisore.
Una delle possibilità più interessanti messe a disposizione dai lettori di CD-ROM su PC è
senz'altro quella di poter riprodurre anche i normali CD audio, supportata dalla maggior parte dei drive attualmente
in circolazione. Il nostro scopo è appunto quello di integrare questa capacità nelle nostre applicazioni.
Per vedere un CD-ROM come drive DOS c'è bisogno di due driver: il primo cambia a seconda del modello e della
marca del CD-ROM istallato, il secondo si chiama di solito MSCDEX e sfrutta le API messe a disposizione dal primo
driver per integrare il disco come unità DOS. Per risparmiare spazio, MSCDEX non supporta esplicitamente
le funzioni audio del drive, perciò un'applicazione deve parlare con il driver a basso livello. La libreria
CDA, allegata a questo numero della rivista insieme ad un CD-player che ne fa uso, permette a programmi scritti
in linguaggi ad alto livello di utilizzare in modo naturale il CD-ROM come lettore CD-DA senza doversi preoccupare
di cosa avvenga "dietro le quinte".
Appuntamento dunque al prossimo mese, quando esamineremo in dettaglio il funzionamento della nostra libreria.
Nota: questo articolo è stato pubblicato su SBDI (Sound Blaster Digest Italia, una rivista elettronica) ma non ricordo quando. Il file porta la data di Marzo 1994.
Copyright (c) 2005 Alessandro Scotti. All rights reserved.
Home :: Computer Programming |