OCS

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.

Overview dei chip

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.

Agnus

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

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

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.

  • L'istruzione MOVE scrive una parola di 16-bit in uno dei registri del chipset.
  • L'istruzione WAIT blocca il copper fino al raggiungimento di una data posizione video, rendendo così possibile la sincronizzazione di altre istruzioni al tracciamento dello schermo. Può anche attendere che il blitter finisca un'operazione.
  • L'istruzione SKIP farà si che il copper salti l'istruzione successiva se è già stata raggiunta una data posizione del pennello video. Può essere usata per creare cicli nelle copper list.

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.

Usi del copper

  • Il copper viene comunemente usato per (ri)inizializzare i registri dell'hardware video all'inizio di ogni quadro video. Può essere usato anche per modificare l'hardware video durante il tracciamento di un quadro. Questo consente all'Amiga di cambiare la configurazione video, compresa la risoluzione, da una linea all'altra. L'Amiga può visualizzare diverse risoluzioni orizzontali e diverse profondità di colore nello stesso schermo. L'interfaccia grafica dell'AmigaOS consente a due programmi di funzionare con due risoluzioni video distinte, pur essendo entrambi visibili contemporaneamente sullo schermo. Un programma di disegno può ad esempio usare questa caratteristica per consentire agli utenti di disegnare direttamente su uno schermo Hold And Modify a bassa risoluzione, offrendo contemporaneamente una barra degli strumenti in alta risoluzione in cima o in fondo allo schermo.
  • Il copper può anche cambiare i registri dei colori ad ogni linea di scansione, creando gli effetti “raster bar” tanto comuni nei giochi dell'Amiga. Il copper può fare anche di più, come cambiare il colore di sfondo abbastanza spesso da visualizzare una grafica a blocchi senza usare del tutto i bitplane.
  • Il copper consente di riusare gli sprite: dopo che uno sprite è stato visualizzato una prima volta, il copper può muoverlo immediatamente ad una nuova locazione, facendolo disegnare nuovamente anche sulla stessa linea di scansione.
  • Il copper può anche essere usato per programmare ed attivare il blitter. Ciò è utile per fare più operazioni in sequenza col blitter, in quanto il copper può aspettare che il blitter termini un'operazione e riprogrammarlo subito dopo per l'operazione successiva.
  • Il copper può essere usato per produrre il modo video “sliced HAM”, o S-HAM[1], che consiste nel costruire una copper list che modifichi la tavolozza dei colori ad ogni linea di scansione, migliorando la scelta dei colori di base nel modo grafico Hold And Modify.

Denise

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:

  • Nel modo Extra-Halfbrite (EHB), i pixel continuano ad avere il colore della palette specificato dai bitplane da 1 a 5, ma se il bit corrispondente nel sesto bitplane è 1, la luminosità del colore viene dimezzata. Le prime versioni dell'Amiga 1000 vendute negli Stati Uniti non avevano il modo Extra-HalfBrite[2].
  • Nel modo Hold-and-Modify (HAM), i 6 bit di ogni pixel vengono interpretati come 2 bit di controllo e 4 di dati. I 4 valori possibili dei bit di controllo corrispondono a “prendi da tavolozza”, “modifica il rosso”, “modifica il verde” e “modifica il blu”.
    • Con “prendi da tavolozza”, il colore del pixel viene preso appunto dalla tavolozza, indicizzandola con gli altri 4 bit.
    • Con uno dei “modifica”, invece, i quattro bit indicano esplicitamente quale valore deve assumere la componente rossa, verde o blu di quel pixel; le altre due rimangono uguali a quelle del pixel precedente. Questo consente di visualizzare tutti e 4096 i colori sullo schermo allo stesso tempo.
  • Nel modo Dual Playfield, anziché avere uno schermo singolo, si hanno due schermi sovrapposti (“playfield”) di 8 colori l'uno. I due schermi possono essere fatti scorrere indipendentemente e il colore di fondo dello schermo superiore non è visibile, ma lascia trasparire lo schermo inferiore.

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.

Temporizzazioni video esterne

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.

Paula

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.

Controller per floppy disk

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:

  • IBM PC
  • Apple II
  • Mac 800 kB (con un Mac drive)
  • AMAX Mac emulator (Un floppy speciale con soli 200 KB, per scambiare dati tra Amiga e Macintosh, che poteva essere formattato su un Amiga, e letto e scritto dalle unità floppy di entrambi i sistemi)
  • Commodore 1541 (richiede un drive da 5,25 pollici rallentato a 280 giri/min)
  • Floppy da 3,5 pollici per C64 e C128 formattati da un Commodore 1581

Porta seriale

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.

Curiosità

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.

Voci correlate

Bibliografia

  • Miner, Jay et al (1991). Amiga Hardware Reference Manual: Third Edition. Addison-Wesley Publishing Company, Inc. ISBN 0-201-56776-8.

Collegamenti esterni


Tools personali
Toolbox












Usa questo logo per affiliazioni



Offrici un caffè!!