256 lines
15 KiB
HTML
256 lines
15 KiB
HTML
<HTML>
|
|
<HEAD>
|
|
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
|
|
<META NAME="Author" CONTENT="Joshua Neal">
|
|
<META NAME="Description" CONTENT="Pure VGA/SVGA hardware programming (registers, identification, and otherlow-level stuff.)">
|
|
<META NAME="KeyWords" CONTENT="VGA SVGA hardware video programming">
|
|
<TITLE>FreeVGA--About the FreeVGA Project</TITLE>
|
|
</HEAD>
|
|
<BODY>
|
|
|
|
<CENTER><A HREF="home.htm">Home</A> <A HREF="#intro">Intro</A> <A HREF="#completeness">Completeness</A>
|
|
<A HREF="#contrib">Contribution</A> <A HREF="#membership">Membership</A>
|
|
<A HREF="#questions">Questions</A> <A HREF="home.htm">Back</A>
|
|
<HR WIDTH="100%"><B>Hardware Level VGA and SVGA Video Programming Information
|
|
Page</B></CENTER>
|
|
|
|
<CENTER>About the FreeVGA Project
|
|
<HR WIDTH="100%"></CENTER>
|
|
|
|
|
|
<P><A NAME="intro"></A><B>Introduction</B>
|
|
<BR> As a software programmer
|
|
for the PC architecture I have noticed that there is plenty of free information
|
|
existing on the Internet for programming PC hardware, with the notable
|
|
exception of video adapters, MPEG cards and the like. When the VGA was
|
|
the standard adapter card in PC's, programming was relatively straightforward.
|
|
However, when SVGA adapters appeared on the market, there was little standardization
|
|
between separate vendor's products. For this reason, applications and graphical
|
|
user interface systems required specialized drivers to utilize the extended
|
|
capabilities of the SVGA adapters. Either these specialized drivers were
|
|
written by the video card vendor or they had to be written by the application
|
|
vendor. Unfortunately due to the cost of specifications and complexity
|
|
of hardware, most free or shareware programs supported only the standard
|
|
VGA. The goal of this project, under my direction, is to explore the area
|
|
of low-level video programming and provide information for programmers
|
|
of free software throughout the world.
|
|
<BR> With the growing popularity
|
|
of the free software concept, more and more specialized applications are
|
|
written every day. Many of these applications could take advantage of the
|
|
specialized features of the video hardware but often the information required
|
|
is not available. This projects goal is to make that information available
|
|
By gaining the cooperation of both programmers and hardware manufacturers
|
|
an excellent reference can be developed. Internet technology makes it possible
|
|
to provide a free resource updated in a timely fashion as opposed to printed
|
|
matter which takes time to print and deliver.
|
|
|
|
<P><A NAME="completeness"></A><B>Completeness</B>
|
|
<BR> Why would a low-level programmer
|
|
need this reference rather than simply use datasheets and chipset specifications
|
|
from the manufacturers themselves? First, the manufacturers may no longer
|
|
provide literature on "obsolete" chipsets. Second, such datasheets are
|
|
often aimed at hardware designers rather than programmers. Programmers
|
|
are trying to implement software on existing hardware rather design hardware.
|
|
Many of the details needed to program the hardware are dependent on the
|
|
implementation of the video adapter. Datasheets typically only provide
|
|
information on one particular component of the video hardware. It is necessary
|
|
to understand how the components in the adapter are "wired" together to
|
|
be able to program the adapter. This information is rarely found in datasheets
|
|
or manufacturer's documentation. Third, as demonstrated on the VGA and
|
|
some specific SVGA hardware, there are always programmers who can find
|
|
ways to cleverly program the hardware to provide capabilities unimagined
|
|
by the manufacturer. To do this, it requires the programmer to have intimate
|
|
knowledge of the hardware, as BIOS services provide a "lowest common denominator"
|
|
of capability.
|
|
|
|
<P><A NAME="contrib"></A><B>Contribution</B>
|
|
<BR><B> </B>This section is for
|
|
those interested in contributing to the FreeVGA Project. The primary objective
|
|
of this project is to gather information about video hardware, to verify
|
|
this information as best as possible, then to organize the information
|
|
in a form usable for any application, and finally to make this information
|
|
freely available to all programmers. Because of the non-profit nature of
|
|
this project, all information provided is the result of generous contribution
|
|
by myself or others. The primary resources required by this project are:
|
|
chipset datasheets/documentation, developer kits for video boards, video
|
|
adapter boards used for testing and verifying information, and finally
|
|
"postcards from the bleeding edge" i.e. information about the real world
|
|
problems and their workarounds from video programmers. If you can provide
|
|
any of these resources to the project or any other related assistance myself
|
|
and other programmers who benefit give thanks to your generosity. Your
|
|
name will be forever enshrined on the list of contributors, along with
|
|
a link to your homepage if you so desire.
|
|
<BR> I can be reached via the <A HREF="feedback.htm">feedback
|
|
form</A>. If you wish to donate hardware or documentation, please send
|
|
it, along with your name and the link you wish to include in the list of
|
|
contributors to:
|
|
|
|
<P>Joshua Neal
|
|
<BR>FreeVGA Project
|
|
<BR>925 N. Coronado Dr.
|
|
<BR>Gilbert, AZ 85234
|
|
|
|
<P><A NAME="membership"></A><B>Membership</B>
|
|
<BR> Because of the nature of
|
|
this project, any contributor can consider themselves a member if they
|
|
wish to do so. As the founder of this project I am willing to donate my
|
|
time and resources to ensuring the continuing organization, accuracy, and
|
|
usability of the FreeVGA Project's documentation. I will continue to do
|
|
this indefinitely, although if the task becomes overwhelming I will solicit
|
|
volunteers to assist with the project. There may at some point in the future
|
|
be special considerations for vendors that choose to support the projects
|
|
goals.
|
|
|
|
<P><A NAME="questions"></A><B>Open-Ended Questions</B>
|
|
<BR> The problem of documenting
|
|
video card operation and behavior is difficult because of the large amount
|
|
of information available, and because video hardware is constantly evolving,
|
|
making documentation a problem of hitting a moving target. Another problem
|
|
is that because video cards are projects of human endeavor and due to their
|
|
complexity, their implementation often differs from published specifications.
|
|
Even two manufacturer's products based upon the same chipset can contain
|
|
enough variation to make them separate cases from a programmer's viewpoint.
|
|
The FreeVGA Project attempts to provide answers to the following questions:
|
|
<UL>
|
|
<LI>
|
|
<B>How does one detect what VGA/SVGA adapter is present even when no access
|
|
to BIOS is available?</B></LI>
|
|
</UL>
|
|
Because video hardware was developed
|
|
by many independent vendors along separate evolutionary paths, there is
|
|
very little knowledge about how to identify the particular model of video
|
|
card present in a machine. Because identifying the particular model is
|
|
crucial to utilizing the advanced features of a specific model, this is
|
|
an important task that nearly all software written for the SVGA needs to
|
|
perform. In many cases, such as when writing programs under an operating
|
|
system other than MS-DOS/Windows, it may not be possible nor is it good
|
|
practice to access BIOS for determining the specific model. Furthermore,
|
|
the more recent PCI bus design is being incorporated into many systems
|
|
with non-80x86 chips, such as the PowerPC, Alpha, and even high end workstations.
|
|
However, the manufacturers of the hardware may only support Mac and PC
|
|
versions of their cards, considering other platforms too much of a niche
|
|
market to support. Since their inception in the PC market, most video cards
|
|
have had the capability to work with another card (albeit different) in
|
|
the same machine. Some newer PCI cards allow multiple cards to be used
|
|
in one machine. Until recently this capability has been unsupported by
|
|
operating systems and programs. For debugging video routines there is no
|
|
equal to having a second monitor attached--one monitor can display the
|
|
program's output while the other provides the debugging interface. Note
|
|
that the need for a second monitor could be reduced somewhat if better
|
|
virtualization of the display hardware was implemented. This project aims
|
|
to give programmers the skills and knowledge to better utilize the video
|
|
hardware.
|
|
<UL>
|
|
<LI>
|
|
<B>How does one perform standard video operations on a particular card
|
|
without utilizing the video BIOS interface?</B></LI>
|
|
</UL>
|
|
BIOS was designed to support
|
|
MS-DOS programs on the 8086. Computers have progressed far beyond that
|
|
point but BIOS has remained basically the same (with the exception of VESA
|
|
BIOS.) Even then, most facilities provided by the video BIOS are not particularly
|
|
useful. An example is the BIOS Read and Write Pixel commands. These are
|
|
the only BIOS provided method of accessing video memory other than text
|
|
functions. Anyone like myself who started learning 8086 assembler to speed
|
|
up their graphics discovered this function, and said "Cool. This is going
|
|
to be easy." I then ran my first program and discovered that I had just
|
|
lost a few orders of magnitude of performance. Thus I started to learn
|
|
to interact with the video card hardware directly. VESA BIOS is better,
|
|
although I have seen very few on-board implementations that work properly
|
|
(if present), usually resulting in the user having to run a TSR program
|
|
that provides VESA services in RAM. While VESA BIOS does provide some facilities
|
|
for non-real mode problems it still does place a function call penalty
|
|
on video code. My biggest complaint is that with VESA BIOS you are restricted
|
|
to programming to the lowest common denominator of all video hardware,
|
|
and thus to utilize any special features of a chipset, you still have to
|
|
learn to program the card directly. Many video cards are now considered
|
|
"obsolete" by their manufacturer (or the manufacturer has joined the great
|
|
corporation in the sky...) and developer support is no longer available.
|
|
The unfortunate problem is that these "obsolete" cards are the same cards
|
|
being used by non-profit organizations and schools who could otherwise
|
|
reap the benefits of a wide variety of free software.
|
|
<UL>
|
|
<LI>
|
|
<B>What are the specialized hardware features (2D/3D acceleration, hardware
|
|
cursor, video acceleration, etc.) does a particular card have and how does
|
|
one utilize these features?</B></LI>
|
|
</UL>
|
|
<B> </B>This is probably the area where
|
|
the documentation is most important. These features are programmed differently
|
|
on each vendor's video hardware, but can improve the performance of a particular
|
|
application by several orders of magnitude. Programmers such as video game
|
|
programmers and assembly demo programmers have demonstrated that by pushing
|
|
hardware to its limits, previously inconceivable animation and special
|
|
effects are possible. Recent advances in 3D acceleration have made virtual
|
|
reality on the desktop a possibility. It is crucial to developers that
|
|
they be able to thoroughly understand the hardware's operation to maximize
|
|
its performance.
|
|
<UL>
|
|
<LI>
|
|
<B>What are the differences between specific implementations of particular
|
|
chipsets, and if so how does one write software that works with these differences?</B></LI>
|
|
</UL>
|
|
<B> </B>Even programmers programming for
|
|
the relatively standard VGA hardware can run into problems in this area.
|
|
This is the reason so many packages state support for IBM VGA or 100% compatible.
|
|
Frequently programmers encounter slight differences in hardware that, under
|
|
specific circumstances can cause their programs to fail to operate properly.
|
|
If programmers had detailed documentation of the hardware differences of
|
|
specific implementations, programmers could, and are generally willing
|
|
to, write workarounds in their code in order to provide support for this
|
|
hardware. Occasionally subtle hardware problems arise in a particular version
|
|
of a board and is corrected in a later revision (possibly by simply revising
|
|
the BIOS.) It is important to recognize the earlier version and be able
|
|
to write software that can deal with its particular problem. In addition,
|
|
many chipsets are designed in such a way that they can work with a variety
|
|
of support devices such as clock generators and Video DACs. It is important
|
|
to know how to detect and control these support devices, which may (and
|
|
usually is) be different in every implementation. Some of these devices
|
|
could be interchanged with pin-compatible devices which could provide additional
|
|
functionality. However, this would require special programming to utilize
|
|
the device's features.
|
|
<UL>
|
|
<LI>
|
|
<B>How does one perform diagnostics on a particular video card in order
|
|
to identify inoperative, semi-inoperative, and improperly configured hardware?</B></LI>
|
|
</UL>
|
|
While testing and verifying the operation
|
|
of various video boards. I discovered some cards that did not respond properly
|
|
to my programming. My initial thought was that I was doing something wrong
|
|
and tried to figure out what was wrong. However, further testing on another
|
|
identical card demonstrated that the first board had simply failed. There
|
|
is little diagnostic software for the VGA and SVGA adapters particularly
|
|
when dealing with some of the more esoteric features. This is primarily
|
|
because little has been identified about the correct behavior of video
|
|
cards. Many manufacturers fail to include a thorough diagnostics utility
|
|
with their hardware, and the diagnostics that are provided are usually
|
|
specific to one operating system.
|
|
<UL>
|
|
<LI>
|
|
<B>How does one properly emulate a particular VGA/SVGA adapter in order
|
|
to properly implement compatibility for legacy full-screen applications?</B></LI>
|
|
</UL>
|
|
<B> </B>This is a particular
|
|
are of interest to myself and others. This knowledge can be used to create
|
|
a virtual machine capable of multitasking legacy applications. Particular
|
|
features that could be provided are the ability to execute a full-screen
|
|
program in the background, execute a full-screen program in a virtual window
|
|
on a desktop, emulate a particular video adapter and translate its output
|
|
to a form compatible with the hardware on the machine, provide the ability
|
|
to remotely view an applications screen across a network, provide the ability
|
|
to debug a full-screen application without having to use a dual monitor
|
|
system or attached text terminal. Huge benefits can be reaped, but all
|
|
of the details of a particular hardware configuration must be known for
|
|
proper emulation/virtualization. For example, programs that attempt to
|
|
autodetect the hardware often rely on undocumented behaviors of video adapters.
|
|
These undocumented behaviors must be emulated properly for the application
|
|
to work properly.
|
|
|
|
<P>Notice: All trademarks used or referred to on this page are the property
|
|
of their respective owners.
|
|
<BR>All pages are Copyright © 1997, 1998, J. D. Neal, except where
|
|
noted. Permission for utilization and distribution is subject to the terms
|
|
of the <A HREF="license.htm">FreeVGA Project Copyright License</A>. <IMG SRC="http://www.goodnet.com/~tinara/cgi-bin/imgserv.cgi?logo2.gif" >
|
|
</BODY>
|
|
</HTML>
|