Skip to content
dh219 edited this page Oct 28, 2020 · 5 revisions

The onboard FPU

The problem

All my initial development work was done without an FPU present.

Back in the mid-90s I bought a 68882 coprocessor but made a mess of inserting it into the PLCC socket. I broke the socket down left edge, somehow.

Broken PLCC socket

I was FPUless until about 2018 when I removed the socket with hot air and had a go and soldering a new one on. This was nearly as big a disaster. I lost two pads and raised a third. I decided against a socket and soldered directly on the board.

When I started work on this project I thought I'd better whip the FPU off again in case it complicated things. When I managed to get the rev2b board working I returned to add a socket, older and better at soldering.

Then I found a problem. TOS wouldn't boot at all with DFB enabled and FPU present. EmuTOS booted, but didn't see the FPU.

The reason

An inspection of the Falcon schematic reveals the problem: The data strobe (XDS030) line is wired directly to the 030 without going through the GALs. This line is not exposed on the stupid expansion header, so the external 030 cannot talk to the FPU!

The workaround

Fortunately the XDS030 line is nicely exposed adjacent to the DFB board going into the GAL at U62. On the falcon this line is pulled high with a 4.7k resistor, therefore if I link the external 030s DS line to pin 3 of U62 via a 180 Ohm resistor I can restore that link (the resistor prevents any short circuits if, for some reason, both sides are driven simultaneously and the value makes sure 'low' is below 0.2V).

I also made a small change to the firmware to drive the UDS and LDS lines, which are derived by that GAL as open-drain so I'm not driving both sides of the GAL.

FPU hack

Of course this slightly breaks the 'plug and play' target of the DFB, but no soldering is required and it's only if you have an onboard FPU and wish to retain it. The mod can be as simple as removing U62, inserting a wire into the socket and plugging back in.

Clone this wiki locally