Project PX, as the military called the classified ENIAC effort, started in June 1943. From the beginning, the group’s managers and engineers were under terrific pressure. Not only were their reputations, and the reputation of the Moore School, at stake, but the BRL was falling increasingly behind the demand for firing tables. By the summer of 1944, the situation had become hopeless; the BRL was incapable of producing more than about fifteen tables a week, yet the number of tabular requests had reached forty a week. Mauchly, Eckert, and the project’s other engineers (about a dozen men altogether) were keenly aware of ENIAC’s importance to the war effort. Moreover, every one of them had friends or relatives in the army, and the contrast between safe, cozy Philadelphia and the front was not lost on them. They worked long, hard, and brilliantly, and emerged from their corner of the war with distinction.
The general nature of ENIAC had been determined long before the project began. As Mauchly, inspired by Atanasoff, had written in his memo, the machine was to be “in every sense the electrical analogue” of a mechanical calculator. That meant that ENIAC would be a decimal, not binary, machine. Instead of a general- purpose central processor, it would carry out arithmetic operations in various separate units – accumulators, multipliers, and the like. And instead of a separate general-purpose memory, it would store numbers in the accumulators as well as in a couple of external, or peripheral, units (a conventional punch card reader and three specially designed “function tables” that held mathematical constants in large banks of numbered switches).
Mauchly apparently borrowed several technical ideas from Atanasoff, the most important being the all-important notion of using tubes as switches. Another was the idea of synchronizing ENIAC’s internal operations with an electronic timer, whose pulses acted as a drummer that kept the machine’s many simultaneous operations marching in step. At the same time, however, he (and Eckert) ignored some of Atanasoff’s best ideas, eschewing, for example, a careful division between the ABC’s memory and arithmetic units – a division that heightened the efficiency of the ABC. Moreover, Mauchly and Eckert also ignored Atanasoff’s use of binary math and Boolean logic, which made ENIAC unnecessarily complicated.
Yet Mauchly and Eckert decided to endow ENIAC with at least three critically important features missing from the ABC: high speed, programmability, and generality of purpose. Even though ENIAC’s primary function was the computation of firing tables, no one knew precisely how a digital machine ought to go about doing that mathematically. Therefore, ENIAC was given the ability to solve almost all mathematical problems in accordance with a specified set of instructions. Nevertheless, ENIAC fell short of being a full-fledged computer in the modern sense of the term. Like the Analytical Engine, Zuse’s calculators, the Mark I, and the ABC, ENIAC was a program-controlled calculator. But it was thousands of times faster and more powerful than any of these machines and, for these and other reasons, was clearly in a class by itself. It was a revolutionary achievement – the bridge to the invention of the modern computer.
Since ENIAC’s general structure had been set by Brainerd’s April 1943 proposal to the BRL, the first order of business was the design and construction of its most important component, the accumulator. At Mauchly’s suggestion, Eckert studied the circuits used in cosmic ray recorders, but they turned out to be, surprisingly, too slow. Instead, Eckert devised a clever gadget based on the flip-flop circuit. He installed twenty tubes – two for each of the ten digits – in a long panel, using the first pair of tubes to represent the number 1, the second pair the number 2, and so on. When, say, a signal signifying 2 entered the panel, one of the tubes in the pair representing that number flipped off. (Actually, its voltage fell.) At the same time, the other tube in the pair flopped on, thus storing a 2 (or adding a 2). In subtraction, the process was reversed: the lighted tube was flipped off and its partner flopped on.
By June 1944 – about a year after the ENIAC project had begun – the first two accumulators were completed. Each one was about eight feet tall, two feet wide, and three feet thick, and contained ten of Eckert’s twenty-tubed panels, or decade ring counters, which gave each one the capacity to add, subtract, or store a ten-digit decimal number. (One of the ten counters represented the units column, another the tens column, and so on.) Operating at 200,000 pulses a second, the accumulators were twice as fast as ENIAC’s stipulated speed and they demonstrated, beyond any doubt, the feasibility of the project. Their completion was a turning point for ENIAC. Pleased with the devices, the BRL and the Moore School decided to boost the number of accumulators in ENIAC from the original four to twenty. As a result, ENIAC took longer to build, but the outcome was a considerably more powerful machine.
Eckert also gave a great deal of thought to the reliability of ENIAC’s tubes. Fragile, fickle, power-hungry devices, they were the weakest link in the machine. One faulty tube could stymie ENIAC and invalidate its calculations, and most engineers (those who knew about Project PX, anyway) believed that ENIAC, which would employ almost twenty thousand tubes, would sink on this rock. No other invention had ever contained more than a few thousand tubes; an electronic version of the differential analyzer completed at MIT in 1942 was the record holder, with some two thousand tubes. But it was an analog device, and a few malfunctioning tubes didn’t necessarily jeopardize its results. Fortunately, Eckert devised a makeshift solution. He not only had ENIAC’s tubes tested beforehand – an obvious measure – but ran them well below their rated voltages, which dramatically increased both their endurance and performance. Nevertheless, tube failure remained one of ENIAC’s most serious shortcomings.
It took about a year to design ENIAC and a year and a half to build it. There were the usual construction delays – unobtainable parts, faulty components, errors in the design and the wiring – and the machine wasn’t finished until November 1945, about three months after the Japanese surrender. It had run about 200 percent over budget. According to Goldstine, the military liaison and the officer who had brought Mauchly’s idea to the attention of the BRL, the project had cost approximately $500,000, including the expense of moving the machine to Aberdeen in 1946, where it labored until 1955. But the BRL and the world as a whole unquestionably got their money’s worth, for ENIAC kicked off the computer industry.
An enormous concoction of tubes and wires, ENIAC consisted of forty panels arrayed in a horseshoe pattern around the walls of a large room on the ground floor of the Moore School. It contained 17,468 tubes, and approximately 70,000 resistors, 10,000 capacitors, 1,500 relays, and 6,000 manual switches. It was eight feet high, eighty feet long, weighed thirty tons, and consumed 174,000 watts of power, about the same amount of energy generated by a 174-horsepower motor (a typical four-cylinder automobile engine produces about 75 horsepower). Large air blowers had to be installed in the room to dissipate the heat generated by the tubes, which turned out, thanks to Eckert’s common-sense measures, to be far more reliable than anyone expected. Fifty tubes failed in the first month, fifteen in the fifth.
Although ENIAC was much too complicated to examine in detail here, we will outline its structure and operation. The machine’s forty panels contained nine basic units. Three controlled the operations: an initiating unit started and stopped the machine; a master programmer orchestrated its overall activity; and a cycling unit generated an internal drumbeat of 100,000 pulses a second. Three performed the arithmetic: a multiplier; a divider/ square-rooter; and twenty accumulators. Another three handled the input and output: a constant transmitter transferred numbers from a modified IBM punch card reader into the machine; three function table units relayed mathematical constants from the function tables, which rested on wheels outside ENIAC, into the machine; and a printer unit linked ENIAC to an IBM card puncher.
Programming ENIAC was a one-way ticket to the madhouse. You did not sit down at a computer terminal and type in the instructions; instead, you set thousands of switches and plugged in hundreds of cables (like the cables on old telephone operator consoles) by hand, one at a time. In general, it took about two days to set up ENIAC to carry out a program. Since ENIAC was intended to calculate firing tables, no one foresaw the need for a convenient programming process; having set up the machine to compute one firing table, you only had to change a few switches and cables to process another table. However, what ENIAC lacked in programming convenience it made up for in speed: it could multiply 333 ten-digit numbers a second, or add 5,000 of them. While the differential analyzer needed fifteen to thirty minutes to compute a trajectory, ENIAC did the job in twenty seconds.
Exactly how did ENIAC work? Suppose you wanted to add two numbers, x and y. First, you divided the problem up into sections that a machine could digest; for example, read x and y from a punched card, load x into one accumulator, y into another, and so on. Then you figured out precisely how ENIAC’s many units should be linked up and coordinated to execute your instructions; unfortunately, to do that you had to know the machine almost as well as ENIAC’s designers, and writing a complicated program could take months. Next you set up the machine by throwing various switches on the front of the units and by plugging in various cables between the unit’s upper and lower sections; the switches carried out specific instructions while the cables arranged those instructions into the proper sequence. Then you crossed your fingers, took a deep breath, and pushed a button on the initiating unit.
That button dispatched a program pulse to the master programmer, which orchestrated the machine’s overall operation. The master programmer in turn sent a pulse to the unit that ran the card reader, directing that unit to relay the contents (x and y) of the first punch card to the constant transmitter. After that step was accomplished, the card reader control unit emitted a program pulse to one of the accumulators, which sent for x. The accumulator acknowledged x’s receipt by dispatching a pulse back to the master programmer. Now the master programmer repeated the procedure with y, only y was transferred to another accumulator. Next the master programmer directed the contents of the x-bearing accumulator to be loaded into the y-bearing accumulator and, after that was done, sent a signal to the punch card control unit to produce the sum (x + y) on a card.
Got it? Each unit went to work as soon as it received a pulse from the master programmer or another unit and issued a pulse of its own after an operation was finished, thus triggering the next step in the program. The master programmer led the symphony, orchestrating the reading of the cards, the transfer of numbers from one unit to another, the conditional jumps, loops, and subroutines that constitute a typical program, and, finally, the punching out of the result on the cards. The need to set ENIAC up physically was its most serious drawback, and the next step in the development of computers – the one that led to the invention of the modern computer – was the construction of a machine whose wiring didn’t have to be touched and whose programs could be inserted and carried out automatically.