ENIAC: The Way We Were

When I first got interested in computers, it was all but impossible for an individual to own a computer outright. Even a “small” machine cost a fortune not to mention requiring specialized power, cooling, and maintenance. Then there started to be some rumblings of home computers (like the Mark 8 we recently saw a replica of) and the Altair 8800 burst on the scene. By today’s standards, these are hardly computers. Even an 8-bit Arduino can outperform these old machines.

As much disparity as there is between an Altair 8800 and a modern personal computer, looking even further back is fascinating. The differences between the original computers from the 1940s and anything even remotely “modern” like an Altair or a PC are astounding. If you are interested in that kind of history, you should read a paper entitled “Electronic Computing Circuits of the ENIAC” by [Arthur W. Burks].

These mid-century designers used tubes and were blazing new ground. Part of what makes the ENIAC so different is that it had a different design principle than a modern computer. It was less a general purpose stored-program computer and more of a collection of logic circuits that could be configured to solve problems — sort of a giant vacuum tube FPGA, if you will. It used some internal representations that proved to be suboptimal which also makes it seem strange. The EDSAC — a later device — was closer to what we think of as a computer. Yet the ENIAC was a major step in the direction of a practical digital computer.

Cost and Size

eniac
Programming the ENIAC in 1951 (±4 years)
[Image Source: Public Domain]
The size of ENIAC is hard to imagine. The device had about 18,000 tubes, 7,000 diodes, 70,000 resistors, 10,000 capacitors, and 6,000 switches. There were 5 million hand-soldered joints! ([Thomas Haigh] tells us that while this is widely reported, the real number was about 500,000.) Physically, it stood 10 feet tall, 3 feet deep, and 100 feet long. The tube filaments alone required 80 kW of power. Even the cooling system consumed 20 kW. In total, it took 150 kW to run the beast.

The cost of the machine was about $487,000. Almost a half-million dollars in 1946 is plenty. But that’s nearly seven million dollars in today’s money. What was worth that kind of expenditure? The military built firing tables for shell trajectories. From the [Burks] paper:

“A skilled computer with a desk machine can compute a 60-second trajectory in about twenty hours…”

Keep in mind that in 1946, a computer was a person. [Burks] goes on to say that a differential analyzer can do the same job in 15 minutes. ENIAC, on the other hand, could do it in 30 seconds and with a greater precision than the differential analyzer.

Keeping it Running

Tubes aren’t known for being highly reliable. In fact, an old friend of mine worked on the Whirlwind — another early computer with “only” 5,000 tubes. He said they kept good tubes in the right pocket of their lab coat and burned out tubes in the left. When the machine stopped, they would roam around looking for the dark tube and fill one pocket while emptying the other.

According to [Burks], to minimize this problem the tubes operated far below their rated values. A filament rated for 6.3V, for example, would run at 5.7V. Like a modern computer, ENIAC operated on a master clock and using digital switching to minimize timing and parameter variations in different tubes.

Cards and Decimal Delight

The original ENIAC had no memory as we think of memory. [Burks] describes that some internal memory resides in dual triodes operating as a flip-flop (also known as an Eccles-Jordan circuit). However, some function tables were no more than a matrix of resistors—this is read-only, of course. [Burks] also asserts that the plug wires also form a kind of memory. The machine did have punched card input and output and in 1953, the machine had 100 words of magnetic core added.

Although the machine used digital logic, it didn’t use binary. Instead, the computer used decimal digits stored in a ring counter (see schematic below). This took 36 tubes (some of which were actually two tubes in one envelope) per digit. It was the electronic analog of a mechanical counter. Pulses advance the count for each digit and an overflow advances the next virtual wheel.

Units

There were 20 ten-digit accumulators (that’s 7,200 tubes right there). These could perform 5,000 additions or subtractions per second. Some of the accumulators could multiply (385 multiplications per second) and others could do divisions and square roots. The machine could do 40 divisions per second or 3 square roots.

The speeds are somewhat misleading as it was possible to set up multiple operations to proceed at once — early parallel processing. Also, things like multiplication could go faster depending on the number of digits in the operands.

You can find a lot more detail about the device’s design in the paper. However, that’s not what you really want, is it?

Hands On

There was a time when it would have been nearly impossible to try your hand at programming the ENIAC. Now, you can simulate one using a Java program. If you decide to accept the challenge, you’ll probably want to read the operator’s manual ([Burks] was also one of the authors of the manual).

I’ll start you off with a very simple example. When you start the Applet, you can load a few example programs or some configurations. Pick the “Small” configuration which only has a few units but is easier to manage for a start. It should look like this:

eniac1

The top left box is some indicator lights (they will spell GO when running). The next box to the right shows the current clock state. The box below that controls the clock. You can set the frequency with the slider. Back to the top, the two boxes with the 0-9 lights are the accumulators. You can click on them to set a value, or just read the lights. The box with the picture in it is the initiating unit and you’ll use it to make the program run. You can let your mouse hover over the various elements to see what each part is.

