# FreeVGA Project Home - Hardware level VGA and SVGA programming info
Pure VGA/SVGA hardware programming (registers, identification, and otherlow-level stuff.)
Author: Joshua Neal
Keywords: VGA SVGA hardware video programming

Home News Mirrors Preface Background VGA SVGA Tricks Links Disclaimer Products Feedback Back

Hardware Level VGA and SVGA Video Programming Information Page
Home

7 | 6 | 5 | 4 | 3 | 2 | 1 | 0
F | R | E | E |  | V | G | A

This page is home to the FreeVGA Project -- dedicated to providing a totally FREE source of information about video hardware. Additional goals/information are located here.
"Keep on rocking in the free world." - Neil Young

Latest News
08/01/1998 -- More information is now up, including a large portion of the "standard" VGA reference. Some other minor changes have been made to other information. Expect more updates in the not too far future.

06/20/1998 -- The work contiues. Added three new mirrors. Some of the information that was located in the VGA reference, but really applies to video programming in general has been moved to the new Background Information (formerly Introduction) section of this page, and has been released. Also, a glossary has been added defining terms related to video programming, but is not very comprehensive at the moment, although this should improve over time. Many minor corrections have been made to the released material after being pointed out by the insightful people reading the information. Thank you!

06/08/1998 -- The mirror list has been updated with the new entries. Special thanks goes out to all those who have donated their personal resources to advance the project's goals. Also, the first section of *real* information is online, the low-level programming introduction. This section has been relatively stable for quite some time, and seems to be releasable. It is my goal to release the information after it stabilizes, and has been verified for accuracy.

06/04/1998 -- If you are looking for the current work-in-progress, and have been given the passwords for the archive for review purposes, it can be downloaded here. For those with current problems/questions that this page addresses, please feel free to use the Feedback Form to contact the author. If a link is marked with (WIP), it is not posted online and at this time is available only for review, upon request, and under specific limitations.

Mirror Sites
At this time, the project is experimenting with the feasibility of maintaining mirror sites to make this information more widely available. The following mirror sites are provided for your convenience. If you are interested in hosting a mirror site of this information, please contact the author for more information. If you are experiencing problems with any of these mirrors please use the Feedback Form to contact the author, as it is likely my fault that the problem has arisen.

- USA, Arizona, Phoenix -- hosted by Joshua Neal
- USA, California, San Francisco -- hosted by Marty Price
- USA, Massachusetts, Boston -- hosted by Leif Hardison
- USA, Oregon, Eugene -- hosted by Byron Miller
- Australia, Canberra -- hosted by David Murn
- Hungary -- hosted by Justin Doiel
- The Netherlands, Apeldoorn -- hosted by Simon Weijgers
- The Netherlands, Nijmegen -- hosted by Simon Weijgers

Preface
This page's purpose is to provide free low-level programming information to programmers interested in the low-level details of programming the VGA and Super VGA adapters, in a format independent of operating environment or programming language. This page is not intended to be a reference to graphics or game programming algorithms but rather a reference for those people attempting to implement such algorithms in whatever environment they are using. This page is not intended to be a showcase of web technology and thus will use HTML features and graphics only when it is necessary to convey information. For example, I have left the colors and fonts set to the default, so you can actually use the default preferences in your browser. I am continuously adding material to this page and have tried to incorporate links to other sites with valuable information.

- Introduction -- An introduction to low-level programming
- Standard VGA Chipset Reference -- Documents the common functionality of all VGA and SVGA adapters.
- Super VGA Hardware Chipset Reference -- Documents the specifics of VGA and SVGA adapters.
- Other Video Hardware Reference -- Documents video related hardware other than VGA and SVGA adapters.
- Tricks and Techniques -- Articles detailing the use of low-level programming for optimization or special effects.
- Other References -- Gives pointers to other related material.
- Warnings and Disclaimer -- Reading this section before utilizing any information contained within is both recommended and required.

Background Information
Foremost, this page is meant to be a place online where one can learn about low-level programming (If everyone knew all of this information then this page would be redundant!) This section contains general information that can be very helpful when attempting to use the programming information located on this site.

- Introduction to Low-level Programming -- Answers general questions about the topic. (Released 6/08/1998)
- Overview of Video Hardware Functionality -- Describes the job of the video hardware and what components it uses to perform that task. (Released 6/15/1998)
- Video Timing Information -- Gives information about video timing that is useful for video programmers. (Released 6/15/98)
- Video Programming Glossary -- Defines terms that are related to video programming. (Added 6/15/1998)

Standard VGA Chipset Reference
This section documents the subset of functionality present on nearly all computers today. The VGA BIOS utilizes only a fraction of the capability of the VGA hardware. By programming the hardware at the lowest level, one gains the flexibility to unleash the hardware's full potential.

- VGA Chipset Reference -- Documentation of the "Standard" VGA implementation. (Released 8/01/1998)

Super VGA Hardware Chipset Reference
This section documents the known functionality of specific VGA/SVGA chipsets. Because developers of chipsets and video cards face incredible competition, they have added features and functionality far beyond the standard VGA hardware. Unfortunately to programmers, these features have been implemented differently in each particular chipset, and even differently between products by the same manufacturer. It is difficult to obtaining information on these chipsets and their implementations, particularly so if the chipset is considered "obsolete" by the manufacturer. Because of the open-ended nature of this topic (chipsets are under constant development) this page will be updated constantly as new information becomes available.

- SVGA Chipset Reference -- Documentation of specific VGA/SVGA hardware implementations. (WIP)

Other Video Hardware Reference
This section is for video hardware that does not specifically fit into the category of VGA or SVGA, such as MPEG hardware, video capture hardware, non-integrated 3D accelerators, virtual reality gear, digital video cameras, stereoscopic 3D goggles, TV tuner cards, non-VGA compatible video adapters and the like. This is another open-ended topic but is not the primary focus of this page.

Tricks and Techniques
This section contains useful information on how to utilize the VGA/SVGA hardware to optimize specific tasks or implement visual effects. Many of these techniques have been utilized by game and demo programmers alike to push the envelope of the hardware's capacity.

- Tricks and Techniques -- Details on using the hardware to your advantage. (WIP)

Other References:
This section gives some pointers to other available VGA hardware information available. Note that they are listed here because

- Online Information

- The COMP.SYS.IBM.PC.HARDWARE.VIDEO Frequently Asked Questions (FAQ) document, although not programming oriented does contain much useful information about video hardware. The site also includes links to nearly every vendor of video cards and monitors, as well as links to pages covering monitor specifications. If you are looking for video hardware related information not covered by the FreeVGA Project's goals, you will likely find it or a link to it here.
- Finn Thøgersen's VGADOC & WHATVGA Homepage -- An excellent collection of information for programming VGA and SVGA.
- Boone's Programming the VGA Registers -- Contains a very sketchy "Documentation Over the I/O Registers for Standard VGA Cards" by "Shaggy of The Yellow One." It is free and distributable over the "Feel free to spread this to whoever wants it....." licensing agreement.
- Andrew Scott's VGA Programmers Master Reference Manual (click here to download from ftp.cdrom.com) -- A dated ('91) document that is interesting if only because it attempts to document the VGA hardware (actually the Trident TVGA8900 hardware) in a form useful for "writing an applications specific BIOS." Begins with a very general description the topic (a wordy definition of computation in general) and ends with detailed register descriptions. Unfortunately, it lacks much material between these areas. Worse, far from being a free resource, it requires shareware registration fees that must be sent to the U.K. by means of a check drawn from a U.K. bank only!
- Richard Wilton's Programmer's Guide to PC and PS/2 Video Systems (click here to download from www.dc.ee) An older reference, covers MDA, Hercules, CGA, MCGA, and VGA. Not much VGA material but does have some register documentation.
- IBM's RS/6000 CHRP I/O Device Reference Appendix A: VGA Programming Model -- A good VGA reference from the makers of the IBM VGA. Better than most on-line references as it contains programming information in addition to a register description of the hardware; however it is still vague in many areas. Especially interesting as it begins with an acknowledgment of the many "clones" of the VGA hardware.
- Some brief VGA register info is available from the Chip Directory, also mirrored at other sites (see Chip Directory home page).
- Eric S. Raymond's The XFree86 Video Timings HOWTO -- explains video mode and timing information used in configuring XFree86 to support a given monitor, intended to be used by the end user. Much of the information is not sepcific to XFree86, and can be used by a programmer as an example of how a low-level video routine can allow the end-users to setup video modes that pertain to their monitors, as well as being useful to an end-user of such a program attempting to configure such a routine to work with their monitors.
- Tomi Engdahl's electronics info page has some information about video and vga timings, as well as a section on VGA to TV converters and homemade circuitry. The VGA to TV converter page contans much information that pertains to driving custom TV and monitors with a VGA or SVGA card that doesn't have the capability built-in.

- Offline Information

- Richard F. Ferraro's Programmer's Guide to the EGA, VGA, and Super VGA Cards, Third Edition -- A good text, one of the few good books on a subject as broad and as complicated as low-level I/O.
- Frank van Gilluwe's The Undocumented PC, Second Edition -- A Programmer's Guide to I/O, CPUs and Fixed Memory Areas -- An excellent book, which is the likely the most complete PC technical reference ever written, and includes 100+ pages of video programming information, although very little VGA register information.
- Bertelsons, Rasch & Hoffman's PC Underground: Unconventional Programming Topics -- I bought this book on markdown, due to it having some VGA information in it. I was surprised to find that not only did it have a register description, but it also described some possible effects that can be done with that register.

