Amiga: basta la parola. Non credo di sbagliare se, parafrasando un celeberrimo spot televisivo, affermo che queste cinque lettere rievocano nell’immaginario collettivo una macchina che, come preannunciato nel titolo dell’articolo, è saldamente ancorata alla storia dell’informatica.
Alessio ci ha già deliziato con un paio di articoli sui modelli 1000 e 500, descrivendoli a 360° fra storia, strategie sbagliate, software e hardware. Io mi soffermerò su quest’ultimo aspetto, che ne ha rappresentato la punta di diamante grazie al connubio fra grafica e sonoro che ancora oggi è rimasto impresso nella mente di chi ha potuto goderseli fra la miriade di giochi, demo, e musiche (realizzate coi famosi mod player).
L’Amiga nasce in un momento di forte fermento sulle nuove tecnologie da portare “a casa”, alla massa, con gli home computer che hanno fatto da apripista. Di questo ne è pienamente cosciente la Hi-Toro (azienda che iniziò il progetto, all’epoca nota come produttrice di joystick e cartucce), che però voleva qualcosa di più: un computer con una elevata potenza di calcolo, ma con spiccate capacità videoludiche.
A concretizzare questa visione sarà poi il padre del chipset dell’Amiga, quel genio di Jay Miner che precedentemente aveva realizzato il chip grafico di una delle più gettonate console di tutti i tempi: l’Atari 2600. Ed è sicuramente dal suo precedente lavoro che Jay ha tratto ispirazione per la realizzazione dei tre chip (chiamati Agnus, Paula e Denise) che costituiscono il primo chipset dell’Amiga, l’OCS (Original Chip-Set; in seguito chiamato anche Old Chip-Set con l’avvento dell’ECS prima e dell’AGA o AA poi).
Nell’OCS ritroviamo parecchi elementi già presenti nelle console dell’epoca (sprite, multischermo, scrolling, coprocessore per le display list, DMA) come pure nelle workstation (blitter, audio PCM multicanale), ma Jay Miner, forte della sua esperienza, ha saputo sapientemente ripensare e implementare tutto ciò in questa favolosa architettura, che per parecchio tempo ha rappresentato il punto di riferimento tecnologico per gli altri sistemi (che offrivano poco o nulla; ogni riferimento ai PC non è casuale).
Il cuore dell’OCS era Agnus, il chip che si occupa di gestire l’accesso alla memoria sia per i componenti del chipset, che per la CPU (regolandone opportunamente gli accessi), e al cui interno integra due coprocessori che hanno rappresentato la “bandiera” dell’Amiga: il Copper e il Blitter.
Il primo è un processore dedicato al solo scopo di coordinare l’impostazione dei registri dei chip custom col movimento del pennello elettronico, ed eventualmente tenendo conto anche dello stato del Blitter.
L’idea di base era quella di poter manipolare a proprio piacimento (entro i limiti di tempo e risorse disponibili) i registri in base alla posizione dello schermo correntemente disegnata dalla circuiteria video in modo da poter, ad esempio, cambiare i colori utilizzati (aumentandone il numero).
Inutile dire che quando un programmatore si trova di fronte a un ulteriore elemento programmabile, fantasia e immaginazione prendono il sopravvento su come poterlo sfruttare, e vi posso assicurare che il Copper è stato impiegato per gli usi più disparati.
Il concetto di unità dedicata al veloce spostamento di blocchi di memoria (forma rettangolare), applicando magari delle funzioni logiche, sta invece alla base del Blitter. Già all’epoca esistevano dispositivi similari, ma andando a leggere qualche buon libro sulla computer grafica che tratta della grafica raster è possibile notare in maniera lampante come in questo componente siano stati concretizzati gli studi in materia.
Il Blitter permetteva, infatti, non soltanto di copiare dati da una zona di memoria a un’altra, ma applicare anche delle funzioni logiche e di mascheramento dei dati, mediante appositi registri. Durante la copia era anche possibile “riempire” delle zone di memoria (avete presente il classico strumento “secchiello” presente in programmi come il Paint? Il principio è quello).
In più era dotato anche di un algoritmo di tracciamento delle linee (a cui era possibile applicare anche un pattern) in hardware, che venne poi utilizzato per generare i contorni dei poligoni della grafica 3D.
Denise si occupava, invece, della generazione della grafica, integrando anche la logica per la gestione degli sprite. Alla base troviamo il concetto di bitplane, cioè di un’area rettangolare di bit (lo stesso tipo di dato su cui lavorava il Blitter) che ovviamente possono essere soltanto a 1 o 0. Denise poteva gestire fino a 6 bitplane in totale, combinandoli opportunamente ma con delle particolari restrizioni, per ottenere poi lo schermo o gli schermi da visualizzare.
Tralasciando al momento la trattazione dei bitplane (che affronterò in futuro), mi limito a dire che l’impiego dei bitplane era molto diffuso all’epoca perché permettevano di far risparmiare memoria per gli schermi, in quanto consentiva di definire in maniera precisa lo spazio da utilizzare per visualizzare immagini con un certo numero di colori (sempre per potenze di due): 2, 4, 8, 16, 32 o 64 colori richiedevano, infatti, 1, 2, 3, 4, 5 o 6 bitplane.
In realtà Denise aveva soltanto 32 registri per i colori (selezionati da una palette di 4096: 16 colori per ogni componente cromatica dello spazio RGB), e i 6 bitplane venivano utilizzati soltanto per delle speciali modalità di visualizzazione, il più famoso dei quali era l’HAM (Hold-And-Modify), che consentiva di visualizzare tutti e 4096 colori, sebbene con delle precise limitazioni.
Meno noto dell’HAM era l’EHB (Extra Half-Brite), col quale si arrivava a visualizzare 64 colori, anche se con la limitazione che gli ultimi 32 fossero uguali ai primi, ma con luminosità dimezzata. Sfortunatamente non era presente nei primissimi modelli di Amiga commercializzati, ma comunque fu utilizzata in alcuni giochi (ne parlerò più approfonditamente quando racconterò la storia di Perpetual Craze, poi commercializzato col nome di Fightin’ Spirits, gioco alla cui realizzazione ho partecipato in qualità di additional coder, e che fa proprio uso di questa modalità).
Chi ha avuto modo di conoscere l’Amiga avrà invece apprezzato l’uso che i programmatori hanno fatto della modalità a 6 bitplane (ma era possibile utilizzarne anche meno) denominata dual-playfield, che permetteva di visualizzare ben due schermi indipendenti, sebbene con la limitazione di soli 8 colori (7 per lo schermo frontale, perché il primo “colore” veniva utilizzato per “forare” lo schermo e visualizzare la grafica di quello sottostante). Anche qui, ogni riferimento a Shadow of the Beast non è affatto casuale…
La risoluzione normalmente utilizzata era la 320×200 (per gli Amiga NTSC) e 320×256 (per quelli PAL), ma era possibile sfruttare anche quella che veniva definita come alta risoluzione, cioé la modalità che permetteva di raddoppiare il numero di pixel orizzontali (arrivando a 640), purtroppo con la pesante limitazione del numero massimo di colori che si riduceva a 16 massimo.
Anche verticalmente era possibile raddoppiare la risoluzione (a 400 o 512 linee rispettivamente), facendo ricorso all’interlacciamento, ma col non trascurabile effetto “sfarfallio” dell’immagine che alla lunga poteva diventare stancante. A tutto ciò si aggiungeva il fatto di utilizzare anche i bordi dello schermo (overscan) permettendo quindi di visualizzare immagini con risoluzioni più elevate (ad esempio 704×480 e 704×576, impiegate per le trasmissioni televisive), come pure il supporto ai cosiddetti genlock per miscelare la grafica dell’Amiga con quella di una sorgente video esterna.
Infine, per quanto riguarda gli sprite, ne poteva visualizzare fino a 8 contemporaneamente, ma con soli 4 colori ciascuno (in realtà 3: il primo veniva sempre utilizzato per “forare” lo sprite e visualizzare la grafica sottostante), che divenivano 16 (15 per quanto detto prima) “accoppiandone” due (quindi al massimo 4 sprite a 16 colori), fornendo anche la possibilità di decidere dove visualizzarli nella modalità dual playfield (davanti al primo schermo, in mezzo fra primo e secondo schermo, dopo il secondo) e le eventuali collisioni fra gli sprite, o fra questi e la grafica dei playfield.
La cosa molto strana ma interessante degli sprite dell’Amiga era la loro risoluzione verticale: praticamente illimitata. Quindi mentre orizzontalmente erano larghi 16 pixel, verticalmente potevano arrivare a coprire anche l’intera area visiva, e ciò è risultato molto utile e comodo, specialmente in giochi come Robocod (capolavoro assoluto che spero di vedere presto su Appunti Digitali) che ne ha fatto il suo punto di forza.
Sebbene per la sola grafica abbia speso parecchio spazio e parole, non meno importante è stato il comparto audio dell’Amiga, a cui faceva capo Paula. Questo chip permetteva di generare fino a 4 segnali sonori, sfruttando la già menzionata tecnologia PCM, che consisteva nella riproduzione a una certa frequenza (poco meno di 29Khz massimo) di campioni audio digitali a 8 bit, che venivano poi convertiti in segnale analogico tramite appositi DAC.
Ogni canale era completamente indipendente dall’altro, ed era possibile applicare quindi un volume diverso (fino a 64 livelli), come pure effetti come il loop (la ripetizione di porzioni dello stesso campione) o la concatenazione (di più campioni diversi). Inoltre era possibile che un canale ne modulasse in frequenza o ampiezza un altro, in modo realizzare ulteriori effetti sonori.
Per superare il limite dei 29Khz (imposti dal DMA) Paula permetteva di caricare direttamente i campioni audio negli appositi registri, consentendo quindi di raggiungere frequenze molto più elevate e limitate esclusivamente dalla velocità della CPU. Oltre ai campioni audio era possibile impostare direttamente anche il volume, permettendo quindi di riprodurre campioni a 14 bit. Queste tecniche vennero impiegate in programmi come AudioMaster, molto famoso all’epoca per l’editing audio.
A Paula faceva capo anche la gestione degli interrupt, che venivano estesi dai 7 del 68000 a 14 tramite l’utilizzo di appositi registri (in pratica ad alcuni dei 7 livelli venivano associati più interrupt; ad esempio all’interrupt 4 erano collegati tutti e 4 gli interrupt generabili dai 4 canali audio).
Oltre a ciò, si occupava anche del movimento del mouse, delle leve dei joystick (mentre i rispettivi pulsanti erano collegati ad altri chip periferici della Commodore, chiamati CIA) e delle paddle, ma soprattutto della lettura e scrittura dei dati dal disco.
Un’altra caratteristica particolarmente interessante dell’Amiga era il fatto che sostanzialmente non era dotato di alcun controller dedicato alla gestione dei dischi, a parte una logica minimale per agganciare il segnale di sincronismo (la cosiddetta syncword, o magicword: $4489 in esadecimale) utilizzato per allineare la lettura dei dati.
In pratica l’intera gestione era a carico del programmatore, che si doveva occupare di pilotare i segnali (direttamente mappati in alcuni chip periferici) per accendere il motore, aspettare che fosse pronto per lavorare, inviare i giusti impulsi per far spostare la testina, aspettare che fosse correttamente posizionata, programmare Paula chiedendole di intercettare la syncword, e infine far partire il DMA del disco non appena questa fosse rilevata.
Se ciò era un male (sui PC, ad esempio, il controller si occupa di tutte queste operazioni, sgravando quindi il programmatore), era anche uno strumento flessibilissimo, visto che dava la possibilità di gestire il disco curandone ogni aspetto, codifica dei dati inclusa (che era sempre a carico del programmatore), ed era anche possibile scegliere fra il formato MFM (utilizzato nei dischi più recenti) o il GCR (nei vecchi floppy, come quelli di Commodore 64 & compagnia) con cui erano memorizzati fisicamente i dati.
Questo significa che l’Amiga era potenzialmente in grado di leggere e scrivere qualunque tipo di formato utilizzato per i dischi. Infatti oltre a un suo formato da 880KB, era perfettamente in grado di leggere e scrivere il formato da 720KB di PC e Atari ST, quello da 800KB degli Archimedes, e buona parte degli 800KB di quelli dei Mac (siccome alla Apple si dovevano sempre “differenziare”, adottavano un controller tutto particolare che variava la velocità di rotazione in base alle zone del disco). Ovviamente i programmatori di giochi si sono sbizzarriti (io sono arrivato a stoccare 1029KB su singolo disco; anche di questo ne parlerò in futuro).
Per quanto riguarda l’hardware dell’Amiga ci sarebbe ancora da parlare dei famigerati CIA, chip dedicati all’I/O (tastiera, pulsanti del joystick, linee di controllo dei floppy, porta seriale e parallela) e ai timer programmabili, che erano derivati dagli omonimi utilizzati nel Commodore 64 , quindi non frutto del lavoro di Jay Miner e in generale delle innovazioni che sono state portate dall’Amiga, per cui al momento mi fermo qui, per riprendere più avanti le evoluzioni che sono state fatte e quelle che, purtroppo, non ci sono mai arrivate.