This will be [Edit: is] a general purpose breadboard computer made out of TTL-grade logic chips and no CPU or microcontroller. It will have video out, at least 160x120 pixels in 16 colors [Edit: 6-bit / 64 colors in the current protoboard]. It should be capable of displaying arbitrary full-screen images and running games like Pac Man and Space Invaders. Ideally the project should stay under 30 chips, but definitely no more than 40. Can it be done?The project is not built yet. I will describe it as I make progress in the upcoming weeks. I don't work on it all the time and updates will be irregular. I have done some concept tests with video before, see my other projects on this site for that. Now is time for the big leap.
[Edit: see the video for the resulting capabilities ]
[ Note: I don't maintain this "Project Details" section very often. See the blog for the real updates. ]
Some concepts to ponder about before starting
- How many bits? 4, 8, 16, 32, ...
- Software-generated video or hardwired?
- Harvard or Von Neumann architecture?
- Single cycle or multi cycle? Pipelining?
- ALU chips or not?
- Sliced ALU or full width?
A rule of thumb is that a minimalistic four bit system can be done in 10 chips, an eight bitter needs no more than 20 chips and going to 16 bits roughly doubles that again. Not all units double in chip count, but by extending the buses you will also have need for more addressing modes for it all to make sense. For example, a four bitter might work fine with a 256 word memory and absolute addressing, but with larger memories you'll need ways to construct addresses dynamically. Also, add more chips if extra functionality is required, such as high speed, a stack pointer, interrupts, a custom ALU or video.
Simplest possible concept
One concept, probably the simplest, is to replace the TrinketPro from the earlier breadboard VGA from TTL and SRAM with a minimalistic 4-bit TTL CPU. We will then get a working system with around 25 chips, or about 30 if we make a custom ALU. It will indeed be good enough for Pac Man and Space Invaders, but that will then also be the limit: no chance at all to have any fast scrolling, fast color changes, smooth moving objects, large objects, etcetera. Upgrading the CPU part to 8-bits won't bring much, because there will still be a communication bottleneck between the two parts. For any more exciting video we will need more complexity in the video part. If we do both, we certainly end up with more than 40 chips. It is absolutely interesting to try out this 25 chip concept (I would do it with a 74'181 ALU chip), because Space Invaders from such a small system can be very appealing. But first I want to explore another path.
A more daring approach
Lets look at it from another angle. If we look at the current video generation circuit it already contains many elements for a CPU: there are counters, ROM, RAM and buses. So the idea I'm going to pursue first is to extend the video part to gain full CPU capability: we will combine video with the CPU logic. The software will bit bang the sync and pixel signals at the right time. The dead time can be used for application code.
I don't know how this choice is going to turn out, it might make the application software timing really complicated, but it has the potential to make more interesting video possible because all flexibility is now in software. It also requires the CPU part to be very fast.
The ALU is the Arithmetic and Logic unit, or the inner calculator in a processor. For the ALU there is the option to use a 74'181 or to roll your own. I have several '181s lying around, so that is not the issue. But they have become hard to obtain, so duplicating this project becomes a bit more difficult if it requires them. Therefore I will do a custom ALU. We could still cut functionality, for example only do ADD and NAND. But I really don't like compromising the software in such extreme ways.