Che cos'è esattamente VGA e qual è la differenza tra esso e una scheda video?


30

Tutorial sullo sviluppo del sistema operativo individuano il raggiungimento dei dati dello schermo scrivendo direttamente su VGA o EGA o Super VGA, ma ciò che non capisco è qual è la vera differenza tra scrivere su un indirizzo fisso per la visualizzazione e scrivere direttamente su una scheda video, a bordo o rimovibile? Voglio solo il chiarimento di base della mia confusione su questo sul mio problema

E dal momento che non è un caso così semplice con variabili in schede, interfacce connettive, bus, architetture, sistema su un chip, sistemi integrati, ecc., Trovo difficile trovare un modo per capire l'idea alla base di questo 100% . Gli indirizzi fissi differirebbero da una GPU di fascia alta a una di fascia bassa di bordo? Perché e perché no?

È uno dei miei obiettivi nella programmazione ospitare un kernel e creare un sistema operativo, e un sogno davvero inverosimile. Non riuscire a capire la terminologia non solo mi ostacola in alcune aree, ma mi fa sembrare sciocco sui temi dell'hardware.

EXTRA: Alcune di queste risposte attuali parlano dell'utilizzo della memoria massima indirizzabile del processore nello specifico su 16 bit. Il problema è alcuni di questi altri problemi emergenti:

1.Per quanto riguarda la memoria della carta? Ciò non richiederebbe la RAM di sistema per i dati dello schermo stesso.

2. Cosa succede nelle modalità con bit più alti? E non puoi non trascurare il BIOS in modalità reale (x86) e indirizzare ancora la memoria tramite AL?

3. In che modo il concetto di scrivere su un indirizzo fisso rimarrebbe invariato su una GPU con una moltitudine di registri e prestazioni sul o sopra il microprocessore reale?


Per un piccolo contesto storico, controlla la mia risposta a una domanda correlata: superuser.com/questions/357328/…
Russell Borogove,

Va notato che, oltre a riferirsi alla tecnologia / protocollo della scheda display, il termine è venuto a designare particolari standard elettrici e risoluzioni del display. È difficile indovinare quale significato viene applicato, anche quando vedi i termini "nel contesto".
Daniel R Hicks,

Risposte:


65

Tecnicamente VGA è l'acronimo di Video Graphics Array , uno standard video 640x480 introdotto nel 1987. All'epoca era un'alta risoluzione relativa, in particolare per un display a colori.

Prima dell'introduzione di VGA avevamo alcuni altri standard grafici, come Ercole che visualizzava il testo (80 righe di 25 caratteri) o la relativa grafica monocromatica ad alta definizione (a 720x348 pixel).

Altri standard all'epoca erano CGA ( adattatore grafico a colori ), che consentiva anche fino a 16 colori con una risoluzione fino a 640x200 pixel. Il risultato sarebbe simile al seguente:

inserisci qui la descrizione dell'immagine

Infine, uno standard degno di nota del PC era la scheda grafica avanzata (EGA), che consentiva risoluzioni fino a 640 × 350 con 64 colori.

(Sto ignorando gli standard non PC per mantenere questo relativamente breve. Se comincio ad aggiungere gli standard Atari o Amiga - fino a 4096 colori in quel momento! - allora diventerà piuttosto lungo.)

Quindi nel 1987 IBM introdusse il computer PS2. Aveva diverse differenze degne di nota rispetto ai suoi predecessori, che includevano nuove porte per mouse e tastiere (in precedenza i mouse utilizzavano porte seriali a 25 pin o porte seriali a 9 pin, se possedevi un mouse); unità standard da 3½ pollici e un nuovo adattatore grafico con alta risoluzione e molti colori.

Questo standard grafico è stato chiamato matrice di grafica video . Ha usato un connettore da 3 file a 15 pin per trasferire segnali analogici su un monitor. Questo connettore è durato fino a pochi anni fa, quando è stato sostituito da standard digitali superiori come DVI e porta display.

Dopo VGA