The bottom rows contain interconnects. If you let the mouse float over them, you’ll see they are numbered. As you might expect, number 5 on the left connects to number 5 on the right, for example. The same arrangement is right under the accumulators, except those connect entire numbers, not just signals.

The units with all the rotary switches are where you do the bulk of the programming. If you hover your mouse over the various elements, you’ll see what each switch does (most of them are duplicates, but have different numbers; you’ll see why in a minute).

Here’s a simple setup to add six (stored in the left accumulator) into the right accumulator (use the blue numbers in the figure below if you get lost).

  1. Draw a wire from the terminal on the initiating unit (the box with the picture) to the nearby program connector 1 in tray A (the leftmost terminal on the top row of the interconnect trays).
  2. On the cycling unit (the clock), turn the knob to infinity.
  3. In the box with the switches, there are two connectors at the left (IL1 and IL2). Draw wires between them in both boxes.
  4. On the right side of tray ‘A’ there are terminals. Connect program connector 1 to program connector 1 in each accumulator box.
  5. In the top right corner of each of those same boxes is a connector, IR1. Click on it to install a shorting plug (repeat for both boxes).
  6. In the left box with the switches, find operation switch 1 and turn it to A (not alpha, but A).
  7. In that same box, drag a cable from digit connector A to the connector in tray 1, just above it.
  8. In the rightmost box with the switches, drag a cable from digit connector alpha to the nearby tray 1 connector.
  9. Turn on all four filament switches (one in each unit).
  10. In the left-hand accumulator, click on the 6 in the rightmost column. This represents the number 6.

After all this, your setup should look like this (except the blue numbers, of course):

eniac2

If everything looks good, press the Go button in the initiator unit. At first, it may appear that nothing is happening. If the clock is slow (which it is by default) it will take a while for things to start since the machine won’t really run until the clock starts at the beginning. This is always true, but if you crank up the clock speed, you won’t notice so much. Don’t at first, though, because it is interesting to observe the machine operate at slow speed.

You’ll see that the first accumulator actually cycles through, creating pulses to send to the other accumulator. After one cycle, it will stop and now both accumulators will contain 6. Press Go again and when things are done, the result will be 12.

Wait, What?

I told you that it doesn’t resemble modern programming very much. The short description is that the initiator causes the first accumulator to dump its contents as pulses on tray 1 (via the A output). The second accumulator receives those pulses via the alpha channel and uses them to advance the virtual wheel I mentioned earlier.

Try moving to operation 5 (instead of 1) in each accumulator. Then set repeat switch 5 to some value in both boxes (say, 4, for example). Now, the result will wind up being 6 times 4 and if you watch it execute, you’ll see why.

First Principles

Spend a day programming ENIAC and you’ll appreciate our modern tools. The emacs vs vi war doesn’t seem like such a big deal after you’ve spent a day pushing patch cords around. In general, I like the idea of going back to first principles. However, if I were teaching CPU design, I’m not sure I’d go this far back to start. Understanding how ENIAC and other computers of that period operated can give you some insights. Reading the [Burks] paper gives a lot of insight into the design tradeoffs and while the techniques aren’t likely to be useful today, the approach to solving problems can be instructive.

The Java program is neat because it runs anywhere and it is visually appealing. If you are serious about simulating the ENIAC and you don’t mind downloading some software, there are other options that simulate more of the device.

For some deep history on the construction and early use of ENIAC, you might also enjoy the video below from computer historian [Dr. Thomas Haigh]. He mentions that some of the quoted speeds for the machine were not reliable, and also points out a lot of the unsung heros behind the machine’s development. If you want to see some more example programs, you can find some on the web site for his book (look under supporting technical material).

[Featured and Thumbnail images are U.S. Army Photos via Historic Computer Images]

