PCI Voodoo

A while ago I tried to set up Voodoo 2 SLI on an old Pentium system running Windows 98 SE. I used two seemingly identical Creative CT6670 boards (Voodoo 2, 12 MB RAM) which should have worked just fine. But didn’t—SLI wasn’t detected, and strangely, one of the boards seemed to not have Creative Voodoo 2 drivers loaded.

When I looked more closely (with the Win98 system information utility), I realized that one of the boards was recognized as a Voodoo 1 based on its PCI ID. How is that possible?

I wish I knew. After moving the troublemaking CT6670 to a completely different motherboard, I observed the same behavior, and pinned it down a bit more. When the system is first powered up, the CT6670 reports itself as a Voodoo 2, with PCI ID 121A:0002. When the system is rebooted (Ctrl-Alt-Del, Windows-initiated reboot), the PCI ID changes to 121A:0001. That’s Voodoo 1. When the system is power cycled or hard reset is applied, the PCI ID changes back to 121A:0002.

Obviously that is some weird voodoo. Especially because the Voodoo 2 datasheet claims that the PCI vendor/device ID is hardwired and cannot be changed at all!

If the PCI ID was strapped somehow, or read from an EPROM, such behavior might be explained. But since it’s supposed to be hardcoded, I can’t even begin to guess why this is happening.

There’s no obvious damage to the PCB or chips. If someone has a plausible theory that could explain this behavior (or even better, how to fix it), I’d love to hear it.

Update: The behavior depends on the amount of time the reset signal is active. A soft reset holds the reset signal for a very short time and consistently ends up with the wrong PCI device ID. A hard reset usually delivers the right ID, provided the reset button is depressed for perhaps half a second or longer. If the reset button is just lightly touched, the behavior is the same as with soft reset.

So that (length of time the reset signal is active) explains why hard vs. soft reset behaves differently. It doesn’t explain what’s really going on.

This entry was posted in 3Dfx, PCI. Bookmark the permalink.

