pico6502

Remarque : Le projet pico6502 est en phase de developpement initial et sera mis a jour une fois que le picoZ80 sera plus avance. Les informations ci-dessous decrivent la conception prevue ; toutes les fonctionnalites ne sont pas encore implementees dans le firmware.

Vue d'ensemble

Le pico6502 est l'equivalent du picoZ80 pour la famille 6502. Il utilise le meme materiel de carte — un microcontroleur RP2350B, 8 Mo de PSRAM, 16 Mo de Flash et un coprocesseur ESP32 — mais cible le socket MOS 6502 DIP-40 au lieu du Z80. Une fois installe dans n'importe quel ordinateur base sur le 6502, le pico6502 remplace le CPU physique et prend le controle complet et precis au cycle pres des bus d'adresses, de donnees et de controle du 6502 grace aux machines d'etat PIO du RP2350.
Comme le picoZ80, le pico6502 est entierement configure par JSON. Un fichier config.json sur la carte SD definit la carte memoire, les images ROM et les liaisons de pilotes. Aucune recompilation n'est necessaire pour adapter la carte a un hote 6502 different ou pour modifier la disposition de la memoire. Toute la gestion s'effectue via une interface basee sur navigateur servie par l'ESP32 embarque.
  • Remplacement direct du 6502
    - s'installe dans n'importe quel socket 6502 DIP-40. L'hote voit un timing de bus 6502 correct depuis l'interface PIO en permanence.
  • Interface bus PIO precise au cycle pres
    - les machines d'etat PIO du RP2350 gerent l'horloge biphasee PHI1/PHI2 du 6502, ainsi que les signaux RNW, SYNC, IRQ, NMI, RDY et RESET.
  • Grand espace memoire en banques
    - 8 Mo de PSRAM organises en 64 banques x 64 Ko, configurables par blocs de 512 octets en types RAM, ROM, PHYSICAL ou FUNC.
  • Framework de peripheriques virtuels
    - toute region memoire peut etre associee a une fonction handler en C, permettant la virtualisation de peripheriques tels que le 6522 VIA, le 6845 CRTC ou des E/S personnalisees.
  • Chargement d'images ROM
    - les images ROM pour la machine hote (BIOS, moniteur, ROM de langages) sont stockees sur la carte SD et chargees dans la PSRAM au demarrage.
  • WiFi et gestion web
    - la meme interface web Bootstrap a sept pages que le picoZ80 — tableau de bord, editeur de configuration, gestionnaire de fichiers, selection de persona, mises a jour firmware OTA, gestionnaire WiFi.
  • Double partition firmware
    - deux emplacements firmware de 5 Mo avec prise en charge des mises a jour OTA et commutation de partition geree par le bootloader.
  • Mise a jour firmware USB
    - le bootloader expose un pont USB pour le flashage initial sans debugger materiel.
X (Twitter) apercu du projet — picoZ80/pico6502 en action

Materiel

Le PCB du pico6502 (revision 2.2) est une carte compacte de 52 mm x 19 mm qui partage la meme conception fondamentale que le picoZ80 mais comporte une interface bus specifique au 6502 au lieu d'une interface Z80. Quatre feuillets de schemas couvrent le processeur RP2350B, le coprocesseur ESP32, l'interface bus 6502 et l'alimentation. Le hub USB present dans le picoZ80 v2.5 n'est pas monte sur la revision actuelle du pico6502. Toute la logique fonctionne en 3,3 V, avec l'interface bus concue pour les niveaux de signal 5 V du 6502.

