pico6502

Hinweis: Das pico6502-Projekt befindet sich in einer fruehen Entwicklungsphase und wird aktualisiert, sobald der picoZ80 weiter fortgeschritten ist. Die folgenden Informationen beschreiben das beabsichtigte Design; nicht alle Funktionen sind bereits in der Firmware implementiert.

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.
X (Twitter) Projektvorschau โ€” picoZ80/pico6502 in Aktion

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. Speichert config.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.

Board-Design (KiCad)
Die pico6502-Hardware wurde in KiCad entworfen. Die aktuelle Revision ist v2.2. Schaltplan- und PCB-Layoutdateien befinden sich im Projektrepository unter kicad/PICO6502/.
Die vier Schaltplanseiten sind:
Blatt 1 โ€” RP2350B-Prozessor
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.

pico6502 Schematic Sheet 1 โ€” RP2350B Processor

Blatt 2 โ€” ESP32-Koprozessor
ESP32-Modul, SD-Karten-Interface, Antenne und Interprozessor-Kommunikation (FSPI + UART). Funktional identisch mit dem picoZ80-Design.

pico6502 Schematic Sheet 2 โ€” ESP32 Co-processor

Blatt 3 โ€” 6502-Bus-Interface
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.

pico6502 Schematic Sheet 3 โ€” 6502 Bus Interface

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

pico6502 Schematic Sheet 4 โ€” Power Supply

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 queue_t-Nachrichtenverfahren wie beim picoZ80 und transportiert Nachrichten fuer Disketten-/Disk-Image-Wechsel, Konfigurationsneuladung, Datei-Lesen/Schreiben und Firmware-Versionsabfragen.

PIO-Bus-Interface
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)
    - fuehrt m6502_addr (A0-A15, GPIO 0-15) und m6502_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)
    - fuehrt m6502_clock_6502 aus, 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.
Die vollstaendige Liste der PIO-Programme in 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:
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.
Flash-Speicherlayout
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 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.
Projekt klonen
mkdir -p <root>/projects
cd <root>/projects
git clone <tzpuPico-repo-url> tzpuPico
RP2350-Firmware erstellen
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
ESP32-Firmware separat erstellen
cd <root>/projects/tzpuPico/esp32
idf54 build
Siehe die picoZ80-Build-Anleitung fuer die Definition des idf54 Docker-Alias.
Flashen
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 (BaseM6502 statt BaseZ80) und der add-auto-load-safe-path-Eintrag in ~/.gdbinit.

RP2350 โ€” SWD-Debugging
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/.gdbinit
Bootloader-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.elf
Hauptfirmware-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.elf

ESP32 โ€” 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": [ ... ]
    }
  }
}
esp32 โ€” ESP32-Konfiguration
Das esp32 Top-Level-Objekt konfiguriert den ESP32-Koprozessor. Es enthaelt zwei Unterobjekte: core und wifi.
esp32.core
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.
esp32.wifi
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.

core โ€” RP2350-Betriebsparameter
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).

memory โ€” Speicherbelegung
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":   ""
  }
]

drivers โ€” ROM-Loader
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"
          }
        ]
      }
    ]
  }
]

Vollstaendiges minimales Konfigurationsbeispiel
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:
Komponente Lizenz
pico6502 RP2350 firmware (PIO, C sources)GNU General Public License v3
pico6502 ESP32 firmware and web interfaceGNU General Public License v3
KiCad hardware design files (schematics, PCB, Gerbers)Creative Commons BY-NC-SA 4.0
Documentation and user guidesCreative Commons BY-NC-SA 4.0
Raspberry Pi Pico SDKBSD 3-Clause
ESP-IDF frameworkApache License 2.0
Bootstrap 4 (web interface)MIT License
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 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 NOTICE im Repository fuer alle Einzelheiten.
Kommerzielle Lizenzierung
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 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
  • 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.
Verantwortung des Bauherrn
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.