- Miscellaneous Information (Information not specific to video hardware, but useful to video programmers.)

- Norman Walsh's The comp.fonts FAQ -- An excellent resource on fonts, typefaces, and such. Particularly helpful is the section on intellectual property protection for fonts, as the copyright legality of fonts and typefaces is somewhat confusing. Note -- Norman Walsh has ceased maintaining the FAQ, however, this link will remain until a new version of the FAQ is produced.

Product Recommendations
The FreeVGA Project does not make hardware recommendations as pertains to hardware covered by the documentation, in an attempt to prevent any conflicts of interest. However, there are other products that can be extremely helpful when implementing the information found here, such as monitors, test equipment, and software. I will not refuse any request to list a product on this page, however I will categorize it depending upon its importance and suitability for video related software development using opinions of myself and others. If you disagree with the opinion here, please use the Feedback Form to voice that opinion, such that it can be taken into account.

- Product Recommendations -- Listing of products that can be beneficial to the target audience of this site.

Warnings and Disclaimer

- Danger: Monitors are designed to operate within certain frequency ranges, or for fixed frequency monitors at certain frequencies. Driving a monitor at a frequency that it is not designed for is not recommended and may cause damage to the monitor's circuitry which can result in a fire and safety risk. It is wise to know and understand the specifications of the monitor(s) that you will be driving in order to prevent damage. Consult the manufacturers documentation for the monitor for the information, or if not available, contact the manufacturer directly. If the monitor makes unusual noises, or the internal temperature exceeds the rated temperature of its components, the monitor is likely to experience failure. This failure may not be immediate, but is under most circumstances inevitable. Monitor failures can be violent in nature, and can explode and produce shrapnel, as well as overheat and catch fire. In no circumstance should one leave a monitor unattended in an uncertain state. Furthermore, exceeding the rated maximum frequencies of a monitor may cause the phosphors to age prematurely, as well as increase the amount of harmful radiation projected towards the viewer beyond the specified maximums.
- Warning: Clock chips and RAMDACs as well as other components of the video card are designed with a maximum frequency. Programming these chips to operate at a frequency greater than they were designed for causes the chips to run hotter than they were designed to operate, and may cause the component to fail. It is wise to know and understand the maximum operating frequency of the components of any video subsystem you will be programming. Do not assume that the component is safe to operate at a particular frequency because it can be programmed to operate at that frequency. The rated frequencies are rated and verified according to batch yield. As clock frequencies increase, the failure rate of the chips during manufacturing testing increases. It is impossible to predict the actual point at which a given semiconductor will fail, thus manufacturers monitor the failure rate statistically to determine the frequency that gives an acceptable batch yield. These failures are typically unobservable and require a method of testing every gate on the chip, as many failures may only be observable under very specific circumstances, typically resulting in intermittent failures, although complete "meltdown" due to a newly formed short is also possible. If they occur, the entire semiconductor must be rejected due to these failures being irrepairable. As you exceed the rated frequency you are taking a semiconductor that has passed a thourough test at its rated frequency and entering the realm of statistical probability. Attempting to find the maximum frequency is impossible, as by the time a failure is noticable the semiconductor has already been permanently damaged. Cooling the external package by using a heat sink and/or fan may increase the frequency at which a semiconductor can operate; however, there is still no way to determine the frequency at which a specific semiconductor will fail as it can only be done statistically and practically undetectable without being able to determine the proper operation of every gate on the semiconductor. Semiconductors such as fast CPU's are rated with the required heat sink and/or cooling fan in place. Aftermarket cooling devices are sold as "performance coolers" due to the inability to determine the statistical likelyhood of failure and the inability of the end user to simply reject failed semiconductors. Under no circumstances should a programmer develop software that overclocks an end-user's hardware without the end user being warned of the statistical likelyhood of failure. Making any claims about the safety of the software's operation can leave the programmer with legal liability that cannot be excluded by disclaimer.
- Disclaimer: The author presents this information as-is without any warranty, including suitability for intended purpose. The author is not responsible for damages resulting by the use of the information, incidental or otherwise. By utilizing this information, you as the programmer take full liability for any damages caused by your use of this information. If you are not satisfied with these terms, then your only recourse is to not use this information. While every reasonable effort is made to ensure that this information is correct, the possibility exists for error and is not guaranteed for accuracy, and disclaims liability for any changes, errors or omissions and is not responsible for any damages that may arise from the use or misuse of this information. License to use this information is only granted where this disclaimer applies in whole.

Feedback
I can be reached online via the Feedback Form. Consider it your moral obligation to send feedback about the page, including inaccuracies, confusing parts, missing info, questions/answers and other feedback type thingies.

Notice: All trademarks used or referred to on this page are the property of their respective owners.
All pages are Copyright © 1997, 1998, J. D. Neal, except where noted. Permission for utilization and distribution is subject to the terms of the FreeVGA Project Copyright License.