Composants principaux
  • RP2350B (Cortex-M33 double coeur)
    - processeur principal cadence jusqu'a 300 MHz. Le Core 1 execute la boucle principale d'emulation du 6502 ; le Core 0 gere les E/S fichiers, l'USB et le relais ESP32. 512 Ko de SRAM interne.
  • Flash SPI 16 Mo
    - meme disposition que le picoZ80 : bootloader, deux emplacements application de 5 Mo, deux emplacements configuration, configuration generale et table de partitions.
  • PSRAM 8 Mo (SPI)
    - 64 banques x 64 Ko d'espace d'adressage en banques pour le 6502 emule. Les tableaux de pointeurs de blocs memoire et de fonctions E/S resident dans la PSRAM au-dessus de la zone RAM/ROM.
  • Coprocesseur ESP32
    - WiFi, carte SD, serveur web. Communique avec le RP2350 via FSPI a 50 MHz et UART a 460,8 kbaud.
  • Emplacement carte SD
    - FAT32, geree par l'ESP32. Stocke le config.json, les images ROM et les images disque.
  • Hub USB
    - hub USB integre pour la connectivite hote et la mise a jour du firmware par pont USB.
  • Alimentation 3,3 V
    - convertisseur buck a partir du 5 V present sur la broche VCC du DIP-40 6502.

Conception de la carte (KiCad)
Le materiel du pico6502 est concu dans KiCad. La revision actuelle est la v2.2. Les fichiers de schemas et de circuit imprime se trouvent dans le depot du projet sous kicad/PICO6502/.
Les quatre feuillets de schemas sont :
Feuillet 1 — Processeur RP2350B
Affectations GPIO du RP2350B QFN-80 pour le bus 6502, Flash 16 Mo, PSRAM 8 Mo et communications ESP32. Le bus 6502 necessite A0-A15, D0-D7, PHI0/PHI1/PHI2, RNW, SYNC, IRQ, NMI, RDY et RESET — utilisant la majorite des 48 broches GPIO du RP2350B.

pico6502 Feuillet de schema 1 — Processeur RP2350B

Feuillet 2 — Coprocesseur ESP32
Module ESP32, interface carte SD, antenne et communication inter-processeur (FSPI + UART). Fonctionnellement identique a la conception du picoZ80.

pico6502 Feuillet de schema 2 — Coprocesseur ESP32

Feuillet 3 — Interface bus 6502
Les connexions du socket DIP-40 et le reseau de resistances de l'interface bus. Contrairement au Z80, le 6502 n'a pas d'espace E/S separe — tous les peripheriques sont mappes en memoire. Tous les signaux d'adresse, de donnees et de controle sont achemines via des resistances serie vers les broches GPIO du RP2350 gerees par les machines d'etat PIO.

pico6502 Feuillet de schema 3 — Interface bus 6502

Feuillet 4 — Alimentation
Convertisseur buck synchrone TLV62590BV 5 V vers 3,3 V avec filtrage d'entree/sortie. Alimente depuis la broche VCC du socket DIP-40 6502.

pico6502 Feuillet de schema 4 — Alimentation

Fichiers source KiCad : kicad/PICO6502/PICO6502_Schematic.pdf (PDF du schema) et kicad/PICO6502/ (projet KiCad complet).
👀 BOM interactif — pico6502 v2.2 (visualiseur de placement des composants PCB)

Architecture

Conception double coeur
L'affectation des coeurs du RP2350B est identique a celle du picoZ80 :
Core 0 — pont USB, coordination des mises a jour firmware, relais d'E/S fichiers vers l'ESP32, dispatch des commandes UART ESP32, gestion des partitions.
Core 1 — boucle principale d'emulation du 6502. Traite les FIFO PIO pour les transactions bus du 6502, resout chaque adresse par rapport a la carte memoire et dispatche vers la PSRAM, le pass-through PHYSICAL ou les handlers de peripheriques virtuels FUNC. La boucle interne s'execute depuis la SRAM du RP2350 pour une latence minimale.
La communication inter-coeurs utilise le meme passage de messages queue_t que le picoZ80, transportant des messages pour les changements d'images disquette/disque, les rechargements de configuration, la lecture/ecriture de fichiers et les requetes de version firmware.

