ENIAC                             U. S. Army

A Logical Coding System Applied to the ENIAC


There exists a five volume report on the ENIAC prepared by A. Goldstine, H. Huskey, and A. Burks for the Moore School of Electrical Engineering. The report cited and Section 1 of this report consist of a description of the machine and a method for using it which we shall call local programming. Under this method of programming, the machine is given its instructions for each new problem by the setting of large numbers of switches throughout the machine and is informed of the sequence of instructions by the rewiring of variable circuits. The remainder of this report is intended to describe a system of central programming. Such programming is achieved by instructing the machine in a basic vocabulary of complex orders compounded from the machine's primitive operations by local programming and fixed for all problems. The sequence in which these orders are carried out is determined for each problem by the settings of switches on a central organ of the machine.

The principle of central programming for large scale computing machines is not a new one (H. H. Goldstine and J. von Neumann, loc. cit.); only its application to the ENIAC is new.

The Electronic Numerical Integrator and Computer (ENIAC) is a high-speed electronic computing machine which operates on discrete variables. It is capable of performing the arithmetic operations of addition, subtraction, multiplication, division, and square rooting on numbers (with sign indication) expressed in decimal form. The ENIAC, furthermore, remembers numbers which it reads from punched cards, or which are stored on the switches of its so-called function tables, or which are formed in the process of computation, and makes them available as needed. The ENIAC records its results on punched cards from which tables can be automatically printed. Finally, the ENIAC is automatically sequenced, i.e., once set up to follow a routine consisting of operations in its repertoire, it carries out the routine without further human intervention. When instructed in an appropriate routine consisting of arithmetic operations, looking up numbers stored in function tables, etc., the ENIAC can carry out complex mathematical operations such as interpolation and numerical integration and differentiation.

The fundamental signals used in the ENIAC are emitted by its oscillator at the rate of 100,000 per second. The interval between successive signals, 10 microseconds, is designated by the term pulse time. The time unit in which the operation time for various parts of the ENIAC is reckoned is the addition time. An addition time is 20 pulse times or 200 microseconds (1/5,000th of a second). An addition time is so named because it is the time required to complete an addition. Other operations require an integral number of addition times; for example, 10 digit multiplication requires 14 addition times.

The ENIAC proper consists of 40 panels arranged in U shape, 3 portable function tables, a card reader, and a card punch. The term unit of the ENIAC is used to refer to one or more panels and associated devices (the portable function tables, for example) containing the equipment for carrying out certain specific related operations.

The units of the ENIAC can be classified functionally into 4 categories: arithmetic, memory, input and output, and governing. The arithmetic units include 20 accumulators (for addition and subtraction), 1 high-speed multiplier, and 1 combination divider and square rooter. There are two primary memory aspects in the ENIAC: memory for numbers and memory for programming instructions. The constant transmitter, 3 function tables, and the 20 accumulators provide numerical memory. The constant transmitter with its associated card reader reads from punched cards numbers that are changed in the course of a computation and makes these numbers available to the computer as needed. Numbers that remain constant throughout a computation are stored on the switches of the constant transmitter or of the portable function tables and emitted when needed. The accumulators not only function arithmetically, but also can be used to store numbers which are computed in one part of a computation and required in other parts. All units have program controls which contribute to the programming memory in the following ways:

(1) by recognizing the reception of a program input signal which stimulates the unit to perform

(2) by causing the programming circuits to operate (as specified by the setting of program switches when there are options regarding the operation to be performed)

(3) on the completion of the operation, by emitting a program output signal which, by means of program cable connections to program lines, is brought to other units to cause them to operate. The program cable connections and switch settings are established before the computation begins.

The kind of programming described in points 1, 2, and 3 above is described as local programming memory because it is taken care of locally at each unit for that unit. The master programmer provides a certain amount of centralized programming memory by coordinating the local programming of the other units.

The input devices for the ENIAC consist of the card reader and the constant transmitter mentioned above in connection with numerical memory. The printer and card punch record computed results.

