Shown above is "The VCS" from the ac6502 project. (AI used to clean up photo background. Computer, keyboard, monitor, and OS screenshot are very real!)
- Overview
- Target Audience
- Design Philosophy
- Computer Systems
- System Specifications
- Board Compatibility Matrix
- Architecture Overview
- Hardware
- Firmware
- Software & Related Projects
- CAD
- Production
- Schematics
- Libraries
- Development Workflow
- Contributing
- Licensing
This project aims to create multiple retro-style 8-bit computers based on the 65C02 microprocessor. The project is centered around a number of custom-designed PCBs that can be combined in various configurations to create different computer systems based on a common memory map. The designs are inspired by classic 8-bit computers such as the KIM-1, Commodore 64, and Apple II, but with modern enhancements and flexibility.
The project is designed using KiCad 7.0+ for PCB design and is open-source under the CERN Open Hardware Licence Version 2 - Permissive, allowing enthusiasts to contribute and modify the designs freely. The boards are manufactured by JLCPCB and use a combination of surface-mount and through-hole components for optimal assembly flexibility.
- Modular Design: Mix and match boards, cards, and helpers to create custom configurations
- Multiple System Types: Build a desktop computer (COB), development emulator (DEV), or gaming console (VCS)
- Common Memory Map: All systems share a consistent memory architecture for software compatibility
- Modern Manufacturing: Optimized for JLCPCB's assembly services with production-ready files included
- Open-Source Hardware: Complete KiCad schematics, PCB layouts, and 3D models available
- Extensive Firmware: PlatformIO-based firmware for microcontrollers with networking, USB, and storage support
- Flexible I/O: Support for PS/2 keyboards, joysticks, serial terminals, video output (composite/VGA), and more
This project is designed for:
- Retro Computing Enthusiasts: Those who appreciate classic 8-bit computer architecture and want to build modern replicas
- Hobbyists & Makers: Electronics enthusiasts interested in hands-on PCB assembly and microcontroller programming
- Educators: Teachers and students learning about computer architecture, digital logic, and embedded systems
- Game Developers: Retro game developers seeking a flexible platform for 8-bit game development
- Hardware Hackers: Engineers wanting to experiment with custom peripherals and system extensions
- Open-Source Contributors: Developers interested in contributing to an active hardware/software project
Skill Level: Intermediate to advanced electronics knowledge recommended. Basic soldering skills, familiarity with microcontroller programming, and understanding of digital logic are helpful but not strictly required for simple builds.
The ac6502 project is guided by several core principles:
Rather than designing monolithic systems, the project uses interchangeable boards, cards, and helpers that can be combined in different ways. This allows a single set of PCBs to create vastly different computer systems.
While the systems are inspired by 1970s-1980s computers like the KIM-1 and Commodore 64, they leverage modern PCB manufacturing capabilities (SMD components, JLCPCB assembly) and contemporary components (Teensy microcontrollers, Pi Pico, modern VIAs).
All systems share a common memory map and bus structure. This ensures that software written for one system can often run on another with minimal modifications, and peripherals remain compatible across configurations.
Complete transparency: all schematics, PCB layouts, 3D models, firmware source code, and production files are available under permissive open-source licenses. The community can learn from, modify, and improve any aspect of the project.
The project supports both real 65C02 hardware and accurate cycle-by-cycle emulation (via Teensy 4.1 + vrEmu6502). This provides flexibility for software development and testing without requiring physical chips.
Documentation, schematics, and code are written with clarity in mind. The project serves as a learning platform for understanding computer architecture, digital design, and embedded programming.
The project supports the creation of several different computer systems, each optimized for different use cases. All systems share a common memory map and bus architecture, ensuring software compatibility where applicable.
Type: Full-featured desktop computer
Complexity: Advanced
Best For: Enthusiasts wanting a complete modular 8-bit system
The COB is the most versatile and expandable system configuration, featuring a backplane architecture that allows multiple peripheral cards to be added or swapped. This design provides maximum flexibility for experimentation and expansion.
Required Components:
- 1x Backplane (provides card slot interconnection)
- 1x Backplane Pro (enhanced backplane with clock/reset/power)
- 1x Backplane Helper (adds 2 additional card slots)
- 1x CPU Card (65C02)
- 1x Memory Card (32KB RAM + 32KB ROM with address decoding)
- 1x Video Card (composite via TMS9918A) or 1x VGA Card (VGA via Pico9918)
- 1x Sound Card (ARMSID audio module)
- 1x Storage Card (CompactFlash)
- 1x Serial Card (65C51 ACIA) or 1x Serial Card Pro (enhanced serial)
- 1x RAM Card (512KB banked RAM)
- 1x RTC Card (Real-time clock via DS1511Y)
- 1x GPIO Card (65C22 VIA for I/O)
- 1x Keyboard Encoder Helper (ATmega1284p) or 1x PS2 Helper (ATmega328p)
Key Features:
- Real 65C02 CPU running at 1 Mhz clock speed
- Up to 544KB total RAM (32KB base + 512KB banked)
- Multiple video output options (composite or VGA)
- Persistent storage via CompactFlash or SD card
- Real-time clock for timestamped operations
- Serial terminal connectivity
Type: Emulation-based development system
Complexity: Intermediate
Best For: Software developers and debugging workflows
The DEV replaces the physical 65C02 CPU with a Teensy 4.1 microcontroller running cycle-accurate emulation via vrEmu6502.
Required Components:
- 1x Dev Board (Teensy 4.1-based 65C02 emulator)
- 1x Dev Output Board (2.4" LCD with TMS9918A VDP and SID audio emulation)
Key Features:
- Cycle-accurate 65C02 emulation (no physical CPU needed)
- Teensy 4.1 platform (600 MHz ARM Cortex-M7)
- Variable CPU speed
- Ethernet connectivity via QNEthernet library
- Web-based control interface (DB Emulator) accessible at
http://6502.local - SD card support for loading ROMs, programs, and saving snapshots
- USB-C keyboard and joystick input (Xbox 360/One controllers)
- Serial terminal interface (115200 baud)
- mDNS discovery
- Real-time clock support
- Hardware buttons (Run/Stop, Step, Reset, Frequency)
Development Advantages:
- No need to burn ROMs for testing
- Step through code cycle-by-cycle
- Load programs instantly from SD card or network
- Monitor memory in real-time via web interface
- Snapshot memory (Save memory state to SD card)
See Also: Firmware/DB Emulator/README.md for detailed setup instructions.
IMPORTANT:
The DEV does not output bus compatible signals (or any signals) for the ac6502 backplane system with the current firmware and instead relies entirely on emulation. There is a bus connector and a card slot available on the Dev Board along with level shifters for all signals (see schematic). These are up to end-user to implement if you want to try to talk to real hardware using the bus connections. In past versions of the firmware (see commit history) I have worked with real hardware and it does work so give it try if you would like!
Type: Retro gaming console
Complexity: Intermediate
Best For: Retro game development and gaming
A game-focused configuration designed for playing and developing retro-style games. Features cartridge-based ROM loading, multiple input options, and dedicated video/audio output.
Required Components:
- 1x Main Board (65C02 CPU + 32KB RAM + 32KB ROM)
- 1x Input Board (Matrix keyboard, PS/2 keyboard, controller ports)
- 1x Output Board (VGA video via Pico9918 + ARMSID audio)
- 1x ROM Cart (cartridge for game ROM images)
Key Features:
- Real 65C02 CPU running at 1 Mhz clock speed
- Cartridge-based game loading (swappable ROM carts)
- Multiple input options:
- Matrix keyboard
- PS/2 keyboard
- Atari 2600 compatible joysticks (via port header, Keyboard Helper or Joystick Helper)
- VGA video output (via Pico9918)
- Audio output via ARMSID
Typical Use Cases:
- Playing homebrew 8-bit games
- Developing retro-style games
- Arcade-style gaming experiences
- Educational game programming
Detailed specifications for each system configuration:
| Specification | COB | DEV | VCS |
|---|---|---|---|
| CPU | 65C02 | Teensy 4.1 (ARM Cortex-M7 emulating 65C02) | 65C02 |
| Clock Speed | 1 MHz | Emulated: 0 Hz to 1 MHz | 1 MHz |
| Base RAM | 32KB | 32KB | 32KB |
| Banked RAM | 512KB (RAM Card) | 16KB (default), up to 512KB with PSRAM | N/A |
| Total RAM | 544KB | 48KB (default), up to 544KB with PSRAM | 32KB |
| ROM | 32KB (Memory Card) | 32KB | 32KB / 16KB (ROM Cart, swappable) |
| Video Output | Composite (TMS9918A) or VGA (Pico9918) | 2.4" LCD (VT-AC) | VGA (Pico9918) |
| Video Resolution | 256×192 (TMS9918A) or 640×480 VGA | 640×480 VGA or 320×240 LCD | 640×480 VGA |
| Audio | ARMSID | SID emulation | ARMSID |
| Storage | CompactFlash | SD card (onboard Teensy 4.1) | ROM cartridges |
| Storage Capacity | Up to 1MB (CF) | Up to 32GB (SD) | 16KB per cartridge** |
| Serial I/O | 65C51 ACIA (RS-232) | USB serial (115200 baud) | N/A |
| Network | N/A | Ethernet (10/100 Mbps) | N/A |
| GPIO Ports | GPIO Card (Keyboard / Joystick) | USB (Keyboard / Joystick) | Input Board (Keyboard / Joystick) |
| Input Methods | PS/2 keyboard or matrix keyboard, joysticks | USB keyboard, USB joystick | PS/2 keyboard or matrix keyboard, joysticks |
| Real-time Clock | DS1511Y (Y2K compliant) | Teensy TimeLib software RTC | N/A |
| Expansion Slots | 9 slots (12 available with full backplane configuration) | N/A | N/A |
| Power Requirement | 5V DC, 2-3A | 5V DC, 2A | 5V DC, 1-2A |
| Board Count | 12+ boards/cards | 2 boards | 3 boards |
| Complexity | Advanced | Intermediate | Intermediate |
Legend:
*= UNTESTED component or configuration**= Banked cartridge could be designed to allow for more cartridge capacityN/A= Not applicable or not available for this configuration
This matrix shows which boards, cards, and helpers are compatible with each system configuration. Use this as a guide when planning your build.
| Board/Card/Helper | COB | DEV | VCS | Notes |
|---|---|---|---|---|
| BOARDS | ||||
| Main Board | ✓ | — | ✓ | Required for COB/VCS (not DEV) |
| Dev Board | — | ✓ | — | DEV system only |
| Dev Output Board | — | ✓ | — | Pairs with Dev Board for TMS9918A VDP and SID audio output |
| Input Board | ○ | — | ✓ | VCS primary; can be used with COB |
| Output Board | ○ | — | ✓ | VCS primary; can be used with COB |
| LCD Board | ○ | — | — | UNTESTED; COB optional, VCS optional |
| Backplane | ✓ | — | ○ | COB primary; can be used with VCS |
| Backplane Pro | ✓ | — | — | COB primary (enhanced backplane) |
| CARDS | ||||
| Backplane Helper | ✓ | ○ | ○ | Adds card slots |
| CPU Card | ✓ | — | — | COB primary (hosts CPU) |
| CPU Card Pro | ○ | — | — | COB primary; 65816 CPU; UNTESTED |
| Memory Card | ✓ | — | — | COB primary (32K RAM + 32K ROM) |
| RAM Card | ✓ | — | ○ | COB optional (512KB banked RAM) |
| RTC Card | ✓ | — | ○ | COB optional (real-time clock) |
| GPIO Card | ✓ | — | — | COB required |
| Serial Card | ✓ | — | ○ | COB communication |
| Serial Card Pro | ✓ | — | ○ | Enhanced serial; COB |
| Video Card | ✓ | — | — | COB option (TMS9918A composite) |
| Video Card Pro | ○ | — | — | COB option; UNTESTED |
| VGA Card | ✓ | — | — | COB option (Pico9918 VGA) |
| VGA Card Pro | ○ | — | — | COB option; UNTESTED |
| Sound Card | ✓ | — | — | COB (ARMSID) |
| Storage Card | ✓ | — | ○ | COB (CompactFlash) |
| Storage Card Pro | ○ | — | ○ | SD card; UNTESTED |
| LCD Card | ○ | — | — | 16×2 LCD Display |
| Blinkenlights Card | ○ | — | ○ | Debug/visual output; any backplane system |
| Prototype Card | ○ | — | ○ | Custom circuits; any backplane system |
| HELPERS | ||||
| Keyboard Encoder Helper | ✓ | — | ○ | COB GPIO keyboard input (ATmega1284p) |
| PS2 Helper | ✓ | — | ○ | COB GPIO PS/2 keyboard (ATmega328p) |
| Keyboard Helper | ✓ | — | ○ | COB 64-key matrix + joysticks |
| Keypad Helper | ○ | — | ○ | Keypad input (4×4 + 2×4) |
| Keypad LCD Helper | ○ | — | ○ | Keypad LCD display |
| GPIO Helper | ✓ | — | ○ | 8 buttons + 8 LEDs; testing/debug |
| GPIO Breadboard Helper | ✓ | — | — | Breadboard interface for GPIO |
| Joystick Helper | ✓ | — | ○ | Atari 2600-style joystick |
| Clock Helper | ✓ | — | ✓ | Manual clock control; any real CPU system |
| DB25 Helper | ✓ | — | — | GPIO to DB25 connector |
| Breadboard Helper | ✓ | ✓ | ✓ | Bus to breadboard; prototyping |
| Mega Helper | ✓ | — | — | Arduino Mega 2560 interface |
| VERA Helper | ○ | — | — | VERA module adapter |
| CARTS | ||||
| ROM Cart | ✓ | — | ✓ | DEV/VCS game cartridges (16KB ROM) |
Legend:
✓= Required or primary use case○= Optional or compatible but not typical—= Not applicable or incompatible- UNTESTED = Hardware exists but not yet verified
COB System (9 slots typically used, 12 available):
- Uses Backplane, Backplane Pro, and Backplane Helper together
- 12 total card slots available in full configuration
- Typical configuration uses 9 slots for: CPU, Memory, Video, Sound, Storage, Serial, RAM, RTC, GPIO cards
- Additional 3 slots available for expansion or future cards
DEV and VCS Systems:
- No backplane architecture (fixed board configurations)
- DEV or VCS systems CAN however be expanded using backplane boards and cards
All ac6502 project systems share a common architecture based on the classic 65C02 microprocessor bus design, with modern enhancements for flexibility and expansion.
The project uses a standardized memory map across all systems (see Memory Map.png for complete details):
$0000 ├─────────────────────────────────────┤
│ Zero Page │ 256 bytes ($00-$FF)
$0100 ├─────────────────────────────────────┤
│ Stack │ 256 bytes ($0100-$01FF)
$0200 ├─────────────────────────────────────┤
│ Input Buffer │ 256 bytes ($0200-$02FF)
$0300 ├─────────────────────────────────────┤
│ KERNAL Variables │ 256 bytes ($0300-$03FF)
$0400 ├─────────────────────────────────────┤
│ User Variables │ 1KB ($0400-$07FF)
$0800 ├─────────────────────────────────────┤
│ Program RAM │ ~30KB ($0800-$7FFF)
│ General purpose user RAM │
$8000 ├─────────────────────────────────────┤
│ 8K I/O Space │ 8 slots × 1KB each
│ $8000-$83FF: IO 1 (RAM Card) │
│ $8400-$87FF: IO 2 (RAM Card) │
│ $8800-$8BFF: IO 3 (RTC Card) │
│ $8C00-$8FFF: IO 4 (Storage Card) │
│ $9000-$93FF: IO 5 (Serial Card) │
│ $9400-$97FF: IO 6 (GPIO Card) │
│ $9800-$9BFF: IO 7 (Sound Card) │
│ $9C00-$9FFF: IO 8 (Video Card) │
$A000 ├─────────────────────────────────────┤
│ LO System ROM (KERNAL) │ 8KB ($A000-$BFFF)
│ Built-in, not replaceable │
$C000 ├─────────────────────────────────────┤
│ HI System ROM or Cart ROM │ ~16KB ($C000-$FFFA)
│ BASIC/Monitor, or removable cart │
$FFFA ├─────────────────────────────────────┤
│ Interrupt Vectors │ 6 bytes
│ $FFFA-$FFFB: NMI │
│ $FFFC-$FFFD: RESET │
│ $FFFE-$FFFF: IRQ/BRK │
├─────────────────────────────────────┤
I/O Slots (8 slots of 1KB each, $8000-$9FFF):
- IO 1 ($8000-$83FF): RAM Card (1KB window into first 256KB bank)
- IO 2 ($8400-$87FF): RAM Card (1KB window into second 256KB bank)
- IO 3 ($8800-$8BFF): RTC Card (DS1511Y)
- IO 4 ($8C00-$8FFF): Storage Card (CompactFlash/SD controller)
- IO 5 ($9000-$93FF): Serial Card (65C51 ACIA)
- IO 6 ($9400-$97FF): GPIO Card (65C22 VIA)
- IO 7 ($9800-$9BFF): Sound Card (ARMSID)
- IO 8 ($9C00-$9FFF): Video Card (TMS9918A or Pico9918)
Banked RAM (RAM Card, if installed):
- 512KB total RAM organized as two 256KB banks
- Bank selection via single latch at $83FF or $87FF (write 0-255)
- Writing to latch selects which 1KB window (of 256) appears at IO 1 and IO 2
- IO 1 ($8000-$83FF): 1KB window into first 256KB bank
- IO 2 ($8400-$87FF): 1KB window into second 256KB bank
- Both windows show the same bank number from their respective 256KB regions
- Allows access to full 512KB by switching between 256 different 1KB windows
The ac6502 bus includes:
- 16-bit Address Bus (A0-A15): Addresses up to 64KB memory space
- 8-bit Data Bus (D0-D7): Bidirectional data transfer
- Control Signals:
RW(Read/Write): Direction of data transfer (1=Read, 0=Write)PHI2(Clock): System clock signal (0.5-8 MHz typical)RESET: System reset (active low)IRQ: Interrupt request (active low)NMI: Non-maskable interrupt (active low)RDY: Ready signal for clock stretchingSYNC: Instruction fetch indicator
Clock Generation:
- Oscillator: Crystal or ceramic resonator (1-8 MHz typical)
- Clock can be:
- Free-running (normal operation)
- Single-stepped (via Clock Helper)
- Variable frequency (firmware in DEV)
- Clock Helper provides:
- Run/Stop control
- Single cycle stepping
- Single instruction stepping
Reset Circuit:
- Power-on reset via RC circuit (Main Board or Backplane Pro)
- Manual reset button
- Watchdog timer reset (optional, via RTC Card)
- IRQ (Maskable Interrupt): Used by serial (65C51), timers (65C22), and other peripherals
- NMI (Non-Maskable Interrupt): Currently unused but can be configured on some cards
- Interrupt vectors stored at
$FFFA-$FFFFin ROM
Each peripheral card uses address decoding logic to respond only to its assigned memory range:
- I/O Cards: Use 74HC138 3-to-8 decoder with address lines A15-A10, jumper-selectable for flexibility
- Main Board & Memory Card: Use 74HC00 NAND for RAM/ROM chip select
- Jumpers or DIP switches allow I/O address reconfiguration on cards
Example: Serial Card (65C51 ACIA)
- Occupies 4 bytes in I/O space ($9000-$9003, IO 5)
- 74HC138 decoder uses A15-A10 to select I/O slot
- Address decoder activates chip enable when A15-A10 match configured slot
- Lower address bits (A1-A0) select specific ACIA registers
The Hardware folder contains KiCad files for the system's custom-designed PCBs. These are divided into the following categories:
- Boards: The main board, development board, backplane boards and other peripheral boards
- Cards: Various peripheral cards for plugging into the backplane or card slot(s)
- Helpers: Additional boards that provide specific functionalities or interfaces
- Carts: Cartridge boards for ROM images
See the Hardware README for detailed technical specifications, pin assignments, and assembly notes.
These are the primary system boards that form the foundation of each computer configuration.
Purpose: Provides 5 card slots for peripheral cards and connects to the Main Board via ribbon cable
Key Components: Card edge connectors (×5), ribbon cable headers
Status: ✓ Tested
A passive backplane that provides mechanical and electrical connectivity for up to 5 peripheral cards, directly interconnecting the bus signals across all slots.
Purpose: Enhanced backplane with 5 card slots plus integrated clock, reset, and power circuitry
Key Components: Oscillator, reset IC, voltage regulators, card edge connectors (×5)
Clock Output: 1-8 MHz (selectable by swapping oscillator)
Power: 5V input, distributes regulated 5V to cards as needed
Status: ✓ Tested
An active backplane that not only interconnects cards but also provides centralized clock generation and power management, reducing component count on peripheral cards.
Purpose: Teensy 4.1-based 65C02 CPU emulator with networking and USB I/O
Key Components: Teensy 4.1 (600 MHz ARM Cortex-M7), Ethernet PHY, SD card slot, USB host
Emulation: Cycle-accurate 65C02 via vrEmu6502
Memory: Up to 32KB base RAM + 32KB banked RAM (default), expandable to 512KB banked RAM with PSRAM
Clock Speed: Variable from very slow to maximum (exceeding real 65C02)
Networking: Ethernet 10/100 Mbps with mDNS (hostname: 6502.local)
Storage: MicroSD card (up to 32GB)
I/O: USB keyboard, USB joystick (Xbox 360/One), serial (115200 baud)
Firmware: DB Emulator (PlatformIO project)
Status: ✓ Tested
The Dev Board eliminates the need for a physical 65C02 CPU by providing accurate emulation with enhanced debugging capabilities, network control, and instant program loading.
Purpose: 2.4" LCD display module providing TMS9918A VDP and SID audio emulation for the Dev Board
Key Components: ILI9341 TFT display (320×240), level shifters
Display: 2.4" TFT LCD, 320×240 resolution, 262K colors (256×192 active area with TMS9918A color borders)
Protocol: AV packet stream (4-byte packets at 6 Mbps via hardware UART) from DB Emulator
Connection: SPI interface to Dev Board
Firmware: DOB Display (PlatformIO project)
Audio: 3-voice SID 6581 synthesis via 8-bit PWM at 44.1 kHz
Status: ✓ Tested
Provides dedicated video and audio output for the DEV system, emulating the TMS9918A VDP and MOS 6581 SID in real time at ~60 FPS.
Purpose: Unified input board for matrix keyboard, PS/2 keyboard, and joysticks
Key Components: 65C22 VIA (Versatile Interface Adapter), ATmega1284p microcontroller
Inputs: Matrix keyboard, PS/2 keyboard, and joysticks
Interface: Parallel I/O to ac6502 bus (memory-mapped registers)
Firmware: KEH Controller
Status: ✓ Tested
Consolidates multiple input devices onto a single board, providing input for gaming and general use.
Purpose: 320×240 TFT LCD display interfaced via 65C22 VIA
Key Components: ILI9341 TFT controller, 65C22 VIA for I/O
Display: 320×240 resolution
Interface: 65C22 VIA parallel interface (slower than SPI but directly CPU-addressable)
Status:
An experimental board attempting to drive an LCD display directly from 65C02 via VIA. Performance may be limited due to parallel interface overhead.
Purpose: Core board containing 65C02 CPU, RAM, ROM, clock, and reset circuitry
Key Components: 65C02 CPU, 32KB SRAM (62256), 32KB EEPROM (28C256), oscillator, reset IC
CPU: W65C02S or equivalent
Clock Speed: 1-8 MHz (selectable by swapping oscillator)
RAM: 32KB (addresses $0000-$7FFF)
ROM: 32KB (addresses $8000-$FFFF)
Bus Connection: Ribbon cable header for expansion
Power: 5V DC input
Status: ✓ Tested
The Main Board is a self-contained 6502 computer suitable for standalone use or as the foundation for expanded systems.
Purpose: Combined VGA video output (via Pico9918) and audio output (via ARMSID)
Key Components: Raspberry Pi Pico (Pico9918 firmware), ARMSID module
Video: VGA 640×480 via Pico9918
Audio: ARMSID (SID chip emulation)
Interface: Memory-mapped I/O to ac6502 bus
Status: ✓ Tested
Used In: VCS (primary), DEV (alternative), COB (alternative)
Combines video and audio output on a single board for compact gaming console configurations.
Peripheral cards plug into backplane slots or directly onto the Main Board via single card slot.
Purpose: Visual status LEDs for address, data, and control bus monitoring
Key Components: LEDs (×32+), current-limiting resistors
LEDs: Show address bus (16), data bus (8), control signals (8)
Status: ✓ Tested
A classic "blinkenlights" panel that visualizes bus activity in real-time, invaluable for debugging and demonstrations.
Purpose: Hosts a 65C02 CPU in a card form factor for backplane systems
Key Components: W65C02S CPU socket, clock input, bus buffers
CPU: W65C02S (DIP-40 socket)
Clock: Provided by Backplane Pro or external source
Status: ✓ Tested
Allows the CPU to be installed on a card rather than the main board, enabling CPU upgrades or replacements.
Purpose: Hosts a 65816 16-bit CPU (backward-compatible with 65C02)
Key Components: W65C816S CPU socket, additional address lines (A16-A23)
CPU: W65C816S (DIP-40 socket)
Address Space: 16MB (24-bit addressing)
Status:
Provides 16-bit CPU capability and extended address space. Requires compatible memory and I/O cards to utilize extended features.
Purpose: General-purpose I/O using 65C22 VIA chip
Key Components: 65C22 VIA (Versatile Interface Adapter)
I/O Pins: 20 GPIO pins (2× 8-bit ports + 4 control lines)
Address Range: IO 6 ($9400-$97FF), configurable via jumpers
Timers: 2× 16-bit timers with interrupt capability
Shift Register: Serial I/O support
Status: ✓ Tested
The GPIO Card is highly versatile, supporting keyboards, displays, custom I/O devices, and timing-critical applications.
Purpose: 16×2 character LCD display via 65C22 VIA
Key Components: 65C22 VIA, 16×2 LCD module (HD44780-compatible)
Display: 16 characters × 2 lines
Interface: 65C22 VIA parallel interface (4-bit or 8-bit mode)
Address Range: IO 6 ($9400-$97FF), shared with GPIO Card
Status: ✓ Tested
Provides a simple text display for system messages, debugging output, or simple user interfaces.
Purpose: 32KB RAM + 32KB ROM with address decoding logic
Key Components: 32KB SRAM (62256), 32KB EEPROM (28C256), address decoder logic
RAM: 32KB at $0000-$7FFF
ROM: 32KB at $8000-$FFFF
Address Decoding: 74-series logic (74HC00)
Status: ✓ Tested
Essential card providing memory for COB systems where the CPU Card is used instead of the Main Board.
Purpose: Blank prototyping area for custom circuits
Key Components: Onboard small breadboard, bus access headers
Prototyping Area: Integrated breadboard
Bus Access: Full address, data, and control bus available
Status: ✓ Tested (verified bus connectivity)
Allows experimentation with custom circuits while maintaining access to the system bus.
Purpose: 512KB banked RAM expansion
Key Components: SRAM chips (512KB total), banking logic, bank select latch
Capacity: 512KB organized as two 256KB banks, each with 256× 1KB windows
Banking: Single latch at $83FF or $87FF selects 1KB window (0-255) for both IO slots
Bank Windows: IO 1 ($8000-$83FF) and IO 2 ($8400-$87FF)
Status: ✓ Tested
Dramatically expands memory capacity beyond the 65C02's 64KB address space. The single latch controls which 1KB window appears at both IO 1 (first 256KB) and IO 2 (second 256KB), allowing efficient access to the full 512KB.
Purpose: Real-time clock with battery backup
Key Components: Dallas DS1511Y (RTC with integrated SRAM and battery)
Clock: Year/month/day/hour/minute/second with Y2K support
Battery Backup: Lithium coin cell (maintains time during power-off)
SRAM: 256 bytes battery-backed SRAM
Alarm: Programmable alarm interrupt
Address Range: IO 3 ($8800-$8BFF)
Status: ✓ Tested
Provides persistent timekeeping for timestamps, scheduling, and time-based applications.
Purpose: RS-232 serial communication via 65C51 ACIA
Key Components: 65C51 ACIA (Asynchronous Communications Interface Adapter), MAX232 level shifter
Interface: RS-232 via DB9 connector
Baud Rate: 50 - 19200 bps (configurable via software)
Address Range: IO 5 ($9000-$93FF)
Status: ✓ Tested
Essential for terminal communication, program loading, and interfacing with modern PCs.
Purpose: Enhanced serial card with full modem control signals
Key Components: 65C51 ACIA, MAX232 (×2) for RS-232 level conversion
Features: Same as Serial Card plus DTR, DCD, and DSR modem control signals via second MAX232
Status: ✓ Tested
An improved version of the Serial Card with full modem control signal support for advanced serial communications.
Purpose: Audio output via ARMSID SID chip emulator
Key Components: ARMSID module (ARM-based SID emulation)
Audio: 3-voice synthesizer (SID chip emulation)
Output: RCA jack (line level)
Interface: Memory-mapped I/O (SID-compatible registers)
Address Range: IO 7 ($9800-$9BFF)
Status: ✓ Tested
Provides classic SID chip audio capabilities for games and music applications.
Purpose: CompactFlash storage interface
Key Components: CompactFlash socket, IDE interface logic
Capacity: Up to 128GB (CF card dependent)
Interface: IDE protocol (CF cards are IDE-compatible)
Address Range: IO 4 ($8C00-$8FFF)
File System: Raw sectors or FAT16/FAT32 with appropriate drivers
Status: ✓ Tested
Provides persistent storage for programs, data, and disk images. CompactFlash cards are rugged and widely available.
Purpose: Modern storage via SD card, 16MB Flash, and SPI interface
Key Components: SD card socket, SPI flash (16MB), SPI controller
SD Card: Up to 32GB (SDHC)
Flash: 16MB onboard SPI flash
Interface: SPI protocol
Address Range: IO 4 ($8C00-$8FFF)
Status:
Provides modern SD card storage plus onboard flash. More complex software required but offers higher capacities.
Purpose: VGA video output via Pico9918
Key Components: Raspberry Pi Pico running Pico9918 firmware
Video: VGA 640×480 @ 60Hz
Graphics:
TMS9918A-compatible modes (Pico9918 emulates classic video chip)
Colors: 16-color palette (TMS9918A modes)
Interface: Memory-mapped I/O (TMS9918A-compatible registers)
Address Range: IO 8 ($9C00-$9FFF)
Status: ✓ Tested
Provides VGA output with classic TMS9918A graphics modes, ideal for retro gaming and graphics applications.
Purpose: Custom programmable VGA output using Pi Pico with custom firmware
Key Components: Raspberry Pi Pico, resistor DAC, VGA connector
Video: VGA 640×480 (or custom resolutions)
Graphics: Fully programmable (custom framebuffer modes possible)
Interface: Memory-mapped I/O
Status:
An experimental card offering fully customizable VGA output modes. Requires custom firmware development.
Purpose: Composite video output via TMS9918A chip
Key Components: TMS9918A Video Display Processor (VDP), video RAM (16KB)
Video: Composite video output (NTSC or PAL)
Resolution: 256×192 pixels
Colors: 16-color palette
Sprites: 32 sprites (8×8 or 8×16 pixels)
Interface: Memory-mapped I/O (2-byte register interface)
Address Range: IO 8 ($9C00-$9FFF)
Status: ✓ Tested
Classic retro graphics using the authentic TMS9918A chip from 1970s/80s computers and consoles.
Purpose: Enhanced composite video via ATmega1284p microcontroller
Key Components: ATmega1284p, video DAC, composite video output
Video: Color composite video
Features: Microcontroller-generated video (programmable graphics modes)
Status:
Attempts to generate composite video using a microcontroller rather than dedicated video chip. Flexibility vs. complexity tradeoff.
Helper boards provide specialized interfaces, connectors, or functionality that complements the main boards and cards.
Purpose: Adds 2 additional card slots to existing backplane
Key Components: Card edge connectors (×2), ribbon cable headers
Slots: +2 expansion slots
Status: ✓ Tested
Increases expansion capability for systems requiring more peripherals.
Purpose: Interfaces ac6502 bus to standard breadboard
Key Components: Ribbon cable header, breadboard-compatible headers
Pinout: Full address, data, and control bus broken out
Status: ✓ Tested
Essential for prototyping custom circuits and testing ideas before committing to PCB designs.
Purpose: Manual clock control for debugging and single-stepping
Key Components: Clock manipulation buttons
Modes:
- Free-running (normal operation)
- Single cycle step (advance one clock cycle per button press)
- Single instruction step (advance one full instruction)
Status: ✓ Tested
Invaluable debugging tool allowing cycle-by-cycle or instruction-by-instruction execution.
Purpose: Interfaces GPIO Card to DB25 connector
Key Components: DB25 connector, header pins
Pinout: Maps VIA ports to standard DB25 pinout
Status: ✓ Tested
Provides DB25 connectivity for GPIO applications.
Purpose: 8 buttons + 8 LEDs for user I/O and testing
Key Components: Tactile switches (×8), LEDs (×8), current-limiting resistors
Inputs: 8 debounced buttons
Outputs: 8 indicator LEDs
Interface: Connects to GPIO Card (65C22 VIA)
Status: ✓ Tested
Simple I/O for testing, debugging, or basic user interaction.
Purpose: Interfaces GPIO Card to breadboard
Key Components: Header pins
Pinout: All GPIO pins broken out to breadboard-compatible headers
Status: ✓ Tested
Allows quick breadboard prototyping of GPIO-based circuits.
Purpose: Atari 2600-style joystick interface
Key Components: DB9 connector, pull-up resistors
Compatibility: Atari 2600, Commodore 64, Amiga joysticks
Inputs: Up, down, left, right, fire button (plus extra buttons)
Interface: Connects to GPIO Card
Status: ✓ Tested
Classic digital joystick interface for retro gaming.
Purpose: 64-key matrix keyboard + dual joystick ports
Key Components: Key switches (×64), diodes, DB9 connectors (×2)
Keyboard: 8×8 matrix (64 keys total)
Joysticks: 2× Atari-style joystick ports
Interface: Connects to GPIO Card (65C22 VIA)
Scanning: Matrix scanning via VIA ports
Status: ✓ Tested
Full keyboard input plus joystick support for gaming and general computing.
Purpose: Translates keyboard matrix and PS/2 keyboard to ASCII
Key Components: ATmega1284p microcontroller, PS/2 connector
Inputs: PS/2 keyboard OR 8×8 keyboard matrix (Keyboard Helper)
Output: ASCII characters via 65C22 VIA interface
Firmware: KEH Controller
Features:
- Dual input support (PS/2 + matrix simultaneously)
- ASCII conversion (0x00-0xFF including extended characters)
- Full modifier key support (Shift, Ctrl, Alt, Fn)
- Function keys F1-F12
- Circular buffer (prevents data loss)
Status: ✓ Tested
Provides intelligent keyboard handling, converting raw scancodes to ASCII for easier software development.
Purpose: 4×6 keypad
Key Components: Matrix keypad (4×6)
Keys: 0-9, A-F (hex), plus 8 function keys
Interface: Connects to GPIO Card (matrix scanning)
Status: ✓ Tested
Essential for KIM-1-style hexadecimal data entry and system control.
Purpose: LCD display designed to pair with Keypad Helper
Key Components: LCD module (HD44780-compatible)
Display: 16×2 characters (typical) or 20×4
Interface: Connects to GPIO Card via parallel interface
Status: ✓ Tested
Displays output for KIM-1-style system (addresses, data, messages).
Purpose: Interfaces Arduino Mega 2560 R3 to ac6502 bus
Key Components: Headers for Arduino Mega
Microcontroller: Arduino Mega 2560 R3 (user-supplied)
Use Cases:
- 65C02 bus monitoring
- Custom peripherals programmed in Arduino IDE
- I/O expansion
- Sensor interfaces
- LCD controllers
Interface: Connects to ac6502 bus
Status: ✓ Tested
Leverages the Arduino ecosystem for easy peripheral development.
Purpose: PS/2 keyboard interface with ASCII conversion
Key Components: ATmega328p microcontroller, PS/2 connector
Input: PS/2 keyboard
Output: ASCII characters via 65C22 VIA or matrix emulation
Firmware: PS2 Keyboard Controller
Features:
- PS/2 protocol decoding
- ASCII conversion
- Extended scancode support
- Function key emulation (F1-F10 via Fn + numbers)
Status: ✓ Tested
Simpler alternative to Keyboard Encoder Helper when only PS/2 input is needed.
Purpose: Adapts the VERA module to ac6502 bus
Key Components: VERA module (from Commander X16 project), level shifters, bus interface
Video: VERA capabilities (see Commander X16 VERA)
Interface: Memory-mapped I/O (VERA register interface)
Status: ✓ Tested
Adapter for the powerful VERA module from the Commander X16 project.
Purpose: Swappable ROM cartridge for VCS gaming system
Key Components: EEPROM or Flash ROM (up to 16KB), edge connector
Capacity: 16KB (addresses $C000-$FFFF when inserted)
Programming: Requires TL866 or similar EEPROM programmer (for 28C256/27C256 chips), or in-system programming (if flash-based)
Status: ✓ Tested
Allows game cartridge-based operation similar to classic game consoles.
The Firmware folder contains source code for firmware running on various microcontrollers used in the project (Teensy 4.1, ATmega328p, ATmega1284p, ATTiny85). Firmware is written in C/C++ and is developed using PlatformIO.
See the Firmware README for detailed information on building and flashing firmware.
| Firmware Project | Target Hardware | Microcontroller | System | Description |
|---|---|---|---|---|
| DB Emulator | Dev Board | Teensy 4.1 | DEV | 65C02 emulator with networking, USB I/O, and web control |
| DOB Display | Dev Output Board | Teensy 4.0 | DEV | TMS9918A VDP + SID audio emulation on ILI9341 LCD |
| KEH Controller | Keyboard Encoder Helper, Input Board Rev 1.0 | ATmega1284p | COB/VCS | Dual keyboard (PS/2 + matrix) to ASCII converter |
| PS2 Keyboard Controller | PS2 Helper | ATmega328p | COB | PS/2 keyboard to matrix interface |
| STP Controller | Storage Card Pro | ATmega328p | COB/VCS | SD card and SPI flash storage controller |
DB Emulator (Dev Board):
- Cycle-accurate 65C02 emulation via vrEmu6502
- Ethernet connectivity with mDNS (
6502.local) - Embedded web server with REST API and web application
- SD card support for ROM/program loading
- USB keyboard and joystick input (Xbox controllers)
- Variable CPU speed control
- Memory snapshot save
- Serial terminal interface (115200 baud)
- Real-time clock support
DOB Display (Dev Output Board):
- TMS9918A VDP emulation (Graphics I/II, Text, and Multicolor modes)
- SID 6581 3-voice audio synthesis (triangle, sawtooth, pulse, noise + full ADSR)
- 320×240 color LCD display (2.4" ILI9341) with 256×192 active area and TMS9918A color borders
- ~60 FPS rendering from VRAM state
- AV packet protocol at 6 Mbps via hardware UART from DB Emulator
KEH Controller (Keyboard Encoder Helper):
- Dual input support (PS/2 + keyboard matrix simultaneously)
- ASCII conversion with extended character set (0x00-0xFF)
- Full modifier key support (Shift, Ctrl, Alt, Fn)
- Function keys F1-F12
- Circular buffering to prevent key loss
PS2 Keyboard Controller (PS2 Helper):
- PS/2 protocol decoding with parity checking
- MT8808 crosspoint switch control for matrix emulation
- Extended scancode support
- Function key emulation (Fn + numbers)
Prerequisites:
- PlatformIO Core or PlatformIO IDE (VS Code extension)
- Python 3.7+ (bundled with PlatformIO)
- USB cable for programming
Building Firmware:
cd Firmware/<project_name>
pio run # Build
pio run --target upload # Build and uploadUsing VS Code:
- Open folder in VS Code (with PlatformIO extension installed)
- PlatformIO: Build (Ctrl/Cmd+Alt+B)
- PlatformIO: Upload (Ctrl/Cmd+Alt+U)
Serial Monitoring:
pio device monitor # PlatformIO serial monitorSee individual firmware project README files for specific build instructions and configuration options.
The ac6502 project has several companion repositories containing software that runs on the 65C02 systems, as well as development tools.
- Software emulator for the ac6502 computer systems
- Allows running and testing 65C02 programs without physical hardware
- Useful for software development and debugging
The following repositories contain 65C02 assembly code that runs on the hardware:
- General 65C02 assembly code examples and utilities
- Sample programs demonstrating hardware features
- Library routines for common tasks
- BIOS (Basic Input/Output System) for all systems
- Low-level hardware initialization and I/O routines
- System ROM code providing BASIC and machine code monitor
- NOP (No Operation) test program
- Minimal ROM code for hardware testing
- Useful for verifying basic CPU and memory operation
- Woz Monitor (Apple I monitor program)
- Classic machine language monitor by Steve Wozniak
- Adapted for the ac6502 project hardware using the Serial Card
To use these programs on your ac6502 hardware:
- Clone the desired repository
- Assemble the code using a 65C02 assembler (ca65, vasm, or similar)
- Program the resulting binary to EEPROM using TL866 or similar programmer
- Install the EEPROM in your ac6502 system
- Power on and test
See individual repository README files for specific build and usage instructions.
The CAD folder contains mechanical designs for the project including 3D models and enclosure designs.
Contents:
- Bases/: 3D models of complete system assemblies (COB, DEV, VCS)
- Card/: 3D models of individual card designs
- Enclosures/: Custom enclosure designs for various systems
- Tops/: Top panel/cover designs
File Formats:
- STL files (for 3D printing)
- STEP files (for CAD editing)
Use Cases:
- 3D printing custom enclosures
- Visualizing system assembly
- Creating custom mounting solutions
- Designing front panels and bezels
See the CAD README for details on using and modifying CAD files.
The Production folder contains JLCPCB-ready production files for manufacturing PCBs, including Gerber files, BOMs (Bill of Materials), and assembly instructions.
- Navigate to desired board folder in Production/
- Locate Gerber files (usually in a ZIP archive named
<BoardName>_Gerber.zip) - Go to JLCPCB.com and create account (if needed)
- Upload Gerber ZIP file using "Add gerber file" button
- Configure PCB options:
- Layers: 2 or 4 (check board specifications)
- Thickness: 1.6mm (typical)
- Color: Your choice
- Surface Finish: HASL (economical) or ENIG (better for edge connectors)
- Remove Order Number: Optional
- Select SMD Assembly (if desired):
- Enable PCB Assembly option
- Upload BOM and Pick-and-Place (CPL) files from Production folder
- Review component availability (JLCPCB may not stock all parts)
- Confirm component placement in preview
- Review and order:
- Verify quantities (5 or 10 boards minimum typically)
- Add to cart and checkout
- Manufacturing time: typically 2-7 days + shipping
For each board/card/helper:
- Gerber files: PCB manufacturing data (layers, drill files, solder mask, silkscreen)
- BOM (Bill of Materials): CSV file with component list and JLCPCB part numbers
- CPL (Component Placement List): Pick-and-place file for SMD assembly
- Design rules: KiCad design rule (.kicad_dru) file optimized for JLCPCB
See the Production README for detailed ordering guides and quality control checklists.
The Schematics folder contains schematic diagrams for all PCBs in the project. Schematics are created using KiCad 7.0+ and provide detailed component information and electrical connections.
Contents:
- Complete schematics for every board, card, and helper
- PDF exports (for easy viewing without KiCad)
Schematic Conventions:
- Power nets: VCC/+5V (positive rail), GND (ground)
- Signal naming: descriptive labels (A0-A15 for address bus, D0-D7 for data bus)
- Component references: Standard prefixes (U=IC, R=resistor, C=capacitor, D=diode, J=connector)
- Component values: Marked on schematic (resistor ohms, capacitor farads)
See the Schematics README for details on navigating and understanding schematics.
The Libraries folder contains KiCad symbol libraries, footprint libraries, and 3D models used throughout the project.
Contents:
- 6502 Parts.kicad_sym: Symbol library with ac6502-specific components
- 6502 Parts.pretty/=: Footprint library (PCB footprints)
- 6502 Logos.pretty/: Logo footprints for PCB silkscreen
- A.C. Wright Logo.pretty/: A.C. Wright Design logo footprints
- Models/: 3D STEP models for components (see Models README)
Using Libraries in KiCad Projects:
- Open KiCad project
- Go to Preferences → Manage Symbol Libraries / Manage Footprint Libraries
- Add library paths pointing to this folder
- Libraries will appear in symbol/footprint choosers
Adding New Components:
- Open appropriate library in KiCad Library Editor
- Create new symbol/footprint following existing conventions
- Save and commit changes (if contributing back to project)
See the Libraries README for detailed library usage instructions.
Contributing to or extending the ac6502 project follows these general workflows.
-
Clone/Fork Repository:
git clone https://github.com/acwright/6502.git cd 6502 -
Open Hardware Design in KiCad 7.0+:
Hardware/<BoardName>/Rev X.X/<BoardName>.kicad_pro -
Make Schematic Changes:
- Edit schematic in KiCad Schematic Editor
- Update component values, add/remove components, modify connections
- Run Electrical Rules Check (ERC) to verify
-
Update PCB Layout:
- Update PCB from schematic (Tools → Update PCB from Schematic)
- Adjust component placement and routing as needed
- Run Design Rules Check (DRC) to verify JLCPCB compatibility
- Use design rules file from Production folder if available
-
Generate Production Files:
- Production files are generated using Fabrication-Toolkit
- This KiCad plugin automates generation of Gerbers, drill files, BOMs, and pick-and-place files for JLCPCB
- Install the plugin and run it from KiCad to generate all required manufacturing files
- Output files should be moved to approprite folder in Production folder
-
Test Design:
- Order prototype from JLCPCB
- Assemble and test thoroughly
- Document findings
-
Commit Changes:
git add Hardware/<BoardName>/ git commit -m "Description of changes" git push
-
Start with Template:
- Use existing card design as template (copy folder structure)
- OR use blank template from Templates/ folder
-
Define Requirements:
- What functionality does the card provide?
- What I/O address range will it occupy?
- What connectors are needed?
- Power consumption estimate
-
Schematic Design:
- Create multi-sheet schematic if complex
- Use ac6502 Parts library for common components
- Include address decoding logic
- Add bus buffers if driving bus signals
- Follow existing card conventions for connector pinouts
-
PCB Layout:
- Match card edge connector footprint to backplane
- Place connectors for easy access
- Route power planes (4-layer board) or wide power traces (2-layer)
- Maintain signal integrity (short traces for high-speed signals)
- Add mounting holes (if applicable)
-
Verify Design Rules:
- Run DRC with JLCPCB design rules
- Check trace widths (minimum 0.15mm for outer layers)
- Check clearances (minimum 0.15mm)
- Verify drill sizes (minimum 0.3mm)
-
Documentation:
- Update README with card description
- Add to Board Compatibility Matrix
- Create schematic PDF
- Document I/O addresses and register map
-
Build and Test:
- Order prototype
- Test all functionality
- Update Testing Status when verified
-
Set Up Environment:
cd Firmware/<ProjectName> pio init # If creating new project
-
Write Code:
- Follow existing firmware structure
- Use libraries when available (ArduinoJson, Bounce2, etc.)
- Comment code thoroughly
- Use meaningful variable/function names
-
Build and Test:
pio run # Build pio run --target upload # Upload to microcontroller pio device monitor # Monitor serial output
-
Debug:
- Add debug print statements
- Use serial monitor to observe behavior
- Test edge cases (invalid inputs, boundary conditions)
-
Document:
- Update firmware README with features
- Document API/registers (for microcontrollers acting as peripherals)
- Add comments explaining complex logic
-
Create Enclosure:
- Measure assembled boards accurately
- Design in Fusion 360, OpenSCAD, FreeCAD, or similar
- Allow clearances for connectors, cables, ventilation
- Include mounting holes for standoffs
-
Export Models:
- STL for 3D printing
- STEP for CAD interchange
-
Test Print:
- Print prototype (PLA or PETG recommended)
- Verify fit with actual boards
- Iterate as needed
-
Commit to Repository:
git add CAD/<EnclosureName>/ git commit -m "Add enclosure for <SystemName>" git push
Contributions to the ac6502 project are welcome! Whether you're fixing bugs, adding features, testing untested boards, or improving documentation, your help is appreciated.
- Fork the Repository on GitHub
- Clone Your Fork:
git clone https://github.com/<your-username>/6502.git cd 6502
- Create a Feature Branch:
git checkout -b feature/<your-feature-name>
- Make Your Changes (see Development Workflow)
- Test Thoroughly (build and verify your changes work)
- Commit with Clear Messages:
git add . git commit -m "Add <feature>: <clear description>"
- Push to Your Fork:
git push origin feature/<your-feature-name>
- Submit a Pull Request on GitHub:
- Describe your changes
- Reference any related issues
- Include photos/screenshots if applicable
- Note testing performed
Hardware:
- New card/helper designs
- Improvements to existing boards
- Bug fixes (incorrect component values, routing errors)
- Design optimizations (cost reduction, improved performance)
Firmware:
- New features for existing firmware
- Bug fixes
- Performance improvements
- Support for additional peripherals
Software:
- 65C02 assembly programs and examples
- Test programs
- BIOS improvements
- Monitor/debugger enhancements
Documentation:
- Improved README files
- Tutorials and how-to guides
- Assembly instructions with photos
- Troubleshooting additions
Testing:
- Testing UNTESTED boards
- Reporting bugs and issues
- Validating fixes
Code Style:
- C/C++: Follow existing style
Commit Messages:
- Use present tense ("Add feature" not "Added feature")
- Be specific ("Fix Serial Card address decode logic" not "Fix bug")
- Reference issues if applicable (#123)
Hardware Design:
- Use KiCad 7.0+
- Include all library dependencies
- Run ERC (Electrical Rules Check) and DRC (Design Rules Check) before committing
- Follow existing board naming conventions
- Generate production files for new designs
Firmware:
- Test on actual hardware before submitting
- Include README or comments explaining usage
- Document any new PlatformIO dependencies in platformio.ini
Documentation:
- Use clear, concise language
- Assume intermediate skill level (explain advanced concepts, not basics)
- Include examples where helpful
- Test all commands/procedures before documenting
- Be respectful and constructive
- Help newcomers with patience
- Give credit to others' work
- Focus on technical merit
- Keep discussions on-topic
Bug Reports:
- Use GitHub Issues
- Include:
- Board/firmware name and revision
- Steps to reproduce
- Expected vs. actual behavior
- Photos/screenshots if applicable
- Error messages (verbatim)
Feature Requests:
- Describe the feature and use case
- Explain why it's valuable
- Suggest possible implementation (optional)
- GitHub Issues: Technical questions, bug reports
- 6502.org Forums: General 6502 development discussion
- Reddit r/beneater: Retro computing community
Thank you for contributing to the ac6502 project!
This project is licensed under the CERN Open Hardware Licence Version 2 - Permissive (CERN-OHL-P v2).
You are free to:
- Use the designs for any purpose (personal, educational, commercial)
- Study the designs and learn from them
- Modify the designs to suit your needs
- Distribute copies of the original or modified designs
- Manufacture products based on these designs
- Sell products based on these designs
Under these conditions:
- Attribution: Give credit to the original designers
- Share-Alike (for documentation only): If you distribute modified designs, you must make the source files available under the same license
- No Warranty: Designs are provided "as-is" without warranty of any kind
Firmware and software components may be licensed differently (check individual firmware folders). Generally:
- Original firmware: CERN-OHL-P v2 or MIT License
- Third-party libraries: Licensed under their respective licenses (see platformio.ini and library documentation)
For Personal Use:
- Build as many as you want
- Modify however you like
- No attribution required (but appreciated!)
For Commercial Use:
- You may manufacture and sell products based on these designs
- Attribution required (include link to this repository or credit in documentation)
- Provide source files if you've modified the designs (share-alike for documentation)
For Educational Use:
- Excellent for teaching digital design, computer architecture, embedded systems
- Use in classrooms, workshops, tutorials freely
- Attribution appreciated
This project uses several third-party hardware modules and software libraries:
- Pico9918: GitHub - Check repository for license
- vrEmu6502: GitHub - Check repository for license
- ARMSID: Commercial product from RetroComp.cz
- Arduino Libraries: Various (MIT, GPL, Apache - see platformio.ini)
Respect the licenses of third-party components when using or redistributing.
See the LICENSE file for the complete CERN-OHL-P v2 license text.
Project Maintainer: A.C. Wright
Repository: https://github.com/acwright/6502


