Ich werde versuchen, das "Voodoo" dahinter aufzuklären, indem ich erkläre, wie die alte Hardware funktioniert. Moderne GPUs funktionieren nicht so, aber sie emulieren die Schnittstelle zwischen CPU und Grafikkarte.
tl; dr
Grafikchips / -karten mussten in den 80er und frühen 90er Jahren extrem schnell (im Verhältnis zur Taktrate) ausgegeben werden, damit sie keine Befehle ausführten, sondern feste Schaltkreise hatten. Sie saugten gerade Daten aus dem RAM, als sie gingen, also musste die CPU einfach Daten im RAM an der richtigen Stelle ablegen, und der Grafikchip nahm sie auf und warf sie auf den Bildschirm. Die CPU könnte auch verschiedene Konfigurationsvariablen auf dem Grafikchip einstellen.
Einzelheiten:
In den 80er Jahren hatten Heimcomputer einen wirklich "dummen" Grafikchip, der ein paar feste Verhaltensweisen aufwies. Am sinnvollsten ist es, wenn ich rückwärts durch die Pipeline gehe.
CRT-Monitore
Diese Monitore benötigten analoge Eingänge. Mit anderen Worten, höhere Spannung = hellere Ausgabe. Farbmonitore hatten 3 Kanäle (Rot, Grün und Blau (oder zB YUV oder YIQ ) ). Diese Spannungen stellten die Stärke eines Elektronenstrahls ein. Einfaches Zeug.
CRT-Monitore verwendeten buchstäblich Elektromagnete, um den Elektronenstrahl von links nach rechts abzulenken, und begannen dann wieder ein wenig tiefer und gingen von links nach rechts und so weiter von oben nach unten. Dann zurück nach oben und wiederholen.
DAC
Grafikchips hatten einen "Digital-Analog" -Wandler (eine sehr verbreitete elektrische Komponente ). Diese konvertierten digitale Werte (z. B. 2, 4 oder 8 Bits) in Spannungen, die an den Monitor geliefert werden könnten.
Scannen
Grafikchips mussten mit dem Elektronenstrahl "mithalten" und den richtigen Wert an den DAC senden, damit dieser zur richtigen Zeit die entsprechende Spannung ausgeben konnte. (Hierfür wurden Uhren verwendet, auf die ich nicht näher eingehen werde.) Es war keine Zeit, hier Anweisungen auszuführen. Alles war fest verdrahtet und dauerte eine kleine, feste Anzahl von Taktzyklen.
Videomodi
Frühe Chips waren nicht sehr schnell und hatten wenig RAM. Aus diesem Grund ermöglichten sie in der Regel die Auswahl verschiedener Modi und anderer Konfigurationsparameter, z. B. Hintergrundfarbe, Schriftartenauswahl, Cursorposition und -größe, Palettenauswahl und Sprites. Die meisten boten einen hochauflösenden "Nur-Zeichen" -Modus und niedrigauflösende pixelweise Modi.
Die drei bemerkenswerten VGA-Modi sind:
- Textmodus in 16 (ish) Farben (80 x 25) (so sieht ein BIOS-Ladebildschirm im Wesentlichen aus)
- 16 Farben 640x480 hochauflösender Modus
- High-Color-Modus mit 256 Farben (320 x 200)
Pixel malen
Je nach Grafiksystem sieht die Pipeline ungefähr so aus:
Aktueller Pixelstandort ⇒ Zeichen / Schrift / Sprite / Pixel / Konfigurationsdaten verarbeiten ⇒ Pixelwerte ⇒ Palette ⇒ DAC
Es ist der zweite Schritt, der von einigen RAM-Positionen gelesen werden muss. Im Textmodus wird beispielsweise ein 1-Byte-Zeichen gesucht. Dies würde einen Index für eine Schriftartentabelle bilden. Aus dieser Tabelle wird ein bisschen nachgeschlagen, um anzugeben, ob dieses Pixel die Vordergrund- oder Hintergrundfarbe sein soll. Ein drittes Byte würde abgerufen, um diese Vordergrund- / Hintergrundfarbe zu erhalten. Insgesamt werden 3 Bytes aus dem RAM gelesen.
Aber dieser "Fluss" ist so ziemlich ein Satz einfacher fester Schaltkreise, die genau so angeordnet sind, wie der gerade beschriebene Fluss.
Speicherbus-Schnittstelle
Intel-CPUs haben dieses nervige Legacy-Ding namens IO-Bus, aber es ist nicht wichtig, also werde ich so tun, als wäre es nicht da.
CPUs greifen auf den RAM zu, indem sie eine READ- oder WRITE-Anforderung und eine Adresse auf dem Speicherbus senden. Obwohl die meisten gültigen Adressen eine Antwort vom RAM auslösen, werden bestimmte Bereiche stattdessen von Geräten verarbeitet . Wenn Sie beispielsweise von einer bestimmten Adresse aus LESEN, erhalten Sie möglicherweise Informationen zu Tastaturtastendrücken.
Wenn Sie in die richtigen Bereiche des "Grafikbereichs" schreiben, können Sie sowohl den Bildschirminhalt als auch die Konfigurationsparameter für die Grafikkarte festlegen. Der "blöde" Grafikchip führt keine Anweisungen aus. Es geht einfach weiter, ein paar Bytes fließen durch seine Schaltkreise und geben Spannungen aus.
Bei VGA befindet sich tatsächlich RAM auf der Grafikkarte, da Sie die Grafikkarte für vorverarbeitete Daten konfigurieren können, bevor sie in den Grafik-RAM geschrieben werden, um die Leistung in bestimmten Situationen zu steigern.
VESA
Grafikkarten nach VGA boten höhere Auflösungen und eine gute Farbtiefe, arbeiteten jedoch nach ähnlichen Prinzipien. Viele moderne Grafikkarten bieten immer noch Kompatibilität damit, um eine höhere Auflösung beim Booten zu ermöglichen. Aber VGA ist die "narrensichere" Variante, die praktisch jede Karte emuliert.