Why a 6502 toggle switch computer?
Toggling in instructions by hand is how the Altair 8800 worked when it launched in late 1974, and the IMSAI 8080 (the one from WarGames) was the same. The 6502 came out at about the same time as the IMSAI, but the MOS KIM-1 shipped with a hex keypad and that set the pattern. Maybe the 6502 is a little harder to drive by hand. Maybe it's just a silly idea. I bought the switches four years ago, demonstrated single-cycle stepping of a 6502 two years ago, and finally finished this machine in 2026.
Architecture
CPU and memory. An R6507 runs from a 32 KB HM62256 SRAM. The 6507 is the 28-pin member of the original 6502 family and is cut from the same wafer; only the package and bond wires differ. Using it instead of the 40-pin part saved a lot of work on a single-sided board.
Sharing the bus with a CPU that won't let go. The original 1975 6502 never tri-states its address bus. To let the front panel use the bus, I rely on the fact that the 6502 doesn't use the data bus while φ2 is low. The panel accesses RAM during that half of the cycle, and a pair of 74HC245 buffers only let the 6502 drive the address bus during the other half.
Switches. The 16 address and data switches are three-position. Each one connects its line to a 4.7 kΩ pull-up or pull-down, or leaves it floating. The resistors are deliberately weak because the design has bus contention built in: the address buffers and the switches both connect to the RAM, and the data switches connect to both the RAM and the 6502. There's only room for eight address switches, so a 74LS573 latch holds the high byte, loaded with the Load A8–15 switch.
Clock. I could have used a crystal oscillator, but an NE555 with a 100 kΩ pot felt closer to the metal. It runs from tens of kHz up to about 800 kHz.
Single step. The front-panel board carries one IC, a 74HC74. Its two flip-flops pull RDY low after each cycle, so you can step through data and instructions manually. An Instr/Cycle switch selects stepping per instruction or per cycle. It's a modernisation of the single-step circuit Steve Wozniak described in the Apple-1 manual.
Two boards. The 10 × 15 cm blanks were too small for everything, so the front panel PCB (switches, LEDs, step logic) is separate from the motherboard (CPU, RAM, buffers, clock). The boards join through two rows of female headers, using stacking headers so they can be soldered on the copper side of a single-sided board.
Power. Power comes from USB-C, or from four AA cells through 1N5819 Schottky diodes. Fresh alkalines are too much for the 6502 even after the diode drop, but NiMH cells land under 5.5 V. NiCd would have been the period-correct choice, and it behaves much the same.
Making the PCBs in a garage
I designed everything in KiCad and generated toolpaths in MakeraCAM from the Gerbers. At the time, Makera Studio didn't import Gerbers.
Test board first. Before risking the big blanks, I milled a little 555 blinker that used the same switch footprint and a range of trace widths. Even 0.25 mm traces milled cleanly. The real limit was clearance: a trace running under an 0805 footprint is about as tight as it gets. Auto-levelling worked perfectly, but the V-bit consistently sat about 0.2 mm above the copper, so I zeroed Z manually. It took three or four tries to get it right on the test board.
The real boards. I used 0.4 mm traces and a 30° / 0.2 mm V-bit, and sanded the copper first to remove oxidation. Both 10 × 15 cm boards came out with every trace isolated and none cut, on the first try.
Assembly. Without solder mask it's easy to bridge a trace to ground without noticing, so I checked every joint as I went. On a single-sided board, through-hole parts double as free vias and jumpers. I did cheat on one thing: I soldered the USB-C connectors under a microscope.
Bring-up. First I checked that the 6502 was producing a φ1 output clock. Then I swapped an EEPROM into the RAM socket (the 28-pin footprints are close enough), filled with 64 KB of $C8 (INY). That makes the CPU free-run and count up the address bus in binary, which checks all 13 address lines in one go.
Front panel and case
Front panel. All the geometry was 2D and already sketched in KiCad, so I skipped FreeCAD. I exported the front panel's text and outline layers as Gerbers and turned them into engraving, drilling and chamfering toolpaths in MakeraCAM. The engraving is filled with nail polish, with the excess wiped back with acetone, for that 1970s hi-fi look. It took many, many attempts. The panel doubled as a stencil to set every LED at the right height, and it can be removed without desoldering anything.
Case. The case is a block of hardwood: I faced the top, milled a rebate so the aluminium sits flush, then pocketed out the middle. That was a mistake. Once the centre was gone the part came loose, the bit broke and the job aborted, so I finished it by hand. It got one coat of oil.
Lessons learned
- Fit the mounting bolts early. Most of my debugging came from mechanical stress: pressing an LED lifted a pad, or squeezing the stack pulled a pin loose.
- Board-to-board headers in the middle of the board are hard to align and add stress when the corners aren't bolted down.
- Use less double-sided tape when fixturing PCB blanks. Getting it off again is miserable.
- When milling a case, cut the outline before you hollow it out.
- Isolation-routed single-sided boards are fantastic for quick test boards you can have in 5–10 minutes. For "useful" electronics, order PCBs.
Inspiration and credits
- MITS Altair 8800 and IMSAI 8080: the front-panel experience I wanted on a 6502
- Steve Wozniak's single-step circuit from the Apple-1 manual
- Two modern 6502 toggle switch computers worth seeing. I did my own thing, but I admire both:
- CommodoreZ's Cactus 6502 Homebrew Computer: https://commodorez.com/cactus.html
- Mitsuru Yamada's Perseus-7: https://hackaday.io/project/175866-6502-standalone-computer
- Disclosure: Makera provided the Z1 CNC used for this build.
Anders Nielsen