I recently acquired a Cirrus Logic CL-GD5429 VLB VGA card, but it's not working properly. It either gives no video output at all, or when it does the display is corrupted. It also appears not to be allowing the system to fully POST; I tried with a random Hercules clone card and the board apparently POSTs successfully with that (I say apparently, because I have no appropriate monitor to hook up and so I can't see what's happening).
The attachment gd5429-corrupt-display-1.jpg is no longer available
The attachment gd5429-corrupt-display-2.jpg is no longer available
Things I've done so far:
Checked the output signals at the VGA connector with an oscilloscope, and they seem okay. R/G/B pins show activity (and seem to be the expected 0.7V, but I forgot to note the exact level), HSync is 31.5 kHz, and VSync is 70 Hz (both 5V). This I believe corresponds to what is expected for 720x400@70Hz.
Checked with a POST analyser card. The system gets stuck at one of 0x2C26 or 0x2C2A when no output, and 0x4036 or 0x403A with corrupted output. It's an AMI BIOS.
Noticed some light scratches on the back of the card, but on closer inspection they appear only in the solder mask. Just in case, I beeped out continuity between pins/vias that those traces connect to, and they're fine.
Removed and re-seated the EPROM in its socket.
Checked for loose solder joints on the surface-mount GD5429 and RAM. Didn't find anything bad.
Tried different slots on the motherboard (there are 3 VLB).
Any ideas? Bad RAM perhaps?
Did also notice that the 4× 74F245 bus transceivers all were pretty warm - the hottest chips on the board, in fact. Are they supposed to get hot? They were getting about as hot as the 486SX-25 CPU I'm using.
I had a similar issue with a VLB 5429. In my case it was the VGA ROM was having issues. I pulled the chip and tested it outside the card by reading it repeatedly and everything appeared fine. But in the card it had issues. Replaced it with a new EEPROM with the same ROM flashed to it and it worked great.
In my case, I was able to isolate this by determining that if the system booted okay and shadowed the VGA ROM at startup correctly, the card would work reliably for long periods of time. But if I turned the shadow off, it would occasionally glitch, freeze the system, etc. Even with the shadowing it would still occasionally fail to boot, presumably because it got a bad copy of the ROM at startup.
Yours doesn't sound like the exact same issue as I had, but maybe similar?
While playing around with the card some more, I've noticed something weird. If I touch my finger to one of the empty memory expansion sockets - location circled in the picture - I can make the display go from the mostly-corrupted state as shown in the first picture in my earlier post, to the not-so-corrupted state shown in the second photo. Not pressing, simply by just placing my finger there.
The attachment gd5429-weirdness.jpg is no longer available
I'm hoping it's not the ROM, because I don't have any means of verifying whether it's good - I don't have a programmer (e.g. TL866, T48, etc.). Unless it can be rigged up to an Arduino or something. But I don't even know what kind of ROM it is; there don't appear to be any markings on the package! As you can see from the photo, the sticker only just covers the window area, so I doubt there's anything hiding under there. All I know is it's a 28-pin UV-erasable EPROM in a ceramic package.
Despite the total lack of markings on the chip - I took the chip out of the socket again, and even on the bottom there is nothing except a hand-written "5429" in what appears to be pencil - after some investigation I think the ROM is a 27256 EPROM.
I know it's 32KB, because that's the size of the ROM image file available to download on the The Retro Web, so it's a 256Kbit ROM. I can see that what should be the data pins on one of those (D0-D7) are all connected to the inputs of an adjacent 74LS244, which in turn has its outputs connected to the Data pins of the ISA edge connector. +5V and ground are also connected to what should be VCC/VPP and VSS. What should be OE and CE appear to have approx. 3.5k of pull-up resistance to +5V.
I think I will try and rig it up to an Arduino and try and read out the contents and compare to the above downloaded file. That file has a 1994 copyright message in, same as the label on my ROM, so it's likely to be the same version.
Symptoms are consistent with a cold solder joint on a memory chip. Might be worth a closer inspection for damage.
I have already been over all the solder joints on all the surface mount chips (the GD5429 and the RAM are the only SMD parts on the board) with a magnifier and pushed on them with tweezers to see if there's anything loose, but I didn't find anything bad. I suppose I could try re-flowing all the solder joints, but I'll try other things first.
I read it 3 times to make sure I was getting consistent results, and all were identical.
There seems to be some kind of structure there? But it seems to me almost like it's missing every other byte. What I know about x86 BIOS ROMs is that they're supposed to start with 0x55AA, followed by a length byte (N x 512B), then typically a jump instruction (0xE9). But in my ROM it's like the 0xAA and the 0xE9 are missing... 😮
For comparison, this is what the ROM downloaded from The Retro Web looks like:
Maybe I didn't read my ROM correctly? Perhaps there's a mistake in my Arduino code? I've triple-checked I wired everything up correctly, so I'm confident it's not that.
My Arduino sketch and ROM dump attached, in case anybody wants to analyse further.
Wait! I noticed that the 'missing' bytes are in fact present further into the file, at 0x4000. This is that business where ROMs are split into odd and even, isn't it?
So I split everything from 0x0-0x3FFF and 0x4000-0x7FFF into separate files and combined them with:
And with the ROM back in the card... something new.
Now I get a beep code of 7 short beeps where it wasn't emitting anything before. This is apparently "Virtual mode processor exception error" according to an AMI BIOS code list. 🤷 Same POST code of 0x4036.
Nothing wrong with the system - still boots fine with a Hercules card.
If I end up having to swap out some/all of the RAM chips, I found that I have some (I think) suitable donor chips on some 30-pin and 72-pin memory modules.
The card has 8x OKI M514256A-85J, 256k x4 85 ns (?) SOJ-26 chips. The following that I have all seem to have matching specs:
Samsung KM44C256CJ-8 - 256k x4 80 ns
Siemens HYB514256AJ-80 - 256k x4 80 ns
Siemens HYB514256AJ-70 - 256k x4 70 ns
I have sixteen each of the latter two from a couple of 72-pin SIMMs that I wouldn't mind sacrificing. 😁
Got excited when I realised I also had a whole bunch of 1M x4 RAM, but then sad because probing with multimeter revealed the A9 address pin on the on-board RAM footprints isn't hooked up to anything, despite the CL-GD5429 having an MA9 RAM address pin. 🙁
Now I get a beep code of 7 short beeps where it wasn't emitting anything before. This is apparently "Virtual mode processor exception error" according to an AMI BIOS code list. 🤷 Same POST code of 0x4036.
Either you are miscounting or something is wrong with the beeping. 7 short beeps make no sense, but eight beeps would be "no working video card detected", which is quite understandable in that situation.
No, definitely 7 beeps. Yeah, makes no sense to me either, especially as it suddenly started doing it after simply putting back the ROM.
Anyway, I re-flowed the solder joints on the GD5429 chip and all the RAM chips. Well, all except the joints on the side of the two RAM chips next to the RAM expansion sockets - not enough room to get the soldering iron in there without accidentally melting the socket (which I did). No change at all. 🙁 But the beep code has gone away at least!
I also looked at the jumper settings on the motherboard that concerned VLB. It occurred to me I never checked them. I think they're all good. Speed setting is on "<=33 MHz CPU" - am using a 486SX-25. There is a "0 WS" and "1 WS" setting that was on zero wait-state, but made no difference when set to 1. Then there is a mysterious "With PAL / Without PAL" setting, which seems to have something to do with whether you have a PAL chip fitted in a certain socket, which changes which slots are master/slave; but there is no chip in the mentioned socket, so I guess it can only be set to "Without".
The only other thing I can think of right now to do apart from taking the plunge and swapping the RAM (for which I would need to acquire a hot air station), is to replace all the electrolytic caps. Some of them look a little haggard - one even has a tiny dent in the top.
I have been doing some probing of the RAM signals with an oscilloscope. Here's what I've found:
Constant activity on all address pins (A0-A8).
/OE is low at all times.
All the RAM data pins (DQ1-4) have brief activity at startup, but only the 4 lower chips continue to have activity, and some of the signals look pretty questionable (lows not at proper level, slow rise/fall).
All /CAS lines have brief activity at startup, but only continuous on the lower 4 chips.
Zero /RAS activity on any chip. Always high.
As alluded to above, the card doesn't appear to use the upper 4 chips in whatever graphics mode it's in when the system is POST-ing. Where I see any activity on those, it's only briefly at startup.
That there is only CAS activity on the upper 4 chips at startup is actually surprising - I though RAS/CAS signals would be common to all memory chips? The GD5429 datasheet even says so (after all, it only has a single pin for each signal). Maybe there is some extra 'bank' selection logic external to the GD5429?
But anyway, the big elephant in the room is complete and total lack of RAS activity. Should this not have regular activity?
After tracing things on the PCB, I was confused by how the RAM expansion sockets seem to have their RAS driven by the /OE pin of the GD5429! Only the on-board 1 MB base RAM has its RAS driven by the /RAS pin. But then I found a note in the datasheet for OE saying "For the CL-GD5426/'28/'29 with 2 MBytes of display memory, this pin becomes RAS1". Aha! So /RAS = /RAS0, and /OE = /RAS1 when the board is capable of 2 MB.
(By the way, in case anyone was wondering, the actual /OE pins of all the memory are connected directly to ground, and not controlled by the GD5429.)
But anyway, the RAS for both on-board and expansion memory is connected pretty much directly through to the GD5429 - only a series 55Ω resistor for each. I verified proper continuity everywhere. So it's not a trace issue.
During all this investigation, I did - very surprisingly - see RAS0 activity once, but haven't seen it again.
I'm starting to think the problems may not be entirely RAM-related. 🙁
Anyone got any further ideas? Apart from rolling the dice and replacing all the RAM with some other chips that are also of unknown condition, I'm at a loss as to where to proceed here, or whether to write it off as unrepairable.
I know you said you tested the ROM, but in my case I mentioned before, the ROM appeared fine but when I replaced it with a new EEPROM with the same ROM burned to it, it stopped giving me issues. Your symptoms don't sound the same as mine so I doubt that's it, but if you are out of ideas and have a spare EEPROM laying around it might be worth a shot.
The chip at the far edge of the board? No, not particularly. Do you think there is anything specific I should look for?
The 74F245s obviously are buffers to the VLB data pins (if I understand correctly the GD5429 only uses a 16-bit bus interface, hence why 4x 8-bit buffers), but I have no idea what the 74F32 is doing.
That said, one more thing I could probably do is take a look at the inputs and outputs of the '245s and see if they are passing data through properly.
I know you said you tested the ROM, but in my case I mentioned before, the ROM appeared fine but when I replaced it with a new EEPROM with the same ROM burned to it, it stopped giving me issues. Your symptoms don't sound the same as mine so I doubt that's it, but if you are out of ideas and have a spare EEPROM laying around it might be worth a shot.
No, it's a shame I don't. I thought I might be able to steal an EEPROM off an old modem card, but turns out it wasn't the same type of ROM (too big; too many pins).
The chip at the far edge of the board? No, not particularly. Do you think there is anything specific I should look for?
I know that the chip is at least related to address translation for the LFB. That isn't really the issue in this case, but if it is related to interfacing the 5429 to the system... perhaps the garbage you see is related to bad address/data tied through that chip.