Interface bus PIO
L'interface bus 6502 est implementee dans M6502.pio. Le RP2350 fournit trois blocs PIO ; le firmware 6502 utilise les trois :
  • PIO 0 — Bus d'adresses et de donnees (GPIO 0-23)
    - execute m6502_addr (A0-A15, GPIO 0-15) et m6502_data (D0-D7, GPIO 16-23) simultanement. Les mots d'adresse sont envoyes au FIFO du Core 1 ; les donnees sont pilotees ou echantillonnees selon RNW.
  • PIO 1 — Signaux de controle et execution de cycle (GPIO 16-47)
    - execute le sequenceur de cycle (m6502_cycle), la recuperation d'opcode (m6502_fetch), la lecture/ecriture memoire (m6502_read, m6502_write), la detection IRQ (m6502_irq), la detection NMI (m6502_nmi) et la detection Set Overflow (m6502_so).
  • PIO 2 — Generation d'horloge (GPIO 16-47)
    - execute m6502_clock_6502, qui genere les horloges biphasees non chevauchantes PHI1 et PHI2 a partir d'une entree PHI0 externe, garantissant un timing bus 6502 correct independamment de la planification du Core 1.
L'ensemble complet des programmes PIO dans M6502.pio est :
Programme Fonction
m6502_clock_6502 Genere les horloges biphasees PHI1/PHI2 a partir de PHI0 externe.
m6502_addr Produit l’adresse 16 bits (A0-A15) et signale le debut de cycle (IRQ 0).
m6502_data Pilote ou echantillonne D0-D7 (IRQ 1), avec controle tri-state.
m6502_irq Detecte l’assertion IRQ (drapeau IRQ 5).
m6502_nmi Detecte l’assertion NMI (drapeau IRQ 4).
m6502_so Detecte l’assertion de la broche Set Overflow (SO) (drapeau IRQ 6).
m6502_cycle Sequenceur de cycle bus de niveau superieur ; IRQ 7 signale la sortie de la boucle d’execution.
m6502_fetch Cycle bus de recuperation d’opcode (PHI2 + RNW = lecture).
m6502_read Cycle bus de lecture memoire.
m6502_write Cycle bus d’ecriture memoire.
Les machines d'etat se synchronisent via les drapeaux IRQ PIO : IRQ 0 (adresse/debut de cycle), IRQ 1 (phase donnees), IRQ 4 (NMI), IRQ 5 (IRQ), IRQ 6 (SO), IRQ 7 (sortie de boucle d'execution). La difference cle par rapport a l'interface Z80 est l'horloge biphasee du 6502 — PHI1 et PHI2 sont non chevauchantes ; le bus d'adresses est valide sur le front montant de PHI1 et les donnees sont presentees ou echantillonnees avant le front descendant de PHI2. Dedier entierement PIO 2 a la generation d'horloge signifie que le timing du 6502 est toujours correct quelle que soit l'activite du Core 1.

Modele memoire
Le modele memoire du 6502 est structurellement identique au modele Z80 mais sans espace d'E/S separe — parce que le 6502 n'a pas d'equivalent IORQ, tous les registres de peripheriques apparaissent dans la carte memoire de 64 Ko. La meme architecture a trois niveaux s'applique :
Niveau 1 — SRAM du RP2350 : tableau de pointeurs de blocs de 128 entrees pour un dispatch O(1) par bloc de 512 octets.
Niveau 2 — PSRAM (8 Mo) : 64 banques x 64 Ko d'images RAM/ROM et tableaux de pointeurs de fonctions.
Niveau 3 — Flash (16 Mo) : firmware, images ROM, JSON de configuration minifie.
Types de blocs memoire disponibles pour la carte memoire du 6502 :
Type Description
PHYSICAL Pass-through vers le materiel reel de l’hote.
PHYSICAL_VRAM RAM video de l’hote avec etats d’attente.
RAM Lecture/ecriture — sauvegardee dans une banque PSRAM.
ROM Lecture seule — sauvegardee dans une banque PSRAM.
FUNC Peripherique virtuel — handler C appele a chaque acces. Utilise pour toute l’emulation de peripheriques, puisque le 6502 n’a pas d’espace E/S.
PTR Redirection par octet.
Disposition de la memoire Flash
Identique a la disposition du picoZ80 :
Partition Plage d’adresses Taille Contenu
Bootloader 0x10000000–0x1001FFFF 128 Ko Pont USB, mise a jour firmware, selecteur de partition
App Slot 1 0x10020000–0x1051FFFF 5 Mo Firmware principal 6502 (partition 1)
App Slot 2 0x10520000–0x10A1FFFF 5 Mo Firmware principal 6502 (partition 2)
App Config 1 0x10A20000–0x10C9FFFF 2,5 Mo Images ROM + JSON de configuration minifie (slot 1)
App Config 2 0x10CA0000–0x10F1FFFF 2,5 Mo Images ROM + JSON de configuration minifie (slot 2)
General Config 0x10F20000–0x10FFEFFF 892 Ko Parametres principaux, espace de travail
Partition Table 0x10FFF000–0x11000000 4 Ko Slot actif, checksums, metadonnees

