A 16-bit bus does not a 386 make…

If you were very young in the early 1990s, or were born after that time, you may have gotten the impression from some retro enthusiasts that certain CPUs labeled “486” aren’t really a 486 at all. Many will point to the fact that these chips have a 16-bit external interface to the mainboard and conclude that they can’t really be a 486. Others may point to their performance being in-between that of a 386 and a i486DX and conclude it’s just a tweaked 386. So what makes a 386, or a 486 for that matter, and are these retro enthusiasts right?

History & Technical Specs

Intel introduced the 80386 in 1985. The 80386, later called the i386 was a huge step forward from Intel’s previous generation of 16-bit microprocessors, the 8086, 8088 and the 80286. Intel extended the architecture & instruction set of the 80286 to 32-bits and added additional features such as a 6-stage pipeline, and an on-chip memory management unit. Intel also added 2 new operating modes (real mode, virtual mode) and extended the existing protected mode to allow for addressing up to 4GB of memory. Like the 80286, the 80386 did not have an internal floating point unit and instead had the option of adding an external math co-processor. Intel also added 16 new instructions to the instruction set of the 80386: BSF, BSR, BT, BTS, BTR, BTC, CDQ, CWDE, LFS, LGS, LSS, MOVSX, MOVZX, SETcc, SHLD, SHRD.

As soon as the 80386, (later rebadged the i386) was in production, Intel began work on the i486 microprocessor. The i486 was released in 1989 and was a more incremental improvement to the i386 design. Like it’s predecessor, the i486 was a 32-bit microprocessor based on the same instruction set, but with a few extensions and improvements. Intel added only 6 new instructions to the i486, ( XADD, BSWAP, CMPXCHG, INVD, WBINVD, INVLPG) but there were many other improvements. An 8k on-chip cache memory, what we now refer to as level 1 greatly enhanced performance. Intel also included an improved version of the memory management unit which further enhanced memory performance. Another improvement was tight pipelining which allowed for simple instructions to complete in a single clock cycle as opposed to 2 on the i386. The one change the i486 (DX) is remembered for is the integration of an on-chip FPU which did away with the need for an external math co-processor. This not only simplified mainboard design, but further enhanced the performance of the floating point unit.

Enter the competition

A relative newcomer to the x86 microprocessor market named Cyrix released their first 486 compatible CPU in 1992, just 3 years after Intel’s i486. Cyrix had previously produced a range of math co-processors known as “FasMath” for the 80286 and later i386. This new processor, the Cx486SLC was intended to be pin-compatible with the i386 and thus had some compromises made to fit the older CPU’s design. Like the lower end i386SX chips it was intended to replace, this meant it was connected via a 16-bit external bus and had a 24-bit address bus. Like Intel’s i486, the Cyrix chip also included an on-chip L1 cache, but unfortunately this was cut down to 1k in the initial version. The Cx486SLC did have a 32-bit internal data bus and supported 8, 16 and 32-bit data types as well as a fully i486 compatible instruction set. 1 month later, in April 1992 Cyrix introduced the Cx486DLC in a 132-pin package that was pin-compatible with the i386DX. This was a fully 32-bit chip, both internally and externally and thus wasn’t subject to some of the performance limitations of the earlier SLC design. While not intended as a direct drop-in replacement for the i386, the Cyrix chips could be used in older mainboards with some minor modifications. (Cyrix did later manufacture upgrade chips like the Cx486DRx2) What this really achieved was the production of Cyrix compatible boards that were cheaper to manufacture than i486 boards because they used older components common with earlier i386 systems. In 1992 Cyrix did not have an i486 (socket 3) pin-compatible chip available. This wouldn’t happen until a year later when the company launched the Cx486S and Cx486DX which included an on-chip FPU as well.

A 386 or a 486?

While the Cyrix Cx486SLC certainly bears some similarities to the earlier i386 due to their pin-compatible design, the chip is clearly not a 386. It has all of the instructions and features of the Intel chip, but in a cost-reduced, low-power design. Certain aspects of the MMU and FPU design on the Cyrix chips were ultimately inferior to the i486, hurting their performance, but this alone does not make them a 386. The form factor and physical limitations of the i386 SX packaging and performance taken together is likely what formed these opinions among many. However, taking a closer look at the architecture, it’s clear the Cyrix 486SLC/DLC and later 486 designs were true 4th generation x86 CPUs, though somewhat lower performing budget options. (clock for clock)

Put another way, calling a Cyrix 486 a “386” would be like calling the 8088 a “fancy 8080.” If you don’t get my reference, stick with me for a sec. The 8008, 8080 (and later 8085) were Intel’s earlier 8-bit line of microprocessors. They were much simpler than Intel’s first 16-bit CPU, the 8086, but used a similar base microarchitecture. The original IBM PC XT used the 8088 which was a 16-bit CPU like the earlier 8086, but was constructed with an 8-bit data bus similar to the earlier 8080 and 8085. This made it possible to build a system around the 8088 using much cheaper components than would be possible with an 8086. (see the similarities?) The 8086 was a far superior chip, clocked at double the speed of the 8088 and with a 16-bit data bus, but both chips were capable of running the same software. While the 8086 famously appeared in several popular systems like the original Compaq Deskpro and the Tandy 1000 SL/RL, it was the PC XT’s 8088 that kicked off the PC revolution.

