35

The decision to use the 8088, a version of the 8086 with the data bus restricted to 8 bits, in the original IBM PC, seems strange on the face of it, certainly hurt performance and intuitively shouldn't save all that much money.

How much exactly did it save on the manufacturing cost per machine, all told, taking into account the CPU itself, the mainboard and anything else thereby affected?

Chenmunka
  • 8,141
  • 3
  • 39
  • 65
rwallace
  • 60,953
  • 17
  • 229
  • 552
  • 3
    Really the only thing it would have been worth implementing at 16 bits would have been the main system memory - I/O peripherals and at that point disk interfaces would have remained 8 bit. But the PC was designed around low density DRAM, such that large amounts of memory would have to include some on expansion cards, and those would be largely the same users who would benefit from a 16 bit memory path that the expansion cards would then need to support. – Chris Stratton Apr 28 '17 at 15:37

4 Answers4

33

According to Wikipedia, a number of reasons contributed to IBM’s using the 8088 instead of the 8086:

  • Intel offered them a better price for the 8088 and was able to supply more of the chips;
  • the 8-bit data-bus meant that IBM could use a modified 8085 design (the System/23) instead of coming up with a new 16-bit design;
  • it also meant that IBM could use more mature and cheaper 8-bit components.

The knock-on effects on design and cost are extensive: using an 8-bit data-bus meant shorter XT-bus connectors, simpler extension cards, fewer traces to handle on the motherboard...

Attaching an actual figure to those cost savings is another story, I doubt anyone could determine that accurately nowadays.

Stephen Kitt
  • 121,835
  • 17
  • 505
  • 462
  • 1
    That makes sense, but if it's impossible to get an exact figure, what would be an order of magnitude estimate? Like would you be talking closer to $30 or $300? – rwallace Apr 27 '17 at 13:59
  • 5
    If part of it was that IBM could easily modify an existing motherboard rather than designing a new one then the cost is both (i) the cost of a designer doing that work; and (ii) almost certainly, the costs of being later to market. Given that the PC was built to be an Apple killer — to take marketshare from an already successful product — I'll bet we're talking huge amounts under head (ii). – Tommy Apr 27 '17 at 14:46
  • Yes, there are systemic aspects to this which make it very hard to guesstimate the cost. Intel would no doubt have come up with a different proposal if they’d known how successful the PC would be... I do think it’s telling though that IBM stuck to the 8088 design until the switch to the 286 with the AT (PC, PC XT, Portable PC, PC Convertible, PCjr); the first 8086 design was the PS/2 in 1987. – Stephen Kitt Apr 27 '17 at 14:58
  • 7
    Don't underestimate the "number of traces": PCB design is difficult work. And the cost of having a PCB made that needs finer tolerances because of thinner tracks, or needs more layers, is surprisingly high. – rackandboneman Apr 27 '17 at 19:38
  • 1
    That System/23 is interesting: Inside pictures show the same oddity the later IBM PC has - a lack of typical IBM silver-square SLT-style ICs (none in the PC, very few in the System/23). Not likely they were transitioning away from it generally, since later Microchannel (PS/2 and RS/6000) systems are CHOCK FULL of silver squares. – rackandboneman Apr 27 '17 at 19:50
  • Also, keep in mind that IBM didn't necessarily expect a lot of success from the PC market. It was mainly meant as an executive toy and as a smart terminal for their mid/mainframe computers. The priority would have been off-the-shelf components, not necessarily how much an 8086 processor cost. – Jamie Apr 27 '17 at 21:53
  • 2
    At the time 8-bit was the market standard, and 16-bit was new and expensive. – Thorbjørn Ravn Andersen Apr 28 '17 at 09:54
  • It's not just the unit cost per item but the savings by getting to market in 1981 instead of a couple of years later. If they had designed a full 16 bit machine from scratch, they might not have beaten the Mac into production. That might have been the difference between success and failure. – JeremyP Apr 28 '17 at 14:24
  • 1
    The third point doesn't make any sense. 8086 could accommodate with no supplemental circuitry 8 bit components as good as the 8088. This could be seen in the fact that 8086 based clones would have no problem with the 8 bit components required for IBM-PC compatibility (8259 PIC, 8237 DMA, 8253 PIT). Point 1 and 2 and the reduction in cost of only having an 8 bit bus are good points, not the I/O chips. – Patrick Schlüter Jan 13 '20 at 08:49
26

