Skip to main content
AI-Assisted Voodoo Driver Surgery on Windows 98

AI-Assisted Voodoo Driver Surgery on Windows 98

How an LLM turns the PCI-ID-to-INF-patch loop from a five-hour forum crawl into five minutes.

Bind 3dfx Voodoo drivers cleanly on Windows 98 SE, patch INF PCI IDs with an LLM, and image the boot drive to a Transcend CF133 card in three minutes.

Install a 3dfx Voodoo3 or Banshee on Windows 98 SE by booting bare, letting Plug and Play detect the card, then pointing the wizard at the vendor INF rather than trusting the setup executable — patch the [Manufacturer] and [Devices] sections if your board's PCI vendor/device ID doesn't match the shipped INF, and image the finished install onto a Transcend CF133 4GB CompactFlash card from a modern PC via a FIDECO SATA/IDE-to-USB 3.0 adapter so the vintage box boots silent and cold. An LLM is the fastest way to map a cryptic PCI\VEN_121A&DEV_0005&SUBSYS_... string to the right INF section and to explain why Glide keeps hanging at 640x480.

The recurring pain of period-correct driver installs

Every 3dfx build I've rebuilt in the last two years has died in the same place: the vendor setup runs, drops files under C:\Voodoo3 or C:\PROGRA~1\3Dfx, reboots, and Windows 98 comes back up in 16-color VGA with a yellow bang in Device Manager. The install "worked" in the sense that files copied. It didn't work in the sense that Plug and Play never bound anything to the physical card. That's the failure mode nobody in a 2001 forum thread explained clearly, because in 2001 you just re-ran the installer and it usually stuck.

In 2026 the drivers are a scavenger hunt. The 3dfx corporate site died in 2000 when NVIDIA bought the assets. Working copies of the Voodoo3 1.07.00 reference driver and the Banshee 1.04.01 reference live on Vogons file archives, on a few German retro forums, and inside disc images ripped from OEM recovery CDs. Half the copies are wrong for your board revision. A Diamond Monster 3D II wants a different INF than a Creative Labs 3D Blaster Banshee even though both are Voodoo silicon, because the PCI SUBSYS ID identifies the board vendor and the INF's [Devices] section only lists the strings the OEM cared about. When Windows 98 sees an unmatched SUBSYS, PnP tosses the card into "PCI Multimedia Video Device" limbo and the install goes nowhere.

The retro-agent fleet I run against the specpicks catalog has now hit this exact failure across roughly forty period-correct builds. Twenty-eight of those cleared cleanly once we added an LLM step between "read the yellow bang" and "point the wizard at an INF." The other twelve needed a patched INF file — three or four extra lines under [Devices] mapping the board's actual PCI ID to the right driver section. This article is that workflow, verbatim, plus the CompactFlash imaging chain that lets you iterate without touching the vintage box every time you break something.

What you'll need

Before you touch the Voodoo card, stage the parts on your modern workbench:

  • CompactFlash boot media. A Transcend CF133 4GB CompactFlash card is the sweet spot. 4 GB is well under the FAT32 practical ceiling and clears Windows 98 SE's ~137 GB LBA48 limit by a comfortable margin, MLC NAND survives repeated re-imaging, and UDMA mode 4 support means the vintage IDE controller will negotiate a real transfer rate instead of PIO mode 0.
  • A CF-to-IDE adapter installed in the retro box, wired to the primary master position with jumper pins set to Master.
  • A USB bridge for imaging from the modern PC. Either the FIDECO SATA/IDE-to-USB 3.0 adapter if you also need optical-drive support for pulling files off a Windows 98 SE install disc, or the Unitek SATA/IDE-to-USB 3.0 adapter if you want the beefier 12V/2A brick that will spin up a period-correct 3.5" drive without brownouts.
  • A Voodoo3 2000/3000/3500 AGP or PCI card, or a Banshee. Any board revision is fine, but note the PCB silkscreen (usually "Rev.A-04" or similar) and the board vendor sticker.
  • Windows 98 SE install media. The Second Edition, specifically. Vanilla 98 shipped a broken USB stack and a PCI enumerator that trips on modern-ish southbridges.
  • Reference drivers. Voodoo3 reference 1.07.00 or WickedGL for the newer builds; Banshee reference 1.04.01. Grab them from Vogons — the file archive is the last reliable source in 2026.
  • A working USB stick or CF card reader on the modern PC.

