pico6502

Nota: Il progetto pico6502 e in fase di sviluppo iniziale e sara aggiornato una volta che il picoZ80 sara piu completo. Le informazioni seguenti descrivono il design previsto; non tutte le funzionalita sono ancora implementate nel firmware.

Panoramica

Il pico6502 e l'equivalente per la famiglia 6502 del picoZ80. Utilizza lo stesso hardware della scheda — un microcontrollore RP2350B, 8 MB di PSRAM, 16 MB di Flash e un coprocessore ESP32 — ma si rivolge al socket MOS 6502 DIP-40 anziche allo Z80. Quando installato in qualsiasi computer basato sul 6502, il pico6502 sostituisce la CPU fisica e assume il controllo completo e preciso al ciclo dei bus di indirizzo, dati e controllo del 6502 attraverso le macchine a stati PIO dell'RP2350.
Come il picoZ80, il pico6502 e interamente configurato tramite JSON. Un file config.json sulla scheda SD definisce la mappa di memoria, le immagini ROM e i binding dei driver. Non e necessaria alcuna ricompilazione per adattare la scheda a un host 6502 diverso o per modificare il layout della memoria. Tutta la gestione viene eseguita tramite un'interfaccia basata su browser servita dall'ESP32 integrato.
  • Sostituzione diretta del 6502
    - si installa in qualsiasi socket 6502 DIP-40. L'host vede un timing bus 6502 corretto dall'interfaccia PIO in ogni momento.
  • Interfaccia bus PIO precisa al ciclo
    - le macchine a stati PIO dell'RP2350 gestiscono il clock bifase PHI1/PHI2 del 6502, i segnali RNW, SYNC, IRQ, NMI, RDY e RESET.
  • Ampio spazio di memoria a banchi
    - 8 MB di PSRAM come 64 banchi x 64 KB, configurabili in blocchi da 512 byte come tipi RAM, ROM, PHYSICAL o FUNC.
  • Framework di periferiche virtuali
    - qualsiasi regione di memoria puo essere supportata da una funzione handler in C, abilitando periferiche virtualizzate come 6522 VIA, 6845 CRTC o I/O personalizzati.
  • Caricamento immagini ROM
    - le immagini ROM per la macchina host (BIOS, monitor, ROM di linguaggio) sono memorizzate sulla scheda SD e caricate nella PSRAM all'avvio.
  • WiFi e gestione web
    - la stessa interfaccia web Bootstrap a sette pagine del picoZ80 — dashboard, editor di configurazione, file manager, selezione persona, aggiornamenti firmware OTA, gestore WiFi.
  • Doppia partizione firmware
    - due slot firmware da 5 MB con supporto aggiornamenti OTA e commutazione partizione gestita dal bootloader.
  • Aggiornamento firmware USB
    - il bootloader espone un bridge USB per il flashing iniziale senza debugger hardware.
X (Twitter) anteprima del progetto — picoZ80/pico6502 in azione

Hardware

Il PCB del pico6502 (revisione 2.2) e una scheda compatta di 52 mm x 19 mm che condivide lo stesso design fondamentale del picoZ80 ma presenta un'interfaccia bus specifica per il 6502 anziche per lo Z80. Quattro fogli schematici coprono il processore RP2350B, il coprocessore ESP32, l'interfaccia bus 6502 e l'alimentazione. L'hub USB presente nel picoZ80 v2.5 non e montato sulla revisione attuale del pico6502. Tutta la logica opera a 3,3 V, con l'interfaccia bus progettata per i livelli di segnale a 5 V del 6502.

