Back in 2014 when I drew the first schematics of this architecture, my initial goal was to see If I can do it. After a while I wanted to take it one step further and actually build this as a modular design. Wouldn't it be nice if I could have like a motherboard with several modules connected to it? And then have at least a port card with 8 LEDs connected on top of it? in this way I could actually write a simple assembly program to work out at least a dynamic light loop with a bitwise shift instruction or something.
Essentially, this ends up being nothing else than a simple microcontroller structure with most of the submodules that anyone can find in any $2 microcontroller. But the exercise itself and the gained knowledge is priceless. The current project features full STEP BY STEP in word explanations and detailed description of what happens each step of the way in this machine, thus making it a great source for learning.
The presentation of this project starts with the instruction set table.
The green marked fields are the instruction modules that I already implemented in hardware. They should work, regardless the fact that some other modules are not finished yet. This is the beauty of having a modular design. Even if this architecture is not final yet, it should still run code that use the available instructions.
Each instruction takes 4 clock pulses to complete and then most of the blocks reset to their default state awaiting for the next cycle. The execution of the entire cycle is based on activating four different lines for each of the four pulses. Each specific line does something different for each individual module and for more information you would have to check the Instructions section of this page.
Main architecture of what could become the motherboard:
Open in a new window for zooming in more accurately. As you can see, the circuit is a modular one and it is supposed to work even if, at some point, some instruction modules are missing. Moreover, my plan was to slowly improve the schematic by working some of the modules on breadboard. A modular design in this case, also allows for temporary replacing some of the cards with universal arduino launchpads which can temporarily perform the function of that specific module until it is finished. At first, in the testing phase, the clock generator module would have to be set to very slow speed or even manual pulses for better ability of diagnosing the circuit.
Main characteristics:
- 255 lines x16 bit Flash - (PC can go from 1 to 255 and the ASM code can only be this long)
- 255 Bytes of RAM
- 1 Byte output port, found at the FF RAM location
- 4 clock pulses per instruction cycle
- 10KHz max CPU frequency
Credit and inspiration:
This design is 100% my brain work. However, the university years when I studied the Z80 uP and the vast experience I have with ASM programming and studying the datasheets of PIC Microcontrollers, inevitably added certain flavors to it.
Disclaimers:
- This particular project aims to be a proof of concept. Right now it is not fully tested and debugged. I noticed that some of the submodules could be optimized. Although I plan on updating and fixing this design in the future, I cannot guarantee that the whole assembly is fully functional.
- This project is only in a draft stage right now. Some of the parallel instruction modules are missing from the main schematic for the sake of keeping it as simple as possible for others.
- The purpose of this project is also to pass on information to other interested people out there and teach others. So this project does not aim to be a DIY project that can be replicated and work flawlessly out of the first trial.
- My dream would be that, at some point, I could prototype this computer and play with it in real life. Stay tuned and follow this project if you want to be notified when I add more info.
Quite the build, and interesting design... My first understanding of what "software" is, came from learning the cycle by cycle operation of a PDP-11/05, at the gate level... "Oh, software is just reconfiguring hardware, a step at a time!"
Just what you are doing!
Nice!