# Video Display Controller

Un Video Display Controller, o VDC, è il principale circuito integrato del componente che gestisce la generazione del segnale video, un dispositivo capace di produrre in un computer un segnale video composito TV. Alcuni VDC possono anche generare segnali audio analogici, che comunque non è la loro funzione principale.
I VDC furono utilizzati molto sia nei primi videogiochi arcade sia negli home computer ad 8 bit degli anni ottanta.
Un VDC è sempre il componente principale della circuiteria dedicata alla generazione del segnale video anche se spesso sono presenti altri chip di supporto, come della RAM per memorizzare i dati riguardanti i pixel dell'immagine, della ROM per mantenere i font dei caratteri, o i circuiti discreti, come dei registri a scorrimento, necessari a far funzionare il sistema. In alcuni casi il VDC è responsabile della generazione dei segnali di temporizzazione per i segnali video, come i segnali di sincronizzazione verticali ed orizzontali.
Alle volte i chip VDC sono completamente integrati nella logica del sistema centrale (con la sua VRAM che appare nella mappa di memoria della CPU), mentre altre operano come coprocessori che operano nella VRAM in modo indipendente.

## VDC contro VDP/GPU

La differenza tra i VDC ed i più moderni Video Display Processor, VDP, oggi sostituiti dalle Graphics processing unit, GPU, risiede nel fatto che i primi non possiedono nessuna forma di accelerazione hardware per la creazione delle immagini 2D e 3D. I VDC possono però avere integrata la logica per la gestione in hardware degli sprite, una funzione che nei più recenti VDP è svolta dal bit blitter, che può spostare velocemente grossi quantitativi di dati nella memoria video.
Esempi di tipici VDP sono dati dai chip video della console Sega Saturn, dal chip AGA (Advanced Graphics Architecture) presente negli ultimi modelli dei computer Amiga, dal TIA dell'Atari 2600.
Non esiste per i "chip video" un delimitatore che indichi chiaramente quando questi devono essere considerati VDC e quando VDP. Ad esempio, il TMS9918 era indicato sia come "Video Display Controller" sia come "Video Display Processor": quest'ultimo, di solito, è capace di "processare" il contenuto della VRAM (ad esempio riempiendo con un valore una porzione di essa) mentre il primo "controlla" solo la temporizzazione dei segnali di sincronizzazione e l'accesso alla VRAM.
Una GPU va invece un ulteriore passo in avanti rispetto ad un VDP e normalmente supporta anche funzionalità di accelerazione 3D. Le GPU sono i chip utilizzati nei moderni personal computer.

## Tipi di Video Display Controllers

I VDC possono essere suddivisi arbitrariamente in alcuni tipi (qui sotto elencati da quelli meno a quelli più complessi):
* Video shifter, o "Video shift register based system" (anche se non esiste un nome universalmente riconosciuto per indicarli), sono il tipo più semplice di VDC. Essi sono responsabili, direttamente o indirettamente, per i segnali di sincronizzazione del video ma, di solito, non accedono direttamente alla VRAM: essi ricevono i dati video dalla CPU e li convertono in un flusso seriale di dati (da qui il nome di "shifter", "scambiatore"). Questo flusso seriale di dati è poi usato, insieme ai segnali di sincronizzazione, per generare il segnale video in uscita. La CPU principale esegue tutti i calcoli necessari. Normalmente questi chip supportano solo una modalità raster a bassa risoluzione.
* Un CRTC, o "Cathode Ray Tube Controller", genera i segnali di temporizzazione del video e legge i dati video da una RAM collegata al CRTC, ed offre in uscita dei dati, o tramite una ROM contenente i font dei caratteri nel caso di una modalità di visualizzazione solo testuale oppure direttamente nel caso di una modalità grafica, ad un Video Shifter. Datosi che le capacità grafiche di questi tipi di generatori video dipendono in gran parte da logica esterna, i chip CRTC possono avere un'ampia gamma di caratteristiche, dalle più semplici per i sistemi solo testuali a quelle più complesse dei sistemi con grafiche ad alta risoluzione e con un gran numero di colori. Gli sprite non sono in genere supportati da questi sistemi.
* I Video interface controller sono sistemi più complessi dei CRTC, che contengono normalmente la circuiteria esterna necessaria a questi ultimi. Essi supportano spesso anche gli sprite così come integrano un generatore di caratteri in RAM ed una VRAM dedicata agli attributi dei colori ed ai registri della tavolozza per le modalità testuale e/o ad alta risoluzione.
* I Video coprocessor hanno una propria CPU interna dedicata alla lettura (e scrittura) della loro VRAM, e convertono il contenuto di questa memoria in un segnale video. La CPU del sistema può inviare dei comandi al coprocessore video, ad esempio per cambiare la modalità video o per manipolare il contenuto della memoria video. Il coprocessore video controlla inoltre il generatore di caratteri (generalmente su RAM), gli attributi dei colori e la logica di gestione degli sprite (se, ovviamente, questi sono supportati).

## Elenco di alcuni VDC