Componenti principali
  • RP2350B (Cortex-M33 dual-core)
    - processore principale fino a 300 MHz. Il Core 1 esegue il loop principale di emulazione del 6502; il Core 0 gestisce le I/O su file, USB e il relay ESP32. 512 KB di SRAM on-chip.
  • Flash SPI da 16 MB
    - stessa disposizione del picoZ80: bootloader, due slot applicazione da 5 MB, due slot configurazione, configurazione generale e tabella delle partizioni.
  • PSRAM da 8 MB (SPI)
    - 64 banchi x 64 KB di spazio di indirizzamento a banchi per il 6502 emulato. Gli array di puntatori a blocchi di memoria e di funzioni I/O risiedono nella PSRAM sopra l'area RAM/ROM.
  • Coprocessore ESP32
    - WiFi, scheda SD, server web. Comunica con l'RP2350 tramite FSPI a 50 MHz e UART a 460,8 kbaud.
  • Slot scheda SD
    - FAT32, gestita dall'ESP32. Memorizza il config.json, le immagini ROM e le immagini disco.
  • Hub USB
    - hub USB integrato per la connettivita host e l'aggiornamento firmware tramite bridge USB.
  • Alimentazione 3,3 V
    - convertitore buck dai 5 V presenti sul pin VCC del DIP-40 6502.

Progettazione della scheda (KiCad)
L'hardware del pico6502 e progettato in KiCad. La revisione attuale e la v2.2. I file dello schema e del layout PCB si trovano nel repository del progetto sotto kicad/PICO6502/.
I quattro fogli schematici sono:
Foglio 1 — Processore RP2350B
Assegnazioni GPIO dell'RP2350B QFN-80 per il bus 6502, Flash da 16 MB, PSRAM da 8 MB e comunicazioni ESP32. Il bus 6502 richiede A0-A15, D0-D7, PHI0/PHI1/PHI2, RNW, SYNC, IRQ, NMI, RDY e RESET — consumando la maggior parte dei 48 pin GPIO dell'RP2350B.

pico6502 Foglio schema 1 — Processore RP2350B

Foglio 2 — Coprocessore ESP32
Modulo ESP32, interfaccia scheda SD, antenna e comunicazione inter-processore (FSPI + UART). Funzionalmente identico al design del picoZ80.

pico6502 Foglio schema 2 — Coprocessore ESP32

Foglio 3 — Interfaccia bus 6502
Le connessioni del socket DIP-40 e la rete di resistenze dell'interfaccia bus. A differenza dello Z80, il 6502 non ha uno spazio I/O separato — tutte le periferiche sono mappate in memoria. Tutti i segnali di indirizzo, dati e controllo sono instradati attraverso resistenze in serie ai pin GPIO dell'RP2350 gestiti dalle macchine a stati PIO.

pico6502 Foglio schema 3 — Interfaccia bus 6502

Foglio 4 — Alimentazione
Convertitore buck sincrono TLV62590BV da 5 V a 3,3 V con filtraggio ingresso/uscita. Si alimenta dal pin VCC del socket DIP-40 6502.

pico6502 Foglio schema 4 — Alimentazione

File sorgente KiCad: kicad/PICO6502/PICO6502_Schematic.pdf (PDF dello schema) e kicad/PICO6502/ (progetto KiCad completo).
👀 BOM interattivo — pico6502 v2.2 (visualizzatore posizionamento componenti PCB)

Architettura

Progettazione dual-core
L'assegnazione dei core dell'RP2350B rispecchia quella del picoZ80:
Core 0 — bridge USB, coordinamento aggiornamenti firmware, relay I/O file verso l'ESP32, dispatch comandi UART ESP32, gestione partizioni.
Core 1 — loop principale di emulazione del 6502. Elabora i FIFO PIO per le transazioni bus del 6502, risolve ogni indirizzo rispetto alla mappa di memoria e esegue il dispatch verso PSRAM, pass-through PHYSICAL o handler di periferiche virtuali FUNC. Il loop interno viene eseguito dalla SRAM dell'RP2350 per una latenza minima.
La comunicazione inter-core utilizza lo stesso passaggio messaggi queue_t del picoZ80, trasportando messaggi per cambi immagine floppy/disco, ricaricamenti configurazione, lettura/scrittura file e query versione firmware.

