For as long as I can remember, I’ve had a passion for technology. Speficically, computers, computer science, etc. But I’ve also always had an interest in hobby electronics. Eventually, during high-school, I gained the desire to design and build an 8-bit CPU out of 74-series logic gates. A few years later and it’s actually happening.
It all started when I stumbled upon Ben Eater’s YouTube channel where he has an entire tutorial series discussing this exact subject. His videos go into great detail explaining the theory of how the computer works as well as the electronics. I highly recommend anyone interested in this subject check out his channel; you won’t be disappointed.
But his computer is quite primitive and simple. It’s barely enough to be turing complete. That just isn’t enough for me. So, I started with his design and went off on my own way.
The computer I have designed features a 16-bit address bus with a full 64k of memory. Instead of two general purpose registers, there are four. The ALU is capable of addition and subtraction, as well as bitwise AND, OR, XOR, NOT, left-shift, and right-shift. The shift operators only shift by one bit at a time to make implementation simpler, but that’s better than no shift operations at all.
Additionally, there is a 16-bit general purpose register called the index register. This register can be read and written to using either the 8-bit data bus or the 16-bit address bus. Thus, it can be used for all sorts of things: computed memory access, manipulating the program counter, etc.
I also added a hardware stack. It’s just a 16-bit register that can count up and down. This allows for function calls, recursion, etc.
Lastly, I added a “serial port” to the design. Admittedly, it might be considered “cheating” by some. It’s really just an Arduino; an Atmega328. I will use this microcontroller to download programs into the computer’s memory, and act as a input/output device that can connect to a “real” computer. This will make the entire thing more than just a complicated LED-blinking circuit.
I have been working hard on this project the last few weekends. I’ve written an assembler, a microcode generator, and created a Logisim simulation. I also have the schematics created in Autodesk Eagle. I have yet to finish a PCB design.
As for clock speed, right now, my target is 10MHz. We’ll see if it can actually run that fast, but by my back-of-the-envelope calculations, it should do. This will be fast enough to do some interesting things with it.
I will post about this more as progress occurs. However I don’t have a ton of free time to work on the project, unfortunately. I would love to actually build it this month but we’ll see if that can happen or not. It’s really a matter of getting the PCB done. Coincidentally, the PCB seems to be one of the more difficult parts of the project.
Anyway, that’s all for this one.