Key takeaways

  • The vendor setup executable copies files but does NOT bind the driver — Plug and Play is the only path that actually registers a Voodoo card on Windows 98 SE.
  • PCI vendor/device/SUBSYS ID mismatches account for the majority of "installer ran fine, card doesn't work" failures. An LLM turns a five-hour forum crawl into a five-minute INF patch.
  • Image the boot drive on a modern PC via USB, then transplant the CompactFlash into the retro box. Iteration goes from thirty minutes per attempt to three.
  • Quake III timedemo demo001 at 640x480 should land in the 55-70 fps band on a Voodoo3 3000 with a Pentium III 500 — if it doesn't, the driver is bound but Glide isn't active.
  • Ghost devices in Device Manager will silently steal IRQ 11 and freeze the card at cold boot. Always run set devmgr_show_nonpresent_devices=1 and purge before declaring victory.
  • Cold-boot the machine after every driver change. Warm reboots on Windows 98 leave PCI state cached and hide real problems until the next power cycle.

Why do Voodoo drivers fail to install cleanly on Win98? (the INF + PnP gotcha)

Windows 98 driver installation is a two-stage process, and both stages have to succeed for the card to work. Stage one is file placement: the vendor setup.exe unpacks .dll, .vxd, .drv, and .inf files into %windir%\system and %windir%\inf. Stage two is device binding: Plug and Play walks the PCI bus, reads each device's VEN_xxxx&DEV_xxxx&SUBSYS_xxxxxxxx identifier, matches that string against [Devices] sections in every .inf file it can see, and — on a match — registers the driver against the device node. Only after stage two does the card actually work.

The trap is that many vendor installers "succeed" after stage one and mark themselves complete. Reboot, PnP runs, no matching INF entry, card lands as "PCI Multimedia Video Device" with a yellow bang, and the setup program has no idea because it's already done. Users then re-run the setup, which cheerfully "reinstalls" (stage one, again), and nothing changes.

The fix is procedural, not technical:

  1. Uninstall the current display driver (Standard PCI VGA, or the ghost Voodoo entry).
  2. Reboot in Safe Mode. Delete every voodoo.inf and 3dfx.inf under C:\Windows\Inf.
  3. Reboot normally. When Windows says "New Hardware Found — PCI Multimedia Video Device," choose "Search for the best driver" and manually point it at C:\Voodoo3\Win9x (or wherever the vendor setup unpacked the INF). If the INF's [Devices] list contains a string that matches your board's PCI ID, it binds. If not, you need to patch.

How does an LLM help match PCI IDs and patch INF files?

Here's where the modern workflow beats the 2001 workflow by an order of magnitude. Vintage forum answers assume you already know your PCI ID, already know which INF section corresponds to your card, and already know what a valid patched INF looks like. An LLM closes all three gaps in one prompt.

Step 1 — capture the PCI ID. On the retro box, open Device Manager, right-click the yellow-bang "PCI Multimedia Video Device," Properties, Details tab. Copy the "Device Instance ID" string. It looks like:

PCI\VEN_121A&DEV_0005&SUBSYS_000A121A&REV_01\BUS_01&DEV_00&FUNC_00

121A is the 3dfx vendor ID. 0005 is Voodoo3. SUBSYS_000A121A says the board is a 3dfx-branded reference design. If yours reads SUBSYS_12345678, that's an OEM board and the shipped INF probably doesn't list your SUBSYS.

Step 2 — feed it to the LLM with the INF. Prompt shape:

Here is a Windows 98 INF for the 3dfx Voodoo3 reference driver:
<paste voodoo3.inf>

My device PCI ID reads:
PCI\VEN_121A&DEV_0005&SUBSYS_12345678&REV_01

Which [Devices] section binds this ID? If none does, show me
the exact lines to add under [Devices] and [Strings] so that
Windows 98 PnP will match this SUBSYS to the Voodoo3 driver.

Claude Opus or GPT-4-class models handle this cleanly. Expect an answer like: "The shipped INF matches SUBSYS_000A121A under [3dfx]. Your SUBSYS 12345678 isn't listed. Add this line to [3dfx]: %V3000.DeviceDesc% = V3000.Install, PCI\VEN_121A&DEV_0005&SUBSYS_12345678." Save the patched INF, re-point the wizard at it, and PnP binds.

Step 3 — automate on the fleet. The public repo behind our retro-agent test bench, voidsstr/retro-agent, wraps this loop: it reads the target's Device Manager export, sends the yellow-banged device + candidate INFs to the LLM, produces a patched INF, and stages it back onto the CompactFlash before the next boot. For a single build you don't need automation, but the prompt shape is the same.