Interfaccia bus PIO
L'interfaccia bus 6502 e implementata in M6502.pio. L'RP2350 fornisce tre blocchi PIO; il firmware 6502 li utilizza tutti e tre:
  • PIO 0 — Bus indirizzi e dati (GPIO 0-23)
    - esegue m6502_addr (A0-A15, GPIO 0-15) e m6502_data (D0-D7, GPIO 16-23) simultaneamente. Le parole di indirizzo vengono inviate al FIFO del Core 1; i dati vengono pilotati o campionati in base a RNW.
  • PIO 1 — Segnali di controllo ed esecuzione ciclo (GPIO 16-47)
    - esegue il sequenziatore di ciclo (m6502_cycle), il fetch dell'opcode (m6502_fetch), lettura/scrittura memoria (m6502_read, m6502_write), rilevamento IRQ (m6502_irq), rilevamento NMI (m6502_nmi) e rilevamento Set Overflow (m6502_so).
  • PIO 2 — Generazione clock (GPIO 16-47)
    - esegue m6502_clock_6502, che genera i clock bifase non sovrapposti PHI1 e PHI2 da un ingresso PHI0 esterno, garantendo un timing bus 6502 corretto indipendentemente dalla schedulazione del Core 1.
L'insieme completo dei programmi PIO in M6502.pio e:
Programma Funzione
m6502_clock_6502 Genera i clock bifase PHI1/PHI2 da PHI0 esterno.
m6502_addr Emette l’indirizzo a 16 bit (A0-A15) e segnala l’inizio del ciclo (IRQ 0).
m6502_data Pilota o campiona D0-D7 (IRQ 1), con controllo tri-state.
m6502_irq Rileva l’asserzione IRQ (flag IRQ 5).
m6502_nmi Rileva l’asserzione NMI (flag IRQ 4).
m6502_so Rileva l’asserzione del pin Set Overflow (SO) (flag IRQ 6).
m6502_cycle Sequenziatore di ciclo bus di livello superiore; IRQ 7 segnala l’uscita dal loop di esecuzione.
m6502_fetch Ciclo bus di fetch opcode (PHI2 + RNW = lettura).
m6502_read Ciclo bus di lettura memoria.
m6502_write Ciclo bus di scrittura memoria.
Le macchine a stati si sincronizzano tramite flag IRQ PIO: IRQ 0 (indirizzo/inizio ciclo), IRQ 1 (fase dati), IRQ 4 (NMI), IRQ 5 (IRQ), IRQ 6 (SO), IRQ 7 (uscita loop di esecuzione). La differenza chiave dall'interfaccia Z80 e il clock bifase del 6502 — PHI1 e PHI2 sono non sovrapposti; il bus indirizzi e valido sul fronte di salita di PHI1 e i dati vengono presentati o campionati prima del fronte di discesa di PHI2. Dedicare interamente PIO 2 alla generazione del clock significa che il timing del 6502 e sempre corretto indipendentemente dall'attivita del Core 1.

Modello di memoria
Il modello di memoria del 6502 e strutturalmente identico al modello Z80 ma senza uno spazio I/O separato — poiche il 6502 non ha un equivalente IORQ, tutti i registri delle periferiche appaiono nella mappa di memoria da 64 KB. La stessa architettura a tre livelli si applica:
Livello 1 — SRAM dell'RP2350: array di puntatori a blocchi da 128 voci per dispatch O(1) per blocco da 512 byte.
Livello 2 — PSRAM (8 MB): 64 banchi x 64 KB di immagini RAM/ROM e array di puntatori a funzioni.
Livello 3 — Flash (16 MB): firmware, immagini ROM, JSON di configurazione minificato.
Tipi di blocchi di memoria disponibili per la mappa di memoria del 6502:
Tipo Descrizione
PHYSICAL Pass-through verso l’hardware reale dell’host.
PHYSICAL_VRAM RAM video dell’host con stati di attesa.
RAM Lettura/scrittura — supportata da un banco PSRAM.
ROM Sola lettura — supportata da un banco PSRAM.
FUNC Periferica virtuale — handler C chiamato ad ogni accesso. Utilizzato per tutta l’emulazione periferiche, poiche il 6502 non ha spazio I/O.
PTR Reindirizzamento per byte.
Layout della memoria Flash
Identico al layout del picoZ80:
Partizione Intervallo indirizzi Dimensione Contenuto
Bootloader 0x10000000–0x1001FFFF 128 KB Bridge USB, aggiornamento firmware, selettore partizione
App Slot 1 0x10020000–0x1051FFFF 5 MB Firmware principale 6502 (partizione 1)
App Slot 2 0x10520000–0x10A1FFFF 5 MB Firmware principale 6502 (partizione 2)
App Config 1 0x10A20000–0x10C9FFFF 2,5 MB Immagini ROM + JSON configurazione minificato (slot 1)
App Config 2 0x10CA0000–0x10F1FFFF 2,5 MB Immagini ROM + JSON configurazione minificato (slot 2)
General Config 0x10F20000–0x10FFEFFF 892 KB Impostazioni principali, spazio di lavoro
Partition Table 0x10FFF000–0x11000000 4 KB Slot attivo, checksum, metadati

