VOGONS


First post, by lemonlime

User metadata
Rank Newbie
Rank
Newbie

Hi All,

I picked up this Diamond Monster 3D II (8MB Voodoo 2) a while back and it turned out to be defective. It was sold as-is untested for a good price, so not too surprising. The card is actually in beautiful condition and very clean. No missing SMD components, no trace damage or scratches and I spent some time inspecting the TMUs and FB chip under a microscope and all pins appear solid. I may double check this again just to be sure.

It looks like it's a pretty early Rev. A version of the card and even has a bodge resistor near the PCI connector (seems to be normal for these). Here are some pictures of the card:

img_8045.jpg
img_8046.jpg
img_8048.jpg
img_8047.jpg

The card is detected fine as a PCI device and the drivers install without issue In Windows 98. At boot, I see the dreaded "_GlideInitEnvironment: glide2x.dll expected Voodoo^2, none detected." message. Going to the Voodoo 2 tab in the display properties page causes it to hang.

I did some diagnostics with the Glide 2.x DOS utilities. I had the following system environment variables set in autoexec.bat:

@ECHO 3Dfx Environment Variables:
set SST_INITDEBUG=1
set SSTV2_INITDEBUG=1
set SST_INITDEBUG_FILE=c:\3dfx\sst1_3dfx.log
set SSTV2_INITDEBUG_FILE=c:\3dfx\sst2_3dfx.log
set SST_DEBUGDAC=1
set SSTV2_DEBUGDAC=1
REM set SST_INITDEBUG_FILE=CON
REM set SSTV2_INITDEBUG_FILE=CON

Running the MOJO.EXE application gives some interesting results:

DPMI: In DpmiHookFxMemmap, addr=e9000000, size=01000000
DPMI: Loading fxmemmap.vxd
DPMI: mapping e9000000 size 01000000
VoodooMEssage: pSST: 0x0 data0: 0x0 data1: 0xe9000001 fn: 0x1000000
DPMI: VoodooMessage: NULL ptr
Finally: 00000000
Info for Voodoo board # 0:
=====================================================
Virtual Base Address: 0xe9000000
Physical Base Address: 0xe9000008
PCI Device Number: 0x9
Vendor ID: 0x121a
Device ID: 0x2
FBI Revision: 2
FBI Memory: 4 MB
FBI PowerOn Sense: 0x2
TMU PowerOn Sense: 0x8d1
FBI DAC Output Color Format: 24BPP
Scan-Line Interleaved? No
TMU Revision: 1
Number TMUs: 2
TMU 0 RAM: 2 MB
TMU 1 RAM: 0 MB <<<<<<<<<<<<<
DpmiUnmapMemory
DpmiUnmapMemory

The FB is detected with 4MB of memory, and both TMUs are also detected. TMU0 shows the correct 2MB of texture memory, but TMU1 shows 0MB.

In the debug log, I see the following, which makes sense:

sst1Init Routines: InitCode $Revision: 8 $
sst1InitMapBoard(): BoardsInSystem = 1
sst1InitMapBoard(): vAddr:0xe9000000 pAddr:0xe9000008 Dev:0x9 Board:0
sst1InitRegisters(): Setting TREX-to-FBI FIFO THRESHOLD to 0x8...
sst1InitRegisters(): Setting PRELIM FT-CLK delay to 0x8...
sst1InitDacDetect(): Entered...
sst1InitDacDetectICS(): Entered...
dacWr(0x7,0xb)
dacRd(0x5,0x79)
dacRd(0x5,0x2e)
dacWr(0x7,0x1)
dacRd(0x5,0x55)
dacRd(0x5,0x49)
dacWr(0x7,0x7)
dacRd(0x5,0x71)
dacRd(0x5,0x29)
sst1InitDacDetectICS(): Exiting...
sst1InitRegisters(): Storing TREX0INIT0=0x5441
sst1InitRegisters(): Storing TREX0INIT1=0xf420
sst1InitRegisters(): Storing TREX1INIT0=0x5441
sst1InitRegisters(): Storing TREX1INIT1=0xf420
sst1InitRegisters(): Storing TREX2INIT0=0x5441
sst1InitRegisters(): Storing TREX2INIT1=0xf420
sst1InitSetGrxClk(): Entered...
dacWr(0x7,0xe)
dacRd(0x5,0x0)
dacWr(0x4,0xa)
dacWr(0x5,0x7b)
dacWr(0x5,0x6c)
dacWr(0x4,0xe)
dacWr(0x5,0x0)
sst1InitSetGrxClk(): Resetting TMUs after clock change...
sst1InitRegisters(): Setting up FAST DRAM Configuration
sst1InitGetTmuMemory() ERROR: Could not detect memory size.
sst1InitFillDeviceInfo(): Retry #1 for chip GetInfo()...
sst1InitGetTmuMemory() ERROR: Could not detect memory size.
sst1InitFillDeviceInfo(): Retry #2 for chip GetInfo()...
sst1InitGetTmuMemory() ERROR: Could not detect memory size.
sst1InitFillDeviceInfo(): Retry #3 for chip GetInfo()...
sst1InitGetTmuMemory() ERROR: Could not detect memory size.
sst1InitFillDeviceInfo(): Retry #4 for chip GetInfo()...
sst1InitGetTmuMemory() ERROR: Could not detect memory size.
sst1InitRegisters(): ERROR filling DeviceInfo...
sst1InitShutdown(): Shutting down SST-1 #0...
sst1InitSetGrxClk(): Entered...
dacWr(0x7,0xe)
dacRd(0x5,0x0)
dacWr(0x4,0xa)
dacWr(0x5,0x41)
dacWr(0x5,0x62)
dacWr(0x4,0xe)
dacWr(0x5,0x0)
sst1InitShutdown(): Returning with status 1...

