pico6502
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.
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 ilconfig.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.
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
Foglio 1 — Processore RP2350B
kicad/PICO6502/.
I quattro fogli schematici sono:
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.

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

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.

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.

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
Interfaccia bus PIO
queue_t del picoZ80, trasportando messaggi per cambi immagine floppy/disco, ricaricamenti configurazione, lettura/scrittura file e query versione firmware.
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)
- eseguem6502_addr(A0-A15, GPIO 0-15) em6502_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)
- eseguem6502_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.
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:
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. |
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
Clonare il progetto
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.
mkdir -p <root>/projects
cd <root>/projects
git clone <tzpuPico-repo-url> tzpuPico
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
cd <root>/projects/tzpuPico/esp32
idf54 build
Vedere le istruzioni di compilazione del picoZ80 per la definizione dell'alias Docker
Programmazione Flash
idf54.
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 (
RP2350 — Debug SWD
BaseM6502 invece di BaseZ80) e la voce add-auto-load-safe-path in ~/.gdbinit.
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/.gdbinitDebug 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.elfDebug 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.elfESP32 — 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": [ ... ]
}
}
}
L'oggetto di livello superiore
esp32.core
esp32 configura il coprocessore ESP32. Contiene due sotto-oggetti: core e wifi.
| 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. |
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. |
| 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). |
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": ""
}
]
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"
}
]
}
]
}
]
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:
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
| Componente | Licenza |
|---|---|
| Firmware RP2350 del pico6502 (PIO, sorgenti C) | GNU General Public License v3 |
| Firmware ESP32 del pico6502 e interfaccia web | GNU General Public License v3 |
| File di design hardware KiCad (schemi, PCB, Gerber) | Creative Commons BY-NC-SA 4.0 |
| Documentazione e guide utente | Creative Commons BY-NC-SA 4.0 |
| Raspberry Pi Pico SDK | BSD 3-Clause |
| Framework ESP-IDF | Apache License 2.0 |
| Bootstrap 4 (interfaccia web) | MIT License |
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
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
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 commercialeSe 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
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.
- 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.
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.