Qu'est-ce que le VGA et quelle est sa différence avec une carte vidéo?

30

Les didacticiels de développement de systèmes d'exploitation identifient les données d'écran en écrivant directement sur VGA ou EGA ou Super VGA, mais ce que je n'obtiens pas, c'est la vraie différence entre écrire sur une adresse fixe pour l'affichage et écrire sur une carte vidéo directement, soit à bord ou amovible? Je veux juste la clarification de base de ma confusion à ce sujet sur ma question

Et comme ce n'est pas un cas si simple avec des variables dans les cartes, les interfaces de connexion, les bus, les architectures, le système sur une puce, les systèmes embarqués, etc., je trouve difficile de trouver un moyen de comprendre l'idée derrière ce 100% . Les adresses fixes différeraient-elles d'un GPU haut de gamme à un bas de gamme intégré? Pourquoi et pourquoi pas?

C'est l'un de mes objectifs en programmation d'héberger un noyau et de créer un système d'exploitation, et un rêve farfelu en effet. Ne pas comprendre la terminologie me gêne non seulement dans certains domaines, mais me fait paraître idiot sur les sujets du matériel.

EXTRA: Certaines de ces réponses actuelles parlent d'utiliser la mémoire adressable maximale du processeur dans les détails sur 16 bits. Le problème est quelques-uns de ces autres problèmes qui se posent:

Qu'en est-il de la mémoire de la carte? Cela n'aurait pas besoin de RAM système pour les données d'écran elles-mêmes.

2. Qu'en est-il des modes de bits supérieurs? Et ne pouvez-vous pas négliger le BIOS en mode réel (x86) et toujours adresser la mémoire via AL?

3.Comment le concept d'écriture sur une adresse fixe resterait-il inchangé sur un GPU avec une multitude de registres et des performances égales ou supérieures au microprocesseur réel?


la source
Pour un peu de contexte historique, consultez ma réponse à une question connexe: superuser.com/questions/357328/…
Russell Borogove
Il convient de noter qu'en plus de faire référence à la technologie / au protocole de la carte graphique, le terme est venu pour désigner des normes électriques et des résolutions d'affichage particulières. Il est difficile de deviner quelle signification est appliquée, même lorsque vous voyez les termes "en contexte".
Daniel R Hicks

Réponses:

65

Techniquement, VGA signifie Video Graphics Array , une norme vidéo 640x480 introduite en 1987. À l'époque, il s'agissait d'une résolution relativement élevée, en particulier pour un écran couleur.

Avant l' introduction de VGA, nous avions quelques autres normes graphiques, telles que les hercules qui affichaient soit du texte (80 lignes de 25 caractères) soit des graphiques monochromes haute définition relatifs (à 720x348 pixels).

À l'époque, les autres normes étaient le CGA ( adaptateur graphique couleur ), qui permettait également jusqu'à 16 couleurs avec une résolution allant jusqu'à 640x200 pixels. Le résultat ressemblerait à ceci:

entrez la description de l'image ici

Enfin, un standard PC remarquable était l'adaptateur graphique amélioré (EGA), qui permettait des résolutions jusqu'à 640 × 350 avec 64 couleurs.

(J'ignore les normes non PC pour garder ce rapport relativement court. Si je commence à ajouter des normes Atari ou Amiga - jusqu'à 4096 couleurs à l'époque! - alors cela deviendra assez long.)

Puis, en 1987, IBM a présenté l'ordinateur PS2. Il avait plusieurs différences notables par rapport à ses prédécesseurs, qui comprenaient de nouveaux ports pour les souris et les claviers (auparavant, les souris utilisaient des ports série à 25 broches ou 9 ports série, si vous aviez une souris); lecteurs standard de 3½ pouces et un nouvel adaptateur graphique avec une haute résolution et de nombreuses couleurs.

Cette norme graphique s'appelait Video Graphics Array . Il utilisait un connecteur à 3 rangées et 15 broches pour transférer des signaux analogiques vers un moniteur. Ce connecteur a duré jusqu'à il y a quelques années, lorsqu'il a été remplacé par des normes numériques supérieures telles que DVI et port d'affichage.

Après VGA

Les progrès ne se sont pas arrêtés aux normes VGA. Peu de temps après l'introduction du VGA, de nouveaux standards sont apparus, comme le 800x600 S uper VGA (SVGA), qui utilisait le même connecteur. (Hercules, CGA, EGA, etc. avaient tous leurs propres connecteurs. Vous ne pouviez pas connecter un moniteur CGA à une carte VGA, même si vous essayiez d'afficher une résolution suffisamment basse).

