The Universal VESA VBE
Copyright (C) 1993 Kendall Bennett
All rights reserved.
What is it?
The Universal VESA VBE is a small Terminate and Stay Resident (TSR) program
that extends the video BIOS of SuperVGA video cards to make them compatible
with the Video Electonics Standards Association (VESA) recommended
Video BIOS Extensions (VBE).
By having a video card that has a VESA VBE compatible BIOS, or by
installing this small TSR, programs that support the VESA VBE programming
interface will work correctly for your SuperVGA. This helps to solve a
lot of problems with compatability between different SuperVGA cards on the
market. Note that this program will not take advantage of any of the
acceleration features that your video card may provide.
Why use it?
You may already have a VESA VBE TSR for you video card, or you video card
may have a VESA VBE compatible BIOS already, so why would you want to use
The simple answer is that most of the TSR's that exist today, and a lot
of the not-so-new SuperVGA cards that are around implement an older version
of the VESA VBE programming interface (if any at all). For this reason, some
programs that use the advanced features of the new VESA VBE standard will
not work with the TSR or BIOS that you currently have.
So what advanced features does this TSR provide that other's don't? The
Universal VESA VBE implements the VESA VBE 1.2 programming interface,
which supports the following features:
. SuperVGA page flipping. High performance animation programs can
use your card to full potential using the VESA BIOS to implement
extended page flipping (imagine, 1024x768x16 double buffered
animation, or even 800x600x256 and 640x400x32k/64k on a 1Mb video
. SuperVGA virtual screens. Programs may set up a virtual display
resolution of say 1024x1024 pixels, and smoothly scroll a window
with less physical resolution around within this buffer.
. Support for the 32k, 64k and 16 million color video modes. As well
as supporting the industry standard 16 and 256 color video
. Speed. The bank switching code in this package tends to run faster
than the routines embedded in the VIDEO BIOS of some video cards.
. Programs that know about the Universal VESA VBE protected mode
extensions can use the high performance protected mode programming
interface provided by this TSR.
. Extremely small size. When the TSR is resident in your computer it
only requires about 3k of memory which is smaller than the
size of most commerical VESA VBE TSR's. It may also be loaded high
to save even more memory.
The Universal VESA VBE will run on any 80x86 based IBM PC compatible
running MSDOS. Currently the Universal VESA VBE supports the following
SuperVGA cards (note that not all of these have been fully tested):
- ATI Technologies 18800, 28800
- Ahead A & B
- Chips & Technologies 82c451/452/453
- Genoa Systems GVGA
- OAK Technologies OTI-037C, OTI-067, OTI-077, OTI-087
- Paradise PVGA1A, WD90C00/10/11/20/21/30/31
- NCR 77C20/21/22E
- Trident 88/8900
- Video7 V7VGA versions 1-5
- Tseng Labs ET3000, ET4000, ET4000/W32
- AcuMos AVGA2
- S3 86c911/924/801/805/928
- Advance Logic AL2101 SuperVGA
- MXIC 86010 SuperVGA
- Primus 2000 SuperVGA
- RealTek 3106 SuperVGA
- Cirrus Logic CL-GD 5420, 5422, 5424, 5426, 5428
How do I install it?
You can install the TSR from the command line, or from your autoexec.bat
file. Don't worry about installing it twice, it will automatically detect
if you have already installed it.
To install it simply type:
from the command line. It will determine what type of SuperVGA card you
have installed and install itself accordingly. If you wish to remove the
TSR from memory after it has been installed, simply type:
This will remove the program from memory, even if it was not the last
TSR to be installed. However if you installed another TSR after this
one that has hooked into the Int 10h interface the old TSR will cease
You may also use command line options to modify the the installation
process used by the program. The following is produced by typing
'univesa -h' at the command line:
-s - Force detection of SuperVGA 'name'
-c - Force detection of SuperVGA chipset (numerical id)
-m - Force memory size to 'size'
-d - Force DAC type (0:VGA, 1:15 bit, 2:16 bit, 3:24 bit)
-i - Do not perform SuperVGA detection
-q - Quiet mode
-g - Regenerate default .ini file
-u - Unload the Universal VESA VBE from memory
-t - Don't go TSR, just return the detected SuperVGA id
It is possible the SuperVGA detection code will hang the machine on old
VGA/SVGA cards. You can optionally force the program to work with any
combination of card, chipset, memory size and DAC, but unless you specify
the -i option, unspecified values will be filled in automatically for you.
Thus you if the detection code did not correctly identify you video card
configuration, you can force the TSR to work with the correct values.
For some SuperVGA cards, I have not been able to work out a solid method
of detecting the amount of video memory on board. If this is the case,
the Universal VESA VBE will refuse to install itself and ask that you
specify the amount of video memory on your card from the command line.
The Universal VESA VBE does not provide support for any of the extended
text modes that your video card may provide, but will provide support
for any extended text modes supported by an underlying VESA VBE compliant
BIOS. Thus if you video card already has a VBE BIOS or you install
your favorite VESA VBE TSR for your video card _before_ installing the
Universal VESA VBE, the Universal VESA VBE will use a pass-through
mechanism to ensure the extended text modes still work correctly.
What's the .ini file for?
For most installations, the Universal VESA VBE will automatically
determine the video modes that you card supports. However on some older
video cards some video modes that the Universal VESA VBE thinks are
available aren't and so an error will occur if a program tries to set
the video mode. The .ini file is used to remove support for those video
modes. You can edit the .ini file yourself or you can get the TSR
to automatically generate the default .ini file for you.
In order to generate the default .ini file for you, you must remove the
TSR from memory, delete the old .ini file, re-install the TSR in memory
and run the program with the -g option. The default .ini file is now
generated. You should then remove the TSR again and re-install it using
the values in the new .ini file. A batch file called 'makeini.bat'
is provided which will do this for you.
The format of the .ini file is simple. All the video modes removed by
the program are listed under the section '[remove]' in the .ini file.
They are listed as the hexadecimal internal mode numbers used by the
TSR (see the next section for a list of the mode numbers used). An
example .ini file might be:
Video modes supported by this TSR
The Universal VESA VBE supports the VESA VBE 1.2 programming interface,
which defines a number of standard video modes numbers. The new version
of the VESA VBE specs will allow the vendor to extend the video numbers
used to whatever values they wish, so I have taken the liberty to
extend the mode numbers used by the Universal VESA VBE to include
modes not originally specified in the VBE 1.2 specs, but supported by
a number of popular video cards on the market. Depending on how well
your applications have been written, they may or may not be able to
use those modes.
The following is a list of the internal mode numbers used by the Universal
VESA VBE and a description of each video mode:
102 - 800x600 16 color
104 - 1024x768 16 color
106 - 1280x1024 16 color
11C - 640x350 256 color
100 - 640x400 256 color
101 - 640x480 256 color
103 - 800x600 256 color
105 - 1024x768 256 color
107 - 1280x1024 256 color
10D - 320x200 32k color
11D - 640x350 32k color
11E - 640x400 32k color
110 - 640x480 32k color
113 - 800x600 32k color
116 - 1024x768 32k color
119 - 1280x1024 32k color
10E - 320x200 64k color
11F - 640x350 64k color
120 - 640x400 64k color
111 - 640x480 64k color
114 - 800x600 64k color
117 - 1024x768 64k color
11A - 1280x1024 64k color
10F - 320x200 16m color
121 - 640x350 16m color
122 - 640x400 16m color
112 - 640x480 16m color
115 - 800x600 16m color
118 - 1024x768 16m color
11B - 1280x1024 16m color
Protected mode interface
In order to be able to write high performance programs that utilise the
VESA VBE programming interface from 16 bit and 32 bit protected mode,
I have provided a special interface to allow application programs to
copy the bank switching and page flipping code into their own code space,
so it can be executed directly as a protected mode routine.
Please refer to the code in the SuperVGA test kit to see how to use
Problems and known bugs
The Universal VESA TSR seems to have problems with QEMM, since QEMM does
something weird with the Video BIOS. In order to fix this problem,
you should use the QEMM 'exclude' options to exclude the Video BIOS
area. Do this by including the following in the QEMM options:
Can I get the source code?
Yes, the full source code for this product is available, along with a
number of test programs (with source) for programming SuperVGA cards
using the VESA VBE interface, called the SuperVGA Test Kit Library. You
can probably download this from your local BBS, or by using ftp on the
internet from Simtel20 or garbo (or one of it's mirrors). You can
also ftp the latest version from:
godzilla.cgl.rmit.oz.au (18.104.22.168): kjb/MGL/svgakt??.zip
How can I contact the Author?
If you have any corrections or updates to the code in this package, or
you have any questions you would like asked, feel free to contact me
through one of the following methods.
Internet: [email protected]
Snail Mail: Kendall Bennett
15 Stevenson Street
Kew Victoria 3101