I progressi non si sono fermati con gli standard VGA. Poco dopo l'introduzione di VGA sono sorti nuovi standard come VGA (SVGA) S 800x600 S , che utilizzava lo stesso connettore. (Ercole, CGA, EGA ecc. Avevano tutti i propri connettori. Non si poteva collegare un monitor CGA a una scheda VGA, nemmeno se si provava a visualizzare una risoluzione abbastanza bassa).

Da allora siamo passati a display con risoluzione molto più elevata, ma il nome più utilizzato rimane VGA. Anche se i nomi corretti sarebbero SVGA, XVGA, UXGA ecc. Ecc.

inserisci qui la descrizione dell'immagine

(Grafica gentilmente concessa da Wikipedia)


Un'altra cosa che viene chiamata 'VGA' è il connettore DE15 utilizzato con la scheda VGA originale. Questo connettore di solito blu non è l'unico modo per trasferire "segnali VGA" analogici su un monitor, ma è il più comune.

Sinistra: DB5HD Destra: connettori VGA alternativi, generalmente utilizzati per una migliore qualità) inserisci qui la descrizione dell'immagine


Un terzo modo in cui "VGA" viene utilizzato è quello di descrivere una scheda grafica, anche se tale scheda potrebbe produrre risoluzioni completamente diverse rispetto a VGA. L'uso è tecnicamente errato o dovrebbe almeno essere "scheda compatibile VGA", ma il linguaggio comune non fa la differenza.


Questo lascia scrivere a VGA

Questo deriva dal modo in cui è stata divisa la memoria su un IBM XT. La CPU potrebbe accedere fino a 1 MiB (1024 KiB) di memoria. Il 512 KiB inferiore era riservato alla RAM, il 512 KiB superiore per schede aggiuntive, ROM ecc.

Quest'area superiore è dove è stata mappata la memoria delle schede VGA. È possibile scrivere direttamente su di esso e il risultato verrà visualizzato sul display.

Questo non era solo usato per VGA, ma anche per alternative della stessa generazione.

  G = RAM video modalità grafica
  M = RAM video in modalità testo monocromatico
  C = RAM colore modalità testo testo
  V = Video ROM BIOS (sarebbe "a" in PS / 2)
  a = ROM della scheda dell'adattatore e RAM per uso speciale (spazio UMA libero)
  r = BIOS ROM scheda madre PS / 2 aggiuntivo (UMA gratuito in sistemi non PS / 2)
  R = BIOS ROM della scheda madre
  b = IBM BASIC ROM a cassetta (sarebbe "R" in compatibili IBM)
  h = High Memory Area (HMA), se è caricato HIMEM.SYS.

Memoria (base) convenzionale:   
Primi 512 KB (o 8 blocchi di 64 KiB). 

Upper Memory Area (UMA):

0A0000: GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
0B0000: MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
0C0000: VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
0D0000: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
0E0000: rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
0F0000: RRRRRRRRRRRRRRRRRRRRRRRRbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbRRRRRRRRR

( Fonte della mappa ASCII).


1
Commento Nit: non è un connettore "DB15". Un connettore DB15 ha solo 2 file di pin (proprio come DB9 e DB25). Il connettore VGA ha 3 file di pin ed è spesso chiamato "HD15" (HD per alta densità rispetto al DB) (anche se alcuni affermano che "HD15" non è un nome ufficiale).
segatura

2
Commento n. 2: il PC IBM originale potrebbe essere stato rilasciato con una suddivisione 512/512, ma presto è stato modificato in una suddivisione 640/384 (a cui si fa riferimento nella pagina di origine). La memoria grafica inizia con il segno 640K (esadecimale 0A0000). Non credo che nessuno sia mai diventato veramente consapevole di un "confine di 512K" nel modo in cui il "confine di 640K" alla fine è diventato un problema ben noto.
Hellion,