Istruzioni di compilazione

Il pico6502 utilizza lo stesso sistema di compilazione e la stessa struttura di directory del picoZ80. Si prega di seguire le istruzioni di compilazione del picoZ80 per la procedura completa di configurazione — creazione della directory radice, impostazione di PICO_PATH, esecuzione di get_and_build_sdk.sh e configurazione dell'alias Docker per ESP-IDF. Le differenze specifiche del pico6502 sono indicate di seguito.
Il firmware del pico6502 non richiede la libreria dell'emulatore Zeta Z80. Non e necessario nessun clone di projects/Z80.
Clonare il progetto
mkdir -p <root>/projects
cd <root>/projects
git clone <tzpuPico-repo-url> tzpuPico
Compilare il firmware RP2350
Viene utilizzato lo stesso script build_tzpuPico.sh. Assicurarsi che PICO_PATH sia impostato correttamente in cima allo script, poi eseguire dalla radice:
cd <root>

# Compilazione release standard
./build_tzpuPico.sh

# Compilazione debug
./build_tzpuPico.sh DEBUG

# Compilazione completa incluso firmware ESP32 via Docker
./build_tzpuPico.sh ALL
Compilare il firmware ESP32 separatamente
cd <root>/projects/tzpuPico/esp32
idf54 build
Vedere le istruzioni di compilazione del picoZ80 per la definizione dell'alias Docker idf54.
Programmazione Flash
La procedura di flashing e identica a quella del picoZ80 — flash iniziale dell'RP2350 tramite memoria di massa USB, flash iniziale dell'ESP32 tramite esptool, e aggiornamenti successivi tramite le pagine web OTA. Vedere la sezione Flashing del picoZ80 per tutti i dettagli, incluso il comando esptool e le note sulla revisione della scheda.

Debug

Il debug del pico6502 segue la stessa procedura della sezione Debug del picoZ80 — fare riferimento li per la descrizione completa delle connessioni hardware, la configurazione di OpenOCD e l'inizializzazione GDB globale. Le uniche differenze rispetto al picoZ80 sono la directory di compilazione del firmware principale (BaseM6502 invece di BaseZ80) e la voce add-auto-load-safe-path in ~/.gdbinit.

RP2350 — Debug SWD
Collegare una sonda CMSIS-DAP ai pin SWCLK (pin 1), SWDIO (pin 2) e GND (pin 5) del connettore di debug a 6 pin. Il pico6502 utilizza lo stesso target OpenOCD personalizzato rp2350_tzpu.cfg del picoZ80 — vedere la sezione Debug del picoZ80 per il contenuto completo del file. Installarlo una volta, poi avviare 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"
Aggiungere quanto segue a ~/.gdbinit (modificare i percorsi in assoluti se necessario):
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
Debug del Bootloader
# Core 0
cd build/bin/model/Bootloader
cp ../../../../.gdbinit.bootloader.3333 .gdbinit
gdb-multiarch Bootloader.elf

# Core 1 (terminale separato)
cd build/bin/model/Bootloader
cp ../../../../.gdbinit.bootloader.3334 .gdbinit
gdb-multiarch Bootloader.elf
Debug del firmware principale
# Core 0
cd build/bin/model/BaseM6502
cp ../../../../.gdbinit.3333 .gdbinit
gdb-multiarch BaseM6502_0x10020000.elf

# Core 1 (terminale separato)
cd build/bin/model/BaseM6502
cp ../../../../.gdbinit.3334 .gdbinit
gdb-multiarch BaseM6502_0x10020000.elf

