# CTIA e GTIA

Il Color Television Interface Adaptor (CTIA) e il suo successore Graphic Television Interface Adaptor (GTIA) sono speciali circuiti integrati utilizzati nella linea di computer Atari a 8 bit e nella console Atari 5200. In questi sistemi un CTIA o un GTIA lavorava affiancato a un ANTIC per produrre il segnale video. I chip furono progettati da George McLeod con l'assistenza tecnica di Steve Smith.
Nonostante su alcune pubblicazioni siano state alle volte riportate diciture differenti, ad esempio viene spesso usato "Adapter" al posto di "Adaptor" oppure "Graphics" al posto di "Graphic", così come alle volte viene indicato che la "C" di CTIA stia per "Colleen/Candy" (i nomi in codice con cui erano conosciuti i modelli Atari 800 e Atari 400) o che la "G" di GTIA stia per "George" (dal nome del creatore del chip),, Color Television Interface Adaptor e Graphic Television Interface Adaptor sono i nomi ufficiali dei chip così come riportato sul manuale di riferimento di Atari.

## Le origini dei chip

Il CTIA fu progettato nel 1977 come parte di un chipset da usarsi nel successore della console Atari 2600, console che usava un chip grafico noto come Television Interface Adaptor (TIA). In termini di supporto grafico la progettazione del CTIA seguì quella del TIA: si aveva un livello denominato "playfield" per la grafica di sfondo con diversi oggetti grafici movibili in modo indipendente, denominati da Atari "players" e "missiles", che altro non erano se non sprite. Il numero degli sprite gestibili fu aumentato rispetto a quello che era in grado di trattare il TIA, passando da 2 "players" e 2 "missiles" a 4 ciascuno. Un quinto sprite denominato "ball" che era presente nel TIA fu rimosso ed alcune delle sue caratteristiche furono aggiunte a quelle dei "missiles". I 4 "missiles" potevano essere combinati insieme a formare un 5° "player".
Durante lo sviluppo della nuova console, nella seconda metà del 1977, iniziò la rivoluzione degli home computer grazie all'arrivo sul mercato principalmente di 3 computer: l'Apple II, il Commodore PET ed il Radio Shack TRS-80. Il nuovo presidente di Atari, Ray Kassar, che agli inizi del 1978 aveva preso il posto del fondatore della società Nolan Bushnell dopo che quest'ultimo aveva venduto l'azienda a Warner Communications, decise di provare ad entrare nell'appena nato mercato dei computer domestici e fece rivedere il progetto della nuova console affinché potesse dar luogo a 2 sistemi distinti: un sistema di fascia bassa per sostituire la console 2600 ed un sistema di fascia alta da vendere, dopo opportune modifiche, come home computer. In entrambi i casi l'hardware doveva essere rivisto perché graficamente, oltre a prestazioni superiori, esso doveva poter gestire anche i caratteri grafici. A tale scopo fu progettato e realizzato un nuovo chip denominato ANTIC il cui scopo era quello di gestire un framebuffer di grafica bitmap, che il TIA non era capace di gestire. Il nuovo sistema prevedeva che l'ANTIC passasse le informazioni grafiche al CTIA, che avrebbe poi provveduto a colorare ed a spedire al circuito per la generazione del segnale video. Questa gestione avrebbe reso il sistema grafico meno complesso da gestire in termini di programmazione rispetto a quanto invece lo era sull'Atari 2600.
Il risultato fu un sistema grafico molto più potente rispetto a quello offerto dal TIA: molti più sprite, uno schermo con una risoluzione che poteva variare da 40 a 320 pixel orizzontalmente e da 24 a 192 pixel verticalmente (contro i 20 o 40 pixel di risoluzione del TIA), 6 modalità testuali e 8 modalità grafiche differenti, da 2 a 4 colori per riga. La tavolozza era di 128 colori, dati da 8 livelli di luminosità per ognuno delle 16 tonalità disponibili. Una modalità molto usata nei giochi fu la 160×192 pixel a 4 colori, nota come "graphics 7.5".
Il progetto originale del CTIA prevedeva anche il supporto per 3 diversi modi aggiuntivi di gestione del colore delle modalità grafiche, che permettevano di avere 16 colori con una risoluzione di 80×192 pixel ed un totale di 56 modalità differenti (le originali 14 più 42 variazioni di esse). Lo sviluppo di questa caratteristica stava però portando via più tempo del previsto ed Atari decise di produrre nel frattempo 100.000 chip CTIA senza di essa, perché il rischio era di ritrovarsi alla data di presentazione dei nuovi sistemi con le macchine ancora da assemblare. I progettisti riuscirono però a completare il chip in tempo, che fu denominato GTIA. Ma Atari, per non gettare via i chip già prodotti, decise di presentare i nuovi computer Atari 400 e Atari 800 al Consumer Electronics Show del 1979 con il CTIA e di iniziare ad utilizzare il GTIA quando le scorte del primo si fossero esaurite, cosa che avvenne solo alla fine del 1981. A partire da allora tutti i computer Atari montarono il GTIA, che offriva non solo le nuove modalità grafiche ma anche 16 livelli di luminosità per ogni tonalità, per un totale di 256 colori.
Il sistema operativo dei computer Atari supportava la grafica a 16 colori fin dall'avvio, cosa che permise ad Atari di sostituire in maniera del tutto trasparente il CTIA con il GTIA non appena quest'ultimo iniziò ad essere utilizzato. Atari in seguito autorizzò anche i servizi di assistenza ad eseguire la sostituzione del chip in maniera del tutto gratuita nel caso la macchina fosse stata ancora in garanzia, oppure al costo di 62,52$ se non lo fosse stata più.
Il GTIA fu montato in tutti i computer Atari serie XL e serie XE nonché sulla console Atari 5200.

