About VBE

VBE (VESA BIOS Extensions) was meant to be a standard interface for display (and audio) devices in order to provide a simple hardware-independent way to access and call on these devices.

VBE was very popular in the beginning as it gave programs (games) that were still made for DOS (for performance reasons) an easy way to make use of new video card features (e.g. higher resolution settings). As such most older cards support some VBE version up to 2.0, and most actual ones still support at least version 2.0.

When it got apparent that basically all newer programs would run in protected mode, it was realized that a new version of the VBE standard should also provide a way to call its features not only in real mode (via interrupts) but directly from protected mode. This was realized in VBE 3.0 - the next, latest (and last) version - and this one also brought exciting new features like refresh rate setting, support for triple buffering and stereoscopic displays and an accelerated functions interface (VBE/AF).

VBE 3.0 - and how every new or small operating system could benefit from a working driver

Although VBE version 3.0 never really caught on (be it because the need for it wasn't that high anymore since everone was using Windows then, or because the charges for the specifications back then were just too high) it is interesting to note that many graphics cards do have at least partial support for VBE 3.0 built in in their BIOS. Unfortunately, many of these implementations are broken.

Having noted though that many BIOSes do include some code for VBE 3.0, maybe there is a (simple) way to get the non-functional cards working again as VBE 3.0 compliant devices?

The benefit would be that an operating system that doesn't generate the kind of commercial interest as the major ones do could run the majority and probably even new graphics cards from the very beginning - without being supplied with drivers!

We'll see...

VBE 3.0 on nVidia graphics cards

Let's first look at graphics cards produced by nVidia. They, surprisingly, do all officially support VBE 3.0. And it seems, that most nVidia derived cards do work! However, it seems there was a time when nVidia shipped a broken VBE 3.0 implementation, and some vendors (e.g. Diamond) later never updated the one it got first [more information here].

So what about the broken BIOSes? There are two horrible issues in these buggy implementations that must be dealt with:

  • near returns instead of far returns for protected mode functions
  • accessing video parameter tables in real mode memory

I try to address these problems by making a copy of the video BIOS in RAM and analyzing it and then patching it. For making the VBE implementation issue a far return the functions near-return to a stub code which then in turn far-returns. Fixing the second problem requires replacement of all pointers to real mode video parameter tables by pointers to standard VGA video parameter tables that are constructed in advance and placed within free space of the data memory that is passed upon VBE initialization.

VBE 3.0 on ATI graphics cards

ATI officially only supports VBE 2.0 (and that doesn't even work on my Sapphire card although it claims to be compatible). However, all the ATI BIOSes include some basic support code for VBE 3.0. Let's find out what is needed to get these cards running. Basically two problems must be addressed:

  • a fixed far pointer is assumed at a fixed place in BIOS memory
  • EDID video parameters need to be computed and filled in in BIOS memory at the right place manually

The first one is easily fixed (once found ;-)). The second one I worked out by stumbling across the source code of a Radeon driver for XFree86.

Download

I have donated the sources of my VESA VBE 3.0 driver to the Haiku folks. Get them here.