Instructions de compilation

Le pico6502 utilise le meme systeme de compilation et la meme structure de repertoires que le picoZ80. Veuillez suivre les instructions de compilation du picoZ80 pour la procedure complete de configuration — creation du repertoire racine, definition de PICO_PATH, execution de get_and_build_sdk.sh et configuration de l'alias Docker pour ESP-IDF. Les differences specifiques au pico6502 sont notees ci-dessous.
Le firmware du pico6502 ne necessite pas la bibliotheque d'emulateur Zeta Z80. Aucun clone de projects/Z80 n'est necessaire.
Cloner le projet
mkdir -p <root>/projects
cd <root>/projects
git clone <tzpuPico-repo-url> tzpuPico
Compiler le firmware RP2350
Le meme script build_tzpuPico.sh est utilise. Assurez-vous que PICO_PATH est correctement defini en haut du script, puis executez depuis la racine :
cd <root>

# Compilation release standard
./build_tzpuPico.sh

# Compilation debug
./build_tzpuPico.sh DEBUG

# Compilation complete incluant le firmware ESP32 via Docker
./build_tzpuPico.sh ALL
Compiler le firmware ESP32 separement
cd <root>/projects/tzpuPico/esp32
idf54 build
Voir les instructions de compilation du picoZ80 pour la definition de l'alias Docker idf54.
Flashage
La procedure de flashage est identique a celle du picoZ80 — flashage initial du RP2350 via stockage de masse USB, flashage initial de l'ESP32 via esptool, et mises a jour subsequentes via les pages web OTA. Voir la section Flashage du picoZ80 pour tous les details, y compris la commande esptool et les notes sur les revisions de carte.

Debogage

Le debogage du pico6502 suit la meme procedure que la section Debogage du picoZ80 — referez-vous-y pour la description complete des connexions materielles, la configuration d'OpenOCD et l'initialisation GDB globale. Les seules differences par rapport au picoZ80 sont le repertoire de compilation du firmware principal (BaseM6502 au lieu de BaseZ80) et l'entree add-auto-load-safe-path dans ~/.gdbinit.

RP2350 — Debogage SWD
Connectez une sonde CMSIS-DAP aux broches SWCLK (broche 1), SWDIO (broche 2) et GND (broche 5) du connecteur de debogage 6 broches. Le pico6502 utilise la meme cible OpenOCD personnalisee rp2350_tzpu.cfg que le picoZ80 — voir la section Debogage du picoZ80 pour le contenu complet du fichier. Installez-le une fois, puis demarrez 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"
Ajoutez ce qui suit a ~/.gdbinit (ajustez les chemins en absolu si necessaire) :
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
Debogage du Bootloader
# Core 0
cd build/bin/model/Bootloader
cp ../../../../.gdbinit.bootloader.3333 .gdbinit
gdb-multiarch Bootloader.elf

# Core 1 (terminal separe)
cd build/bin/model/Bootloader
cp ../../../../.gdbinit.bootloader.3334 .gdbinit
gdb-multiarch Bootloader.elf
Debogage du firmware principal
# Core 0
cd build/bin/model/BaseM6502
cp ../../../../.gdbinit.3333 .gdbinit
gdb-multiarch BaseM6502_0x10020000.elf

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

