First post, by watz
Hi!
I recently acquired a 486 VLB board with some massive battery corrosion damage. Dozens of pins and pads of the QFP 82C206 AT bus controller had detached. After some 30+ patch wires I got this baby back to life. Looks like a big mess of wires, but it runs runs a DX2-66@80 together with VLB IDE and VGA cards nicely. Theres only one single annoying issue left:
The system randomly semi-freezes. It rarely happens in DOS. However, I found it easiest to reproduce during Doom demo playback. In the frozen state, game music keeps playing and the system can always be unfreezed by hitting any key on the keyboard. I've tried different keyboards and keyboard controllers without change. The issue is always -much- easier to reproduce when a sound card is present and sound effects are enabled. I've tried 3 different sound cards with different IRQ/DMA setting with the same results. With a soundcard present, Doom demo playback usually freezes after 10-20s. With sound effects disabled (music doesn't matter), it takes several minutes. It will also freeze when the keyboard is unplugged, although that takes even more time.
With a scope, I quickly found out that every time the freeze occurs, the INT1 line on the 82C206 is triggered even though I did not press any keys. So the keyboard controller is generating an interrupt.
Knowing that, I checked the PS/2 clock/data lines:
- in Bios, there is no activity on the clock/data lines unless I press a key
- in DOS, the clock line gets pulsed down every ~400ms without any activity on the data line (why?)
- during Doom demo playback, I also see the ~400ms pulse with no data activity
- when the freeze occurs, there is -always- an additional pulse ~50ms after the regular ~400ms one without any data activity
I've attached a scope screenshot of the issue (ellow=clock, blue=data).
Now I'm trying to put the puzzle pieces together to be able to track down the real cause, which is most likely yet another broken trace:
As far as I understand, pulling clock low without pulling data means "inhibit".
In what scenario would a keyboard controller both "inhibit" keyboard communication and generate an interrupt without having actually read any data from the keyboard?
Any ideas?
Thanks alot,
Watz