pico6502
Uebersicht
Der pico6502 ist das Gegenstueck zum picoZ80 fuer die 6502-Familie. Er verwendet die identische Board-Hardware โ einen RP2350B-Mikrocontroller, 8MB PSRAM, 16MB Flash und einen ESP32-Koprozessor โ zielt jedoch auf den MOS 6502 DIP-40-Sockel statt auf den Z80 ab. Wenn er in einen beliebigen 6502-basierten Computer eingebaut wird, ersetzt der pico6502 die physische CPU und uebernimmt die vollstaendige, zyklusgenaue Steuerung der 6502-Adress-, Daten- und Steuerbusse ueber die PIO-Zustandsmaschinen des RP2350.
Wie der picoZ80 wird der pico6502 vollstaendig ueber JSON konfiguriert. Eine
config.json-Datei auf der SD-Karte definiert die Speicherbelegung, ROM-Images und Treiberbindungen. Fuer die Anpassung an einen anderen 6502-basierten Host oder die Aenderung des Speicherlayouts ist keine Neukompilierung erforderlich. Die gesamte Verwaltung erfolgt ueber eine browserbasierte Oberflaeche, die vom integrierten ESP32 bereitgestellt wird.
- Drop-in 6502-Ersatz
- passt in jeden 6502 DIP-40-Sockel. Der Host sieht durchgehend korrektes 6502-Bus-Timing ueber das PIO-Interface. - Zyklusgenauer PIO-Bus-Interface
- RP2350 PIO-Zustandsmaschinen verarbeiten das duale PHI1/PHI2-Taktsignal des 6502, RNW, SYNC, IRQ, NMI, RDY und RESET-Signale. - Grosser Bank-Speicherbereich
- 8MB PSRAM als 64 Baenke x 64KB, konfigurierbar in 512-Byte-Bloecken als RAM, ROM, PHYSICAL oder FUNC-Typen. - Framework fuer virtuelle Geraete
- jeder Speicherbereich kann durch eine C-Handler-Funktion unterstuetzt werden, was virtualisierte Peripheriegeraete wie 6522 VIA, 6845 CRTC oder benutzerdefinierte I/O ermoeglicht. - ROM-Image-Laden
- ROM-Images fuer den Host-Computer (BIOS, Monitor, Sprach-ROMs) werden auf der SD-Karte gespeichert und beim Booten in das PSRAM geladen. - WiFi und Web-Verwaltung
- die gleiche siebensseitige Bootstrap-Weboberflaeche wie beim picoZ80 โ Dashboard, Konfigurationseditor, Dateimanager, Persona-Auswahl, OTA-Firmware-Updates, WiFi-Manager. - Duale Firmware-Partitionen
- zwei 5MB-Firmware-Slots mit OTA-Update-Unterstuetzung und Bootloader-verwalteter Partitionsumschaltung. - USB-Firmware-Update
- der Bootloader stellt eine USB-Bruecke fuer das initiale Flashen ohne Hardware-Debugger bereit.
Hardware
Die pico6502-Platine (Revision 2.2) ist ein kompaktes 52mm x 19mm Board, das das gleiche Grunddesign wie der picoZ80 teilt, aber anstelle eines Z80-Interfaces ein 6502-spezifisches Bus-Interface traegt. Vier Schaltplanseiten decken den RP2350B-Prozessor, den ESP32-Koprozessor, das 6502-Bus-Interface und die Stromversorgung ab. Der USB-Hub des picoZ80 v2.5 ist in der aktuellen pico6502-Revision nicht verbaut. Die gesamte Logik arbeitet mit 3,3V, wobei das Bus-Interface fuer die 5V-Signalpegel des 6502 ausgelegt ist.
Hauptkomponenten
- RP2350B (Cortex-M33 Dual-Core)
- Hauptprozessor mit bis zu 300MHz. Core 1 fuehrt die 6502-Emulations-Hauptschleife aus; Core 0 verarbeitet Datei-I/O, USB und ESP32-Relay. 512KB On-Chip-SRAM. - 16MB SPI Flash
- gleiches Layout wie beim picoZ80: Bootloader, zwei 5MB-Anwendungsslots, zwei Konfigurationsslots, allgemeine Konfiguration und Partitionstabelle. - 8MB PSRAM (SPI)
- 64 Baenke x 64KB Bank-Adressraum fuer den emulierten 6502. Speicherblock-Zeiger-Arrays und I/O-Funktionszeiger-Arrays befinden sich im PSRAM oberhalb des RAM/ROM-Bereichs. - ESP32-Koprozessor
- WiFi, SD-Karte, Webserver. Kommuniziert mit dem RP2350 ueber 50MHz FSPI und 460,8kBaud UART. - SD-Kartenslot
- FAT32, verwaltet vom ESP32. Speichertconfig.json, ROM-Images und Disk-Images. - USB-Hub
- integrierter USB-Hub fuer Host-Konnektivitaet und Firmware-Update-Bruecke. - 3,3V Stromversorgung
- Abwaertswandler von den 5V am VCC-Pin des 6502 DIP-40.
Die pico6502-Hardware wurde in KiCad entworfen. Die aktuelle Revision ist v2.2. Schaltplan- und PCB-Layoutdateien befinden sich im Projektrepository unter
Blatt 1 โ RP2350B-Prozessor
kicad/PICO6502/.
Die vier Schaltplanseiten sind:
RP2350B QFN-80 GPIO-Zuweisungen fuer den 6502-Bus, 16MB Flash, 8MB PSRAM und ESP32-Kommunikation. Der 6502-Bus benoetigt A0-A15, D0-D7, PHI0/PHI1/PHI2, RNW, SYNC, IRQ, NMI, RDY und RESET โ was die Mehrheit der 48 GPIO-Pins des RP2350B belegt.

