Les cartes graphiques

Chapitre 1.1 : Cartes d'affichages

Guy Grave

Découvrez l'évolution des cartes graphiques au cours du temps.

Commentez

- Titre : Les cartes graphiques

- Auteur : Guy Grave

- Parution : 13 mars 2014

- Mise à jour : 23 novembre 2019

- Licence : Le contenu de cet article est rédigé par Guy Grave et est mis à disposition selon les termes de la Licence Creative Commons Attribution - Pas d'Utilisation Commerciale - Pas de Modification 3.0 non transposé. Les logos Developpez.com, en-tête, pied de page, css, et look & feel de l'article sont Copyright ® 2013 Developpez.com.

Sommaire

- Navigation

- I. Mode texte

- I-A. Mémoire de caractères

- I-B. Contrôleur d'attribut

- I-C. Mémoires

- I-D. Le contrôleur graphique

- I-E. Contrôleur vidéo

- I-F. Digital-to-analog converter

- I-G. Résumé

- II. Mode graphique

- Navigation

Navigation

Sommaire

Tutoriel suivant : cartes accélératrices 2D

I - Mode texte

Les premières cartes graphiques étaient très simples : elles fonctionnaient en mode texte. Avec ces cartes graphiques, l'écran était considéré comme un quadrillage, formé de lignes et de colonnes. À l'intersection de chaque ligne et de chaque colonne, on trouve un caractère - et non un pixel, comme sur les écrans normaux. Avec ces cartes graphiques, il était impossible de modifier des pixels individuellement : on ne pouvait gérer l'affichage qu'à partir de caractères.

Ce mode texte est toujours présent dans nos cartes graphiques actuelles. Il est encore utilisé par le BIOS au démarrage de l'ordinateur, ou par les écrans bleus de Windows.

Une carte graphique en mode texte contient de nombreux composants, que je vais détailler dans ce qui suit.

I-A - Mémoire de caractères

Les caractères sont des lettres, des chiffres, ou des symboles courants, même si des caractères spéciaux sont disponibles. Ceux-ci sont encodés dans un jeu de caractères spécifique (ASCII, ISO8859, etc.). L'ensemble des caractères gérés par une carte graphique (y compris ceux créés par l'utilisateur) s'appelle la table des caractères. Certaines cartes graphiques permettent à l'utilisateur de créer ses propres caractères en modifiant une partie de cette table.

Ces caractères ont une taille fixe, que ce soit en largeur ou en hauteur. Par exemple, chaque caractère occupera 8 pixels de haut et 5 pixels de large.

La mémoire de caractères est très souvent une mémoire ROM. Dans les cas où la carte graphique permet à l'utilisateur de définir ses propres couleurs, cette ROM est couplée à une petite mémoire RAM. Au démarrage de la carte graphique, le contenu de la ROM est copié dans cette RAM, et c'est cette RAM qui est utilisée pour afficher les caractères. Dans cette mémoire, chaque caractère est représenté par une matrice de pixels.

I-B - Contrôleur d'attribut

Ces caractères se voient attribuer des informations en plus de leur code ASCII : à la suite de leur code ASCII, on peut trouver un octet qui indique si le caractère clignote, sa couleur, sa luminosité, si le caractère doit être souligné, etc. Une gestion minimale de la couleur est parfois présente.

La carte graphique contient un circuit chargé de gérer les attributs des caractères : Attribute Controller (ATC), aussi appelé le contrôleur d'attributs.

I-C - Mémoires

Le tampon de texte (text buffer) est une mémoire dans laquelle les caractères à afficher sont placés les uns à la suite des autres. Chaque caractère est alors stocké en mémoire sous la forme d'un code ASCII suivi d'un octet d'attributs.

I-D - Le contrôleur graphique

Pour communiquer avec notre carte graphique, le processeur va envoyer les caractères à afficher un par un. Ces caractères sont alors accumulés dans le tampon de texte au fur et à mesure de leur arrivée. Pour communiquer de cette façon avec le processeur, la carte graphique incorpore un circuit qui lui permet de communiquer avec le bus qui la relie au processeur. Ce circuit varie fortement suivant le bus utilisé.

Cette communication s'effectue par des registres, reliés à un contrôleur d'entrée-sortie. Lorsque le processeur veut envoyer un ordre à la carte graphique, il écrit dans ces registres, et la carte graphique réagira en fonction des valeurs présentes dans ces registres.

Ces registres sont reliés à un contrôleur graphique, qui va lire leur contenu, et en déduire quoi faire : configurer la carte graphique, écrire un caractère en mémoire, ajouter un caractère défini par l'utilisateur dans la mémoire de caractères, etc.

I-E - Contrôleur vidéo