ESP32 — Debogage USB
Connectez un cable USB au port USB ESP32 de la carte pico6502. L'interface USB-JTAG integree de l'ESP32-S3 ne necessite aucune sonde externe. Demarrez OpenOCD puis lancez le GDB Xtensa :
openocd -f board/esp32s3-builtin.cfg
xtensa-esp32s3-elf-gdb esp32/build/main.elf
(gdb) target extended-remote :3333

Configuration (JSON)

Le pico6502 utilise le meme mecanisme de configuration JSON que le picoZ80. La cle de niveau superieur est "rp2350", avec une section "core" pour les parametres de fonctionnement du RP2350. La section specifique au CPU utilise la cle "6502" (au lieu de "z80"), et puisque le 6502 n'a pas d'espace E/S separe, il n'y a pas de tableau "io" — tous les mappages de peripheriques apparaissent dans le tableau "memory" sous forme de blocs 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 — Configuration ESP32
L'objet de niveau superieur esp32 configure le coprocesseur ESP32. Il contient deux sous-objets : core et wifi.
esp32.core
Cle Type Description
device string Type de CPU — indique a l’ESP32 quelle personnalite processeur utiliser. Valeurs valides : "Z80" (picoZ80), "6502" (pico6502), "6512" (pico6512).
mode integer Mode de demarrage par defaut : 0 = mode client (station), 1 = mode Point d’Acces. Persiste dans le NVS.
esp32.wifi
L'objet wifi injecte les identifiants WiFi et les parametres reseau depuis config.json, remplacant ce qui est stocke dans le NVS. Definissez override a 0 pour ignorer ce bloc et s'appuyer sur les parametres NVS precedemment persistes.
Cle Type Description
override 0/1 Interrupteur principal. 1 = appliquer tous les parametres ci-dessous ; 0 = ignorer ce bloc et utiliser les parametres NVS persistes.
wifimode string "ap" pour le mode Point d’Acces ; "client" pour le mode client/station.
ssid string Nom du reseau WiFi a creer (AP) ou rejoindre (client).
password string Mot de passe WiFi.
ip string Adresse IP fixe (ex. "192.168.1.192").
netmask string Masque de sous-reseau (ex. "255.255.255.0").
gateway string Adresse de la passerelle par defaut.
dhcp 0/1 Mode client uniquement. 1 = DHCP ; 0 = utiliser les parametres fixes ip/netmask/gateway.
webfs string Repertoire racine du systeme de fichiers web de remplacement sur la carte SD (par defaut "webfs").
persist 0/1 1 = ecrire les parametres resolus dans le NVS ; 0 = appliquer pour cette session uniquement.

core — Parametres de fonctionnement du RP2350
Cle Type Description
cpufreq integer Frequence d’horloge systeme du RP2350 en Hz (ex. 300000000 pour 300 MHz).
psramfreq integer Frequence d’horloge SPI de la PSRAM en Hz (ex. 133000000 pour 133 MHz).
voltage float Tension du coeur du RP2350 (ex. 1.10).

memory — Carte memoire
Parce que le 6502 est une architecture a E/S mappees en memoire, tous les peripheriques apparaissent dans le tableau memory. Utilisez le type FUNC pour toute plage d'adresses qui correspond a un handler de peripherique virtuel.
Cle Type Description
enable 0/1 Si cette entree est active.
addr hex string Adresse de debut dans l’espace d’adressage du 6502.
size hex string Taille de la region.
type string PHYSICAL, PHYSICAL_VRAM, RAM, ROM, FUNC, PTR.
bank integer Numero de banque PSRAM pour les types RAM/ROM.
task string Identifiant de tache optionnel pour les blocs de type FUNC.
file string Chemin sur la carte SD vers une image ROM a charger au demarrage.
"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 — Chargeurs de ROM
Le modele de pilote du 6502 est plus simple que celui du Z80. Chaque entree de pilote charge une ou plusieurs images ROM dans la PSRAM au demarrage. Il n'y a pas de sous-tables de remappage d'adresses ou de remappage E/S ; toute la disposition memoire est definie dans le tableau memory.
Cle Type Description
enable 0/1 Si cette entree de pilote est active.
name string Nom descriptif pour cette entree de chargement ROM.
rom array Images ROM a charger dans la PSRAM au demarrage.