ESP32 — Debug USB
Collegare un cavo USB alla porta USB ESP32 della scheda pico6502. L'interfaccia USB-JTAG integrata dell'ESP32-S3 non richiede alcuna sonda esterna. Avviare OpenOCD poi lanciare il GDB Xtensa:
openocd -f board/esp32s3-builtin.cfg
xtensa-esp32s3-elf-gdb esp32/build/main.elf
(gdb) target extended-remote :3333

Configurazione (JSON)

Il pico6502 utilizza lo stesso meccanismo di configurazione JSON del picoZ80. La chiave di livello superiore e "rp2350", con una sezione "core" per i parametri operativi dell'RP2350. La sezione specifica della CPU usa la chiave "6502" (invece di "z80"), e poiche il 6502 non ha uno spazio I/O separato, non c'e un array "io" — tutti i mapping delle periferiche appaiono nell'array "memory" come blocchi FUNC.
{
  "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 — Configurazione ESP32
L'oggetto di livello superiore esp32 configura il coprocessore ESP32. Contiene due sotto-oggetti: core e wifi.
esp32.core
Chiave Tipo Descrizione
device string Tipo di CPU — indica all’ESP32 quale personalita processore utilizzare. Valori validi: "Z80" (picoZ80), "6502" (pico6502), "6512" (pico6512).
mode integer Modalita di avvio predefinita: 0 = modalita client (stazione), 1 = modalita Access Point. Persistito nel NVS.
esp32.wifi
L'oggetto wifi inietta le credenziali WiFi e le impostazioni di rete dal config.json, sovrascrivendo quanto memorizzato nel NVS. Impostare override a 0 per ignorare questo blocco e fare affidamento sulle impostazioni NVS precedentemente persistite.
Chiave Tipo Descrizione
override 0/1 Interruttore principale. 1 = applicare tutte le impostazioni seguenti; 0 = ignorare questo blocco e usare le impostazioni NVS persistite.
wifimode string "ap" per la modalita Access Point; "client" per la modalita client/stazione.
ssid string Nome della rete WiFi da creare (AP) o unirsi (client).
password string Password WiFi.
ip string Indirizzo IP fisso (es. "192.168.1.192").
netmask string Maschera di sottorete (es. "255.255.255.0").
gateway string Indirizzo del gateway predefinito.
dhcp 0/1 Solo modalita client. 1 = DHCP; 0 = usare le impostazioni fisse ip/netmask/gateway.
webfs string Directory radice del filesystem web sostitutivo sulla scheda SD (predefinito "webfs").
persist 0/1 1 = scrivere le impostazioni risolte nel NVS; 0 = applicare solo per questa sessione.

core — Parametri operativi dell'RP2350
Chiave Tipo Descrizione
cpufreq integer Frequenza di clock di sistema dell’RP2350 in Hz (es. 300000000 per 300 MHz).
psramfreq integer Frequenza di clock SPI della PSRAM in Hz (es. 133000000 per 133 MHz).
voltage float Tensione del core dell’RP2350 (es. 1.10).

memory — Mappa di memoria
Poiche il 6502 e un'architettura a I/O mappato in memoria, tutte le periferiche appaiono nell'array memory. Utilizzare il tipo FUNC per qualsiasi intervallo di indirizzi che mappa a un handler di periferica virtuale.
Chiave Tipo Descrizione
enable 0/1 Se questa voce e attiva.
addr hex string Indirizzo iniziale nello spazio di indirizzamento del 6502.
size hex string Dimensione della regione.
type string PHYSICAL, PHYSICAL_VRAM, RAM, ROM, FUNC, PTR.
bank integer Numero di banco PSRAM per i tipi RAM/ROM.
task string Identificatore di task opzionale per i blocchi di tipo FUNC.
file string Percorso sulla scheda SD verso un’immagine ROM da caricare all’avvio.
"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 — Caricatori ROM
Il modello di driver del 6502 e piu semplice di quello dello Z80. Ogni voce di driver carica una o piu immagini ROM nella PSRAM all'avvio. Non ci sono sotto-tabelle di remapping indirizzi o I/O; tutto il layout della memoria e definito nell'array memory.
Chiave Tipo Descrizione
enable 0/1 Se questa voce di driver e attiva.
name string Nome descrittivo per questa voce di caricamento ROM.
rom array Immagini ROM da caricare nella PSRAM all’avvio.

Voce rom[]:

Chiave Tipo Descrizione
enable 0/1 Se questa immagine ROM viene caricata.
file string Percorso sulla scheda SD verso il binario ROM.
loadaddr array Descrittori di indirizzi di caricamento.

Voce loadaddr[]:

Chiave Tipo Descrizione
enable 0/1 Se questa voce di indirizzo di caricamento e attiva.
position integer Indice all’interno del file (per file multi-ROM).
addr hex string Indirizzo di destinazione nello spazio di indirizzamento del 6502.
bank integer Banco PSRAM in cui caricare.
size hex string Numero di byte da caricare.
"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"
          }
        ]
      }
    ]
  }
]

