home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Shareware Supreme Volume 6 #1
/
swsii.zip
/
swsii
/
163
/
VESA.ZIP
/
VESA.TXT
Wrap
Text File
|
1990-12-11
|
41KB
|
984 lines
VESA Super VGA Standard VS891101
Video Electronics Standards Association
1330 South Bascom Avenue, Suite D
San Jose, CA 95128-4502
Phone: (408) 971-7525
Fax: (408) 286-8988
SUPER VGA BIOS EXTENSION
Standard # VS891101
November 14, 1989
OBJECTIVE
To standardize a common software interface to Super VGA video adapters
in order to provide simplified software application access to advanced
VGA products.
SUMMARY
The standard provides a set of functions which an application program
can use to a) obtain information about the capabilities and
characteristics of a specific Super VGA implementation and b) to control
the operation of such hardware in terms of video mode initialization and
video memory access. The functions are provided as an extension to the
VGA BIOS video services, accessed through interrupt 10.
Contents
1. Introduction
2. Goals and Objectives
2.1 Video environment information
2.2 Programming support
2.3 Compatibility
2.4 Scope of standard
3. Standard VGA BIOS
4. Super VGA Mode Numbers
5. CPU Video Memory Windows
5.1 Hardware design considerations
5.1.1 Limited to 64k/128k of CPU address
space
5.1.2 Crossing CPU video memory window
boundaries
5.1.3 Operating on data from different areas
5.1.4 Combining data from two different
windows
5.2 Different types of hardware windows
5.2.1 Single window systems
5.2.2 Dual window systems
6. Extended VGA BIOS
6.1 Status information
6.2 00h - Return Super VGA information
6.3 01h - Return Super VGA mode information
6.4 02h - Set Super VGA mode
6.5 03h - Return Super VGA mode
6.6 04h - Save/restore Super VGA video state
6.7 06h - Super VGA video memory window control
7. Application Example
1. Introduction
This document contains a specification for a standardized interface to
extended VGA video modes and functions. The specification consists of
mechanisms for supporting standard extended video modes and functions
that have been approved by the main VESA committee and non-standard
video modes that an individual VGA supplier may choose to add, in a
uniform manner that application software can utilize without having to
understand the intricate details of the particular VGA hardware.
The primary topics of this specification are definitions of extended VGA
video modes and the functions necessary for application software to
understand the characteristics of the video mode and manipulate the
extended memory associated with the video modes.
Readers of this document should already be familiar with programming
VGAs at the hardware level and Intel iAPX real mode assembly language.
Readers who are unfamiliar with programming the VGA should first read
one of the many VGA programming tutorials before attempting to
understand these extensions to the standard VGA.
2. Goals and Objectives
The IBM VGA(1) has become a de-facto standard in the PC graphics world.
A multitude of different VGA offerings exist in the marketplace, each
one providing BIOS or register compatibility with the IBM VGA. More and
more of these VGA compatible products implements various supersets of
the VGA standard. These extensions range from higher resolutions and
more colors to improved performance and even some graphics processing
capabilities. Intense competition has dramatically improved the
price/performance ratio, to the benefit of the end user.
However, several serious problems face a software developer who intends
to take advantage of these "Super VGA"(2) environments. Because there is
no standard hardware implementation, the developer is faced with widely
disparate Super VGA hardware architectures. Lacking a common software
interface, designing applications for these environments is costly and
technically difficult. Except for applications supported by OEM-specific
display drivers, very few software packages can take advantage of the
power and capabilities of Super VGA products.
The purpose of the VESA VGA BIOS Extension is to remedy this situation.
Being a common software interface to Super VGA graphics products, the
primary objective is to enable application and system software to adapt
to and exploit the wide range of features available in these VGA
extensions.
Specifically, the VESA BIOS Extension attempts to address the following
two main issues: a) Return information about the video environment to
the application and b) Assist the application in initializing and
programming the hardware.
2.1 Video environment information
Today, an application has no standard mechanism to determine what Super
VGA hardware it is running on. Only by knowing OEM-specific features can
an application determine the presence of a particular video board. This
often involves reading and testing registers located at I/O addresses
unique to each OEM. By not knowing what hardware an application is
running on, few, if any, of the extended features of the underlying
hardware can be used.
The VESA BIOS Extension provides several functions to return information
about the video environment. These functions return system level
information as well as video mode specific details. Function 00h returns
general system level information, including an OEM identification
string. The function also returns a pointer to the supported video
modes. Function 01h may be used by the application to obtain
information about each supported video mode. Function 03h returns the
current video mode.
2.2 Programming support
Due to the fact that different Super VGA products have different
hardware implementations, application software has great difficulty in
adapting to each environment. However, since each is based on the VGA
hardware architecture, differences are most common in video mode
initialization and memory mapping. The rest of the architecture is
usually kept intact, including I/O mapped registers, video buffer
location in the CPU address space, DAC location and function, etc.
The VESA BIOS Extension provides several functions to interface to the
different Super VGA hardware implementations. The most important of
these is Function 02h, Set Super VGA video mode. This function isolates
the application from the tedious and complicated task of setting up a
video mode. Function 05h provides an interface to the underlying memory
mapping hardware. Function 04h enables an application to save and
restore a Super VGA state without knowing anything of the specific
implementation.
2.3 Compatibility
A primary design objective of the VESA BIOS Extension is to preserve
maximum compatibility to the standard VGA environment. In no way should
the BIOS extensions compromise compatibility or performance. Another but
related concern is to minimize the changes necessary to an existing VGA
BIOS. RAM- as well as ROM-based implementations of the BIOS extension
should be possible.
2.4 Scope of standard
The purpose of the VESA BIOS Extension is to provide support for
extended VGA environments. Thus, the underlying hardware architecture is
assumed to be a VGA. Graphics software that drives a Super VGA board,
will perform its graphics output in generally the same way it drives a
standard VGA, ie. writing directly to a VGA style frame buffer,
manipulating graphics controller registers, directly programming the
palette etc. No significant graphics processing will be done in
hardware. For this reason, the VESA BIOS Extension does not provide any
graphics output functions, such as BitBlt, line or circle drawing, etc.
An important constraint of the functionalities that can be placed into
the VESA BIOS Extension, is that ROM-space is severely limited in
certain existing BIOS implementations.
Outside the scope of this VESA BIOS Extension is handling of different
monitors and monitor timings. Such items are dealt with in other VESA
fora. The purpose of the VESA BIOS Extension is to provide a
standardized software interface to Super VGA graphics modes, independent
of monitor and monitor timing issues.
3. Standard VGA BIOS
A primary design goal with the VESA BIOS Extension is to minimize the
effects on the standard VGA BIOS. Standard VGA BIOS functions should
need to be modified as little as possible. This is important since ROM-
as well as RAM-based versions of the extension may be implemented.
However, two standard VGA BIOS functions are affected by the VESA
extension. These are Function 00h (Set video mode) and Function 0Fh
(Read current video state). VESA-aware applications will not set the
video mode using VGA BIOS function 00h. Nor will such applications use
VGA BIOS function 0Fh. VESA BIOS functions 02h (Set Super VGA mode) and
03h (Get Super VGA mode) will be used instead.
However, VESA-unaware applications (such as old Pop-Up programs and
other TSRs, or the CLS command of MS-DOS), might use VGA BIOS function
0Fh to get the present video mode. Later it may call VGA BIOS function
00h to restore/reinitialize the old video mode.
To make such applications work, VESA recommends that whatever value
returned by VGA BIOS function 0Fh (it is up to the OEM to define this
number), it can be used to reinitialize the video mode through VGA BIOS
function 00h. Thus, the BIOS should keep track of the last Super VGA
mode in effect.
It is recommended, but not mandatory, to support output functions (such
as TTY-output, scroll, set pixel, etc.) in Super VGA modes. If the BIOS
extension doesn't support such output functions, bit D2 (Output
functions supported) of the ModeAttributes field (returned by VESA BIOS
function 01h) should be cleared.
4. Super VGA mode numbers
Standard VGA mode numbers are 7 bits wide and presently ranges from 00h
to 13h. OEMs have defined extended video modes in the range 14h to 7Fh.
Values in the range 80h to FFh cannot be used, since VGA BIOS function
00h (Set video mode) interprets bit 7 as a flag to clear/not clear video
memory.
Due to the limitations of 7 bit mode numbers, VESA video mode numbers
are 15 bits wide. To initialize a Super VGA mode, its number is passed
in the BX register to VESA BIOS function 02h (Set Super VGA mode).
The format of VESA mode numbers is as follows:
D0-D8= Mode number
If D8 == 0, this is not a VESA defined mode
If D8 == 1, this is a VESA defined mode
D9-D14= Reserved by VESA for future expansion (= 0)
D15= Reserved (= 0)
Thus, VESA mode numbers begin at 100h. This mode numbering scheme
implements standard VGA mode numbers as well as OEM-defined mode numbers
as subsets of the VESA mode number. That means that regular VGA modes
may be initialized through VESA BIOS function 02h (Set Super VGA mode),
simply by placing the mode number in BL and clearing the upper byte
(BH). OEM-defined video modes may be initialized in the same way.
To date, VESA has defined a 7-bit video mode number, 6Ah, for the
800x600, 16-color, 4-plane graphics mode. The corresponding 15-bit mode
number for this mode is 102h.
The following VESA mode numbers have been defined:
15-bit 7-bit Resolution Colors
mode mode
number number
---------------------------------------
100h - 640x400 256
101h - 640x480 256
102h 6Ah 800x600 16
103h - 800x600 256
104h - 1024x768 16
105h - 1024x768 256
106h - 1280x1024 16
107h - 1280x1024 256
5. CPU Video Memory Windows
A standard VGA sub-system provides 256k bytes of memory and a
corresponding mechanism to address this memory. Super VGAs and their
extended modes require more than the standard 256k bytes of memory but
also require that the address space for this memory be restricted to the
standard address space for compatibility reasons. CPU video memory
windows provide a means of accessing this extended VGA memory within the
standard CPU address space.
This chapter describes how several hardware implementations of CPU video
memory windows operate, their impact on application software design, and
relates them to the software model presented by the VESA VGA BIOS
extensions.
The VESA CPU video memory windows functions have been designed to put
the performance insensitive, non-standard hardware functions into the
BIOS while putting the performance sensitive, standard hardware
functions into the application. This provides portability among VGA
systems together with the performance that comes from accessing the
hardware directly. In particular, the VESA BIOS is responsible for
mapping video memory into the CPU address space while the application is
responsible for performing the actual memory read and write operations.
This combination software and hardware interface is accomplished by
informing the application of the parameters that control the hardware
mechanism of mapping the video memory into the CPU address space and
then letting the application control the mapping within those
parameters.
5.1 Hardware design considerations
5.1.1 Limited to 64k/128k of CPU address space
The first consideration in implementing extended video memory is to give
access to the memory to application software.
The standard VGA CPU address space for 16 color graphics modes is
typically at segment A000h for 64k. This gives access to the 256k bytes
of a standard VGA, i.e. 64k per plane. Access to the extended video
memory is accomplished by mapping portions of the video memory into the
standard VGA CPU address space.
Every super VGA hardware implementation provides a mechanism for
software to specify the offset from the start of video memory which is
to be mapped to the start of the CPU address space. Providing both read
and write access to the mapped memory provides a necessary level of
hardware support for an application to manipulate the extended video
memory.
5.1.2 Crossing CPU video memory window boundaries
The organization of most software algorithms which perform video
operations consists of a pair of nested loops: an outer loop over rows
or scan lines and an inner loop across the row or scan line. The latter
is the proverbial inner loop, which is the bottle neck to high
performance software.
If a target rectangle is large enough, or poorly located, part of the
required memory may be within the video memory mapped into the CPU
address space and part of it may not be addressable by the CPU without
changing the mapping. It is desirable that the test for re-mapping the
video memory is located outside of the inner loop.
This is typically accomplished by selecting the mapping offset of the
start of video memory to the start of the CPU address space so that at
least one entire row or scan line can be processed without changing the
video memory mapping. There are currently no super VGAs that allow this
offset to be specified on a byte boundary and there is a wide range
among super VGAs in the ability to position a desired video memory
location at the start of the CPU address space.
The number of bytes between the closest two bytes in video memory that
can be placed on any single CPU address is defined as the granularity of
the window mapping function. Some super VGA systems allow any 4k video
memory boundary to be mapped to the start of the CPU address space,
while other super VGA systems allow any 64k video memory boundary to be
mapped to the start of the CPU address space. These two example systems
would have granularities of 4k and 64k, respectively This concept is
very similar to the bytes that can be accessed with a 16 bit pointer in
an Intel CPU before a segment register must be changed (the granularity
of the segment register or mapping, here is 16 bytes).
Note that if the granularity is equal to the length of the CPU address
space, i.e. the least significant address bit of the hardware mapping
function is more significant than the most significant bit of the CPU
address, then the inner loop will have to contain the test for crossing
the end or beginning of the CPU address space. This is because if the
length of the CPU address space (which is the granularity in this case)
is not evenly divisible by the length of a scan line, then the scan line
at the end of the CPU address will be in two different video memory
which cannot be mapped into the CPU address space simultaneously.
5.1.3 Operating on data from different areas
It is sometimes required or convenient to move or combine data from two
different areas of video memory. One example of this is storing menus in
the video memory beyond the displayed memory because there is hardware
support in all VGAs for transferring 32 bits of video data with an 8 bit
CPU read and write. Two separately mappable CPU video memory windows
must be used if the distance between the source and destination is
larger than the size of the CPU video memory window.
5.1.4 Combining data from two different windows
The above example of moving data from one CPU video memory window to
another CPU video memory only required read access to one window and
only required write access to the other window. Sometimes it is
convenient to have read access to both windows and write access to one
window. An example of this would be a raster operation where the
resulting destination is the source data logically combined with the
original destination data.
5.2 Different types of hardware windows
Different hardware implementations of CPU video memory windows can be
supported by the VESA BIOS extension. The information necessary for an
application to understand the type of hardware implementation is
provided by the BIOS to the application. There are three basic types of
hardware windowing implementations and they are described below.
The types of windowing schemes described below do not include
differences in granularity.
Also note that is possible for a VGA to use a CPU address space of 128k
starting at segment A000h.
5.2.1 Single window systems
Some hardware implementations only provide a single window. This single
window will be readable as well as writable. However, this causes a
significant performance degradation when moving data in video memory a
distance that is larger than the CPU address space.
5.2.2 Dual window systems
Many super VGAs provide two windows to facilitate moving data within
video memory. There are two separate methods of providing two windows.
5.2.2.1 Overlapping windows
Some hardware implementations distinguish window A and window B by
determining if the CPU is attempting to do a memory read or a memory
write operation. When the two windows are distinguished by whether the
CPU is trying to read or write they can, and usually do, share the same
CPU address space. However, one window will be read only and the other
will be write only.
5.2.2.2 Non-overlapping windows
Another mechanism used by two window systems to distinguish window A and
window B is by looking at the CPU address within the total VGA CPU
address space. When the two windows are distinguished by the CPU address
within the VGA CPU address space the windows cannot share the same
address space, but they can each be both read and written.
6. Extended VGA BIOS
Several new BIOS calls have been defined to support Super VGA modes. For
maximum compatibility with the standard VGA BIOS, these calls are
grouped under one function number. This number is passed in the AH
register to the int 10h handler.
The designated Super VGA extended function number is 4Fh. This function
number is presently unused in most, if not all, VGA BIOS
implementations. A standard VGA BIOS performs no action when function
call 4F is made.
6.1 Status information
Every function returns status information in the AX register. The
format of the status word is as follows:
AL == 4Fh: Function is supported
AL != 4Fh: Function is not supported
AH == 00h: Function call successful
AH == 01h: Function call failed
Software should treat a non-zero value in the AH register as a general
failure condition. In later versions of the VESA BIOS Extension new
error codes might be defined.
6.2 Function 00h - Return Super VGA information
The purpose of this function is to provide information to the calling
program about the general capabilities of the Super VGA environment. The
function fills an information block structure at the address specified
by the caller. The information block size is 256 bytes.
Input: AH= 4Fh Super VGA support
AL= 00h Return Super VGA information
ES:DI= Pointer to buffer
Output: AX= Status
All other registers are preserved
The information block has the following structure:
VgaInfoBlock struc
VESASignature db 'VESA' ; 4 signature bytes
VESAVersion dw ? ; VESA version number
OEMStringPtr dd ? ; Pointer to OEM string
Capabilities db 4 dup (?) ; Capabilities of
; the video environment
VideoModePtr dd ? ; Pointer to supported Super
; VGA modes
VgaInfoBlock ends
The VESASignature field contains the characters 'VESA' if this is a
valid block.
The VESAVersion field specifies which VESA standard the Super VGA BIOS
conforms to. The higher byte would specify the major version number. The
lower byte would specify the minor version number. The initial VESA
version number is 1.0. Applications written to use the features of a
specific version of the VESA BIOS Extension, is guaranteed to work in
later versions. The VESA BIOS Extension will be fully upwards
compatible.
The OEMStringPtr is a far pointer to a null terminated OEM-defined
string. The string may used to identify the video chip, video board,
memory configuration etc., to hardware specific display drivers. There
are no restrictions on the format of the string.
The Capabilities field describes what general features are supported in
the video environment. The bits are defined as follows:
D0-31= Reserved
The VideoModePtr points to a list of supported Super VGA (VESA-defined
as well as OEM-specific) mode numbers. Each mode number occupies one
word (16 bits). The list of mode numbers is terminated by a -1 (0FFFFh).
Please refer to chapter 2 for a description of VESA mode numbers. The
pointer could point into either ROM or RAM, depending on the specific
implementation. Either the list would be a static string stored in ROM,
or the list would be generated at run-time in the information block (see
above) in RAM.
6.3 Function 01h - Return Super VGA mode information
This function returns information about a specific Super VGA video mode.
The function fills a mode information block structure at the address
specified by the caller. The mode information block size is maximum 256
bytes.
Some information provided by this function is implicitly defined by the
VESA mode number. However, some Super VGA implementations might support
other video modes than those defined by VESA. To provide access to these
modes, this function also returns various other information about the
mode.
Input: AH= 4Fh Super VGA support
AL= 01h Return Super VGA mode information
CX= Super VGA video mode
ES:DI= Pointer to buffer
Output: AX= Status
All other registers are preserved
The mode information block has the following structure:
ModeInfoBlock struc
; mandatory information (allways provided)
ModeAttributes dw ? ; mode attributes
WinAAttributes db ? ; window A attributes
WinBAttributes db ? ; window B attributes
WinGranularity dw ? ; window granularity
WinSize dw ? ; window size
WinASegment dw ? ; window A start segment
WinBSegment dw ? ; window B start segment
WinFuncPtr dd ? ; pointer to window function
BytesPerScanLine dw ? ; bytes per scan line
; optional information (provided if bit D1 of ModeAttributes is set)
XResolution dw ? ; horizontal resolution
YResolution dw ? ; vertical resolution
XCharSize db ? ; character cell width
YCharSize db ? ; character cell height
umberOfPlanes db ? ; number of memory planes
BitsPerPixel db ? ; bits per pixel
NumberOfBanks db ? ; number of banks
MemoryModel db ? ; memory model type
BankSize db ? ; bank size in kb
ModeInfoBlock ends
The ModeAttributes field describes certain important characteristics of
the video mode. Bit D0 specifies whether this mode can be initialized in
the present video configuration. This bit can be used to block access to
a video mode if it requires a certain monitor type, and that this
monitor is presently not connected. Bit D1 specifies whether extended
mode information is available. Video modes defined by VESA will have
certain known characteristics, like resolution, number of planes, pixel
format etc. Due to the severe space constraint for ROM based
implementations of the VESA BIOS Extension, this information need not to
be given for VESA-defined video modes. Bit D2 indicates whether the BIOS
have support for output functions like TTY output, scroll, pixel output
etc. in this mode (it is recommended, but not mandatory, that the BIOS
have support for all output functions).
The field is defined as follows:
D0= Mode supported in hardware
0= Mode not supported in hardware
1= Mode supported in hardware
D1= Extended information available
0= Extended mode information not available
1= Extended mode information available
D2= Output functions supported by BIOS
0= Output functions not supported by BIOS
1= Output functions supported by BIOS
D3= Monochrome/color mode (see note below)
0= Monochrome mode
1= Color mode
D4= Mode type
0= Text mode
1= Graphics mode
D5-D15= Reserved
Note: Monochrome modes have their CRTC address at 3B4h. Color modes have
their CRTC address at 3D4h. Monochrome modes have attributes in which
only bit 3 (video) and bit 4 (intensity) of the attribute controller
output are significant. Therefore, monochrome text modes have attributes
of off, video, high intensity, blink, etc. Monochrome graphics modes are
two plane graphics modes and have attributes of off, video, high
intensity, and blink. Extended two color modes that have their CRTC
address at 3D4h, are color modes with one bit per pixel and one plane.
The standard VGA modes, 06h and 11h would be classified as color modes,
while the standard VGA modes 07h and 0fh would be classified as
monochrome modes.
The BytesPerScanline field specifies how many bytes each logical
scanline consists of. The logical scanline could be equal to or larger
than the displayed scanline.
The WinAAttributes and WinBAttributes describe the characteristics of
the CPU windowing scheme such as whether the windows exist and are
read/writeable, as follows:
D0= Window supported
0= Window is not supported
1= Window is supported
D1= Window readable
0= Window is not readable
1= Window is readable
D2= Window writable
0= Window is not writeable
1= Window is writeable
D3-D7= Reserved
WinGranularity specifies the smallest boundary, in KB, on which the
window can be placed in the video memory.
WinSize specifies the size of the window in KB.
WinASegment and WinBSegment address specify the segment addresses where
the windows are located in the CPU address space.
WinFuncAddr specifies the address of the CPU video memory windowing
function. The windowing function can be invoked either through VESA BIOS
function 05h, or by calling the function directly. A direct call will
provide faster access to the hardware paging registers than using Int
10h, and is intended to be used by high performance applications.
The XResolution and YResolution specify the width and height of the
video mode. In graphics modes, this resolution is in units of pixels. In
text modes this resolution is in units of characters. Note that text
mode resolutions, in units of pixels, can be obtained by multiplying
XResolution and YResolution by the cell width and height, if the
extended information is present.
The XCharCellSize and YCharCellSize specify the size of the character
cell in pixels.
The NumberOfPlanes field specifies the number of memory planes available
to software in that mode. For standard 16-color VGA graphics, this would
be set to 4. For standard packed pixel modes, the field would be set to
1.
The BitsPerPixel field specifies the number of bits that define the
color of one pixel. 16-color and 256-color graphics modes would specify
4 and 8 respectively. Non-standard memory organizations can be specified
using this field and the NumberOfPlanes field. For example, a 16-color
packed pixel mode would be described as having 1 plane and 4 bits per
pixel.
The MemoryModel field specifies the general type of memory organization
used in this mode. The following models have been defined:
00h= Text mode
01h= CGA graphics
02h= Hercules graphics
03h= 4-plane planar
04h= Packed pixel
05h= Non-chain 4, 256 color
06h-0fh= Reserved, to be defined by VESA
10h-ffh= To be defined by OEM
NumberOfBanks. This is the number of banks in which the scan lines are
grouped. The remainder from dividing the scan line number by the number
of banks is the bank that contains the scan line and the quotient is the
scan line number within the bank. For example, CGA graphics modes have
two banks and Hercules graphics mode has four banks. For modes that
don't have scanline banks (such as VGA modes 0Dh-13h), this field should
be set to 1.
The BankSize field specifies the size of a bank (group of scan lines) in
units of 1 KB. For CGA and Hercules graphics modes this is 8, as each
bank is 8192 bytes in length. For modes that don't have scanline banks
(such as VGA modes 0Dh-13h), this field should be set to 0.
MapFuncAddr specifies the address of the Mapping function. The mapping
function can be invoked either through VESA BIOS Function 06h, or by
calling the function directly. A direct call will provide a faster
memory mapping than using Int 10h, and is intended to be used by high
performance applications.
6.4 Function 02h - Set Super VGA video mode
This function initializes a Super VGA video mode. The BX register
contains the Super VGA mode to set. The format of VESA mode numbers is
described in chapter 2. If the mode cannot be set, the BIOS should leave
the video environment unchanged and return a failure error code.
Input: AH= 4Fh Super VGA support
AL= 02h Set Super VGA video mode
BX= Video mode
D0-D14= Video mode
D15= Clear memory flag
0= Clear video memory
1= Don't clear video memory
Output: AX= Status
All other registers are preserved
6.5 Function 03h - Return current video mode
This function returns the current video mode in BX. The format of VESA
video mode numbers is described in chapter 2 of this document.
Input: AH= 4Fh Super VGA support
AL= 03h Return current video mode
Output: AX= Status
BX= Current video mode
All other registers are preserved
Notes:
In a standard VGA BIOS, function 0Fh (Read current video state) returns
the current video mode in the AL register. In D7 of AL, it also returns
the status of the memory clear bit (D7 of 40:87). This bit is set if the
mode was set without clearing memory. In this Super VGA function, the
memory clear bit will not be returned in BX since the purpose of the
function is to return the video mode only. If an application wants to
obtain the memory clear bit, it should call VGA BIOS function Fh.
6.6 Function 04h - Save/Restore Super VGA video state
These functions provide a mechanism to save and restore the Super VGA
video state. The functions are a superset of the three subfunctions
under standard VGA BIOS function 1Ch (Save/restore video state). The
complete Super VGA video state (except video memory) should be
saveable/restorable by setting the requested states mask (in the CX
register) to 000Fh.
Input: AH= 4Fh Super VGA support
AL= 04h Save/Restore Super VGA video state
DL= 00h Return save/restore state buffer size
CX= Requested states
D0= Save/restore video hardware state
D1= Save/restore video BIOS data state
D2= Save/restore video DAC state
D3= Save/restore Super VGA state
Output: AX= Status
BX= Number of 64-byte blocks to hold the state buffer
All other registers are preserved
Input: AX= 4Fh Super VGA support
AL= 04h Save/Restore Super VGA video state
DL= 01h Save Super VGA video state
CX= Requested states (see above)
ES:BX= Pointer to buffer
Output: AX= Status
All other registers are preserved
Input: AH= 4Fh Super VGA support
AL= 04h Save/Restore Super VGA video state
DL= 02h Restore Super VGA video state
CX= Requested states (see above)
ES:BX= Pointer to buffer
Output: AX= Status
All other registers are preserved
Notes:
Due to the goal of complete compatibility with the VGA environment, the
standard VGA BIOS function 1Ch (Save/Restore VGA state) has not been
extended to save the Super VGA video state. VGA BIOS compatibility
requires that function 1Ch returns a specific buffer size with specific
contents, in which there is no room for the Super VGA state.
6.7 Function 05h - CPU Video Memory Window Control
This function sets or gets the position of the specified window in the
video memory. The function allows direct access to the hardware paging
registers. To use this function properly, the software should use VESA
BIOS Function 01h (Return Super VGA mode information) to determine the
size, location and granularity of the windows.
Input: AH= 4Fh Super VGA support
AL= 05h Super VGA video memory window control
BH= 00h Select super VGA video memory window
BL= Window number
0= Window A
1= Window B
DX= Window position in video memory
(in window granularity units)
Output: AX= Status
See notes below
Input: AH= 4Fh Super VGA support
AL= 05h Super VGA video memory window control
BH= 01h Return super VGA video memory window
BL= Window number
0= Window A
1= Window B
Output: AX= Status
DX= Window position in video memory
(in window granularity units)
See notes below
Notes:
This function is also directly accessible through a far call from the
application. The address of the BIOS function may be obtained by using
VESA BIOS Function 01h, return Super VGA mode information. A field in
the ModeInfoBlock contains the address of this function. Note that this
function may be different among video modes in a particular BIOS
implementation so the function pointer should be obtained after each set
mode.
In the far call version, no status information is returned to the
application. Also, in the far call version, the AX and DX registers will
be destroyed. Therefore if AX and/or DX must be preserved, the
application must do so prior to making the far call.
The application must load the input arguments in BH, BL, and DX (for set
window) but does not need to load either AH or AL in order to use the
far call version of this function.
7. Application example
The following sequence illustrates how an application would interface to
the VESA BIOS Extension. The hypothetical application is VESA-aware and
calls the VESA BIOS functions. However, the application is not limited
to supporting just VESA-defined video modes. Thus, it will inquire what
video modes are available, before setting up the video mode.
1) The application would first allocate a 256 byte buffer. This buffer
will be used by the VESA BIOS to return information about the video
environment. Some applications will statically allocate this buffer,
others will use system calls to temporarily obtain buffer space.
2) The application would then call VESA BIOS function 00h (Return Super
VGA information). If the AX register does not contain 004Fh on return
from the function call, the application can determine that the VESA BIOS
Extension is not present and handle such situation.
? If no error code is passed in AX, the function call was successful. The
buffer has been filled by the VESA BIOS Extension with various
information. The application can verify that indeed this is a valid VESA
block by identifying the characters 'VESA' in the beginning of the
block. The application can inspect the VESAVersion field to determine
whether the VESA BIOS Extension has sufficient functionality. The
application may use the OEMStringPtr to locate OEM-specific information.
Finally, the application can obtain a list of the supported Super VGA
modes, by using the VideoModePtr. This field points to a list of the
video modes supported by the video environment.
3) The application would then create a new buffer and call the VESA BIOS
function 01h (Return Super VGA mode information), to obtain information
about the supported video modes. Using the VideoModePtr, obtained in
step 2 above, the application would call this function with a new mode
number until a suitable video mode is found. If no appropriate video
mode is found, its up to the application to handle this situation.
The Return Super VGA mode information function fills a buffer specified
by the application with information describing the features of the video
mode. The data block contains all the information an application needs
to take advantage of the video mode.
The application would examine the ModeAttributes field. To verify that
the mode indeed is supported, the application would inspect bits D0. If
D0 is cleared, then the mode is not supported by the hardware. This
might happen if a specific mode requires a certain type of monitor, but
that monitor is not present.
4) After the application has selected a video mode, the next step is to
initialize the mode. However, the application might first want to save
the present video mode. When the application exits, this mode would be
restored. To obtain the present video mode, the VESA BIOS function 03h
(Get Super VGA mode), would be used. If a non-VESA (standard VGA or OEM-
specific) mode is in effect, only the lower byte in the mode number is
filled. The upper byte is cleared.
5) To initialize the video mode, the application would use VESA BIOS
function 02h (Set Super VGA mode). The application has from this point
on full access to the VGA hardware and video memory.
6) When the application is about to terminate, it would restore the prior
video mode. The prior video, obtained in step 4) above could be either a
standard VGA mode, OEM-specific mode, or VESA-supported mode. It would
reinitialize the video mode by calling VESA BIOS function 02h (Set Super
VGA mode). The application would then exit.
Footnotes:
1 IBM and VGA are trademarks of International Business Machines Corporation.
2 The term "Super VGA" is used in this document as a term for video graphics
products implementing a superset of the standard IBM VGA display adapter.
1 Mandatory information
2 Information provided only if bit D1 of Mode Attributes is set