Skip to main content
Voodoo 5 6000 Lab Method: Two Motherboards, One Dead BIOS

Voodoo 5 6000 Lab Method: Two Motherboards, One Dead BIOS

The hosts, the driver files by hash, and the rules that made the numbers trustworthy

How the SpecPicks Retro Lab benchmarked a Voodoo 5 6000: two Athlon XP hosts, AmigaMerlin 3.1-R11 pinned by md5, one setting per boot, hosts never compared.

Quick Answer

Every figure in this series was taken by remote automation on one Voodoo 5 6000 in two period Athlon XP machines, with the game binary, the driver files and the renderer string recorded on each row — Quake III 1.32c (md5 b5cf3dd5…), AmigaMerlin 3.1-R11 driver 5.1.2605.5, renderer Mesa Glide v0.63 Voodoo5 6000 (tm) — as the published versions record shows. One driver setting per clean boot, and the two hosts are never compared.

A Voodoo 5 6000 benchmark is only as good as its provenance, because this card has no retail history to check against and its driver is a community rebuild of a 2001 codebase. This part records exactly what was measured, on what, under which rules — so that Part 3's numbers and Part 4's negative result can be trusted, repeated, or argued with.

Key takeaways

  • One card, two motherboards: an EPoX EP-8RDA+ (nForce2) with 511 MB whose BIOS died mid-campaign, then an Athlon XP 2400+ at 2004 MHz with 255 MB. Their numbers are never placed in the same table.
  • The software is pinned by hash, not by version string: AmigaMerlin 3.1-R11 (driver 5.1.2605.5, dated 6-9-2005), whose OpenGL ICD identifies itself as 1.2 Mesa 6.3 by Brian Paul.
  • "cfg N" is the value of one registry string, SSTH3_SLI_AA_CONFIGURATION; the labels beside it are the driver's own words from 3dfx Tools, quoted — not the lab's description of the hardware.
  • One driver setting per clean boot. A second write in the same boot can wedge the display driver, and a wedged board still answers the network.
  • A setting counts as applied only when the rendering changes. Reading the value back proved nothing, which is how Part 4 happened.
  • The engine takes every picture. The remote agent's screen capture of a Glide exclusive-fullscreen surface returns noise.

Which two machines hosted the Voodoo 5 6000?

The card arrived once and went into two boards. Host 1 was an EPoX EP-8RDA+ — an nForce2 board, identified by its PCI bridge IDs — with 511 MB and Windows XP SP3. It produced the campaign's first verified cells and then stopped booting with no video: a corrupted main BIOS, with the warning signs recorded in Part 5. Its CPU clock is deliberately not printed here, because the failing BIOS reported two different values on two days.

Host 2 is an AMD Athlon XP 2400+ at 2004 MHz (family 6, model 8) with 255 MB and Windows XP SP3, driving the same Gateway VX1120 4:3 CRT. Its published hardware record lists the CPU's instruction set as FPU, MMX, CMOV, 3DNow! and SSE — no SSE2, which matters for the driver plans in Part 6 — and does not record the chipset, so this series does not name one.

hostboard and platformCPURAMOSrole in the series
Host 1EPoX EP-8RDA+, nForce2Athlon XP-class; clock unreliable (BIOS failing)511 MBWindows XP SP3640×480 cells only; BIOS died 2026-09-13
Host 2chipset not in the hardware recordAthlon XP 2400+ @ 2004 MHz, no SSE2255 MBWindows XP SP3every table not marked host 1
bothGateway VX1120, 4:3 CRT; card in 128 MB VBIOS modeagent 1.81.1one card, moved between them

The card itself identifies as PCI\VEN_121A&DEV_0009&SUBSYS_0001121A behind a HiNT bridge VEN_3388&DEV_0021 — the 6000's subsystem ID, where a Voodoo 5 5500 reads 0002121A — and Glide reports four framebuffers present under every setting. It ran in the 128 MB mode of its dual-VBIOS switch throughout; the 256 MB mode is Part 6's business.

What exactly was under test?

AmigaMerlin ships rebranded 3dfx binaries whose version resources do not reliably distinguish builds, so the lab identifies every file by size and MD5 and records those on each benchmark row. The driver package installed through oem2.inf under the provider string "3dfx Interactive, Inc."; AmigaMerlin 3.1 R11 itself dates from June 2005 and is the community's usual choice for a Voodoo 5 on Windows XP (VoodooAlert, PhilsComputerLab).