Esempio di configurazione minima completa
Una configurazione minima per un host 6502 con un'area RAM da 2 KB per zero page/stack, 48 KB di RAM generale, una ROM BIOS da 8 KB e un handler di periferica VIA a 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" }] }
          ]
        }
      ]
    }
  }
}

Interfaccia web

L'interfaccia web del pico6502 e identica nella struttura a quella del picoZ80 — sette pagine Bootstrap 4 servite dall'ESP32 a http://<device-ip>/. Connettersi all'AP WiFi della scheda al primo avvio, poi configurare la modalita client tramite il gestore WiFi per unirsi alla propria rete.
Pagina URL Funzione
Dashboard / Stato del sistema in tempo reale: processore, dispositivo, versione firmware, partizione attiva.
Editor di configurazione /config.htm Editor config.json nel browser con evidenziazione sintassi e ricaricamento senza riavvio.
File Manager /filemanager.htm Browser file della scheda SD: upload, download, rinomina, elimina. Trasferire immagini ROM e disco senza rimuovere la scheda SD.
Selezione persona /personality.htm Selezione della persona macchina attiva per partizione firmware.
OTA ESP32 /ota-esp32.htm Upload firmware ESP32 via WiFi; upload archivio FilePack versionato del filesystem web sulla scheda SD.
OTA RP2350 /ota-rp2350.htm Upload firmware RP2350 via WiFi; visualizzazione e commutazione partizione attiva.
Gestore WiFi /wifimanager.htm Configurazione SSID WiFi, password e modalita (AP o client).
Vedere la pagina picoZ80 per una descrizione dettagliata di ogni pagina dell'interfaccia web — l'implementazione del pico6502 e identica.

Siti di riferimento

La tabella seguente contiene tutti i siti di riferimento nella progettazione e programmazione del pico6502.
Sito Lingua Descrizione
RP2350 Datasheet Inglese Riferimento tecnico ufficiale e scheda tecnica del Raspberry Pi RP2350.
Pico SDK Inglese SDK C/C++ Raspberry Pi Pico — sistema di compilazione e astrazione hardware utilizzati dal firmware del pico6502.
MOS 6502 Datasheet Inglese Scheda tecnica originale del MPU MOS Technology 6502 — timing bus, descrizioni pin e caratteristiche elettriche.
ESP-IDF Inglese Framework di sviluppo IoT Espressif utilizzato per il firmware del coprocessore ESP32.
6502 Software Repository Inglese Repository comunitario di software e immagini ROM 6502.

Manuali e schede tecniche

La tabella seguente contiene tutte le schede tecniche e i manuali di riferimento nella progettazione e programmazione del pico6502.
Scheda tecnica Lingua Descrizione
RP2350 Inglese Scheda tecnica del microcontrollore Raspberry Pi RP2350.
ESP32-S3 Inglese Scheda tecnica del SoC Espressif ESP32-S3 — coprocessore WiFi/BT della scheda pico6502.
APS6404L PSRAM Inglese Scheda tecnica della PSRAM SPI da 8 MB — la RAM estesa principale utilizzata per i banchi di memoria.
W25Q128 Flash Inglese Scheda tecnica della Flash SPI NOR Winbond da 16 MB — memorizza firmware e immagini ROM.
TLV62590 Inglese Convertitore buck sincrono Texas Instruments da 5 V a 3,3 V che alimenta il pico6502 dal pin VCC del DIP-40 6502.
CH334F Inglese Controller hub USB 2.0 a 4 porte CH334F — fornisce la funzionalita hub USB per gli aggiornamenti firmware.