La lista che segue raccoglie alcuni Video Display Controller:
Video shifters
* L'RCA CDP1861 era un chip molto semplice costruito in tecnologia CMOS (una rarità per gli anni settanta) come complemento del microprocessore RCA 1802; fu usato principalmente nel minicomputer COSMAC VIP. Supportava solo una modalità grafica monocromatica a bassa risoluzione.
* Il Television Interface Adaptor (TIA) è il chip video usato nelle console Atari 2600. Era un chip molto primitivo che dipendeva dal microprocessore MOS 6507; era usato anche per generare l'audio.
CRT Controllers
* L'Intel 8275 era un CRTC che non fu usato in nessun sistema di larga diffusione ma fu utilizzato principalmente in alcuni sistemi basati sul bus S-100.
* Il Motorola 6845 era un generatore video presentato da Motorola ed utilizzato negli Amstrad CPC e nei BBC Micro. Fu in seguito usato per alcuni dei primi adattatori grafici per PC, come le schede MDA, CGA e EGA. Nelle successive schede VGA le funzionalità del 6845 erano riprodotte all'interno del chip video per cui in teoria ogni scheda video compatibile VGA incorpora le funzionalità del 6845.
Video Interface Controllers
* Il Signetics 2636 ed il 2637 sono controllori video noti per essere stati usati, rispettivamente, nei sistemi Interton VC4000 e Emerson Arcadia 2001.
* Il Motorola 6847 è un generatore video prodotto da Motorola es usato nei computer TRS-80 Color Computer, Dragon 32/64, VTech Laser 200, Acorn Atom ed altri.
* Il MOS VIC (Video Interface Chip), siglato MOS 6560 per lo standard NTSC e MOS 6561 per quello PAL, è il noto chip grafico del Commodore VIC-20.
* Il MOS VIC-II, siglato MOS 6567/8562/8564 per lo standard NTSC e 6569/8565/8566 per quello PAL, è il ben noto chip grafico del Commodore 64.
* Il MOS VDC (Video Display Controller), o MOS 8563, è invece il chip video del Commodore 128: rispetto al VIC-II è capace di gestire 80 colonne di testo.
* Il MOS TED (Text Editing Device), o MOS 7360, è il chip usato nel Commodore Plus/4, nel Commodore 16 e nel Commodore 116. Generava anche l'audio e gestiva l'input/output.
* Il Picture Processing Unit (PPU), siglato RP2C02 per i sistemi NTSC e RP2C07 per quelli PAL, è un coprocessore video progettato da Ricoh che Nintendo ha usato nel Famicom/Nintendo Entertainment System: aveva 2048 byte di VRAM dedicata ed aveva un bus aggiuntivo con il quale poteva accedere ad altra RAM/ROM. Supportava lo scrolling di un'immagine di 256×240 pixel e poteva visualizzare 64 sprite (chiamati OBJ nel NES), di cui 8 potevano stare sulla stessa linea video.
* Il TMS9918 è noto come Video Display Processor (VDP): fu progettato per il Texas Instruments TI-99/4 ma fu poi usato anche nei sistemi MSX1, nel ColecoVision, nel Memotech MTX e nei sistemi SEGA SG-1000 e SC-3000.
* Il NEC D7220 era usato in alcune schede grafiche per PC di fascia alta di metà anni '80, come quelle prodotte da Number Nine.
Video Coprocessors
* L'ANTIC (Alpha-Numeric Television Interface Circuit) era il chip video usato negli Atari ad 8 bit. Aveva una CPU integrata che poteva eseguire una display list per generare un segnale video complesso.
* Lo Yamaha V9938 era una versione migliorata del TMS9918; era usato soprattutto nei computer MSX2.
* Lo Yamaha V9958 era un VDP utilizzato principalmente nei computer MSX 2+ e MSX turbo R.

## Alternative all'uso di un chip VDC

Molti vecchi computer non usavano un chip VDC ma presentavano l'intera logica di gestione video costruita con chip discreti: esempi di questa scelta costruttiva sono l'Apple II, il PET ed il TRS-80). Siccome questo metodo è molto flessibile i VDC potevano essere molto capaci (o estremamente primitivi, a seconda della qualità del progetto) anche se richiedevano un buon numero di componenti.
Alcuni produttori usarono le prime forme di PLA, come i computer Sinclair ZX80/ZX81/ZX Spectrum: questi controllori video potevano rappresentare un'interessante soluzione per ridurre i costi perché utilizzavano pochi componenti ma il ridotto numero di transistor di queste prime logiche programmabili si ripercuotevano sulle capacità offerte, spesso inferiori a quelle dei VDC o dei coprocessori video.

## I successori dei VDC

Seguendo la legge di Moore, i circuiti integrati sono divenuti nel corso degli anni sempre più complessi: il semplice VDC fu quindi lentamente rimpiazzato da chip che avevano integrata della logica per processare le immagini come i blitter ed altri circuiti che manipolano i contenuti nella VRAM per eseguire operazioni come il tracciamento di linee, il riempimento di aree oppure il disegno dei font. A seguire arrivarono chip che presentavano della logica speciale per tracciare triangoli, includevano uno Z-buffer in hardware e molti altri metodi per accelerare il disegno delle immagini in 3D.
Gli attuali VDP sono GPU tanto comuni che sono ormai integrate nei chipset delle schede madri dei computer, che riservano a questi VDP una parte della memoria del sistema come VRAM. Le prestazioni di tali sistemi grafici non sono equiparabili a quelle di un hardware dedicato quale le GPU montate sulle schede grafiche.