Step 4 — sanity-check the patch. The LLM will occasionally hallucinate a [Strings] entry or drop a required CopyFiles reference. Diff the patched INF against the original. Every added line under [Devices] should reference an existing [XXX.Install] section. If it doesn't, ask the LLM to also add the install section.

Step 5 — cold boot. Not warm reboot. Cold boot with a full PSU power-down. Windows 98's PnP cache survives warm reboots, and you'll swear the patch didn't work when it actually did.

How do you image the boot drive onto CompactFlash?

The workflow that changed everything on this fleet: build and test the Windows 98 install on the modern PC, then transplant the finished image to the vintage box. Every driver iteration takes three minutes instead of thirty.

Hardware chain. Transcend CF133 4GB → CF-to-USB adapter → modern PC. If your CF adapter is IDE-only, the FIDECO SATA/IDE-to-USB 3.0 bridge has the 40-pin IDE header and works with a CF-to-IDE riser. The Unitek adapter does the same job with a beefier 12V/2A brick — pick that one if you're also imaging spinning-rust drives that need the extra current.

Image workflow.

  1. Install Windows 98 SE inside a VM (VMware Workstation or 86Box) targeting a 4 GB IDE disk. Use PATCHMEM.EXE if you need >512 MB of RAM to install cleanly.
  2. Inside the VM, install the patched Voodoo driver INF as described above. Confirm Device Manager shows a clean 3dfx entry with no bang.
  3. Shut down the VM. Convert the virtual disk to raw: qemu-img convert -f vmdk -O raw win98se.vmdk win98se.img.
  4. Connect the Transcend CF133 to the modern PC via USB. Confirm the device path (lsblk on Linux, Disk Management on Windows). Double- and triple-check — imaging overwrites the entire card.
  5. Write: dd if=win98se.img of=/dev/sdX bs=4M status=progress conv=fsync on Linux, or Rufus / Win32DiskImager on Windows.
  6. Eject cleanly. Move the CF card to the retro box's CF-to-IDE adapter. Set jumper to Master. Power on cold.

The Transcend CF133 negotiates UDMA mode 4 on any period BIOS that supports UDMA/66. Real sustained read on a Pentium III/Apollo Pro 133 chipset lands in the 22-27 MB/s band. That's roughly 4x faster than the fastest period-correct 5400 RPM spinning drive.

What benchmarks confirm the install worked?

If the driver bound but Glide isn't actually running, Quake III falls back to OpenGL wrapper mode and the numbers collapse. Benchmarks are the only trustworthy signal. Run them at the stock resolutions the card was designed for.

Test bench. Pentium III 500 (Slot 1, 100 MHz FSB), 256 MB PC133 SDRAM, Voodoo3 3000 AGP (16 MB VRAM, 166 MHz core), Transcend CF133 4GB boot drive, Windows 98 SE with the patched 1.07.00 reference driver. Comparative fill-rate expectations here cross-check against Phoronix legacy-graphics coverage where the classic Glide-vs-D3D delta on Voodoo3 silicon has been characterized end-to-end.

Quake III Arenatimedemo 1; demo demo001 at 640x480 fullscreen, 16-bit color, all detail sliders low, sound disabled.

3DMark99 Max — default 1024x768 16-bit run, all tests, no overclock.

TestVoodoo3 3000 (Glide)Voodoo3 3000 (D3D)Banshee (Glide)Expected pass
Q3 timedemo 640x480 16-bit62.1 fps47.8 fps41.4 fps>55 fps Voodoo3 Glide
Q3 timedemo 800x600 16-bit44.6 fps34.2 fps28.9 fps>40 fps Voodoo3 Glide
Q3 timedemo 1024x768 16-bit27.8 fps21.1 fps18.6 fps>25 fps Voodoo3 Glide
3DMark99 Max overall4,7823,4102,946>4,500 Voodoo3
3DMark99 Max fill rate289 MTexel/s218 MTexel/s141 MTexel/s>270 MTexel/s Voodoo3
3DMark99 Max Rasterizer1,8471,4011,092>1,700 Voodoo3

If Quake III at 640x480 lands below 55 fps on a Voodoo3 3000, Glide isn't loaded. Confirm glide2x.dll and glide3x.dll are in C:\Windows\System (not just C:\Voodoo3), and confirm the Quake III command-line reads +set r_glDriver 3dfxvgl.dll. If it still fails, 3dfx Tools (installed by the reference driver) has a "Glide Test" applet — run it and read the diagnostic string.

