OO-1: A Homebrew 6502 Backplane Computer
#002

OO-1: A Homebrew 6502 Backplane Computer

A W65C02S, a megabyte of RAM, a front panel with real switches, and an Apple II mode

October 2026 in-progress Electronics · Retro Computing · Emulation · Software

The Idea

I’ve been poking at the 6502 for years: a Replica-1, Ben Eater’s breadboard computer, an emulator to run them on. The OO-1 is where that goes next: a computer of my own, built on a backplane so every part of it is a card I can pull out and look at.

The OO-1 runs a W65C02S at 7.16 MHz with a full megabyte of RAM. That’s a lot more than a 6502 can address, so a “north bridge” card maps four 16 KB windows onto it. Video, sound, storage, serial and USB are all cards, and the storage cards can move data by DMA without bothering the CPU. And because one crystal clocks everything, it can slow itself down to exactly an Apple II’s speed and run Apple IIe software unchanged.

On the front there’s a front panel, PDP-11 style: a lamp for every address and data line, a row of switches to type addresses in by hand, and HALT, STEP and DEPOSIT switches. Nobody needs one in 2026. I want one anyway.

Try It

The hardware is still on paper. The emulator isn’t: it runs the OO-1’s BIOS, its video card, the front panel and a debugger right here in your browser.

Click the screen and type. It boots into the Woz Monitor, the same one the Apple I shipped with:

  • C800.C84F dumps the start of the BIOS.
  • C680.C684 shows where the four memory windows point.
  • 300: A9 41 20 51 C9 4C 00 03, then 300R, prints As forever. Halt stops it, Step goes one instruction at a time, and Run lets it go again: on the toolbar, or with the front panel’s HALT and CONT switches, the way you would on the real thing.

The VGA button under the screen switches the monitor to the video card, where the BIOS mirrors everything in the original IBM VGA font. There your keyboard and mouse become the OO-1’s own USB keyboard and mouse, so the VGA screen is a whole computer, no serial terminal needed. C803R runs the video demo: a scrolling landscape of tiles, a dozen bouncing sprites whose positions are copied to the card by DMA every frame, and a palette fade. Any key brings the monitor back, and Pause/Break breaks into it from anything.

The sound card is two SIDs, the Commodore 64’s sound chip, with a 6510 of their own to run the music, so a tune plays without the main CPU lifting a finger. Sound under the screen turns your speakers on, for the SIDs and for the IIe’s own speaker in Apple II mode, which beeps as you start it, and plays Apple II software’s beeps and tunes. To make a note yourself, type these into the monitor, one per line:

  • C540: 10 sends SID A’s writes to SID B as well, so you hear it in both speakers.
  • C500: 00 10 00 00 11 00 F0 sets up voice 1: its pitch, a triangle wave, and the gate.
  • C518: 0F turns the volume up. C518: 00 turns it down again.

Play .sid… plays a C64 tune of your own (the HVSC has tens of thousands) straight onto the card: pick the file, step through its songs, Stop. Most tunes play; RSIDs, which expect a whole C64 around them, mostly stay quiet. The file is read in the page and never kept or uploaded.

Apple II mode needs one thing I can’t give you: an enhanced Apple IIe’s ROM, which is Apple’s. If you have one (dumped from your own machine, say), Insert IIe ROM… under the screen takes it: the 16 KB ROM, or its two 8 KB halves, and the video ROM if you have it. It stays in your browser and is never uploaded. Start Apple IIe hands the machine over: the clock drops to the Apple’s 1.02 MHz, the AMODE lamp lights, and the screen becomes a IIe’s. Type into Applesoft, or paste a program in. Ctrl-Delete is Ctrl-Reset, and the left and right Alt (Option) keys are Open Apple and Closed Apple.

To boot a disk, the card needs its two 256-byte PROMs (the boot ROM, 341-0027, and the state machine, 341-0028); pick them with Insert IIe ROM… too. Insert disk… under the monitor takes a .woz, .dsk, .do or .po, and Start Apple IIe boots it, the drive’s light coming on while it loads. Whatever a program writes goes back to the disk; the page keeps your last disk in your browser, and Save downloads it, changes and all. Without a disk the IIe waits for one forever, as a real one does: Ctrl-Reset drops you into BASIC.

The debugger on the right shows the registers and the bus, cycle by cycle, and its Devices tab takes the video, USB and sound cards apart while they run (down to each voice’s envelope), and in Apple II mode the IIe’s switches and the Disk II’s head, motor and magnets too. To catch the CPU in the act, open Breakpoints, add ECHO, and type a key: it halts just before printing it, and the lights on the panel show the same address.

How It’s Made

Everything is in the open, in the 6502 repo on GitHub:

  • The design (hw/design.md): the bus, the memory map, every card’s registers, and the reasons for each decision.
  • The emulator: C++17, cycle by cycle, built to that design so the software can be written before the boards exist. It’s compiled to WebAssembly for the page above.
  • The BIOS: 65C02 assembly, built with cc65. Its screen font is IBM VGA 8×16 from VileR’s Ultimate Oldschool PC Font Pack, used under CC BY-SA 4.0.

Whether the real thing comes out as tidy as the emulator remains to be seen.

Follow Along

This one is being built live too.

Live builds happen on Twitch. Come watch, ask questions, or point out which wire I got wrong.

Discussion happens on Discord. If you’re building something 6502-shaped yourself, that’s the place.

Gallery

Specifications

CPU
W65C02S at 7.16 MHz (a 14.31818 MHz crystal, divided by 2)
Memory
1 MB of RAM, seen through four 16 KB windows
Bus
Backplane: 20-bit address, cards picked by module ID, DMA
Front Panel
Switch register, address and data lights, single step, breakpoints
Video
VGA 640×480: text, bitmaps, two tile layers, 64 sprites
Input
USB keyboard and mouse, Apple-style game port
Sound
Two SIDs with a 6510 of their own, for C64 tunes
Apple II Mode
An enhanced Apple IIe at 1.02 MHz, with a Disk II drive, on your own IIe ROM
Emulator
C++17, compiled to WebAssembly
License
MIT
Source
github.com/jeffersonjhunt/6502

The writing on this page was done with help from Claude. The ideas, opinions, and questionable design decisions are all mine. More on that.