The first commercial microcomputer was the Intel 4004, introduced in 1971. It cost $60, which is $350 in today’s money. These devices fascinated me, but $350 was too much to spend on something of no practical value. Then in 1976 RCA introduced the CDP 1802 microprocessor. This device was used in the Galileo spacecraft because it can run in a very low power mode. It is still made and you can buy one new for $4.95.
This device interested me for two reasons. First, it was relatively inexpensive. I don’t remember the price, although it was more than $5. Second, it had a built-in capability called DMA (Direct Memory Access) which made it possible to input information into the memory with very little additional hardware. So I decided to build a computer.
While in graduate school I had a job one summer working for Honeywell. My assignment was to write a program to minimize the total wire lengths in a wire-wrapped board. Wire wrap is a technique used to interconnect electronic components. Commercially, wire wrap circuit boards are assembled by automated machines, but the technique can be used for hand-made boards. It is a very painstaking and exacting job, because every one of the hundreds of wires interconnecting the components must be individually cut to length, stripped of insulation at each end, and then attached to the correct two pins of the electronic component sockets using a wrapping device (a “wire wrap gun.” Only three or four wires can be attached to each pin, so when building a complex circuit you have to plan the wiring carefully.
The computer I built consisted of a main circuit board which was about 6” X 12” plus three auxiliary boards about 4” X 8” each. My computer had about 60 integrated circuit devices, each with 14 or more pins. Many had 24 pins. The CDP 1802 was the largest chip with 40 pins. So, in all, there were well over 1000 pins that had to be interconnected, and a single error would render the computer inoperable.
Like most computers, my computer had to have lots of things in addition to the microprocessor. It needed two kinds of memory: the volatile memory (RAM) which held programs and data while the computer was running, but which forgot everything when the computer was turned off, and the read-only memory (ROM) which was pre-loaded with information that remained unchanged. Modern read-only memory can be altered easily, but back then programming the data into the ROM was difficult. First the memory had to be erased completely and then the new data programmed into it, using much higher voltages than were normally used in the computer. This ROM programming usually was done separately from the computer using a special device.
Fortunately my job at Bell Labs gave me access to several things I needed. I could use the computers and equipment at work to program data into my ROM memory. And I could borrow a wire wrap gun.
In addition to the RAM and ROM, my computer needed some sort of input device, some sort of output device, and some way to get it started. I can’t remember what I used for input. Probably I used a keyboard. For output I used an oscilloscope, usually used for displaying electric waveforms. An oscilloscope was essential when building electronic devices, to allow one to see what a circuit is doing, so of course I had one. I built into my computer the ability to display text on my oscilloscope, in 16 lines of 16 characters each.
Finally, I needed a way to tell the computer how to start running. Here the built-in DMA capability of the CDP 1802 was crucially important. My computer had a row of 8 toggle switches, representing one word of data. it also had two toggle switches and a pushbutton. The two toggle switches allowed me to set the computer to run, stop, or load. In the load position I could use the eight switches and the pushbutton to load data into the machine’s memory. Just a few words input manually were sufficient to tell the computer to start running the program stored in the ROM.
After designing my computer and checking the design carefully, I wrote out a list of each of the hundreds of wire wrap connections to be made. I checked everything carefully, because I knew that a single error probably would render the computer inoperable. I carefully made each of the connections, and finally turned the computer on. To my surprise, it worked!
However, as I ran the computer I discovered that occasionally, at random, the computer would fail. I was sure that I had made some mistake in wiring the machine. I spent hours checking everything, but could not fine the mistake. Finally I turned my attention to the software I had written. Since the error seemed to occur randomly, I didn’t think the software was at fault. But it was. From this I learned that if a computer does not work, the problem is probably the software, not the hardware.
– Rudd Canaday (ruddcanaday.com)
– Start of blog: My adventures in software