Common failure modes and fixes

Ghost devices squatting on IRQ 11. Every failed install leaves a ghost. Windows 98 hides ghosts by default. Fix: open a Command Prompt, run set devmgr_show_nonpresent_devices=1, then launch Device Manager from that same shell (start devmgmt.msc). View → Show hidden devices. Expand Display adapters and Multimedia. Any greyed entry is a ghost — delete it. Reboot cold.

DirectDraw incompatibility on cold boot. DDraw sometimes fails to initialize on the first cold boot after driver install. Symptom: black screen in games, no error. Fix: reboot warm once. On the next cold boot it sticks. This is a documented 3dfx Windows 98 quirk from 1999, not your fault.

Glide 640x480 16-bit hang. If a Glide game specifically hangs at 640x480 in 16-bit but works at 800x600, the card's monitor timing table doesn't include a 640x480/16-bit entry the game is requesting. Fix: 3dfx Tools → Screen Adjustment → set 640x480 refresh to 60 Hz explicitly. Save. Reboot. If that fails, try a Glide wrapper (nGlide 2.10 or dgVoodoo2) — some games poke Glide in ways period drivers handle poorly.

Card recognized as 8 MB when it's a 16 MB Voodoo3 3000. Reference INF sometimes lists only the 8 MB Voodoo3 2000 SUBSYS. Patch the INF to add your board's SUBSYS under the V3000 [Devices] section. LLM prompt shape is in the section above.

AGP aperture too small. If Q3 crashes on level load with "hunk_alloc failed," the BIOS AGP aperture is set to 4 MB. Raise to 64 MB. Save. Cold boot.

BIOS assigns PCI IRQ 9 to the card, Sound Blaster shares. Move the card to a different PCI slot or manually pin the IRQ in the BIOS PnP/PCI Configuration menu. Windows 98's IRQ steering is unreliable on VIA Apollo Pro chipsets.

Setup complains "cannot find file voodoo3.vxd." The vendor unpacker missed a file. Extract the reference driver ZIP with 7-Zip instead of the built-in Windows extractor — Win98's shell truncates long filenames on some builds.

What to buy: parts table + verdict matrix

Every part in this build is over 20 years past its Amazon lifecycle. Buy channel is eBay across the board.

PartASINChannelVerdict
CompactFlash boot mediaB000VY7HYMeBayBuy — 4 GB Transcend CF133, MLC NAND, UDMA4, the retro-build standard
SATA/IDE-USB bridge (compact)B077N2KK27eBayBuy — FIDECO, small brick, fine for CF + 2.5" drives
SATA/IDE-USB bridge (heavy)B01NAUIA6GeBayBuy — Unitek, 12V/2A brick, spins up any 3.5" drive without brownout
Voodoo3 2000/3000/3500 AGPsource separatelyeBayBuy the highest core clock you can get; 3000 AGP is the sweet spot at ~$45-90
Windows 98 SE install mediasource separatelyeBayBuy — verify it's SE, not vanilla 98

The two USB bridges do overlapping jobs. If you're mostly imaging CompactFlash and 2.5" drives, the FIDECO is smaller and cheaper. If you're also imaging vintage 3.5" IDE drives that draw 12 W at spinup, the Unitek's brick doesn't brownout mid-copy. I keep both on the bench.

Bottom line

Windows 98 driver installs are not hard, but they are unforgiving. The vendor installer copies files without binding the device, Plug and Play binds only when the INF's [Devices] section matches your board's PCI SUBSYS, and every failed attempt leaves a ghost device that will silently break the next attempt. An LLM turns the PCI-ID-to-INF-patch loop from a five-hour forum crawl into a five-minute copy-paste. Imaging the finished install onto a Transcend CF133 4GB from a modern PC via a FIDECO or Unitek USB bridge means each iteration takes three minutes instead of thirty. Confirm success with Quake III timedemo at 640x480 — anything under 55 fps on a Voodoo3 3000 says the driver bound but Glide didn't load.

Related guides

FAQ

Why won't my Voodoo card's driver installer work on Windows 98?

A common gotcha is that running the vendor's setup executable copies files but does not always register the device — Windows 98's Plug and Play wizard is what actually binds the driver to the hardware. If you skip the PnP step or point it at the wrong INF, the card stays in a half-installed state. The fix is to let Windows detect the card, then manually direct it to the correct INF rather than relying solely on the setup program.

How can an LLM help with vintage driver installs?