Anteprima del progetto

I progetti picoZ80 e pico6502 sono stati presentati per la prima volta su X (precedentemente Twitter):
https://x.com/engineerswork1/status/1953171627065188841

Video dimostrativi
Video dimostrativi per il pico6502 saranno aggiunti man mano che il progetto matura. Vedere i Video dimostrativi del picoZ80 per esempi della piattaforma condivisa in azione.

Restrizione all'uso commerciale

Nessun uso commerciale consentito senza espressa autorizzazione scritta.
Il design hardware del pico6502 (schemi, layout PCB, file KiCad), il firmware e tutto il software associato sono resi disponibili esclusivamente per uso personale, educativo e non commerciale. Nessuna parte di questo design — inclusi ma non limitati a disegni PCB, distinta base, binari firmware, codice sorgente o documentazione — puo essere utilizzata, riprodotta, fabbricata, venduta o incorporata in qualsiasi prodotto o servizio commerciale senza l'espressa autorizzazione scritta dell'autore (Philip D. Smart).
Per richiedere una licenza commerciale o discutere gli usi consentiti, si prega di contattare l'autore tramite il sito web eaw.app.

Ringraziamenti

Il progetto pico6502 si basa sul lavoro di diversi individui e progetti open-source. I loro contributi sono riconosciuti con gratitudine.
  • Manuel Sainz de Baranda y Goni
    Autore della libreria di emulazione CPU Z80 in linguaggio C Z80 (github.com/redcode/Z80), utilizzata dal progetto companion picoZ80. La stessa filosofia di emulazione ad alta precisione e l'infrastruttura firmware condivisa influenzano il design del pico6502, e il lavoro di Manuel e riconosciuto con gratitudine come parte della famiglia allargata del progetto.
  • Raspberry Pi Ltd
    Autori del Pico SDK e dell'hardware RP2350. L'assemblatore PIO, il C SDK, l'integrazione della toolchain CMake e il silicio RP2350B rendono possibile l'interfaccia bus 6502 precisa al ciclo.
  • Espressif Systems
    Autori del framework ESP-IDF e dell'hardware ESP32. Il coprocessore ESP32, lo stack WiFi, la libreria OTA e il framework di storage NVS sono alla base dell'interfaccia di gestione web.
  • Philip Smart
    Design hardware (schemi KiCad e layout PCB), firmware PIO dell'RP2350, applicazione web ESP32, sistema di configurazione JSON e tutta la documentazione del progetto.
  • Grok (xAI)
    Assistente AI che ha fornito un aiuto prezioso durante il debug delle macchine a stati PIO — in particolare nella diagnosi di casi limite di timing e problemi di interazione bus precisi al ciclo nei programmi PIO dell'RP2350.
  • Claude (Anthropic)
    Assistente AI che contribuisce a questo progetto in molteplici aree: redazione e strutturazione della documentazione del progetto, analisi dell'interfaccia FSPI/UART tra RP2350 ed ESP32 e raccomandazioni per il miglioramento del firmware, e assistenza continua allo sviluppo del firmware.

Licenze

Il progetto pico6502 e composto da diversi componenti, ciascuno coperto dalla propria licenza:
Componente Licenza
Firmware RP2350 del pico6502 (PIO, sorgenti C)GNU General Public License v3
Firmware ESP32 del pico6502 e interfaccia webGNU General Public License v3
File di design hardware KiCad (schemi, PCB, Gerber)Creative Commons BY-NC-SA 4.0
Documentazione e guide utenteCreative Commons BY-NC-SA 4.0
Raspberry Pi Pico SDKBSD 3-Clause
Framework ESP-IDFApache License 2.0
Bootstrap 4 (interfaccia web)MIT License
In sintesi: il firmware e il software compilati dal codice sorgente di questo progetto sono open-source sotto la GPL v3; i design hardware e la documentazione sono sotto licenza CC BY-NC-SA 4.0 (solo uso non commerciale — licenza commerciale disponibile su richiesta); le librerie di terze parti mantengono le proprie licenze come indicato sopra. Vedere i file LICENSE e NOTICE nel repository per i dettagli completi.

