VOGONS


First post, by SSTV2

User metadata
Rank Oldbie
Rank
Oldbie

Greetings,

I’ve decided to post here my observations while troubleshooting a bricked Voodoo2 card, in this case, it was missing two EDO memory ICs, which were removed by previous owner.

When I got this card, few years ago, it was in a pretty bad shape, missing metal bracket, few SMDs and detached/shorted pins on FBI chip. Before inserting this card into PC, I’ve thoroughly inspected it and eliminated mentioned defects. To my surprise card was detected and I was able to install drivers, but whenever I’ve tried to run any glide/d3d application, it just kept hanging and I was getting either “glide2x.dll expected voodoo^2 none detected” or “memmap driver initialization failure” error messages. I knew that these errors were related either to FBI or missing memory ICs, so I began testing this voodoo by applying different environment variables in registry or by creating specific batch files: limited TMU memory to 2 MB, disabled 1 or both TMUs, disabled texturing, etc.

Tried basically everything that was possible in various combinations, but applications kept hanging and I was not getting any noticeable results from these settings until… recently I’ve found out that it is possible to LOG Voodoo’s while application is being loaded with “SSTV2_INITDEBUG_FILE” env. variable.

After logging the bricked Voodoo, I’ve noticed that it stops generating log right after initializing TREX registers and resetting TMUs. After discovering this, I’ve disabled registers initialization with “SST_IGNORE_INIT_REGISTERS” env. variable. Well, results were the same (apps hanging) which is normal as disabling registers initialization would cause even fully functional Voodoo to stop working.

At that moment I thought that this voodoo was a complete goner, until I reset PC and when it completely loaded, I got a weird error message which was caused by loading Voodoo2 control panel (it never loaded before, just kept hanging like any other related app!) it was something new, obviously, so I decided to run NFS2 SE with textures disabled, init. regs. enabled again and it LOADED w/o hanging 😀, though menu was pitch black, but I could hear menu sounds and could start race, at which UI was visible! Couldn’t believe my eyes… I still don’t get why it began working after disabling and re enabling init. registers.

Then the testing with different env. variables began again…

Bricked Voodoo2, A-Trend Helios 3D:
dUkk3aSh.jpg?1

Close up of the damage:
s7e7TkKh.jpg?1

I did some testing using 3Dfx tech demo “Donut” trying to figure out which TMU is being disabled by “SSTV2_NUM_TMUS” env. variable.

Results:

SSTV2_TEXMAP_DISABLE=0

1TMU – causes hanging;
2TMU – causes hanging;
0TMU – causes hanging.

SSTV2_TEXMAP_DISABLE=1

1TMU – runs;
2TMU – runs;
0TMU – runs, but just intro screen, then hangs.

Doing these tests I’ve concluded that:

- Both TMUs are functional (can switch them off and on, it affects FPS and surface lightning).
- FBI with its memory are fully functional (no broken/corrupted wireframes).

Screenshots:

Driver demo, bricked Voodoo2, textures disabled:
EGZHbJcl.png

Good Voodoo2, textures disabled:
P118QbVl.png

Good Voodoo2, textures enabled:
UkY4DpNl.png

Donut tech demo, bricked Voodoo2, textures disabled, 2TMU, background off:
sbWra7Cl.png

Good Voodoo2, textures disabled, 2TMU, background on:
WJzoVWIl.png

Analyzing logs and card itself, I tried to figure out which TMU is primary (TMU[0]) and which is secondary (TMU[1]) on the card, as I have another Voodoo2 which produces corrupted textures while both TMUs are active. Disabling one TMU on it, textures are displayed as it should be (limiting TMU memory to 2 MB doesn’t help). Knowing which TMU is which, it would be possible to locate memory bank or TMU that is causing texture corruption (if anyone knows it, please reply here).

I’ve also analyzed memory configuration on both TMUs, it appears that each memory IC has it’s own address bus, so none of the ICs share same address lines in the same bank (while other EDO graphics cards or SIMM 72 module memory ICs do use same address lines). Also, each TMU has two memory banks connected to them, which are being controlled by two separate RAS lines. Memory ICs are electrically stacked on each other, only RAS lines separate them.

I’ve come up with two ideas on how I could “fix” and test this card at the moment:

1. Socket two ~40ns EDO ram ICs (I don’t have any faster laying around) into SOJ sockets and solder them to the PCB contacts via wires using dead-bug method and declock card.
2. Connect BANK0 (damaged) RAS line to the BANK1 (on the back side), converting it into 8 MB version.

