This is a tale of old CPUs, intensive SMD rework, and things that should work but don’t.
Released in 1994, Apple’s Powerbook 500 series of laptop computers were the top of the line. They had built-in Ethernet, a trackpad instead of a trackball, stereo sound, and a full-size keyboard. This was one of the first laptops that looked like a modern laptop.
The CPU inside these laptops — save for the high-end Japan-only Powerbook 550c — was the 68LC040. The ‘LC‘ designation inside the part name says this CPU doesn’t have a floating point unit. A few months ago, [quarterturn] was looking for a project and decided replacing the CPU would be a valuable learning experience. He pulled the CPU card from the laptop, got out some ChipQuick, and reworked a 180-pin QFP package. This did not go well. The replacement CPU was sourced from China, and even though the number lasered onto the new CPU read 68040 and not 68LC040, this laptop was still without a floating point unit. Still, it’s an impressive display of rework ability, and generated a factlet for the marginalia of the history of consumer electronics.
Faced with a laptop that was effectively unchanged after an immense amount of very, very fine soldering, [quarterturn] had two choices. He could put the Powerbook back in the parts bin, or he could source a 68040 CPU with an FPU. He chose the latter. The new chip is a Freescale MC68040FE33A. Assured by an NXP support rep this CPU did in fact have a floating point unit, [quarterturn] checked the Mac’s System Information. No FPU was listed. He installed NetBSD. There was no FPU installed. This is weird, shouldn’t happen, and now [quarterturn] is at the limits of knowledge concerning the Powerbook 500 architecture. Thus, Ask Hackaday: why doesn’t this FPU work?
The holy scroll passed from Motorola to Freescale to NXP states just a few differences between the FPU-less 68LC040 and the FPU-equipped 68040. They’re both pin compatible with each other, object code compatible (except for FPU instructions), and timing requirements are the same. This should be a drop-in replacement. It isn’t, and there is no satisfactory explanation for why that’s the case.
The first step to diagnosing a problem is eliminating possible problems, and in this case it’s probably not a software issue. The CPU reports no FPU in both Mac OS and NetBSD. The FPU-equipped Powerbook 550 exists and the Mac OS uses the same Gestalt ID for the entire Powerbook 500 series. Since [quarterturn] tested the CPU under NetBSD, there’s probably nothing weird going on in the ROM, either; Mac ROMs are dedicated almost entirely to the Macintosh Toolbox and the Mac OS. The problem probably isn’t software.
According to the Motorola, Freescale, and NXP documents, the problem probably isn’t hardware. This is the second new CPU in this computer, and this time the CPU probably has a floating point unit. We can probably trust the NXP support rep. We can also trust the PCB that has been reworked several times over the course of this project. If it works with an FPU-less CPU, it should work with an FPU-equipped CPU.
Without an obvious solution to this problem apparent in the software, hardware, or even the ROM for this laptop, this project has turned into a mystery. Surely there’s some errata tucked away in a datasheet somewhere that will tell us what’s going on. There might be a handful of wizened Apple engineers who know what the problem is. The explanation to this problem is going to be very hard to find, which is why this project is an Ask Hackaday column. The comments are open, and the eventual answer will assuredly be very interesting.