The governing units of the ENIAC are the initiating unit and the cycling unit. The initiating unit has controls for turning the power on and off, starting a computation, initial clearing, and other special functions. The cycling unit converts 100 kc sine waves emitted by its oscillator into a fundamental train of signals repeated every addition time (i.e., repeated 5,000 times per second). These signals include various sequences of pulses. The term pulse is used to refer to a voltage change (either positive or negative) from some reference level and the restoration to the reference level which takes place in a short time, between 2 and 5 microseconds.

With a few exceptions digits are communicated from one unit of the ENIAC to another in pulse form. Digit trays stacked above the front panels running from accumulator 1 to the second panel of the constant transmitter are used for this transmission. A digit tray has 11 wires and a ground. Each to ten wires carries the pulses for 1 place of a 10 place decimal number. To represent the digit n (where 0 is less than or equal to n is less than or equal to 9) in a particular decimal place, n pulses are transmitted over the wire associated with that particular decimal place. The 11th wire is used for the transmission of sign information. No pulses are transmitted for sign plus, and 9 pulses for sign minus (see discussion of complements below). Pulses are transmitted over all 11 conductors simultaneously. Units which are to communicate with one another in the course of a computation have their digit input and/or output terminals connected by means of digit cables to the 12 point terminals on a digit trunk. At any given time, only one 10 digit number with its sign may be transferred over a particular digit trunk. More than 1 unit may listen to this number. Through the use of more than one digit trunk, several different numbers may be transferred simultaneously. The units of the ENIAC transmit numerical information by emitting appropriate numbers of the pulses which they receive from the cycling unit. Addition is performed in accumulators by means of 10 decade counters, one counter for each decimal place of a 10 digit number, and a binary counter for sign plus (P) or minus (M). These counters are advanced one step by each pulse received. The decade counters and PM counter of an accumulator are so interconnected that provision is made for carry over. Subtraction is performed by adding the negative of the subtrahend to the minuend.

In order to avoid the necessity for cycling counter backwards, the negative of a number is represented as a complement with respect to a power of ten. Let us consider the decimal point to be located at the extreme right of an accumulator. Then the complement with respect to 10**10 of the positive number stored in an accumulator as P + sum {i=0..9} a[i] . 10**i is formed by transmitting 9 pulses for sign M and by transmitting the digit pulses for 10**10 - sum {i=0..9} a[i] . 10**i. Similarly, the complement with respect to 10**10 of the negative number stored as M + sum {i=0..9} b[i] . 10**i is formed by transmitting no pulses for sign P and by transmitting the digit pulses for 10**10 - sum {i=0..9} b[i] . 10**i.

Because the counters in an accumulator are so connected that there is carry over not only from each decade counter to the one on its left but also from the 10th decade counter to the binary counter for sign, the usual arithmetic properties obtain when complements are used in addition and subtraction.


Before a computation can be performed on the ENIAC by the old method, not only must the digit input and output terminals of the units be connected into digit trunks for the communication of numerical data, but also the units must be set up so as to recognize when they are to operate and which particular operations are to be performed. Program controls and program trays and cables are used to instruct the ENIAC in the programming requirements for a particular computation.

Each unit of the ENIAC has one or more program controls. These controls are either of the repeat or non-repeat type. Non-repeat program controls have an input terminal for a program signal and a receiver. Repeat controls have both an input and an output terminal for a program signal and a transceiver or some logically equivalent device. Each program control on a unit which is capable of more than one operation or which is capable of performing operations in a variety of ways has a set of program switches.

Receivers and transceivers alike have the following properties: (1) they have two stable states which will be referred to as the normal and abnormal states; (2) when a program input signal is received, they are set into the abnormal state; (3) they are so connected (through the program switches, if any) to the programming circuits that in the abnormal state they cause the programming circuits to function appropriately; and (4) when the required routine has been completed, they are reset to the normal state so that activity in the unit ceases. When the set of instructions either set up on the program switches of a repeat control or built into the programming circuits has been completed, the transceiver of a repeat program control causes a central programming pulse to be emitted as a program output pulse from the program control's output terminal.

The program trays, like the digit trays, contain 11 wires and a ground, and have 12 point terminal at each end, so that as many trays as desired can be connected to form a program trunk. Each of the 11 lines running the length of a program trunk is referred to as a program line. The program trays differ from the digit trays only in that at two foot intervals the program trays have a set of 11 two point program terminals (1 wire and a shield) instead of a 12 point digit terminal. Input and output terminals of program controls are connected to the program lines by means of program cables.

