The files listed below are part of an ENIAC 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:
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.
eniacand that the file is in your path. If you're in a UNIX environment and
eniacis in the current directory but
.is not in your path, then run it with
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.
-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
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.eClicking on the button labeled
INITin 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.
INIT button is part of a hand-held control unit.
The full set of controls on that unit include:
1A: These buttons select the Continuous (normal operating mode), 1 Pulse (single cycle unit pulse for each press of the
PULSEbutton), and 1 Add (running one addition time for each press of the
PULSEbutton) modes, respectively. The current mode is shown in the upper left of the control box.
CLEAR: When this button is pressed, a clear signal is sent to all of the operating units. For most units, this terminates the current program, and the values in accumulators are all set to 0.
READ: Send a starting pulse to the punched card reader in the constant transmitter unit. The program output pulse from the constant transmitter then triggers the remainder of the computation.
INIT: Send a pulse out the initiating unit output to start the computation.
PULSE: Initiate a single step in the 1 Add and 1 Pulse modes.
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.
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
RESET button before loading a new
The original ENIAC included a portable control station that replicated a number of the control buttons and switches in a form that could be carried around the machine. This picture is the only one I've found that shows any detail of the original unit:
And here is a 3D printed approximate replica of it:
The OpenSCAD and STL files can be found on Thingiverse.
The main planned documentation is still yet to be written, but here are some bits that exist so far.