componentidentity as recorded
driver packageAMIGAMERLIN 3.1-R11 For Voodoo 5 6000 AGP, DriverVersion 5.1.2605.5, DriverDate 6-9-2005, oem2.inf
glide3x.dll344,064 bytes, md5 8c376063b95fa9a4d05a03626a2a1e5c
glide2x.dll94,208 bytes, md5 a0d0841a178acda0dfc200ef9e31f5db
3dfxOGL.dll (OpenGL ICD)2,646,009 bytes, md5 8912a1388a15a8f6b3a75b6a1a344ee9 — reports GL_VENDOR Brian Paul, GL_VERSION 1.2 Mesa 6.3
3dfxvs.dll (display driver)610,240 bytes, md5 95634e870d73a33e64ddd138074f523b
3dfxvsm.sys (miniport)174,720 bytes, md5 83ee5503255fd9f9c2291253221cb466
quake3.exeretail 1.32c, 872,448 bytes, md5 b5cf3dd55e045aac6096ff97379d0cab
UnrealTournament.exebuild 436, 241,664 bytes, md5 7dadcc7e3a9a3d66001e3b37cf636f0e, GlideDrv render device

The OpenGL under test is Mesa. That is worth a sentence on its own: the ICD AmigaMerlin installs is a Mesa 6.3 build over Glide, and every Quake III row in this series carries its renderer string, Mesa Glide v0.63 Voodoo5 6000 (tm). Quake III loads it by name (r_glDriver 3dfxogl), so there is no ambiguity about which library drew the frames. Unreal Tournament, by contrast, was run through its native Glide render device with no OpenGL in the path — which is what let Part 4 separate a driver fault from an ICD fault. Full file list: the versions record.

What does "cfg 2" mean, and why are the driver's labels only quotes?

On this driver the chip topology and the anti-aliasing mode are a single registry string, SSTH3_SLI_AA_CONFIGURATION, under the display adapter's Glide settings key. The 3dfx Tools control panel exposes it as three pick-lists whose values the lab read out of the driver's own descriptor keys; the words in the table are the driver's, verbatim.

valuethe driver's labelmeasured in this series
cfg 0Single Chip Onlyfive resolutions, twice
cfg 1Single Chip, 2-Sample AA640×480 and 1024×768; wedged twice
cfg 2Dual Chip, Fastest Performancefive resolutions, once
cfg 3Dual Chip, 2-Sample AAnot measured
cfg 4Dual Chip, 4-Sample AAone UT99 frame only
cfg 5Quad Chip, Fastest Performancefive resolutions, twice
cfg 6Quad Chip, 2-Sample AAnot measured
cfg 7Quad Chip, 4-Sample AAone Quake III frame only
cfg 8Quad Chip, 8-Sample AAone UT99 frame only

The labels are printed as quotes because the measurements contradict them. The setting the driver calls "Dual Chip" reaches 3.47 times the "Single Chip Only" figure at 1600×1200 and beats "Quad Chip" at every resolution (Part 3), and every anti-aliasing label produced a frame identical to its no-AA sibling (Part 4). What the lab can state is which value was written and what the card then did; how many VSA-100s were actually working is an open question, not a caption.

How was each run taken?

The rules below are the method. Each one exists because its absence produced a wrong number at some point in the campaign.

  • One driver setting per clean boot. The value is written, the machine is rebooted, the setting is read back, a Glide probe confirms the board can still initialise, and only then does a game start. Resolutions are cycled freely inside that boot, because a resolution change is not a topology change.
  • A setting counts as applied only when the rendering changes. The harness once recorded a column called aa_verified that meant "the registry value read back". It now records reg-readback-only, and any anti-aliasing cell that keeps 97% or more of its no-AA frame rate is reported as not applied.
  • Quake III demo four, 1,260 frames, 16-bit colour, 16-bit depth, com_maxfps 0, swap interval 0, at 640×480, 800×600, 1024×768, 1280×960 and 1600×1200. The high mode is 1280×960, not 1280×1024, because the monitor is a 4:3 tube and 5:4 would be a different pixel count and a squashed image.
  • The latched cvars are set before the renderer starts. r_mode, r_customwidth and r_colorbits are read once at renderer init, so they are supplied both in a config the engine executes before R_Init and on the command line, and no vid_restart is ever issued — a renderer restart is exactly what hung the driver at the 8-sample setting on host 1.
  • The box is quiesced: the fleet's AI engine, wallpaper rotator, Windows Update client, the 3dfx Tools tray application and stray error reporters are stopped before a run. These are single-core machines; a background process reads several fps low.
  • Every row records what ran: game binary path, size and MD5; driver package and version; Glide and ICD hashes; OS build; agent version; and the renderer string parsed from the engine's own log. A row without its versions cannot be compared with a later one.
  • Results are written somewhere durable. Fourteen measured rows were lost when a session's scratch directory was deleted; the harness now refuses a temporary output path, and the lost cells were re-measured rather than reconstructed from notes, because a reconstructed row would have no renderer attribution.

