Close

Tic-Toc, Click-Clack, and Blinkenlights Too

A project log for DEC H-500 Computer Lab Reproduction

Reproduce the Digital Computer Lab H-500, a training tool from the late 60's aimed at teaching people the basics of logic circuits.

michael-gardiMichael Gardi 05/08/2020 at 16:440 Comments

All of the active controls for the H-500 are located in the lower part of the device. 

These included (taken directly from the Computer Lab Workbook):

So how were these functions implemented back in the late 60's. Like this:

I apologize for the image quality. I'm trying to find a better photo. Looks like this schematic was taped to the back of the frame's rear cover. 

Now I'm not going to pretend that I completely understand all of what is going on in this schematic. Electronics is not my strong suit, I'm more of a digital guy. (if anyone wants to help me out here with a short description of what the above circuit does I would be happy to include it in the write-up.) Suffice it to say that the complexity of reproducing this circuit goes counter to two of my primary design goals with this project: make it easy to reproduce and not too expensive.  

Fortunately I do know what the circuit is supposed to do. So what would be an easy and cheap replacement, well understood by today's community of makers, well an Arduino of course. This is what I came up with:

Rocker and Pulser Switches - The magnetic reeds of the rocker and pulse switches are monitored by eleven inputs that are set with their pull-ups enabled. When the normally open reed switch is "activated" by a magnet its input line will be pulled down. The Arduino sketch monitors changes to the reed switches and will only change the state of it's corresponding output line once the switch has been suitably debounced (three consecutive reads 20 milliseconds apart with the same state).  In this implementation all switches are debounced, not just the pulsers. We are already at 22 I/O lines so it's a good thing that the Arduino I had lying around was a MEGA 2560.

Clock -  Six more inputs with pull-ups enabled were dedicated to monitoring the clock range coarse jumpers.  The clock frequency ranges that each enables can be seen on the diagram above. Ranges are checked from lowest to highest, stopping at the first one found to be enabled with a jumper. Also the potentiometer is read via an analog in line and converted to ten steps (1-10) and applied as a multiplier to the lowest value in the selected range.  So if the clock range set is 10-100, as the potentiometer is turned clockwise, the clock frequencies will be changed to 10, 20, 30, ..., 100 clocks per second.  If no coarse range jumper is set, I leave the clock frequency fixed at one clock per second. Clock pulses are emitted via a digital output line.

Lamp Indicators - Included in this diagram for completeness, the lamp inputs are not processed by the Arduino in any way. Just apply a Hi signal and they will turn on.

Power - A switched potentiometer is used to turn the device on and off as with the original.

Using an Arduino is not without some compromises.  First of all I'm using the excellent TimerOne library to implement interrupt driven clock pulses.  It tops out at about 1,000,000 interrupts per second, so that's my maximum frequency as well, 1,000,000 clocks per second. On a similar note the clock pulse itself is generated using the digitalWriteFast library. Within the clock interrupt the code is simply:

digitalWriteFast(2, HIGH);
digitakWriteFast(2, LOW);

According to the documentation the digitalWriteFast() "call" takes about 125 nanoseconds to execute.  So that means that the clock duration will be somewhere between 125 and 250 nanoseconds. (I'll know more precisely when I can get back into my maker space (kwartzlab) and access a scope.) A little more than the 50 nanosecond duration the original could produce, but I think it will be adequate for my purposes.

I know  that I will probably get some feedback for using a "microprocessor" in this project. If were trying for a more authentic replica I would totally agree. However in this case, where I and am shooting for more of an H-500 Computer Lab working reproduction, the Arduino allows me to simply replace a bunch of discrete components with a cheaper, faster (at least for me), easier, better understood solution. 

I've added my Arduino sketch to the Files section of this project. It's not pretty but gets the job done.

Discussions