Je vais essayer de clarifier le "vaudou" derrière tout cela, en expliquant comment fonctionnait l'ancien matériel. Les GPU modernes ne fonctionnent pas comme cela, mais ils émulent l'interface CPU-carte graphique.
tl; dr
Les puces / cartes graphiques des années 80 et du début des années 90 ont dû produire une sortie extrêmement rapidement (par rapport à la vitesse d'horloge), de sorte qu'elles n'ont pas exécuté d'instructions, mais plutôt des circuits fixes. Ils ont juste aspiré les données de la RAM au fur et à mesure, alors le CPU avait simplement besoin de vider les données dans la RAM au bon endroit, et la puce graphique les récupérait et les jetait sur l'écran. Le processeur peut également définir diverses variables de configuration sur la puce graphique.
Détails:
Dans les années 80, les ordinateurs personnels avaient une puce graphique vraiment "stupide" qui avait quelques comportements fixes. Ce sera plus logique si je passe par le pipeline à l'envers.
Moniteurs CRT
Ces moniteurs avaient besoin d'entrées analogiques. En d'autres termes, une tension plus élevée = une sortie plus lumineuse. Les moniteurs couleur avaient 3 canaux (rouge, vert et bleu (ou, par exemple, YUV ou YIQ ) ). Ces tensions ont ajusté la force d'un faisceau d'électrons. Des trucs simples.
CRT surveille littéralement les électroaimants utilisés pour dévier le faisceau d'électrons de gauche à droite, puis recommencez un peu plus bas et allez de gauche à droite, et ainsi de haut en bas. Revenez ensuite en haut et répétez.
DAC
Les puces graphiques avaient un convertisseur "numérique-analogique" (un composant électrique très courant ). Cela a converti les valeurs numériques (par exemple 2, 4 ou 8 bits) en tensions pouvant être fournies au moniteur.
Balayage
Les puces graphiques devaient "suivre" le faisceau d'électrons, envoyant la bonne valeur au DAC afin qu'il puisse émettre la tension correspondante au bon moment. (Des horloges ont été utilisées pour cela que je n'entrerai pas dans les détails.) Il n'y avait pas de temps pour exécuter les instructions ici. Tout était câblé et prenait un petit nombre fixe de cycles d'horloge.
Modes vidéo
Les premières puces n'étaient pas très rapides et avaient une mémoire RAM limitée. De ce fait, ils avaient tendance à permettre la sélection de divers modes et autres paramètres de configuration, par exemple la couleur d'arrière-plan, la sélection de police, l'emplacement et la taille du curseur, la sélection de palette et les sprites. La plupart offraient un mode haute résolution "caractère uniquement" et des modes pixel par pixel de résolution inférieure.
Les trois modes VGA remarquables sont:
- Mode texte 16 (ish) couleur 80x25 (c'est essentiellement à quoi ressemble un écran de chargement du BIOS)
- Mode haute résolution 16 couleurs 640x480
- Mode haute couleur 256 couleurs 320x200
Pixels de peinture
En gros, selon le système graphique, le pipeline ressemble à ceci:
Emplacement actuel des pixels ⇒ Traiter les données de caractère / police / sprite / pixel / config ⇒ Valeurs des pixels ⇒ Palette ⇒ DAC
C'est cette 2e étape qui doit lire à partir de quelques emplacements RAM. Par exemple, en mode texte, un caractère d'un octet serait recherché. Cela formerait un index dans une table de polices. Un peu serait recherché dans ce tableau, indiquant si ce pixel devrait être la couleur de premier plan ou d'arrière-plan. Un troisième octet serait récupéré pour obtenir cette couleur de premier plan / arrière-plan. Dans l'ensemble, 3 octets lus à partir de la RAM.
Mais ce «flux» est à peu près un ensemble de circuits fixes simples qui sont disposés exactement comme, bien, le flux qui vient d'être décrit.
Interface de bus mémoire
Les processeurs Intel ont cet héritage ennuyeux appelé bus IO, mais ce n'est pas important, donc je ferai comme si ce n'était pas le cas.
Les CPU accèdent à la RAM en diffusant une requête READ ou WRITE et une adresse sur le bus mémoire. Bien que la plupart des adresses valides suscitent une réponse de la RAM, certaines plages sont gérées par les périphériques à la place. Par exemple, la LECTURE à partir d'une adresse particulière peut vous donner des informations sur les touches du clavier.
En écrivant dans les bonnes parties de la "gamme graphique", vous pouvez écrire à la fois le contenu de l'écran et également définir les paramètres de configuration de la carte graphique. La puce graphique "stupide" n'exécute aucune instruction. Il continue simplement à avancer, avec quelques octets circulant dans ses circuits et des tensions de sortie.
Avec VGA, il y a en fait de la RAM sur la carte graphique, car vous pouvez configurer la carte graphique pour des données prétraitées avant qu'elles ne soient écrites dans la RAM graphique, pour améliorer les performances dans certaines situations.
VESA
Les cartes graphiques après VGA offraient des résolutions plus élevées et une bonne profondeur de couleur mais fonctionnaient avec des principes similaires. De nombreuses cartes graphiques modernes offrent toujours une compatibilité avec cela pour permettre une résolution plus élevée lors du démarrage. Mais VGA est le "infaillible" que pratiquement toutes les cartes émuleront.