2
@sawdust: HD15 non è sicuramente un nome ufficiale (ma è buono come in questi giorni). Nella Dx-nnfamiglia di connettori, xè la dimensione della shell, nnè il numero di pin. Shell B ha le stesse dimensioni di una porta parallela (o di una vecchia porta seriale a 25 pin a piena implementazione). Shell E ha le stesse dimensioni della porta seriale. Quindi tecnicamente , il connettore VGA a 15 pin sarebbe DE-15, ma questo non faceva mai parte della gamma originale di connettori. AFAIK non è mai esistito prima dell'uso di IBM su PS / 2 MCGA, VGA e 8514 / a. Wikipedia ha una buona spiegazione: en.wikipedia.org/wiki/D-subminiature
Alexios

3
Adoro l'inflazione superlativa di risoluzioni: ultra-wide-super-extended-hyper-quad-graphic-array. Non puoi chiamarlo ad alta definizione, perché un giorno non lo sarà!
Aidan il

2
@LackingConfidence se vuoi le prestazioni che le carte possono offrire, devi usare le loro singole interfacce proprietarie. Se non ti interessano le prestazioni, c'è il BIOS VGA per configurare un framebuffer VESA per te. Guarda il vesafb.txt di Linux per i dettagli (e ovviamente il codice sorgente anche in Linux).
derobert,

10

Scrivendo a un "indirizzo fisso" è stata essenzialmente la scrittura a una scheda video direttamente. Tutte quelle schede video ISA video (CGA, EGA, VGA) avevano essenzialmente RAM (e registri) mappate direttamente nella memoria della CPU e nello spazio I / O.

Quindi, quando hai scritto un byte in una determinata posizione di memoria, quel personaggio (in modalità testo) è apparso immediatamente sullo schermo, dal momento che in realtà hai scritto in una memoria situata su una scheda video e la scheda video ha appena usato quella memoria.

