ENIAC                             U. S. Army

A Logical Coding System Applied to the ENIAC


Reduced to simplest language the basic notion of von Neumann's programming method is to build complicated routines from a small (not necessarily minimal) set of elementary orders. In our case, the number of these elementary orders is 60. Von Neumann's largest single contribution to the application of his methods to the ENIAC was to point out how 60 distinct 2-digit numbers can be converted into 60 distinct CPP's, each of which can in turn stimulate 1 of the 60 desired orders.

It would have been possible to use a vocabulary of 51 orders without changing the ENIAC at all. However, by the addition of four small units, it became possible to speed the process up considerably and have 60 orders, therefore, these units were constructed. The first of them is a 10-stage stepper which, associated with the 10 6-stage steppers of the master programmer, constitute the converter. This device operates as follows: 1 digit, (alpha), of a 2-digit number, 10*(alpha) + (beta), is fed into the direct input of the 10-stage stepper, setting it to stage (alpha); the other digit, (beta), is fed to the direct inputs of the 10 6-stage steppers setting them to stage (beta). A CPP to the ordinary input of the 10-stage stepper causes a CPP to go from the (alpha) th output of that stepper to the ordinary input of the (alpha) th stepper. One add-time later, a pulse (alpha beta) is emitted from stage (beta) of stepper (alpha).

Since (alpha) can be 0,1,---,9 and (beta) can be 0,1,---5, there are 60 distinct pulses which can be obtained by converting the corresponding two- digit number. As a matter of practice, the pair of digits (alpha beta) comes from the function table, but not directly. Instead, a 12-digit number is sent 6 times from the function table to a device we shall call the order selector. It is a set of 12 gates controlled in pairs by a 6-stage ring. The order selector allows the first pair of digits to pass the first time, the second pair the second time, etc., until all six pairs of digits from one row of the function table have been converted, at which time a pulse from the sixth stage of the selector ring causes the function table argument to be increased by one and clears the selector ring back to stage one.

There are three function tables and we may desire to use any argument with any one of the three function tables. This is done by putting a three- digit address in accumulator six in the right three digit positions (called positions 1,2,3). The third digit, i, is first sent to a six-stage stepper called the function table selector which emits a pulse one add-time later to stimulate the corresponding function table F[i]. The function table itself then stimulates accumulator 6 to transmit the first 2 digits 10*(delta) + (gamma) for an argument.

Figure 2.1

Figure 2.2

It then transmits F[i] (10*(delta) + (gamma) - 2) to the order selector whence a certain pair of digits, 10*(beta) + (alpha), of F[i] (10*(delta) + (gamma) - 2) goes to the convertor to be converted to a pulse to stimulate the corresponding operation. This whole basic sequence is summarized in detail in Figure 2.2. The basic sequence precedes every order; however, in the case of most orders it is programmed to start before the preceding order has finished. Thus, though the basic sequence takes seven add-times, the basic sequence plus any one of many of the orders also takes seven add-times.

The pulses which stimulate the 60 orders are listed in the following table.

Table 2.1


Often it is desirable to have many different pulses stimulate the same operation (as well as distinct ones). This may be accomplished with the pulse amplifiers (eight units, 11 amplifiers per unit) using the one-way pulse transmission property of a vacuum tube. In the following table is shown the hierarchy of CPP pulses obtained with the pulse amplifiers.

Table 2.2