Voodoo 1 GlideXP x64 Experimental Build 1121 ============================================ Release Date: 16th September 2006 Website: http://www.users.on.net/triforce/glidexp/ WTF? ---- WTF you are probably asking yourself looking at this release. A new 'GlideXP' branded release is probably not something that people were expecting, espcially not Voodoo 1 and definatley not for Windows XP x64. What is it? ----------- Voodoo 1 GlideXP x64 is a set of drivers to allow Voodoo 1 cards function in Windows XP x64. Well that's the theory. GlideXP x64 contains an all new 64 bit Kernel driver (fxvoodoo.sys) that the 32 Bit user mode Glide dlls interface with. The Glide dlls included in this package are original 3dfx NT4 Glide DLLs. These are NOT the latest Voodoo 1 DLLs. The latest ones (Glide2 2.48 and Glide3 3.04) from the Quake 3 driver kit crash instantly. Feel free to try other NT4 version drivers your luck will probably vary. Note you can not use Win9x Glide drivers. You must use NT4 Glide drivers How it works? ------------- It works by reimplimenting the kernel services used by the NT4 Glide drivers. Getting into technical details, the Glide drivers are User Mode drivers that attempt to directly access the hardware. This isn't possible in NT because the in and out instructions are privledged. So under NT a service is installed that Glide uses instead of the in and out instructions. Additionally, a second service is used to memory map the Voodoo card into the virtual address space of the usermode process. This can only be done in Kernel mode so a service is required for this too. The interface used by the Glide driverse can be seen in the file swlibs/newpci/pcilib/fxnt.c from the Open Sourced Glide drivers. I cringed when I saw the name of the DosDevice names used by the Drivers, GpdDev and MAPMEM. Yes these ARE the names, and yes they are the same as the DDK examples and yes the defines are the same but in some places the code acts differently. GG 3dfx. The original NT4 drivers used a different service to perform both operations (cause the code was based on the DDK examples with few changes). I decided to reimplement them both into a single driver service (for future developments) This is a bit different to the Win9x Glide drivers. They use in and out instructions and use a vxd to perform the memory mapping. The file from the Open Source drivers with this interface is swlibs/newpci/pcilib/fxvxd.c. For all operating system, the Glide driver itself probes all PCI devices to figure out if there is a Voodoo device installed, rather than using operating system services to do that. This is obviously a huge problem. See the Known Issues section. Driver Versions Included ------------------------ FXVoodoo.sys - 5.2.0.1121 (64 bit) fxoem2x.dll - 2.53.0.24764 (32 bit) Glide2x.dll - 2.46.0.23963 (32 bit) Glide3x.dll - 3.2.0.40607 (32 bit) Voodoo 2? --------- FXVoodoo.sys should in theory work just fine with a Voodoo 2. You'll need to obtain fxoem2x.dll, Glide2x.dll, Glide3x.dll and perhaps 3dfxSpl2.dll and 3dfxSpl3.dll from a Voodoo 2 driver kit if needed, then do some inf modifications. In the inf you should need to do is uncomment a few lines and comment out the Voodoo 3D device line to be good to go. A note, I do not have a Voodoo 2 so it's untested but should work if the Glide dlls cooperate. What about Voodoo Banshee/3/4/5? -------------------------------- Nope not a chance. Banshee and newer Glide drivers interface the hardware through GDI and DirectDraw and get the 2D driver to initialize 3D mode instead of interfacing directly with the hardware. While it would be possible to modify Glide to directly access the hardware (DOS Glide already does this) and use FXVoodoo.sys to access the hardware, it would ultimately be rather pointless. It will be rather impossible to get these AGP cards will work in modern systems, and there is no pass through so you're going to need a different monitor or use an external switching box. The effort or re-engineering the H3/H5 Glide drivers wouldn't be worth the effort. Source? ------- Sorry folks, not with this release. Not yet anyway. I want to clean up the code before I release it... I don't think people really want to be looking at a file full of example code. Compatilibty ------------ Unknown. I've only tested this in Windows XP x64 on an nForce3 250 system with an Althon 64 3500+ and 1 GB of memory. In general things seem ok in all the programs I tested, except for issues noted below. Known Issues ------------ * The FXVoodoo.sys driver opens up some potential security holes. It allows any usermode program to arbitrarily map memory from any PCI device and read from and write to system ports. This is exactly the same as the existing 32 bit drivers. If you are concerned about this problem, then do not install this driver. A future driver will close these holes as much as possible but there is only so much that can be done to retain compatibility with the binary Glide2x and Glide3x drivers. * In testing, I've found the 32 bit usermode Glide drviers can be quite unstable on my system. I am unsure of the exact reason why. The driver seems to get stuck in an infinite loop. If a debugger as attached and the EIP is set to out of the loop, the program can continue functioning, till it gets stuck again. I am looking into compiling my own Glide2x dll and finding where this problem is and fixing it. It may be a problem only effecting me. I don't know. * No OpenGL driver has been included. If you want to use OpenGL with a Voodoo 1 you're a nutcase so I'm not going to bother to distribute a driver. If you really need OpenGL then you can get an OpenGL driver from another package from elsewhere and test things out. No promises whether it will work or not. * MSR stuff (Write combining) is not implemented. I have no idea how that stuff works so I don't know where to being implementing it. See the file swlibs/newpci/pcilib/fxmsr.c in the Open Sourced Glide Sources for some details as well as fxnt.c. The Future ---------- If I manage to get the Glide2x sources to compile which shouldn't be too hard then I'll probably release a new set of drivers with issues fixed. I don't have Glide3x sources for Voodoo 1 (only got them for Voodoo 2 and newer) so any problems fixed will only be fixed in Glide2x. It shouldn't be too much of a problem considering few programs used Glide3x. Something I'd like to change is stop Glide from probing all PCI devices to workout where a Voodoo is. Instead I want to change it so it uses a WMD driver interface and uses that to know how many devices are available. Perhaps I should even back port the 64 bit driver back to 32 bit to close the various security holes among other problems. Bug Reporting ------------- This is released unsupported. I don't want to know of any problems with it. Contact Details --------------- Name: Ryan Nunn (Colourless) Email: colourless@hidden-waters.com WWW: http://www.users.on.net/triforce/glidexp/