VESA BIOS Extension

VESA BIOS Extension (VBE) ist ein in den 1990er Jahren entwickelter Standard der Video Electronics Standards Association (VESA) für Grafikkarten in IBM-PC-kompatiblen Computern (PCs).

Er ist eine üblicherweise im Grafikkarten-BIOS implementierte Programmierschnittstelle (API), die den Programmen Interrupts zur Verfügung stellt, um damit Aktionen wie das Setzen oder Abfragen von Videomodi durchzuführen sowie weitere, von der Hardware unterstützte Funktionen (z. B. Synchronisation von 3D-Shutterbrillen), anzusprechen. So waren Programme und Spiele für DOS oft auf ein VBE angewiesen und funktionierten somit auf allen Systemen, die ein „VESA BIOS“ bereitstellten. Auf Grafikkarten ohne VBE im Grafik-BIOS kann unter DOS ein speicherresidenter Treiber geladen werden, der die Funktionen der Extension bereitstellt. Software die später erschien, setzt auf die schnelleren APIs von DirectX, OpenGL und deren Nachfolgern auf, die jedoch auf Betriebssystemebene implementiert sind.

Die VESA BIOS Extension ist nur für IBM-PC-kompatible Computer mit BIOS verfügbar. Auf dem BIOS-Nachfolger Extensible Firmware Interface (EFI) wurde VBE anfangs durch UGA (Universal Graphics Adapter) ersetzt, welches wiederum ab UEFI (Unified EFI ab Version 2) von GOP (Graphics Output Protocol) abgelöst wurde. Für die meisten Betriebssysteme erfüllen VBE, EFI-UGA und UEFI-GOP eine Fallback-Funktion, falls kein Grafiktreiber zur Verfügung steht. Bei (U)EFI wird UGA/GOP vor dem Betriebssystemstart von der Firmware selbst verwendet, um für ein angeschlossenes Display per DDC in einen geeigneten Grafikmodus zu schalten.[1]

Primär war die VESA BIOS Extension für 16-Bit-Applikationen unter DOS gedacht. Die meisten MS-DOS-basierten PC-Spiele zwischen etwa 1993 und 1997 verwendeten die schnellen 16-Bit-Modi mit niedriger Auflösung wie etwa 320×200 oder 320×240, später 640×480. Der Framebuffer kann allerdings auch von 32-Bit-DPMI-Programmen verwendet werden. Mit der Einführung von VBE 2.0 war es möglich, Grafikmodi in 16-Bit-Farbtiefe (65.536 Farben) mit Auflösungen bis zu 1600×1200 Pixeln zu verwenden, ohne gezielt programminterne Unterscheidungen zur verwendeten Grafikhardware zu implementieren. Außerdem wurde mit VBE 2.0 ein linearer Framebufferzugriff aus dem Protected Mode ermöglicht, was zu einem deutlich beschleunigten Bildaufbau führte.[2] Unter DOS gab es vorher keine standardisierte Schnittstelle für Grafik, die über den VGA-Standard hinausging.

Die aktuelle Version des Standards 3.0 ist abwärtskompatibel zur vorherigen Spezifikation 2.0. Die wesentliche Neuerung der Version 3.0 ist der Protected Mode Entry Point, der sowohl vom 16- als auch vom 32-Bit-Protected-Mode aus aufgerufen werden kann. Version 3.0 wird von Anwendungssoftware nur selten vorausgesetzt, da bereits mit VBE 2.0 alle wesentlichen Funktionen zur Verfügung stehen.

VBE wird auf Computern mit BIOS, und damit auch auf (U)EFI-Systemen im BIOS-kompatiblen Modus „CSM“ (für Compatibility Support Module), von den meisten modernen Grafikkarten unterstützt. Die VESA BIOS Extension ist dabei im Grafik-BIOS der Grafikkarte enthalten. Da bei Einführung der VESA BIOS Extension nicht alle Grafikkarten eine entsprechende Funktionalität implementiert hatten, gibt es universelle „VESA-Treiber“ – Zusatzprogramme wie beispielsweise UniVBE oder Scitech Display Doctor, aber auch hardwarespezifische Treiber der Grafikkartenhersteller selbst (etwa S3VBE Core 2.0 für S3-Grafikkarten oder TLIVESA für Grafikkarten von Tseng Labs) – die unter DOS speicherresident als TSR-Programm geladen werden und ein VBE-Grafik-BIOS nachrüsten. Mit manchen entsprechenden Zusatzprogrammen ist es auch möglich, zusätzliche Grafikmodi einzufügen bzw. vorhandene auszutauschen; das kann z. B. dann erforderlich sein, wenn die native Auflösung eines Monitors verwendet werden soll, diese jedoch in den voreingestellten Standard-Auflösungen im VBE-Grafik-BIOS fehlen. Dem gleichen Prinzip folgend wurden auf Laptops einige der VBE-Standard-Modi im Grafik-BIOS z. B. mit WXGA-Auflösungen überschrieben, wenn dies der nativen Display-Auslösung entspricht.