Entree rom[] :

Cle Type Description
enable 0/1 Si cette image ROM est chargee.
file string Chemin sur la carte SD vers le binaire ROM.
loadaddr array Descripteurs d’adresses de chargement.

Entree loadaddr[] :

Cle Type Description
enable 0/1 Si cette entree d’adresse de chargement est active.
position integer Index dans le file (pour les fichiers multi-ROM).
addr hex string Adresse de destination dans l’espace d’adressage du 6502.
bank integer Banque PSRAM dans laquelle charger.
size hex string Nombre d’octets a charger.
"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"
          }
        ]
      }
    ]
  }
]

Exemple de configuration minimale complete
Une configuration minimale pour un hote 6502 avec une zone RAM de 2 Ko pour la page zero/pile, 48 Ko de RAM generale, une ROM BIOS de 8 Ko et un handler de peripherique 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" }] }
          ]
        }
      ]
    }
  }
}

Interface web

L'interface web du pico6502 est identique en structure a l'interface du picoZ80 — sept pages Bootstrap 4 servies par l'ESP32 a http://<device-ip>/. Connectez-vous au point d'acces WiFi de la carte au premier demarrage, puis configurez le mode client via le gestionnaire WiFi pour rejoindre votre reseau.
Page URL Fonction
Tableau de bord / Etat du systeme en temps reel : processeur, peripherique, version firmware, partition active.
Editeur de configuration /config.htm Editeur config.json dans le navigateur avec coloration syntaxique et rechargement sans redemarrage.
Gestionnaire de fichiers /filemanager.htm Navigateur de fichiers de la carte SD : telechargement montant/descendant, renommage, suppression. Transferez les images ROM et disque sans retirer la carte SD.
Selection de persona /personality.htm Selection de la persona machine active par partition firmware.
OTA ESP32 /ota-esp32.htm Telechargement du firmware ESP32 via WiFi ; telechargement de l’archive FilePack versionnee du systeme de fichiers web sur la carte SD.
OTA RP2350 /ota-rp2350.htm Telechargement du firmware RP2350 via WiFi ; affichage et commutation de la partition active.
Gestionnaire WiFi /wifimanager.htm Configuration du SSID WiFi, du mot de passe et du mode (AP ou client).
Voir la page picoZ80 pour une description detaillee de chaque page de l'interface web — l'implementation du pico6502 est identique.

Sites de reference

Le tableau ci-dessous contient tous les sites references dans la conception et la programmation du pico6502.
Site Langue Description
RP2350 Datasheet Anglais Reference technique officielle et fiche technique du Raspberry Pi RP2350.
Pico SDK Anglais SDK C/C++ Raspberry Pi Pico — systeme de compilation et couche d'abstraction materielle utilises par le firmware du pico6502.
MOS 6502 Datasheet Anglais Fiche technique originale du MPU MOS Technology 6502 — timing bus, descriptions des broches et caracteristiques electriques.
ESP-IDF Anglais Framework de developpement IoT Espressif utilise pour le firmware du coprocesseur ESP32.
6502 Software Repository Anglais Depot communautaire de logiciels et d'images ROM 6502.

Manuels et fiches techniques

Le tableau ci-dessous contient toutes les fiches techniques et manuels references dans la conception et la programmation du pico6502.
Fiche technique Langue Description
RP2350 Anglais Fiche technique du microcontroleur Raspberry Pi RP2350.
ESP32-S3 Anglais Fiche technique du SoC Espressif ESP32-S3 — coprocesseur WiFi/BT de la carte pico6502.
APS6404L PSRAM Anglais Fiche technique de la PSRAM SPI 8 Mo — la RAM etendue principale utilisee pour les banques memoire.
W25Q128 Flash Anglais Fiche technique de la Flash SPI NOR Winbond 16 Mo — stocke le firmware et les images ROM.
TLV62590 Anglais Convertisseur buck synchrone Texas Instruments 5 V vers 3,3 V alimentant le pico6502 depuis la broche VCC du DIP-40 6502.
CH334F Anglais Controleur hub USB 2.0 4 ports CH334F — fournit la fonctionnalite hub USB pour les mises a jour firmware.