Why is a resolution change safe when a settings change is not?

Because the failure the lab kept meeting is in the display driver, not the game. Writing SSTH3_SLI_AA_CONFIGURATION more than once within a boot — and sometimes creating a second Glide context after a single write — leaves the driver wedged: the game window opens, the renderer never identifies itself, and the machine either loses its remote agent or sits with the game on screen until someone cuts the power.

Two consequences shaped the method. First, agent liveness is not board liveness: the remote agent kept answering on a machine whose 3D board could no longer open a context, so six configurations were briefly and wrongly recorded as "wedges the driver" before the lab learned to probe the board separately. Second, a Run-key watchdog now restarts the agent within about 30 seconds when a wedge kills it — proven by killing it on purpose — which turns most wedges into a remote reboot instead of a walk to the machine. It does not help when the game is frozen on screen; that still needs a person.

Why are the two hosts never compared?

The same card, the same driver files and the same setting gave 150.2 fps at 640×480 on host 1 and 122.8 then 108.1 on host 2. Nothing about the card changed; the machine did. A single-resolution comparison across those two boxes would say more about 511 MB versus 255 MB of RAM and two different boards than about four VSA-100s, so host 1's four verified cells stand in their own table in Part 3 and are never subtracted from host 2's.

Repeatability within a host is the check that matters, and it is reported honestly. Two full ladders for the "Single Chip Only" and "Quad Chip" settings were taken on host 2 on different days: three of the eight fill-bound cells landed within 0.1 fps of their first run and none moved more than 1.7%, while the CPU-bound 640×480 cell fell 8% and 12%. The lab's hypothesis is that 640×480 is the noisy cell because it is CPU-bound; the caveat is that the agent watchdog — a loop that polls the process list every 30 seconds — was installed between the two runs, and a re-measurement with it paused was scheduled but host 2 went offline before it ran.

How were the images captured?

The remote agent can photograph most fullscreen games on Windows XP, but a Glide exclusive-fullscreen surface is the case where it cannot: what it returned for Unreal Tournament was dark noise, and a capture that might be resampled or of the wrong buffer is worse than none when the question is edge quality. So every image in this series is the engine's own — screenshotJPEG in Quake III on a fixed frame of demo four, and Shot in Unreal Tournament, triggered with the F11 key the game already binds. Unreal Engine 1 accepts a synthetic keystroke in exclusive fullscreen; id Tech 3 does not, which is why the two engines needed two routes.

UT99 stat overlay reading FRAME=006.9 MSEC RENDER=005.4 MSEC

When an engine will not write a log, its own on-screen counter is the measurement channel: Unreal Tournament's stat line, read off the engine's own screenshot on host 2 at the driver's "Quad Chip, Fastest Performance" setting.

A deterministic scene turned out to be the hard part. Quake III's demo playback is deterministic and wait counts frames, so the same frame is photographed at every setting regardless of frame rate. Unreal Tournament's ?quickstart spawns at a random start point, so two of its frames differ in most of their pixels for reasons that have nothing to do with anti-aliasing; there the lab judged edge quality, which does not depend on the scene, and quantified it with a per-column edge metric whose script is published with the evidence.

What can this method not tell you?

It cannot give a frame-rate table for any anti-aliasing setting, because none of them engaged (Part 4); every such number would describe the card with AA requested and not delivered. It cannot give an Unreal Tournament frame-rate table: the build's -benchmark mode never exits on this system, so UT99's figures are single readings of its stat overlay, not averages. It cannot name host 2's chipset, and it cannot say how many chips each driver setting really lights up. And it cannot compare this card with a Voodoo3 3000 or a Voodoo 5 5500 — no other card was measured under these rules. Everything it can say is in the results CSV and the campaign dossier, including every correction.

Bottom line

One card, two hosts, files pinned by hash, one setting per boot, and a rule that a setting is real only when the picture changes. That discipline cost a lot of reboots and produced fewer numbers than a naive sweep would have — and every number it did produce can be traced to the exact binary, driver and frame it came from. The card's own benchmark page renders those rows with their host on each one, and the site's methodology lists the Retro Lab as a named source.

