341 lines
14 KiB
Plaintext
341 lines
14 KiB
Plaintext
Introduction.
|
|
|
|
This is intended as a collection of documentation about all the various
|
|
display adapters for the IBM PC series (and relatives). This is NOT intended
|
|
as an introduction to basic VGA programming or as a ready-to-use library.
|
|
There are numerous books available on the subject with much better general
|
|
VGA/graphics programming sections. Neither is this intended to cover
|
|
benchmarking, highlevel graphics algorithms, graphics file formats or specific
|
|
graphics programs.
|
|
|
|
This compilation (c) Copyright 1991-95 Finn Thoegersen. All Rights Reserved.
|
|
See the file README.1ST for contact information and conditions for use and
|
|
distribution. This file MUST be included unmodified in all distributions.
|
|
|
|
|
|
|
|
Terminology/style:
|
|
|
|
The BIOS calls are mostly taken directly from Ralf Brown's interrupt list
|
|
and tends to follow its style and structure.
|
|
|
|
The register descriptions are sorted by the register number.
|
|
|
|
All register addresses, data values et cetera are given in hexadecimal.
|
|
|
|
3d4h means 3D4h when in color mode and 3B4h when in monochrome mode.
|
|
|
|
3CEh index 3 means register 3CEh is set to 3 and register 3CFh is the
|
|
data port. See notes on register 3C0h under VGA registers.
|
|
On some cards write operations can be done with a single OUTW
|
|
instruction. This may fail on some cards or machines.
|
|
ATI cards require the index to be updated before each access to
|
|
the dataport.
|
|
|
|
(R) means the register is Read Only.
|
|
(W) means the register is Write Only.
|
|
(R/W) means the register is both Readable and Writable.
|
|
|
|
Sometimes the size of the registers is given as:
|
|
W(R/W): The register is 2 bytes (16 bits) long. If the register is
|
|
indexed, the low byte is in the low index (n) and the high byte is
|
|
in the high index (n+1) unless otherwise indicated.
|
|
3(R/W): The register is 3 bytes (24 bits) long. The lowest byte is in the
|
|
low index (n), the middle byte is in the middle index (n+1) and
|
|
the upper byte in the high index (n+2).
|
|
|
|
|
|
Examples are in Turbo Pascal for readability (your mileage may vary,
|
|
I don't discuss politics, choice of computer, editor, keyboard,
|
|
programming language or other religious matters on the net :-) ).
|
|
Seriously while assembler can be more precise and/or efficient for the
|
|
low-level register access, the complexity and volume of assembler can make
|
|
even simple examples totally incomprehensible to all but experts.
|
|
Also when I started this my "C" was not up to the task, so ...
|
|
|
|
|
|
A short translation of terms:
|
|
|
|
Pascal: C: Assembler: Description:
|
|
|
|
x:byte; unsigned char x; x DB ? 8 bit unsigned byte
|
|
|
|
y:word; unsigned int y; y DW ? 16 bit unsigned word.
|
|
|
|
z:integer; int z; z DW ? 16 bit signed word.
|
|
|
|
w:longint; long w; w DD ? 32 bit signed Dword
|
|
|
|
s:string[20]; char s[21]; x DB 20 dup(?) a 20 character string
|
|
|
|
$ABCD 0xABCD 0ABCDh The value 43981
|
|
(ABCD hex)
|
|
|
|
x:=port[$3CC] x=inp(0x3CC) MOV DX,03CCh Read an 8bit value from
|
|
IN AL,DX I/O port $3CC.
|
|
|
|
y:=portw[$3CE] y=inpw(0x3CE) MOV DX,03CEh Read a 16bit value from
|
|
IN AX,DX I/O ports $3CE and $3CF
|
|
|
|
port[$3C2]:=x outp(0x3C2,x) MOV DX,03C2h Write an 8bit value to
|
|
OUT DX,AL I/O port $3C2.
|
|
|
|
portw[$3CE]:=y outpw(0x3CE,y) MOV DX,03CEh Write a 16bit value to
|
|
OUT DX,AX I/O ports $3CE and $3CF
|
|
|
|
a shr 3 a>>3 SHR AX,3 Shifts a 3 bits rights
|
|
(Divides by 8).
|
|
|
|
a shl 3 a<<3 SHL AX,3 Shifts a 3 bits left
|
|
|
|
inc(a) a++ INC [a] Increments a by 1
|
|
|
|
dec(a) a-- DEC [a] Decrements a by 1
|
|
|
|
{Comment} /* comment */ ;comment Comments.
|
|
'string' "string" DB "string" Text string
|
|
|
|
procedure x; void x(void) x PROC A procedure/function
|
|
var x:integer; { ;Alloc x on stack with no parameters
|
|
begin int x; _code_ a local variable
|
|
_code_ _code_ ;reset stack and main body.
|
|
end; } RET
|
|
|
|
function y: int y(void) Well you A function returning
|
|
integer; { figure it out! an integer.
|
|
begin
|
|
y:=123; return(123)
|
|
end; }
|
|
|
|
|
|
|
|
The examples use a number of simple rutines:
|
|
|
|
procedure vio(ax:word); {Calls interrupt 10h with register AX=parameter ax
|
|
other registers can be set in the rp structure.
|
|
rp.ax is set to the return value in the AX register}
|
|
|
|
function inp(reg:word):byte; {returns a byte from I/O port REG.}
|
|
|
|
procedure outp(reg,val:word); {writes the byte VAL to I/O port REG}
|
|
|
|
function rdinx(pt,inx:word):word; {read register PT index INX}
|
|
|
|
procedure wrinx(pt,inx,val:word); {write VAL to register PT index INX}
|
|
|
|
procedure modinx(pt,inx,mask,nwv:word);
|
|
{In register PT index INX change the bits
|
|
indicated by MASK to the ones in NWV
|
|
keeping the other bits unchanged).
|
|
|
|
function tstrg(pt,msk:word):boolean; {Returns true if the bits specified in
|
|
MSK are read/writable in register PT}
|
|
|
|
function testinx(pt,rg:word):boolean; {Returns true if all 8 bits of register
|
|
PT index RG are read/writable}
|
|
|
|
function testinx2(pt,rg,msk:word):boolean;
|
|
{Returns true if the bits specified in MSK
|
|
are read/writable in register PT index RG}
|
|
|
|
procedure dac2pel; {Forces the DAC back to PEL (normal) mode}
|
|
|
|
procedure dac2comm; {Enter command mode of HiColor DACs}
|
|
|
|
|
|
|
|
|
|
References:
|
|
|
|
Richard F. Ferraro's Programmer's guide to the EGA and VGA cards 2nd ed.
|
|
Addison-Wesley 1990. ISBN 0-201-57025-4.
|
|
|
|
Richard F. Ferraro's Programmer's guide to the EGA, VGA and Super VGA cards:
|
|
including XGA cards, 3rd ed. Addison-Wesley 1994. ISBN 0-201-62490-7.
|
|
|
|
George Sutty and Steve Blair's Advanced Programmers Guide to Super VGAs.
|
|
Brady Books 1990. ISBN 0-13-010455-8.
|
|
|
|
John Mueller and Wallace Wang's The Ultimate DOS Programmer's Manual.
|
|
Windcrest/McGraw-Hill 1990. ISBN 0-8306-3434-3.
|
|
|
|
Jake Richter's Power Programming the IBM XGA.
|
|
MIS Press 1992. ISBN 1-55828-127-4 (1-55828-124-9 with disc).
|
|
|
|
Ralf Brown's interrupt list version 47.
|
|
(Simtel: info/inter47a.zip - info/inter47f.zip)
|
|
This is based on contributions from many people, including:
|
|
Dennis Grinberg dennis+@cs.cmu.edu MCGA/VGA
|
|
Michael A. Moran Michael@cup.portal.com VGA INT 10h
|
|
Gary E. Miller GEM@cup.portal.com Paradise, WD90c & Diamond
|
|
Stealth 24X VGA
|
|
Michael Shiels mshiels@ziebmef.uucp ATI VIP INT 10h
|
|
Robert Seals rds95@leah.Albany.EDU ATI VGA Wonder modes
|
|
Peter Sawatzki IN307@DHAFEU11.BITNET Video7 extended INT 10
|
|
Ben Myers 0003571400@mcimail.com Everex Viewpoint VGA, NCR
|
|
77c22 modes
|
|
Mark Livingstone markl@csource.oz.au TVGA video modes
|
|
Patrick Ibbetson ibbetsom@nes.nersc.gov NEL Electronics BIOS, Cirrus
|
|
chipsets
|
|
A. Peter Blicher Oakland, CA Genoa Super EGA
|
|
Tim Farley tim@magee.mhs.compuserve.com XGA
|
|
Bent Lynggaard lynggaard@risoe.dk misc video
|
|
Frank Klemm pfk@rz.uni-jena.de Diamond Speedstar 24X
|
|
Mikael Rydberg Sweden Cirrus/UM587/etc video modes
|
|
Jens Vollmar Erlangen, Germany Trident/C&T video
|
|
Aki Korhonen aki@holonet.net Cirrus Logic BIOS
|
|
Alexi Lookin alexi@riaph.irkutsk.su Realtek RTVGA, Avance Logic,
|
|
C&T video
|
|
Win Osterholt 2:512/56.198 Cirrus Logic BIOS 3.02
|
|
And many, many others...
|
|
|
|
|
|
John Bridge's VGAKIT52.
|
|
(Simtel: vga/vgakit52.zip)
|
|
|
|
Fractint v18.1 source (primarily video.asm).
|
|
(Simtel: graphics/frasr181.zip)
|
|
|
|
Configuration files and drivers from amongst others:
|
|
CSHOW: (Simtel: graphics/cshw860a.zip)
|
|
VPIC: (Simtel: gif/vpic60.zip)
|
|
VUIMAGE: (Simtel: gif/vuimg340.zip)
|
|
SVGA: (Simtel: gif/svga112.zip)
|
|
|
|
XFree86 3.1.2 - X11 Unix SVGA driver. Available from:
|
|
ftp.x.org: /contrib/XFree86
|
|
ftp.physics.su.oz.au: /XFree86
|
|
ftp.win.tue.nl: /pub/XFree86
|
|
ftp.prz.tu-berlin.de: /pub/pc/src/XFree86
|
|
The XFree86 team includes:
|
|
Robert Baron Robert.Baron@ernst.mach.cs.cmu.edu
|
|
David Dawes dawes@physics.su.oz.au
|
|
Dirk Hohndel hohndel@informatik.uni-wuerzburg.de
|
|
Glenn Lai glenn@cs.utexas.edu
|
|
Rich Murphey Rich@Rice.edu
|
|
Jon Tombs jon@gtex02.us.es
|
|
David Wexelblat dwex@goblin.org, dwex@aib.com
|
|
Thomas Wolfram wolf@prz.tu-berlin.de
|
|
Orest Zborowski orestz@microsoft.com
|
|
E-mail regarding XFree86 should be sent to xfree86@physics.su.oz.au
|
|
|
|
PCVISION plus Frame Grabber User's Manual.
|
|
|
|
Enhanced Graphics Adapter Reference Manual from HP.
|
|
|
|
Commodore Advanced Graphics Adapter (AGA) manual.
|
|
|
|
Data sheet for the Analog Devices ADV7160,ADV7162
|
|
|
|
Data sheets for the Chips and Technologies Inc
|
|
82c455A, 82c456, 82c457, 82c480, 65520/530, 82c425, 82c426, 82c9001A.
|
|
|
|
Technical Reference Manual for the Cirrus Logic CL-GD542x True Color VGA
|
|
Family, January 1994
|
|
|
|
Data sheet for the IC Designs ICD2061A
|
|
|
|
Data sheets for the MUSIC MU9c1880 and MU9c9750
|
|
|
|
Data sheets for the NCR 77c22E+ and 77c32BLT
|
|
|
|
Data sheets for the S3 86c911, 86c801/5, 86c928 and 86c964
|
|
|
|
Data sheet for the Tseng ET3000 and ET4000/W32
|
|
|
|
Data sheets for the Western Digital PVGA1A and WD90c24A
|
|
|
|
Data sheet for the Yamaha 6388 VPDC.
|
|
|
|
Programmer's Guide to the Mach32 Registers (ATI P/N: REG688000-15)
|
|
VGA Wonder Programmer's Reference Manual (ATI P/N: PRG2888000-13)
|
|
ATI Mouse Driver Programmer's Reference Manual (ATI P/N: PRG188200-12)
|
|
Mach64 BIOS Kit (P/N: BIO-C012XX1-04), VGA Register Guide (P/N:
|
|
VGA-C012XX1-04), Register Reference Guide (P/N: RRG-C012XX1-04) and
|
|
Programmer's Guide (P/N: PRG-C012XX1-04)
|
|
|
|
Truevision Targa+ Hardware Technical Reference Manual.
|
|
|
|
Device Drivers Kit (DDK)'s for Microsoft Windows 3.1, Windows for Workgroups
|
|
3.11, Windows NT 3.51 and Windows 95 (pre-release).
|
|
|
|
|
|
The following have donated reference material:
|
|
H.R.R van Roosmalen and E. Zoer,
|
|
Delft University of Technology,
|
|
The Netherlands huub@dutetvd.ET.TUDelft.NL (no longer valid)
|
|
Kendall Bennett kjb@cgl.citri.edu.au
|
|
Joel Finch jfinch@ozemail.com.au
|
|
Wieland Weiss weiss@metw3.met.fu-berlin.de
|
|
|
|
The following have contributed information:
|
|
Darren Senn sinster@scintilla.capitola.ca.us
|
|
Tomi H Engdahl then@vipunen.hut.fi
|
|
Jori Hamalainen jhamala@kannel.lut.fi
|
|
Eric ?? praetzel@marconi.uwaterloo.ca
|
|
Frank Klemm pfk@rz.uni-jena.de
|
|
Michael Schindler michael@eichow.tuwien.ac.at
|
|
Kendall Bennett kjb@cgl.citri.edu.au
|
|
Danny Halamish dny@cs.huji.ac.il
|
|
Daniel Sill sill@zoe.as.utexas.edu
|
|
GARY GEM@rellim.com
|
|
Paolo Severini lendl@dist.dist.unige.it
|
|
Royce Shih Wea Liao liaor@umich.edu
|
|
|
|
Testers:
|
|
Ross Ackland rackland@csis.dit.csiro.au
|
|
Chris Bailey cbailey@crl.com
|
|
Ross Becker beckerr@pyrite.som.cwru.edu
|
|
Darren Brown de2brown@undergrad.math.uwaterloo.ca
|
|
Carlos Henrique Cantu cahcantu@pintado.ciagri.usp.br
|
|
Murray Chapman muzzle@cs.uq.oz.au
|
|
Frank Dikker dikker@cs.utwente.nl
|
|
Michael Eichow michael@eichow.tuwien.ac.at
|
|
Torben H. Hansen 100024,3066@compuserve.com
|
|
Heikki Julkunen dp93hju@txfs1.hfb.se
|
|
Nanda G. Kutty eapu290@orion.oac.uci.edu
|
|
Leonardo Loureiro loureiro@fiu.edu
|
|
Steven Martin Steven.Martin@eng.monash.edu.au
|
|
Jouni Miettunen jon@stekt.oulu.fi
|
|
Jack Nomssi Nomssi@physik.tu-chemnitz.de
|
|
Juho-Pekka Rosti atjuro@uta.fi
|
|
Lode Vande Sande stud11@cc4.kuleuven.ac.ec
|
|
Joel Finch jfinch@ozemail.com.au
|
|
|
|
|
|
|
|
Disclaimer:
|
|
|
|
All information herein is presented as is and without warranty.
|
|
Use at your own risk.
|
|
|
|
|
|
|
|
|
|
IBM PC, PC/XT, PC/AT, PCjr, PS/2, Micro Channel, Personal System/2,Enhanced
|
|
Graphics Adapter, Color Graphics Adapter, Video Graphics Adapter, IBM Color
|
|
Display, IBM Monochrome Display, 8514/A and XGA are trademarks of
|
|
International Business Machines Corporation.
|
|
MS-DOS, Microsoft and Windows are trademarks of Microsoft, Incorporated.
|
|
Hercules is a trademark of Hercules Computer Technology, Inc.
|
|
Multisync is a trademark of Nippon Electric Company (NEC).
|
|
ATI, VGAWonder, Mach8, Mach32, 8514 ULTRA, GRAPHICS ULTRA, GRAPHICS VANTAGE,
|
|
GRAPHICS ULTRA+ and GRAPHICS ULTRA PRO are trademarks of ATI Technologies Inc.
|
|
Brooktree and RAMDAC are trademarks of Brooktree Corporation.
|
|
SMARTMAP is a trademark of Chips and Technologies, Incorporated.
|
|
TARGA is a registered trademark of Truevision, Inc.
|
|
Cirrus Logic and SimulSCAN are trademarks of Cirrus Logic, Inc.
|
|
HiColor is a trademark of Sierra Semiconducter, Inc.
|
|
i386, i486 and Intel are trademarks of Intel Corp.
|
|
Inmos and SGS-Thompson are trademarks of SGS-Thompson, Ltd.
|
|
IIT is a trademark of Integrated Information Technology, Inc.
|
|
Motorola is a trademark of Motorola Corp.
|
|
TIGA is a trademark of Texas Instruments.
|
|
VBE, VESA and VSE are trademarks of the Video Electronics Standards
|
|
Association.
|
|
Western Digital, AutoSwitch and TrueShade are trademarks of Western Digital
|
|
Corporation.
|
|
WEITEK and WEITEK Power are trademarks of WEITEK Corporation
|
|
All other product names are copyright and registered trademarks/tradenames of
|
|
their respective owners.
|