29 Responses to PCI Voodoo

  1. zeurkous says:

    What did you expect from a product with such a name, anyway?

  2. Gabucino says:

    I have one Voodoo 1 and a Voodoo 2 board which randomly changes their PCI ID (I think one number). I don’t know why but I consider them dead and that’s that.

  3. Michal Necasek says:

    I expected magic! Not some sort of black sorcery…

  4. Michal Necasek says:

    I wonder if it’s really random. In my case, it’s definitely not.

    I have seen multiple suggestions that at least some Voodoo cards are susceptible to thermal damage, so maybe that’s what happened to mine.

  5. zeurkous says:

    Is, perhaps, the probing done through the PCI BIOS? Such calls can, after all, be intercepted, can’t they?

    Furthermore, one could argue that the contents of a PROM are hardwired. To be honest, I think that the documentation is not quite telling the full story…

    …not an unfamiliar situation.

  6. Michal Necasek says:

    The same behavior occurs in DOS and Windows 98. It’s also visible in the PCI device list shown during POST on some boards, and that can’t really be intercepted. Software may or may not use the PCI BIOS, it’s not that hard to use the PCI configuration mechanism 1/2 directly.

    I agree that the documentation isn’t telling the whole story. Most likely the ID is read from some kind of (P)ROM and that’s why it can change at all. I suppose I should check and make sure the ID really isn’t writable 🙂

    The documentation probably isn’t “wrong” but it describes the intended behavior, not actual implementation — which of course should not matter…

  7. zeurkous says:

    That’s wrong enough for me :^)

  8. rasz_pl says:

    there are no external eproms on this card, no microcontroller
    maybe 500-0009-01 has integrated eeprom and its failing, or uses strap resistors and one of them has a cold joint, oxidation on one of pci pins? .. hmm that still wouldnt explain weird reset behaviour, failing soft reset circuit would if internally 3dfx has some sort of a processor (later GPUs all have one, no clue how 3dfx handles things). Usually reset circuits have external caps, smd caps go bad sometimes. all a guessing game 🙁

    does the card work ok after cold boot?

    when fixing stuff I often do finger test – push components with my finger while stuff is running to test for intermittent joints (works great for finding bga chips with oxidized ball for example)

  9. Michal Necasek says:

    Yes. Apart from Chuck + Bruce + Bruce + DAC and RAM, there’s almost nothing on the board. I don’t think these chips have a CPU, it’s all fixed-function relatively simple stuff. AFAIK there’s no microcode or anything much like that.

    Yes, the card works OK after cold boot. Hard reset (pushing the reset button) makes the PCI ID go back to what it should be. That actually makes me wonder what the difference is between hard and soft reset from the card’s perspective. As far as I know, the PCI bus gets a reset either way, so maybe the difference is that the soft reset holds the device in reset state for much shorter time? Still doesn’t explain *why* this should happen.

    Thanks for the finger test tip. Although in this case the soldering looks fine, and the card doesn’t look like it suffered any physical mishandling. But of course SMD is a b*tch and it’s easy to knock components off without visual damage.

  10. Michal Necasek says:

    Okay, my guess was right — the length of reset makes the difference. If I just tickle the reset button, it behaves like warm boot (wrong PCI ID). If I hold it for half a second or longer, I get the right PCI ID.

  11. zeurkous says:

    Makes me figure that mobo manfacturers don’t like to spend a couple on cents on decoupling the reset logic from the button signal (to ensure a decent duration).

    PC’s *sigh*.

  12. zeurkous says:

    of cents*

  13. Devon R says:

    I’ve always presumed the Creative voodoo 2s to be the most problematic and lowest quality of the bunch. One fellow was complaining that the picture degradation was quite severe (and it was on a creative model), but I’ve never experienced that on my Diamond ones.

    Furthermore, some games are driver sensitive and only respond to drivers of certain Voodoo2 releases (i.e. the original voodoo 2 monster driver package). Pretty irritating.

  14. Michal Necasek says:

    The Creative Voodoo 2 boards were also the first, and mine are the old revision. That could easily have to do something with it as well.

  15. zeurkous says:

    Perhaps, but whatever the case, IME, “Creative(tm)”, “most problematic”, and “lowest quality” aren’t exactly mutually exclusive…

  16. Michal Necasek says:

    Agreed. I think quality-wise Creative products were all over the board. Everything from well built to junk.

    With the Voodoo 2 boards, I don’t know how much to blame Creative and how much 3Dfx. It’s not like there was a lot of added value from Creative.

  17. zeurkous says:

    Given the lossage you discovered, perhaps “subtracted value” would be a better term :^)

  18. zeurkous says:

    Sorry, it seems that I just can’t resist poking and prodding at shoddy stuff…

  19. rasz_pl says:

    reset on PCI is not connected straight to button pins, it is latched for debouncing and driven by a state machine. Min reset time when clock is running is 100 uS.

    I doubt you could trigger slower reset by hand even if somehow your board was wired straight thru. This leaves the card as a main suspect. Since its a timing problem I would suspect caps. reset on pci is pins 15. I looked at the pictures of this and all other 3dfx cards at http://hw-museum.cz/collection-vga.php?type=3dfx
    and Gainward Dragon 3000 was the only card where that signal didnt end in blind via into inner layers, it ended at pin 11 of 500-0009-01. Check it with multimeter to be sure. There are two small smd caps strapped to 3.3V nearby, maybe maaaaybe one of them is used for soft reset timing and is faulty. One of them probably connects to pin 10 or pin 12. There might also by oxidation on pin 11, or on pci edge connector.

    ps: interestingly enough voodoo 1 and Rush (oh what a fail that was :P) have much simpler pcbs and reset clearly goes to 7404 inverter, its like they forgot PCI reset signal is inverted during asic development?.

    ps: I seem to remember from 3DFX founders interview
    there was an individual? or even a group in Europe reverse engineering old 3DFX cards, interested in building new stuff with old stock chips 😮 @2:11 in the clip 🙂

  20. Michal Necasek says:

    Based on contemporary literature, the Creative Voodoo 2 was unmodified 3Dfx reference design. That’s why it looks so much like other Voodoo 2 boards. So unless the Singaporean factory screwed something up in manufacturing, it’s really all 3Dfx’s fault.

  21. Michal Necasek says:

    Thanks for the hints. It’s a bummer that there is no pinout documentation. BTW 500-0009-01 is Chuck (‘CK’) aka FBI, or Frame Buffer Interface.

    I wonder if they forgot the reset polarity or weren’t originally designing for PCI. After all it started out as an arcade game chip.

    Anyway… I can confirm that the PCI reset pin is connected to pin 11 of the FBI chip. I haven’t been able to trace the connection because it goes through some middle layer. There does seem to be a connection to the nearby C6/C7/C8 caps as well, but again the traces vanish inside the PCB. Those caps visually look good, but I can’t verify they really work.

    Looking at the board I noticed that in a corner on the reverse side, C118 is loose. It’s next to a memory module and I have no idea if it could have any bearing on the reset problem. I have not yet tried soldering the cap back on.

  22. zeurkous says:

    Fine enough. I suppose I shouldn’t have given Creative that much flak.

  23. rasz_pl says:

    yay me for getting pin 11 right.
    What equipment can you get your hand on? any hackerspaces nearby? hotair and some eye amplification would be handy

    some capacitor facts:
    They have well defined limited lifespan. There is no if, only when.
    They fail often, and rarely in a visually identifiable way. Loss of capacity, rising ESR, dead shorts or hairline cracks.

    Easiest and fastest would be swapping C6/C7/C8 from working card with hotair.
    c118 is decoupling, important, but non critical. I would go over all caps (well, most, at least around fbi) with hotair to reflow solder and check for cracks – cap can look fine until you melt solder and poke it with tweezers revealing it was cracked in half.

  24. zeurkous says:

    Makes one appreciate how ingenious they are, compared to, say, resistors, or even many semiconductor devices…

  25. Michal Necasek says:

    No hackerspace I know of. I don’t have hotair, only a soldering iron with fine tips. And a magnifying glass.

    The problem with caps is that not only do they fail, as far as I know it’s next to impossible to detect that without removing the capacitor.

    Anyway, I had another look at the board and discovered that it’s also entirely missing another SMD capacitor, C72. That’s under one of the Bruce/TMU chips. No idea if that might have any bearing on the reset behavior. That one is just gone… sadly a too common occurrence with SMD components. It’s also not very obvious unless one really looks for it. In my archive I happen to have a photo of this card from five years ago and the damaged/missing caps are already visible.

    The C6/7/8 caps visually look good but I realize that a hairline crack or a cold joint wouldn’t be very visible.

    Tangentially related question: What are SMD components labeled ‘FB’ (seen on the Voodoo 2) or ‘FL’ (seen on Roland PC audio equipment)?

  26. rasz_pl says:

    fb – ferrite bead, inductor, also often called filter.
    In big simplification capacitors pass AC and block DC, inductors do the opposite. Here on the graphic card they are part of a filtering circuit, used to suppress harmonics by blocking frequencies above DACs 100 something MHz, basically keeping PC in FCC specs and preventing from interferences with TV/Radio. I remember removing them in early nineties from cheap S3 cards to bump picture quality at high resolutions (when 1024x was high). ATI, and later Matrox, had the best filtering at the time hence sharpest signal, cheap s3 cards were total bottom of the barrel, Nvidia wasnt much better for a long time in early 200x.
    quick google gives this vogons thread http://www.vogons.org/viewtopic.php?f=46&t=46606
    hah, I didnt know ATI integrated filters into ramdac/gpu

    Contrary to intuition fine tips are bad for small smd, especially if you aim to desolder components. Fine tips have bad thermal capacity, and I dont expect you to have decent soldering gear. Easiest technique is big tip loaded with a blob of solder – soak whole component and lift, bang on a desk to remove. here is how it looks: https://www.youtube.com/watch?v=NKXzm_fkja4
    I highly recommend Louis channel if you are interested in repairs/electronics.

    you can test capacitors in circuit, both for shorts and esr (capacity to a lesser degree as rest of the circuit will interfere). I dont suspect shorts on bypassing caps, those usually end in hardware not powering up or burn marks :). anyway its easier to replace than test.

    btw: Thank you for this blog. Iv been binge reading all posts, up to August 2014 now 🙂

  27. GotNoTime says:

    FB = Ferrite bead e.g. Vishay SMD ferrite beads (http://www.vishay.com/inductors/smd-ferrite/)
    FL = Filter. Looking at a Roland PCB, some of them look to be just a piece of wire with two ferrite beads.

  28. Michal Necasek says:

    As you can tell, I’m a software guy… I prefer the hardware to be a black box that works as specified 🙂

    S3 cards were interesting because there was no such thing as an ‘S3 card’, just a bunch of OEMs using S3 chips. ATI back then built all the cards themselves (with so few exceptions that they’re not worth mentioning), and so did Matrox. It’s clearly visible when plugging a modern LCD into a 1990s card, the cheap ones have a very fuzzy image. Something like a S3-based ELSA is much better, ATIs and Matroxes are pretty consistently good.

    Same problem with Nvidia later… they just sold chips and the OEMs butchered them to their liking. I think since the early 2000s there have been no custom OEM designs to speak of, it’s all the chip manufacturers’ reference designs with minor tweaks here and there. The OEMs simply can’t afford to maintain custom drivers anymore, like they did in the 1990s, and I don’t know if they even have the know-how to modify the hardware in the first place.

    I also have some flat soldering tips which could be better for this? TBH I never messed with SMD, I normally use a soldering iron for stuff like desoldering leaky batteries from 386 boards or replacing the occasional through-hole mounted capacitor.

    From what I recall the problem with caps is that it’s possible to tell for sure that it’s bad without removing, but not verify that it’s really good. And if you have to remove it then yeah, might as well replace it with a known good one. Speaking of which, how does one tell the parameters of SMD capacitors? Or are they somehow standardized? Basically how do I find a replacement if I don’t have an obvious donor device?

    Glad you like the blog!

  29. rasz_pl says:

    as long as its bigger than the cap so you can desolder both ends with one move, unless you have two soldering irons

    you would need a capacitance meter. those small ceramic caps can have ridiculous tolerances like +-50%, plus bypass cap values are less important

    I would start by finding some broken crap like old hard drive, lift similar size parts from that to fill in missing bypass capacitors, then test, it might be that simple
    then try swapping c6/7/8 from working card
    then you might try going over all the caps around/under FBI fixing/reflowing solder.
    then go over all the small smd parts on whole board as a last resort, this would be tons easier with hotair and good flux.

Leave a Reply

Your email address will not be published. Required fields are marked *