After five attempts to detect the TMU memory size, it gives up. If I try to run the Tomb Raider 3dfx demo in DOS, I just get a black screen and the system hangs. I tried to disable texuring to see if it would work, but the same issue persists. I tested with a working V2 card to make sure the environment variable actually did anything, and it does indeed work:

set SSTV2_TEXMAP_DISABLE=1
set SST_TEXMAP_DISABLE=1 <<< this one works in tomb raider with a working V2 card

But looking at the debug output, it seems that initialization fails even though the issue appears to be TMU related, so maybe its normal to have a system hang in this case.. not sure. I also tried limiting the FB memory size to 2MB, but there was no change.

set SSTV2_FBI_MEMSIZE=2

Whatever the problem is, it appears to be related to TMU1. None of the memory chips get hotter than the others and the TMUs and FB are warm to the touch.

I'm assuming the TMU near the slot bracket is TMU0 and the one to the right is TMU1, but really not sure. Does anyone know for sure? I was thinking of giving TMU1 a reflow again just for good measure, and if it doesn't correct it, to replace all four memory chips on that TMU. I have a bunch of NOS 25ns EDO chips that I can use for that if necessary.

Any other ideas or tips?

Thanks.

Also known as vswitchzero. Check out my YouTube channel: https://www.youtube.com/c/vswitchzero

Reply 1 of 3, by chuky

User metadata
Rank Newbie
Rank
Newbie

There's a blue resistor on the left part of the card, between the dac and the middle 3dfx chip. It's probably not an original part but I don't know what it's for.

I have bought a broken Creative 3dfx 2 with kind of similar errors, mine says TMU 0 Ram = 0 Mb and stops there, and the log gives a different issue. Just one thing that might be interesting with my card and may be the same as you, about the black screen when starting Tomb Raider is the screen actually gets no signal. It happens when the video should display the intro video which is rendered by the primary card, not by the 3dfx. The game hangs but if I unplug the passthrough cable and plug the monitor cable on the primary card, it displays the frozen video, the logo. So the 2d is not passed through the 3dfx card. On another card I have, the issue was after the intro video.

Reply 2 of 3, by lemonlime

User metadata
Rank Newbie
Rank
Newbie
chuky wrote on 2022-12-16, 19:43:

There's a blue resistor on the left part of the card, between the dac and the middle 3dfx chip. It's probably not an original part but I don't know what it's for.

I have bought a broken Creative 3dfx 2 with kind of similar errors, mine says TMU 0 Ram = 0 Mb and stops there, and the log gives a different issue. Just one thing that might be interesting with my card and may be the same as you, about the black screen when starting Tomb Raider is the screen actually gets no signal. It happens when the video should display the intro video which is rendered by the primary card, not by the 3dfx. The game hangs but if I unplug the passthrough cable and plug the monitor cable on the primary card, it displays the frozen video, the logo. So the 2d is not passed through the 3dfx card. On another card I have, the issue was after the intro video.

Thanks for your reply! Yeah, it definitely looks out of place. Because this is a pretty early V2 revision, it seems Diamond added it as a bodge. Looking around online, I see other Rev A cards with the same resistor in that spot. It attaches to a zero ohm resistor on one side and I measure 300ohms across the rest of it.

That's really interesting about the Tomb Raider intro. I get no display signal to the monitor after I run it as well. If I attach the monitor to the 2D card at that point, I actually see the intro screen in Tomb Raider and the game runs in software mode. Passthrough video is broken at that point (assuming because the card is completely locked up). Rebooting the system causes passthrough to work again. I'm assuming Tomb Raider goes into software rendering mode because the V2 fails to initialize and it assumes there isn't one in the system or something.

I've made a bit of progress. It appears that the two TMUs are labeled U8 and U9 in the technical drawings. You'd think TMU0 was the one to the left by the VGA ports, but it's actually the opposite it seems (at least on the reference design). TMU1 is the one on the left (U8) and TMU0 is the one on the right (U9). I've narrowed my efforts down to that area of the card and doing some tracing.

Also known as vswitchzero. Check out my YouTube channel: https://www.youtube.com/c/vswitchzero

Reply 3 of 3, by lemonlime

User metadata
Rank Newbie
Rank
Newbie

Well, after doing a ton of probing, I think I may have found the issue! Big thanks to @maryoosh_k on twitter for the suggestion of checking all the RNs.

One of the very last resistor networks I checked at the rear of the card appears to be bad! I measure >1M ohms across those two points in the below image. All others are fine at 22ohms.

pica0091.jpg

After tracing those two sides, I can see it is a connection between the FB chip, and TMU1 (the one detecting 0MB). I'll try to solder a quick 22ohm bodge between the two pads and see if the card starts working 😀

Also known as vswitchzero. Check out my YouTube channel: https://www.youtube.com/c/vswitchzero