This is not a complete answer because it doesn't answer what the exact cost savings were, but I think it's worthwhile to have an informed primary source for the claim that there were cost-savings and commodity-components motivations behind IBM's choice to use the 8088 instead of the 8086.

Peter Norton, PC guru and DOS programmer extraordinaire, writes in his book, Inside the IBM PC:
(© 1986; p. 9)

“There was an inherent practical problem . . . in using the 8086 as the base of a computer design. While the 8086 had 16-bit capabilities internally—which is very good—it also had to work exclusively with other computer components that handle 16 bits at a time as well. When the PC was being designed, 8-bit parts were plentiful and cheap; 16-bit parts were more expensive and in shorter supply. This presented an obstacle to anyone designing a computer around the 8086.

Intel found a simple, practical solution to this problem with the 8088 chip. The 8088 internally has all the 16-bit skills of the 8086, but when it communicates with other circuitry around it, it talks only 8 bits at a time; this slightly reduces the speed of the 8088, but it makes it possible for the 8088 to work with other components that are cheap and plentiful.

For practical reasons, IBM designed the original model of PC around the 8088—a microprocessor with 16-bit power, but 8-bit economy. […]”

Furthermore, while the question makes it sound like IBM's choice to use a hobbled 16-bit processor was a rather curious one, it really wasn't. It's important to realize that when the IBM PC was designed (and even at the time of its release to the public), virtually all home computers were 8-bit systems.

In fact, IBM's original plan apparently was to use an 8-bit processor, and Microsoft is who persuaded them to go with the 16-bit 8086 instead. In an interview with PC Magazine on March 25, 1997, Bill Gates had this to say (emphasis added):

…for IBM it was extremely different because this was a project where they let a supplier—a partner, whatever you call us—shape the definition of the machine and provide fundamental elements of the machine. When they first came to us, their concept was to do an 8-bit computer. And the project was more notable because they were going to do it so quickly and use an outside company. It wouldn't be a high-volume product.

Their charge was to do a home and a very low-end business machine. They had the Data Master, which was 8085-based at the time, that they felt was covering part of the business market. Then they had the 5100, the machine that had both an APL and a BASIC interpreter, which was covering another part of the business market. So it was sort of a home-down business machine. And it was a very small team in Boca that wanted to prove that IBM could do a product, any kind of product, in about an 18-month cycle. And that was the most novel-that was going to be the novel thing was: could you work with outsiders, which in this case was mostly ourselves but also Intel, and do it quickly?