The procedure for instructing the ENIAC in its routine, then, consists, in local programming, of setting program switches on the units so that, when stimulated by a program input pulse, the program controls will cause the units to carry out a set of specific operations. The temporal order in which the operations are to follow one another is determined by the manner in which program pulse input and output terminals are connected to program lines. All program controls whose program pulse input terminals are connected into the same program line start to operate simultaneously when the program line carries a program signal. If one of the program controls thus stimulated is a repeat program control and if its program pulse output terminal is connected to a second program line, all program controls whose program input terminals are connected to this second program line start to operate when the routine setup on the repeat program control has been completed.


All units of the ENIAC operate in synchronism with one another, i.e., all units that start to operate at the same time complete their operations either at the same instant or at times that differ by an integral number of addition times. The phrase "complete an operation" covers not only finishing the numerical processes involved in the operation but also the emission of a program output signal.

The basis of this synchronization is the fundamental train of pulses emitted by the cycling unit and delivered to all units of the ENIAC by means of a set of connected trays called the synchronizing trunk. These trays are physically the same as the digit trays. The central programming pulse (CPP) emitted by the cycling unit in pulse time 17 of every addition time cycle plays a major role in such synchronization, since the program output pulse which a repeat program control emits upon the completion of a program results from allowing a CPP to pass. The units of the ENIAC, moreover, have been so designed that in order to complete their operations they require the pulses of either one addition time cycle or of an integral number of addition time cycles.

Even though the electromechanical devices used with the ENIAC, the reader and the card punch, do not take an absolutely definite number of addition time cycles to complete their operations, these units have been integrated into the synchronized system since they have been provided with program controls which emit a CPP as a program output pulse. Units of the ENIAC can even operate in parallel with the card reader since the reader does not emit a program output pulse signifying the completion of reading until it has received as an interlock pulse a program output pulse from some other unit of the ENIAC to indicate that the sequence carried on in parallel with reading has been completed.

Because the units of the ENIAC operate in synchronism with one another and because multiple digit and program trunks have been provided, the operator can schedule parallel operations when planning the setup of a problem. For example, the multiplier can be operating while several accumulators are performing additions and subtractions and while the divider is finding a quotient. Naturally, the scheduling of parallel operations requires that the operator plan for the use of separate digit trunks for the various operations and, in some cases, requires that attention be given to the number of addition times needed for the operations.

It is the sacrifice of the possibility of scheduling parallel operations which, surprisingly, leads to the considerable advantages of the system to be described in Sections 2-7.


The detailed description of the sequence of operations to be followed by the ENIAC is what we call a setup table. As formerly carried out it consisted of a set of sheets of paper with about 27 columns, (one for each accumulator and function table, the constant transmitter, the master programmer, the reader, and the printer) on which were listed chronologically downward the program control settings and input and output pulses for each operation. As we briefly describe each unit we shall sometimes show a typical element of a setup table for that unit.


The accumulator front panel contains, from bottom to top: program trays and sockets; the program control neons; the input, output sockets; the program controls; digit input and output sockets; digit trays and sockets; and finally the counter neons. Typical parts of it are shown in Figure 1.1. Program pulses are routed from a program line to a program input socket 11, 21, etc. by a cable.

Figure 1.1

In Figure 1.2, the numbers and associated letters in the top row show how the digit tray sockets and the accumulator input and output sockets are cabled together. For example, in accumulator 7 the (delta) input socket is connected to the second digit tray and the subtract output socket is connected to digit tray 3.

In each row and column the letter and number in the upper left corner indicate the program tray and wire which carry the CPP which stimulates the operation indicated in that box. The next number, if any, indicates with which program input socket the aforementioned wire is connected. The symbols in the center of the box indicate firstly whether the accumulator is to receive through the (alpha, beta, gamma, delta or epsilon) input socket, or transmit positively or negatively or both, or do nothing; secondly, whether the accumulator should hold the manner or clear it when finished; and thirdly, how many times the operation should be done. The letter and number at the lower right corner indicate the tray and wire which should carry away the output pulse emitted by the accumulator upon completion of the operation. For example, in Figure 1.2, in the 27th add-time CP pulse carried by program tray A, wire 3 stimulates accumulators 6, 7, and 8. Accumulator 6 transmits its contents, a, once on digit tray 1 and retains it; accumulator 7 does nothing, then clears; accumulator 8 receives once from digit tray 1 and holds. Thus a, b, and c are replaced by a, 0, and a + c. At the end of add-time 27, accumulator 6 emits a pulse which is carried on program tray A, wire 4, and stimulates accumulator 8 to send -a-c twice to accumulator 7, then clear. This example illustrates setup tables in general and reminds the reader that addition, subtraction, and transmission are accomplished in one add-time.

