Da DVG - Il Dizionario dei Videogiochi
L'Original Chip Set (OCS) era il chipset usato nei primi Commodore Amiga e ne definiva le capacità grafiche e sonore. Fu seguito prima dall'Enhanced Chip Set (ECS) e successivamente dall'Advanced Graphics Architecture (AGA), nettamente migliorato.
Il chipset originale fu usato nell'Amiga 1000, Amiga 2000 e Amiga 500.
Il chipset che diede all'Amiga le sue peculiari caratteristiche grafiche consiste di tre chip “custom” principali: Agnus, Denise, e Paula. Sia l'OCS, sia l'ECS vennero prodotti con tecnologia in logica NMOS della controllata azienda prodruttrice di chip MOS Technology. Tutti e tre i chip custom erano prodotti in package DIP a 48 piedini; le ultime versioni di Agnus, note come Fat Agnus, vennero prodotte in package PLCC a 84 piedini.
Il chip centrale del progetto è Agnus, che controlla tutti gli accessi alla memoria chip effettuati sia dal microprocessore centrale 68000, sia dagli altri chip custom, usando un complicato sistema di priorità. Agnus contiene al suo interno anche il blitter e il copper. Il primo Agnus e il Fat Agnus possono indirizzare 512 KiB di RAM. Le versioni più recenti del Fat Agnus, note come Fatter Agnus, possono indirizzare 1 MiB di RAM.
Il processore video principale si chiama Denise. Senza overscan, lo schermo grafico dell'Amiga è ampio 320 o 640 pixel e alto 200 (NTSC) o 256 (PAL) pixels. Denise supporta anche l'interlacciamento, che raddoppia la risoluzione verticale. Denise usa grafica bitmap planare, che divide i singoli bit per pixel in aree di memoria separate, dette bitplane (piani di bit). Nel funzionamento normale, Denise supporta da 1 a 5 bitplane, ovvero da 2 a 32 colori unici, selezionati da una tavolozza di 4.096 colori. Sono disponibili anche due modi video speciali, realizzati grazie ad un sesto bitplane: il modo Extra Halfbrite e il modo Hold And Modify. Denise supporta anche otto sprite, lo scorrimento e il modo “dual playfield”. Infine, gestisce gli ingressi per il mouse e per il joystick digitale.
Paula è principalmente il chip sonoro, con 4 canali hardware indipendenti in PCM ad 8 bit, ognuno dei quali supporta 65 livelli di volume e una frequenza di campionamento fra circa 20 Hz e 29 kHz. Paula gestisce anche le interruzioni e varie funzioni di I/O, compreso il floppy disk drive, la porta seriale e i joystick analogici.
Il chip Agnus coordina il funzionamento dell'intero chipset. Tutte le operazioni sono sincronizzate con il pennello video, compreso l'accesso alla RAM dedicata al chipset, detta per questo chip RAM. Il microprocessore centrale 68000 e gli altri membri del chipset si contendono l'accesso alla RAM tramite Agnus. In termini di architettura degli elaboratori, si parla di accesso diretto in memoria (in inglese: Direct Memory Address, DMA), e Agnus è il DMA Controller (DMAC).
Agnus gestisce 25 canali DMA per il chipset con una complessa politica basata su priorità. Poiché il processore 68000 normalmente accede alla memoria ogni due cicli di clock della RAM, Agnus di preferenza effettua gli accessi per il chipset solo durante i cicli dispari, lasciando quelli pari alla CPU, che in questo modo non viene rallentata. Questa pacifica coesistenza viene però messa in crisi quando si scelgono modalità video con più di 4 bitplane in bassa risoluzione (o 2 bitplane in alta risoluzione): in questi casi Agnus comincia ad accedere alla RAM anche nei cicli pari, rallentando la CPU. Anche il blitter, se attivato, può sottrarre cicli alla CPU, specie se si imposta il bit “Blitter Nasty”: in questo caso Agnus può negare alla CPU ogni ciclo pari, se richiesto dal blitter.
Le temporizzazioni di Agnus si misurano in “colour clock” di 280 ns, equivalenti a due pixel in bassa risoluzione (140ns) e a quattro pixel in alta risoluzione (70ns). Come per Denise, queste temporizzazioni erano progettate per gli schermi delle TV domestiche, e possono essere sincronizzate ad una sorgente esterna di clock.
Il blitter è un sub-componente di Agnus. “Blit” è l'abbreviazione di “block image transfer” (trasferimento di immagini a blocchi) o bit blit. Il blitter è una unità ad alto parallelismo in grado di effettuare traferimento di blocchi di memoria e operazioni logiche. Ha tre modi di funzionamento: copia di blocchi di memoria, riempimento di poligoni e tracciamento di linee.
Il blitter consente la copia rapida di memoria video, lasciando libera la CPU per altre operazioni. Il blitter era usato principalmente per disegnare sullo schermo immagini grafiche dette “bob”, abbreviazione di “blitter object”.
In modalità di copia il blitter prende da zero a tre sorgenti in memoria, dette A, B e C, ed esegue su di esse una funzione booleana programmabile. Il risultato viene (eventualmente) scritto in un'area di destinazione, D. Queste aree possono sovrapporsi, e tutti i blocchi devono essere allineati a 16 bit. Il blitter può operare sui blocchi sia dall'inizio alla fine, in modalità detta “ascendente”, sia al contrario, in modalità discendente.
I blocchi sono “rettangolari”; hanno una larghezza in multipli di 16 bit, un'altezza misurata in linee, e un passo, ovvero lo scostamento fra la fine di una linea e la successiva. Questo consente al blitter di operare in qualsivoglia risoluzione video. Durante la copia viene eseguita automaticamente un'operazione logica sui singoli pixel, descritta tramite mintermini. Operazioni tipiche sono la copia (D = A), o l'applicazione di una maschera di pixel attorno agli oggetti blittati (D = A AND C). La copia può anche far scorrere (shiftare) ogni linea di fino a 15 pixel, la qual cosa consente al blitter di disegnare a coordinate orizzontali che non siano necessariamente multiple di 16 pixel.
In modalità di tracciamento linee, il blitter disegna linee spesse un pixel usando l'algoritmo di Bresenham. Può anche applicare alla linea un pattern di 16 bit. Nella modalità di riempimento il blitter opera per linee orizzontali, riempendo intervalli orizzontali compresi fra due pixel accesi. Per ogni linea, legge ogni a turno ogni pixel da sinistra a destra; quando legge un pixel a uno, inizia a riempire tutti i bit che seguono fino al successivo bit a uno o alla fine della linea. Insieme, questi modi consentono al blitter di disegnare poligoni singoli monocolori, anche se molto lentamente al confronto con i moderni chipset grafici 3D o anche con la stessa CPU di un Amiga accelerato.
Il copper è un altro subcomponente di Agnus. Il nome è un'abbreviazione di “co-processor”. Il copper è una macchina a stati finiti programmabile che esegue un flusso di istruzioni sincronizzato con l'hardware video.
Quando è in funzione, il copper ha tre stati: lettura di un'istruzione, esecuzione, o attesa che il pennello video raggiunga una specifica posizione dello schermo. Il copper esegue un programma (detto copper list) in parallelo con la CPU principale, sincronizzato al pennello video e può essere usato per effettuare varie operazioni che richiedono sincronizzazione con il video. Più comunemente viene usato per controllare l'uscita video, ma può scrivere in qualsiasi registro del chipset e pertanto può controllare anche l'audio o mandare un'interruzione alla CPU.
La copper list ha tre tipi di istruzione, ognuna delle quali è composta da una coppia di parole di 16 bit, per un totale di quattro byte.
La lunghezza di una copper list è limitata dal tempo d'esecuzione. Il copper riavvia l'esecuzione della copper list all'inizio di ogni quadro video. Non esiste una istruzione “end” esplicita, al suo posto viene usata l'istruzione WAIT per attendere una posizione video irraggiungibile.
Denise genera le temporizzazioni video, ma può anche sincronizzarsi ad un segnale video esterno. Denise è programmato per prelevare dati da un certo numero di bitplane (piani di bit) e tradurli in indici di una tavolozza di colori. Il numero di bitplane è selezionabile tra 1 e 5, sicché se non si ha bisogno di 32 colori, se ne possono usare solo 2, 4, 8 o 16. Il numero di bitplane (e la risoluzione) possono essere cambiati al volo, per esempio dal copper. Questo consente un uso molto parsimonioso della RAM.
È disponibile anche un sesto bitplane, che può essere usato in tre modi grafici speciali:
Ci sono due risoluzioni grafiche orizzontali: la bassa risoluzione (lowres), con pixel di 140 ns, e l'alta risoluzione (hires), con pixel di 70 ns. Questi corrispondono rispettivamente a schermi di 320 e 640 pixel di larghezza, senza usare overscan. Denise supporta overscan molto ampi, non è necessario avere un bordo attorno alla grafica come invece accadeva in altri sistemi. La risoluzione verticale, senza overscan, è di 200 pixel per un Amiga NTSC a 60 Hz, e di 256 pixel per un Amiga PAL a 50 Hz. La risoluzione verticale può essere raddoppiata tramite interlacciamento.
Denise può anche visualizzare 8 sprite sulla grafica, e individuare le collisioni tra gli sprite e lo sfondo o tra gli sprite stessi. Questi sprite hanno 3 colori visibili e uno trasparente, ma è possibile legare insieme due sprite per ottenere uno sprite unico da 15 colori.
L'uscita video di Denise è RGB digitale a 12 bit. La conversione in RGB analogico viene effettuata da un convertitore digitale-analogico chiamato Vidiot. Sull'Amiga 2000, l'uscita RGB digitale è disponibile in uno slot video apposito.
Normalmente, l'Amiga genera le sue temporizzazioni autonomamente, ma il chipset è in grado di sincronizzarsi ad un segnale esterno, così da poter effettuare un genlock con un dispositivo video esterno. Tramite uno dei segnali in uscita sul connettore video, Denise è inoltre in grado di indicare se il colore attualmente in uscita è quello di sfondo o meno, semplificando notevolmente la costruzione di hardware per sovrapporre il segnale video dell'Amiga ad un segnale esterno. Questo rese l'Amiga particolarmente interessante nell'uso come generatore di caratteri per la titolazione di video e le trasmissioni televisive, in quanto risparmiava l'uso di costose unità AB roll e chromakey. Il supporto di overscan, interlacciamento e genlock, unito al fatto che le temporizzazioni dello schermo fossero molto vicine agli standard di trasmissione video (NTSC o PAL), fecero dell'Amiga il computer di riferimento per applicazioni video a basso costo. Molti studi televisivi lo utilizzzarono per l'acquisizione video (o frame-grabbing), sottotitolazione e notizie video interattive.
Il chip Paula è usato principalmente per produrre segnali audio. Il chip fornisce 4 canali audio PCM a 8 bit in DMA. Due dei canali sonori sono miscelati nel canale audio sinistro, gli altri due nel destro. Il solo formato supportato per i campioni è lineare ad 8 bit in complemento a due. Ogni canale audio ha volume e frequenza di campionamento indipendenti. Internamente, l'hardware audio è implementato come quattro macchine a stati, con otto stati ciascuna.
È anche possibile usare uno dei canali di ogni coppia per modulare il periodo o l'ampiezza dell'altro. Questa caratteristica è stata usata raramente nell'Amiga, ma poteva essere usata per simulare gli effetti tremolo e vibrato.
Con alcuni trucchi di programmazione è possibile riprodurre audio a 14 bit, combinando due canali i cui volumi siano stati opportunamente settati. Si possono così ottenere due canali di 14 bit invece di 4 canali ad 8 bit.
In uno schermo normale, NTSC o PAL, la riproduzione dell'audio è limitata ad una frequenza massima di campionamento di 28867 Hz, per via della quantità di dati che possono essere letti dalla memoria nel tempo riservato a Paula. Come spiegato nella parte dedicata ad Agnus, gli accessi in memoria sono prioritizzati e solo alcuni degli slot per gli accessi in memoria sono disponibili per i canali audio di Paula. Questo limite può essere superato nell'Enhanced Chip Set usando un modo video con una frequenza più alta, o usando direttamente la CPU per pilotare l'uscita audio.
L'Amiga contiene un filtro analogico passa-basso (reconstruction filter) esterno a Paula. Si tratta di un filtro passa-basso Butterworth da 12 dB/oct con frequenza di taglio di circa 3.3 KHz. Il filtro può essere applicato solo globalmente a tutti e quattro i canali. Nei modelli successivi all'Amiga 1000, la luminosità del LED di alimentazione venne usata per indicare lo stato del filtro. Il filtro è attivo quando il LED è acceso normalmente; è disattivato quando il LED è acceso debolmente (nei primi modelli di Amiga 500 il LED si spegneva completamente). I modelli precedenti l'Amiga 1200 hanno anche un filtro statico passa-basso costantemente abilitato, indipendentemente dallo stato dell'opzionale “filtro del LED”. Questo filtro è un passa-basso da 6 dB/oct con frequenza di taglio a 4,5 KHz o 5 KHz.
Il controller del floppy è insolitamente versatile. Può leggere e scrivere dati usando le codifiche MFM o GCR, in qualsiasi formato, tramite I/O programmato o DMA. Supporta anche alcune caratteristiche comode, come il sync-on-word (nella codifica MFM, si usa di solito $4489 come parola di sincronizzazione). La codifica e la decodifica MFM vengono di solito fatte con il blitter - in un passo per la decodifica, in tre passi per la codifica. Normalmente le tracce vengono scritte interamente con un'unica operazione, invece che settore per settore.
Oltre al formato nativo dei dischi da 3,5 pollici da 880 KiB, il controller può gestire molti altri formati, come:
La porta seriale è rudimentale: supporta solo l'I/O programmato ed è priva di buffer FIFO. Caratteristica positiva: è possibile selezionare virtualmente qualsiasi velocità di trasmissione, incluse tutte quelle standard, quella dell'interfaccia MIDI, e molte altre non standard.
Il nome Agnus deriva da 'Address GeNerator UnitS', in quanto contiene tutti i registri di indirizzamento e controlla gli accessi in memoria dei chip custom. Paula invece prese il nome della ragazza del progettista del chip.