Neo6502 › Articles › Neo6502
Neo6502: a real 65C02 and an RP2040 for 30 euros — our work in progress
The Olimex board, why Tachibana cares, ten projects under way — and what we do not claim yet.
The Neo6502 is a small board from Olimex (80 × 55 mm, OSHW-certified open hardware, 30 euros): a real W65C02S processor, an RP2040 microcontroller with 2 MB of flash, a DVI/HDMI output, a USB-A host port for the keyboard, a UEXT connector, a 6502 bus connector and audio out. The firmware, written by Paul Robson, turns the RP2040 into the machine's chipset: 320×240 video in 256 colours, sprites, tiles, blitter, 4-voice sound, FAT32 files on a USB stick, all driven from the 6502 through an API at $FF00. NeoBASIC boots instantly; C (llvm-mos, cc65) and assembly are supported.
The Neo6502 at a glance
| Processor | W65C02S |
| Microcontroller | RP2040, 2 MB flash |
| Video | DVI/HDMI — 320×240, 256 |
| Keyboard | USB-A host |
| Expansion | UEXT, 6502 bus |
| Audio | 3.5 mm, speaker |
| Form factor, licence | 80 × 55 mm, OSHW |
| Price | 30 € |
320×240 video in 256 colours, 6.25 MHz and ≈ 61K of usable RAM: figures from our repositories' documents; the rest comes from the Olimex product sheet.
1. Why Tachibana cares
A 65C02 at 6.25 MHz, about 61K of usable RAM (the screen lives on the RP2040 side), a real palette and fast files: for our Oric ports that is six times the speed and three times the memory, on a machine that exists, is available, and costs 30 euros. And the 6502 bus comes out on a connector. We see both a software test bench and a target platform.
2. Phosphoneo, the reference model
In the line of Phosphoric, Phosphoneo is a golden-model emulator of the Neo6502: cycle-stepped, 65C02 core 100% validated on the SingleStepTests oracle (2.54 million cases), firmware API linked from the official code, deterministic tooling (headless, captures, auto-typing, traces, savestates). Sprint 1 delivered (v0.2.0): NeoBASIC boots headless and captures match the official emulator.
3. Neo6502kbd, the keyboard
The firmware provides an ASCII queue and the raw state of each key. Neo6502kbd adds, on the 6502 side, a 65C02 assembly driver (ca65): key-press detection, an event queue (scancode, modifiers), a configurable base / Shift / AltGr / Ctrl mapping compiled from a readable .kmap file (us, fr) by neokbd, a Go tool that generates, checks and simulates.
4. Neo6502bbc, BBC Micro games
The BBC Micro and the Neo6502 share the 6502; BBC games call the MOS through fixed vectors at $FFxx, easy to repatch. Neo6502bbc redirects OSWRCH, OSBYTE, OSWORD, OSCLI, OSRDCH, OSFIND and OSGBPB to the firmware API. Epic 3 in progress: a BBC Model B emulator (reload, bbc branch) boots MOS 1.20, BASIC 2 and DFS on the PC and takes Spellbinder to its first playable room. The Neo6502 does better than the Oric for these ports: native 320 pixels, MODE 5 in 4 exact colours.
5. The firmware fork
Three documented sprints: PC emulator and reference captures; video modes (PicoDVI budget, multi-mode architecture, Hercules 720×350 with a 9×14 font, 320×256 in 16 colours, screen pages, XOR sprites); system (tick IRQ, a 10-vector pre-emptive scheduler in the 6502 kernel, RP2040 multi-boot: a selector and four 480K flash slots for the Neo firmware and reload BBC, Oric and Apple //e images, chosen from the monitor).
6. AsteroNeo, Astéroric ported
AsteroNeo is the port of Astéroric, our study clone of Asteroids for the Oric-1: the game logic (waves, fragmentation, saucer AI, hyperspace, high scores — transposed from the arcade rev 4 disassembly) is kept as is in cc65 C; everything that touched the Oric hardware is replaced by the firmware API — XOR lines and pixels in mode 0 (320×240), asteroids as polygons derived from the arcade shapes and smoothed (24/16/10 vertices) drawn by the RP2040 (poly_xor in assembly), keyboard by remappable HID codes, 4-channel sound, a 30 Hz game step on 60 Hz frames. Sprint 1 delivered, sprint 2 (playtest and polish) under way: v0.2.0, asteroneo.neo binary published on GitHub and Framagit, host tests (gcc), Phosphoneo captures compared bit for bit, smoke test in the official emulator.
7. Neo6502Prophet, the program repository
Neo6502Prophet is an independent Go reimplementation of the Prophet server, the Neo6502 community's program repository: the prophet.neo client protocol reproduced byte for byte, hardened point by point (token-protected refresh, bounded inputs, confined files, SHA-256 fingerprints), dual HTTP and HTTPS listeners, static .neo verification and dynamic audit in Phosphoneo (56 programs out of 56 replayed), web interface, our own repository where AsteroNeo is published. In production at prophet.3617.fr; a native graphical client has started.
8. The framing stage
Neo6502drive: virtual hard disk and floppies on a Feather RP2040 USB Host, as a FAT32 USB stick (MSC mode, no driver) or as a UEXT block device. Oric 2 Neo: a next-generation Oric on the Neo6502, Oric-1/Atmos compatible, extended by ROM and firmware. Neo6502civ: Civilization 1 in 6502 assembly (blitted mono framebuffer). Neo6502scumm: Maniac Mansion through the SCUMM v0 interpreter. All in sprint 0: framing, no code.
9. What we do not claim
None of these bricks has run on a board yet: everything is checked in the official emulator, in Phosphoneo and in co-simulation (libemul). The DVI renderer, the clock change, the timer and the bus loop are waiting for a Neo6502 on the desk. The validation protocols are written; they will be run as soon as the board arrives.