I grew up during the height of the home computer revolution of the early 1980s, but I entirely missed the start of it in the 1970s — I was too busy playing with Tonka trucks and Weebles at the time. Besides, no adults I knew were into computers, so I wouldn't have had exposure to them anyway.
A few years ago when I really started to get interested in electronics, I decided I wanted to design and build my own computer just like so many hobbyists had done in the early days. Because I grew up with a Commodore 64, I based my design around the MOS Technology 6502.
The 6502 has a long history of use in personal computers. The Commodore PET, VIC-20 and Commodore 64, the Atari 400 and 800, the Apple I and Apple II, and the BBC Micro all used it, just to name a few. It also has the benefit of being very easy to use.
The system is built around the following blocks:
- Rockwell R65C02 CPU
- NEC µPD43256 – 32KB of static RAM
- 27C128 EPROM – 16KB of read-only memory for firmware
- Rockwell R6522 VIA – parallel general purpose I/O
- Rockwell R6551 ACIA – serial I/O
- 1 MHz crystal clock
- Address decoding and reset logic
The design really is pretty simple. The 6502 family of ICs is basically plug-and-play. The main ICs are all connected via Address and Data busses, and the address decoding manages the chip selects.
Address decoding is very simple, because there are only four devices on the bus (the RAM, ROM, VIA, and ACIA). Two 74LS00 quad NAND-gate ICs are the only parts needed to map all of these into the 64KB address space of the 6502.
The whole thing runs at 1 MHz, just because that's the oscillator I had handy. Really, I could easily run it at 2 MHz, and possibly a bit faster than that.
Putting it Together
There's lots of ways to build a computer. You can bread-board, you can solder a prototype, you can etch PCBs at home or get them made… but I wanted to learn a new skill, so I decided to wire wrap a prototype. Wire wrapping could be a whole subject for its own page, really, but I'll let someone else do that. There's lots of information on Google about how to wire wrap, if you're interested.
I'm very happy with how it came out. Wire wrapping is a lot sturdier than it looks. It provides just as solid a physical and electrical connection as soldering does. The only drawback, really, is the lack of a ground plane for signal integrity, but at 1 MHz it's not that important.
A computer isn't much good without software, so I ported Lee Davison's 6502 “Enhanced BASIC” to my system. I made use of my Symon emulator to debug my changes to the code, since it more or less exactly simulates my 6502 computer design by default.
EhBASIC gives the computer something to do other than sit there and look pretty. It's a pretty usable version of the BASIC language!