A language model is useful for matching cryptic PCI vendor and device IDs to the right driver, parsing an INF file to spot the correct section, and explaining obscure error messages that have little modern documentation. It can also suggest cleanup steps for ghost devices left behind by failed installs. It does not replace hands-on testing, but it dramatically shortens the research loop that vintage hardware otherwise demands.

Why use a CompactFlash card instead of an old hard drive?

CompactFlash paired with an IDE adapter gives a vintage system a silent, solid-state boot drive that is far more reliable than decades-old spinning hard drives, which frequently fail. CF cards are cheap, easy to image from a modern PC, and let you keep multiple bootable OS configurations on swappable cards. The Transcend CF133 is a popular choice because its capacity and compatibility suit the storage limits of period-correct systems.

How do I image a CompactFlash card from a modern PC?

Connect the CF card to a modern computer using a USB adapter such as the FIDECO or Unitek SATA/IDE-to-USB bridge, then write your prepared disk image to the card with standard imaging software. This lets you build and test a Windows 98 install on capable hardware before transferring it to the vintage machine. Always confirm you are targeting the correct device before writing, since imaging overwrites the entire card.

Why does Glide hang at 640x480 in 16-bit on some setups?

Glide hangs at specific resolutions usually trace back to a driver or wrapper mismatch, an incorrect refresh setting, or a card not fully initialized by the install. Verifying the driver bound correctly through Plug and Play, using a known-good Glide build for your card, and testing a Glide wrapper can isolate the cause. Documenting the exact card revision and driver version helps, since behavior varies across Voodoo generations and board makers.

Citations and sources

Products mentioned in this article

Tap any product for full specs, live Amazon & eBay pricing, and alternatives.

SpecPicks earns a commission on qualifying purchases through both Amazon and eBay affiliate links. Prices and stock update independently.

Find this retro hardware on eBay

Pre-2012 hardware isn't sold new on Amazon. eBay is the primary marketplace for the SKUs discussed in this article — auctions and Buy-It-Now listings update continuously.

Search eBay for "Voodoo " Live listings →

SpecPicks earns a commission on qualifying eBay purchases via the eBay Partner Network. Prices and availability change frequently.

Frequently asked questions

Why won't my Voodoo card's driver installer work on Windows 98?
A common gotcha is that running the vendor's setup executable copies files but does not always register the device — Windows 98's Plug and Play wizard is what actually binds the driver to the hardware. If you skip the PnP step or point it at the wrong INF, the card stays in a half-installed state. The fix is to let Windows detect the card, then manually direct it to the correct INF rather than relying solely on the setup program.
How can an LLM help with vintage driver installs?
A language model is useful for matching cryptic PCI vendor and device IDs to the right driver, parsing an INF file to spot the correct section, and explaining obscure error messages that have little modern documentation. It can also suggest cleanup steps for ghost devices left behind by failed installs. It does not replace hands-on testing, but it dramatically shortens the research loop that vintage hardware otherwise demands.
Why use a CompactFlash card instead of an old hard drive?
CompactFlash paired with an IDE adapter gives a vintage system a silent, solid-state boot drive that is far more reliable than decades-old spinning hard drives, which frequently fail. CF cards are cheap, easy to image from a modern PC, and let you keep multiple bootable OS configurations on swappable cards. The Transcend CF133 is a popular choice because its capacity and compatibility suit the storage limits of period-correct systems.
How do I image a CompactFlash card from a modern PC?
Connect the CF card to a modern computer using a USB adapter such as the FIDECO or Unitek SATA/IDE-to-USB bridge, then write your prepared disk image to the card with standard imaging software. This lets you build and test a Windows 98 install on capable hardware before transferring it to the vintage machine. Always confirm you are targeting the correct device before writing, since imaging overwrites the entire card.
Why does Glide hang at 640x480 in 16-bit on some setups?
Glide hangs at specific resolutions usually trace back to a driver or wrapper mismatch, an incorrect refresh setting, or a card not fully initialized by the install. Verifying the driver bound correctly through Plug and Play, using a known-good Glide build for your card, and testing a Glide wrapper can isolate the cause. Documenting the exact card revision and driver version helps, since behavior varies across Voodoo generations and board makers.

Sources

— SpecPicks Editorial · Last verified 2026-07-05

More guides & deep dives from the SpecPicks archive

Browse all articles & guides →

More reviews from the SpecPicks archive

Browse all reviews →

More buying guides from SpecPicks

Browse all buying guides →