Figure 1.2


The multiplier has a front panel similar to that of an accumulator and is associated with four accumulators called the multiplier (11), multiplicand (12), left-hand partial product (13), and product accumulators (15). An element of the setup table for the multiplier is more complicated simply because there are more things to control. The symbols shown in Figure 1.3 indicate that in add-time 56, accumulators 11 and 12 receive into channels (alpha) and (beta) respectively, then in the next 7 + 3 add-times the 7-digit multiplier is multiplied by the 10-digit multiplicand, and in the 12th add- time the answer rounded off the six places is transmitted positively and negatively from accumulator 15 which then clears. The multiplier and multiplicand retain their numbers. At the end of the 11th add-time the CPP is emitted from the multiplier and is carried away on wire 7 of tray C to stimulate some accumulator to receive the product. The decimal is at the left, i.e., only the 10 most significant figures of a 20 digit product are retained.


The divider is similar to the multiplier, with the two differences that the associated accumulators are 4-quotient, 5-numerator, 7-denominator, 9-shifter, and that division requires an indefinite time averaging approximately 130 add-times. The divider is also the square-rooter but accumulator 4 is not associated with square-rooting and the number appearing in accumulator 7 is twice the square-root. In both cases the number in accumulator 5 is replaced by the remainder.


The reader is a piece of IBM equipment which reads eight ten-digit numbers from a card into relay switches called the constant transmitter. Reading takes about 2,500 add-times and like every other operation is stimulated by a CPP and terminates with a CPP.


The eight accumulators 1, 2, 15, 16, 17, 18, 19, and 20 are connected to a piece of IBM equipment called the printer which prints the numbers stored in these accumulators on a card when the printer is stimulated. This requires about 1,500 add-times.


Any of the eight numbers from an IBM card sent by the reader to one of the eight positions A, B -- H in the constant transmitter may be sent out on a digit tray in one add-time as a whole, or only the left or right five digits may be sent. For example, the symbols in Figure 1.4 indicate that in add-time 1,021, the left 5 digits of the first number are sent out on digit tray 1, followed in the next add-time by the right 5 digits of the second number, and in the next add-time by all 10 digits of the 4th number. The numbers transmitted remain in the constant transmitter until a new card is read.


The 3 function tables each contain a portable bank of switches for 200 6-digit numbers which may be used as 100 12-digit numbers and an associated panel of program controls. There is a switch to govern whether the function table looks up F(x-2), F(x-1), F(x), F(x+1) or F(x+2), where x is the number from 0 to 99 sent to it in the second add-time, and a switch to determine the number of times the function is transmitted. For example, from Figure 1.5, in the 21st add-time a CPP from tray K, wire 2, stimulates function Table I. In the next add-time the pulse NC stimulates some accumulator to send an argument from 1 to 99 to function Table I. In the 25th and 26th add-times F(arg-1) is transmitted.

Figure 1.5

In the next section we shall see that the function tables provide the memory for orders as well as numbers.


The master programmer consists of 10 6-stage ring counters called steppers. Each stepper has three inputs and six outputs. The inputs are the direct input, the input, and the clear direct input. N pulses, CPP or digit, to the direct input immediately advance the stepper N stages. A CPP sent to the input causes a CPP to be emitted one add-time later from the output socket associated with that stage of the stepper in which it finds itself; a pulse to the clear direct input immediately clears the stepper to the first stage. The master programmer was designed to permit repeating a sequence of operations an arbitrary fixed number of times and then do another sequence of operations. However, the conditional transfer order to be discussed in Sections 3, 4, 5, 6, and 7 has obviated this use of it and replaced it with another which we shall discuss in the next section.