Citations and sources

  • https://nscagentstorage.blob.core.windows.net/article-images/voodoo5-6000-strange-god/dataset/host2-124-versions.json — the exact software under test on host 2, by size and MD5 (accessed 2026-09-16)
  • https://nscagentstorage.blob.core.windows.net/article-images/voodoo5-6000-strange-god/dataset/host2-124-results.csv — every host 2 row with its renderer string and versions (accessed 2026-09-16)
  • https://nscagentstorage.blob.core.windows.net/article-images/voodoo5-6000-strange-god/dataset/campaign-dossier.md — method, retractions and status (accessed 2026-09-16)
  • https://nscagentstorage.blob.core.windows.net/article-images/voodoo5-6000-strange-god/dataset/fsaa-evidence-README.md — what each evidence frame proves, and the edge metric (accessed 2026-09-16)
  • https://www.voodooalert.de/board/forum/index.php?thread/9135-amigamerlin-3-1-r11-erschienen/ — AmigaMerlin 3.1 R11 release discussion (accessed 2026-09-16)
  • https://www.philscomputerlab.com/drivers-for-voodoo-5.html — Voodoo 5 driver options on Windows XP (accessed 2026-09-16)

This is a first-party lab report: the measurements above were taken by the SpecPicks Retro Lab on its own hardware. The full dataset, method, driver and game file hashes, evidence frames and every correction are published at https://nscagentstorage.blob.core.windows.net/article-images/voodoo5-6000-strange-god/dataset/campaign-dossier.md. It is not editorial synthesis of third-party sources.

— SpecPicks Retro Lab · Last verified Sep 16, 2026

Products mentioned in this article

Live Amazon & eBay pricing, plus full specs and alternatives on each product page.

As an Amazon Associate, SpecPicks earns from qualifying purchases; we also earn on qualifying eBay purchases via the eBay Partner Network. Prices shown were last tracked at crawl time and may vary — check the listing for the current price.

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 5" Live listings →

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

Frequently asked questions

What does "cfg 2" mean in the Voodoo 5 6000 benchmark tables?
It is the value 2 written to the registry string SSTH3_SLI_AA_CONFIGURATION under the display adapter's Glide settings — the single setting through which AmigaMerlin 3.1-R11 selects both the chip topology and the anti-aliasing mode. The 3dfx Tools control panel labels that value "Dual Chip, Fastest Performance". The series prints the driver's label in quotes because the measurements contradict it: that setting reached 3.47 times the "Single Chip Only" figure at 1600×1200 and beat the "Quad Chip" setting at every resolution, so the label cannot be taken as a description of how many VSA-100s were working.
Why does the series refuse to compare the two host machines?
Because the same card, the same driver files and the same setting produced 150.2 fps at 640×480 on host 1 and 122.8 and then 108.1 fps on host 2. Nothing about the card changed between those numbers; the machine did — 511 MB against 255 MB of RAM, different boards, a CPU whose clock the failing BIOS reported inconsistently. A cross-host comparison would measure the hosts, not the card, so host 1's four verified cells sit in their own table and are never subtracted from host 2's ladders. Only within-host comparisons appear in this series.
How do you know which driver actually rendered a Quake III frame?
Every row carries the renderer string parsed from the engine's own log, and for every Quake III run in this series it reads Mesa Glide v0.63 Voodoo5 6000 (tm), with GL_VENDOR Brian Paul and GL_VERSION 1.2 Mesa 6.3. Quake III was launched with r_glDriver set to 3dfxogl, so it loaded AmigaMerlin's ICD by name rather than whatever opengl32.dll happened to resolve. The ICD file itself is recorded by size and MD5 on the row, as are the Glide library, the display driver, the miniport and the game executable, so a later run on different files cannot be mistaken for this one.
Why was only one driver setting tested per boot?
Because writing SSTH3_SLI_AA_CONFIGURATION more than once within a single boot, and sometimes simply creating a second Glide context after one write, wedged the AmigaMerlin display driver: the game window opened, the renderer never identified itself, and the machine either lost its remote agent or sat frozen with the game on screen. A reboot is the only reliable reset, so each setting gets a clean boot, a read-back, a Glide initialisation probe, and then its runs. Resolutions are cycled freely within that boot, because a resolution change does not touch the topology and five resolutions ran back to back without incident.
Why are the screenshots taken by the games instead of the remote agent?
The agent's screen capture works for most fullscreen Windows XP titles but not for a Glide exclusive-fullscreen surface — what it returned for Unreal Tournament was dark noise, because the 3dfx board renders into its own framebuffer and the GDI copy is not what was scanned out. Judging anti-aliasing from a resampled or wrong-buffer capture would look like evidence and not be any. So Quake III frames come from its own screenshotJPEG command on a fixed, deterministic demo frame, and Unreal Tournament frames come from its own Shot command, triggered by a synthetic F11 press that Unreal Engine 1 accepts in fullscreen and id Tech 3 does not.

Sources

— Mike Perry · Last verified 2026-09-16

More guides & deep dives from the SpecPicks archive

Browse all articles & guides →

More buying guides from SpecPicks

Browse all buying guides →

Hardware benchmark data on SpecPicks

All benchmarks →