Apercu du projet

Les projets picoZ80 et pico6502 ont ete presentes pour la premiere fois sur X (anciennement Twitter) :
https://x.com/engineerswork1/status/1953171627065188841

Videos de demonstration
Des videos de demonstration pour le pico6502 seront ajoutees au fur et a mesure de la maturation du projet. Voir les Videos de demonstration du picoZ80 pour des exemples de la plateforme partagee en action.

Restriction d'usage commercial

Aucune utilisation commerciale n'est autorisee sans autorisation ecrite expresse.
La conception materielle du pico6502 (schemas, circuit imprime, fichiers KiCad), le firmware et tous les logiciels associes sont mis a disposition pour un usage personnel, educatif et non commercial uniquement. Aucune partie de cette conception — incluant mais sans s'y limiter les dessins de PCB, la nomenclature, les binaires firmware, le code source ou la documentation — ne peut etre utilisee, reproduite, fabriquee, vendue ou incorporee dans un produit ou service commercial sans l'autorisation ecrite expresse de l'auteur (Philip D. Smart).
Pour demander une licence commerciale ou discuter des utilisations autorisees, veuillez contacter l'auteur via le site web eaw.app.

Remerciements

Le projet pico6502 s'appuie sur le travail de plusieurs individus et projets open-source. Leurs contributions sont chaleureusement reconnues.
  • Manuel Sainz de Baranda y Goni
    Auteur de la bibliotheque d'emulation CPU Z80 en langage C Z80 (github.com/redcode/Z80), utilisee par le projet compagnon picoZ80. La meme philosophie d'emulation haute precision et l'infrastructure firmware partagee influencent la conception du pico6502, et le travail de Manuel est chaleureusement reconnu en tant que membre de la famille elargie du projet.
  • Raspberry Pi Ltd
    Auteurs du Pico SDK et du materiel RP2350. L'assembleur PIO, le SDK C, l'integration de la chaine d'outils CMake et le silicium RP2350B rendent possible l'interface bus 6502 precise au cycle pres.
  • Espressif Systems
    Auteurs du framework ESP-IDF et du materiel ESP32. Le coprocesseur ESP32, la pile WiFi, la bibliotheque OTA et le framework de stockage NVS sous-tendent l'interface de gestion web.
  • Philip Smart
    Conception materielle (schemas KiCad et circuit imprime), firmware PIO du RP2350, application web ESP32, systeme de configuration JSON et toute la documentation du projet.
  • Grok (xAI)
    Assistant IA qui a fourni une aide precieuse lors du debogage des machines d'etat PIO — en particulier pour le diagnostic de cas limites de timing et de problemes d'interaction bus precis au cycle pres dans les programmes PIO du RP2350.
  • Claude (Anthropic)
    Assistant IA contribuant a ce projet dans plusieurs domaines : redaction et structuration de la documentation du projet, analyse de l'interface FSPI/UART entre le RP2350 et l'ESP32 et recommandations d'amelioration du firmware, et assistance continue au developpement du firmware.

Licences

Le projet pico6502 est compose de plusieurs composants, chacun couvert par sa propre licence :
Composant Licence
Firmware RP2350 du pico6502 (PIO, sources C)GNU General Public License v3
Firmware ESP32 du pico6502 et interface webGNU General Public License v3
Fichiers de conception materielle KiCad (schemas, PCB, Gerbers)Creative Commons BY-NC-SA 4.0
Documentation et guides d'utilisationCreative Commons BY-NC-SA 4.0
Raspberry Pi Pico SDKBSD 3-Clause
Framework ESP-IDFApache License 2.0
Bootstrap 4 (interface web)MIT License
En resume : le firmware et les logiciels que vous compilez a partir du code source de ce projet sont open-source sous la GPL v3 ; les conceptions materielles et la documentation sont sous licence CC BY-NC-SA 4.0 (usage non commercial uniquement — licence commerciale disponible sur demande) ; les bibliotheques tierces conservent leurs propres licences comme indique ci-dessus. Voir les fichiers LICENSE et NOTICE dans le depot pour les details complets.

