Tube Time Profile picture
Oct 13, 2021 105 tweets 29 min read Read on X
here's a repair job from a friend. it's a rather rare IBM PC accelerator card. it's very dirty. let's dig in! Image
separating the two boards, you can see it is divided into a memory board and a CPU board. Image
the upgrade CPU? an 8086. it's not a big upgrade from the 8088 in the PC, but presumably it is clocked twice as fast. Image
but here's the problem: it was found at an e-waste shop and they'd already torn off the bracket. Image
how would you fix this? Image
gluing and clamping. i've already removed some FR-4 material as well as part of the ground/power planes which were shorted out here. (4 layer board) Image
i need to add a little material here, and then i'll glue that in as well. Image
cut out a little chunk of fr4 from this scrap board Image
shaped to fit Image
now we wait for the glue to dry
hmm not half bad. I sanded it a little bit to smooth it out. doesn't have to be perfect. Image
took some before pics so I know where to run the traces. ImageImage
soldered some fine wires to the existing traces. ImageImage
not too shabby Image
elsewhere on the board, there's a bunch of sketchy stuff like this Image
this thing got mashed Image
sus Image
some people asked about how this card can take over the computer CPU on the motherboard. I suspect the 40 pin header on the upper right goes to a ribbon cable with a DIP plug, replacing the 8088. Image
so I think it's a straight-through ribbon cable. that's not hard to fabricate. Image
fabricated! Image
I'm expecting this to not work. Image
it didn't work. no beeps, the CRT didn't initialize. probably this isn't running code
I decided to test all the chips. they're socketed so it's easy. already found two bad ones! ImageImage
all the other logic chips tested good. I dumped the two PALs (unprotected!) and now I'm trying to figure out how to dump this 82S129 PROM. Image
I'm not convinced this worked. I get 0xF for all memory locations except for 0x55, which reads as 0x0. Image
thinking about how to test the 8086, I was racking my brain trying to remember if I have an 8086 computer, but then Image
I remembered I have *the first* 8086 computer, Intel's SDK-86. and yes the chip works fine. Image
another thing to try is this WindsorPOST diagnostic ROM. you swap it in place of the regular PC BIOS chip, and it runs much more detailed tests with output to the video card right away. i doubt this will work either, but it's worth a shot. Image
i've completely reverse engineered the hardware for the WindsorPOST. it's got a really hilarious "copy protection" trick: it swaps the a0 and a1 pins on the ROM. one of these days i should use Ghidra to disassemble the firmware itself.
umm, i can't believe it, but IT FREAKIN WORKS Image
so the machine won't boot because it doesn't see any RAM! good ol' IBM BIOS just silently halts when it can't find RAM. Image
supposedly the card can use the system RAM, but i don't know if i've set these jumpers correctly. it's probably expecting to find RAM on the card itself. Image
OK i think i figured out what the jumpers mean. P means parity. 0, 1, 2, 3, 4 enable specific 128K banks of RAM, and F/S refers to the speed of the RAM chips (fast or slow). Image
i was a little worried that the empty sockets on the RAM board meant that it was missing some logic chips as well, but there are 90 sockets. for 4164 memory chips, that corresponds with 640K of RAM with parity. now i just need to figure out the socket->bank mapping. Image
i didn't noticed this before, but there are numbers at the top of each pair of columns. these must refer to the bank numbers! Image
and the identifiers P0, P1, etc refer to the pairs of chips required to provide parity for the banks that are used! Image
transferred some RAM from the motherboard. let's see if this works. Image
nope, still fails. that's odd Image
going to try probing the RAMs Image
probes connected Image
RAS=240ns, CAS=180ns. this is with the jumpers set to "F"
with the jumpers set to "S", i get RAS=384ns, CAS=232ns. Image
hmm, could be this card is picky about RAM.
stole some RAM off this Quadboard. the first bank is all 150ns, the rest is 200ns. now all 16 bits of RAM in bank 0 are the same manufacturer and speed. i wonder if this will work... Image
and the first 16K memory test passes now! Image
still, the diagnostic ROM hangs during the dynamic memory refresh test. i tried swapping in the standard BIOS chip and it still doesn't boot. so there's something else going on. maybe this card is only XT compatible? i don't know.
h/t @dschwarz who found this ad for the accelerator card. Image
i also found this blurb in "expanding and networking microcomputers." it seems that the memory board was an optional accessory. 🤔maybe there's a way to jumper the card so the high speed RAM is disabled. Image
sure enough, disabling all the RAM banks works. the board still hangs at the ram refresh test though. ImageImage
so how to solve the ram refresh issue? i think i need to figure out where in the diagnostics it is hanging up. as an alternative, i could also try to figure out where it hangs up in the IBM BIOS.
here's the ROM dump of the WindsorPOST diagnostic. but something's not quite right ImageImage
turns out the two lower address lines are swapped on that little adapter board. Image
well, here i am again, reverse engineering another BIOS 🤪 Image
the CPU test is...lackluster. it runs 0 through all the registers, and then checks to make sure the result is 0. then there's a bunch of delay loops to make you think it's doing an *actually useful test* 😂 Image
so it's freezing somewhere in this code. the last line highlights the text for the next test in progress, and it never makes it to that point. there are no loops. it just configures and enables the DMA+timer combo that starts the RAM refresh. Image
also amusing is this terrible interrupt controller test that just writes a bunch of sequential numbers to the interrupt mask register and reads them back. it does this 0x400 times and then calls it quits 😂 Image
that memory refresh code is copied straight out of the IBM BIOS listing, but with the functionality checks removed. wild
check out this rework. they just drilled out the pin! Image
seems like all of my troubleshooting ends up here, with a logic analyzer snaking into the bowels of the thing Image
well, interesting. i want to explain this, but you would need to understand how the RAM refresh works on an original PC (5150)... Image
it starts with the timer chip, the 8253. channel 0 is for software use (timer tick), channel 2 is for the bleeps of the PC speaker, and channel 1 is for RAM refresh. there's a flip flop that it triggers, requesting DMA, and it gets cleared when the DMA is done. Image
you basically set up the timer to trigger every 15us or so, and that starts a DMA transfer. the DMA chip is set up to just increment the address over the full range of RAS (row addresses) and to just do a dummy read transfer. that refreshes the DRAM. Image
here the DACK0_BRD# signal disables the CAS pulse and asserts all the RAS lines so all the RAM banks refresh simultaneously. Image
the toughest part is this state machine that handles the bus mastering mode. circled in blue, the CPU must be in a certain state (passive) in order for DMA to take control of the bus. Image
the DMA controller has a whole handshake. DREQ (from the timer) starts the process. DMA asks for bus control with HRQ, the state machine waits until the CPU is passive, then it responds with HOLDA, and the DMA controller starts the transfer. Image
so here you can see DREQ0 is high, then CPU_STATE goes to 1 (passive), HOLDA goes high, and then the transfer happens (DMA_AEN#). the CPU READY pin goes low during this time, but what's with all those pulses? they look like glitches to me. Image
the 8284A clock generator chip takes the DMA_WAIT# and RDY#/WAIT signals, synchronizes them, and turns them into the READY output that goes to the CPU. when READY is low, it halts the processor. ImageImage
so the extra glitches are probably not real, but the output high is around 2.1V which isn't great for the noise margin. notice the CPU_STATE doesn't change afterwards, so the 8086 on the accelerator card has locked up at this point. Image
it's time to probe the CPU card. probably the ready signal and the S0/S1/S2/LOCK state signals to start with.
and the 8086's READY line is going low and staying low, so it's not running code. this is odd because the READY line on the motherboard has gone high, so there must be some additional logic on the accelerator card. Image
this is weird, i am measuring 33 ohms to ground on the READY pin on the ribbon cable. this doesn't seem right. it also explains the low voltage on the READY pin on the 8088 socket on the motherboard.
and unfortunately this 33 ohms is below the threshold for my multimeter's continuity mode, so it's really hard to buzz out due to all the ground pin coming up as false positives. 😅
they did it on purpose. interesting. Image
time to start tracing the ready signal to see why it doesn't assert. the circled signal must go low for READY to assert. the second DFF synchronizes the signal to the clock. Image
uh oh. the logic expands into 4 input signals and a signal coming from a PAL. Image
this is starting to get complicated Image
ok usually when i work on these things, the signals start collapsing down into state machines, decoders, etc. but now i've got 14 (!) signals feeding in, not including the PAL. Image
pulling this one thread seems to be unraveling the entire sweater. think i'll take a break for now.
short break; i'm back! and figured out the tiny ROM. it's used as an address decoder. ImageImage
the tool of choice. not shown: a multimeter set to continuity mode Image
sus Image
unbelievably, all those traces are fine. 🤔
took me all day, but i finished up with the PCB reverse engineering. i need to organize it a bit and start to figure out how the READY circuit is supposed to work. Image
using a process of elimination, i figured out that the signal that's having issues passes through U1, this PAL. so now i need to figure out how to get from the bitstream to the gates. 🤔 Image
there's a program called JED2AHDL, but it looks like it'll take some work to get it going.
i may be overthinking this ImageImage
not complicated ImageImage
PAL equation backed out by hand. looks like this mostly comes from a cycle counter. ImageImage
now back to the real hardware. no pulses on U3 pin 5 appear after the DMA operation. this is driven by the PAL. i'll just keep working my way back up the line... ImageImage
the PAL clock goes away. looks like the PAL is behaving itself, but the clock disappears and doesn't come back. Image
pin 12 of U30 goes low and stays low. that's not right. ImageImage
it's stuck low because this flip flop never receives a clock pulse after a certain amount of time. ImageImage
huh, weird, there's a fat pulse on one of the NOR gate inputs, then they both stay high and that's it Image
flip flop U29 is getting stuck low. to get unstuck, the output of U30B must go from low to high. this is triggered when the ISA bus tries to write to RAM (in this case, the DMA controller). ImageImage
it's gotta be this flip flop. it's supposed to reset when AEN goes low. Image
getting ready to connect the probes to U28, and look! the problem! 🤦‍♂️ Image
pin 8 is just chillin there outside the socket
oh yeah it passes the test now Image
boots DOS! Image
all that's left is to try out the memory daughterboard. but i have a bunch of memory chips to install in it first. gotta populate the rest of these sockets. Image
benchmarks! it's faster. Image
here's how this similar system compares with the 5150. Image
anyway, if you're interested in this card, someone is selling one on ebay right now. ebay.com/itm/Accelerato…
as for this card, it's going back to its owner, who i am sure will be delighted to have a working card.
i probably ought to release the schematics that i have. maybe the PAL dumps too. it's no clone, but it'll be useful for repair.

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with Tube Time

Tube Time Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @TubeTimeUS

Jun 13, 2023
here's a weird object! it's some kind of foot pedal with an IBM logo. is it for a sewing machine? electronic synthesizer? what do you think? 🧵 Image
it's got a cursed connector! what IS that? Image
amazingly enough, I found something with the mating connector on it! but what is it? Image
Read 24 tweets
Jan 11, 2023
hey so remember the world's cutest oscilloscope i picked up last year? i think it's time to fix the probe socket issue.
i printed a new panel insert that has two BNC sockets on it (the original probes would have had captive cables)
the tricky part is that this oscilloscope has a 333K ohm input impedance instead of 1M like umm every other scope on the planet. fortunately someone designed a little conversion circuit...
Read 11 tweets
Jan 5, 2023
in honor of Sim Wong Hoo, here's a quick historical review of the Sound Blaster! 🧵
but first we have to go back to their first sound card, the Creative Music System from 1987. (image credit: Bratgoul on Wikipedia)
this card has some special "CMS-301" chips. if you peel back the sticker, they have had their top marks removed. they're actually SAA1099 synthesizer chips made by Philips. Creative wrote music composition software for musicians on the PC.
Read 23 tweets
Dec 31, 2022
Tube Time: a 2022 retrospective 🧵
(and stuff you might have missed!) Image
starting things off in january, i found a tube of super old 555 timer chips! i also decapped one of them.
i also started fixing up an old HP 150 computer. it's not PC compatible but it runs MS-DOS--how odd!
Read 65 tweets
Dec 29, 2022
today's mini project: fixing this Radius Thunder IV GX daughtercard. it looks fine, but... 🧵 Image
one of the chips has some broken pins! Image
looks like two of the pins got mashed and broke right at the plastic package. Image
Read 11 tweets
Dec 8, 2022
on the bench of healing tonight: my coffee grinder which decided to bite the dust. Image
symptoms: i push the start button and the motor just bumps a little bit and stops.
how to take it apart? hmm, i bet there are screws under the rubber feet. Image
Read 23 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Don't want to be a Premium member but still want to support us?

Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal

Or Donate anonymously using crypto!

Ethereum

0xfe58350B80634f60Fa6Dc149a72b4DFbc17D341E copy

Bitcoin

3ATGMxNzCUFzxpMCHL5sWSt4DVtS8UqXpi copy

Thank you for your support!

Follow Us!

:(