## A Digi-Comp ii Emulator and Simulation using Python

Digi-Comp ii was an amazing mechanical toy computer made in the 1960s. It worked by rolling marbles down a plastic surface filled with toggle switches. A company called Evil Mad Scientist recently released a beautiful wooden re-creation (below).

I decided to write a computer program to emulate (or simulate depending on your point of view) the Digi-Comp ii. My Python programming was a bit rusty because I’ve mostly been using C#, so I thought I’d use Python just for fun.

My demo program multiples 3 and 13. The calling code, with some minor edits to save space, is:

```print "\nBegin Digi-Comp ii simulation \n"
dc = DigiComp()
dc.Initialize(35) # 35 balls in top reservoir
print "\nInitial state: "
dc.Display()

# set up 3 * 13 problem
dc.q1 = 1; dc.q2 = 1; dc.q3 = 0
dc.m1 = 1; dc.m2 = 0; dc.m3 = 1; dc.m4 = 1
dc.multiply = 1
print "\nSettings to compute 3 * 13:"
dc.Display()
# result in A should be 1110010

dc.DoStart()
print "\nResult state (answer in A register):"
dc.Display()

print "\nEnd Digi-Comp ii simulation \n"
```

The simulator is mostly a (not-shown) program-defined class named DigiComp. The program has about 250 lines of Python code. For example, here are two of the class methods:

```def DoStart(self):
if self.top == 0:
print "No balls in top reservoir"
self.Display()
else:
self.top = self.top - 1 # launch ball
self.DoMultiply()

def DoMultiply(self):
if self.multiply == 0: self.DoClear() # go right
elif self.multiply == 1: self.DoD2() # go left
```

The calling code sets Q (called MQ in the Digi-Comp manual) to 110 = 3d. Then it sets M to 1011 = 13d. The DoStart method launches the first virtual ball. The result is in the A register and is 1110010 = 1 + 2 + 4 + 32 = 39d. All in all, it was a fun little exercise.