Licence CC BY

Les cartes d'affichage

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.

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ère spécifique (ASCII, ISO-8859, etc.). L'ensemble des caractères gérés par une carte graphique (y compris ceux crées 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.

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 : ATC (Attribute Controller), aussi appelé le contrôleur d'attributs.

Mémoires

Le 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.

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 text buffer 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 le contenu de ces registres, 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.

Contrôleur vidéo

Vient ensuite le CRTC (Cathod Ray Tube Controller) ou contrôleur de tube cathodique. Celui-ci gère l'affichage sur l'écran proprement dit. Comme vous le savez, nos écrans d'ordinateurs 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 text buffer.

L'affichage se faisait à une résolution qui était fixée une fois pour toute, 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 Adaptater.

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 text buffer. Pour cela, une partie des bits de ces deux registres sera utilisée. Ce caractère sera alors lu depuis le text buffer, 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.

Architecture simplifiée du CRTC

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

DAC

Enfin, notre pixel étant disponible, celui-ci est envoyé à l'écran. Ceci dit, les écrans assez anciens fonctionnent en analogiques : ils ne comprennent par les données codées en binaire. Résultat : il faut faire la conversion. C'est le rôle du 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.

Résumé

Architecture d'une carte 2D en mode texte

Mode graphique

Nos cartes en mode texte sont assez rudimentaires. Aussi, celles-ci ont rapidement étés 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 aux composants des cartes graphiques à mode texte. Divers composants sont toutefois modifiés.

Architecture d'une carte 2D en mode graphique

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 une image à afficher à l'écran, et non des caractères : on appelle cette mémoire vidéo le Frame Buffer. Le CRTC devient programmable, et peu 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 ces couleurs sur 4 bits, 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, 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.