# Fonctionnement des cartes VGA

Le rôle principal d'une carte graphique est de permettre l'affichage d'informations sur un écran d'ordinateur. Ces informations peuvent être de plusieurs types : caractères alphanumériques, figures géométriques... Une carte graphique dite VGA doit simplement être compatible avec le standard d'affichage VGA (Video Graphics Array). Ce standard définit un certain nombre de modes d'affichage que la carte doit prendre en charge.
Le fonctionnement interne d'une carte VGA peut varier d'un constructeur à l'autre. Cependant, toute carte compatible avec la norme possède un certain nombre de composants standard pour assurer son fonctionnement. Ces composants vont permettre d'associer une couleur à chaque pixel de l'écran et de gérer le déplacement du spot du tube cathodique.
Les cartes graphiques modernes répondent à des standards beaucoup plus évolués que le standard VGA. Elles permettent des résolutions plus fines sur du matériel différent (par exemple écrans à cristaux liquides - LCD). Toutes ces nouvelles cartes émulent cependant les composants des premières cartes VGA, afin de rester compatibles avec les anciens programmes écrits pour VGA.

## Les modes vidéo du BIOS

Sur les architectures de type PC, les BIOS proposent un certain nombre de modes vidéo textes ou graphiques que le programmeur peut facilement utiliser (à condition d'utiliser un système d'exploitation permettant l'appel aux fonctions du BIOS, comme MS-DOS par exemple). On trouve parmi eux le mode 03h (mode texte 80x25, 16 couleurs) et le mode 13h (mode graphique 320x200, 256 couleurs). Les noms de ces modes viennent de la valeur que doit prendre un des paramètres de la fonction du BIOS qui change de mode d'affichage (h = hexadécimal).
Les modes vidéo du BIOS correspondent à des configurations particulières de la carte VGA, ils sont encore présents dans la quasi-totalité des cartes graphiques du marché afin de pouvoir assurer une compatibilité ascendante avec le parc informatique existant. Il est possible de créer et d'utiliser beaucoup d'autres modes pour les cartes graphiques en les configurant directement sans utiliser le BIOS. C'est ce que font les systèmes d'exploitation proposant des interfaces graphiques, ou les jeux vidéo, soit par l'entremise des drivers fournis par les fabricants, soit directement en écrivant dans les registres et la mémoire vidéo des cartes graphiques (mode DirectFB sous Linux par ex.).

## Les composants d'une carte VGA

Chacun des composants de la carte VGA réalise une opération bien précise. Tous ces composants sont paramétrables par le programmeur qui souhaite créer un mode vidéo. La configuration se fait en accédant aux registres de la carte graphique. Le mode 13h du BIOS, par exemple, correspond à une configuration précise de tous les registres. Il y a en tout plus d'une soixantaine de registres 8 bits sur la carte. Le nombre de configurations possibles (et donc de modes vidéo) est donc très grand. En pratique, seul un petit nombre d'entre eux sont effectivement utilisés.

### CRTC (Cathod Ray Tube Controller) ou contrôleur de tube cathodique

Une des fonctions de la carte est de commander le déplacement du spot sur l'écran. C'est le rôle dévolu au CRTC. Celui-ci possède un grand nombre de registres configurables par le programmeur qui influent directement sur les mouvements du spot. C'est grâce au CRTC qu'on peut, par exemple, modifier la taille et la résolution de l’image.

### La mémoire vidéo (ou mémoire d'écran)

L'image affichée à l'écran est stockée dans la mémoire vidéo. Lorsqu'on est en mode texte, ce sont les caractères ASCII et leur couleur qui sont stockées. En mode graphique, la couleur de chaque pixel est stockée dans la mémoire d'écran.
Il existe un lien fort entre la mémoire vidéo et le CRTC. En effet, le CRTC connaît en permanence la position du spot. Il va donc pouvoir sélectionner l’adresse dans la mémoire du pixel (en mode graphique) ou du caractère (en mode texte) que le spot doit afficher à l’écran. Une deuxième fonction du CRTC est donc de calculer l’adresse dans la mémoire vidéo qui contient l'information à afficher sur le moniteur.

### Le GDC (Graphics Data Controller) ou contrôleur graphique

Le processeur doit pouvoir écrire dans la mémoire vidéo, pour modifier le texte ou changer l'image affichée à l'écran. Le contrôleur graphique propose plusieurs modes d'écriture et de lecture de la mémoire vidéo. Ces différents modes servent à accélérer les modifications de l'affichage lors de remplissage de zones avec une même couleur par exemple, ou des copies de portions d'écran.
Le contrôleur graphique est donc l'intermédiaire entre le processeur et la mémoire graphique.

### Le DAC (Digital to Analog Converter) ou convertisseur numérique analogique

Le moniteur doit commander l'intensité des trois faisceaux d'électrons (rouge, vert, bleu) qui vont permettre l'affichage des différentes couleurs. Il doit recevoir des signaux analogiques pour commander ces faisceaux, et non des signaux numériques. Le DAC possède une palette qui, à un index de couleur (choisi parmi 256), associe les proportions des trois signaux de base rouge, vert et bleu. Ces proportions peuvent être modifiées par le programmeur pour chacune des 256 couleurs. Le DAC se charge alors de traduire les proportions associées à une couleur en signaux analogiques parfaitement compréhensibles par le moniteur.

### L'ATC (Attribute Controller) ou contrôleur d'attributs

Périodiquement, les données de la mémoire vidéo doivent être analysées pour en déduire l'image affichée à l'écran. Le contrôleur d'attributs va être chargé, durant l'affichage, de déduire à partir des informations en mémoire vidéo (caractères en mode texte ou couleur de pixel en mode graphique) l'index dans la palette du DAC.

### Le TS (Timing Sequencer) ou séquenceur de timing

Le séquenceur synchronise tous les composants de la carte cités jusqu'ici. Il est chargé de la gestion de l'horloge. Il s'occupe du rafraîchissement de la mémoire vidéo et de la gestion des accès concurrents à cette mémoire.
On affecte aussi au séquenceur la gestion du mode d'adressage de la mémoire vidéo. Cette mémoire à une capacité de 256 ko. Pourtant, le processeur ne dispose que d'un espace d'adressage de 64 ko pour y accéder. Ceci est dû au fait que la mémoire vidéo est composée de 4 "plans" de 64 ko. Le choix du plan lorsque le processeur accède à la mémoire dépend du mode d'adressage utilisé.

### Vue d'ensemble
## Programmation de la carte VGA

Tous les composants de la carte VGA étudiés ci-dessus possèdent des registres 8 bits modifiables par le programmeur (à l'exception de la mémoire vidéo). Les valeurs contenues dans tous les registres caractérisent un mode vidéo. Par exemple, les modes 03h et 13h du BIOS correspondent tous deux à une configuration particulière des registres de la carte. Au lieu d'utiliser les modes prédéfinis du BIOS, le programmeur peut définir sa propre configuration de la carte via les registres, ce qui permet d'obtenir quelques modes graphiques plus évolués que ceux du BIOS. Notamment, le mode X, utilisé par certains jeux vidéo, permet d'afficher 320x240 pixels en 256 couleurs (contre 320x200 et 256 couleurs pour le mode 13h).
L'accès aux registres de la carte VGA se fait en utilisant les instructions assembleur in et out (pour les processeurs x86) sur le port du composant de la carte auquel on accède.