Close
0%
0%

Toggle65: A 6502 Toggle Switch Computer

A battery-powered 6502 front-panel computer on garage-milled single-sided PCBs, in a hardwood case with an engraved aluminium panel.

Similar projects worth following
0 followers
Toggle65 is a portable, battery-powered 6502 toggle switch computer with 25 switches, 24 LEDs, an engraved aluminium front panel and a hardwood case. I made all of it in my garage, the way it could believably have been done in late 1975.

The Altair 8800 and IMSAI 8080 had front panels, and the 6502 arrived in 1975 right alongside the IMSAI, but the KIM-1 went with a keypad. So I built the 6502 front-panel machine I wish had existed.

The rule: no ordered PCBs. Both boards are single-sided copper clad, isolation routed on a desktop CNC and populated with through-hole parts and jumper wires.

- R6507 (28-pin 6502) with 32 KB SRAM
- Adjustable 555 clock, up to about 800 kHz
- Single-step by cycle or instruction (after Woz's Apple-1 circuit)
- Examine/deposit with switches, or save to RAM while you step
- USB-C or 4x NiMH AA power

Build video: https://www.youtube.com/watch?v=rUcgPvmvNck

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 »

short.png

Portable Network Graphics (PNG) - 1.98 MB - 10/10/2026 at 10:38

Preview

  • 1 × R6507 CPU 28-pin member of the original 6502 family
  • 1 × HM62256 SRAM 32 KB static RAM
  • 1 × 74LS573 octal latch Holds address bits A8-A15
  • 2 × 74HC245 bus transceiver Address bus buffers
  • 2 × 74HC132 quad Schmitt NAND Glue logic

View all 24 components

  • 1
    Reset the 6502

    Toggle Reset, then toggle Step a few times. The 6502 respects RDY during its internal reset sequence. It's ready when every address LED is lit except the two lowest bits, which means it's reading the reset vector at $FFFC.

  • 2
    Set the reset vector

    Deposit $00 at $FFFC (low byte) and $02 at $FFFD (high byte), so the program starts at $0200. The first 512 bytes are zero page and the stack.

  • 3
    Two ways to write RAM

    By default, Write stores the data switches at the address set on the address switches.

    If you hold the Address Bus switch at 6502 while toggling Write, it stores the data switches at whatever address the 6502 is currently on.

View all 5 instructions

Enjoy this project?

Share

Discussions

Does this project spark your interest?

Become a member to follow this project and never miss any updates