It turns out that NVidia are quite a class act when it comes to
making their products backward-compatible. When I was writing a BeOS driver
for the RIVA TNT, I feared that the upcoming TNT2 would require a complete
re-write. I was delighted to discover that, from a software perspective,
the TNT2 was virtually identical to the TNT. The only major difference was
the PCI device ID.
Suspecting that NVidia continued this tradition with their GeForce
offerings, I decided to try filezapping the XFree86 binary, replacing one of
the supported PCI vendor/device ID pairs with that of the GeForce2 GTS. And
y'know something? It worked!
So: If you've got a GeForce card you'd like to work under XFree86
3.3.6, grab yourself a copy of a hex editor (I used 'hexedit') and perform
the following steps (specific instructions will vary based on your distro):
o If it is already running, kill the X server. You should be doing
this from a text console.
o 'cd' to the directory where your XFree86 3.3.6 server binary is
stored (typically /usr/bin/X11).
o MAKE A BACKUP COPY OF THE SERVER:
cp XF86_SVGA XF86_SVGA.orig
o Launch your hex editor and load XF86_SVGA.
o Search for the following hex byte sequence:
DE 10 00 00 03 01 00 00
This is the byte-swapped PCI vendor (0x10DE) and device (0x0103)
ID for the NVidia Quadro, a board you are unlikely to encounter.
The exact offset you find this sequence will vary widely,
depending on how your particular copy was compiled.
o The Quadro is a GeForce variant. We are going to change these
bytes to instead describe our GeForce2 GTS. Move the cursor to
the "03 01" and change them to the following:
50 01
The entire hex byte sequence should now read:
DE 10 00 00 50 01 00 00
o Save the modified file.
o Re-launch the X server in the normal way.
Don't have a GeForce2 GTS? Here's a list of the PCI IDs of known
GeForce and GeForce-compatible offerings:
0x0100 GeForce 256 (Already supported in XF86 3.3.6)
0x0101 GeForce DDR (Already supported in XF86 3.3.6)
0x0103 Quadro (Already supported in XF86 3.3.6)
0x0110 GeForce2 MX
0x0111 GeForce2 MX
0x0113 Quadro2 MXR
0x0150 GeForce2 GTS/GeForce2 Pro
0x0151 GeForce2 GTS
0x0152 GeForce2 Ultra
0x0153 Quadro2 Pro
Remember to BYTE-SWAP these values when you type them into the hex
editor (assuming your hex editor only supports byte-wise editing).
To be sure of which flavor of GeForce you have, take a peek in
/proc/pci and look for the entry for "VGA compatible controller". Copy down
the device ID number you find there (it's in hex).
WARNING: This procedure is known to work ONLY with XFree86 3.3.6;
other versions may not/probably won't work. Further, though I'm quite sure
it will work with other GeForce cards, I have ONLY tested it with a GeForce2
GTS. I disclaim ALL RESPONSIBILITY for any unintended/undesireable results.
If you do it, yer on yer own.
Hope this proves useful to someone.
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
Leo L. Schwab -- Digital Spellweaver ew...@best.com ..or..
\_ -_ http://www.best.com/~ewhac/ ew...@well.com
O----^o Recumbent Bikes: The Only Way To Fly. (pronounced "EH-wack")
Do the Illuminati shop for clothes at Fnordstrom?
Wouldn't it be nice to have the PCI ids externalized (ie. listed in a text
file), in order to easily support newer hardware with backward compatible
drivers... This could be done via the XF86Config : I can add modelines,
why couldn't I add card IDs ?
BTW, is Nvidia the only one to provides backward compatible hardware ? What
about Matrox, ATI, S3 or others ?
NVidia are the only chip with which I have direct experience where
this sort of thing worked. Backward compatibility to this degree is rare.
Trident appears to sorta do it, but it's *way* ugly and, IMHO, not worth
the effort.