Termini di licenza

Copyright © 2019–2026 Philip Smart. Tutti i diritti riservati.
Design hardware — CC BY-NC-SA 4.0
Tutti i design hardware (schemi KiCad, layout PCB, file di fabbricazione Gerber, distinte base) sono sotto licenza Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. Siete liberi di condividere e adattare i design per scopi non commerciali, a condizione di dare credito appropriato e distribuire eventuali modifiche sotto la stessa licenza. La fabbricazione o vendita commerciale richiede una licenza separata — si prega di contattare info@eaw.app.
Firmware e software — GNU GPL v3
Il firmware e il codice sorgente del software sono software libero sotto la GNU General Public License v3. Potete ridistribuire e modificare il codice secondo i termini della GPL v3. Eventuali modifiche distribuite devono essere anch'esse sotto licenza GPL v3 con codice sorgente reso disponibile.
Marchio e attribuzione
I nomi picoZ80, pico6502 e engineers@work sono marchi di Philip Smart. Non potete utilizzare questi nomi per promuovere prodotti derivati senza autorizzazione scritta. Non potete rimuovere o alterare avvisi di copyright, attribuzione dell'autore o crediti della schermata di avvio. Il rebranding di questo progetto e la sua presentazione come proprio lavoro sono espressamente vietati. Vedere il file NOTICE nel repository per i dettagli completi.
Licenza commerciale
Se siete un produttore o distributore interessato alla produzione di schede picoZ80 o pico6502 per la vendita commerciale, si prega di contattare: info@eaw.app. L'uso personale, educativo e hobbistico/di club e sempre consentito sotto le licenze open-source sopra indicate.
I testi completi delle licenze sono inclusi nel repository come LICENSE, LICENSE-HARDWARE.txt e LICENSE-SOFTWARE.txt.

Avviso normativo wireless

Questo dispositivo incorpora un modulo wireless ESP32-S3-PICO-1 che trasmette nella banda ISM a 2,4 GHz, rendendolo un emettitore intenzionale secondo le normative sulle radiofrequenze a livello mondiale (incluso FCC Part 15 Subpart C negli Stati Uniti e la Direttiva Apparecchiature Radio 2014/53/EU nell'Unione Europea).
Sebbene il modulo ESP32-S3-PICO-1 stesso possieda certificazioni normative preesistenti (FCC, CE e altre), tali certificazioni a livello di modulo non si estendono automaticamente a un prodotto finito che incorpora il modulo. L'esenzione per moduli pre-certificati consente agli hobbisti individuali di costruire un numero limitato di dispositivi per uso personale, sperimentale o educativo senza ottenere un'autorizzazione separata per l'apparecchiatura.
Limitazioni importanti
  • I dispositivi assemblati non devono essere venduti, offerti in vendita, regalati o altrimenti distribuiti a terzi a meno che il prodotto finito non sia stato testato indipendentemente e abbia ottenuto la propria autorizzazione per l'apparecchiatura (es. FCC ID, marcatura CE con valutazione di un Organismo Notificato) nella giurisdizione pertinente.
  • La costruzione di questo progetto per uso personale in quantita limitate e generalmente consentita in base alle disposizioni per hobbisti e uso sperimentale (es. FCC § 15.23), a condizione che il dispositivo non causi interferenze dannose.
  • I requisiti normativi variano da paese a paese. I costruttori al di fuori degli Stati Uniti dovrebbero consultare la propria autorita nazionale per le radiofrequenze per le regole applicabili.
Responsabilita del costruttore
E responsabilita esclusiva del costruttore assicurarsi che qualsiasi dispositivo costruito da questi design sia conforme a tutte le normative sulle radiofrequenze applicabili nella propria giurisdizione. L'autore fornisce questi design per uso personale, educativo e hobbistico e non garantisce che un dispositivo costruito da essi soddisfi i requisiti normativi per la distribuzione commerciale.