-
Notifications
You must be signed in to change notification settings - Fork 0
Home
github-actions[bot] edited this page Apr 9, 2026
·
11 revisions
Welcome to the wiki for the 65c02 emulator for Ben Eater's memory layout.
This project is a full emulator of the WDC 65C02 microprocessor (the CMOS variant of the classic MOS Technology 6502), designed around the memory layout used in Ben Eater's 65c02 projects. It includes a modern ImGui-based graphical interface and a complete SDK toolchain for developing software that runs on the emulator.
| Component | Description |
|---|---|
| CPU | Full WDC 65C02 processor |
| RAM | 32 KB of random-access memory (0x0000–0x7FFF) |
| ROM | 32 KB of read-only memory (0x8000–0xFFFF) |
| VIA | MOS 6522 Versatile Interface Adapter (timers, I/O) |
| ACIA | MOS 6551 Asynchronous Communications Interface (serial) |
| GPU | Custom graphics controller with 7.5 KB of VRAM |
| SID | Sound synthesis chip (3 oscillators + ADSR) |
| LCD | 2×16 character LCD display |
| SD | SD Card interface via Dedicated MMIO SPI Controller |
┌──────────────────────────────────────────────────────┐
│ SIM_65C02 (Main Executable) │
├──────────────────────────────────────────────────────┤
│ Frontend / GUI │
│ ImGui · SDL3 · OpenGL 3.3 · ImGuiFileDialog │
├──────────────────────────────────────────────────────┤
│ Control Layer │
│ AppState · Console · UpdateChecker │
├──────────────────────────────────────────────────────┤
│ 65c02_core Static Library │
│ ┌───────────┬────────────┬──────────────────────┐ │
│ │ CPU │ Memory │ Peripherals │ │
│ │ (65c02) │ (RAM+ROM) │ VIA · ACIA · LCD │ │
│ ├───────────┼────────────┼──────────────────────┤ │
│ │ GPU (VRAM 7.5 KB) │ SID (synthesis) │ │
│ └───────────┴────────────┴──────────────────────┘ │
├──────────────────────────────────────────────────────┤
│ SDK / Tools │
│ scripts/compile-bin.sh · image-to-bin.sh · midi-to-bin.sh │
│ sdk/linker/ · sdk/msbasic/ · BIOS · Microsoft BASIC │
├──────────────────────────────────────────────────────┤
│ Example Programs & Tests │
│ sdk/src/ (C + ASM) · src/UnitTests/ (Google Test) │
└──────────────────────────────────────────────────────┘
-
Hardware & emulation
- Hardware — Main emulator orchestrator and memory system
- CPU — 65c02 processor and registers
- CPU Instructions — Full instruction set reference
- GPU — Graphics processor and VRAM
- SID — Sound synthesis
- VIA and ACIA — I/O chips
- LCD — LCD display
- SD Card — SPI storage emulation
- Save States — Serializing emulator state to binary files
- ESP8266 and NET Library — Virtual Wi-Fi module and NET.h C library
-
User interface
- Frontend — ImGui windows and controls
- Debugger — Integrated debugger and memory profiler
- Breakpoints — Conditional breakpoints and watchpoints
- Scripting — Python scripting engine, headless mode and API reference
-
Development & SDK
- Linker and Memory Layout — Linker configs, BIOS, memory map
- SDK — Compilation and conversion tools
- Cartridge System — Packaging and hardware configuration system
- SDK Programs — Included example programs
-
Building & testing
- Building — Compile the project from source
- Unit Tests — Unit test infrastructure
- Download the latest release from the releases page.
- Also download
SDK.zipif you want to develop programs/cartridges or run pre-compiled binaries. - Open the simulator and select the
.binor.65c(cartridge) file you want to run.
# Compile a C or assembly program
./scripts/compile-bin.sh <program_name>
# Convert an image to VRAM format
./scripts/image-to-bin.sh <image>
# Convert a MIDI file to SID assembly code
./scripts/midi-to-bin.sh <midi_file>See the SDK page for more details.
The emulator C++ source code is licensed under the MIT License.
The project includes Microsoft BASIC (© 1977 Microsoft) and WozMon (© 1976 Apple Computer, Inc.) for educational purposes.