Les didacticiels de développement de systèmes d'exploitation permettent de localiser les données à l'écran en écrivant directement sur VGA, EGA ou Super VGA, mais ce que je ne comprends pas, c'est quelle est la vraie différence entre écrire à une adresse fixe pour l'affichage et écrire directement sur une carte vidéo, à 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 connectives, les bus, les architectures, les systèmes sur puce, les systèmes embarqués, etc., il est difficile de trouver un moyen de comprendre l'idée qui se cache derrière ce 100%. . Les adresses fixes seraient-elles différentes d'un processeur graphique haut de gamme à un système embarqué bas de gamme? Pourquoi et pourquoi pas
C’est l’un de mes objectifs en matière de programmation d’héberger un noyau et de créer un système d’exploitation, et un rêve loufoque. Le fait de ne pas comprendre la terminologie ne me gêne pas seulement dans certains domaines, mais me fait paraître stupide en matière de matériel.
EXTRA: Certaines de ces réponses actuelles parlent d’utiliser la mémoire maximum adressable des processeurs dans les détails sur 16 bits. Le problème est parmi les autres problèmes qui se posent:
1.Qu'en est-il de la mémoire de la carte? Cela n’aurait pas besoin du système RAM pour les données d’écran elles-mêmes.
2.Qu'en est-il des modes à plus fort bit? Et ne pouvez-vous pas négliger le BIOS en mode réel (x86) tout en vous adressant à 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 actuel?
Techniquement, VGA signifie Video Graphics Array , une norme vidéo 640x480 introduite en 1987. À l'époque, cette résolution était relativement élevée, en particulier pour un affichage couleur.
Avant l'introduction de VGA, nous avions quelques autres standards graphiques, tels que Hercules , qui affichaient le texte ( 80 lignes de 25 caractères) ou pour des graphiques monochromes haute définition relatifs (à 720x348 pixels).
CGA ( Adaptateur graphique couleur ) était également une autre norme, qui autorisait également jusqu'à 16 couleurs avec une résolution pouvant atteindre 640x200 pixels. Le résultat devrait ressembler à ceci:
Enfin, l’adaptateur graphique amélioré (EGA), qui permettait des résolutions allant jusqu’à 640 × 350 avec 64 couleurs, constituait un standard informatique remarquable.
(J'ignore les normes non-PC pour garder ce relatif court. Si je commence à ajouter les normes Atari ou Amiga - jusqu'à 4096 couleurs à la fois! - alors cela sera assez long.)
Puis, en 1987, IBM a présenté l’ordinateur PS2. Il présentait plusieurs différences notables par rapport à ses prédécesseurs, notamment de nouveaux ports pour souris et claviers (auparavant, les souris utilisaient des ports série à 25 broches ou des ports série à 9 broches, si vous aviez une souris tout); des lecteurs standard 3½ pouces et un nouvel adaptateur graphique offrant une résolution élevée et de nombreuses couleurs.
Ce standard graphique s'appelait Video Graphics Array . Il utilisait un connecteur à 3 rangées et 15 broches pour transférer les signaux analogiques vers un moniteur. Ce connecteur est utilisé jusqu'à il y a quelques années, quand 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 avec les normes VGA. Peu de temps après l’introduction du VGA, de nouveaux standards sont apparus, tels que le VGA uper (SVGA) 800 x600 _ s --- , 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 beaucoup plus haute résolution, mais le nom le plus souvent utilisé reste VGA. Même si les noms corrects sont SVGA, XVGA, UXGA, etc.
(Courtoisie graphique de Wikipedia)
Une autre chose appelée "VGA" est le connecteur DE15 utilisé avec la carte VGA originale. 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é)
La troisième façon dont "VGA" est utilisée consiste à décrire une carte graphique, même si cette carte peut produire des résolutions entièrement différentes de celles de la carte VGA. L'utilisation est techniquement incorrecte ou devrait au moins être une "carte compatible VGA", mais la parole courante ne fait pas cette différence.
Cela laisse l'écriture sur VGA
Cela vient de la façon dont la mémoire sur un IBM XT a été divisée. Le processeur pouvait accéder à 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 les alternatives de même génération.
G = RAM vidéo vidéo en mode graphique M = RAM vidéo vidéo en mode texte monochrome C = RAM vidéo vidéo en mode texte V = Vidéo ROM BIOS (serait "a" dans PS/2) A = Adaptateur ROM et spécial RAM (espace UMA libre) R = Carte mère PS/2 supplémentaire ROM BIOS (UMA libre sur les systèmes non PS/2) R = Carte mère ROM BIOS B = Cassette IBM BASIC ROM (serait "R" dans les compatibles IBM) H = zone de mémoire haute (HMA), si HIMEM.SYS est chargé. Conventionnel (Base) Mémoire: Première tranche de 512 Ko (ou 8 morceaux de 64 Ko). Upper Memory Area (UMA): [. .____] [. .____] 0A0000: GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG [. .____] 0B0000: MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 0C0000 : VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 0D0000: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 0E0000:. rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr 0F0000:.. RRRRRRRRRRRRRRRRRRRRRRRRbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbRRRRRRRR
( Source de la carte ASCII).
Écrire sur une "adresse fixe" consistait essentiellement à écrire directement sur une carte vidéo. Toutes ces cartes vidéo ISA (CGA, EGA, VGA) avaient essentiellement une certaine RAM (et registres) directement mappée dans la mémoire de la CPU et dans l'espace d'E/S.
Ainsi, lorsque vous écrivez un octet dans un emplacement de mémoire donné, ce caractère (en mode texte) apparaît immédiatement à l'écran, puisque vous avez en fait écrit dans une mémoire située sur une carte vidéo et que celle-ci vient juste de l'utiliser.
Tout cela semble très déroutant aujourd'hui, d'autant plus que les cartes vidéo actuelles sont parfois appelées VGA (et elles ressemblent beaucoup aux "vraies" cartes VGA des années 1990). Cependant, même les cartes modernes émulent certaines des fonctionnalités de ces anciennes conceptions (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 micrologiciel de la carte vidéo.
Il n'y a pas vraiment de différence: si vous écrivez à l'adresse de la mémoire vidéo, le matériel la transmettra à la carte vidéo.
Si vous écrivez votre propre système d'exploitation, vous devrez probablement déployer beaucoup d'efforts 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.
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 des cartes. Le northbridge sait comment rediriger les demandes de cette mémoire mappée vers le périphérique VGA.
En plus de cela, il y avait de nombreuses extensions et de nouveaux modes pour les cartes compatibles VGA. Cela a conduit à la création de VESA BIOS Extensions (VBE), qui fonctionnent via int 10h
. Ceci 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 un affichage couleur à n'importe quelle résolution prise en charge (y compris les résolutions élevées). Cela utilisait aussi normalement la mémoire interne de la carte, le northbridge effectuant la redirection comme avec le VGA classique. C’est le moyen le plus simple d’utiliser des graphiques collor/résolution complète.
Ensuite, nous avons une méthode directe d’accès au GPU sans utiliser le BIOS, ce 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'acellulation 3D/le calcul GP-GPU, etc. Cela nécessite définitivement des pilotes ou des spécifications fournis par le fabricant pour une utilisation complète, et il existe souvent des différences substantielles même entre les périphériques du même fabricant.