33 thoughts on “ENIAC: The Way We Were

  1. One thing I really have never understood about these old machines is why they used full-sized vacuum tubes, when smaller envelope types were already available at the time. And why would they have chosen to use decimal as opposed to binary – again even at the time binary logic was known.

    1. When I looked at ENIAC a while ago (I’ll be checking out the posted information later) I was surprised how much it owed to the Babbage difference engine.

      If decatrons had been available at the time they’d have probably tried those (with all the inherent problems you end up with after uneven wear).

      The choice of valves may have had more to do with what was available in large quantities with a (relatively) long lifespan.

      1. I suspect “available in large quantities” translates to “lower cost”. That, and proven reliability. They’re probably consumer tubes used in radios or such. When Tommy Flowers built Colossus, he used parts from telephone switches, because he knew them, and because he knew he could get them in quantity and that they were reliable when used properly (and never powered down)

          1. And, when he wanted to design telephone switches with valves, his supervisors wouldn’t let him, because, they claimed, the technology hadn’t been proven.

            Flowers was forbidden by the Official Secrets Act, from telling them that it had been, and that he had done it.

      1. In my opinion both arguments are very weak, particularly the latter one, but that of course is with the benefit of hindsight. I also think that passage has a bit of revisionist odor about it, but I’ll let that pass.

      1. We owe a great deal to these pioneers and I am not out to diminish their contributions, but the fact is that many of them simply made wrong choices and many of the explanations that I have seen and heard, especially from some of them, have a post hoc smell about them. I understand they were often working in relative isolation, and most of them did not have a data processing background, (such as the field was in that day) and due to the War they were rarely aware of other groups working on similar projects. But having said all that, mistakes were made that demonstrate a clear lack of insight, and an honest history should not try and paper this over.

  2. There was only one ENIAC made and various parts of it are scattered in museums. Unfortunately much of the computer is gone. Tom’s book ENIAC in Action is superb! Anyone who wants to see one of the later UNIVAC computers in person can visit a specialty museum, such as the Computer History Museum (Mountain View, California), Vintage Computer Federation museum (Wall, New Jersey), and the Smithsonian (D.C.)

  3. I can also recommend “Eniac: The Triumphs and Tragedies of the World’s First Computer”, by Scott McCartney. I read it a few years ago and enjoyed it. I’ll have to read the book mentioned above. I’ve become very interested in the early history of computing machines. I’m not quite old enough to have used a vacuum tube machine, but I have used systems that were built of discrete transistors and had magnetic core memory.

    I’ve seen the pieces of ENIAC that the Smithsonian has (currently not on display) and the parts in the Computer History Museum in Mountain View. I plan to go up to Philadelphia some time and see the sections at the Moore School of Engineering, where it was built. Surprisingly, none of it is on display at Aberdeen, just up the road from me, where it was installed.

    ENIAC was a one-off, as noted. As they were building it, Eckert came up with what is now called the von Neumann architecture (because it’s described in von Neumann’s paper) and went on to build EDVAC and the Univac, which were von Neumann designs. As fascinating as these systems are, I’m very glad I never had to program any of them!

  4. People interested in 1950s computing history might find the book “A Computer Called Leo” by Georgina Ferry a good read. It discusses the computer developed for use by the Lyons Tea Shops in the UK – possibly the world’s first office computer.

    Also “The First Computers – History and Architectures”, edited by Raul Rojas.

  5. The JAVA simulator needs a random tube burnout option. :) “A filament rated for 6.3V, for example, would run at 5.7V.” Undervolting CPUs, as old as the electronic computer.

  6. Sorry, crap done while writing former comment…

    Another strange phrasing, right at the beg of the article :
    “By [that] time, it all but impossible to or an individual to own a computer”.
    From my understanding, it was, then, very easy to get its own computer in early times…
    Wasn’t it ?

  7. this line,
    “Part of what makes the ENIAC so different is that it had a different design principle than a modern computer. It was less a general purpose stored-program computer and more of a collection of logic circuits that could be configured to solve problems — sort of a giant vacuum tube FPGA, if you will.”

    This is analogous to Microcode Programming, versus say Machine code, a level of programming which is as close to bare-metal as you can get. Yet, as they describe, they also had the luxury of routing the cable connections independently, which the ordinary ASIC processor has little-to-no option. But, the present day Reconfigurable FPGA processor can very well accomplish this. Even the early computers in the 50s,60s,70s _and_ some in the 80s used this. And so modern computers do have a historical relationship to the Eniac [other than home computers]

    regarding Decimal mode versus Binary mode,
    Yes, electronics using binary logic was already known by the 1930s, both using relays and vacuum tubes. As in the Zuse and the ABC. It is very interesting to observe how these developments occur in parallel in separate continents. But this choice can be more of a preference. The trade off in the amount of Vacuum Tubes between each method is not directly related. Because this involves which system architecture is designed. Each method would have it’s advantages and disadvantages during that era. Modern day computers [1960-present] found it advantageous to use binary logic instead since the components became smaller. The ratio of components became less when scaling up to support longer numbers, especially floating point numbers in hardware.

    It is interesting to note how the Eniac team switched to electronics using binary logic right after in their 2nd computer.
    Dan

  8. I urge everyone to read my interviews with Pres Eckert, the Chief Engineer and designer of ENIAC. Eckert and Mauchley led the team that not only built the first computer, they went on to build BINAC, EDSAC and a string of UNIVAC computers. He answers the question about the choice of tubes and wire. Not only was ENIAC first, it was a whole system, it worked and it kept working for more than a decade. Whole system! Not an adding machine. or calculator. Note Eckert was on the employ of UNISYS to the end of his life. He was working on computer design through the 1990’s

    http://www.kurzweilai.net/from-eniac-to-everyone-talking-with-j-presper-eckert
    http://www.kurzweilai.net/alexander-randall-5th

  9. Arthur Burke (quoted here) was a professor of mine at University Of Michigan. He had a piece of the ENIAC there, I think in his office. He was quite amuse that his wife was a “calculator”, mathematician who did the charts of numbers before the ENIAC.

Leave a Reply to LenCancel reply

Please be kind and respectful to help make the comments section excellent. (Comment Policy)

This site uses Akismet to reduce spam. Learn how your comment data is processed.