ENIAC Simulator and Related Material

ENIAC Simulator

The files listed below are part of an ENAIC simulator that I've recently been developing. It's written in Go and simulates the machine at a very low level. The operation of the ENIAC is simulated at the level of individual pulses. For example, if one accumulator sends the digit 5 to another, it does so by sending 5 pulses. That operation is simulated here by sending 5 messages over Go channels. The reason for simulating it at this level of detail is a desire on my part to use the simulator to better understand exactly how the ENIAC worked.

Here is a screen shot of the ENIAC simulator running as it computes prime numbers. The image links to a higher resolution version.

And here's another image looking head-on at the first eight units as it computes a table of squares:

and a couple more showing the ENIAC simulator running on the PocketCHIP ARM machine with a 480x272 display:

What you'll need

To run the ENIAC simulator, you'll need the binary executable appropriate to your platform. You'll almost certainly want the example ENIAC programs as well. If you want to run with the GUI, then you'll need the images as well as the TCL/Tk package installed and the program wish in your path. The source code is entirely optional. It's pretty rough at the moment, but if you want to download it and take a look, you're welcome to.

Using the Simulator

In the instructions below, it is assumed that you've downloaded the appropriate executable and renamed it simply eniac and that the file is in your path. If you're in a UNIX environment and eniac is in the current directory but . is not in your path, then run it with ./eniac instead.

When running eniac, there are several command-line parameters that can be given. If the simulator is run with the -g option, it runs without the GUI. The -w option is used to specify the size of the rendered image used for the GUI. The available sizes are 480, 720, 1020, 1280, 1360, 1600, 1800, and 1900. By default, the simulator picks the largest size that will completely fit on the screen. Finally, you can specify the name of a file to be read at startup. Such files are normally named with the .e extension and contain commands to specify the wiring and switch settings for a particular ENIAC program.

By way of example, to run the prime number generator from which the screen shot was taken, you can issue the command:

eniac -w 1900 sieve.e
Clicking on the button labeled INIT in the GUI will send the initiating pulse from the initiating unit that begins the computation running. The text box in the lower right hand corner of the GUI shows the punched cards that are generated by the ENIAC as output.

The INIT button is part of a hand-held control unit. The full set of controls on that unit include:

There are two additional buttons to the left of the control box. The button labeled RESET has the effect of removing all of the control and data patch cables and the resetting of all control switches to their initial positions. Pressing the LOAD CONF button brings up a pop-up menu listing the available configurations/programs that can be run on the simulator. Selecting one from the menu, loads the selected set of data and control patch cables and switch settings onto the machine. The configuration system is designed to allow multiple configurations to be read and layered. Therefore, if you want to start running a new program, you should click the RESET button before loading a new configuration.


This simulator is currently at less of a beta level than before. Most of the examples from Goldstine's technical manual have been tested, but there is still more to be done. Also, much documentation is yet to be written. Good luck.


The main planned documentation is still yet to be written, but here are a couple of reference sheets that will probably be appendices in the real documentation.


The Files

With the exception of the binaries, these are all gzip compressed tar files.


Brian L. Stuart