Intel J1900 flaw causing early failure for embedded devices

This morning I woke up, made some coffee and went to the computer room to work on some projects when I noticed that the shared folders from my NAS weren’t showing up on my desktop. That’s odd I thought. I went over to the NAS and my fears were confirmed, not only was it offline, but it had an error light. It would power on, but it wouldn’t start up.

Hoping that this was some simple fault like a bad stick of memory, I disconnected the unit, pulled out the drives and brought it over to my test bench. I confirmed the power supply was good and swapped the memory in/out, but with no effect. Ouch, this thing is really dead I thought. Before consigning it to the e-waste bin, I thought I’d search around just to make sure and stumbled on a thread from 2020 about the CPU on these devices having a flaw. Not only that, there was a possible fix! (if, perhaps only a temporary one)

At the time the flaw was discovered Intel posted an addendum to their CPU specification update for the J1900 and related CPUs. (Intel has since removed these docs from the public facing side of their website and requires a CNDA account to access them. Thankfully the wayback machine has an archive of them linked above) Unfortunately, the problem lies in the silicon of the CPU itself and is not repairable.

The fix documented in the forum link above and in a similar Reddit thread a year later both outline connecting a 100-200ohm resistor to pull the LPC clock signal to ground. Thankfully this signal is exposed on a pin header that also supplies a ground pin on the NAS model I have. I first hooked up my oscilloscope to the clock pin and verified that it was operating out of spec. I rummaged through my component collection and found a 180ohm resistor that would work. I had some jumper wires with dupont connectors for another project and used that to make a dongle that would jump these 2 pins. I put power into the unit and it started right up. Amazing!

Sadly the problem with the J1900 CPUs is only going to get worse over time. It’s possible that I could be able to keep the unit running for some time, possibly by changing out for different resistors in the future as the circuit continues to degrade. However the real solution is to start planning a migration from this device to something new.

If you have an embedded device powered by a J-series, N-series or similar and it’s been operating 24×7 for several years, you’re likely on borrowed time. Get a good backup of your data and start planning your migration now.

(mostly) 4th Gen x86 Shootout!

Having recently restored my old 486SLC board, I was curious how it stacked up against other 486s of the era. I actually have a fairly decent collection of chips from this time period and a few motherboards that accept them.

For the majority of this test, I used a PerComp branded board made by PC Chips, (model M912) that has a fairly broad range of support for these CPUs and is based on the PC Chips “Chip 16″/”Chip 18” chipset. The board is configured with 256KB of L2 cache, 16MB of 32-pin SIMM memory and supports 7x 16-bit ISA expansion slots, 3 of which support 32-bit VLB cards.

stock photo of an unlabeled M912 board

One funny thing about this board is the branding on the chipset. At the time PC Chips didn’t have a great reputation for performance. In an attempt to boost their sales, they often placed stickers on their chips with the model numbers of other more popular chipsets.

fake chipset branding
actual chipset branding

Alright, enough of the history… let’s get into the testing! The chips I selected for the test were several Intel CPUs, a couple of Cyrix CPUs and a single AMD CPU. These were as follows: i486SX-25 (overclocked to 33Mhz), i486DX-33, i486DX2-66, Cx486DX2-66, Am486DX4-100, Cx5x86-100 (overclocked to 120Mhz)

stock photo of the chip I have. Mine has a fan bolted onto the heatsink as I’ve overclocked it to 120Mhz

The five 486 CPUs shown above all contain 8k of L1 cache on-die. They were all tested on the same motherboard mentioned above, which was configured with 256k of L2 cache.

I’ve also included the 486SLC numbers from a previous test. The SLC and the 5×86 aren’t a good direct comparison since the motherboard and configurations are quite different. Unfortunately, I managed to kill the Cyrix 486DX2-66 when I tested it the second time and wasn’t able to get cache and system performance numbers, but an image with the last screen it produced is included below.

What was most interesting to me were the results for the Intel SX and DX chips clocked at 33Mhz. All of the results from these 2 chips were identical except for the performance index. (which is lower on the SX as it lacks an FPU) What this tells me is that unlike the 3rd generation, Intel’s 4th generation SX chips were fully 32-bit externally. The i386SX was 16-bit externally and was dramatically slower as a result. Likewise the Cyrix 486SLC also suffered in this test due to its 16-bit external bus. I suspect Intel’s 4th generation SX chips were simply lower binned parts from the DX production line that had defects in the FPU section of the die. Simply disabling the FPU by cutting/burning the traces between it and the CPU section of the die would allow these otherwise defective chips to be sold, albeit as a lower-end model.

TX486SLC-e w/IIT FPU
i486SX25 @33Mhz
i486DX-33
i486DX2-66
Cx486DX2-66
Am486DX4-100
Cx5x86-100 @120Mhz

It’s a shame the Cyrix DX2-66 gave up the ghost during the test. However, it’s not a chip I was likely to put back into use in any of these systems. What data I did get from it confirmed my recollection of the CPU. It was slightly faster than the Intel DX2-66 in integer ops, but was a bit slower in floating point due to a weaker FPU design.