The Bit-Slice Computer

Well, about 1982 I wanted to move up from 8-bit systems, so I started building a 32-bit bit-slice system using AMD 2903 ALU chips and the 2910 sequencer. I built one board with the sequencer and 1 K (expandable to 4K) words of 96 bits for control storage, and the ALU board with 56 32-bit registers and the 2903s and fast carry chips. This all had a bunch of diag/control hardware that ran off the CP/M system, so you could force single instructions into the instruction register and single-cycle execute them, read the data bus, load a program into the control store, etc. I wrote a very sophisticated interface program for controlling and debugging the bit-slice system. You could load a program, start and stop execution, examine and alter registers and so on.

I started writing microcode, using a micro-assembler built in the CP/M macro assembler, and found it to be VERY tedious. I could write a only few instructions per evening! I did write multiply and divide routines and test those, as well as a few other things. I obtained a cast-off 1 MB memory off the university's 370/145. (A friend of mine got the two 370/145 CPUs and the other memory box. Trying to power the 370 up on his 60 A 240 V service was a fool's errand. We were lucky to not blow the transformer off the pole!) Anyway, I still had to build a general bus for the system, and then interface the memory to the bus before I could do much of anything. Then, I'd have to complete the microcode, and come up with an OS for the system. And, I'd left for later putting in the hardware to make N-way branches from the op-code, and OR in the register select fields to select registers from the register stack. Not that difficult, but it would mean ripping up a lot of wire-wrap that was already tested.

My plan was to follow the general scheme of the IBM 360, but add stack instructions. But, it would end up not being much like a 360 architecture, as I was planning to use memory-mapped controllers much like a PDP-11, instead of IBM-style channels. So, I'd be on my own for an OS, at least. (Well, I sure wouldn't want to be running OS/MFT and JCL on it. GAACK!) This was all starting to sound like a really daunting project, but I was still fiddling with it.

But, I did get the bit-slice micro-engine running. It ran at 8 MHz for a two-operand instruction (A=A+B) or 6 MHz for a three-operand (C=A+B). I also made LED display boards for it, 2 boards would display a 32-bit word. Roller switches could be turned to multiplex up to 8 different displays onto each row of LEDs, like higher-end 360's. That's what most of the connectors on the front of the boards are for. But, these turned out to not be all that useful compared to the debugger/monitor program on my CP/M system.

the control store board, front
the control store board, wiring side
the data paths board, front
the data paths board, wiring side
Here's a view of the system in the IBM 370/145 3rd party Memorex memory cabinet. The top is the 2 bit slice boards in their card cage, below that are two Memorex 1 MB static RAM memory units, with ECC controllers and the interface to the 370/145. I never got around to hacking into those boards to remove the ECL interface and tie into the address and data registers. But, perusing the schematics made it look fairly straightforward to do. Top left is the power control board from the memory system, it has a voltmeter and also power and thermal safety logic that shuts it down if any power supply fails or it detects an overheat. Below that is a rack of 100 A 5V power supples, below that is the main breaker and power contactors. This cabinet was made to run off 208 V 3-phase power, but I rigged it for 240 V single-phase. Bottom right is a centifugal furnace blower and plenum for cooling the stack of boards.

Homebuilt CPUs WebRing

JavaScript by Qirien Dhaela

Join the ring?

David Brooks, designer of the Simplex-III homebrew computer, has founded the Homebrew CPUs Web Ring. To join, drop David a line, mentioning your page's URL. He'll then add it to the list.
You will need to copy this code fragment into your page.