Conditions de licence

Copyright © 2019–2026 Philip Smart. Tous droits reserves.
Conceptions materielles — CC BY-NC-SA 4.0
Toutes les conceptions materielles (schemas KiCad, circuits imprimes, fichiers de fabrication Gerber, nomenclatures) sont sous licence Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. Vous etes libre de partager et d'adapter les conceptions a des fins non commerciales uniquement, a condition de citer l'auteur de maniere appropriee et de distribuer toute modification sous la meme licence. La fabrication ou la vente commerciale necessite une licence separee — veuillez contacter info@eaw.app.
Firmware et logiciels — GNU GPL v3
Le firmware et le code source logiciel sont des logiciels libres sous la GNU General Public License v3. Vous pouvez redistribuer et modifier le code selon les termes de la GPL v3. Toute modification distribuee doit egalement etre sous licence GPL v3 avec le code source rendu disponible.
Marques et attribution
Les noms picoZ80, pico6502 et engineers@work sont des marques de Philip Smart. Vous ne pouvez pas utiliser ces noms pour promouvoir des produits derives sans autorisation ecrite. Vous ne pouvez pas supprimer ou modifier les avis de copyright, l'attribution a l'auteur ou les credits de l'ecran de demarrage. Le re-branding de ce projet et sa presentation comme votre propre travail sont expressement interdits. Voir le fichier NOTICE dans le depot pour les details complets.
Licence commerciale
Si vous etes un fabricant ou un distributeur interesse par la production de cartes picoZ80 ou pico6502 pour la vente commerciale, veuillez contacter : info@eaw.app. L'utilisation personnelle, educative et de hobbyiste/club est toujours autorisee sous les licences open-source ci-dessus.
Les textes complets des licences sont inclus dans le depot sous les noms LICENSE, LICENSE-HARDWARE.txt et LICENSE-SOFTWARE.txt.

Avis reglementaire sans fil

Cet appareil incorpore un module sans fil ESP32-S3-PICO-1 qui emet dans la bande ISM 2,4 GHz, ce qui en fait un emetteur intentionnel au regard des reglementations de radiofrequences dans le monde entier (y compris FCC Part 15 Subpart C aux Etats-Unis et la Directive Equipements Radio 2014/53/EU dans l'Union europeenne).
Bien que le module ESP32-S3-PICO-1 lui-meme possede des certifications reglementaires prealables (FCC, CE et autres), ces certifications au niveau du module ne s'etendent pas automatiquement a un produit fini qui incorpore le module. L'exemption de module pre-certifie permet aux hobbyistes individuels de construire un nombre limite d'appareils pour un usage personnel, experimental ou educatif sans obtenir d'autorisation d'equipement separee.
Limitations importantes
  • Les appareils assembles ne doivent pas etre vendus, proposes a la vente, offerts ou distribues de quelque maniere que ce soit a des tiers, sauf si le produit fini a ete teste independamment et a obtenu sa propre autorisation d'equipement (ex. FCC ID, marquage CE avec evaluation d'un organisme notifie) dans la juridiction concernee.
  • La construction de ce projet pour un usage personnel en quantites limitees est generalement autorisee en vertu des dispositions pour hobbyistes et usage experimental (ex. FCC § 15.23), a condition que l'appareil ne cause pas d'interferences nuisibles.
  • Les exigences reglementaires varient selon les pays. Les constructeurs en dehors des Etats-Unis doivent consulter leur autorite nationale des radiofrequences pour les regles applicables.
Responsabilite du constructeur
Il est de la seule responsabilite du constructeur de s'assurer que tout appareil construit a partir de ces conceptions est conforme a toutes les reglementations de radiofrequences applicables dans sa juridiction. L'auteur fournit ces conceptions pour un usage personnel, educatif et de hobbyiste et ne garantit pas qu'un appareil construit a partir de celles-ci satisfait aux exigences reglementaires pour la distribution commerciale.