Depuis lors, nous sommes passés à des écrans de résolution beaucoup plus élevée, mais le nom le plus souvent utilisé reste VGA. Même si les noms corrects seraient SVGA, XVGA, UXGA, etc.

entrez la description de l'image ici

(Courtoisie graphique de Wikipedia)


Une autre chose qui s'appelle «VGA» est le connecteur DE15 utilisé avec la carte VGA d'origine. Ce connecteur généralement bleu n'est pas le seul moyen de transférer des «signaux VGA» analogiques vers un moniteur, mais c'est le plus courant.

Gauche: DB5HD Droite: connecteurs VGA alternatifs, généralement utilisés pour une meilleure qualité) entrez la description de l'image ici


Une troisième façon d'utiliser «VGA» consiste à décrire une carte graphique, même si cette carte peut produire des résolutions entièrement différentes de VGA. L'utilisation est techniquement incorrecte, ou devrait au moins être une «carte compatible VGA», mais le langage courant ne fait pas cette différence.


Cela laisse écrire à VGA

Cela vient de la façon dont la mémoire sur un IBM XT a été divisée. Le processeur peut accéder jusqu'à 1 Mo (1024 Ko) de mémoire. Les 512 Ko inférieurs étaient réservés à la RAM, les 512 Ko supérieurs aux cartes d'extension, ROM, etc.

Cette zone supérieure est l'endroit où la mémoire des cartes VGA a été mappée. Vous pouvez y écrire directement et le résultat s'affichera à l'écran.

Ce n'était pas seulement utilisé pour VGA, mais aussi pour des alternatives de même génération.

  G = RAM vidéo en mode graphique
  M = RAM vidéo en mode texte monochrome
  C = RAM vidéo en mode texte couleur
  V = BIOS de la ROM vidéo (serait "a" dans PS / 2)
  a = ROM de la carte adaptateur et RAM spéciale (espace UMA libre)
  r = BIOS ROM supplémentaire de la carte mère PS / 2 (UMA gratuit dans les systèmes non PS / 2)
  R = BIOS ROM de la carte mère
  b = IBM Cassette BASIC ROM (serait "R" dans les compatibles IBM)
  h = High Memory Area (HMA), si HIMEM.SYS est chargé.

Mémoire conventionnelle (de base):   
512 premiers Ko (ou 8 morceaux de 64 Ko). 

Zone de mémoire supérieure (UMA):

0A0000: GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
0B0000: MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
0C0000: VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
0D0000: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
0E0000: rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
0F0000: RRRRRRRRRRRRRRRRRRRRRRRRbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbRRRRRRRR

( Source de la carte ASCII).

