I built a computer! A very primitive one, made out of breadboards, bare wire, and logic gates. But it’s fully functioning, it looks awesome, and unlike the staggering complexity of modern processors, it’s actually possible for one person to understand the whole thing.
- Operates on 8-bit numbers! Choose 0 to 255 unsigned, or -128 to 127 signed!
- A full 16 bytes of RAM!
- Adjustable clock speed up to 200 Hz!
- 3-digit signed digital display!
Mostly for the flashing lights.
Why? (In more detail)
When I’ve seen information on how computers work, they usually look at it from either one of two perspectives. One is the very basic level of explaining how transistors work, and how you can chain them together to get something like a logic gate. Or they take the top-down look, and explain how everything on your computer is running code, which was programmed at a high level by a programmer, and gets translated by a compiler into basic machine-level code which the machine can understand. I can understand the concept of very rudimentary code, and I can get the concept of a bunch of logic gates that can chain together to do complex tasks (just look at the Minecraft contraptions out there). But there was a big old black box of mystery still in the middle of that sandwich. How do you map custom instructions onto a fixed set of circuitry?
This was something I had flagged as an area of “huh” in my mind, until I stumbled across Ben Eater’s excellent YouTube series when he walks you through the process of doing just that: starting from the simplest transistor-level building blocks and ending up with a (still basic, but) fully-functional computer that can run some simple programs. I’m a sucker for the physicality of messing around with components, and this seemed like a super interesting project where I could learn a lot and end up with a cool-looking end product. So I ordered parts and built my own!
If this sounds interesting to you, check out Ben’s site for the project – it looks like he’s started selling kits which should make this easier to source and build. Alternatively check out Nand to Tetris, which is a similar sort of project that goes further on the software side, but only emulates the hardware so you don’t play with any wires.
But in the meantime, check out my other two posts about the project: