
Tutorials zur Betriebssystementwicklung zeigen, wie Bildschirmdaten durch direktes Schreiben auf VGA, EGA oder Super VGA erreicht werden können. Was ich jedoch nicht verstehe, ist der tatsächliche Unterschied zwischen dem Schreiben an eine feste Adresse zur Anzeige und dem direkten Schreiben auf eine Grafikkarte, entweder integriert oder herausnehmbar. Ich möchte nur die grundlegende Klärung meiner Verwirrung zu diesem Thema.
Und da es sich bei den Variablen in Karten, Verbindungsschnittstellen, Bussen, Architekturen, Systemen auf einem Chip, eingebetteten Systemen usw. nicht um einen so einfachen Fall handelt, fällt es mir schwer, die Idee dahinter zu 100 % zu verstehen. Würden sich die festen Adressen von einer High-End-GPU zu einer Low-End-Onboard-GPU unterscheiden? Warum und warum nicht?
Eines meiner Ziele als Programmierer ist es, einen Kernel zu hosten und ein Betriebssystem zu erstellen. Das ist in der Tat ein weit hergeholter Traum. Die Terminologie nicht zu verstehen, behindert mich nicht nur in einigen Bereichen, sondern lässt mich auch in Sachen Hardware dumm erscheinen.
EXTRA: Einige dieser aktuellen Antworten sprechen davon, den maximal adressierbaren Speicher des Prozessors in den Einzelheiten auf 16 Bit zu verwenden. Das Problem sind einige dieser anderen auftretenden Probleme:
1. Was ist mit dem eigenen Speicher der Karte? Für die Bildschirmdaten selbst wäre kein System-RAM erforderlich.
2. Was ist mit den höherbitratigen Modi? Und kann man das BIOS im Realmodus (x86) nicht vernachlässigen und trotzdem den Speicher über AL ansprechen?
3. Wie könnte das Konzept des Schreibens an eine feste Adresse auf einer GPU mit einer Vielzahl von Registern und einer Leistung auf oder über der des tatsächlichen Mikroprozessors unverändert bleiben?
Antwort1
Technisch steht VGA fürVideografik-Array, ein 1987 eingeführter Videostandard mit 640 x 480 Pixeln. Damals war das eine relativ hohe Auflösung, insbesondere für ein Farbdisplay.
VorAls VGA eingeführt wurde, gab es noch ein paar andere Grafikstandards, wie zum BeispielHerkulesdie entweder Text (80 Zeilen mit 25 Zeichen) oder monochrome Grafiken mit relativ hoher Auflösung (720 x 348 Pixel) anzeigte.
Weitere Standards zu dieser Zeit waren CGA (Farbgrafikadapter), die ebenfalls bis zu 16 Farben bei einer Auflösung von bis zu 640x200 Pixeln ermöglicht. Das Ergebnis davon sähe dann so aus:
Ein bemerkenswerter PC-Standard war schließlich der Enhanced Graphics Adapter (EGA), der Auflösungen bis zu 640×350 mit 64 Farben ermöglichte.
(Ich ignoriere Nicht-PC-Standards, um dies relativ kurz zu halten. Wenn ich anfange, Atari- oder Amiga-Standards hinzuzufügen – damals bis zu 4096 Farben! –, wird dies ziemlich lang.)
Dann stellte IBM 1987 den PS2-Computer vor. Er wies mehrere bemerkenswerte Unterschiede zu seinen Vorgängern auf, darunter neue Anschlüsse für Mäuse und Tastaturen (zuvor verwendeten Mäuse 25-polige serielle Anschlüsse oder 9-polige serielle Anschlüsse,WennSie hatten überhaupt eine Maus); Standard-3½-Zoll-Laufwerke und einen neuen Grafikadapter mit hoher Auflösung und vielen Farben.
Dieser Grafikstandard wurde genanntVideografik-Array. Es wurde ein dreireihiger 15-poliger Anschluss verwendet, um analoge Signale an einen Monitor zu übertragen. Dieser Anschluss hielt bis vor einigen Jahren, als er durch bessere digitale Standards wie DVI und DisplayPort ersetzt wurde.
Nach VGA
Der Fortschritt blieb nicht bei den VGA-Standards stehen. Kurz nach der Einführung von VGA entstanden neue Standards wie der 800x600SSuper-VGA (SVGA), das denselben Anschluss verwendete. (Hercules, CGA, EGA usw. hatten alle ihre eigenen Anschlüsse. Sie konnten keinen CGA-Monitor an eine VGA-Karte anschließen, nicht einmal, wenn Sie versuchten, eine ausreichend niedrige Auflösung anzuzeigen.)
Seitdem sind wir zu Displays mit viel höherer Auflösung übergegangen, aber die am häufigsten verwendete Bezeichnung bleibt VGA. Auch wenn die korrekten Namen SVGA, XVGA, UXGA usw. lauten würden.
(Grafik mit freundlicher Genehmigung von Wikipedia)
Ein weiteres Ding, das als „VGA“ bezeichnet wird, ist der DE15-Anschluss, der mit der originalen VGA-Karte verwendet wird. Dieser normalerweise blaue Anschluss ist nicht die einzige Möglichkeit, analoge „VGA-Signale“ an einen Monitor zu übertragen, aber er ist die gebräuchlichste.
Links: DB5HD Rechts: Alternative VGA-Anschlüsse, normalerweise für bessere Qualität verwendet)
Eine dritte Möglichkeit, „VGA“ zu verwenden, besteht darin, eine Grafikkarte zu beschreiben, obwohl diese Karte möglicherweise ganz andere Auflösungen als VGA erzeugt. Die Verwendung ist technisch falsch oder sollte zumindest „VGA-kompatible Karte“ lauten, aber im allgemeinen Sprachgebrauch macht das keinen Unterschied.
Das lässtSchreiben auf VGA
Dies liegt an der Art und Weise, wie der Speicher auf einem IBM XT aufgeteilt wurde. Die CPU konnte auf bis zu 1 MiB (1024 KiB) Speicher zugreifen. Die unteren 512 KiB waren für RAM reserviert, die oberen 512 KiB für Erweiterungskarten, ROM usw.
In diesem oberen Bereich wurde der Speicher der VGA-Karte abgebildet. Sie konnten direkt darauf schreiben und das Ergebnis wurde auf dem Display angezeigt.
Dies wurde nicht nur für VGA, sondern auch für Alternativen derselben Generation verwendet.
G = Grafikmodus-Video-RAM M = Monochromer Textmodus-Video-RAM C = Farbtextmodus-Video-RAM V = Video-ROM-BIOS (entspricht „a“ in PS/2) a = Adapterplatinen-ROM und Spezial-RAM (freier UMA-Speicherplatz) r = Zusätzliches PS/2-Motherboard-ROM-BIOS (kostenloses UMA in Nicht-PS/2-Systemen) R = Motherboard-ROM-BIOS b = IBM Cassette BASIC ROM (entspricht „R“ bei IBM-kompatiblen Laufwerken) h = High Memory Area (HMA), wenn HIMEM.SYS geladen ist. Konventioneller (Basis-)Speicher: Erste 512 KB (oder 8 Blöcke mit je 64 KB). Oberer Speicherbereich (UMA): 0A0000: GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG 0B0000: MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 0C0000: VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 0D0000: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 0E0000: rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr 0F0000: RRRRRRRRRRRRRRRRRRRRRRRRbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbRRRRRRRR
(Quelleder ASCII-Karte).
Antwort2
Schreiben an eine „feste Adresse“Warim Wesentlichen direktes Schreiben auf eine Grafikkarte. Alle diese Video-ISA-Grafikkarten (CGA, EGA, VGA) hatten im Wesentlichen etwas RAM (und Register), das direkt in den Speicher und den E/A-Speicher der CPUs abgebildet war.
Wenn Sie also ein Byte an einen bestimmten Speicherort geschrieben haben, erschien dieses Zeichen (im Textmodus) sofort auf dem Bildschirm, da Sie tatsächlich in einen Speicher geschrieben haben, der sich auf einer Grafikkarte befand, und die Grafikkarte diesen Speicher einfach verwendet hat.
Das alles sieht heute sehr verwirrend aus, insbesondere wenn man bedenkt, dass heutige Grafikkarten manchmal VGA genannt werden (und sie haben Ähnlichkeit mit „echten“ VGA-Karten aus den 1990er Jahren). Allerdings emulieren sogar moderne Karten einige der Funktionen dieser älteren Designs (Sie können auf den meisten modernen PCs DOS booten und DOS-Programme verwenden, die direkt in den Videospeicher schreiben). Natürlich wird heutzutage alles in der Firmware der Grafikkarte emuliert.
Antwort3
Es gibt eigentlich keinen Unterschied: Wenn Sie an die Adresse des Videospeichers schreiben, leitet die Hardware dies an die Grafikkarte weiter.
Wenn Sie Ihr eigenes Betriebssystem schreiben, müssen Sie wahrscheinlich eine Menge Arbeit investieren, um die Grafikkarte dazu zu bringen, ihren Speicher wie gewünscht zuzuordnen. Beginnen Sie damit, den PCI-Bus zu scannen, um die Karte zu finden.
Antwort4
Bisher wurde in den Antworten erklärt, dass alte Grafikkarten so funktionierten, dass der Videospeicher in den Adressraum des Prozessors abgebildet wurde. Dies war der eigene Speicher der Karte. Die Northbridge kann Anfragen für diesen abgebildeten Speicher an das VGA-Gerät umleiten.
Darüber hinaus gab es zahlreiche Erweiterungen und neue Modi für VGA-kompatible Karten. Dies führte zur Entwicklung von VESA BIOS Extensions (VBE), die über betrieben werden int 10h
. Dies unterstützt grundlegende 2D-Beschleunigung (BitBlt), Hardware-Cursor, Doppel-/Dreifachpufferung usw. Dies ist die grundlegende Methode für die Vollfarbanzeige bei jeder unterstützten Auflösung (einschließlich hoher Auflösungen). Dabei wird normalerweise auch der interne Speicher der Karte verwendet, wobei die Northbridge eine Umleitung wie bei klassischem VGA durchführt. Dies ist die einfachste Möglichkeit, Grafiken in Vollfarbe/voller Auflösung zu nutzen.
Als nächstes haben wir eine direkte Methode, um auf eine GPU zuzugreifen, ohne das BIOS zu verwenden, die Zugriff auf dieselben und möglicherweise zusätzliche Funktionen wie VBE bietet. Mein Verständnis ist hier ziemlich verschwommen. Ich denke, diese Schnittstelle ist gerätespezifisch, aber da bin ich mir überhaupt nicht sicher.
Dann gibt es noch die GPU-Schnittstelle, die 3D-Beschleunigung/GP-GPU-Berechnungen usw. unterstützen kann. Für die vollständige Nutzung sind unbedingt vom Hersteller bereitgestellte Treiber oder Spezifikationen erforderlich, und häufig gibt es sogar zwischen Geräten desselben Herstellers erhebliche Unterschiede.