Vient ensuite le Cathod Ray Tube Controller (CRTC) ou contrôleur de tube cathodique. Celui-ci gère l'affichage sur l'écran proprement dit. Comme vous le savez, nos écrans d'ordinateur fonctionnent par balayage : les pixels sont affichés les uns après les autres, en commençant par le pixel en haut à gauche, et en poursuivant ligne par ligne. Pour une carte en mode texte, ce contrôleur va donc aller chercher ces pixels les uns après les autres, en utilisant le contenu de la mémoire de caractères, et du tampon de texte.

L'affichage se faisait à une résolution qui était fixée une fois pour toutes, souvent 80 pixels de long pour 25 pixels de hauteur. Il s'agit d'un standard, créé en même temps que la toute première carte graphique monochrome : la Monochrome Display Adapter. Pour commencer, il doit se souvenir à quel pixel il en est rendu. Pour cela, il contient deux registres : un pour indiquer la ligne du pixel courant sur l'écran, et l'autre la colonne. À partir du contenu de ces deux registres, il va déduire à quel caractère cela correspond dans le tampon de texte. Pour cela, une partie des bits de ces deux registres sera utilisée. Ce caractère sera alors lu depuis le tampon de texte, et envoyé à la mémoire de caractères. Là, le code du caractère, et les bits restants des deux registres sont utilisés pour calculer l'adresse mémoire du pixel à afficher. Ce pixel est alors envoyé à l'écran.

Évidemment, nos deux registres de ligne et de colonne sont incrémentés régulièrement afin de passer au pixel suivant.

I-F - Digital-to-analog converter

Enfin, notre pixel étant disponible, celui-ci est envoyé à l'écran. Cela dit, les écrans assez anciens fonctionnent en analogique : ils ne comprennent par les données codées en binaire. Résultat : il faut faire la conversion. C'est le rôle du Digital-to-analog converter (DAC), un convertisseur qui traduit des données binaires en données analogiques.

Sur les écrans récents, ce DAC n'existe pas : les données sont envoyées sous forme numérique à l'écran, via une interface DVI ou autre, et sont automatiquement gérées par l'écran.

I-G - Résumé

Pour résumer, voici comment fonctionne une carte VGA :

II - Mode graphique

Nos cartes en mode texte sont assez rudimentaires. Aussi, celles-ci ont rapidement été remplacées par des cartes graphiques capables de colorier chaque pixel de l'écran individuellement. Il s'agit d'une avancée énorme, qui permet beaucoup plus de flexibilité dans l'affichage.

Ces cartes graphiques étaient conçues avec des composants assez similaires des composants des cartes graphiques à mode texte. Divers composants sont toutefois modifiés.

On remarque que la mémoire de caractères a disparu, ce qui est normal : la carte graphique ne gère plus les caractères.

La mémoire vidéo stocke des pixels, et non des caractères : elle contient une image à afficher à l'écran. On appelle cette mémoire vidéo le Frame Buffer ou tampon d'images.

Ensuite, le CRTC devient programmable, et peut maintenant gérer différentes résolutions. On peut ainsi changer la résolution de l'écran. Pour cela, ce contrôleur contient des registres : pour configurer ce contrôleur, il suffit d'écrire les valeurs adéquates dans ceux-ci.

De plus, la couleur fait son apparition. Toutefois, ces cartes graphiques codaient les couleurs sur 4, 8 bits, à la rigueur 16. Dans ces conditions, les couleurs n'étaient pas encodées au format RGB habituel : chaque couleur était prédéterminée par la carte vidéo, et se voyait attribuer un numéro.

Seul problème : les écrans ne gèrent que des données au format RGB. C'est-à-dire que chaque pixel se voit attribuer une teinte de bleu, une teinte de rouge, et une teinte de vert, chacune codée par un entier : plus cet entier est grand, plus le pixel est lumineux (0 correspond au noir, et la valeur maximale de l'entier au blanc). Ces cartes graphiques devaient donc effectuer la conversion. Pour cela, ces cartes graphiques disposaient d'un circuit, la Color Look-up Table ou table de correspondances de couleurs, qui traduisait ces numéros de couleur en couleur au format RGB.

Dans le cas le plus simple, il s'agissait d'une ROM qui mémorisait la couleur RGB pour chaque numéro : on obtenait la couleur au format RGB en envoyant notre numéro de couleur sur son bus d'adresse, et en récupérant la couleur RGB sur le bus après lecture. Dans d'autres cas, cette mémoire était une RAM, ce qui permettait de modifier la palette au fur et à mesure : on pouvait ainsi changer les couleurs de la palette d'une application à l'autre sans aucun problème. Cette Color Look-up Table était alors fusionnée avec le DAC, et formait ce qu'on appelait le RAMDAC.

Le DAC est toujours fidèle au poste. Seulement, celui-ci peut maintenant gérer les couleurs. À partir de données RGB, RGBA, etc., il peut maintenant fournir des signaux analogiques gérant plusieurs couleurs.

Navigation

Sommaire

Tutoriel suivant : cartes accélératrices 2D