ESP32-Modul, SD-Karten-Interface, Antenne und Interprozessor-Kommunikation (FSPI + UART). Funktional identisch mit dem picoZ80-Design.

Die DIP-40-Sockelanschluesse und das Bus-Interface-Widerstandsnetzwerk. Anders als der Z80 hat der 6502 keinen separaten I/O-Adressraum โ alle Peripheriegeraete sind speicherabgebildet. Alle Adress-, Daten- und Steuersignale werden ueber Serienwiderstande zu den RP2350-GPIO-Pins geleitet, die von den PIO-Zustandsmaschinen verwaltet werden.

TLV62590BV 5V-auf-3,3V synchroner Abwaertswandler mit Ein-/Ausgangsfilterung. Wird vom VCC-Pin des 6502 DIP-40-Sockels gespeist.

KiCad-Quelldateien:
kicad/PICO6502/PICO6502_Schematic.pdf (Schaltplan-PDF) und kicad/PICO6502/ (vollstaendiges KiCad-Projekt).
👀 Interaktive Stueckliste โ pico6502 v2.2 (PCB-Bauteilplatzierungs-Viewer)
Architektur
Dual-Core-Design
Die RP2350B-Kernzuweisung spiegelt den picoZ80:
Core 0 โ USB-Bruecke, Firmware-Update-Koordination, Datei-I/O-Relay zum ESP32, ESP32-UART-Befehlsverteilung, Partitionsverwaltung.
Core 1 โ Die 6502-Emulations-Hauptschleife. Bedient die PIO-FIFOs zur Verarbeitung von 6502-Bustransaktionen, loest jede Adresse gegen die Speicherbelegung auf und leitet an PSRAM-, PHYSICAL-Durchleitung oder FUNC-Virtual-Device-Handler weiter. Die innere Schleife laeuft aus dem RP2350-SRAM fuer minimale Latenz.
Die Inter-Core-Kommunikation verwendet das gleiche
PIO-Bus-Interface
queue_t-Nachrichtenverfahren wie beim picoZ80 und transportiert Nachrichten fuer Disketten-/Disk-Image-Wechsel, Konfigurationsneuladung, Datei-Lesen/Schreiben und Firmware-Versionsabfragen.
Das 6502-Bus-Interface ist in
M6502.pio implementiert. Der RP2350 bietet drei PIO-Bloecke; die 6502-Firmware nutzt alle drei:
- PIO 0 โ Adress- und Datenbus (GPIO 0-23)
- fuehrtm6502_addr(A0-A15, GPIO 0-15) undm6502_data(D0-D7, GPIO 16-23) gleichzeitig aus. Adressworte werden in den Core 1 FIFO geschoben; Daten werden je nach RNW getrieben oder abgetastet. - PIO 1 โ Steuersignale und Zyklusausfuehrung (GPIO 16-47)
- fuehrt den Zyklussequenzer (m6502_cycle), Opcode-Fetch (m6502_fetch), Speicher-Lesen/Schreiben (m6502_read,m6502_write), IRQ-Erkennung (m6502_irq), NMI-Erkennung (m6502_nmi) und Set-Overflow-Erkennung (m6502_so) aus. - PIO 2 โ Takterzeugung (GPIO 16-47)
- fuehrtm6502_clock_6502aus, das die PHI1- und PHI2-Zweiphasen-nicht-ueberlappenden Takte aus einem externen PHI0-Eingang erzeugt und so korrektes 6502-Bus-Timing unabhaengig vom Core 1-Scheduling sicherstellt.
M6502.pio ist:
| Programm | Funktion |
|---|---|
m6502_clock_6502 |
Erzeugt PHI1/PHI2-Zweiphasentakte aus externem PHI0. |
m6502_addr |
Gibt 16-Bit-Adresse (A0-A15) aus und signalisiert Zyklusstart (IRQ 0). |
m6502_data |
Treibt oder tastet D0-D7 ab (IRQ 1), mit Tri-State-Steuerung. |
m6502_irq |
Erkennt IRQ-Aktivierung (IRQ Flag 5). |
m6502_nmi |
Erkennt NMI-Aktivierung (IRQ Flag 4). |
m6502_so |
Erkennt Set Overflow (SO)-Pin-Aktivierung (IRQ Flag 6). |
m6502_cycle |
Uebergeordneter Bus-Zyklus-Sequenzer; IRQ 7 signalisiert Austritt aus der Ausfuehrungsschleife. |
m6502_fetch |
Opcode-Fetch-Buszyklus (PHI2 + RNW = Lesen). |
m6502_read |
Speicher-Lese-Buszyklus. |
m6502_write |
Speicher-Schreib-Buszyklus. |
Zustandsmaschinen synchronisieren sich ueber PIO-IRQ-Flags: IRQ 0 (Adresse/Zyklusstart), IRQ 1 (Datenphase), IRQ 4 (NMI), IRQ 5 (IRQ), IRQ 6 (SO), IRQ 7 (Ausfuehrungsschleifen-Austritt). Der Hauptunterschied zum Z80-Interface ist das Zweiphasentaktsystem des 6502 โ PHI1 und PHI2 ueberlappen sich nicht; der Adressbus ist bei der steigenden PHI1-Flanke gueltig und Daten werden vor der fallenden PHI2-Flanke praesentiert oder abgetastet. Die Widmung von PIO 2 ausschliesslich fuer die Takterzeugung stellt sicher, dass das 6502-Timing unabhaengig von der Core 1-Aktivitaet immer korrekt ist.
Speichermodell
Das 6502-Speichermodell ist strukturell identisch mit dem Z80-Modell, jedoch ohne separaten I/O-Adressraum โ da der 6502 kein IORQ-Aequivalent hat, erscheinen alle Peripherieregister in der 64KB-Speicherbelegung. Die gleiche dreistufige Architektur gilt:
Stufe 1 โ RP2350 SRAM: 128-Eintrags-Blockzeiger-Array fuer O(1)-Dispatch pro 512-Byte-Block.
Stufe 2 โ PSRAM (8MB): 64 Baenke x 64KB RAM/ROM-Images und Funktionszeiger-Arrays.
Stufe 3 โ Flash (16MB): Firmware, ROM-Images, minimierte Konfigurations-JSON. Verfuegbare Speicherblocktypen fuer die 6502-Speicherbelegung:
Stufe 2 โ PSRAM (8MB): 64 Baenke x 64KB RAM/ROM-Images und Funktionszeiger-Arrays.
Stufe 3 โ Flash (16MB): Firmware, ROM-Images, minimierte Konfigurations-JSON. Verfuegbare Speicherblocktypen fuer die 6502-Speicherbelegung:
| Typ | Beschreibung |
|---|---|
PHYSICAL |
Durchleitung zur realen Host-Hardware. |
PHYSICAL_VRAM |
Host-Video-RAM mit Wartezustaenden. |
RAM |
Lesen/Schreiben โ durch PSRAM-Bank unterstuetzt. |
ROM |
Nur-Lesen โ durch PSRAM-Bank unterstuetzt. |
FUNC |
Virtuelles Geraet โ C-Handler wird bei jedem Zugriff aufgerufen. Wird fuer die gesamte Peripherie-Emulation verwendet, da der 6502 keinen I/O-Adressraum hat. |
PTR |
Pro-Byte-Umleitung. |
Identisch mit dem picoZ80-Layout:
| Partition | Adressbereich | Groesse | Inhalt |
|---|---|---|---|
| Bootloader | 0x10000000โ0x1001FFFF |
128KB | USB-Bruecke, Firmware-Update, Partitionsauswahl |
| App Slot 1 | 0x10020000โ0x1051FFFF |
5MB | 6502-Hauptfirmware (Partition 1) |
| App Slot 2 | 0x10520000โ0x10A1FFFF |
5MB | 6502-Hauptfirmware (Partition 2) |
| App Config 1 | 0x10A20000โ0x10C9FFFF |
2.5MB | ROM-Images + minimierte Config-JSON (Slot 1) |
| App Config 2 | 0x10CA0000โ0x10F1FFFF |
2.5MB | ROM-Images + minimierte Config-JSON (Slot 2) |
| General Config | 0x10F20000โ0x10FFEFFF |
892KB | Kerneinstellungen, Scratch-Bereich |
| Partition Table | 0x10FFF000โ0x11000000 |
4KB | Aktiver Slot, Pruefsummen, Metadaten |
Build-Anleitung
Der pico6502 verwendet das gleiche Build-System und die gleiche Verzeichnisstruktur wie der picoZ80. Bitte folgen Sie der picoZ80-Build-Anleitung fuer das vollstaendige Setup โ Erstellen des Stammverzeichnisses, Setzen von
Projekt klonen
PICO_PATH, Ausfuehren von get_and_build_sdk.sh und Konfigurieren des Docker-Alias fuer ESP-IDF. Die pico6502-spezifischen Unterschiede sind unten aufgefuehrt.
Die pico6502-Firmware benoetigt nicht die Zeta Z80-Emulator-Bibliothek. Ein projects/Z80-Clone ist nicht erforderlich.
mkdir -p <root>/projects
cd <root>/projects
git clone <tzpuPico-repo-url> tzpuPico
Es wird das gleiche
build_tzpuPico.sh-Skript verwendet. Stellen Sie sicher, dass PICO_PATH am Anfang des Skripts korrekt gesetzt ist, und fuehren Sie es vom Stammverzeichnis aus:
cd <root>
# Standard Release Build
./build_tzpuPico.sh
# Debug Build
./build_tzpuPico.sh DEBUG
# Vollstaendiger Build einschliesslich ESP32-Firmware ueber Docker
./build_tzpuPico.sh ALL
cd <root>/projects/tzpuPico/esp32
idf54 build
Siehe die picoZ80-Build-Anleitung fuer die Definition des
Flashen
idf54 Docker-Alias.
Das Flash-Verfahren ist identisch mit dem picoZ80 โ initiales RP2350-Flashen ueber USB-Massenspeicher, initiales ESP32-Flashen ueber esptool und nachfolgende Updates ueber die OTA-Webseiten. Siehe den picoZ80-Flash-Abschnitt fuer alle Details einschliesslich des esptool-Befehls und Hinweisen zur Board-Revision.
Debugging
Das Debugging des pico6502 folgt dem gleichen Verfahren wie im picoZ80-Debugging-Abschnitt โ dort finden Sie die vollstaendige Beschreibung der Hardwareverbindungen, des OpenOCD-Setups und der globalen GDB-Initialisierung. Die einzigen Unterschiede zum picoZ80 sind das Hauptfirmware-Build-Verzeichnis (
RP2350 โ SWD-Debugging
BaseM6502 statt BaseZ80) und der add-auto-load-safe-path-Eintrag in ~/.gdbinit.
Verbinden Sie einen CMSIS-DAP-Probe mit
SWCLK (Pin 1), SWDIO (Pin 2) und GND (Pin 5) des 6-Pin-Debug-Headers. Der pico6502 verwendet das gleiche benutzerdefinierte rp2350_tzpu.cfg OpenOCD-Target wie der picoZ80 โ siehe den picoZ80-Debugging-Abschnitt fuer den vollstaendigen Dateiinhalt. Installieren Sie es einmal und starten Sie OpenOCD:
sudo cp rp2350_tzpu.cfg /usr/local/share/openocd/scripts/target/
openocd -f interface/cmsis-dap.cfg -f target/rp2350_tzpu.cfg -c "adapter speed 5000"
Fuegen Sie Folgendes zu
~/.gdbinit hinzu (passen Sie die Pfade bei Bedarf auf absolute Pfade an):
set history save on set history filename ~/.gdb_history set history size 65536 add-auto-load-safe-path build/bin/model/BaseM6502/.gdbinit:build/bin/model/Bootloader/.gdbinitBootloader-Debugging
# Core 0 cd build/bin/model/Bootloader cp ../../../../.gdbinit.bootloader.3333 .gdbinit gdb-multiarch Bootloader.elf # Core 1 (separates Terminal) cd build/bin/model/Bootloader cp ../../../../.gdbinit.bootloader.3334 .gdbinit gdb-multiarch Bootloader.elfHauptfirmware-Debugging
# Core 0 cd build/bin/model/BaseM6502 cp ../../../../.gdbinit.3333 .gdbinit gdb-multiarch BaseM6502_0x10020000.elf # Core 1 (separates Terminal) cd build/bin/model/BaseM6502 cp ../../../../.gdbinit.3334 .gdbinit gdb-multiarch BaseM6502_0x10020000.elfESP32 โ USB-Debugging
Verbinden Sie ein USB-Kabel mit dem ESP32-USB-Anschluss auf der pico6502-Platine. Das integrierte USB-JTAG-Interface des ESP32-S3 benoetigt keinen externen Probe. Starten Sie OpenOCD und dann den Xtensa GDB:
openocd -f board/esp32s3-builtin.cfg
xtensa-esp32s3-elf-gdb esp32/build/main.elf (gdb) target extended-remote :3333
Konfiguration (JSON)
Der pico6502 verwendet den gleichen JSON-Konfigurationsmechanismus wie der picoZ80. Der Top-Level-Schluessel ist
"rp2350", mit einem "core"-Abschnitt fuer RP2350-Betriebsparameter. Der CPU-spezifische Abschnitt verwendet den Schluessel "6502" (statt "z80"), und da der 6502 keinen separaten I/O-Adressraum hat, gibt es kein "io"-Array โ alle Peripherie-Zuordnungen erscheinen im "memory"-Array als FUNC-Typ-Bloecke.
{
"esp32": {
"core": {
"device": "6502",
"mode": 0
},
"wifi": {
"override": 1,
"wifimode": "client",
"ssid": "MyNetwork",
"password": "MyPassword",
"ip": "192.168.1.192",
"netmask": "255.255.255.0",
"gateway": "192.168.1.1",
"dhcp": 0,
"webfs": "webfs",
"persist": 0
}
},
"rp2350": {
"core": {
"cpufreq": 300000000,
"psramfreq": 133000000,
"voltage": 1.10
},
"6502": {
"memory": [ ... ],
"drivers": [ ... ]
}
}
}
Das
esp32.core
esp32 Top-Level-Objekt konfiguriert den ESP32-Koprozessor. Es enthaelt zwei Unterobjekte: core und wifi.
| Schluessel | Typ | Beschreibung |
|---|---|---|
device |
string | CPU-Geraetetyp โ teilt dem ESP32 mit, welche Prozessorpersoenlichkeit verwendet werden soll. Gueltige Werte: "Z80" (picoZ80), "6502" (pico6502), "6512" (pico6512). |
mode |
integer | Standard-Bootmodus: 0 = Client (Station), 1 = Access Point. In NVS gespeichert. |
Das
wifi-Objekt injiziert WiFi-Anmeldedaten und Netzwerkeinstellungen aus config.json und ueberschreibt dabei, was im NVS gespeichert ist. Setzen Sie override auf 0, um diesen Block zu ignorieren und die zuvor gespeicherten NVS-Einstellungen zu verwenden.
| Schluessel | Typ | Beschreibung |
|---|---|---|
override |
0/1 | Hauptschalter. 1 = alle unten stehenden Einstellungen anwenden; 0 = diesen Block ignorieren und gespeicherte NVS-Einstellungen verwenden. |
wifimode |
string | "ap" fuer Access-Point-Modus; "client" fuer Client-/Stationsmodus. |
ssid |
string | WiFi-Netzwerkname zum Erstellen (AP) oder Beitreten (Client). |
password |
string | WiFi-Passphrase. |
ip |
string | Feste IP-Adresse (z.B. "192.168.1.192"). |
netmask |
string | Subnetzmaske (z.B. "255.255.255.0"). |
gateway |
string | Standard-Gateway-Adresse. |
dhcp |
0/1 | Nur Client-Modus. 1 = DHCP; 0 = feste ip/netmask/gateway verwenden. |
webfs |
string | Alternatives Web-Dateisystem-Stammverzeichnis auf SD-Karte (Standard "webfs"). |
persist |
0/1 | 1 = aufgeloeste Einstellungen bei jedem Start zurueck in NVS schreiben; 0 = nur fuer diese Sitzung anwenden. |
| Schluessel | Typ | Beschreibung |
|---|---|---|
cpufreq |
integer | RP2350-Systemtaktfrequenz in Hz (z.B. 300000000 fuer 300 MHz). |
psramfreq |
integer | PSRAM-SPI-Taktfrequenz in Hz (z.B. 133000000 fuer 133 MHz). |
voltage |
float | RP2350-Kernspannung (z.B. 1.10). |
Da der 6502 eine Memory-Mapped-I/O-Architektur verwendet, erscheinen alle Peripheriegeraete im
memory-Array. Verwenden Sie den FUNC-Typ fuer jeden Adressbereich, der auf einen Handler fuer virtuelle Geraete abgebildet werden soll.
| Schluessel | Typ | Beschreibung |
|---|---|---|
enable |
0/1 | Ob dieser Eintrag aktiv ist. |
addr |
hex string | Startadresse im 6502-Adressraum. |
size |
hex string | Bereichsgroesse. |
type |
string | PHYSICAL, PHYSICAL_VRAM, RAM, ROM, FUNC, PTR. |
bank |
integer | PSRAM-Banknummer fuer RAM/ROM-Typen. |
task |
string | Optionale Aufgabenkennung fuer FUNC-Typ-Bloecke. |
file |
string | SD-Karten-Pfad zu einem ROM-Image, das beim Booten geladen wird. |
"memory": [
{
"enable": 1,
"addr": "0xE000",
"size": "0x2000",
"type": "ROM",
"bank": 0,
"task": "",
"file": "/ROM/host_bios.rom"
},
{
"enable": 1,
"addr": "0x0000",
"size": "0xE000",
"type": "RAM",
"bank": 0,
"task": "",
"file": ""
},
{
"enable": 1,
"addr": "0xC000",
"size": "0x0010",
"type": "FUNC",
"bank": 0,
"task": "via6522",
"file": ""
}
]
Das 6502-Treibermodell ist einfacher als das Z80-Modell. Jeder Treibereintrag laedt ein oder mehrere ROM-Images beim Start in das PSRAM. Es gibt keine Adress-Remap- oder I/O-Remap-Untertabellen; das gesamte Speicherlayout wird im
memory-Array definiert.
| Schluessel | Typ | Beschreibung |
|---|---|---|
enable |
0/1 | Ob dieser Treibereintrag aktiv ist. |
name |
string | Beschreibender Name fuer diesen ROM-Ladeeintrag. |
rom |
array | ROM-Images, die beim Start in das PSRAM geladen werden. |
rom[]-Eintrag:
| Schluessel | Typ | Beschreibung |
|---|---|---|
enable |
0/1 | Ob dieses ROM-Image geladen wird. |
file |
string | SD-Karten-Pfad zur ROM-Binaerdatei. |
loadaddr |
array | Ladeadressen-Deskriptoren. |
loadaddr[]-Eintrag:
| Schluessel | Typ | Beschreibung |
|---|---|---|
enable |
0/1 | Ob dieser Ladeadressen-Eintrag aktiv ist. |
position |
integer | Index innerhalb der file (fuer Multi-ROM-Dateien). |
addr |
hex string | Zieladresse im 6502-Adressraum. |
bank |
integer | PSRAM-Bank, in die geladen wird. |
size |
hex string | Anzahl der zu ladenden Bytes. |
"drivers": [
{
"enable": 1,
"name": "BIOS",
"rom": [
{
"enable": 1,
"file": "/ROM/host_bios.rom",
"loadaddr": [
{
"enable": 1,
"position": 0,
"addr": "0xE000",
"bank": 0,
"size": "0x2000"
}
]
}
]
},
{
"enable": 1,
"name": "CharROM",
"rom": [
{
"enable": 1,
"file": "/ROM/charrom.bin",
"loadaddr": [
{
"enable": 1,
"position": 0,
"addr": "0xB800",
"bank": 0,
"size": "0x0800"
}
]
}
]
}
]
Eine minimale Konfiguration fuer einen 6502-Host mit einem 2KB Zero-Page/Stack-RAM-Bereich, 48KB allgemeinem RAM, einem 8KB BIOS-ROM und einem VIA-Peripherie-Handler bei
0xC000:
{
"rp2350": {
"core": {
"cpufreq": 300000000,
"psramfreq": 133000000,
"voltage": 1.10
},
"6502": {
"memory": [
{ "enable":1, "addr":"0x0000", "size":"0x0200",
"type":"RAM", "bank":0, "task":"", "file":"" },
{ "enable":1, "addr":"0x0200", "size":"0xBE00",
"type":"RAM", "bank":0, "task":"", "file":"" },
{ "enable":1, "addr":"0xC000", "size":"0x0010",
"type":"FUNC", "bank":0, "task":"via6522", "file":"" },
{ "enable":1, "addr":"0xE000", "size":"0x2000",
"type":"ROM", "bank":0, "task":"", "file":"/ROM/host_bios.rom" }
],
"drivers": [
{
"enable":1, "name":"BIOS",
"rom": [
{ "enable":1, "file":"/ROM/host_bios.rom",
"loadaddr":[{ "enable":1, "position":0,
"addr":"0xE000", "bank":0, "size":"0x2000" }] }
]
}
]
}
}
}
Weboberflaeche
Die pico6502-Weboberflaeche ist in ihrer Struktur identisch mit der picoZ80-Oberflaeche โ sieben Bootstrap-4-Seiten, die vom ESP32 unter
http://<device-ip>/ bereitgestellt werden. Verbinden Sie sich beim ersten Start mit dem WiFi-AP der Platine und konfigurieren Sie dann den Client-Modus ueber den WiFi-Manager, um Ihrem Netzwerk beizutreten.
| Seite | URL | Funktion |
|---|---|---|
| Dashboard | / |
Echtzeit-Systemstatus: Prozessor, Geraet, Firmware-Version, aktive Partition. |
| Config Editor | /config.htm |
Browser-basierter config.json-Editor mit Syntaxhervorhebung und Neuladen ohne Neustart. |
| File Manager | /filemanager.htm |
SD-Karten-Dateibrowser: Hochladen, Herunterladen, Umbenennen, Loeschen. ROM-Images und Disk-Images uebertragen, ohne die SD-Karte zu entnehmen. |
| Persona Selection | /personality.htm |
Aktive Maschinenpersona pro Firmware-Partition auswaehlen. |
| ESP32 OTA | /ota-esp32.htm |
ESP32-Firmware ueber WiFi hochladen; versioniertes FilePack-Web-Dateisystem-Archiv auf SD-Karte hochladen. |
| RP2350 OTA | /ota-rp2350.htm |
RP2350-Firmware ueber WiFi hochladen; aktive Partition anzeigen und wechseln. |
| WiFi Manager | /wifimanager.htm |
WiFi-SSID, Passwort und Modus (AP oder Client) konfigurieren. |
Siehe die picoZ80-Seite fuer eine detaillierte Beschreibung jeder Weboberflaeche-Seite โ die pico6502-Implementierung ist identisch.
Referenz-Websites
Die folgende Tabelle enthaelt alle Websites, die beim Design und der Programmierung des pico6502 referenziert wurden.
| Website | Sprache | Beschreibung |
|---|---|---|
| RP2350 Datasheet | English | Offizielle technische Referenz und Datenblatt des Raspberry Pi RP2350. |
| Pico SDK | English | Raspberry Pi Pico C/C++ SDK โ Build-System und Hardware-Abstraktion, die von der pico6502-Firmware verwendet werden. |
| MOS 6502 Datasheet | English | Originales MOS Technology 6502 MPU-Datenblatt โ Bus-Timing, Pin-Beschreibungen und elektrische Eigenschaften. |
| ESP-IDF | English | Espressif IoT Development Framework, verwendet fuer die ESP32-Koprozessor-Firmware. |
| 6502 Software Repository | English | Community 6502-Software- und ROM-Image-Repository. |
Handbuecher und Datenblaetter
Die folgende Tabelle enthaelt alle Datenblaetter und Handbuecher, die beim Design und der Programmierung des pico6502 referenziert wurden.
| Datenblatt | Sprache | Beschreibung |
|---|---|---|
| RP2350 | English | Datenblatt des Raspberry Pi RP2350-Mikrocontrollers. |
| ESP32-S3 | English | Espressif ESP32-S3 SoC-Datenblatt โ WiFi/BT-Koprozessor auf der pico6502-Platine. |
| APS6404L PSRAM | English | 8MB SPI PSRAM-Datenblatt โ der Haupterweiterungs-RAM fuer Memory-Banking. |
| W25Q128 Flash | English | Winbond 16MB SPI NOR Flash-Datenblatt โ speichert Firmware und ROM-Images. |
| TLV62590 | English | Texas Instruments 5V-auf-3,3V synchroner Abwaertswandler, der den pico6502 vom 6502 DIP-40 VCC-Pin versorgt. |
| CH334F | English | CH334F 4-Port USB 2.0 Hub-Controller โ bietet USB-Hub-Funktionalitaet fuer Firmware-Updates. |
Projektvorschau
Die Projekte picoZ80 und pico6502 wurden erstmals auf X (ehemals Twitter) vorgestellt:
https://x.com/engineerswork1/status/1953171627065188841
Demonstrationsvideos
Demonstrationsvideos fuer den pico6502 werden hinzugefuegt, wenn das Projekt weiter fortgeschritten ist. Siehe die picoZ80-Demonstrationsvideos fuer Beispiele der gemeinsamen Plattform in Aktion.
Einschraenkung der kommerziellen Nutzung
Keine kommerzielle Nutzung ohne ausdrueckliche schriftliche Genehmigung gestattet.
Das pico6502-Hardwaredesign (Schaltplaene, PCB-Layout, KiCad-Dateien), die Firmware und die gesamte zugehoerige Software werden ausschliesslich fuer den persoenlichen, bildungsbezogenen und nicht-kommerziellen Gebrauch zur Verfuegung gestellt. Kein Teil dieses Designs โ einschliesslich, aber nicht beschraenkt auf PCB-Artwork, Stueckliste, Firmware-Binaerdateien, Quellcode oder Dokumentation โ darf ohne die ausdrueckliche schriftliche Genehmigung des Autors (Philip D. Smart) verwendet, reproduziert, hergestellt, verkauft oder in kommerzielle Produkte oder Dienstleistungen integriert werden.
Um eine kommerzielle Lizenz anzufragen oder erlaubte Nutzungen zu besprechen, kontaktieren Sie bitte den Autor ueber die eaw.app-Website.
Danksagungen
Das pico6502-Projekt baut auf der Arbeit mehrerer Personen und Open-Source-Projekte auf. Ihre Beitraege werden dankbar anerkannt.
- Manuel Sainz de Baranda y Goรฑi
Autor der Z80 C-Sprache Z80-CPU-Emulator-Bibliothek (github.com/redcode/Z80), die vom begleitenden picoZ80-Projekt verwendet wird. Die gleiche hochgenaue Emulationsphilosophie und gemeinsame Firmware-Infrastruktur praegt das pico6502-Design, und Manuels Arbeit wird als Teil der breiteren Projektfamilie dankbar anerkannt. - Raspberry Pi Ltd
Autoren des Pico SDK und der RP2350-Hardware. Der PIO-Assembler, das C SDK, die CMake-Toolchain-Integration und der RP2350B-Silizium ermoeglichen das zyklusgenaue 6502-Bus-Interface. - Espressif Systems
Autoren des ESP-IDF-Frameworks und der ESP32-Hardware. Der ESP32-Koprozessor, der WiFi-Stack, die OTA-Bibliothek und das NVS-Speicher-Framework bilden die Grundlage der Web-Verwaltungsoberflaeche. - Philip Smart
Hardware-Design (KiCad-Schaltplaene und PCB-Layout), RP2350 PIO-Firmware, ESP32-Webanwendung, JSON-Konfigurationssystem und gesamte Projektdokumentation. - Grok (xAI)
KI-Assistent, der wertvolle Hilfe beim Debugging der PIO-Zustandsmaschinen leistete โ insbesondere bei der Diagnose von Timing-Grenzfaellen und zyklus-genauen Bus-Interaktionsproblemen in den RP2350-PIO-Programmen. - Claude (Anthropic)
KI-Assistent, der in mehreren Bereichen zu diesem Projekt beitraegt: Verfassen und Strukturieren der Projektdokumentation, Analyse des FSPI/UART-Interfaces zwischen RP2350 und ESP32 mit Empfehlungen zur Firmware-Verbesserung sowie fortlaufende Firmware-Entwicklungsunterstuetzung.
Lizenzen
Das pico6502-Projekt besteht aus mehreren Komponenten, die jeweils unter einer eigenen Lizenz stehen:
Zusammenfassend: Die Firmware und Software, die Sie aus dem Quellcode dieses Projekts erstellen, sind unter der GPL v3 Open-Source; die Hardwaredesigns und die Dokumentation sind unter CC BY-NC-SA 4.0 lizenziert (nur nicht-kommerzielle Nutzung โ kommerzielle Lizenzierung auf Anfrage erhaeltlich); Drittanbieter-Bibliotheken behalten ihre eigenen Lizenzen wie oben aufgefuehrt. Siehe die Dateien
| Komponente | Lizenz |
|---|---|
| pico6502 RP2350 firmware (PIO, C sources) | GNU General Public License v3 |
| pico6502 ESP32 firmware and web interface | GNU General Public License v3 |
| KiCad hardware design files (schematics, PCB, Gerbers) | Creative Commons BY-NC-SA 4.0 |
| Documentation and user guides | Creative Commons BY-NC-SA 4.0 |
| Raspberry Pi Pico SDK | BSD 3-Clause |
| ESP-IDF framework | Apache License 2.0 |
| Bootstrap 4 (web interface) | MIT License |
LICENSE und NOTICE im Repository fuer alle Einzelheiten.
Lizenzbedingungen
Copyright © 2019–2026 Philip Smart. Alle Rechte vorbehalten.
Hardware-Designs — CC BY-NC-SA 4.0
Alle Hardware-Designs (KiCad-Schaltplaene, PCB-Layouts, Gerber-Fertigungsdateien, Stuecklisten) sind unter der Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License lizenziert. Sie duerfen die Designs fuer ausschliesslich nicht-kommerzielle Zwecke teilen und anpassen, vorausgesetzt Sie geben angemessene Anerkennung und verteilen Aenderungen unter der gleichen Lizenz. Kommerzielle Herstellung oder Verkauf erfordert eine separate Lizenz — bitte kontaktieren Sie info@eaw.app. Firmware & Software — GNU GPL v3
Firmware und Software-Quellcode sind freie Software unter der GNU General Public License v3. Sie duerfen den Code unter den GPL v3-Bedingungen weiterverteilen und modifizieren. Alle verteilten Modifikationen muessen ebenfalls unter GPL v3 lizenziert sein und der Quellcode muss verfuegbar gemacht werden. Markenzeichen & Namensnennung
Die Namen picoZ80, pico6502 und engineers@work sind Markenzeichen von Philip Smart. Sie duerfen diese Namen nicht verwenden, um abgeleitete Produkte zu bewerben, ohne schriftliche Genehmigung. Sie duerfen keine Urheberrechtshinweise, Autorennennungen oder Boot-/Splash-Screen-Credits entfernen oder aendern. Ein Rebranding dieses Projekts und die Praesentation als eigene Arbeit ist ausdruecklich untersagt. Siehe die Datei
Wenn Sie ein Hersteller oder Haendler sind und daran interessiert sind, picoZ80- oder pico6502-Platinen fuer den kommerziellen Verkauf zu produzieren, kontaktieren Sie bitte: info@eaw.app. Persoenliche, bildungsbezogene und Hobby-/Vereinsnutzung ist unter den oben genannten Open-Source-Lizenzen immer gestattet. Die vollstaendigen Lizenztexte sind im Repository als
Alle Hardware-Designs (KiCad-Schaltplaene, PCB-Layouts, Gerber-Fertigungsdateien, Stuecklisten) sind unter der Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License lizenziert. Sie duerfen die Designs fuer ausschliesslich nicht-kommerzielle Zwecke teilen und anpassen, vorausgesetzt Sie geben angemessene Anerkennung und verteilen Aenderungen unter der gleichen Lizenz. Kommerzielle Herstellung oder Verkauf erfordert eine separate Lizenz — bitte kontaktieren Sie info@eaw.app. Firmware & Software — GNU GPL v3
Firmware und Software-Quellcode sind freie Software unter der GNU General Public License v3. Sie duerfen den Code unter den GPL v3-Bedingungen weiterverteilen und modifizieren. Alle verteilten Modifikationen muessen ebenfalls unter GPL v3 lizenziert sein und der Quellcode muss verfuegbar gemacht werden. Markenzeichen & Namensnennung
Die Namen picoZ80, pico6502 und engineers@work sind Markenzeichen von Philip Smart. Sie duerfen diese Namen nicht verwenden, um abgeleitete Produkte zu bewerben, ohne schriftliche Genehmigung. Sie duerfen keine Urheberrechtshinweise, Autorennennungen oder Boot-/Splash-Screen-Credits entfernen oder aendern. Ein Rebranding dieses Projekts und die Praesentation als eigene Arbeit ist ausdruecklich untersagt. Siehe die Datei
NOTICE im Repository fuer alle Einzelheiten.
Kommerzielle LizenzierungWenn Sie ein Hersteller oder Haendler sind und daran interessiert sind, picoZ80- oder pico6502-Platinen fuer den kommerziellen Verkauf zu produzieren, kontaktieren Sie bitte: info@eaw.app. Persoenliche, bildungsbezogene und Hobby-/Vereinsnutzung ist unter den oben genannten Open-Source-Lizenzen immer gestattet. Die vollstaendigen Lizenztexte sind im Repository als
LICENSE, LICENSE-HARDWARE.txt und LICENSE-SOFTWARE.txt enthalten.
Regulatorischer Hinweis fuer Funkgeraete
Dieses Geraet enthaelt ein ESP32-S3-PICO-1-Funkmodul, das im 2,4 GHz ISM-Band sendet und es damit zu einem beabsichtigten Strahler gemaess den Funkfrequenzvorschriften weltweit macht (einschliesslich FCC Part 15 Subpart C in den Vereinigten Staaten und der Funkanlagenrichtlinie 2014/53/EU in der Europaeischen Union).
Obwohl das ESP32-S3-PICO-1-Modul selbst ueber bestehende regulatorische Zertifizierungen verfuegt (FCC, CE und andere), erstrecken sich diese Modulzertifizierungen nicht automatisch auf ein fertiges Produkt, das das Modul enthaelt. Die Vorzertifizierungs-Ausnahme erlaubt es einzelnen Hobbyisten, eine begrenzte Anzahl von Geraeten fuer den persoenlichen, experimentellen oder bildungsbezogenen Gebrauch zu bauen, ohne eine separate Geraetezulassung zu erhalten.
Wichtige Einschraenkungen
Es liegt in der alleinigen Verantwortung des Bauherrn sicherzustellen, dass jedes aus diesen Designs konstruierte Geraet allen anwendbaren Funkfrequenzvorschriften in seiner Gerichtsbarkeit entspricht. Der Autor stellt diese Designs fuer den persoenlichen, bildungsbezogenen und Hobbygebrauch zur Verfuegung und gibt keine Zusicherung, dass ein aus ihnen gebautes Geraet die regulatorischen Anforderungen fuer den kommerziellen Vertrieb erfuellt.
- Zusammengebaute Geraete duerfen nicht verkauft, zum Verkauf angeboten, verschenkt oder anderweitig an Dritte verteilt werden, es sei denn, das fertige Produkt wurde unabhaengig getestet und hat eine eigene Geraetezulassung (z.B. FCC ID, CE-Kennzeichnung mit Bewertung durch eine benannte Stelle) in der jeweiligen Gerichtsbarkeit erhalten.
- Der Bau dieses Projekts fuer den persoenlichen Gebrauch in begrenzten Stueckzahlen ist im Allgemeinen unter Hobbyisten- und Experimentiervorschriften gestattet (z.B. FCC § 15.23), vorausgesetzt das Geraet verursacht keine schaedlichen Stoerungen.
- Regulatorische Anforderungen variieren je nach Land. Bauherren ausserhalb der Vereinigten Staaten sollten ihre nationale Funkfrequenzbehoerde fuer anwendbare Regeln konsultieren.
Es liegt in der alleinigen Verantwortung des Bauherrn sicherzustellen, dass jedes aus diesen Designs konstruierte Geraet allen anwendbaren Funkfrequenzvorschriften in seiner Gerichtsbarkeit entspricht. Der Autor stellt diese Designs fuer den persoenlichen, bildungsbezogenen und Hobbygebrauch zur Verfuegung und gibt keine Zusicherung, dass ein aus ihnen gebautes Geraet die regulatorischen Anforderungen fuer den kommerziellen Vertrieb erfuellt.