Following my CPLD version of the 6502, I am planning to making another implementation using simple "TTL" logic. The term "TTL" is in quotes because it doesn't refer to the technology, but rather the simplicity of the logic devices.
My goals are a bit different than other "TTL" projects, such as Drass' recently completed design, to avoid straight duplication of efforts, and hopefully produce another interesting angle. Here's a short list of preliminary requirements and self-imposed rules:
- Only use basic logic devices. This means no ready-made ALUs, no full adders, no programmable devices (including EPROM/Flash). I can use simple gates, (octal) flip-flops, buffers/selectors/muxes/decoders, and similar.
- Make it educational so that anyone interested in CPU design or the 6502 can study the design.
- Focus on simplicity rather than speed. Target is retro speed (~2 MHz), but I'll try to make it as fast as possible within simplicity constraint.
- Lots of blinkenlights. I want to include LEDs to indicate value of all major signals and registers so it's possible to single-step through code and follow along. This makes the design a bit harder, because I can't use registers with built-in tri-state buffers to send data to a common bus. Instead I have to use regular registers, followed by the LEDs, and external mux/tri-state buffers so you can always see contents of X/Y/A/etc register, even if it's not being used.
- Single PCB (for the core), as compact as possible, but try to leave some room for explanatory text in silk screen.
- Fast and modern 3.3V logic families, as much as possible in compact TSSOP-14/16/20 packages
- Clean design and layout. Try to avoid a chaotic maze of gates. This will make it easier to pack things close together without routing problems, and also makes it easier to follow along with the operation.
- Loose compatibility with the NMOS 6502. All instructions implemented, including BCD, IRQ, RDY so you can run most regular software, but not cycle accurate, nor any attempt to support illegal instructions, or unintended quirks/bugs of the original.
If at some point these requirements are too hard to meet, I may relax some of them, or choose to cancel the project.
I have the following steps planned:
- Create initial design in Verilog. This allows quick simulations to make sure the design works correctly (pass the Klaus Dormann tests for instance). Start with a functionally correct design in high level fashion, but then iteratively map parts to real logic.
- Make a prototype board where datapath is made with simple logic devices, but keep an FPGA for the control logic to allow easy and flexible debugging and testing.
- Make a final board where FPGA is replaced by some sort of hard coded PLA design.