Hennes
la source
1
Nit comment: Ce n'est pas un connecteur "DB15". Un connecteur DB15 n'a que 2 rangées de broches (tout comme DB9 et DB25). Le connecteur VGA a 3 rangées de broches et est souvent appelé "HD15" (HD pour haute densité par rapport à DB) (bien que certains affirment que "HD15" n'est pas un nom officiel).
sciure
2
Nit comment # 2: L'IBM PC d'origine a peut-être été publié avec une division 512/512, mais il a rapidement été remplacé par une division 640/384 (cela est référencé dans votre page source). La mémoire graphique commence à la marque 640K (hex 0A0000). Je ne pense pas que quiconque ait vraiment pris conscience d'une "limite de 512K" de la manière dont la "limite de 640K" est finalement devenue un problème bien connu.
Hellion du
2
@sawdust: HD15 n'est certainement pas un nom officiel (mais est aussi bon que de nos jours). Dans la Dx-nnfamille des connecteurs, xc'est la taille de la coque, nnc'est le nombre de broches. Shell B a la même taille qu'un port parallèle (ou un ancien port série à 25 broches à implémentation complète). Shell E est de la même taille que le port série. Donc, techniquement , le connecteur VGA à 15 broches serait DE-15, mais cela ne faisait jamais partie de la gamme originale de connecteurs. AFAIK, il n'a même jamais existé avant l'utilisation d'IBM sur les PS / 2 MCGA, VGA et 8514 / a. Wikipedia a une bonne explication: en.wikipedia.org/wiki/D-subminiature
Alexios
3
J'adore l'inflation superlative des résolutions: ultra-large-super-étendu-hyper-quad-array graphique. Vous ne pouvez pas l'appeler haute définition, car un jour ce ne sera pas!
aidan
2
@LackingConfidence si vous voulez les performances que les cartes peuvent offrir, vous devez utiliser leurs interfaces propriétaires individuelles. Si vous ne vous souciez pas des performances, il y a le BIOS VGA pour configurer un framebuffer VESA pour vous. Regardez vesafb.txt de Linux pour plus de détails (et bien sûr le code source aussi sous Linux).
derobert
10

Écrire sur une "adresse fixe" consistait essentiellement à écrire directement sur une carte vidéo. Toutes ces cartes vidéo ISA vidéo (CGA, EGA, VGA) avaient essentiellement de la RAM (et des registres) mappés directement dans la mémoire du processeur et l'espace d'E / S.

Donc, lorsque vous avez écrit un octet dans un certain emplacement de mémoire, ce caractère (en mode texte) est immédiatement apparu à l'écran, car vous avez en fait écrit dans une mémoire située sur une carte vidéo, et la carte vidéo vient d'utiliser cette mémoire.

Tout cela semble très déroutant aujourd'hui, surtout si l'on considère que les cartes vidéo d'aujourd'hui sont parfois appelées VGA (et elles ressemblent aux "vraies" cartes VGA des années 1990). Cependant, même les cartes modernes émulent certaines des fonctionnalités de ces conceptions plus anciennes (vous pouvez démarrer DOS sur la plupart des PC modernes et utiliser des programmes DOS qui écrivent directement dans la mémoire vidéo). Bien sûr, de nos jours, tout est émulé dans le firmware de la carte vidéo.

haimg
la source
Alors, comment cela aurait-il un sens avec une carte vidéo intégrée? Je ne comprends toujours pas comment VGA peut être les addreds si la carte n'est pas dictée par VGA.
1
Même si votre carte vidéo est intégrée, elle est toujours connectée au reste du système via une sorte de bus: PCIe, PCI, AGP, ISA, etc. Ces bus peuvent connecter des composants externes à la carte mère et peuvent connecter des composants internes à l'intérieur du chipset (SATA, vidéo, etc.)
haimg
1
Mais comment les bus savent-ils quoi faire des adresses? Cela variera entre les cartes PCI et embarquées, même les GPU ou les microprocesseurs graphiques intégrés.
1
Il n'y a aucune différence, que les fils soient acheminés vers le connecteur PCI ou que toutes les connexions se trouvent à l'intérieur de votre northbridge. en.wikipedia.org/wiki/Conventional_PCI#PCI_address_spaces
haimg
3

Il n'y a pas vraiment de différence: si vous écrivez à l'adresse de la mémoire vidéo, le matériel l'acheminera vers la carte vidéo.

Si vous écrivez votre propre système d'exploitation, vous devrez probablement faire beaucoup de travail pour que la carte graphique mappe sa mémoire comme vous le souhaitez, en commençant par balayer le bus PCI pour trouver la carte.

pjc50
la source
Ma carte graphique est embarquée sur mon northbridge, elle n'est pas connectée PCI. Je pense que c'est un Intel GMA.
3
Votre processeur graphique peut ne pas occuper un emplacement PCI , mais il est certainement assis sur l'un des bus du système ... même s'il est sur la carte mère, diable même s'il est intégré directement dans le cadre d'un système sur puce. De la même manière que les contrôleurs SATA de votre carte mère, ou les contrôleurs USB, ou ... Vous devriez voir le GPU intégré répertorié (et les contrôleurs SATA, USB, etc.), ainsi que son ID PCI, si vous utilisez un bus PCI suffisamment dépouillé outil d'inspection pour votre système d'exploitation. Sous linux, c'est juste «lspci» sur la ligne de commande. Pour Windows, je préfère le "SIW" de Gabriel Topala. Les Mac ... pourraient également avoir un "lspci"?
FeRD
Le système d'exploitation n'a pas d'importance dans un tel cas, car c'est l'architecture matérielle et la plate-forme qui comptent. Le système d'exploitation est juste construit au-dessus de cela, et c'est le principal point d'entrée pour interagir avec tout le matériel grâce au noyau qui prend en charge un service. La spécification de l'architecture et des nits est ce avec quoi vous vous connectez. Pour déterminer votre matériel, recherchez simplement votre carte mère en ligne. C'est un début facile et facile.
+1 en commençant par scanner le bus PCI pour trouver la carte.
n611x007
2

Jusqu'à présent, les réponses ont expliqué que les anciennes cartes vidéo fonctionnaient en ayant une mémoire vidéo mappée dans l'espace d'adressage du processeur. C'était la mémoire de la carte. Le northbridge sait rediriger les demandes de cette mémoire mappée vers le périphérique VGA.

Ensuite, il y a eu de nombreuses extensions et de nouveaux modes pour les cartes compatibles VGA. Cela a conduit à la création d'extensions VESA BIOS (VBE), qui fonctionnent via int 10h. Cela prend en charge l'accélération 2D de base (BitBlt), les curseurs matériels, la mise en mémoire tampon double / triple, etc. Il s'agit de la méthode de base pour l'affichage en couleur à toutes les résolutions prises en charge (y compris les résolutions élevées). Cette mémoire normalement utilisée interne à la carte aussi, avec le northbridge effectuant la redirection comme avec le VGA classique. Il s'agit de la manière la plus simple d'utiliser des graphiques en couleurs / résolution complète.

Ensuite, nous avons une méthode directe d'accès au GPU sans utiliser le bios, qui donne accès aux mêmes fonctionnalités que VBE, et éventuellement à d'autres. Ma compréhension est assez floue ici. Je pense que cette interface est spécifique à l'appareil, mais je n'en suis pas du tout sûr.

Ensuite, il y a l'interface GPU qui peut prendre en charge l'acellération 3D / le calcul GP-GPU, etc.

Kevin Cathcart
la source
Un pilote devce n'est nécessaire que sur un système d'exploitation. Tout le matériel est accessible directement sur l'architecture.
1
Bien sûr, le problème de l'accès direct pour les parties 3D est que les parties substantielles du protocole sont considérées comme des secrets commerciaux par certains des principaux fabricants de GPU, et donc, sauf ingénierie inversée ou accord de non-divulgation signé, un pilote qui contient déjà cette connaissance est nécessaire.
Kevin Cathcart
Cela dépend de la carte. Si c'est nVidia ou AMD, ça va être propriétaire. Un Intel GMA embarqué serait beaucoup plus facile qu'un nVidia GEForce.
1
J'ai mis à jour la ligne en question pour reqad "plongeurs ou spécifications". Les spécifications sont suffisantes lorsque vous pouvez les obtenir, ce qui est effectivement le cas pour de nombreuses solutions graphiques Intel récentes.
Kevin Cathcart
1
Pour ce que ça vaut, toutes les cartes graphiques Intel et la plupart des cartes graphiques AMD modernes ont publié de très grandes quantités de leurs spécifications de programmation. Nvidia reste silencieux sur la question, mais le pilote graphique open source Nouveau contient beaucoup de documentation (sous forme de code source) sur la programmation des cartes graphiques Nvidia. Intel / AMD / Nvidia sont plus ouverts que les ASIC ARM propriétaires de nos jours; les puces intégrées / mobiles sont les plus secrètes de toutes.
allquixotic