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.
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.eClicking 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:
Co
, 1P
, 1A
: These
buttons select the
Continuous (normal operating mode),
1 Pulse (single cycle unit pulse for each press of the PULSE
button), and 1 Add (running
one addition time for each press of the PULSE
button)
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.
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.
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.
gzip
compressed tar
files.