Von Anwendungssoftware für moderne Betriebssysteme wird VBE kaum noch verwendet, da diese die Hardware nicht mehr direkt ansprechen können – auf Desktop-Systemen wie Windows, macOS oder Linux werden von der Grafikkarte unabhängige APIs verwendet, die die entsprechende Funktionalität über herstellerspezifische Treiber mit definierten Schnittstellen umsetzen. Linearer Framebuffer Zugriff (LFB) ist unter Windows in einer Virtual DOS Machine mittels NTVDM nicht möglich, da dessen DPMI nur Vesa Modi ohne linearen Framebuffer Zugriff unterstützen. Einige Anwendungen ermöglichen daher die höheren VESA Modi per CLI Parameter nicht zu nutzen und zu VESA 1.2 zurückzufallen. In VESA 1.2 gibt es noch keinen Linearen Framebuffer Zugriff, sondern nur Bank Switching, was wiederum von NTVDM und dessen DPMI unterstützt wird.[3]

Der Standard spielt heute noch unter Betriebssystemen eine Rolle, für die es keine spezielle Treiberunterstützung für einen bestimmten Grafikchipsatz gibt. Sind bspw. für Windows, Linux oder FreeBSD keine Grafikkartentreiber für bestimmte Grafikkarten verfügbar, so können nur durch Verwendung eines VESA-Treibers, der die hier beschriebene Funktionalität nutzt, Auflösungen von mehr als 640×480 Pixel bei mehr als 256 Farben verwendet werden.

Unter Windows wird im abgesicherten Modus vom VESA-Modus massiv Gebrauch gemacht, weil in diesem Modus in der Regel keine herstellerspezifischen 3rd-Party-Treiber geladen werden.

Der Standard deckt allerdings keine 2D- oder 3D-Beschleunigerfunktionen ab. Bei der Darstellung von 2D- oder 3D-Inhalten muss die CPU also alles in Software rendern.

VESA VBE 1.2 unterstützt virtuelles Scrolling und Double und Tripple Buffering in Hardware.[4]

Modus
(hexadezimal)
Auflösung
(Pixel×Pixel)
Farbtiefe
(Bit)
Text/Grafisch VESA VBE Version
0x100 0640×0400 08 1.0
0x101 0640×0480 08 1.0
0x102 0800×0600 04 1.0
0x103 0800×0600 08 1.0
0x104 1024×0768 04 1.0
0x105 1024×0768 08 1.0
0x106 1280×1024 04 1.0
0x107 1280×1024 08 1.0
0x108 0080×0060 04 Text 1.0
0x109 0132×0025 04 Text 1.0
0x10A 0132×0043 04 Text 1.0
0x10B 0132×0050 04 Text 1.0
0x10C 0132×0060 04 Text 1.0
0x10D 0320×0200 15 1.2
0x10E 0320×0200 16 1.2
0x10F 0320×0200 24 1.2
0x110 0640×0480 15 1.2
0x111 0640×0480 16 1.2
0x112 0640×0480 24 1.2
0x113 0800×0600 15 1.2
0x114 0800×0600 16 1.2
0x115 0800×0600 24 1.2
0x116 1024×0768 15 1.2
0x117 1024×0768 16 1.2
0x118 1024×0768 24 1.2
0x119 1280×1024 15 1.2
0x11A 1280×1024 16 1.2
0x11B 1280×1024 24 1.2
0x11C 1600×1200 08 ?
0x11D 1600×1200 15 ?
0x11E 1600×1200 16 ?
0x11F 1600×1200 24 ?
0x120h 1600x1200 8 2.0
0x121h 1600x1200 15 2.0
0x122h 1600x1200 16 2.0

Mit Bit lassen sich verschiedene Farben darstellen. Da für die rote, grüne und blaue Komponente eines Pixels jeweils 8 Bit zur Verfügung stehen, sind somit verschiedenen Farben für ein Pixel möglich, auch True Color genannt (siehe dazu RGB-Farbraum). Bei einer Farbtiefe von 16 Bit sind 65.536 verschiedene Farben für ein Pixel möglich, was High Color genannt wird.

Einzelnachweise

[Bearbeiten | Quelltext bearbeiten]
  1. Replacing VGA, GOP implementation for UEFI. (PDF; 840 kB) UEFI Summer Plugfest 2011. AMD, Juli 2011, S. 4, abgerufen am 13. Januar 2021 (englisch): „The ultimate goal of GOP is to replace legacy VGA BIOS and eliminate VGA HW functionality.“
  2. Nico Ernst: VESA-Treiber und UniVBE - So wird SVGA schneller. In: PC Player Special: Tipps & Tricks zu 400 Spielen. Nr. 1, 1997, ISSN 0943-6693, S. 10 (pcplayer.de [abgerufen am 25. Juni 2024]).
  3. VESA Support & XP. In: sierrahelp.com. Abgerufen am 10. Januar 2022 (englisch).
  4. Introduction to VESA programming. 6.9 Function 07h - Set/Get Display Start. In: monstersoft.com. Abgerufen am 19. Mai 2024 (englisch).