And the key engineer on the project, Lou Eggebrecht, was fast-moving. Once we convinced IBM to go 16-bit (and we looked at 68000 which unfortunately wasn't debugged at the time so decided to go 8086), he cranked out that motherboard in about 40 days. It's one of the most phenomenal projects because there were very small resources involved and we had to ROM the BASIC which meant that it was essentially cast in concrete, so you couldn't make much in the way of mistakes.

Microsoft co-founder Paul Allen remembers things the same way as Gates, writing in his autobiography:
(© 2011; p. 133)

That August [of 1980], a three-piece-suited contingent led by Jack same approached us about Project Chess, the code name for what would become IBM's PC. After we talked them out of an 8-ibt machine and won them over to the Intel 8086 (or as it turned out, the cheaper but virtually identical 8088), they wanted everything in our 16-bit cupboard, including FORTRAN, COBOL, and Pascal. Aside from BASIC, none of these products were even close to being ready for the 8086 platform. It would take a wild scramble to get them all done on IBM's tight timetable.

That's not to say, of course, that 16-bit computer systems didn't exist at this time—they did—but they were not found in personal computers. The most popular computers at that time, from Apple and Atari, were powered by the MOS Technology 6502, and a number of others by the Zilog Z80. You might object and say that IBM wasn't really designing the PC to compete with the likes of Apple IIs and Commodores, since it wasn't a home gaming machine, but remember that IBM was still making powerful mainframes and minicomputers and certainly did not expect or want their PC to compete with these.

In fact, the 8088's pseudo-16-bit architecture was considerably more powerful than any of its competitors. It has a lot of neat tricks up its sleeve that its contemporaries just couldn't match:

  • Chief among those was its relatively large complement of general-purpose registers. The 6502 only had a single GP register, while the 8088 had between 4 and 6 (depending on how you count). Sure, there were some instructions that were hardcoded to use only certain registers, but this was still a lot more headroom. Plus, these instructions required fewer bytes to encode, which turned the register specialization into an advantage.
  • Another unique feature of the 8088 compared to other personal computers were its hardware multiplication and division operations. Being a 16-bit processor internally, these could do a full 16-bit multiply or divide internally on two values that were known only at run-time. Granted, these instructions were extremely slow, but they were still faster than emulating them on processors that didn't support them.
  • An even more important advantage of the 8088 was Intel's CISC architecture, which offered a wide variety of extremely powerful "meta-instructions" that could be encoded in fewer bytes and executed more quickly than equivalent sequences of instructions on other microprocessors. The string instructions are the best known, and were truly one of the defining features of the 8088 from a performance-oriented programmer's perspective. With a single opcode (MOVSB), you could copy a byte from one memory location to another and advance both pointers—all in an order of magnitude less time than it would have taken to execute these three logical operations. There were instructions to copy memory around (MOVSB), scan a buffer for a value (SCASB), compare two buffers (CMPSB), and fill a buffer with a certain value (STOSB). When coupled with the REP prefix (which caused the instruction to be repeated a certain number of times, or according to a particular condition), you had a loop that could do these operations repeatedly at extremely high speeds. The XLAT instruction is another honorable mention, weighing in at only 1 byte yet allowing efficient, effective use of translation tables.

It's important not to overstate the drawbacks of an 8-bit external bus. This only slowed down memory operations, which were—relatively speaking—extremely slow anyway and therefore avoided as much as possible by programmers targeting this architecture. Where you really saw a penalty from the 8-bit bus was in fetching instructions to be executed (as opposed to data).

It turned out that the 8088 spent a lot of its time idling, waiting for instructions to be read, since it could execute many of them so quickly that its 4-byte prefetch queue was usually empty. (It took ~4 cycles to read a single byte.) The way around this was to take advantage of those nice, short CISC instructions that were fetched quickly and packed readily into a small queue. If you had a series of 1-byte instructions, the queue would stay full and the chip would stay busy—and thus run quickly, as fast as an 8086. When optimizing for 8088, using more instructions was usually a win if they were smaller, and x86 has a lot of special-case short-form encodings of various instructions.

(The 8086, in addition to having a 16-bit external bus, also had a 6-byte prefetch queue; it was these things together that made the 8086 a superior performer, since it was easier to keep the queue full and thus the processor busy. The 8088 limited its prefetch queue to only 4 bytes, probably because prefetch contends with data load/store, and some of that prefetch will turn out to be useless: discarded on jumps. With less memory bandwidth available, it's less worthwhile to aggressively prefetch. See discussion in comments. Michael Abrash's extended treatment of the prefetch queue in his Zen of Assembly is also worth a read.)


Another thing about the 8088 (and 8086, of course) that was huge was the 8087 math coprocessor. It was an expensive add-on for sure, and therefore wasn't found in many systems, but boy was it powerful. Not only did it make it possible to do complex IEEE floating-point operations, which was already unprecedented in a home computer, it also did it with high accuracy and precision. Even more significantly, it was a true coprocessor, that could execute floating-point operations independently, meaning that the main 8088/8086 processor could stay busy executing integer instructions. Background multiprocessing in 1981—what is this insanity?!

From this perspective, it is, in some ways, surprising that the IBM PC was as powerful as it was. In the hands of the right programmer, it could blow the ceiling off of contemporary personal computers, and would even pose a real threat to some of the mini-computers on the market. Unfortunately, there were relatively few programmers who really took advantage of these neat features, and by the time such tricks were widely known, they were already obsolete. I also can't speak as to the extent to which IBM's engineers realized the power of Intel's processor—they may have thought they were humbling the machine more than they actually were, and it may be Andy Grove's team that were the real wizards here.

Cody Gray - on strike
  • 1,554
  • 14
  • 21
  • 4
    Memory operations weren't always avoided like the plague — at the time of the 6502's design it was believed that RAM would remain faster than processing for that chip's lifetime, hence its heavy reliance on the zero page [approximately] in lieu of registers. Definitely the Intel/z80 school of thought is to do everything in registers though, so I think you're correct as to 8088 v 8086. – Tommy May 07 '17 at 15:08
  • 5
    The IBM PC with 8088 did a great job of carving out the "middle ground", between the aging 6502 popular for inexpensive home computers, and its contemporary Motorola 68000 competitor, which owned the expensive workstation market of the early 80s. – Brian H May 07 '17 at 22:23
  • 4
    @Tommy: Expanding the prefetch buffer of the 8088 to six bytes would probably, on average, have degraded performance since anything that's in the prefetch buffer when a branch is taken gets discarded. If the prefetch buffer isn't full and the 8088 would have one idle bus cycle before a read or write, that read or write will get delayed by three cycles to accommodate a code fetch. That may effectively reduce the cost of the code fetch from four cycles to three, but if the fetched byte ends up being useless and would otherwise not have been fetched, that will simply waste three cycles. – supercat Dec 08 '17 at 16:58
  • @supercat - A corroboration for this is the fact that the 8086 does have a 6-byte queue. In order to make a change between the two designs, Intel's designers must have had a good reason, which suggests they must have run this scenario (at least on paper, if not with an actual prototype) and identified either this or something very similar as an issue. – Jules Feb 01 '18 at 09:18
  • 3
    @Jules: The 6-byte queue is most likely motivated not only by the fact that being larger than four is helpful, but also by the fact that a four-byte instruction that starts on an odd address will be spread throughout three words. – supercat Jul 10 '18 at 17:54
  • I wonder if there would have been any particular problem with using 8-bit parts for I/O but having all of their registers spaced two or [looking forward] four bytes apart? I would think the only extra costs would then be an extra 8-bit address latch, some doubled up chip-select logic, and the fact that RAM would have to be expanded in increments of 32K or 128K instead of 16K/64K. – supercat Jul 10 '18 at 17:59
  • 2
    Didn't know that the 68000 was in play. That would have been really interesting had that happened. – Thorbjørn Ravn Andersen Jan 28 '19 at 01:07
  • 4
    The Peter Norton quote is complete marketing waffle. 8086 never required 16 bit peripheral chips. Check out Intel's original documentation of the 8086 and chips and you will see that the schemas show how to interface it with the legacy 8 bit chips (8259 PIC, 8237 DMA, 8253 PIT, 8255 PIO etc.). It was a selling point of the 8086 that it had a flexible bus that could operate with 8 bit chips (btw it was the same with 68000). No 16 bit CPU could be sold without the capacity to interface 8 bit chips. – Patrick Schlüter Jan 13 '20 at 08:57
  • 2
    @PatrickSchlüter: Using DMA with 8-bit I/O devices on a 16-bit system is awkward unless one has a DMA controller that built for that purpose and includes the ability to bridge data between the upper and lower half of the bus. – supercat Nov 17 '20 at 06:29
  • @supercat - so you have an 8-bit bus and a 16-bit bus, and a pair of bus transcesivers to bridge ops between the two as necessary. See the TI-99/4[A] for an example machine taking this approach to allow 8-bit peripherals to work with a 16-bit CPU. – occipita Nov 20 '20 at 01:17
  • 1
    @occipita: If one wants to be able to perform 16-bit DMA with 16-bit peripherals and 8-bit DMA with 8-bit peripherals, that will require using a DMA controller that can be programmed to advance addresses by one or two with each operation--something that 8-bit DMA controllers don't generally support--or using two separate DMA controllers, whose address lines are connected differently. I suppose maybe one could use a single DMA controller wired so that it could run at double the desired transfer speed and ignore odd addresses when doing 16-bit transfers, but I don't know if anyone did that. – supercat Nov 20 '20 at 15:51
  • 1
    @occipita: As for the TI, I was unaware of its having any sort of DMA. A common cheap way of wiring a 16-bit CPU to 8-bit peripherals is to simply scale the addresses it uses by 2, so that if a device would normally use registers at offsets 0-3, it would instead use even offsets 0-6. If one does that, no sort of bridge or other hardware would be needed, so long as software doesn't mind the choice of register addresses. – supercat Nov 20 '20 at 15:53
12

8-bit data bus designs were generally dramatically cheaper than 16-bit designs because they required half as many RAM chips: DRAMs of the time conventionally stored a single bit per address. So an 8-bit machine needed eight of them to populate a memory region. A 16-bit machine needed sixteen. The 8088 has an 8-bit data bus whereas the 8086 has a 16-bit data bus, so the 8088 is a 16-bit chip for these purposes.

The IBM 5150 uses 64kx1 DRAM chips per its technical reference manual section 1-13. So when accessing anything in its 64kb of motherboard RAM, eight chips respond at once, each providing or receiving a single bit.

Chenmunka
  • 8,141
  • 3
  • 39
  • 65
Tommy
  • 36,843
  • 2
  • 124
  • 171
  • 2
    But surely that would only apply if you are willing to have just half as much RAM? If you want the same amount as the 16-bit design would have had, surely you still need the same number of chips? – rwallace Apr 27 '17 at 13:58
  • 2
    @rwallace you could use higher-density chips instead. – Stephen Kitt Apr 27 '17 at 14:02
  • 1
    If you wanted a 16-bit data bus, you'd need 16 chips at the absolute minimum. If you settled for an 8-bit data bus, you need only 8. IBM has then picked a total amount of RAM that means they need only eight. There are amounts of RAM you wouldn't be able to do with only eight chips, but IBM didn't ship such an amount in the original PC. – Tommy Apr 27 '17 at 14:05
  • 6
    I think the original IBM PC used 16Kbx1 RAM in 4 banks, such that it could have been wired to a 16-bit data bus. http://www.minuszerodegrees.net/5150/ram/5150_ram_16_64.htm – Brian H Apr 27 '17 at 15:54
  • 1
    The link I provided is to the official IBM documentation and states 64kx1 but looking closer it's also from 1984. So a board revision may have occurred. – Tommy Apr 27 '17 at 16:31
  • 8
    You could say that they were DRAMatically cheaper – anna328p Apr 27 '17 at 18:57
  • 1
    The smallest memory configuration appears to be 16 kb. – Thorbjørn Ravn Andersen Apr 28 '17 at 09:58
  • 2
    A 16kB memory configuration would have been essentially useless. In terms of anything that actually got built, it would have been about reorganizing the same DRAMs already used, but it would have meant more traces. And since you couldn't get a large amount of memory on any of the original IBM boards, it would have had to extend to the expansion connectors, which would have required drastic reworking to support 16 bits. So it wasn't a DRAM cost issue, but rather an interconnect one. – Chris Stratton Apr 28 '17 at 15:49
  • 2
    The original PC1 used 16K chips and started with 32K. The PCG introduced in 1982 used 64K chips and started with 64K. I found an ad. from 1982 offering 64KB at $98, but I think the official price was about double ! – grahamj42 Aug 05 '18 at 00:17
  • Also ROM chips. On a 16 bit bus you required at least 2 ROM chips. – Patrick Schlüter Jan 13 '20 at 08:58
  • @ChrisStratton "A 16kB memory configuration would have been essentially useless" ... nonetheless, IBM did manufacture and market such systems (althouh anecdotal evidence suggests very few of them were actually sold). – occipita Nov 20 '20 at 01:23
5

One should not ignore the cost of DRAM chips at the time when the IBM PC was originally designed. Circa 1980, the marked-up retail price of a board with 64 kilobytes of DRAM was around $400 (that's over $1200 in 2017 dollars). The high volume low cost DRAM memory chips were 1-bit wide. Doubling the cost of that DRAM (from 8 to 16 1-bit memory chips) would be required in the minimal entry-level (cassette-tape with BASIC in ROM!) PC to support a 16-bit processor.

hotpaw2
  • 8,183
  • 1
  • 19
  • 46
  • 2
    But how many systems did IBM really sell with cassette tape and minimal memory? That lowest configuration made the PC more competitive with the Apple II and other home computers, but I would argue that the target markets were businesses & power users, both of which would jump straight to floppy drives + maximum RAM they could afford. – manassehkatz-Moving 2 Codidact Jun 23 '17 at 20:01
  • 2
    @manassehkatz - the question isn't how many did they sell (which, from all I understand, is very few), but how many did they expect to sell. From my understanding, IBM's idea was to have a machine that was positioned against the other home computers of the era, particularly the TRS-80 and Apple II. Both of those sold large numbers of 16K machines. But IBM of course misjudged the market -- hence they very quickly had to redesign the machine. AFAICT, production of the 16K model stopped some time around October 1981, only 2-3 months after launch. – Jules Feb 01 '18 at 09:42
  • 1
    ... I don't have a firm date for when production stopped, but the last machines issued with the 16KB-64KB motherboard have a BIOS dated 19 October 1981; later BIOS versions, including one released 27 October 1981, are apparently incompatible with machines that have less than 64KB, which suggests to me that any 16KB machines sold after that date must have been from old inventory, and that production had probably entirely switched to the new design motherboard, which supported 64KB minimum and 256KB maximum configurations. – Jules Feb 01 '18 at 09:48