In Lernprogrammen zur Betriebssystementwicklung wird das Erreichen von Bildschirmdaten durch direktes Schreiben auf VGA oder EGA oder Super-VGA genau beschrieben. Was ich jedoch nicht verstehe, ist der tatsächliche Unterschied zwischen dem Schreiben auf eine feste Adresse für die Anzeige und dem Schreiben auf eine Grafikkarte direkt an Bord oder entfernbar? Ich möchte nur die grundsätzliche Klärung meiner Verwirrung in Bezug auf mein Problem
Und da es bei Variablen in Karten, Verbindungsschnittstellen, Bussen, Architekturen, System-on-a-Chip-Systemen, eingebetteten Systemen usw. nicht so einfach ist, finde ich es schwierig, einen Weg zu finden, die Idee dahinter zu verstehen. . Unterscheiden sich die festen Adressen von einer High-End-GPU zu einer Low-End-Onboard-GPU? Warum und warum nicht?
Es ist eines meiner Ziele bei der Programmierung, einen Kernel zu hosten und ein Betriebssystem zu erstellen, und in der Tat ein weit hergeholter Traum. Wenn ich die Terminologie nicht verstehe, behindere ich mich nicht nur in einigen Bereichen, sondern mache mich auch in Bezug auf Hardware zum Narren.
EXTRA: Einige dieser aktuellen Antworten sprechen von der Verwendung des maximal adressierbaren Arbeitsspeichers des Prozessors in den Details zu 16-Bit. Das Problem sind einige der anderen auftretenden Probleme:
1.Was ist mit dem eigenen Speicher der Karte? Das würde keinen System-RAM für Bildschirmdaten selbst benötigen.
2.Was ist mit höheren Bit-Modi? Und können Sie das BIOS im Real-Modus (x86) nicht vernachlässigen und den Speicher trotzdem über AL adressieren?
3.Wie würde das Konzept des Schreibens an eine feste Adresse auf einer GPU mit einer Vielzahl von Registern und einer Leistung am oder über dem tatsächlichen Mikroprozessor unverändert bleiben?
Antworten:
Technisch gesehen steht VGA für Video Graphics Array , einen 1987 eingeführten Videostandard von 640 x 480. Zu dieser Zeit war dies eine relativ hohe Auflösung, insbesondere für ein Farbdisplay.
Vor der Einführung von VGA hatten wir einige andere Grafikstandards, wie z. B. Herkules, der entweder Text (80 Zeilen à 25 Zeichen) oder relativ hochauflösende monochrome Grafiken (720 x 348 Pixel) anzeigt.
Weitere Standards waren zu dieser Zeit CGA ( Color Graphic Adapter ), mit dem bis zu 16 Farben bei einer Auflösung von bis zu 640x200 Pixel möglich waren. Das Ergebnis würde dann so aussehen:
Ein bemerkenswerter PC-Standard war schließlich der Enhanced Graphics Adapter (EGA), der Auflösungen von bis zu 640 × 350 mit 64 Farben ermöglichte.
(Ich ignoriere Nicht-PC-Standards, um dieses Verhältnis kurz zu halten. Wenn ich anfange, Atari- oder Amiga-Standards hinzuzufügen - bis zu 4096 Farben zu der Zeit! - dann wird dies ziemlich lang.)
1987 stellte IBM den PS2-Computer vor. Es gab einige bemerkenswerte Unterschiede zu seinen Vorgängern, 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, wenn Sie überhaupt eine Maus hatten). Standard-3½-Zoll-Laufwerke und ein neuer Grafikadapter mit hoher Auflösung und vielen Farben.
Dieser Grafikstandard wurde als Video Graphics Array bezeichnet . Es wurde ein 3-reihiger 15-poliger Anschluss verwendet, um analoge Signale an einen Monitor zu übertragen. Dieser Anschluss hat bis vor einigen Jahren Bestand, als er durch überlegene digitale Standards wie DVI und Display-Port ersetzt wurde.
Nach VGA
Die Fortschritte hielten nicht bei den VGA-Standards an. Kurz nach der Einführung von VGA entstanden neue Standards wie der 800x600 S- Uper-VGA (SVGA), der den gleichen Anschluss verwendete. (Hercules, CGA, EGA usw. hatten alle ihre eigenen Anschlüsse. Sie konnten keinen CGA-Monitor an eine VGA-Karte anschließen, auch wenn Sie versucht hatten, eine ausreichend niedrige Auflösung anzuzeigen.)
Seitdem sind wir auf Displays mit viel höherer Auflösung umgestiegen, aber der am häufigsten verwendete Name bleibt VGA. Auch wenn die korrekten Namen SVGA, XVGA, UXGA usw. usw. wären.
(Grafik mit freundlicher Genehmigung von Wikipedia)
Eine andere Sache, die als "VGA" bezeichnet wird, ist der DE15-Anschluss, der mit der ursprünglichen VGA-Karte verwendet wird. Dieser normalerweise blaue Anschluss ist nicht die einzige Möglichkeit, analoge "VGA-Signale" auf einen Monitor zu übertragen, aber die häufigste.
Links: DB5HD Rechts: Alternative VGA-Anschlüsse (normalerweise für bessere Qualität verwendet)
Ein dritter Weg, wie "VGA" verwendet wird, ist die Beschreibung einer Grafikkarte, obwohl diese Karte möglicherweise völlig andere Auflösungen als VGA liefert. Die Verwendung ist technisch falsch oder sollte zumindest eine "VGA-kompatible Karte" sein, aber gemeinsame Sprache macht diesen Unterschied nicht.
Damit bleibt das Schreiben an VGA
Dies ist darauf zurückzuführen, wie der Speicher eines IBM XT aufgeteilt wurde. Die CPU kann auf bis zu 1 MB (1024 KB) Speicher zugreifen. Die unteren 512 KB waren für RAM reserviert, die oberen 512 KB für Add-In-Karten, ROM usw.
In diesem oberen Bereich wurde der Speicher der VGA-Karte zugeordnet. Sie können direkt darauf schreiben und das Ergebnis wird auf dem Display angezeigt.
Dies wurde nicht nur für VGA verwendet, sondern auch für Alternativen der gleichen Generation.
( Quelle der ASCII-Karte).
quelle
Dx-nn
Steckerfamiliex
ist die Größe der Schalenn
die Anzahl der Stifte. Shell B hat die gleiche Größe wie ein paralleler Port (oder ein alter serieller 25-Pin-Port mit vollständiger Implementierung). Shell E hat die gleiche Größe wie der serielle Anschluss. So technisch , die VGA 15-poliger Stecker wären DE-15, aber das war nie ein Teil der Urbesetzung von Anschlüssen. AFAIK gab es vor dem Einsatz von IBM auf den PS / 2-MCGAs, VGAs und 8514 / a noch nie. Wikipedia hat eine gute Erklärung: en.wikipedia.org/wiki/D-subminiatureBeim Schreiben an eine "feste Adresse" wurde im Wesentlichen direkt auf eine Grafikkarte geschrieben. Bei all diesen Video-ISA-Grafikkarten (CGA, EGA, VGA) war im Wesentlichen etwas RAM (und Register) direkt auf den CPU-Speicher und den E / A-Raum abgebildet.
Wenn Sie also ein Byte in einen bestimmten Speicherort geschrieben haben, wurde dieses Zeichen (im Textmodus) sofort auf dem Bildschirm angezeigt, da Sie tatsächlich in einen Speicher auf einer Grafikkarte geschrieben haben und die Grafikkarte diesen Speicher gerade verwendet hat.
Dies alles sieht heutzutage sehr verwirrend aus, besonders wenn man bedenkt, dass heutige Grafikkarten manchmal als VGA bezeichnet werden (und sie ähneln "echten" VGA-Karten aus den 1990er Jahren). Sogar moderne Karten emulieren einige der Funktionen dieser älteren Designs (Sie können DOS auf den meisten modernen PCs starten und DOS-Programme verwenden, die direkt in den Videospeicher schreiben). Heutzutage ist natürlich alles in der Firmware der Grafikkarte nachgebildet.
quelle
Es gibt keinen wirklichen Unterschied: Wenn Sie an die Adresse des Videospeichers schreiben, leitet die Hardware diesen an die Grafikkarte weiter.
Wenn Sie Ihr eigenes Betriebssystem schreiben, müssen Sie wahrscheinlich sehr viel Arbeit darauf verwenden, dass die Grafikkarte den Speicher nach Ihren Wünschen abbildet. Beginnen Sie mit dem Scannen des PCI-Busses, um die Karte zu finden.
quelle
Bisher haben die Antworten erklärt, dass bei alten Grafikkarten der Videospeicher dem Adressraum des Prozessors zugeordnet wurde. Dies war das karteneigene Gedächtnis. Die Northbridge kann Anforderungen für diesen zugeordneten Speicher an das VGA-Gerät umleiten.
Hinzu kamen zahlreiche Erweiterungen und neue Modi für VGA-kompatible Karten. Dies führte zur Erstellung von VESA-BIOS-Erweiterungen (VBE), die durchlaufen
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). Dieser Speicher wird normalerweise auch kartenintern verwendet, wobei die Northbridge wie bei klassischem VGA eine Umleitung durchführt. Dies ist der einfachste Weg, um Grafiken in voller Collor / voller Auflösung zu nutzen.Als nächstes wird eine direkte Methode für den Zugriff auf eine GPU ohne Verwendung des BIOS beschrieben, die den Zugriff auf dieselben und möglicherweise zusätzliche Funktionen wie VBE ermöglicht. Mein Verständnis ist hier ziemlich verschwommen. Ich denke, diese Schnittstelle ist gerätespezifisch, aber da bin ich mir nicht sicher.
Dann gibt es die GPU-Schnittstelle, die 3D-Beschleunigung / GP-GPU-Berechnung usw. unterstützen kann. Dies erfordert auf jeden Fall vom Hersteller bereitgestellte Treiber oder Spezifikationen für die volle Nutzung, und häufig gibt es auch zwischen Geräten desselben Herstellers erhebliche Unterschiede.
quelle