3 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
4 <META NAME="Author" CONTENT="Joshua Neal">
5 <META NAME="Description" CONTENT="Pure VGA/SVGA hardware programming (registers, identification, and otherlow-level stuff.)">
6 <META NAME="KeyWords" CONTENT="VGA SVGA hardware video programming">
7 <TITLE>FreeVGA Project Home - Hardware level VGA and SVGA programming info</TITLE>
11 <CENTER><A HREF="home.htm">Home</A> <A HREF="#news">News</A> <A HREF="#mirrors">Mirrors</A>
12 <A HREF="#preface">Preface</A> <A HREF="#background">Background</A> <A HREF="#vga">VGA</A>
13 <A HREF="#svga">SVGA</A> <A HREF="#tricks">Tricks</A> <A HREF="#references">Links</A>
14 <A HREF="#warn">Disclaimer</A> <A HREF="#product">Products</A> <A HREF="#feedback">Feedback</A>
15 <A HREF="home.htm">Back</A>
16 <HR><B>Hardware Level VGA and SVGA Video Programming Information Page</B></CENTER>
19 <HR WIDTH="100%"></CENTER>
21 <CENTER> </CENTER>
23 <CENTER><TABLE BORDER WIDTH="600" CELLPADING="2" >
24 <TR ALIGN=CENTER VALIGN=CENTER>
42 <TR ALIGN=CENTER VALIGN=CENTER>
43 <TD WIDTH="75"><FONT SIZE=+4>F</FONT></TD>
45 <TD WIDTH="75"><FONT SIZE=+4>R</FONT></TD>
47 <TD WIDTH="75"><FONT SIZE=+4>E</FONT></TD>
49 <TD WIDTH="75"><FONT SIZE=+4>E</FONT></TD>
51 <TD WIDTH="75"><FONT SIZE=+4> </FONT></TD>
53 <TD WIDTH="75"><FONT SIZE=+4>V</FONT></TD>
55 <TD WIDTH="75"><FONT SIZE=+4>G</FONT></TD>
57 <TD WIDTH="75"><FONT SIZE=+4>A</FONT></TD>
61 <CENTER>This page is home to the <A HREF="freevga.htm">FreeVGA Project</A>
62 -- dedicated to providing a totally FREE source of information about video
63 hardware. <A HREF="freevga.htm">Additional goals/information are
64 located here.</A></CENTER>
66 <CENTER>"Keep on rocking in the free world." - Neil Young</CENTER>
69 <P><A NAME="news"></A><B>Latest News</B>
70 <BR><B> 08/01/1998</B> -- More
71 information is now up, including a large portion of the "standard" VGA
72 reference. Some other minor changes have been made to other information.
73 Expect more updates in the not too far future.
75 <P> <B>06/20/1998</B> -- The
76 work contiues. Added three new mirrors. Some of the information
77 that was located in the VGA reference, but really applies to video programming
78 in general has been moved to the new Background Information (formerly Introduction)
79 section of this page, and has been released. Also, a glossary has
80 been added defining terms related to video programming, but is not very
81 comprehensive at the moment, although this should improve over time. Many
82 minor corrections have been made to the released material after being pointed
83 out by the insightful people reading the information. Thank you!
85 <P><B> 06/08/1998</B> -- The
86 mirror list has been updated with the new entries. Special thanks goes
87 out to all those who have donated their personal resources to advance the
88 project's goals. Also, the first section of *real* information is
89 online, the low-level programming introduction. This section has
90 been relatively stable for quite some time, and seems to be releasable.
91 It is my goal to release the information after it stabilizes, and has been
92 verified for accuracy.
94 <P><B> 06/04/1998</B> --<B> </B>If
95 you are looking for the current work-in-progress, and have been given the
96 passwords for the archive for review purposes, it can be downloaded <A HREF="http://www.goodnet.com/~tinara/wip.zip">here</A>.
97 For those with current problems/questions that this page addresses, please
98 feel free to use the <A HREF="#feedback">Feedback Form</A> to contact the
99 author. If a link is marked with <B>(WIP)</B>, it is not posted online
100 and at this time is available only for review, upon request, and under
101 specific limitations.
103 <P><A NAME="mirrors"></A><B>Mirror Sites</B>
104 <BR> At this time, the project
105 is experimenting with the feasibility of maintaining mirror sites to make
106 this information more widely available. The following mirror sites
107 are provided for your convenience. If you are interested in hosting
108 a mirror site of this information, please contact the author for more information.
109 If you are experiencing problems with any of these mirrors please use the
110 <A HREF="#feedback">Feedback Form</A> to contact the author, as it is likely
111 my fault that the problem has arisen.
114 <A HREF="http://www.goodnet.com/~tinara/FreeVGA/home.htm">USA, Arizona,
115 Phoenix</A> -- hosted by <A HREF="feedback.htm">Joshua Neal</A></LI>
118 <A HREF="http://sf.znet.com/~vhold/FreeVGA/home.htm">USA, California, San
119 Francisco</A> -- hosted by <A HREF="http://sf.znet.com/~vhold/">Marty Price</A></LI>
122 <A HREF="http://hardware.doa.org/FreeVGA/home.htm">USA, Massachusetts,
123 Boston</A> -- hosted by <A HREF="http://hardware.doa.org/">Leif Hardison</A></LI>
126 <A HREF="http://www.pacwest.net/byron13/FreeVGA/home.htm">USA, Oregon,
127 Eugene</A> -- hosted by <A HREF="http://www.pacwest.net/byron13/">Byron
131 <A HREF="http://hups.apana.org.au/~scuffer/FreeVGA/home.htm">Australia,
132 Canberra</A> -- hosted by <A HREF="http://hups.apana.org.au/~scuffer/">David
136 <A HREF="http://nightmare.euroweb.hu/~ytiddo/FreeVGA/home.htm">Hungary</A>
137 -- hosted by <A HREF="http://nightmare.euroweb.hu/~ytiddo/">Justin Doiel</A></LI>
140 <A HREF="http://www.inter.uunet.nl/hcc/S.Weijgers/FreeVGA/home.htm">The
141 Netherlands, Apeldoorn</A> -- hosted by <A HREF="http://web.inter.nl.net/hcc/S.Weijgers/">Simon
145 <A HREF="http://n152.apeldoorn.telekabel.euronet.nl/FreeVGA/home.htm">The
146 Netherlands, Nijmegen</A> -- hosted by <A HREF="http://web.inter.nl.net/hcc/S.Weijgers/">Simon
149 <A NAME="preface"></A><B>Preface</B>
150 <BR> This page's purpose is to
151 provide free low-level programming information to programmers interested
152 in the low-level details of programming the VGA and Super VGA adapters,
153 in a format independent of operating environment or programming language.
154 This page is not intended to be a reference to graphics or game programming
155 algorithms but rather a reference for those people attempting to implement
156 such algorithms in whatever environment they are using. This page is not
157 intended to be a showcase of web technology and thus will use HTML features
158 and graphics only when it is necessary to convey information. For example,
159 I have left the colors and fonts set to the default, so you can actually
160 use the default preferences in your browser. I am continuously adding material
161 to this page and have tried to incorporate links to other sites with valuable
165 <A HREF="#intro">Introduction</A> -- An introduction to low-level programming</LI>
168 <A HREF="#vga">Standard VGA Chipset Reference</A> -- Documents the common
169 functionality of all VGA and SVGA adapters.</LI>
172 <A HREF="#svga">Super VGA Hardware Chipset Reference</A> -- Documents the
173 specifics of VGA and SVGA adapters.</LI>
176 <A HREF="#other">Other Video Hardware Reference</A> -- Documents video
177 related hardware other than VGA and SVGA adapters.</LI>
180 <A HREF="#tricks">Tricks and Techniques</A> -- Articles detailing the use
181 of low-level programming for optimization or special effects.</LI>
184 <A HREF="#references">Other References</A> -- Gives pointers to other related
188 <A HREF="#warn">Warnings and Disclaimer</A> -- Reading this section before
189 utilizing any information contained within is both recommended and required.</LI>
191 <A NAME="background"></A><B>Background Information</B>
192 <BR> Foremost, this page is meant
193 to be a place online where one can learn about low-level programming (If
194 everyone knew all of this information then this page would be redundant!)
195 This section contains general information that can be very helpful when
196 attempting to use the programming information located on this site.
199 <A HREF="llintro.htm">Introduction to Low-level Programming</A> -- Answers
200 general questions about the topic. <B>(Released 6/08/1998)</B></LI>
203 <A HREF="hardovr.htm">Overview of Video Hardware Functionality</A> -- Describes
204 the job of the video hardware and what components it uses to perform that
205 task. <B>(Released 6/15/1998)</B></LI>
208 <A HREF="vtiming.htm">Video Timing Information</A> -- Gives information
209 about video timing that is useful for video programmers.<B> (Released 6/15/98)</B></LI>
212 <A HREF="glossary.htm">Video Programming Glossary</A> -- Defines terms
213 that are related to video programming. <B>(Added 6/15/1998)</B></LI>
215 <A NAME="vga"></A><B>Standard VGA Chipset Reference</B>
216 <BR><B> </B>This section documents
217 the subset of functionality present on nearly all computers today. The
218 VGA BIOS utilizes only a fraction of the capability of the VGA hardware.
219 By programming the hardware at the lowest level, one gains the flexibility
220 to unleash the hardware's full potential.
223 <A HREF="vga/vga.htm">VGA Chipset Reference</A> -- Documentation of the
224 "Standard" VGA implementation. <B>(Released 8/01/1998)</B></LI>
226 <A NAME="svga"></A><B>Super VGA Hardware Chipset Reference</B>
227 <BR> This section documents the
228 known functionality of specific VGA/SVGA chipsets. Because developers of
229 chipsets and video cards face incredible competition, they have added features
230 and functionality far beyond the standard VGA hardware. Unfortunately to
231 programmers, these features have been implemented differently in each particular
232 chipset, and even differently between products by the same manufacturer.
233 It is difficult to obtaining information on these chipsets and their implementations,
234 particularly so if the chipset is considered "obsolete" by the manufacturer.
235 Because of the open-ended nature of this topic (chipsets are under constant
236 development) this page will be updated constantly as new information becomes
240 <A HREF="svga/svga.htm">SVGA Chipset Reference</A> -- Documentation of
241 specific VGA/SVGA hardware implementations. <B>(WIP)</B></LI>
243 <A NAME="other"></A><B>Other Video Hardware Reference</B>
244 <BR><B> </B> This section is for
245 video hardware that does not specifically fit into the category of VGA
246 or SVGA, such as MPEG hardware, video capture hardware, non-integrated
247 3D accelerators, virtual reality gear, digital video cameras, stereoscopic
248 3D goggles, TV tuner cards, non-VGA compatible video adapters and the like.
249 This is another open-ended topic but is not the primary focus of this page.
251 <P><A NAME="tricks"></A><B>Tricks and Techniques</B>
252 <BR> This section contains useful
253 information on how to utilize the VGA/SVGA hardware to optimize specific
254 tasks or implement visual effects. Many of these techniques have been utilized
255 by game and demo programmers alike to push the envelope of the hardware's
259 <A HREF="tricks/tricks.htm">Tricks and Techniques</A> -- Details on using
260 the hardware to your advantage. <B>(WIP)</B></LI>
262 <A NAME="references"></A><B>Other References:</B>
263 <BR><B> </B>This section gives
264 some pointers to other available VGA hardware information available. Note
265 that they are listed here because
268 <B>Online Information</B></LI>
272 The <A HREF="http://www.heartlab.rri.uwo.ca/vidfaq/">COMP.SYS.IBM.PC.HARDWARE.VIDEO
273 Frequently Asked Questions (FAQ)</A> document, although not programming
274 oriented does contain much useful information about video hardware. The
275 site also includes links to nearly every vendor of video cards and monitors,
276 as well as links to pages covering monitor specifications. If you are looking
277 for video hardware related information not covered by the FreeVGA Project's
278 goals, you will likely find it or a link to it here.</LI>
281 Finn Thøgersen's <A HREF="http://www.datashopper.dk/~finth/">VGADOC
282 & WHATVGA Homepage</A> -- An excellent collection of information for
283 programming VGA and SVGA.</LI>
286 Boone's <A HREF="http://www.strangecreations.com/library/hardware/vgaregs.txt">Programming
287 the VGA Registers</A> -- Contains a very sketchy "Documentation Over the
288 I/O Registers for Standard VGA Cards" by "Shaggy of The Yellow One." It
289 is free and distributable over the "Feel free to spread this to whoever
290 wants it....." licensing agreement.</LI>
293 Andrew Scott's <I>VGA Programmers Master Reference Manual</I> (<A HREF="ftp://ftp.cdrom.com/pub/demos/code/hardware/video/vga-info.zip">click
294 here to download from ftp.cdrom.com</A>) -- A dated ('91) document that
295 is interesting if only because it attempts to document the VGA hardware
296 (actually the Trident TVGA8900 hardware) in a form useful for "writing
297 an applications specific BIOS." Begins with a very general description
298 the topic (a wordy definition of computation in general) and ends with
299 detailed register descriptions. Unfortunately, it lacks much material between
300 these areas. Worse, far from being a free resource, it requires shareware
301 registration fees that must be sent to the U.K. by means of a check drawn
302 from a U.K. bank only!</LI>
305 Richard Wilton's <I>Programmer's Guide to PC and PS/2 Video Systems</I>
306 (<A HREF="http://www.dc.ee/Files/Programm.Docs/videoprg.arj">click here
307 to download from www.dc.ee</A>) An older reference, covers MDA, Hercules,
308 CGA, MCGA, and VGA. Not much VGA material but does have some register documentation.</LI>
311 IBM's RS/6000 <I>CHRP I/O Device Reference</I> <A HREF="http://www.rs6000.ibm.com/resource/technology/chrpio/vga_app.mak.html">Appendix
312 A: VGA Programming Model</A> -- A good VGA reference from the makers of
313 the IBM VGA. Better than most on-line references as it contains programming
314 information in addition to a register description of the hardware; however
315 it is still vague in many areas. Especially interesting as it begins with
316 an acknowledgment of the many "clones" of the VGA hardware.</LI>
319 Some brief VGA register info is available from the <A HREF="http://www.hitex.com/chipdir/reg/vga.txt">Chip
320 Directory</A>, also mirrored at other sites (see <A HREF="http://www.hitex.com/chipdir/">Chip
321 Directory home page</A>).</LI>
324 Eric S. Raymond's <A HREF="http://sunsite.unc.edu/LDP/HOWTO/XFree86-Video-Timings-HOWTO.html">The
325 XFree86 Video Timings HOWTO</A> -- explains video mode and timing information
326 used in configuring XFree86 to support a given monitor, intended to be
327 used by the end user. Much of the information is not sepcific to
328 XFree86, and can be used by a programmer as an example of how a low-level
329 video routine can allow the end-users to setup video modes that pertain
330 to their monitors, as well as being useful to an end-user of such a program
331 attempting to configure such a routine to work with their monitors.</LI>
334 Tomi Engdahl's <A HREF="http://www.hut.fi/Misc/Electronics/docs/">electronics
335 info page</A> has some information about video and vga timings, as well
336 as a section on VGA to TV converters and homemade circuitry. The
337 <A HREF="http://www.hut.fi/Misc/Electronics/circuits/vga2tv/cindex.html">VGA
338 to TV converter page</A> contans much information that pertains to driving
339 custom TV and monitors with a VGA or SVGA card that doesn't have the capability
344 <B>Offline Information</B></LI>
348 Richard F. Ferraro's<B> </B><I>Programmer's Guide to the EGA, VGA, and
349 Super VGA Cards, Third Edition</I> -- A good text, one of the few good
350 books on a subject as broad and as complicated as low-level I/O.</LI>
353 Frank van Gilluwe's <I>The Undocumented PC, Second Edition -- A Programmer's
354 Guide to I/O, CPUs and Fixed Memory Areas</I> -- An excellent book, which
355 is the likely the most complete PC technical reference ever written, and
356 includes 100+ pages of video programming information, although very little
357 VGA register information.</LI>
360 Bertelsons, Rasch & Hoffman's PC Underground: Unconventional Programming
361 Topics -- I bought this book on markdown, due to it having some VGA information
362 in it. I was surprised to find that not only did it have a register
363 description, but it also described some possible effects that can be done
364 with that register.</LI>
368 <B>Miscellaneous Information (Information not specific to video hardware,
369 but useful to video programmers.)</B></LI>
373 Norman Walsh's <A HREF="http://nwalsh.com/comp.fonts/FAQ/index.html">The
374 comp.fonts FAQ</A> -- An excellent resource on fonts, typefaces, and such.
375 Particularly helpful is the section on intellectual property protection
376 for fonts, as the copyright legality of fonts and typefaces is somewhat
377 confusing. Note -- Norman Walsh has ceased maintaining the FAQ, however,
378 this link will remain until a new version of the FAQ is produced.</LI>
381 <A NAME="product"></A><B>Product Recommendations</B>
382 <BR> The FreeVGA Project does
383 not make hardware recommendations as pertains to hardware covered by the
384 documentation, in an attempt to prevent any conflicts of interest.
385 However, there are other products that can be extremely helpful when implementing
386 the information found here, such as monitors, test equipment, and software.
387 I will not refuse any request to list a product on this page, however I
388 will categorize it depending upon its importance and suitability for video
389 related software development using opinions of myself and others.
390 If you disagree with the opinion here, please use the Feedback Form to
391 voice that opinion, such that it can be taken into account.
394 <A HREF="hardrec.htm">Product Recommendations</A> -- Listing of products
395 that can be beneficial to the target audience of this site.</LI>
397 <A NAME="warn"></A><B>Warnings and Disclaimer</B>
400 <B><U>Danger</U>: </B>Monitors are designed to operate within certain frequency
401 ranges, or for fixed frequency monitors at certain frequencies.<B> <U>Driving
402 a monitor at a frequency that it is not designed for is not recommended
403 and may cause damage to the monitor's circuitry which can result in a fire
404 and safety risk</U>. </B>It is wise to know and understand the specifications
405 of the monitor(s) that you will be driving in order to prevent damage.
406 Consult the manufacturers documentation for the monitor for the information,
407 or if not available, contact the manufacturer directly. If the monitor
408 makes unusual noises, or the internal temperature exceeds the rated temperature
409 of its components, the monitor is likely to experience failure. This
410 failure may not be immediate, but is under most circumstances inevitable. <B>
411 <U>Monitor failures can be violent in nature, and can explode and produce
412 shrapnel, as well as overheat and catch fire</U>. </B>In no circumstance
413 should one leave a monitor unattended in an uncertain state. Furthermore,
414 exceeding the rated maximum frequencies of a monitor may cause the phosphors
415 to age prematurely, as well as<B> <U>increase the amount of harmful radiation
416 projected towards the viewer beyond the specified maximums</U>.</B></LI>
419 <B><U>Warning</U>: </B>Clock chips and RAMDACs as well as other components
420 of the video card are designed with a maximum frequency.<B> <U>Programming
421 these chips to operate at a frequency greater than they were designed for
422 causes the chips to run hotter than they were designed to operate, and
423 may cause the component to fail</U>. </B>It is wise to know and understand
424 the maximum operating frequency of the components of any video subsystem
425 you will be programming. Do not assume that the component is safe to operate
426 at a particular frequency because it can be programmed to operate at that
427 frequency. The rated frequencies are rated and verified according
428 to batch yield. As clock frequencies increase, the failure rate of
429 the chips during manufacturing testing increases. It is impossible
430 to predict the actual point at which a given semiconductor will fail, thus
431 manufacturers monitor the failure rate statistically to determine the frequency
432 that gives an acceptable batch yield. <B><U>These failures are typically
433 unobservable and require a method of testing every gate on the chip, as
434 many failures may only be observable under very specific circumstances,
435 typically resulting in intermittent failures, although complete "meltdown"
436 due to a newly formed short is also possible.</U></B> If they
437 occur, the entire semiconductor must be rejected due to these failures
438 being irrepairable. As you exceed the rated frequency you are taking
439 a semiconductor that has passed a thourough test at its rated frequency
440 and entering the realm of statistical probability. Attempting to
441 find the maximum frequency is impossible, as by the time a failure is noticable
442 the semiconductor has already been permanently damaged. Cooling the
443 external package by using a heat sink and/or fan may increase the frequency
444 at which a semiconductor can operate; however, there is still no way to
445 determine the frequency at which a specific semiconductor will fail as
446 it can only be done statistically and practically undetectable without
447 being able to determine the proper operation of every gate on the semiconductor.
448 Semiconductors such as fast CPU's are rated with the required heat sink
449 and/or cooling fan in place. Aftermarket cooling devices are sold
450 as "performance coolers" due to the inability to determine the statistical
451 likelyhood of failure and the inability of the end user to simply reject
452 failed semiconductors. <B><U>Under no circumstances should a programmer
453 develop software that overclocks an end-user's hardware without the end
454 user being warned of the statistical likelyhood of failure.</U></B>
455 Making any claims about the safety of the software's operation can leave
456 the programmer with legal liability that cannot be excluded by disclaimer.</LI>
459 <B><U>Disclaimer</U>: The author presents this information as-is without
460 any warranty, including suitability for intended purpose. The author is
461 not responsible for damages resulting by the use of the information, incidental
462 or otherwise. By utilizing this information, you as the programmer take
463 full liability for any damages caused by your use of this information.
464 If you are not satisfied with these terms, then your only recourse is to
465 not use this information. While every reasonable effort is made to ensure
466 that this information is correct, the possibility exists for error and
467 is not guaranteed for accuracy, and disclaims liability for any changes,
468 errors or omissions and is not responsible for any damages that may arise
469 from the use or misuse of this information. License to use this information
470 is only granted where this disclaimer applies in whole.</B></LI>
472 <A NAME="feedback"></A><B>Feedback</B>
473 <BR> I can be reached online
474 via the <A HREF="feedback.htm">Feedback Form</A>. Consider it your
475 moral obligation to send feedback about the page, including inaccuracies,
476 confusing parts, missing info, questions/answers and other feedback type
480 <P>Notice: All trademarks used or referred to on this page are the property
481 of their respective owners.
482 <BR>All pages are Copyright © 1997, 1998, J. D. Neal, except where
483 noted. Permission for utilization and distribution is subject to the terms
484 of the <A HREF="license.htm">FreeVGA Project Copyright License</A>. <IMG SRC="http://www.goodnet.com/~tinara/cgi-bin/imgserv.cgi?logo.gif" >