## Caratteristiche

Il CTIA ed il GTIA sono delle interfacce televisive: essi convertono i dati digitali in arrivo dall'ANTIC in segnali analogici riproducibili su un televisore. Oltre a ciò eseguono le seguenti operazioni:
* aggiungono il colore al segnale;
* disegnano gli sprite sullo sfondo;
* controllano le collisioni fra gli sprite e fra gli sprite e lo sfondo.
Eseguono anche alcuni compiti aggiuntivi:
* leggono i comandi impartiti dall'utente attraverso il joystick (nel caso dei controller dell'Atari 5200, leggono solo lo stato dei pulsanti inferiori);
* possono gestire l'input/output attraverso 4 pin dedicati, usati in maniera diversa a seconda dei sistemi:
** nei computer Atari ad 8 bit, 3 pin sono usati per leggere lo stato dei pulsanti della console (Start/Select/Option), mentre il 4° pin controlla l'altoparlante integrato nei modelli Atari 400/800, usato per generare i click della tastiera. Sui modelli più recenti l'altoparlante fu tolto ma il GTIA generava lo stesso il suono del click, che veniva miscelato con l'audio generato dal sistema.
** Sull'Atari 5200 i pin sono usati come parte del sistema di lettura dei pulsanti dei joystick.

### Gli sprite

Il CTIA ed il GTIA potevano manipolare gli sprite in hardware. Il nome ufficiale che Atari dava agli sprite era "Player/Missile Graphics", dato che all'epoca dell'Atari 2600 questo sistema era stato studiato per ridurre al minimo la manipolazione della memoria video durante lo spostamento degli oggetti principali del gioco, il "player" ed i suoi spari, i "missiles".
Uno sprite era largo 8 pixel ed alto 256 righe, ed aveva 2 colori: lo sfondo (trasparente), indicato nello sprite con il codice 0, ed il colore primario, indicato con 1. Il CTIA ed il GTIA miscelavano il colore primario con il colore del pixel sottostante mentre visualizzavano il pixel presente dietro al colore di sfondo senza modifiche. Un registro impostava la larghezza dei pixel degli sprite a 1, 2 o 4 cicli del segnale di colore.
Il CTIA ed il GTIA gestivano gli sprite come motivi ad 8 bit che si estendevano per tutta l'altezza dello schermo, compreso il bordo. In pratica, uno sprite è una striscia sullo schermo. Questo modo di considerare gli sprite risultava utile perché essi potevano così essere utilizzati come bordi verticali colorati o separatori sullo schermo oppure, quando la priorità dei valori dei pixel degli sprite è impostata per scavalcare i pixel sottostanti, per aggiungere nuovi colori. Dato che l'ANTIC poteva accedere direttamente alla memoria per caricare i valori anche riga per riga, gli sprite potevano anche essere utilizzati per creare dei font di caratteri larghi 8 pixel ma alti anche tutto lo schermo.
Come detto, i chip gestivano 8 sprite: 4 "players", ognuno largo 8 pixel, e 4 "missiles", ognuno largo 2 pixel. Ogni "player" aveva il suo registro di posizione orizzontale. I "missiles" avevano i registri della posizione orizzontale indipendenti ma condividevano 1 registro ad 8 bit per l'immagine di riempimento. I 4 "missiles" potevano essere raggruppati per creare un 5° "player", largo 8 pixel. Il CTIA ed il GTIA avevano un registro di controllo del colore che permetteva di creare grazie alla sovrapposizione dei pixel di 2 sprite un terzo colore, al costo di una riduzione del numero di sprite disponibili.
Lo spostamento degli sprite in orizzontale era fatto modificando il valore dell'apposito registro: in Atari BASIC lo si poteva fare ricorrendo all'uso di POKE. Per muovere gli sprite in verticale il programmatore doveva invece ricorrere allo spostamento in memoria dei blocchi di dati dello sprite: se tale operazione non comportava particolari problemi ricorrendo al linguaggio macchina, dato che gli sprite erano blocchi di 128 o 256 byte (a seconda della risoluzione) ed i registri della CPU MOS 6502, essendo ad 8 bit, permettevano di effettuare la rotazione dei dati con un semplice ciclo, in BASIC l'operazione era lentissima ed i programmatori dovevano ricorrere a funzioni scritte in linguaggio macchina inserite all'interno del codice in BASIC oppure usare una grossa stringa per contenere i dati dello sprite e ricorrere alle funzioni di copia delle stringhe messe a disposizione dall'interprete.