The latter one seems way easier, I’ll try it first 😀

Last edited by SSTV2 on 2017-01-23, 15:44. Edited 1 time in total.

Reply 1 of 5, by SSTV2

User metadata
Rank Oldbie
Rank
Oldbie

Update:

Both tries to fix card (connecting RAS0 to BANK1 and soldering memory ICs) didn't work at all, card still keeps hanging when texturing is enabled... looks like that missing memory ICs has NOTHING to do with this problem (used exact same memory, just 35ns).

Last edited by SSTV2 on 2018-06-28, 13:34. Edited 1 time in total.

Reply 3 of 5, by SSTV2

User metadata
Rank Oldbie
Rank
Oldbie

Checked all traces, SMD caps/resistors on that bricked card, even applied slight pressure with a sharp needle on each major ICs pin just to see whether they are soldered properly, couldn't find anything suspicious.

Any advices on how I could test that card or diagnose faulty components? Maybe somebody had a Voodoo with same symptoms and knows what action/event caused it?

Going to put this card away for two more years (probably), would appreciate ANY info here.

I'll be checking this thread from time to time.

Reply 5 of 5, by SSTV2

User metadata
Rank Oldbie
Rank
Oldbie

Does anybody know how would a Voodoo2 behave if at least 1 DRAM would be completely dead/removed in a BANK0 of TMU[0]? Source code of glide2x.dll has EDO DRAM data and address lines configurations defined for each TREX initialization. I'm beginning to think that in my case Voodoo keeps hanging when it simply can't pass memory check routines, any thoughts?

Here is the fragment from sst1init.h:

/*----------------- SST trexInit0 bits -----------------------*/
#define SST_EN_TEX_MEM_REFRESH BIT(0)
#define SST_TEX_MEM_REFRESH_SHIFT 1
#define SST_TEX_MEM_REFRESH (0x1FF<<SST_TEX_MEM_REFRESH_SHIFT)
#define SST_TEX_MEM_PAGE_SIZE_SHIFT 10
#define SST_TEX_MEM_PAGE_SIZE_8BITS (0x0<<SST_TEX_MEM_PAGE_SIZE_SHIFT)
#define SST_TEX_MEM_PAGE_SIZE_9BITS (0x1<<SST_TEX_MEM_PAGE_SIZE_SHIFT)
#define SST_TEX_MEM_PAGE_SIZE_10BITS (0x2<<SST_TEX_MEM_PAGE_SIZE_SHIFT)
#define SST_TEX_MEM_SECOND_RAS_BIT_SHIFT 12
#define SST_TEX_MEM_SECOND_RAS_BIT_BIT17 (0x0<<SST_TEX_MEM_SECOND_RAS_BIT_SHIFT)
#define SST_TEX_MEM_SECOND_RAS_BIT_BIT18 (0x1<<SST_TEX_MEM_SECOND_RAS_BIT_SHIFT)
#define SST_EN_TEX_MEM_SECOND_RAS BIT(14)
#define SST_TEX_MEM_TYPE_SHIFT 15
#define SST_TEX_MEM_TYPE_EDO (0x0<<SST_TEX_MEM_TYPE_SHIFT)
#define SST_TEX_MEM_TYPE_SYNC (0x1<<SST_TEX_MEM_TYPE_SHIFT)
#define SST_TEX_MEM_DATA_SIZE_16BIT 0x0
#define SST_TEX_MEM_DATA_SIZE_8BIT BIT(18)
#define SST_TEX_MEM_DO_EXTRA_CAS BIT(19)
#define SST_TEX_MEM2 BIT(20)

#define SST_TREXINIT0_DEFAULT \
( (SST_EN_TEX_MEM_REFRESH) \
| (0x020 << SST_TEX_MEM_REFRESH_SHIFT) \
| (SST_TEX_MEM_PAGE_SIZE_9BITS) \
| (SST_TEX_MEM_SECOND_RAS_BIT_BIT18) \
| (SST_EN_TEX_MEM_SECOND_RAS) \
| (SST_TEX_MEM_TYPE_EDO) \
| (SST_TEX_MEM_DATA_SIZE_16BIT) \
| (0 & SST_TEX_MEM_DO_EXTRA_CAS) \
| (0 & SST_TEX_MEM2) )

#define SST_TREX0INIT0_DEFAULT SST_TREXINIT0_DEFAULT
#define SST_TREX1INIT0_DEFAULT SST_TREXINIT0_DEFAULT
#define SST_TREX2INIT0_DEFAULT SST_TREXINIT0_DEFAULT