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...
Read more »
Anders Nielsen