### Specifiche del GTIA

Il GTIA era retrocompatibile con il CTIA, rispetto al quale aggiungeva 3 nuove modalità di gestione dei colori. Normalmente sul CTIA i colori erano massimo 4 in modalità grafica (e massimo 5 in modalità testuale), a meno di non inserire display list interrupts che permettevano di cambiare palette ad ogni riga. Le 3 nuove modalità cromatiche portavano teoricamente le modalità grafiche possibili a 56 (3 in più per ognuna delle 14 modalità base) ma in realtà non tutte le modalità di base erano supportate ma solo quelle a risoluzione orizzontale dimezzata (160 pixel), dove venivano usati 2 bit colore per ogni pixel. Queste erano le modalità testuali 2 e 3 e la modalità grafica "F" dell'ANTIC: il GTIA raddoppiava ulteriormente il numero di bit per gestire il colore, portandoli a 4 ma dimezzando ancora la risoluzione, che dai 320 pixel originali della modalità a 2 colori scendeva ad 80 pixel in quella a 16 colori (la risoluzione verticale di 192 pixel rimaneva invariata).
Le nuove modalità di gestioni del colore erano le seguenti:
* 16 sfumature per ogni singola tinta delle 16 disponibili nella tavolozza dell'Atari. Questa modalità era accessibile via Atari BASIC con il comando GRAPHICS 9;
* 16 tinte con una singola sfumatura/luminanza. Questa modalità era accessibile via Atari BASIC con il comando GRAPHICS 11;
* 9 colori per ogni riga orizzontale di qualsiasi tinta e sfumatura, scelti dall'intera tavolozza dei 128 colori messi a disposizione dal computer. Il risultato era ottenuto utilizzando tutti e 5 i registri colore dello sfondo ed i registri di tutti gli sprite. Questa modalità era accessibile dall'Atari BASIC con il comando GRAPHICS 10.
La modalità grafica 9 dell'Atari BASIC era particolarmente degna di nota perché permetteva di visualizzare sullo schermo delle fotografie digitalizzate con 16 livelli di grigio che, nonostante la bassa risoluzione, era comunque un risultato notevole per l'epoca. Inoltre, le 16 sfumature permettevano di avere 256 colori totali quando normalmente le 8 tonalità per ogni tinta consentivano sul CTIA di avere solo 128 colori diversi. Sfortunatamente, questa caratteristica era limitata a questa modalità che, per la sua bassa risoluzione, non fu molto usata.
Le modalità testuali 2 e 3 dell'ANTIC erano capaci di visualizzare la stessa varietà di colori della modalità grafica "F" quando si usavano le nuove modalità di gestione del colore offerte dal GTIA. C'era però il problema della ridotta risoluzione orizzontale che trasformava i normali caratteri a 2 colori, larghi 8 pixel, in caratteri a 16 colori larghi però 16 bit. Per questo motivo, a parte l'uso in alcune demo, in modalità testuale le nuove potenzialità cromatiche del GTIA non furono molto utilizzate. Se si ricorreva ad un insieme di caratteri modificato con i caratteri costruiti bit per bit, si poteva ottenere una definizione maggiore, ad "alta risoluzione", al costo però di occupare 8 kB di RAM al posto della normale mappa caratteri, che ne occupava 2 (1 kB per la mappa caratteri ed 1 kB per la memoria RAM e la "display list").
Il GTIA correggeva anche un bug del CTIA che generava la grafica spostata di mezzo segnale colore: l'effetto collaterale di questa correzione fu che i programmi che sfruttavano questo difetto nelle modalità monocromatiche ad alta risoluzione invertivano i loro colori.
I possessori dei computer potevano sapere che tipo di chip equipaggiava le loro macchine dando da BASIC il comando POKE 623,64: se lo schermo diventava nero dopo il comando, la macchina era equipaggiata con il GTIA, se lo schermo rimaneva blu allora montava il CTIA.

## Versioni

Questi sono i codici scritti sul chip che identificavano i vari modelli:
* C012295 — CTIA versione NTSC
* C014805 — GTIA versione NTSC
* C014889 — GTIA version PAL
* C020120 — GTIA versione SÉCAM per il mercato francese (FGTIA)
Atari studiò l'integrazione dell'ANTIC e del GTIA in un unico chip per ridurre i costi di produzione delle console 5200. Il risultato portò alla realizzazione di 2 prototipi, che però non andarono mai in produzione:
* C020577 — CGIA
* C021737 — KERI

## Bug

I modelli più recenti dei computer Atari serie XE commercializzati nei Paesi dell'Europa orientale erano fabbricati in Cina: la maggior parte di essi aveva il chip GTIA in versione PAL che conteneva un bug che affliggeva la visualizzazione dei colori sulle modalità grafiche dalla 9 in poi: la tonalità dei colori era gestita male dando luogo a strisce colorate sullo schermo. Per ovviare all'inconveniente era necessario sostituire il chip GTIA. Fu realizzato anche un circuito esterno che correggeva il problema senza sostituire il chip.