Oggi tutto sembra molto confuso, specialmente considerando che le schede video di oggi a volte sono chiamate VGA (e hanno una somiglianza con le "vere" schede VGA degli anni '90). Tuttavia, anche le schede moderne emulano alcune delle funzionalità di questi vecchi progetti (è possibile avviare DOS sulla maggior parte dei PC moderni e utilizzare programmi DOS che scrivono direttamente nella memoria video). Certo, oggigiorno è tutto emulato nel firmware della scheda video.


Quindi, come avrebbe senso con una scheda video integrata? Non riesco ancora a capire come VGA possa essere dipendente se la scheda non è dettata da VGA.

1
Anche se la tua scheda video è integrata, è comunque connessa al resto del sistema tramite una sorta di bus: PCIe, PCI, AGP, ISA, ecc. Questi bus possono collegare componenti esterni alla scheda madre e possono connettere componenti interni all'interno del chipset (SATA, video, ecc.)
haim

1
Ma come fanno gli autobus a sapere cosa fare degli indirizzi? Ciò differirà tra schede PCI e integrate, persino GPU o microprocessori grafici integrati.

1
Non vi è alcuna differenza, indipendentemente dal fatto che i cavi siano instradati al connettore PCI o se tutte le connessioni si trovano all'interno del Northbridge. it.wikipedia.org/wiki/Conventional_PCI#PCI_address_spaces
haimg

3

Non c'è davvero alcuna differenza: se stai scrivendo all'indirizzo della memoria video, l'hardware lo indirizzerà alla scheda video.

Se stai scrivendo il tuo sistema operativo, probabilmente dovrai fare molto lavoro per ottenere la scheda grafica per mappare la sua memoria come desideri, iniziando scansionando il bus PCI per trovare la scheda.


La mia scheda grafica è integrata nel mio Northbridge, non è connessa al PCI. Penso che sia un Intel GMA.

3
Il tuo processore grafico potrebbe non occupare uno slot PCI , ma è sicuramente seduto su uno dei bus del sistema ... anche se si trova sulla scheda madre, diamine anche se è integrato direttamente come parte di un sistema su un chip. Allo stesso modo dei controller SATA della scheda madre, o dei controller USB o ... Dovresti vedere la GPU integrata elencata (e controller SATA, USB, ecc.), Insieme al suo ID PCI, se usi un bus PCI sufficientemente barebone strumento di ispezione per il tuo sistema operativo. Sotto Linux è solo 'lspci' sulla riga di comando. Per Windows, preferisco "SIW" di Gabriel Topala. Mac ... potrebbe anche avere un 'lspci'?
FeRD

In questo caso il sistema operativo non ha importanza, perché l'architettura e la piattaforma hardware sono ciò che conta. Il sistema operativo è appena stato costruito sopra ed è il punto di accesso principale per interagire con tutto l'hardware con cui il kernel supporta un servizio. L'architettura e le specifiche sono ciò con cui ti stai interfaccia. Per determinare il tuo hardware basta cercare la scheda madre online. Questo è un inizio facile fairlu.

+1 a partire dalla scansione del bus PCI per trovare la scheda.
n611x007

2

Finora le risposte hanno spiegato che le vecchie schede video funzionavano avendo la mappatura della memoria video nello spazio degli indirizzi del processore. Questa era la memoria delle carte. Northbridge è in grado di reindirizzare le richieste di questa memoria mappata sul dispositivo VGA.

Inoltre, ci sono state molte espansioni e nuove modalità per le schede compatibili VGA. Ciò ha portato alla creazione di VESA BIOS Extensions (VBE), che operano attraverso int 10h. Questo supporta l'accelerazione 2D di base (BitBlt), i cursori hardware, il buffering doppio / triplo, ecc. Questo è il metodo di base per la visualizzazione a colori a qualsiasi risoluzione supportata (comprese le risoluzioni elevate). Questa memoria normalmente utilizzava anche la scheda interna, con il northbridge che eseguiva il reindirizzamento come con il classico VGA. Questo è il modo più semplice per utilizzare la grafica full collor / full-Resolution.

Successivamente abbiamo un metodo diretto per accedere a una GPU senza utilizzare il BIOS, che fornisce l'accesso alle stesse funzionalità di VBE e possibilmente a quelle aggiuntive. La mia comprensione è piuttosto confusa qui. Penso che questa interfaccia sia specifica del dispositivo, ma non ne sono affatto sicuro.

Esiste poi l'interfaccia GPU che può supportare l'acellerazione 3D / il calcolo GP-GPU ecc. Ciò richiede sicuramente i driver forniti dal produttore o le specifiche per l'uso completo e spesso ci sono differenze sostanziali anche tra i dispositivi dello stesso produttore.


Un driver devce è necessario solo su un sistema operativo. È possibile accedere a tutto l'hardware direttamente sull'architettura.

1
Certo, il problema con l'accesso diretto per le porzioni 3D è che le porzioni substanziarie del protocollo sono considerate segreti commerciali da alcuni dei principali produttori di GPU, e quindi a meno che non venga invertito il progetto o non venga firmato un accordo di non divulgazione, un driver che contiene già detta conoscenza è necessaria.
Kevin Cathcart,

Dipende dalla carta. Se è nVidia o AMD sarà proprietario. Un Intel GMA integrato sarebbe molto più semplice di un nVidia GEForce.

1
Ho aggiornato la linea in questione per reqad "subacquei o specifiche". Le specifiche sono sufficienti quando è possibile ottenerle, il che è effettivamente il caso di molte recenti soluzioni grafiche Intel.
Kevin Cathcart,

1
Per quello che vale, tutte le moderne schede grafiche Intel e la maggior parte delle schede grafiche AMD hanno pubblicato ampie parti delle loro specifiche di programmazione. Nvidia rimane ancora in silenzio sul problema, ma il driver grafico open source Nouveau contiene molta documentazione (sotto forma di codice sorgente) sulla programmazione delle schede grafiche Nvidia. Al momento Intel / AMD / Nvidia sono più aperti degli ARM ASIC proprietari; i chip integrati / mobili sono i più riservati di tutti.
allquixotic,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.