MC14500 - Nakazoto/UEVTC GitHub Wiki
MC14500
The Motorola MC14500 is a 1-bit Industrial Control Unit specifically designed to replace old relay ladder logic systems. However, it has an accumulating Results Register, a Logic Unit, and other gubbins that make it frighteningly close to a full-on 1-bit microprocessor. It is designed in such a way that the processor can be used in any variety of system configurations by moving memory and program control off chip.
Architecture
The UMC14500 uses a 1-bit data bus and a 4-bit instruction for 16 OpCodes. The basic architecture is centered around the idea of data being stored in an accumulating Result Register (RR). The Logic Unit (LU) will perform operations using the value stored in RR and the value currently asserted to the Data Bus. It will then store the result of the operation back into RR.
Additionally, input into the processor can be gated through the Input Enable Register (IEN). During an STO or STOC operation, the processor will assert to the data bus as well as assert the Write pin. The Write pin can be gated through the Output Enable Register (OEN). Through the use of IEN and OEN, input and output can be effectively gated based upon conditional input, allowing instructions to be skipped.
Here is an architecture diagram for the UE14500 processor.
Instruction Set
This is the Instruction Set of the MC14500.
Hex | Binary | OpCode | Operation |
---|---|---|---|
0 | 0000 | NOP0 | No change in registers. RR -> RR, FLG0 ^ |
1 | 0001 | LD | Load Result Register. Data -> RR |
2 | 0010 | LDC | Load Complement. QData -> RR |
3 | 0011 | AND | AND Data and RR. RR・Data -> RR |
4 | 0100 | ANDC | AND Complement Data and RR. RR・QData -> RR |
5 | 0101 | OR | OR Data and RR. RR or Data -> RR |
6 | 0110 | ORC | OR Complement Data and RR. RR + QData -> RR |
7 | 0111 | XNOR | XNOR Data and RR. If RR = Data, 1 -> RR |
8 | 1000 | STO | Store. RR -> Data, WRT ^ |
9 | 1001 | STOC | Store complement. QRR -> Data, WRT ^ |
A | 1010 | IEN | Input Enable Register. Data -> IEN |
B | 1011 | OEN | Output Enable Register. Data -> OEN |
C | 1100 | JMP | Jump. JMP Flag ^ |
D | 1101 | RTN | Return from subroutine. RTN Flag ^, Skip next instruction |
E | 1110 | SKZ | Skip if Zero. IF RR = 0, Skip next instruction |
F | 1111 | NOPF | No change in registers. RR -> RR, FLGF ^ |
Minimal ICU System
The ICU handbook outlines an absolute minimal ICU system. It features just an 8-bit instruction word (4-bit instruction, 1-bit chip select, 3-bit memory address), three I/O registers, and a program clock that can be any length the user desires (though JMP and JSR are not fully implemented in this system).
I once built this exact system up on a breadboard and it was a ton of fun. There is a full playlist available on Youtube here.
Reverse Engineering
In the course of developing the tube computer, I hit a point where it would have been beneficial to know a little more about how Motorola designed the chip internally. Well, there's really only one way to know for sure and that is to decap the chip. The chip went off to John McMaster who did an amazing job decapping the IC, and then removing the metal layer to get a look at the silicon underneath. From here, the images went to the insanely talented Ken Shirriff who walked me through reverse engineering the chip.
Check out Ken's amazing article on the MC14500 here!
Right click and "Save As..." or "Open Image in New Tab" for full resolution.
Logic Gate Version
Initially, the plan was to replicate the MC14500 in vacuum tubes faithfully, and this logic diagram was the result. However, midway through the design, we decided to increase the capability of the system by upgrading from a Logic Unit to a full Arithmetic Logic Unit, resulting in what we now dub the UE14500 Processor.