Mein stetig wachsendes Interesse an Computern lässt mich tiefere Fragen stellen, die wir anscheinend nicht mehr stellen müssen. Unsere Computer, beim Booten, soweit ich es verstehe, sind im Textmodus , in dem ein Zeichen angezeigt wird , kann mit Hilfe des Software - Interrupt 0x10
bei AH=0x0e
. Wir haben alle die berühmte Boot-Schriftart gesehen, die immer gleich aussieht, unabhängig davon, welcher Computer bootet.
Wie um alles in der Welt geben Computer Grafiken beispielsweise unterhalb des Betriebssystems auf der niedrigsten Ebene aus? Und Grafiken werden mit Software-Interrupts sicherlich nicht pixelweise ausgegeben, da dies sehr langsam klingt?
Gibt es einen Standard, der die grundlegende Ausgabe von Eckpunkten, Polygonen, Schriftarten usw. definiert (beispielsweise unter OpenGL, die OpenGL möglicherweise verwendet)? Was mich fragen lässt, ist, warum Betriebssysteme oft ohne installierte offizielle Treiber funktionieren. Wie haben sie das gemacht?
Entschuldigung, wenn meine Annahmen falsch sind. Ich wäre sehr dankbar für die Ausarbeitung dieser Themen!
Antworten:
Das ist (teilweise) die Rolle des BIOS.
Das Basic Input Output System des Computers ist dafür verantwortlich, trotz solcher Unterschiede zwischen den tatsächlichen Computern eine gemeinsame Schnittstelle zu Betriebssystemen bereitzustellen.
Das heißt, für Grafiken gibt es verschiedene Möglichkeiten, auf dem Bildschirm zu zeichnen. Es gibt TTY-Befehle, die Sie an das BIOS senden können, aber das ist nur im Real-Modus. Wenn Sie etwas im geschützten Modus zeichnen möchten, müssen Sie VGA zum Zeichnen verwenden. Ich kann es nicht besser erklären als OSDev, also schau hier nach mehr Informationen - aber grundsätzlich kannst du in den Speicher schreiben (der Videospeicher ist speicherabgebildet), beginnend mit der Adresse,
0xB8000
um Dinge auf dem Bildschirm zu zeichnen.Wenn Sie eine höhere Auflösung als VGA benötigen, müssen Sie die VESA-BIOS-Erweiterungen verwenden. Ich bin damit nicht vertraut, aber versuche, im GRUB-Quellcode weitere Informationen zu finden.
Einige nützliche Hinweise:
GRUB-Quellcode :
OSDev Wiki (Zeichnen im geschützten Modus)
VESA BIOS-Erweiterungen
Wenn Sie mit D vertraut sind, habe ich vor einiger Zeit einen kleinen Bootloader geschrieben, der in der Lage war, auf den Bildschirm zu schreiben (nur Text). Wenn Sie interessiert sind, ist hier der Code:
quelle
memory-mapped
, dass es einen "Puffer" -Bereich im RAM gibt, in dem die CPU (oder eine andere DMA-Einheit?) im Namen der Grafikkarte und des Programms, das versucht, auf das Display zu schreiben, lesen und schreiben kann?Seit den Anfängen des IBM-PCs und seiner Klone war die Hardware des Anzeigeadapters sehr einfach: Ein kleiner Speicherblock war einem Raster von Zeichenzellen (80 x 25 Zeichen im Standardmodus) mit zwei Byte Speicher für jede Zelle zugeordnet . Ein Byte wählte das Zeichen und das andere die "Attribute" aus - Vordergrund- und Hintergrundfarbe sowie Blinksteuerung für Farbadapter; Fett, unterstrichen, blinkend oder invertiert bei Monochrom-Adaptern. Die Hardware hat Pixel aus einer ROM-Tabelle von Zeichenformen gemäß dem Inhalt des Zeichenspeichers nachgeschlagen.
Um ein gewisses Maß an Hardwareunabhängigkeit zu bieten, musste für die BIOS-Schnittstelle zur Zeichentabelle ein Software-Interrupt ausgeführt werden, um eine einzelne Zeichenzelle auf dem Bildschirm festzulegen. Dies war langsam und ineffizient. Der Zeichenspeicher war jedoch auch direkt von der CPU adressierbar. Wenn Sie also wissen, welche Hardware vorhanden ist, können Sie stattdessen direkt in den Speicher schreiben. In beiden Fällen blieb das Zeichen auf dem Bildschirm, bis es geändert wurde, und der gesamte Zeichenspeicher, mit dem Sie arbeiten mussten, betrug 4000 Byte - ungefähr die Größe einer einzelnen 32x32-Vollfarbtextur!
In den Grafikmodi war die Situation ähnlich; Jedes Pixel auf dem Bildschirm ist mit einer bestimmten Stelle im Speicher verknüpft, und es gab eine BIOS-Set-Pixel-Schnittstelle, für die jedoch Hochleistungsarbeit erforderlich war, die direkt in den Speicher geschrieben wurde. Spätere Standards wie VESA lassen das System einige langsame BIOS-basierte Abfragen durchführen, um das Speicherlayout der Hardware zu erlernen, und arbeiten dann direkt mit dem Speicher. Auf diese Weise kann ein Betriebssystem Grafiken ohne einen speziellen Treiber anzeigen, obwohl moderne Betriebssysteme auch Basistreiber für die Hardware aller großen GPU-Hersteller enthalten. Selbst die neueste NVidia-Karte unterstützt mehrere verschiedene Abwärtskompatibilitätsmodi, wahrscheinlich bis zu IBM CGA.
Ein wichtiger Unterschied zwischen 3D-Grafiken und 2D besteht darin, dass Sie in 2D im Allgemeinen nicht den gesamten Bildschirm für jeden Frame neu zeichnen müssen. Wenn sich die Kamera in 3D nur geringfügig bewegt, ändert sich möglicherweise jedes Pixel auf dem Bildschirm. Wenn Sie in 2D nicht scrollen, bleibt der größte Teil des Bildschirms von Bild zu Bild unverändert. Selbst wenn Sie scrollen, können Sie im Allgemeinen eine schnelle Kopie von Speicher zu Speicher erstellen, anstatt die gesamte Szene neu zusammenzusetzen. Es ist also nichts anderes, als INT 10h für jedes Pixel und jeden Frame ausführen zu müssen.
Quelle: Ich bin sehr alt
quelle
Während des Startvorgangs sucht das System- BIOS nach der Grafikkarte. Insbesondere wird das im BIOS integrierte Programm der Grafikkarte gesucht und ausgeführt. Dieses BIOS befindet sich normalerweise an Position C000h im Speicher. Das System-BIOS führt das Video-BIOS aus , das den Videoadapter initialisiert.
Welche Ebenen oder Modi von Video / Grafik das BIOS ohne Betriebssystem oder Treiber nativ anzeigen kann, hängt in erster Linie vom Video-BIOS selbst ab.
Quelle / Weitere Informationen hier - "Systemstartsequenz"
quelle
Sie sprechen über ältere BIOS-Funktionen. Tatsächlich müssen Sie solche Funktionen überhaupt nicht verwenden. Sie schreiben sie direkt in den Videospeicher.
Dies hängt stark davon ab, wie das Betriebssystem funktioniert. Wie auch immer, die Bedienung ist auf Hardware-Ebene gleich: Die Grafikkarte verfügt über einen Video-RAM, in dem das nächste auf dem Bildschirm zu zeichnende Bild gespeichert (vereinfacht) wird. Sie können sich vorstellen, dass jede Adresse ein Byte ist, das ein Pixel darstellt (im Allgemeinen benötigen Sie mehr als ein Byte pro Pixel). Der Videocontroller sorgt dann dafür, dass dies in ein Signal umgewandelt wird, das der Monitor versteht.
AFAIK, nein. Es gibt keine Standards für logische grafische Darstellungen.
Weil es Treiber hat, die bereits mit dem Betriebssystem gebündelt sind.
quelle