Penn Library

John W. Mauchly and the Development of the ENIAC Computer

Technical Description of the ENIAC

The ENIAC was divided into thirty autonomous units, twenty of which were called accumulators. Each accumulator was essentially a high-speed ten-digit adding machine that could also store the results of its calculations. The ENIAC was a decimal machine, which meant that each of the ten digits in the accumulators counted from zero (0) through nine (9) using a particular configuration of electronic circuits known as a ring counter. To accelerate certain arithmetic operations the ENIAC also had a multiplier and divider-square rooter. The multiplier employed a resistor matrix to perform one-digit multiplications and was designed with additional control circuitry to multiply successive digits drawn from two accumulators holding the multiplier and multiplicand.

The ENIAC was controlled through a train of electronic pulses. Each unit of the ENIAC was capable of issuing a control pulse that would initiate computation in one or more of the other units. This meant that a "computer program" on the ENIAC consisted principally of manually wiring the different units of the machine so that they would perform their operations in the desired sequence. A typical program on the ENIAC thus consisted of a nest of wires interconnecting the various units of the machine. Special wiring trays gave some semblance of order to these wires, but programming the ENIAC was nevertheless a difficult affair.

"Replacing a bad tube meant checking among ENIAC's 19,000 possibilities." (U.S. Army photo, from archives of the ARL Technical Library, courtesy of Mike Muuss; caption from Martin H. Weik, "The ENIAC Story").
The task was somewhat simplified by one unit known as the Master Programmer, designed to perform nested loops (the FOR I=1 to 25 instruction in modern programming languages). Incidentally, because the various units of the ENIAC could operate simultaneously, the ENIAC could perform calculations in parallel. ENIAC programmers tended to avoid this use because the impressive but limited reliability of the ENIAC favored the use of as few units as possible for a given application.

Two women wiring the right side of the ENIAC with a new program (U.S. Army photo, from archives of the ARL Technical Library, courtesy of Mike Muuss).
Some time during the ENIAC's development, the project's engineers and mathematicians (possibly including its female programmers) discovered that with some minor modifications they could perform what would be considered a conditional branch--the IF-THEN statement in modern programming languages. Those associated with the ENIAC had called this "magnitude discrimination." Partly by chance, the control signals on the ENIAC were essentially identical to the data signals, both of which typically were 2 usec pulses placed at ten usec intervals. By connecting one of the data lines of an accumulator into the control line of another, the ENIAC's operations could, in principle, be controlled based on the content of its data (technically known as data-sensitive operations). Certain aspects in the machine's design made necessary a slightly more complicated implementation. Nevertheless, the ENIAC was probably the first electronic machine to support the conditional branch instruction.
Several other units rounded out the basic functions of the ENIAC. A unit known as the "cycling unit" produced the basic pulse patterns used throughout the machine. Three function tables and their associated constant transmitters would deliver specific numbers selected from table of numbers set manually through an array of dials. IBM punch card readers and printers were employed to deliver data into and out of the machine.

Introduction | Previous panel | Next panel

Last update: Thursday, 02-Aug-2012 15:07:44 EDT
Send mail concerning this page to: