picoZ80 Manuel Utilisateur

picoZ80 Manuel Utilisateur

Le picoZ80 est un remplacement direct pour un CPU Z80 dans tout ordinateur disposant d'un socket DIP-40. Il se branche directement dans le socket Z80 de votre ordinateur vintage et, sans aucune modification de la carte hôte, offre de la mémoire étendue, des périphériques virtuels, une émulation de disquette et de QuickDisk, des systèmes de fichiers, ainsi qu'une interface de gestion accessible par navigateur via WiFi.
Ce manuel couvre la carte physique, la configuration initiale, la connexion à un ordinateur hôte, et l'utilisation de l'interface web. Pour les détails d'architecture, la référence de configuration et les informations de développement, consultez le picoZ80 Guide Technique.

Aperçu de la Carte

Le PCB du picoZ80 est conçu pour s'inscrire dans l'empreinte d'un boîtier DIP standard à 40 broches. Les 40 broches DIP sortent par le dessous de la carte, reproduisant exactement le brochage d'un véritable Z80, de sorte qu'il s'insère directement dans n'importe quel socket Z80 sans pliage ni adaptation.
La face supérieure de la carte porte tous les composants actifs. La carte est plus étroite que les dégagements internes de la plupart des ordinateurs Z80, et la hauteur au-dessus du socket reste dans l'enveloppe d'un circuit intégré standard avec un socket DIP-40 monté en dessous.

Connecteurs et Indicateurs

La carte picoZ80 expose les connecteurs et indicateurs suivants :
Élément Description
6-pin Debug Header Situé sur le bord de la carte. Fournit un accès SWD (Serial Wire Debug) au RP2350, les lignes BOOTSEL et Reset pour le flashage initial, et le Reset pour l’ESP32. Voir le brochage du connecteur Debug ci-dessous.
USB Port (Mini-B) Connectivité USB pour le flashage du firmware via le mode stockage de masse USB (flash initial) et pour le pontage USB-UART vers l’ESP32. Sur les révisions de carte v2.3a et ultérieures, un second port USB dédié à l’ESP32 peut également être présent.
SD Card Slot Emplacement de carte SD pleine taille géré par l’ESP32. Contient le fichier config.json, les images ROM, les images disque et les arborescences du système de fichiers.

Brochage du Connecteur Debug

Le connecteur 6 broches est l'interface matérielle principale pour la programmation initiale et le débogage au niveau source. Les broches sont numérotées à partir de la broche 1, située à l'extrémité la plus proche du repère sur le bord de la carte.
Broche Signal Fonction
1 SWCLK Horloge Serial Wire Debug (ARM SWD)
2 SWDIO Données Serial Wire Debug (ARM SWD)
3 Reset RP2350 Reset actif bas pour le RP2350. Mettre à l’état bas pour réinitialiser le RP2350.
4 Reset ESP32 Reset actif bas pour l’ESP32. Mettre à l’état bas pour maintenir l’ESP32 en reset.
5 GND Référence de masse
6 BOOTSEL Sélection du mode de démarrage du RP2350. Maintenir à l’état bas lors de la mise sous tension/du reset pour entrer en mode stockage de masse USB.

NB. Les broches 1, 2 et 5 sont utilisées pour le débogage SWD (SWCLK, SWDIO, GND). Les broches 3 et 6 ne sont utilisées que pour le flashage initial. La broche 4 est utilisée lorsqu'il faut empêcher l'ESP32 de démarrer pendant le boot du RP2350 (par ex. lors de la programmation initiale du firmware ESP32).


Premiers Pas

Suivez ces étapes dans l'ordre lors de la première mise en service d'une carte picoZ80 :
  1. Flasher le bootloader du RP2350 via le mode stockage de masse USB (BOOTSEL).
  2. Flasher le firmware de l'ESP32 via esptool.
  3. Préparer une carte SD avec le fichier config.json et les images ROM/disque nécessaires.
  4. Installer le picoZ80 dans le socket Z80 de votre ordinateur hôte.
  5. Mettre sous tension, se connecter à l'interface web du picoZ80 et configurer selon les besoins.

Étape 1 — Flasher le Bootloader du RP2350

Le RP2350 ne possède pas de boutons physiques BOOTSEL ou Reset. Les deux signaux sont disponibles sur le connecteur debug 6 broches. Pour entrer dans le bootloader en mode stockage de masse USB :
  1. N'insérez pas encore le picoZ80 dans un ordinateur hôte — connectez-le à un PC uniquement par câble USB.
  2. À l'aide d'un cavalier ou d'une sonde, maintenez la broche 6 (BOOTSEL) à l'état bas.
  3. Alimentez le port USB — le RP2350 commence à démarrer.
  4. Relâchez BOOTSEL rapidement après que la carte s'est énumérée en tant que périphérique de stockage de masse USB. (Si vous maintenez BOOTSEL trop longtemps après le reset, le RP2350 ne peut plus accéder à la puce Flash.)
  5. Le PC montera un lecteur nommé RPI-RP2 (ou similaire).
  6. Copiez le fichier Bootloader_<version>.uf2 sur le lecteur monté. Le RP2350 se flashe automatiquement et redémarre.
Après avoir flashé le bootloader, toutes les mises à jour ultérieures du firmware RP2350 peuvent être effectuées sans fil via la page OTA web — vous n'avez plus besoin de toucher au connecteur debug pour les mises à jour normales du firmware.

Étape 2 — Flasher le Firmware de l'ESP32

Le firmware de l'ESP32 est flashé à l'aide de esptool. Sur les révisions de carte v2.3a et ultérieures, l'ESP32 dispose de son propre port USB et apparaît de manière indépendante sur le PC hôte. Sur les révisions antérieures (v2.0 – v2.2), l'ESP32 est accessible via le RP2350 qui fait office de pont USB-UART.
Configurer l'environnement Python (une seule fois) :
python3 -m venv ./venv/
source ./venv/bin/activate
cd $HOME/esptool
Puis flasher les quatre composants du firmware ESP32. Ajustez PORT au nœud de périphérique attribué par votre système d'exploitation :
PORT=/dev/ttyUSB0       # Linux — ajuster selon les besoins
# PORT=/dev/tty.usbmodem141403  # macOS

BINPATH=/path/to/esp32/build

python3 ./esptool.py \
  -p ${PORT} -b 115200 \
  --before default_reset --after hard_reset \
  --chip esp32s3 \
  write_flash \
  --flash_mode dio --flash_size 4MB --flash_freq 80m \
  0x0     ${BINPATH}/bootloader.bin \
  0x8000  ${BINPATH}/partition-table.bin \
  0x9000  ${BINPATH}/ota_data_initial.bin \
  0x10000 ${BINPATH}/sd_card.bin

NB. Toutes les mises à jour ultérieures du firmware ESP32 peuvent être effectuées via la page OTA web (ota-esp32.htm) une fois le flashage initial terminé.

Étape 3 — Préparer la Carte SD

La carte SD est le support de stockage principal du picoZ80. Elle contient le fichier de configuration, les images ROM, les images disque et les répertoires du système de fichiers.
Exigences de formatage :
  • Système de fichiers FAT32.
  • Toute capacité supportée par FAT32 (typiquement jusqu'à 32 Go est recommandé pour un formatage fiable).
Fichiers minimum requis :
  • config.json à la racine de la carte SD — le fichier de configuration principal. Voir Configuration de Base pour un exemple minimal.
  • Répertoire webfs/ — les ressources de l'interface web de l'ESP32. Copiez le contenu du répertoire webfs/ du dépôt du projet vers la racine de la carte SD.
Répertoires optionnels mais recommandés :
Répertoire Contenu
MZF/ Fichiers programmes au format MZF pour le chargement via le système de fichiers
ROM/ Images ROM référencées par config.json
DSK/ Images de disquettes (format DSK) pour l’émulation WD1773
QD/ Images QuickDisk pour l’émulation QuickDisk
TZFS/ Arborescences TranZPUter Filing System
RFS/ Arborescences ROM Filing System
La carte SD peut être entièrement gérée via le Gestionnaire de Fichiers web une fois le picoZ80 en fonctionnement — vous pouvez téléverser des images ROM, modifier le fichier config.json et créer des répertoires depuis le navigateur sans retirer physiquement la carte.

Étape 4 — Installation dans l'Ordinateur Hôte

Sécurité avant tout : Éteignez toujours et débranchez l'ordinateur hôte avant d'installer ou de retirer le picoZ80. La carte fonctionne en interne à 3,3V ; les broches DIP-40 se connectent au bus 5V de l'hôte via un circuit d'interface approprié, mais la carte ne doit jamais être insérée ou retirée sous tension.
Procédure d'installation :
  1. Éteignez l'ordinateur hôte et déchargez toute électricité statique.
  2. Retirez le processeur Z80 existant de son socket DIP-40. Un outil extracteur de circuit intégré est recommandé pour éviter de plier les broches.
  3. Insérez la carte SD dans l'emplacement SD du picoZ80.
  4. Alignez le picoZ80 avec le socket Z80, en vous assurant que la broche 1 du picoZ80 (marquée par un point ou une encoche) est alignée avec la broche 1 du socket (également marquée, et généralement adjacente à l'encoche sur la sérigraphie du contour du circuit intégré).
  5. Appuyez doucement et uniformément le picoZ80 dans le socket. Assurez-vous que les 40 broches sont bien en place. Ne forcez pas — si une résistance est ressentie, retirez et vérifiez l'alignement des broches.
  6. Mettez l'ordinateur hôte sous tension.
Lors de la première mise sous tension après une installation fraîche du firmware, l'ESP32 démarrera en mode Point d'Accès, diffusant un réseau WiFi nommé picoZ80. Connectez-vous à ce réseau pour accéder à l'interface web et terminer la configuration WiFi initiale.

NB. Le picoZ80 s'alimente à partir du 5V sur la broche VCC du socket Z80. Le convertisseur buck embarqué fournit 3,3V à tous les composants de la carte. Assurez-vous que l'alimentation 5V de votre ordinateur hôte peut fournir au moins 500mA — le picoZ80 peut consommer jusqu'à 400mA en charge maximale (RP2350 à 300MHz avec WiFi actif).


Configuration WiFi

La connectivité WiFi nécessite que le réseau d'adaptation d'antenne soit peuplé sur le PCB et que le firmware de l'ESP32 soit compilé avec le WiFi activé. Voir l'Avis Réglementaire ci-dessous. Si vous utilisez un firmware NCM uniquement, ignorez cette section et utilisez la connexion USB NCM à la place.
Le coprocesseur ESP32 du picoZ80 fournit la connectivité WiFi. Au premier démarrage (ou lorsqu'aucun identifiant WiFi n'a été enregistré), l'ESP32 démarre en mode Point d'Accès (AP) afin que vous puissiez vous y connecter depuis n'importe quel appareil disposant d'un navigateur et configurer les paramètres de votre réseau domestique.

Connexion en Mode Point d'Accès

  1. Sur votre téléphone, tablette ou ordinateur portable, ouvrez les paramètres WiFi et recherchez un réseau nommé picoZ80 (ou tel que configuré dans le champ esp32.wifi.ssid de votre config.json en mode AP).
  2. Connectez-vous au réseau picoZ80. Le mot de passe AP par défaut est pZ80pZ80 (consultez les notes de version de votre firmware si cela a changé).
  3. Ouvrez un navigateur et naviguez vers http://192.168.4.1 — c'est l'adresse IP par défaut en mode AP. L'interface web du picoZ80 apparaîtra.
  4. Naviguez vers la page WiFi Manager pour entrer le SSID et le mot de passe de votre réseau domestique.
  5. Cliquez sur Save & Connect. L'ESP32 redémarrera et se connectera à votre réseau domestique en tant que client.

Mode Client (Station)

Une fois configuré en mode client, l'ESP32 rejoint votre réseau WiFi domestique et est accessible à l'adresse IP affichée sur la page du Tableau de Bord. Si vous définissez une IP fixe dans `config.json` (recommandé pour faciliter l'accès), naviguez directement vers :
http://192.168.1.192
Substituez l'adresse IP que vous avez configurée. Si vous utilisez DHCP, trouvez l'adresse attribuée dans la liste des clients DHCP de votre routeur.
L'interface web s'exécute entièrement dans votre navigateur. Aucun logiciel supplémentaire n'est requis. Le serveur web du picoZ80 fonctionne sur le port 80.

Connexion USB NCM (Sans WiFi)
Si la carte est construite avec le firmware NCM (sdkconfig.mode_ncm_only ou sdkconfig.mode_wifi_and_ncm), un adaptateur Ethernet virtuel apparaît sur l'ordinateur hôte lorsque le port USB de l'ESP32 est connecté. Le serveur DHCP intégré du picoZ80 attribue automatiquement une adresse IP à l'hôte — aucune configuration réseau manuelle n'est nécessaire.
  1. Connectez un câble USB de l'ordinateur hôte au port USB de l'ESP32 sur le picoZ80.
  2. Attendez quelques secondes que le système d'exploitation hôte détecte le nouvel adaptateur réseau.
  3. Ouvrez un navigateur web et naviguez vers http://192.168.7.1.
  4. La page du Tableau de Bord du picoZ80 devrait apparaître.
Ce mode fournit un accès complet à toutes les fonctionnalités de l'interface web : édition de la configuration, mises à jour firmware, gestion des fichiers et sélection de personnalité. Aucune antenne WiFi ni composant radio n'est requis.

Interface Web

L'interface web du picoZ80 est une application Bootstrap 4 de huit pages servie par l'ESP32. Toutes les pages — y compris le nouvel éditeur de configuration GUI — sont accessibles depuis la barre de navigation en haut de chaque page. Les ressources web sont stockées dans le répertoire webfs/ sur la carte SD et peuvent être mises à jour indépendamment du firmware.

Tableau de Bord (index.htm)

Le Tableau de Bord est la page d'accueil de l'interface web. Il affiche les informations système en temps réel et fournit un aperçu rapide de l'état du picoZ80.
Les informations affichées sur le Tableau de Bord comprennent :
  • Version du Firmware — la version du firmware RP2350 actuellement en cours d'exécution et la date de compilation.
  • Version ESP32 — la version du firmware du coprocesseur ESP32.
  • Partition Active — lequel des deux emplacements firmware (1 ou 2) est actuellement actif.
  • Persona Active — la personnalité machine actuellement chargée (par ex. MZ-700, MZ-80A).
  • Fréquence d'Horloge RP2350 — la fréquence actuelle du CPU en MHz.
  • Fréquence d'Horloge PSRAM — la fréquence actuelle de l'horloge SPI de la PSRAM.
  • État WiFi / État Réseau — en modes WiFi : mode (AP ou client), SSID et adresse IP attribuée. En mode NCM uniquement : ce panneau est intitulé Configuration Réseau et affiche l'état du réseau USB NCM (adresse IP, masque de sous-réseau) — il n'y a pas de champs liés au WiFi.
  • WiFi RSSI (modes WiFi uniquement) — indicateur de force du signal reçu en temps réel (dBm), mis à jour automatiquement toutes les trois secondes. Code couleur : vert (≥ −50 dBm, excellent), bleu (≥ −70 dBm, bon), orange (≥ −80 dBm, passable), ou rouge (< −80 dBm, faible). Non affiché en mode NCM uniquement.
  • WiFi TX Power (modes WiFi uniquement) — puissance d'émission actuelle en dBm, également mise à jour en temps réel. Non affichée en mode NCM uniquement.
  • Carte SD — indique si une carte SD est présente et l'état du montage du système de fichiers.
  • Temps de Fonctionnement — temps écoulé depuis le dernier redémarrage.
Le Tableau de Bord fournit également des boutons pour redémarrer le RP2350 et pour déclencher un rechargement de la configuration depuis la carte SD sans redémarrage complet.
Deux menus déroulants dans la barre de navigation en haut à droite sont disponibles sur chaque page :
  • Menu Actions
    - Changer la Disquette 1 / 2 — sélectionner un nouveau fichier image DSK depuis la carte SD et le monter dans l'emplacement 1 ou 2 du contrôleur de disquette virtuel WD1773 sans redémarrage. Le nom du fichier image disque actuellement chargé est affiché à côté de chaque entrée (ou "none" si aucune image n'est chargée). Lorsque le contrôleur de disquette actif prend en charge plus de deux lecteurs, Changer la Disquette 3 et 4 apparaissent également (elles sont masquées sinon).
    - Changer le Disque QD — changer l'image QuickDisk active à la volée. Le nom du fichier image QD actuellement chargé est affiché à côté de l'entrée.
    - Recharger la Configuration RP2350 — envoyer une commande de rechargement au RP2350 via l'UART ESP32–RP2350 ; le RP2350 ré-analyse le fichier config.json et réapplique la carte mémoire et la configuration des pilotes sans cycle d'alimentation complet.
  • Menu Redémarrage
    - ESP32 — redémarrage logiciel du coprocesseur ESP32 (redémarre le serveur web et la pile WiFi, le RP2350 n'est pas affecté).
    - RP2350B — réinitialisation du processeur RP2350 (relance le bootloader et recharge l'emplacement firmware actif, le CPU hôte est mis en pause pendant la réinitialisation).
    - Host — active la ligne de réinitialisation de l'ordinateur hôte, redémarrant l'ordinateur vintage dans le socket Z80 sans affecter la carte picoZ80 elle-même.
    - Réinitialisation IPL — effectue une réinitialisation IPL (Initial Program Load) en basculant le bit 3 du Port C du PPI 8255, ramenant la machine en mode de démarrage (BST). Disponible sur les personnalités MZ-80B, MZ-2000, MZ-2200 et MZ-2500 — équivalent à l'appui sur le bouton IPL du matériel d'origine.
    - RP2350 UF2 Boot / RP2350 UF2 Boot (App) — redémarre le RP2350 dans son bootloader USB (BOOTSEL) afin qu'un firmware .uf2 puisse être glissé-déposé sur le lecteur monté. La variante simple entre directement dans le bootloader ; la variante (App) y entre à nouveau depuis l'emplacement applicatif en cours d'exécution.

Éditeur de Configuration (config.htm)

La page de l'Éditeur de Configuration fournit un éditeur intégré au navigateur pour le fichier config.json stocké sur la carte SD. L'éditeur dispose de la coloration syntaxique et d'une validation JSON de base.
Pour modifier la configuration :
  1. Naviguez vers la page de l'Éditeur de Configuration.
  2. Le fichier config.json actuel est chargé automatiquement dans l'éditeur.
  3. Effectuez vos modifications. L'éditeur mettra en surbrillance les erreurs de syntaxe en rouge.
  4. Cliquez sur Save pour écrire le fichier mis à jour sur la carte SD.
  5. Cliquez sur Apply (ou redémarrez) pour appliquer la nouvelle configuration. Le RP2350 lit la configuration au démarrage, la minifie et la stocke en Flash — les démarrages suivants utilisent la copie Flash si aucune carte SD n'est présente.
Les modifications de la carte mémoire, des images ROM et de la carte d'E/S prennent effet lors de la prochaine réinitialisation du RP2350. Les modifications des paramètres WiFi dans le bloc esp32.wifi prennent effet lors du prochain redémarrage de l'ESP32.

NB. L'Éditeur de Configuration opère directement sur le fichier de la carte SD. Il est recommandé de conserver une copie de sauvegarde d'un config.json fonctionnel sur votre PC avant d'effectuer des modifications importantes.

Configuration GUI (configgui.htm)

La page de Configuration GUI fournit une alternative graphique à l'Éditeur de Configuration JSON brut. Tous les paramètres de configuration sont présentés sous forme de champs de saisie étiquetés, de menus déroulants et de tableaux modifiables, organisés en quatre onglets :
  • RP2350 Global — paramètres globaux de tension du cœur, de fréquence CPU et de fréquence PSRAM qui s'appliquent aux deux partitions.
  • Partition 1 / Partition 2 — carte mémoire par partition (adresse, taille, type, états d'attente, banque, fichier ROM), carte des ports d'E/S (adresse, taille, type, gestionnaire), et configuration des pilotes (par ex. MZ80AFI, RFS, MZ-1E30, Celestite, PCW9512) avec des commutateurs d'activation/désactivation et un bouton Add Driver pour l'ensemble complet des pilotes d'interface disponibles. Chaque section dispose de boutons d'ajout/suppression de lignes.
Ajustement du bus GPIO. Les paramètres du cœur par partition vous permettent d'ajuster les caractéristiques électriques du bus Z80 indépendamment pour chacun des trois groupes du bus — Adresse, Données et Contrôle. Pour chaque groupe, vous pouvez définir la force de commande (2 / 4 / 8 / 12 mA), le taux de montée (lent = faible EMI, ou rapide), l'entrée à trigger de Schmitt (activée / désactivée) et la résistance de tirage (flottant / haut / bas). Une table optionnelle de surcharge par broche vous permet de surcharger n'importe lequel de ces paramètres pour des broches GPIO individuelles lorsqu'une machine hôte particulière l'exige. La valeur par défaut est 2 mA avec un taux de montée lent (EMI minimum). Les paramètres du cœur exposent également la valeur de rafraîchissement Z80 : 0 désactive le rafraîchissement DRAM, 1 émet un rafraîchissement à chaque lecture d'opcode, et N émet un rafraîchissement tous les N fetches — ce qui permet d'équilibrer l'activité de rafraîchissement par rapport au timing des périphériques.
  • ESP32 — type de périphérique ESP32, contrôles de l'interface réseau (WiFi Enable, NCM Enable, NCM Retries, NCM Retry Period), et configuration WiFi (SSID, mot de passe, adresse IP, masque de sous-réseau, mode AP/Client, DHCP, puissance TX). En plus des champs WiFi, vous pouvez définir l'adresse IP NCM et le masque de sous-réseau USB, ainsi qu'un nom de produit USB personnalisé — utile pour distinguer plusieurs cartes connectées au même hôte.
Cliquez sur Save Configuration pour écrire les modifications dans config.json (la version précédente est sauvegardée) et recharger automatiquement la configuration du RP2350. Cliquez sur Reload pour relire le config.json actuel depuis la carte SD, en abandonnant toute modification non enregistrée. Pour une édition avancée au-delà de ce que la GUI expose, utilisez l'Éditeur de Configuration pour modifier directement le JSON brut.
Explorateur de fichiers. Les champs d'images ROM et disque proposent un bouton Browse qui ouvre un sélecteur de fichiers de la carte SD, vous permettant de sélectionner un fichier sans saisir son chemin. Le chemin choisi est stocké relativement à la racine de la carte SD.
Port de carte série. Les interfaces série RS-232C MZ-8BIO3 et MZ-1E24 prennent un paramètre port — l'adresse de base d'E/S de la carte (par défaut 0xB0) — modifiable dans la ligne du pilote.
Série de pilotes et Base I/O Port. Le menu déroulant Add Driver n'offre que les pilotes valides pour le firmware en cours d'exécution — la page détecte si le firmware est un build Sharp, Amstrad, Tatung ou Open (expérimentateur). Pour les cartes d'interface relocalisables — MZ-1R12, MZ-1R18, MZ-1R23, MZ-1R37, PIO-3034, MZ-8BIO3, MZ-1E24, MZ-1E05 et Celestite — un unique champ Base I/O Port est affiché, pré-rempli avec la base authentique de la carte. Modifiez-le pour déplacer les ports de la carte lorsque le picoZ80 est utilisé sur une carte de votre propre conception ; le GUI écrit automatiquement le mappage correct. Chaque pilote peut également charger ses propres images System ROM, qui écrasent les ROM de l'hôte lorsque le pilote est activé.
Mode démonstration. Un assistant de présentation optionnel qui masque les champs sensibles — SSID et mot de passe WiFi, et adresses IP/passerelle — des pages web, afin que l'interface puisse être montrée en toute sécurité dans des captures d'écran ou des enregistrements d'écran sans exposer les détails de votre réseau.

Gestionnaire de Fichiers (filemanager.htm)

Le Gestionnaire de Fichiers fournit une vue navigable du contenu de la carte SD. Vous pouvez naviguer dans les répertoires, téléverser de nouveaux fichiers (images ROM, images disque, fichiers programmes MZF), télécharger des fichiers existants vers votre PC, créer de nouveaux répertoires, et supprimer des fichiers et répertoires.
Tâches courantes dans le Gestionnaire de Fichiers :
  • Téléverser une image ROM — naviguez vers le répertoire ROM/ et utilisez le bouton Upload pour transférer le fichier ROM depuis votre PC.
  • Téléverser une image disque — naviguez vers DSK/ (disquette) ou QD/ (QuickDisk) et téléversez le fichier image. Une fois chargé, le nom du fichier image disque actuel est affiché dans le menu Actions à côté de chaque emplacement de disquette et QD pour une référence rapide.
  • Téléverser des programmes MZF — naviguez vers MZF/ ou le répertoire du système de fichiers concerné et téléversez vos fichiers MZF.
  • Sauvegarder config.json — cliquez sur l'icône de téléchargement à côté de config.json pour enregistrer une copie sur votre PC.
  • Sauvegarder la Carte SD — cliquez sur le bouton Backup SD pour télécharger l'intégralité du contenu de la carte SD sous forme d'archive unique vers votre ordinateur local. Ceci est particulièrement utile lorsque le picoZ80 est installé à l'intérieur d'un ordinateur hôte et que le retrait physique de la carte SD est peu pratique. La sauvegarde capture tous les fichiers de configuration, images ROM, images disque et données du système de fichiers en une seule opération.
Les opérations sur les fichiers sont effectuées directement sur la carte SD via l'ESP32. Les téléversements de fichiers volumineux peuvent prendre quelques secondes selon la taille du fichier et la qualité du signal WiFi.

Sélection de Personnalité (personality.htm)

La page de Sélection de Personnalité vous permet de choisir quelle personnalité machine (persona) le picoZ80 présente à l'ordinateur hôte. Les différentes personnalités chargent des cartes mémoire, des images ROM et des liaisons de pilotes virtuels différentes depuis la configuration.
Personnalités actuellement supportées :
  • MZ-700 — personnalité MZ-700 complète avec commutation de banques, vidéo virtuelle, E/S clavier, émulation de disquette WD1773, émulation QuickDisk et ROM Filing System. Inclut CP/M v2.23 (48K), SA-1510 BASIC et Microsoft BASIC v4.7, tous avec accès lecture/écriture à la carte SD.
  • MZ-80K — personnalité Sharp MZ-80K avec moniteur SP-1002, 8255 PPI, 8253 PIT et clavier LS367. Deux interfaces de disquette sont disponibles : la MZ80FIO native (Toshiba T3444M) — l'interface disque MZ-80FD d'origine, qui démarre et lit tous les disques MZ-80K (jeux, applications, BASIC et CP/M) ; et la carte MZ80AFI (le FDC du MZ-80A) — utilisée pour CP/M, qui peut démarrer le CP/M MZ-80K et lire les disques CP/M MZ-80K d'origine depuis CP/M en tant que lecteurs C:/D:. La personnalité peut en outre lier les autres cartes d'interface du MZ-80A (RFS, MZ-1E14/E19, MZ-1R12/R18/R37, PIO-3034). CP/M nécessite le mode de personnalité virtuel.
  • MZ-80A — personnalité MZ-80A (en cours de développement).
  • MZ-80B — personnalité MZ-80B (en cours de développement).
  • MZ-800 — personnalité Sharp MZ-800 — machine à double mode fonctionnant en mode de compatibilité MZ-700 ou en mode MZ-800 natif (graphismes 320×200 / 640×200, palette 4/16 couleurs via le GDG), son PSG SN76489, disquette WD1773 et QuickDisk. Bascule de mode à la volée. Peut lier l'ensemble complet des cartes d'interface MZ-80A/MZ-700 plus les cartes série RS-232C MZ-8BIO3 / MZ-1E24.
  • PCW-9512 — personnalité Amstrad PCW-9512 avec gate array, uPD765 FDC, 512KB de RAM paginée et contrôleur d'imprimante à marguerite.
  • Basic CPU — un Z80 nu dans le support, sans pilote spécifique à une machine, pour un simple remplacement direct ou du développement Z80 générique.
  • OpenZ80 — la personnalité expérimentateur pour une carte de votre propre conception ou une machine non prise en charge (voir Autres Machines). Contrairement aux personnalités ci-dessus, il s'agit d'un build de firmware dédié plutôt que d'une sélection sur cette page : flashez le firmware OpenZ80 sur une partition à l'aide des pages Mises à jour du firmware, puis ajoutez ses cartes d'interface et définissez leurs ports d'E/S de base sur la page Configuration GUI.
Le changement de personnalité modifie la carte mémoire active et les images ROM chargées sans redémarrage de l'hôte. Le picoZ80 réinitialise sa gestion des banques mémoire selon la configuration de la nouvelle personnalité et l'hôte voit la nouvelle disposition mémoire lors de la prochaine transaction sur le bus Z80.

Mises à Jour Firmware (OTA)

Le firmware du RP2350 et de l'ESP32 peut être mis à jour par voie hertzienne (OTA) depuis l'interface web sans aucun accès physique au connecteur debug.

Mise à Jour OTA du RP2350 (ota-rp2350.htm)
  1. Compilez le firmware RP2350 à l'aide des scripts de compilation — le binaire de sortie sera dans fw/bin/ avec un nom de fichier horodaté par version (par ex. BaseZ80_v3.009.bin).
  2. Naviguez vers http://<device-ip>/ota-rp2350.htm.
  3. Sélectionnez l'emplacement de partition à mettre à jour (Slot 1 ou Slot 2). L'emplacement actuellement actif est indiqué sur le Tableau de Bord — il est recommandé de mettre à jour l'emplacement inactif afin que le firmware existant reste disponible en cas d'échec de la mise à jour. Deux cases à cocher optionnelles sont disponibles : Clear App Config efface les images ROM et les données de configuration pour l'emplacement cible, et Clear Flash Header réinitialise la table de partitions aux valeurs d'usine — utilisez-les lors d'une mise à niveau vers une version de firmware avec un schéma de configuration incompatible.
  4. Cliquez sur Choose File, sélectionnez le fichier .bin, puis cliquez sur Upload.
  5. Attendez la fin du téléversement et de la vérification. La page confirmera le succès et affichera la nouvelle partition comme disponible.
  6. Pour activer le nouveau firmware, naviguez vers la section de sélection de partition de la même page, choisissez l'emplacement nouvellement mis à jour et cliquez sur Set Active & Reboot. Le RP2350 redémarre sur le nouveau firmware.
Les partitions applicatives utilisent un format binaire pur (pas UF2) car elles résident à des adresses Flash non standard. Le bootloader vérifie la somme de contrôle de l'image avant d'activer la nouvelle partition — si la vérification échoue, l'emplacement actif existant reste en service.

Mise à Jour OTA de l'ESP32 (ota-esp32.htm)
  1. Compilez le firmware ESP32 — le binaire de sortie est esp32/build/tzpuPico_esp32.bin.
  2. Naviguez vers http://<device-ip>/ota-esp32.htm.
  3. Cliquez sur Choose File, sélectionnez le fichier .bin, puis cliquez sur Upload.
  4. L'ESP32 redémarre automatiquement sur le nouveau firmware après un téléversement réussi.
La page OTA accepte également une archive FilePack pour mettre à jour les ressources de l'interface web stockées dans le répertoire webfs/ sur la carte SD. Cela permet de mettre à jour l'interface web indépendamment du binaire firmware de l'ESP32.

WiFi Manager (wifimanager.htm)

Note : La page WiFi Manager n'est disponible que lorsque le firmware ESP32 est compilé avec le WiFi activé (sdkconfig.mode_wifi_only ou sdkconfig.mode_wifi_and_ncm). En mode NCM uniquement, cette page n'est pas présente — la connectivité réseau est fournie automatiquement via USB NCM sans configuration utilisateur requise.
La page WiFi Manager configure les paramètres réseau sans fil de l'ESP32. Les modifications effectuées ici sont persistées dans le NVS (stockage non volatile) de l'ESP32 et prennent effet au prochain redémarrage.
Paramètres disponibles :
  • Mode WiFiAccess Point (le picoZ80 crée son propre réseau) ou Client (le picoZ80 rejoint un réseau existant).
  • SSID — le nom du réseau à créer (mode AP) ou à rejoindre (mode client).
  • Mot de passe — la phrase secrète WiFi.
  • Adresse IP / Masque de sous-réseau / Passerelle — paramètres d'IP fixe pour le mode client (recommandé pour un accès constant).
  • DHCP — activez pour obtenir une adresse automatiquement depuis votre routeur ; désactivez pour utiliser les paramètres d'IP fixe ci-dessus.
  • TX Power — puissance d'émission WiFi en unités de 0,25 dBm (plage 8–84, soit 2–21 dBm). Réglez sur 0 pour utiliser la valeur par défaut spécifique à la région. Le PCB du picoZ80 est conçu pour un rayonnement RF minimal, de sorte que lorsque la carte est installée à l'intérieur d'un boîtier métallique d'ordinateur, le signal vers le routeur peut être faible. Augmenter la puissance TX peut améliorer la connectivité au prix d'une consommation légèrement plus élevée ; la diminuer peut réduire les interférences dans des environnements avec de nombreux appareils WiFi. Le RSSI actuel et la puissance TX effective sont affichés sur le Tableau de Bord et sur cette page, mis à jour en temps réel toutes les trois secondes.
Après la sauvegarde, cliquez sur Reboot ESP32 pour appliquer les nouveaux paramètres. L'ESP32 redémarrera et se connectera avec la nouvelle configuration. Si la connexion en mode client échoue (SSID ou mot de passe incorrect), l'ESP32 reviendra en mode Point d'Accès après un délai d'attente, vous permettant de vous reconnecter et de corriger les paramètres.

Configuration de Base

Tout le comportement du picoZ80 est contrôlé par le fichier config.json sur la carte SD. Ce qui suit est une configuration minimale fonctionnelle pour un Sharp MZ-700. Consultez le Guide Technique — Référence de Configuration pour une description complète de toutes les options.
{
  "esp32": {
    "core": {
      "device": "Z80",
      "mode":   0
    },
    "wifi": {
      "override":  1,
      "wifimode":  "client",
      "ssid":      "YourNetwork",
      "password":  "YourPassword",
      "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
    },
    "z80": [
      {
        "memory": [
          {
            "enable":   1,
            "addr":     "0x0000",
            "size":     "0x1000",
            "type":     "ROM",
            "bank":     0,
            "tcycwait": 0,
            "tcycsync": 0,
            "task":     "",
            "file":     "/ROM/mz700.rom",
            "fileofs":  0
          },
          {
            "enable":   1,
            "addr":     "0x1000",
            "size":     "0xCFFF",
            "type":     "RAM",
            "bank":     0,
            "tcycwait": 0,
            "tcycsync": 0,
            "task":     "",
            "file":     "",
            "fileofs":  0
          },
          {
            "enable":   1,
            "addr":     "0xD000",
            "size":     "0x3000",
            "type":     "PHYSICAL_VRAM",
            "bank":     0,
            "tcycwait": 2,
            "tcycsync": 1,
            "task":     "",
            "file":     "",
            "fileofs":  0
          }
        ],
        "io":      [],
        "drivers": []
      }
    ]
  }
}
Cet exemple mappe :
  • 0x0000 – 0x0FFF — 4 Ko de ROM chargée depuis /ROM/mz700.rom sur la carte SD dans la banque PSRAM 0.
  • 0x1000 – 0xCFFF — 48 Ko de RAM en banque PSRAM 0 (lecture/écriture, zéro état d'attente).
  • 0xD000 – 0xFFFF — 12 Ko transmis au matériel physique hôte (VRAM et registres d'E/S), avec 2 états d'attente et synchronisation T1 activée.

Configuration du Serveur de Fichiers Réseau

Le picoZ80 peut charger, sauvegarder et lister des programmes BASIC sur le réseau en utilisant le préfixe de périphérique NETx: dans Sharp MZ BASIC. Cela nécessite trois composants : l'interface virtuelle Celestite (configurée dans le JSON de la personnalité), le picoZ80 connecté au même réseau que le PC (via WiFi ou USB NCM), et le serveur de fichiers Python netfs.py en cours d'exécution sur le PC.

Prérequis
  • Python 3.6 ou ultérieur installé sur le PC.
  • La personnalité du picoZ80 doit inclure l'interface Celestite dans la configuration des pilotes de son config.json.
  • L'interface Celestite doit avoir le paramètre ip défini sur l'adresse IP du PC et le port de netfs.py dans config.json.
  • Le picoZ80 et le PC doivent être sur le même réseau (mode client WiFi ou USB NCM).
  • Un répertoire sur le PC contenant les fichiers programmes MZF à servir.

Démarrage du Serveur de Fichiers
Le serveur de fichiers se trouve dans tools/NetFileServer/netfs.py dans le dépôt picoZ80. Démarrez-le depuis un terminal :
# Servir les fichiers du répertoire courant sur le port par défaut 6800 :
python3 netfs.py --dir ./mzf_files

# Servir les fichiers sur un port personnalisé avec plusieurs répertoires d'unité :
python3 netfs.py --port 6800 --dir ./games --dir2 ./utilities --dir3 ./basic_programs

# Chaque --dirN correspond à NETx: en BASIC (--dir = NET1:, --dir2 = NET2:, etc.)
Le serveur supporte les unités 1 à 7 (NET1: à NET7:), chacune mappée sur un répertoire séparé du PC. Il écoute les connexions TCP sur le port 6800 (configurable avec --port). Le serveur est multi-thread et gère l'analyse des en-têtes MZF automatiquement.
Formats de fichiers supportés : .mzf, .mzt, .m12 (format bande Sharp MZ avec en-tête de 128 octets) et fichiers binaires bruts (.bin, .rom, .dat).

Utilisation de NETx: en BASIC
Une fois le serveur de fichiers en cours d'exécution sur le PC, utilisez le préfixe de périphérique NETx: dans les commandes BASIC. Le pilote Celestite W5100 du picoZ80 se connecte automatiquement au PC :
DIR NET1:                  Lister les fichiers de l'unité réseau 1 (répertoire PC)
LOAD "NET1:MYPROG"         Charger un programme depuis le PC
SAVE "NET1:MYPROG"         Sauvegarder un programme sur le PC
LOAD "NET3:GAME"           Charger depuis l'unité 3 (mappée sur --dir3)
Dépannage : Si la connexion échoue, vérifiez que l'adresse IP du picoZ80 peut atteindre le PC (consultez la page d'état du Tableau de Bord pour l'IP attribuée), assurez-vous qu'aucun pare-feu ne bloque le port 6800, et confirmez que le serveur de fichiers est en cours d'exécution. Le serveur affiche les informations de connexion dans le terminal lorsqu'un client se connecte.

Pilotes et Interfaces

Le picoZ80 utilise une architecture de pilotes modulaire. Chaque machine hôte est implémentée sous forme d'un pilote de personnalité qui définit la carte mémoire, les gestionnaires d'E/S et les périphériques supportés. Le matériel d'extension est implémenté sous forme de pilotes d'interface qui s'intègrent à une personnalité. Tous les pilotes sont configurés via JSON dans config.json sur la carte SD. Les pilotes de personnalité sont regroupés par fabricant ci-dessous.

Série Sharp MZ / X1

Les machines des séries Sharp MZ et X1 sont les cibles principales du projet picoZ80. Chaque modèle de machine dispose d'un pilote de personnalité dédié avec support de son jeu de périphériques spécifique.

Pilotes de Personnalité Machine
Chaque pilote de personnalité émule un ordinateur Sharp MZ complet. La personnalité est sélectionnée via la page web Sélection de Personnalité ou en modifiant le champ "name" dans le tableau "drivers" de config.json.
Personnalité Pilote Description
MZ-700 MZ700 Sharp MZ-700 avec mémoire à commutation de banques, VRAM, clavier, 8253 PIT. La personnalité par défaut.
MZ-1500 MZ1500 Sur-ensemble du MZ-700 avec Quick Disk intégré, PCG, PSG stéréo (SN76489AN), imprimante Z80 PIO.
MZ-80K MZ80K Sharp MZ-80K avec moniteur SP-1002, 8253 PIT, 8255 PPI, clavier LS367, disquette MZ-80FD native (T3444M) et MEMSW pour CP/M. Peut utiliser l’ensemble complet des cartes d’interface du MZ-80A. CP/M nécessite le mode virtuel.
MZ-800 MZ800 Sharp MZ-800. Double mode (compatible MZ-700 + graphismes GDG natifs 320/640 de large, 4/16 couleurs), PSG SN76489, FDC WD1773 + QuickDisk. Exécute les logiciels MZ-700 et CP/M.
MZ-80A MZ80A Sharp MZ-80A avec moniteur SA-1510, 8253 PIT, 8255 PPI, MEMSW pour CP/M.
MZ-2000 MZ2000 Sharp MZ-2000 avec ROM IPL, commutation de mode BST/NST, overlay VRAM, MB8866 FDC.
MZ-2200 MZ2200 Sharp MZ-2200, variante du MZ-2000 avec la même architecture.
MZ-80B MZ80B Sharp MZ-80B. ROM IPL 2K, modes BST/NST, monochrome avec double pages GRPH, 8253 PIT, 8255 PPI, Z80 PIO.
MZ-2500 MZ2500 Sharp MZ-2500 (SuperMZ). MMU 8 pages, modes de compatibilité MZ-2000/MZ-80B, YM2203 FM+PSG, G-CRTC, MB8876 FDC. Le mode virtuel supporte les logiciels pilotés par interruption, le format disque natif D88 et la suppression des interruptions en une seule fois.

Pilotes d'Interface
Les pilotes d'interface sont ajoutés à une personnalité via le tableau "if" dans la configuration JSON du pilote. Chaque interface peut être indépendamment activée ou désactivée et possède sa propre ROM, image disque et configuration d'E/S.
Interface Nom JSON Ports d’E/S Description
ROM Filing System RFS 0x51–0x53, 0xC1–0xC8, 0xEFF8–0xEFFF Moniteur amélioré avec stockage sur carte SD, démarrage CP/M, commutation de banques ROM.
TranZPUter Filing System TZFS 0x60 (modes mémoire), 0x68 (processeur de service) Moniteur multi-banques + système de fichiers CP/M pour la personnalité MZ-700 (mutuellement exclusif avec RFS). Démarre CP/M ; images de lecteur définies par lecteur via les champs de fichier param.
Floppy Controller (MZ-700) MZ-1E05 0xD8–0xDE FDC basé sur le WD1773. Jusqu’à 4 lecteurs. Images DSK/RAW/D88.
Floppy Controller (MZ-80K) MZ80FIO 0xF8–0xFB, 0xF000–0xF3FF Interface MZ-80FD/MZ-80FIO native pilotant un FDC Toshiba T3444M. Secteurs FM de 128 octets, jusqu’à 4 lecteurs, images DSK étendues CPC.
Floppy Controller (MZ-80A) MZ80AFI 0xD8–0xDE, 0xF3FE–0xF3FF MZ-80A AFI avec basculement A10 basé sur DRQ pour fonctionnement à 2 MHz.
Floppy Controller (MZ-2000) MZ-8BFI ou E0054PA 0xD8–0xDE MB8866 FDC sans ROM pilote (code dans l’IPL). Support D88.
QuickDisk (avec ROM) MZ-1E14 0xF4–0xF7 Contrôleur QD avec ROM BIOS pour MZ-700/MZ-800.
QuickDisk (sans ROM) MZ-1E19 0xF4–0xF7 Contrôleur QD pour MZ-800/MZ-2000/MZ-2200/MZ-2500.
32KB Battery RAM MZ-1R12 0xF8–0xFA SRAM CMOS avec pile, persistée sur carte SD. Jusqu’à 2 instances.
64KB RAM Board MZ-1R18 0xEA–0xEB Extension RAM utilisée comme disque RAMFILE.
Kanji ROM MZ-1R23 0xB8–0xB9 ROM Kanji 128 Ko (16×16 JIS) + ROM Dictionnaire optionnelle de 256 Ko.
640KB EMM MZ-1R37 0xAC–0xAD Gestionnaire de Mémoire Étendue avec espace d’adressage 20 bits.
320KB EMM PIO-3034 configurable EMM IO DATA avec port de données à auto-incrémentation.
Celestite LAN Celestite 0x60–0x6F Ethernet W5100, contrôleur d’interruptions, UFM, MZ-1R12/MZ-1R37 intégrés. IP du serveur configurable via le paramètre JSON ip.
SASI Hard Disk MZ-1E30 0xA4–0xA5, 0xA8–0xA9 Contrôleur de disque dur SASI MZ-1E30 (MZ-2500/MZ-80B). Jusqu’à 4 disques (~21,4 Mo chacun). ROM IPL 32 Ko. Images disque sur carte SD.
RS-232C Serial (BI) MZ-8BIO3 0xB0–0xB3 (configurable) Carte RS-232C bicanal (Z80 SIO émulé). Les canaux A/B sont reliés aux ports série USB CDC 2 et 3. Câblage du connecteur “BI”.
RS-232C Serial (ST) MZ-1E24 0xB0–0xB3 (configurable) Comme le MZ-8BIO3 mais avec le câblage du connecteur Sharp “ST”.

TZFS et CP/M (personnalité MZ-700)
TZFS est un moniteur bas niveau et système de fichiers proposé comme interface sélectionnable sur la personnalité MZ-700 (en pratique utilisé à la place de RFS — activez l'un ou l'autre). Au-delà du moniteur, il démarre et exécute CP/M. TZFS est livré dans la configuration MZ-700 mais est désactivé par défaut : activez-le en réglant "enable": 1 sur le bloc d'interface TZFS dans config.json, ou en l'activant depuis la page Configuration de l'interface web. Sa ROM (roms/tzfs.bin) doit être présente sur la carte SD.
Les images disque CP/M sont configurées par lecteur via le tableau param de l'interface — chaque entrée param[].file indique le chemin d'un fichier image complet sur la carte SD pour ce lecteur. Lorsqu'un lecteur n'a pas d'entrée file explicite, le modèle de chemin de repli CPM/SDC16M/RAW/CPMDSK<nn>.RAW est utilisé. Le picoZ80 n'a pas d'accès SD direct, donc ces secteurs sont lus et écrits via l'ESP32.

Compatibilité Personnalité–Interface
Tous les pilotes d'interface ne sont pas disponibles pour chaque personnalité. Le tableau ci-dessous indique quelles interfaces peuvent être utilisées avec chaque personnalité machine via le tableau "if".
Interface MZ-700 MZ-1500 MZ-80K MZ-800 MZ-80A MZ-2000 MZ-2200 MZ-80B MZ-2500
RFS Oui Oui Oui Oui Oui Oui
TZFS Oui
MZ-1E05 Oui Oui Oui
MZ80FIO Oui Oui
MZ80AFI Oui Oui Oui
MZ-8BFI / E0054PA Oui Oui Oui Oui Oui
MZ-1E14 Oui Oui Oui Oui Oui Oui
MZ-1E19 Oui Oui Oui Oui Oui Oui Oui Oui
MZ-1R12 Oui Oui Oui Oui Oui Oui Oui Oui Oui
MZ-1R18 Oui Oui Oui Oui Oui Oui Oui Oui Oui
MZ-1R23 Oui Oui Oui Oui
MZ-1R37 Oui Oui Oui Oui Oui
PIO-3034 Oui Oui Oui Oui Oui
Celestite Oui Oui Oui Oui
MZ-1E30 Oui Oui
MZ-8BIO3 Oui Oui Oui Oui
MZ-1E24 Oui Oui Oui Oui

Exemple de Configuration JSON
L'exemple suivant montre comment configurer une personnalité MZ-700 avec RFS, un contrôleur de disquette et un lecteur QuickDisk. Ceci est placé dans le tableau "drivers" au sein du bloc z80 de la partition dans config.json :
"drivers": [
  {
    "name": "MZ700",
    "enable": 1,
    "type": "VIRTUAL",
    "if": [
      {
        "name": "RFS",
        "type": "VIRTUAL",
        "enable": 1,
        "rom": [
          {
            "file": "roms/MROM_PICOZ80_256.bin",
            "enable": 1,
            "loadaddr": [
              { "enable": 1, "position": "0x0", "addr": "0x0",
                "bank": 32, "size": "0x80000", "tcycwait": 0, "tcycsync": 0 }
            ]
          },
          {
            "file": "roms/USER_ROM_PICOZ80_256.bin",
            "enable": 1,
            "loadaddr": [
              { "enable": 1, "position": "0x0", "addr": "0x0",
                "bank": 40, "size": "0x80000", "tcycwait": 0, "tcycsync": 0 }
            ]
          }
        ]
      },
      {
        "name": "MZ-1E05",
        "type": "VIRTUAL",
        "enable": 1,
        "param": [
          { "file": "dsk/MZ-2Z009-RFS.dsk", "enable": 1 }
        ]
      },
      {
        "name": "MZ-1E19",
        "type": "VIRTUAL",
        "enable": 1,
        "param": [
          { "file": "qd/BASIC_5Z008A_RFS.qd", "enable": 1 },
          { "file": "qd/BASIC_5Z008B.qd", "enable": 1 }
        ]
      },
      {
        "name": "Celestite",
        "type": "VIRTUAL",
        "enable": 1,
        "param": [
          { "file": "ram/celestite_r12.ram", "enable": 1 },
          { "file": "ram/celestite_r37.ram", "enable": 1 },
          { "ip": "192.168.1.210:6800", "enable": 1 }
        ]
      }
    ]
  }
]
Configuration de l'adresse du serveur de fichiers : Ajoutez une entrée ip au tableau param de l'interface Celestite dans config.json, en spécifiant l'adresse IP du PC et le port de netfs.py :
{ "ip": "192.168.1.210:6800", "enable": 1 }
Configuration du disque dur SASI MZ-1E30 : Ajoutez une interface MZ-1E30 au tableau "if" de la personnalité. L'entrée rom fournit la ROM IPL de 32 Ko, et les entrées param spécifient les images de disque dur (jusqu'à 4) :
{
  "name": "MZ-1E30",
  "type": "VIRTUAL",
  "enable": 1,
  "rom": [{ "file": "roms/MZ-1E30.ROM", "enable": 1 }],
  "param": [
    { "file": "hdd/boot.hdd", "enable": 1 },
    { "file": "hdd/data.hdd", "enable": 1 }
  ]
}
Champs JSON clés :
  • name — nom de la personnalité ou de l'interface (doit correspondre à un pilote compilé).
  • enable — mettre à 1 pour activer, 0 pour ignorer.
  • type"VIRTUAL" (émulé en PSRAM) ou "PHYSICAL" (transmission directe vers le matériel réel).
  • rom — tableau d'images ROM à charger. Chaque entrée a un chemin file (relatif à la racine de la carte SD) et un tableau loadaddr spécifiant où placer les données (adresse Z80, banque PSRAM, taille).
  • param — tableau de fichiers images disque/RAM. param[0].file est le premier disque, param[1].file le second, etc.
  • addrmap — remappage d'adresses optionnel (source vers destination).
  • iomap — remappage de ports d'E/S optionnel.
Tous les chemins de fichiers sont relatifs au répertoire racine de la carte SD (par ex. "roms/MROM_PICOZ80_256.bin").

Série Amstrad PCW

Le picoZ80 supporte l'Amstrad PCW-9512 et le Tatung Einstein TC-01 en plus de la série Sharp MZ.

Pilotes de Personnalité Machine
Chaque pilote de personnalité Amstrad émule une machine Amstrad complète. La personnalité est sélectionnée via la page web Sélection de Personnalité ou en modifiant le champ "name" dans le tableau "drivers" de config.json.
Personnalité Pilote Description
PCW-9512 PCW9512 Amstrad PCW-9512. Z80A @ 4MHz, 512 Ko de RAM avec commutation de pages de 4 banques de 16 Ko (ports F0-F3), gate array (ASIC) pour la vidéo/horloge système/routage FDC/contrôle moteur, NEC uPD765 FDC avec support du format CPC DSK, contrôleur d’imprimante à marguerite 8041. Modes virtuel et physique supportés.
Einstein TC-01 EinsteinTC01 Tatung Einstein TC-01. Z80A @ 4MHz, 64 Ko de RAM + 8 Ko de ROM commutable, WD1770 FDC, TMS9129 VDP, AY-3-8910 PSG, Z80 CTC, Z80 PIO. Modes virtuel et physique supportés.
La personnalité PCW-9512 inclut une émulation complète de la séquence de démarrage : le flux d'octets du gate array charge le BIOS, qui charge ensuite CP/M depuis le disque. Les commandes du gate array comprennent la fin du démarrage, le redémarrage, le routage des interruptions FDC (NMI/INT/ignore), le terminal count et l'activation/désactivation du moteur.
Création d'images disque : Le picoZ80 peut créer des images de disquettes physiques lorsqu'il fonctionne avec la personnalité PCW-9512. La commande ICE dskimage injecte du code Z80 qui lit toutes les pistes via le FDC hôte et enregistre le résultat sous forme de fichier CPC DSK sur la carte SD. Voir la Référence des Commandes ICE pour les détails d'utilisation.

Série Tatung Einstein

Le picoZ80 supporte le Tatung Einstein TC-01 — un ordinateur domestique basé sur le Z80A avec lecteur de disquette intégré.
Pilotes de Personnalité Machine
Chaque pilote de personnalité Tatung émule une machine Tatung complète. La personnalité est sélectionnée via la page web Sélection de Personnalité ou en modifiant le champ "name" dans le tableau "drivers" de config.json.
Personnalité Pilote Description
Einstein TC-01 EinsteinTC01 Tatung Einstein TC-01. Z80A @ 4MHz, 64 Ko de RAM + 8 Ko de ROM commutable (X-TAL MOS), basculement ROM/RAM via le port 0x24 (tout accès bascule ; les écritures vont toujours en RAM), WD1770 FDC avec support de disque virtuel (40 pistes, 1 tête, 10 secteurs, 512 octets — disques de 200 Ko), TMS9129 VDP (processeur d’affichage vidéo) avec application d’un délai inter-accès (~2us), AY-3-8910 PSG (son 3 canaux) aux ports 0x02-0x03, Z80 CTC (4 canaux) aux ports 0x28-0x2B, Z80 PIO aux ports 0x30-0x33, interface clavier au port 0x20. Création d’images disque physique : lecture de disquette physique vers DSK, écriture de DSK vers disquette physique. Modes virtuel et physique supportés.
Création d'images disque : La personnalité Einstein TC-01 supporte la création d'images de disquettes physiques via la commande ICE dskimage avec les sous-commandes read et write. dskimage read crée une image d'une disquette physique vers un fichier DSK sur la carte SD, tandis que dskimage write écrit un fichier DSK depuis la carte SD vers une disquette physique.

Autres Machines

Le support de machines Z80 supplémentaires est prévu. Chaque nouvelle machine suivra la même architecture de pilote de personnalité — un pilote de personnalité dédié implémentant la carte mémoire, les E/S et les périphériques de la machine, avec des pilotes d'interface pour le matériel d'extension. Consultez le dépôt du projet pour la liste à jour des machines supportées.
OpenZ80 — pour votre propre carte ou une machine non prise en charge. Si vous construisez votre propre carte Z80, ou si vous disposez d'un ordinateur Z80 qui n'a pas encore de personnalité picoZ80 dédiée, utilisez le build de firmware OpenZ80. Son principal attrait est qu'il vous permet d'ajouter des cartes d'interface virtuelles empruntées à d'autres machines Sharp, Amstrad et Tatung sur votre ordinateur Z80 sur mesure ou inconnu, afin que vous puissiez écrire de nouveaux logiciels pour ces cartes — ou adapter des logiciels existants pour qu'ils fonctionnent sur votre machine. OpenZ80 se comporte comme un Z80 ordinaire : en mode physique, il transmet l'ensemble de l'espace mémoire et d'E/S 64K à votre carte, et en mode virtuel, il présente une RAM 64K plate dans laquelle vous pouvez charger vos propres images ROM. Il n'expose que les cartes d'interface indépendantes de la machine (les cartes mémoire MZ-1R12/1R18/1R23/1R37, la carte parallèle PIO-3034, les cartes série RS-232C MZ-8BIO3 / MZ-1E24, l'interface disquette MZ-1E05 et la carte LAN Celestite), et chacune d'elles peut voir son Base I/O Port relocalisé pour correspondre à votre carte sur la page Configuration GUI. Pour adapter l'une des machines existantes, les développeurs peuvent partir de n'importe lequel des pilotes fournis et de sa source ROM de moniteur / IPL / BIOS (fournie en assembleur Z80 dans les répertoires asm/ des projets RFS et TZFS) comme point de départ — voir le Guide du Développeur.

ICE (Shell de Débogage)

Le picoZ80 inclut un shell de débogage interactif intégré (ICE — In-Circuit Emulator) pour l'inspection et le contrôle en temps réel de l'émulation du CPU Z80.
Le shell de débogage ICE est inclus dans la variante firmware DBGSH. Si vous utilisez le firmware standard, le shell de débogage n'est pas disponible. Flashez la variante DBGSH pour activer les fonctionnalités ICE.
Connexion : Le shell de débogage est disponible sur le second port série USB. Lorsque le picoZ80 est connecté via USB, deux ports série apparaissent sur l'ordinateur hôte — le premier est la sortie du journal de débogage standard, le second est le shell de débogage. Ouvrez-le avec n'importe quel émulateur de terminal à 115200 baud, 8N1. L'invite dbg> apparaît une fois connecté.
Fonctionnalités principales :
  • Inspection des registresregs affiche tous les registres Z80, les drapeaux et le compteur de cycles.
  • Dump mémoiredm p 0000 100 affiche 256 octets à partir de l'adresse 0x0000 via le bus physique ; dm v 0000 100 lit directement la PSRAM virtuelle.
  • Points d'arrêtbp E800 place un point d'arrêt à 0xE800. Jusqu'à 8 points d'arrêt. bl les liste, bc * les efface tous.
  • Exécution pas à pashold met le CPU en pause, puis step exécute une instruction en montrant l'état des registres avant/après.
  • Trace d'exécutiontrace on enregistre chaque instruction exécutée. trace dump 20 affiche les 20 dernières avec le désassemblage.
  • Désassemblagedis v E800 20 désassemble 32 instructions à partir de 0xE800.
  • Accès E/Sin D8 lit le port 0xD8 ; out D8 03 écrit 0x03 sur le port 0xD8.
  • Informations systèmestatus affiche la fréquence CPU, l'horloge PSRAM, la vitesse d'émulation et le temps de fonctionnement. drivers liste les pilotes actifs.
Tapez help à l'invite pour un résumé rapide.

Référence des Commandes
L'ensemble complet des commandes ICE est listé ci-dessous. Toutes les valeurs d'adresses et de données sont saisies en hexadécimal sans préfixe 0x.
Commande Paramètres Description
help Afficher un résumé de toutes les commandes disponibles.
regs Afficher l’ensemble complet des registres Z80 : registres principaux (AF, BC, DE, HL), registres alternatifs (AF’, BC’, DE’, HL’), registres d’index (IX, IY), pointeur de pile et compteur programme (SP, PC), état des interruptions (I, R, IM, IFF1, IFF2), drapeaux décodés (S, Z, H, P/V, N, C), état de la ligne HALT, MEMPTR et le compteur cumulatif de T-cycles.
dm <p|f|v|r> <addr> [len] Dump mémoire en hexadécimal et ASCII. Quatre modes : p (physique) lit via le bus Z80 en déclenchant le matériel réel ; f (fetch) lit en utilisant les cycles de fetch M1 ; v (virtuel) lit la PSRAM directement sans activité de bus ; r (RP2350) lit l’espace d’adressage propre du microcontrôleur (Flash, SRAM, périphériques). addr est l’adresse de début, len est le nombre d’octets (256 par défaut).
search [p|v] <start> <end> <hex..>|"text" Rechercher en mémoire un motif d’octets ou une chaîne de texte ASCII. p = bus physique, v = PSRAM virtuelle, omettre pour le mode mappé (suit la carte mémoire). Spécifiez le motif en octets hexadécimaux (par ex. ED 4D 00) ou une chaîne ASCII entre guillemets (par ex. "HELLO"). Les correspondances sont affichées avec 8 octets de contexte avant et après. Mise en pause automatique du CPU pour les accès physiques/mappés. Longueur de motif jusqu’à 32 octets.
cmp [f] <phys> <virt> <len> Comparer la mémoire du bus physique avec la PSRAM virtuelle. L’option f utilise des cycles de fetch (M1) au lieu de cycles de lecture. Signale les différences avec les adresses et valeurs.
dis [p|v] [addr] [count] Désassembler du code machine Z80. p lit les opcodes depuis le bus physique, v depuis la PSRAM virtuelle (par défaut). addr est par défaut le PC actuel. count est le nombre d’instructions (16 par défaut). Le PC actuel est marqué avec >.
asm [addr] Entrer dans l’assembleur Z80 interactif à l’adresse addr (par défaut : PC actuel). Tapez les mnémoniques Z80 une par ligne ; les octets assemblés sont écrits en PSRAM virtuelle et l’adresse avance. Supporte les directives db et dw/defw. Entrez une ligne vide ou . pour quitter.
memmap [block] Afficher la table de pointeurs de blocs mémoire SRAM. Chaque entrée montre le numéro de bloc, la plage d’adresses Z80, le type de mémoire (PHYSICAL, RAM, ROM, FUNC), le numéro de banque et le décalage PSRAM. Si block est donné, ne montrer que ce bloc de 512 octets.
memptr [addr] Afficher les tables memPtr/memioPtr de la PSRAM pour l’adresse donnée, montrant le pointeur de fonction du gestionnaire et les attributs.
iomap [port] Afficher la table des gestionnaires de ports d’E/S. Chaque entrée montre l’adresse du port, la fonction du gestionnaire et la direction (lecture/écriture/les deux). Si port est donné, ne montrer que ce port.
status Vue d’ensemble de l’état système : fréquence CPU du RP2350, horloge SPI de la PSRAM, horloge Z80 hôte, ratio de vitesse d’émulation, SRAM libre et temps de fonctionnement.
ver Afficher la version du firmware, la date de compilation, la disposition des partitions Flash (adresse, taille, somme de contrôle, drapeau actif), l’auteur et la licence.
drivers Lister tous les pilotes de personnalité machine actifs et leurs sous-interfaces, montrant l’état d’initialisation.
hold Mettre en pause l’émulation du CPU Z80. Le cœur 1 termine l’instruction en cours et arrête le fetch. Le shell attend la confirmation de la mise en pause avant de rendre la main. Requis avant d’utiliser out ou d’autres commandes qui modifient l’état en cours d’exécution.
release Reprendre l’émulation du CPU Z80 depuis le point où elle a été suspendue. Les points d’arrêt restent actifs.
go Continuer l’exécution (identique à release). Si un point d’arrêt est atteint par la suite, le CPU se mettra automatiquement en pause.
cont Alias de go. Continuer l’exécution depuis le point de pause actuel. Les points d’arrêt restent actifs.
step [n] Exécuter une instruction pas à pas (ou n instructions). Pour chaque pas, le shell affiche l’état des registres avant l’exécution, l’instruction désassemblée avec les octets hexadécimaux, et l’état des registres après l’exécution. Le CPU doit être en pause au préalable. Si un point d’arrêt est atteint pendant un pas à pas multiple, l’exécution s’arrête prématurément.
bp <addr> Placer un point d’arrêt à l’adresse Z80 donnée. Jusqu’à 8 points d’arrêt peuvent être actifs simultanément. Lorsque le PC correspond à une adresse de point d’arrêt lors du fetch d’opcode, le CPU est automatiquement mis en pause et l’événement est signalé. Les adresses en double sont rejetées.
bc <n|*> Effacer l’emplacement de point d’arrêt n (0–7) ou tous les points d’arrêt (*).
bl Lister tous les points d’arrêt actifs montrant le numéro d’emplacement et l’adresse.
wm [p|v] <addr> <byte> [byte]... Écrire un ou plusieurs octets en mémoire. p = bus Z80 physique, v = PSRAM virtuelle, omettre pour le mode automatique (suit la carte mémoire). Plusieurs octets peuvent être spécifiés séparés par des espaces. Mise en pause automatique du CPU pour les écritures physiques/mappées.
fill [p|v] <addr> <len> [w|d] <val> Remplir une région mémoire avec une valeur constante. p = physique, v = virtuel, omettre pour le mode automatique. 8 bits par défaut ; w = 16 bits, d = 32 bits (little-endian). Mise en pause automatique du CPU si nécessaire.
copy <pv|fp|vp> <src> <len> <dst> Copier la mémoire entre physique et virtuel. pv = lecture physique vers virtuel, fp = fetch physique vers virtuel, vp = virtuel vers écriture physique. Mise en pause automatique du CPU.
memtest <addr> <len> [pattern] Tester la mémoire physique en trois passes : écriture+lecture, écriture+fetch, entrelacé. Motif par défaut : octets croissants. Signale les erreurs par passe.
in <port> Lire un port d’E/S Z80. Génère un cycle de bus IORQ+RD réel et affiche l’octet lu.
out <port> <byte> Écrire un octet sur un port d’E/S Z80. Le CPU doit être en pause au préalable. Génère un cycle de bus IORQ+WR réel.
trace <on|off|dump [n]|clear|rt|byte ...> Contrôler la trace d’exécution. on active l’enregistrement de chaque instruction exécutée dans un tampon circulaire de 512 entrées (PC, opcode, drapeaux). off désactive l’enregistrement. dump affiche les n dernières entrées (par défaut : toutes) avec le désassemblage et les drapeaux décodés. clear réinitialise le tampon. rt active la sortie de trace en temps réel vers la console de débogage pendant l’exécution des instructions. byte active le traçage au niveau octet des transactions mémoire/E/S.
verify <on|off> Activer/désactiver la vérification complète du fetch d’opcode. Lorsqu’activée, chaque fetch est vérifié par rapport à readPhysicalMem (réduction de vitesse de 50%). Lorsque désactivée (par défaut), ne vérifie que les opcodes 0x00/0xFF.
fwait <0-4> Forcer des états d’attente supplémentaires sur les cycles M1 (fetch d’opcode). <n> est 0–4 T-states additionnels (0 = désactivé, par défaut). Utile pour déboguer du code qui se comporte différemment avec des états d’attente — certains périphériques ou dispositifs mémoire nécessitent des marges de temporisation spécifiques. Sans paramètre, affiche le réglage actuel.
iowait <0-8> Forcer des états d’attente supplémentaires sur les cycles de lecture et d’écriture E/S. <n> est 0–8 T-states additionnels (0 = désactivé, par défaut). Étire les cycles d’E/S pour diagnostiquer les périphériques à temps de réponse lent. Sans paramètre, affiche le réglage actuel.
corrupt [clear] Afficher les corruptions de fetch détectées (PC, opcode récupéré, opcode vérifié). clear réinitialise le journal.
fdctrace <on|off|dump> Activer, désactiver ou afficher la trace d’E/S FDC. on/off contrôle l’enregistrement des accès aux registres du FDC WD1773 dans un tampon circulaire de 64 entrées. dump affiche les 64 dernières opérations, montrant le nom du registre (Status/Command, Track, Sector, Data, DriveSel, SideSel, DDEN), la direction lecture ou écriture, la valeur de l’octet et l’état du FDC.
qdtrace <on|off|dump> Activer, désactiver ou afficher la trace d’E/S Quick Disk. on/off contrôle l’enregistrement des accès aux registres SIO du QD dans un tampon circulaire de 64 entrées. dump affiche les 64 dernières opérations, montrant le port, la direction, la valeur de l’octet et la position sur la bande (décalage en octets).
piodbg [clear] Afficher les diagnostics matériels PIO du RP2350 pour les trois blocs PIO (PIO 0, PIO 1, PIO 2). Montre les drapeaux d’erreur persistants FDEBUG (blocage, underflow RX, overflow TX), l’état FSTAT, les niveaux de remplissage FIFO, les compteurs programme par machine d’état, le masque d’activation de sortie GPIO et les niveaux des broches GPIO. clear réinitialise les drapeaux persistants FDEBUG. Utile pour diagnostiquer les blocages de machine d’état PIO ou les contentions de bus.
load <p|v> <file> <addr> [len] [ofs] Charger un fichier depuis la carte SD de l’ESP32 en mémoire Z80. p = écriture sur le bus physique, v = écriture en PSRAM virtuelle banque 0. file est relatif à /sdcard/ sur l’ESP32. addr est l’adresse de début Z80. Si len est omis, le fichier entier est chargé (jusqu’à 64 Ko) ; si spécifié, charge ce nombre d’octets (max 1 Mo). L’option ofs est le décalage dans le fichier à partir duquel commencer la lecture. Mise en pause automatique du CPU pour les écritures physiques. Utilise la banque PSRAM 63 comme tampon de travail.
save <p|pf|v> <file> <addr> <len> Sauvegarder la mémoire Z80 dans un fichier sur la carte SD de l’ESP32. p = lecture via le bus physique, pf = lecture via le fetch physique (cycles M1), v = lecture depuis la PSRAM virtuelle banque 0. file est relatif à /sdcard/. addr est l’adresse de début Z80, len est le nombre d’octets à sauvegarder (max 64 Ko). Mise en pause automatique du CPU pour les lectures physiques. Effectue un rafraîchissement DRAM périodique pendant les lectures physiques.
dir [path] Lister les fichiers sur la carte SD de l’ESP32. Le chemin optionnel est relatif à /sdcard/. Affiche les noms de fichiers et les tailles.
echo [on|off] Activer/désactiver ou définir l’écho des caractères. Lorsqu’activé (par défaut), les caractères tapés sont renvoyés vers le terminal.
reset Forcer une réinitialisation immédiate du CPU Z80. L’émulation redémarre depuis le vecteur de reset (typiquement 0x0000).
set <reg|flags|memmap|memptr|iomap> <idx> <val> Modifier un registre Z80, les drapeaux, la carte mémoire, le memPtr PSRAM ou une entrée de la carte de ports d’E/S en cours d’exécution. reg définit un registre Z80, flags définit le registre de drapeaux, memmap/memptr/iomap modifient la configuration mémoire ou E/S. idx est le nom du registre ou l’index de la table (décimal ou hexadécimal), val est la nouvelle valeur. Cela permet de modifier à chaud les registres et la configuration mémoire/E/S sans recharger le fichier config.json.
hist [n] Afficher le tampon d’historique des commandes. Montre les n dernières commandes (par défaut : toutes les entrées, jusqu’à 16). L’historique est préservé entre les cycles d’alimentation via le stockage NVS de l’ESP32.
savehst Forcer la sauvegarde immédiate de l’historique des commandes actuel dans le stockage NVS de l’ESP32. L’historique est normalement sauvegardé automatiquement lors d’un arrêt propre ; cette commande force une sauvegarde immédiate.
ipl Effectuer une réinitialisation IPL (mode BST) en basculant le bit 3 du Port C du PPI 8255. Réinitialise la machine en mode de démarrage sans réinitialisation complète du Z80. Utile pour les machines MZ-80B, MZ-2000 et MZ-2500 qui distinguent les modes BST (boot) et NST (normal).
mmutrace Afficher les informations de trace spécifiques à la machine telles que l’état du MMU et les instantanés des registres d’E/S. La sortie varie selon la personnalité — chaque pilote enregistre son propre gestionnaire de trace, de sorte que les informations affichées dépendent de la personnalité machine active.
intcount Afficher le compteur d’acquittement d’interruption et l’état actuel des interruptions. Utile pour déboguer les logiciels pilotés par interruption — affiche le nombre de cycles d’acquittement d’interruption survenus et si des interruptions sont actuellement en attente ou activées.
psync [start end] Synchroniser la mémoire physique vers la PSRAM en lisant le bus physique et en écrivant en mémoire virtuelle. Les paramètres optionnels start et end spécifient une plage d’adresses ; s’ils sont omis, l’espace d’adressage complet est synchronisé. Utile pour les diagnostics après des opérations DMA ou lorsque les mémoires physique et virtuelle ont pu diverger.
dskimage read <filename> [cylinders] [heads] / write <filename> Créer une image d’une disquette physique vers un fichier DSK sur la carte SD (read), ou écrire un fichier DSK depuis la carte SD vers une disquette physique (write). dskimage <filename> par défaut effectue une lecture (rétrocompatible). filename est le chemin du fichier DSK relatif à /sdcard/. Si cylinders et heads sont omis pour la lecture, la géométrie est auto-détectée. Le CPU doit être en pause au préalable. La progression est signalée pendant la création de l’image.
busdiag Afficher les diagnostics du bus incluant l’état PIO, les niveaux de signaux et l’état de contention du bus. Utile pour diagnostiquer les problèmes électriques avec la connexion au bus hôte.
fdcimage Afficher l’état et la progression de la création d’image FDC.
fdcdiag Afficher les informations de diagnostic FDC (état du contrôleur, dump des registres).
gadiag Afficher les informations de diagnostic du gate array (état des commandes, routage des interruptions).
Flux de travail de débogage typique :
  1. Connecter un terminal au second port série USB (115200, 8N1).
  2. hold — mettre le CPU en pause.
  3. regs — inspecter l'état actuel des registres.
  4. dis v — désassembler le code au PC actuel.
  5. bp E800 — placer un point d'arrêt.
  6. go — reprendre. Le CPU s'arrêtera lorsqu'il atteindra 0xE800.
  7. step 5 — exécuter 5 instructions pas à pas depuis le point d'arrêt.
  8. dm v D000 80 — inspecter le contenu de la VRAM.
  9. trace on / go / trace dump 50 — tracer et examiner l'historique d'exécution.

Dépannage

L'ordinateur hôte ne démarre pas

  • Vérifier l'orientation — assurez-vous que la broche 1 du picoZ80 est alignée avec la broche 1 du socket. Insérer la carte à l'envers endommagera à la fois le picoZ80 et l'ordinateur hôte.
  • Vérifier l'insertion — retirez le picoZ80 et réinsérez-le, en vous assurant que les 40 broches sont complètement enfoncées et qu'aucune n'est pliée sous la carte.
  • Vérifier la carte SD — si config.json est absent ou mal formé, le firmware tentera d'utiliser la configuration Flash précédemment mise en cache. Si aucune configuration valide n'existe, le RP2350 n'initialisera pas la carte mémoire et l'hôte verra un bus ouvert.
  • Confirmer que le firmware est flashé — essayez de connecter le picoZ80 via USB (sans l'insérer dans l'hôte) et vérifiez que la carte s'énumère sur le PC.
  • Vérifier l'alimentation de l'hôte — le picoZ80 peut consommer jusqu'à 400mA sur le rail 5V. Certains ordinateurs vintage ont des alimentations marginales ; vérifiez la tension du rail 5V en charge avec un multimètre.

Impossible de se connecter à l'interface web

  • Vérifier le mode WiFi — au premier démarrage ou après une réinitialisation d'usine, l'ESP32 démarre en mode AP. Connectez-vous d'abord au réseau WiFi picoZ80, puis naviguez vers http://192.168.4.1.
  • Vérifier l'adresse IP configurée — si le mode client est configuré avec une IP fixe, vérifiez que l'IP correspond au sous-réseau de votre réseau.
  • Vérifier que la carte SD est présente — les ressources web dans webfs/ sur la carte SD sont nécessaires. Sans la carte SD, le serveur web ne peut servir aucune page.
  • Vérifier le répertoire webfs — confirmez que le répertoire webfs/ existe sur la carte SD et contient les fichiers HTML/CSS/JS du dépôt du projet.
  • Réinitialisation d'usine du WiFi — si les identifiants sont perdus, reflashez le firmware ESP32 pour effacer les paramètres NVS et recommencer de zéro.

Carte SD non reconnue

  • Assurez-vous que la carte SD est formatée en FAT32. NTFS, exFAT et FAT16 ne sont pas supportés.
  • Essayez une autre carte SD — certaines cartes de haute capacité ou haute vitesse peuvent avoir des problèmes de compatibilité avec l'interface SD SPI de l'ESP32.
  • Les cartes jusqu'à 32 Go sont bien supportées. Les cartes très grandes (>32 Go) peuvent nécessiter un formatage spécial.
  • Réinsérez la carte SD — retirez-la et réinsérez-la pour assurer un bon contact.

Les images ROM ne se chargent pas

  • Vérifiez que le chemin du fichier dans config.json correspond exactement à l'emplacement du fichier sur la carte SD (les chemins sont sensibles à la casse).
  • Confirmez que le fichier image ROM est présent sur la carte SD — utilisez le Gestionnaire de Fichiers pour naviguer vers l'emplacement attendu.
  • Vérifiez la valeur de fileofs — un décalage incorrect chargera des données erronées dans la banque ROM.
  • Vérifiez que le champ size dans l'entrée de la carte mémoire n'est pas plus grand que le fichier image ROM. Les mappages surdimensionnés seront complétés par des données indéfinies.

La carte se réinitialise ou redémarre de manière inattendue

  • Le picoZ80 dispose d'un minuteur watchdog matériel qui réinitialise automatiquement le RP2350 si le firmware se bloque pendant le démarrage ou le fonctionnement normal. Si la carte redémarre de manière répétée, le watchdog se déclenche parce qu'une étape de démarrage ne se termine pas dans les temps.
  • Vérifier la carte SD — un fichier config.json manquant ou corrompu peut provoquer le blocage de la séquence de démarrage pendant l'analyse de la configuration.
  • Vérifier les paramètres WiFi — si l'ESP32 ne peut pas établir de connexion, le handshake SPI entre le RP2350 et l'ESP32 peut expirer, déclenchant le watchdog.
  • Utiliser le débogage SWD — connectez une sonde de débogage et inspectez les registres scratch du watchdog (watchdog_hw->scratch[5] à scratch[7]). Le code de progression du démarrage dans scratch[6] indique quelle étape le firmware a atteinte avant le déclenchement du watchdog, et scratch[0–3] contiennent un historique des quatre dernières tentatives de réinitialisation.
  • Vérifier le journal persistant — le firmware écrit les messages critiques de démarrage dans les 4 derniers Ko de la PSRAM en utilisant plogf(). Ces messages survivent à la réinitialisation du watchdog et sont affichés sur la console de débogage lors du prochain démarrage réussi, révélant ce qui s'est passé avant la réinitialisation.

La mise à jour OTA échoue

  • Assurez-vous de téléverser un fichier .bin (pas un .uf2) pour les mises à jour OTA du RP2350.
  • Assurez-vous de téléverser vers l'emplacement inactif pour préserver le firmware fonctionnel.
  • Si la mise à jour OTA échoue ou aboutit à une partition non démarrable, le bootloader conservera l'emplacement actif précédent en fonctionnement — répétez le processus de téléversement.
  • Pour les échecs OTA de l'ESP32, reflashez via esptool en utilisant la connexion USB du connecteur debug.

Sites de Référence

Ressource Lien
Page du projet picoZ80 /picoz80/
picoZ80 Guide Technique /picoz80-technicalguide/
Page du projet pico6502 /pico6502/
Fiche technique RP2350 datasheets.raspberrypi.com
Documentation du Pico SDK raspberrypi.github.io/pico-sdk-doxygen
Référence technique ESP32-S3 docs.espressif.com
X (Twitter) aperçu du projet engineerswork1

Avis Réglementaire FCC / RED

La carte picoZ80 n'a pas été soumise à la certification FCC (États-Unis) ou RED (UE) pour émetteur intentionnel. Telle que livrée, la carte doit avoir les composants du réseau d'adaptation d'antenne WiFi non peuplés et le firmware ESP32 compilé avec la configuration NCM Only. Dans cet état, aucune énergie radiofréquence n'est émise et la carte ne relève pas de la réglementation sur les émetteurs intentionnels.
Les utilisateurs finaux souhaitant utiliser le WiFi peuvent peupler le réseau d'adaptation d'antenne, compiler la variante firmware WiFi et opérer sous l'exemption hobbyiste/expérimentale applicable dans leur juridiction. Toute partie souhaitant vendre la carte commercialement avec le WiFi activé doit d'abord obtenir la certification FCC et/ou RED pour l'assemblage complet.