home *** CD-ROM | disk | FTP | other *** search
- ┌─────────────────────────────────────────────┐
- │ Introduction to Programming the SVGA Cards │
- └─────────────────────────────────────────────┘
-
- Written for the PC-GPE by Mark Feldman
- e-mail address : u914097@student.canberra.edu.au
- myndale@cairo.anu.edu.au
-
- ┌───────────────────────────────────────────┐
- │ THIS FILE MAY NOT BE DISTRIBUTED │
- │ SEPARATE TO THE ENTIRE PC-GPE COLLECTION. │
- └───────────────────────────────────────────┘
-
-
- ┌────────────┬───────────────────────────────────────────────────────────────
- │ Disclaimer │
- └────────────┘
-
- I assume no responsibility whatsoever for any effect that this file, the
- information contained therein or the use thereof has on you, your sanity,
- computer, spouse, children, pets or anything else related to you or your
- existance. No warranty is provided nor implied with this information.
-
-
- ┌───────────────────────┬────────────────────────────────────────────────────
- │ SVGA Section Overview │
- └───────────────────────┘
-
- The vast majority of the information presented in the PC-GPE was obtained
- from the book "Programmer's Guide to the EGA and VGA Cards - Includes Super
- VGAs, Second Edition" by Richard Ferraro, ISBN 0-201-57025-4, published
- by Addison-Wesley. This book is by far the most comprehensive VGA/SVGA
- reference I have seen to date and is more than worth it's price tag. I
- heartily recommend it to anyone wishing to do any serious graphics
- programming for the PC.
-
- The PC-GPE SVGA section was originally not going to be included in version 1
- due to the fact that I have only been able to verify that the info on the
- Paradise SVGA is correct. I will include it however, in the hope that
- everyone (and I mean *EVERYONE*) who reads these files and tries out the
- routines will e-mail me with the results they get so I can make the
- modifications in time for version 2.
-
- I will need to know these things:
-
- 1) Your SVGA board name
-
- 2) The id and revision number of the chip inside (if possible)
-
- 3) What you tried and the results you got. This applies to *all* routines,
- bank switching, chip detection etc.... I need to know everything!
-
- If a routine doesn't work as expected then let me know if it's doing anything
- at all. "The routine is stuffed you idiot" won't exactly help me much, but
- "I can only read pixels in bank 0 you idiot" just might......
-
- And of course there's always the chance that I've misunderstood my references
- so I need to have my mistakes pointed out to me as well. I'm a big boy...I
- can take it!
-
- ┌──────────────────────────┬────────────────────────────────────────────────
- │ Writing to the VGA Ports │
- └──────────────────────────┘
-
- Many of the PC-GPE SVGA texts have the PortW Pascal command as follows:
-
- PortW[PORTNUM] := VALUE;
-
- This command writes a 16 bit word to the port, the same as the asm op code:
-
- out dx, ax
-
- The effect of this code is the same as the following two Pascal statements:
-
- Port[PORTNUM] := Lo(VALUE);
- Port[PORTNUM + 1] := Hi(VALUE);
-
- I'm not sure if this is common to all the PC ports or only works on the
- VGA. (Perhaps someone could enlighten me?)
-
- The PortW command is very handy when writing to the SVGA extended registers.
- The SVGA register sets are all extensions of the VGA register sets and
- use an indexed addressing scheme to cut down on the number of ports they
- use. The texts often have register maps which look similar to the following:
-
- PR0A Address Offset A
- Index : 09h at port 3CEh
- Read/Write at port 3CFh
- ┌───┬───┬───┬───┬───┬───┬───┬───┐
- │ 7 │ 6 │ 5 │ 4 │ 3 │ 2 │ 1 │ 0 │
- └───┴───┴───┴───┴───┴───┴───┴───┘
- └───────────┬───────────┘
- Bank
-
- For this particular map, the register name is PR0A Offset A. To select the
- register and get it ready for reading and/or writing you write the value
- 09h to port 3CEh (the index port). The register can then be read from or
- written to port 3CFh (the read/write port).
-
- ┌────────────────┬──────────────────────────────────────────────────────────
- │ Bank Switching │
- └────────────────┘
-
- In real mode, the PC has addresses A000:0000-B000:FFFF allocated for video
- memory, although most graphics modes only use the A000 segment.
-
- If you set an SVGA card to 640x480x256 color mode (for example) then there
- will be a total of 307200 pixels on the screen. Since each pixel takes up
- one byte in 256 color modes around 300K of video memory will be used to
- store the screen data. In most cases all this memory is accessed through the
- A000 segment. When you initially set the mode, bank 0 on the card will be
- active and anything you read to or write from this segment will be in the
- first 64K bytes in video memory (i.e. lines 0-101 and the first 256 bytes in
- line number 102). If you want to access the next 64K you must switch the
- card to bank number 1 so that the A000 segment now maps to the second bank,
- and so forth.
-
- The problem here is that each card has a different method of doing the bank
- switching. The PC-GPE files contain info on how to do the bank switching for
- a number of the most commonly used SVGA cards. The VESA standard helped
- inject some sanity into the otherwise chaotic world of SVGA programming by
- introducing a "standard" method of bank switching for all cards.
-
- A note should be made here about bank granularity. In the section above I
- assumed that bank 0 corresponded to the first 64K, bank 1 to the next etc..
- ie each bank has a 64K granularity. This is true for most cards, but some
- do have smaller granularities (see the table below). The Paradise for
- instance has a 4K granularity. It's very similar in concept to the PC's
- segmented memory, segments are 64K long but they have a 16 byte granularity.
- The Paradise chip's banks are also 64K long, but they have a 4K granularity.
- All the bank switching code given in the PC-GPE SVGA files adjust for this
- so that your code can assume the card has a 64K granularity in all cases.
-
-
- ┌────────────────┬───────────────────────────────────────────────────────────
- │ SVGA Libraries │
- └────────────────┘
-
- There are a few SVGA libraries available via anonymouse ftp. I haven't had
- a chance to use any of them yet, but I've heard some of them are pretty good,
- so they might be worth checking out. Here's two C libraries that I know of:
-
- site: ftp.fasttax.com
- directory: /pc/graphic/scitech/beta
- filename: svkt44bl.zip
-
- site: garbo.uwasa.fi
- directory: /pc/programming
- filename: SVGACC20.ZIP
-
-
- ┌───────────────────┬───────────────────────────────────────────────────────
- │ Common SVGA Cards │
- └───────────────────┘
-
- The PC-GPE files contain information on programming the 7 VGA "standards"
- as covered by Ferraro. According to Ferraro the majority of SVGA cards on
- the market today conform to one of these standards. The standards are
- Ati, Chips and Technologies, Genoa, Paradise, Trident, Tseng and Video7.
- I've also included a file on the VESA specifications (VESASP12.TXT). VESA
- seems to be the way to go now since public domain drivers are available for
- most cards and you only need to write one set of graphics drivers if you use
- it. VESA BIOS calls can be slow however, so if your program needs to do LOTS
- of bank switching then you may need to work with the cards on a hardware
- level.
-
- The following is a list of common SVGA's along with the chip it is based on,
- the number of banks the card contains and the modes they support. The GR
- field is the bank granularity. This information was obtained by examining
- the configuration files in the shareware program VPIC. VPIC is a great
- little program which supports numerous graphics file formats as well
- as all the cards listed below (and a few more). VPIC can be obtained via
- anonymous ftp from oak.oakland.edu, directory /pub/msdos/gif, filename
- vpic. I tried to contact the author so I'd feel better about blatently
- ripping all the info out of his data files but he doesn't seem to have an
- e-mail address. Are you out there Bob Montgomery?
-
- Quite a number of the chip sets in the list are not mentioned in Ferraro. If
- anyone has information on programming any of them drop me a line.
-
- Each mode in the table below has a mode number. To set the mode, load the AX
- register with this value and do an interrupt 10h. Some modes below have two
- numbers. In these cases load AX with the first number and BX with the second
- before calling interrupt 10h.
-
- Only 16 and 256 color are presented in the table below. True-color modes
- are not included in this version.
-
-
- Board Chip Banks Modes Resolution Col GR
- ─────────────────────────────────────────────────────────────────────────────
-
- Acumos ACUMOS 8 5Eh 640x400 256 64k
- 5Fh 640x480 256 64k
- 5Ch 800x256 256 64k
- 10h 640x350 16 64k
- 12h 640x480 16 64k
- 58h 800x600 16 64k
- 5dh 1024x768 16 64k
-
- Ahead A Chip AHEADA 4/8 60h 640x400 256 64k
- 61h 640x480 256 64k
- 62h 800x600 256 64k
- 6Ah 800x600 16 64k
- 74h 1024x768 16 64k
-
- Ahead B Chip AHEADB 8/16 60h 640x400 256 64k
- 61h 640x480 256 64k
- 62h 800x600 256 64k
- 63h 1024x768 256 64k
- 6Ah 800x600 16 64k
- 74h 1024x768 16 64k
-
- ATI VGA Wonder ATI OLD 4/8 61h 640x400 256 32k
- 62h 640x480 256 32k
- 63h 800x600 256 32k
- 54h 800x600 16 32k
- 65h 1024x768 16 64k
-
- ATI VGA Wonder+ ATI NEW 4/8/16 61h 640x400 256 32k
- 62h 640x480 256 32k
- 63h 800x600 256 32k
- 64h 1024x768 256 32k
- 54h 800x600 16 32k
- 55h 1024x768 16 32k
-
- ATI Ultra 8514A GA ATI NEW 4/8/16 61h 640x400 256 32k
- 62h 640x480 256 32k
- 63h 800x600 256 32k
- 54h 800x600 16 32k
- 55h 1024x768 16 32k
-
- ATI XL ATI NEW 4/8/16 61h 640x400 256 32k
- 62h 640x480 256 32k
- 63h 800x600 256 32k
- 64h 1024x768 256 32k
- 54h 800x600 16 32k
- 55h 1024x768 16 32k
-
- Chips & Technology Chips and 4/8 78h 640x400 256 16k
- Technologies 79h 640x480 256 16k
- 7Ah 720x540 256 16k
- 7Bh 800x600 256 16k
- 70h 800x600 16 16k
- 71h 960x720 16 16k
- 72h 1024x768 16 16k
-
- Cirrus Logic GD54 VESA 16/64 4F02h,100h 640x400 256 4k
- 4F02h,101h 640x480 256 4k
- 4F02h,103h 800x600 256 4k
- 4F02h,105h 1024x768 256 4k
- 4F02h,102h 800x600 16 4k
- 4F02h,104h 1024x768 16 4k
-
- Definicon, 16 Bit TSENG 4000 8/16 2dh 640x350 256 64k
- 2fh 640x400 256 64k
- 2eh 640x480 256 64k
- 30h 800x600 256 64k
- 38h 1024x768 256 64k
- 29h 800x600 16 64k
- 37h 1024x768 16 64k
- 3Dh 1280x1024 16 64k
-
- Diamond 24x PARADISE 4/16 5eh 640x400 256 4k
- 5fh 640x480 256 4k
- 5ch 800x600 256 4k
- 60h 1024x768 256 4k
- 58h 800x600 16 4k
- 5Dh 1024x768 16 4k
- 6Ch 1280x960 16 4k
- 64h 1280x1024 16 4k
-
- Diamond Speedstar 24 TSENG 4000 8/16 2dh 640x350 256 64k
- 2fh 640x400 256 64k
- 2eh 640x480 256 64k
- 30h 800x600 256 64k
- 38h 1024x768 256 64k
- 29h 800x600 16 64k
- 37h 1024x768 16 64k
-
- Everex EV-673 EVEREX 4/8 70h,13h 640x350 256 64k
- 70h,14h 640x400 256 64k
- 70h,15h 512x480 256 64k
- 70h,30h 640x480 256 64k
- 70h,31h 800x600 256 64k
- 70h,02h 800x600 16 64k
- 70h,20h 1024x768 16 64k
-
- Everev 678 TRIDENT 4/8 70h,14h 640x400 256 64k
- 8800 70h,15h 512x480 256 64k
- 70h,30h 640x480 256 64k
- 70h,31h 800x600 256 64k
- 70h,02h 800x600 16 64k
- 70h,20h 1024x768 16 64k
-
- Everex Vision VGA HC TSENG 4000 8/16 2fh 640x400 256 64k
- 2eh 640x480 256 64k
-
- Genoa 5400 TSENG 3000 4/8 2dh 640x350 256 64k
- 2eh 640x480 256 64k
- 30h 800x600 256 64k
- 29h 800x600 16 64k
- 37h 1024x768 16 64k
-
- Genoa 6400 GENOA 4/8 2bh 640x350 256 64k
- 2eh 640x480 256 64k
- 30h 800x600 256 64k
- 29h 800x600 16 64k
- 37h 1024x768 16 64k
-
- Genoa 7900 24 bit TSENG 4000 8/16 2dh 640x350 256 64k
- 2fh 640x400 256 64k
- 2eh 640x480 256 64k
- 30h 800x600 256 64k
- 38h 1024x768 256 64k
- 29h 800x600 16 64k
- 37h 1024x768 16 64k
-
- Headland 1024i HEADLAND 4/8 6F05h,66h 640x400 256 64k
- 6F05h,67h 640x480 256 64k
- 6F05h,68h 720x540 256 64k
- 6F05h,69h 800x600 256 64k
- 6F05h,61h 720x540 16 64k
- 6F05h,62h 800x600 16 64k
- 6F05h,65h 1024x768 16 64k
-
- Hi Res 512 ZYMOS 4/8 5ch 640x400 256 64k
- 5dh 640x480 256 64k
- 5eh 800x600 256 64k
- 6ah 800x600 16 64k
- 5fh 1024x768 16 64k
-
- Maxxon TRIDENT 8800 4/8 5ch 640x400 256 64k
- 5dh 640x480 256 64k
- 5eh 800x600 256 64k
- 5bh 800x600 16 64k
- 5fh 1024x768 16 64k
-
- C&T MK82452 CHIPS AND 8 78h 640x400 256 16k
- TECHNOLOGIES 79h 640x480 256 16k
- 70h 800x600 16 16k
- 72h 1024x768 16 16k
-
- NCR 77C22 NCR 8/16 5eh 640x400 256 64k
- 5fh 640x480 256 64k
- 5ch 800x600 256 64k
- 62h 1024x768 256 64k
- 58h 800x600 16 64k
- 5dh 1024x768 16 64k
-
- OAK OAK 8/16 53h 640x480 256 64k
- 54h 800x600 256 64k
- 59h 1024x768 256 64k
- 52h 800x600 16 64k
- 56h 1024x768 16 64k
-
- Orchid
- Fahrenheight 1280 S3 8/16 4F02h,201h 640x480 256 64k
- 4F02h,203h 800x600 256 64k
- 4F02h,205h 1024x768 256 64k
- 4F02h,202h 800x600 16 64k
- 4F02h,204h 1024x768 16 64k
- 4F02h,206h 1280x960 16 64k
- 4F02h,206h 1280x1024 16 64k
-
- Orchid Pro
- Designer II TSENG 4000 8/16 2dh 640x350 256 64k
- 2fh 640x400 256 64k
- 2eh 640x480 256 64k
- 30h 800x600 256 64k
- 38h 1024x768 256 64k
- 29h 800x600 16 64k
- 37h 1024x768 16 64k
-
- Paradise VGA Pro PARADISE 4/16 5eh 640x400 256 4k
- 5fh 640x480 256 4k
- 5ch 800x600 256 4k
- 60h 1024x768 256 4k
- 58h 800x600 16 4k
- 5Dh 1024x768 16 4k
-
- Primus P2000 GA PRIMUS 8/16 2dh 640x480 256 64k
- 2bh 800x600 256 64k
- 31h 1024x768 256 64k
- 37h 1280x1024 256 64k
- 2ah 800x600 16 64k
- 30h 1024x768 16 64k
- 36h 1280x1024 16 64k
-
- Compaq QVision QVISION 8/16 32h 640x480 256 4k
- 38h 1024x768 256 4k
- 10h 640x350 16 4k
- 12h 640x480 16 4k
- 29h 800x600 16 4k
- 37h 1024x768 16 4k
-
- Realtek RTVGA REALTEK 8/16 25h 640x400 256 64k
- 26h 640x480 256 64k
- 27h 800x600 256 64k
- 28h 1024x768 256 64k
- 1Fh 800x600 16 64k
- 21h 1024x768 16 64k
- 2Ah 1280x1024 16 64k
-
- Realtek RTVGA REALTEK 8/16 25h 640x400 256 64k
- 26h 640x480 256 64k
- 27h 800x600 256 64k
- 28h 1024x768 256 64k
- 1Fh 800x600 16 64k
- 21h 1024x768 16 64k
- 2Ah 1280x1024 16 64k
-
- S3 Graphics Accelerator S3 8/16 4F02h,201h 640x480 256 64k
- 4F02h,203h 800x600 256 64k
- 4F02h,205h 1024x768 256 64k
- 4F02h,202h 800x600 16 64k
- 4F02h,204h 1024x768 16 64k
- 4F02h,206h 1280x960 16 64k
-
- STB EM 16 TSENG 4000 8/16 2dh 640x350 256 64k
- 78h 640x400 256 64k
- 2eh 640x480 256 64k
- 30h 800x600 256 64k
- 38h 1024x768 256 64k
- 29h 800x600 16 64k
- 37h 1024x768 16 64k
-
- Phoebes TRIDENT 8800CS 4/8 5ch 640x400 256 64k
- 5dh 640x480 256 64k
- 5bh 800x600 16 64k
- 5fh 1024x768 16 64k
-
- Maxxon TRIDENT 8800CS 4/8 5ch 640x400 256 64k
- 5dh 640x480 256 64k
- 5eh 800x600 256 64k
- 5bh 800x600 16 64k
- 5fh 1024x768 16 64k
-
- Trident 8900 TRIDENT 8900 8/16 5Ch 640x400 256 64k
- 5Dh 640x480 256 64k
- 5Eh 800x600 256 64k
- 62h 1024x768 256 64k
- 5Bh 800x600 16 64k
- 5Fh 1024x768 16 64k
-
- Tseng ET-3000 TSENG ET3000 4/8 2dh 640x350 256 64k
- 2eh 640x480 256 64k
- 30h 800x600 256 64k
- 29h 800x600 16 64k
- 36h 960x720 16 64k
- 37h 1024x768 16 64k
-
- Tseng ET-4000 TSENG ET4000 8/16 2dh 640x350 256 64k
- 2fh 640x400 256 64k
- 2eh 640x480 256 64k
- 30h 800x600 256 64k
- 38h 1024x768 256 64k
- 29h 800x600 16 64k
- 37h 1024x768 16 64k
-
- Video 7 VRAM VIDEO7 4/8 6f05h,66h 640x400 256 64k
- 6f05h,67h 640x480 256 64k
- 6f05h,68h 720x540 256 64k
- 6f05h,69h 800x600 256 64k
- 6f05h,61h 720x540 16 64k
- 6f05h,62h 800x600 16 64k
- 6f05h,65h 1024x768 16 64k
-
- Western Digital 90C PARADISE 4/8 5eh 640x400 256 4k
- 5fh 640x480 256 4k
- 5ch 800x600 256 4k
- 58h 800x600 16 4k
- 5Dh 1024x768 16 4k
-