tranZPUter FusionX Guide Technique
Presentation
Le tranZPUterFusionX est construit autour de deux composants silicium principaux : un System-On-Module (SOM) SigmaStar SSD202 abritant des coeurs doubles Cortex-A7 fonctionnant a 1,2 GHz, et un CPLD Altera MAX7000AE (EPM7512) qui fournit une interface de bus Z80 precise au cycle pres vers la machine hote.
La repartition fondamentale des responsabilites est claire : le CPLD possede le bus Z80 et assure un comportement electrique et de synchronisation correct envers l'hote, tandis que le SOM gere tout le travail d'emulation dans un module noyau Linux dedie fonctionnant sur un coeur CPU isole. Les deux composants communiquent via un lien SPI a 50 MHz (SOM vers CPLD, chemin d'ecriture/controle) et un bus GPIO direct (CPLD vers SOM, chemin de lecture/capture d'adresse).
Cette architecture offre un debit equivalent Z80 allant jusqu'a ~500 MHz — bien au-dela de tout vrai Z80 — tout en presentant une interface Z80 parfaitement orthodoxe a la machine hote. Les cellules de configuration basees sur EEPROM du CPLD conservent la logique programmee indefiniment sans batterie ni stockage non volatil externe requis.
Architecture materielle
Diagramme de blocs
┌────────────────────────────────────────────────────────────────────────┐ │ tranZPUter FusionX Board │ │ │ │ ┌─────────────────────────────────────────────────┐ │ │ │ SigmaStar SSD202 SOM (Infinity2M) │ │ │ │ ┌─────────┐ ┌─────────┐ 128MB DRAM │ │ │ │ │ CPU0 │ │ CPU1 │ 256MB NAND Flash │ │ │ │ │ Linux │ │ Z80 Emu │ Integrated WiFi │ │ │ │ │ 1.2GHz │ │ 1.2GHz │ (SSW101B 2.4GHz) │ │ │ │ └─────────┘ └─────────┘ │ │ │ │ GPIO (read path) SPI (write path, 50MHz) │ │ │ └──────────────┬────────────────┬──────────────────┘ │ │ │ GPIO │ SPI │ │ ┌──────────────▼────────────────▼──────────────────┐ │ │ │ Altera MAX7000AE CPLD (EPM7512) │ │ │ │ Z80 Bus FSM ◄─────────────────────────────────►│◄──[ 50MHz OSC ] │ │ │ SPI decoder │ │ │ │ │ Video/Audio │ │ │ │ └───────────────┬───────────────────────────────────┘ │ │ │ DIP-40 Z80 bus │ │ ┌───────────────▼───────────────┐ ┌─────────────────────────┐ │ │ │ Z80 DIP-40 host socket │ │ Video/Audio outputs │ │ │ │ A0-A15, D0-D7, MREQ, │ │ GM7123 RGB DAC (30-bit) │ │ │ │ IORQ, RD, WR, HALT, │ │ TLC5602C Contrast DAC │ │ │ │ M1, RFSH, NMI, INT, │ │ TLC5602C Audio DAC │ │ │ │ WAIT, RESET, CLK, BUSRQ │ └─────────────────────────┘ │ │ └───────────────────────────────┘ │ │ [ USB-serial CH340E ]──USB──►[ Linux console /dev/ttyUSB0 ] │ └────────────────────────────────────────────────────────────────────────┘
Composants cles
Le tableau ci-dessous liste les composants principaux de la carte principale du tranZPUterFusionX.
| Composant | Reference | Specification |
|---|---|---|
| SSD202 SOM | SigmaStar SSD202 (Infinity2M) | Double Cortex-A7 a 1,2 GHz, 128 Mo DRAM, 256 Mo NAND, WiFi integre |
| CPLD | Altera EPM7512AETC144-10 | MAX7000AE, 512 macrocellules, TQFP 144 broches, entrees tolerantes 5V |
| DRAM | Sur le SOM | 128 Mo DDR2 |
| NAND Flash | Sur le SOM | 256 Mo SPI NAND |
| WiFi | SSW101B | IEEE 802.11 b/g/n, 2,4 GHz, portee 500 m |
| DAC Video | GM7123 (3,3V) | DAC RGB 30 bits (equivalent ADV7123) ; 10 bits par canal de couleur |
| DAC Contraste | TLC5602C | DAC 8 bits ; pilote un signal de contraste 4V-5V pour CRT monochrome Sharp MZ |
| DAC Audio | TLC5602C | DAC 8 bits ; sortie stereo 48 kHz |
| CI alimentation | Regulateur embarque | 5V vers 3,3V pour les rails SOM et CPLD |
| Commutateur alimentation USB | Embarque | VBUS USB commutable pour le port USB hote |
| Convertisseur USB-serie | CH340E | 115200 bauds 8N1 ; expose la console Linux comme /dev/ttyUSB0 |
| Oscillateur 50 MHz | Oscillateur CMS en boitier | Horloge maitre CPLD ; utilisee pour la synchronisation de la FSM du bus Z80 |
Role du CPLD
Le CPLD (EPM7512AETC144-10, 512 macrocellules, TQFP 144 broches) est la pierre angulaire de la conception FusionX. Il remplit cinq fonctions distinctes :
- Conversion de tension — Le GPIO du SOM fonctionne a 3,3V ; le bus hote Z80 fonctionne a 5V. Le CPLD MAX7000AE a des entrees tolerantes 5V et pilote ses sorties en niveaux LVTTL (logique '1' = 3,3V), ce qui est au-dessus du seuil de commutation de 2,4V de la logique TTL 5V cote hote, assurant une interface correcte dans les deux sens.
- Synchronisation de bus Z80 precise au cycle pres — Le CPLD implemente des machines a etats finis (FSM) completes du bus Z80 pour chaque type de cycle Z80 : fetch d'opcode, lecture memoire, ecriture memoire, lecture E/S, ecriture E/S, acquittement d'interruption et requete/accord de bus. Toutes les FSM sont cadencees par l'oscillateur de 50 MHz, offrant une resolution de 20 ns contre une horloge hote Z80 typique de 1 MHz a 6 MHz.
- Interface SOM — Deux chemins de communication independants existent : un canal SPI a 50 MHz pour que le SOM envoie des donnees et des commandes de controle au CPLD (chemin d'ecriture), et un chemin GPIO direct pour que le CPLD pilote les signaux d'adresse, de donnees et d'etat sur les broches GPIO du SOM pour une capture rapide du cycle de bus (chemin de lecture).
- Commutation video et audio — Le CPLD controle les multiplexeurs analogiques sur les cartes filles, selectionnant entre la video/audio native de l'hote et la sortie du SOM. Il genere le signal de synchronisation composite (VGA_CSYNCn) et la frequence de sous-porteuse couleur (VGA_COLR) pour la sortie video composite, et le signal de suppression monochrome (MONO.BLANK) pour le controle du contraste CRT.
- Gestion du reset — Le CPLD etire et synchronise le signal RESET, assurant que le SOM et la machine hote entrent et sortent du reset de maniere coordonnee quelle que soit la source de l'evenement de reset.
Variantes CPLD
Une construction CPLD separee est produite pour chaque machine hote supportee. Chaque variante implemente la meme FSM de bus Z80 de base mais differe dans le decodage de la carte memoire, les affectations de ports d'E/S, la synchronisation video et la logique de commutation de banques appropriee pour la machine cible.
| Variante | Machine cible | Differences cles |
|---|---|---|
| MZ80A | Sharp MZ-80A | Synchronisation d’affichage 40/80 colonnes ; carte memoire MZ-80A ; pagination RFS (ROM Filing System) |
| MZ700 | Sharp MZ-700 | Commutation de banques des 32 Ko inferieurs ; decodage video et port clavier MZ-700 |
| MZ2000 | Sharp MZ-2000 | Commutation de banques memoire etendue ; signaux de mode video supplementaires |
| PCW8256 | Amstrad PCW-8256 | Pagination memoire (4 banques de 16 Ko) ; carte de ports E/S PCW |
FSM du bus Z80
Le CPLD implemente une machine a etats dediee pour chaque type de cycle de bus Z80. La sequence generalisee pour chaque cycle est :
- Attendre la combinaison appropriee de MREQ/IORQ avec M1/RD/WR activee par le Z80 hote.
- Verrouiller l'adresse depuis A0-A15.
- Envoyer l'adresse au SOM — via le chemin de lecture GPIO pour les cycles de lecture, ou via SPI pour les cycles d'ecriture.
- Pour les cycles de lecture : recevoir l'octet de donnees du SOM et piloter D0-D7 vers l'hote dans la fenetre de T-state imposee par le CPLD.
- Pour les cycles d'ecriture : capturer l'octet de donnees depuis D0-D7 et le transmettre au SOM.
- Desactiver les signaux de controle et liberer le bus avec la synchronisation de T-state correcte comme specifie par la fiche technique du Z80.
| Type de cycle | Signaux de bus | T-states | Methode de notification SOM |
|---|---|---|---|
| Opcode fetch (M1) | MREQ↓ + M1↓ + RD↓ | 4 (min) | Verrouillage d’adresse GPIO → reponse de donnees SPI |
| Memory read | MREQ↓ + RD↓ | 3 (min) | Verrouillage d’adresse GPIO → reponse de donnees SPI |
| Memory write | MREQ↓ + WR↓ | 3 (min) | Adresse + donnees GPIO → acquittement SPI |
| I/O read | IORQ↓ + RD↓ | 4 (min) | Verrouillage d’adresse GPIO → reponse de donnees SPI |
| I/O write | IORQ↓ + WR↓ | 4 (min) | Adresse + donnees GPIO → acquittement SPI |
| Interrupt acknowledge | IORQ↓ + M1↓ | 4 (min) | Reponse vecteur d’interruption SPI |
| Bus request/grant | BUSRQ↓ → BUSAK↓ | variable | Commande de controle SPI |
Interface SOM
Le SOM communique avec le CPLD via deux chemins independants optimises pour leurs directions respectives :
- Chemin d'ecriture SPI (50 MHz) — Le SOM pilote le CPLD via SPI a 50 MHz. Ce chemin est utilise pour : ecrire des octets de donnees sur le bus Z80 (pour les cycles de lecture vus par l'hote), activer NMI ou INT vers l'hote, controler les multiplexeurs video et audio sur les cartes filles, et definir la direction/tri-etat du bus. Le SPI fournit une bande passante suffisante pour toutes les operations de controle et de sortie de donnees.
- Chemin de lecture GPIO — Le CPLD pilote les bits d'adresse, de donnees et d'etat directement sur des broches GPIO dediees du SOM. Le SOM les lit via un acces direct aux registres GPIO mappes en memoire, contournant entierement le HAL GPIO de Linux pour une latence minimale. Ce chemin atteint environ 2 Mo/s de debit et est utilise pour la capture du bus d'adresses a chaque cycle Z80 et la capture des donnees du Z80 pour les cycles d'ecriture de l'hote. L'acces direct aux registres est essentiel car le sous-systeme GPIO de Linux introduit une gigue de planification qui violerait la synchronisation du bus Z80.
Sortie video
La carte principale FusionX fournit un chemin de sortie video RGB 30 bits adapte a tous les modes d'affichage Sharp MZ et des resolutions supplementaires jusqu'a la HD.
- DAC RGB GM7123 — Une version 3,3V de l'ADV7123, fournissant 10 bits par canal de couleur (30 bits au total). Le SOM fournit les 8 bits superieurs par canal ; le CPLD fournit les 2 bits inferieurs pour l'interpolation et l'ajustement fin de la palette.
- Synchronisation composite — VGA_CSYNCn est genere par le CPLD, synchronise avec l'horloge hote Z80 et le mode video selectionne.
- Sous-porteuse couleur — VGA_COLR est genere par le CPLD a la frequence appropriee pour la sortie video composite couleur.
- DAC de contraste (TLC5602C, 8 bits) — Pilote un signal analogique de 4V-5V pour controler le niveau de contraste du CRT monochrome interne Sharp MZ. Le CPLD genere egalement le signal de suppression MONO.BLANK synchronise avec le mode video selectionne.
Audio
- DAC Audio (TLC5602C, 8 bits) — Sortie stereo a 48 kHz, pilotee par le SOM. Offre un audio de qualite CD pour le son emule ou la lecture de formes d'onde arbitraires.
- Emulation PSG SN76489 — Le generateur de son programmable SN76489 est entierement emule en logiciel sur le SOM, avec l'audio genere alimente au DAC. Les trois canaux tonaux et le canal de bruit sont supportes.
- Amplificateur audio — Chaque carte fille comprend un etage d'amplification audio pour router l'audio vers le haut-parleur interne de la machine hote.
- Entree microphone — Une entree microphone est disponible sur le SOM/carte fille pour l'enregistrement audio.
Architecture logicielle
Conception double coeur
Les deux coeurs Cortex-A7 du SSD202 ont des roles strictement separes. L'isolation des CPU est etablie au demarrage de Linux et imposee par le script de demarrage, garantissant que le thread d'emulation Z80 n'est jamais preempte par le planificateur Linux.
| Coeur | Attribution OS | Responsabilites |
|---|---|---|
| CPU0 | Linux (planification normale) | Tous les processus Linux, threads noyau, IRQ materielles, gestion memoire, E/S fichiers, pile reseau, sous-systeme USB, console serie, serveur web (futur), daemon arbitre sharpbiter, daemon k64fcpu |
| CPU1 | Isole (taskset / isolcpus) | Thread noyau d’emulation Z80 uniquement (z80drv) ; tous les autres processus et IRQ migres vers CPU0 au demarrage |
L'isolation des CPU est implementee en deux couches. Premierement, le noyau est demarre avec le parametre
isolcpus=1, qui empeche le planificateur Linux de placer une tache sur le CPU1 sauf demande explicite. Deuxiemement, le script de demarrage start_FusionX.sh utilise taskset pour affecter le thread noyau z80drv au CPU1 et migrer tous les autres threads eligibles hors de celui-ci. Le resultat est un coeur temps reel dedie avec une reponse deterministe aux interruptions GPIO du CPLD, libre de la gigue de planification Linux.
Modules noyau
Deux modules noyau Linux forment le coeur de la pile logicielle FusionX :
- z80drv.ko — Coeur d'emulation Z80
- Boucle de distribution principale : interroge le GPIO du CPLD pour une notification de cycle de bus en attente.
- Route chaque cycle vers le gestionnaire de materiel virtuel appropriate en fonction de l'adresse et du type de cycle (lecture/ecriture memoire, lecture/ecriture E/S, fetch d'opcode).
- Appelle l'emulateur d'instructions Z80 Zeta pour les cycles de fetch d'opcode.
- Fichiers source cles :
z80driver.c(distribution principale),z80io.c(couche d'abstraction materielle),emumz.c(enveloppe d'execution d'instructions).
- ttymzdrv.ko — Pilote TTY clavier/ecran MZ
- Mappe la matrice clavier Sharp MZ en evenements clavier Linux standard.
- Mappe la sortie console Linux en commandes du controleur d'affichage Sharp MZ.
- Expose
/dev/ttymz0, permettant une session de connexion getty directement sur le clavier et l'ecran de la machine hote. - Supporte la suspension/reprise pour une commutation propre entre le mode d'emulation Z80 et le mode console Linux.
Modules materiels virtuels
Chaque machine hote supportee possede un module materiel virtuel dedie. La boucle de distribution z80drv selectionne le module actif au chargement en fonction de la cible machine configuree.
| Module | Fichier source | Cible | Fonction |
|---|---|---|---|
| MZ-80A | z80vhw_mz80a.c | Sharp MZ-80A | Carte memoire, matrice clavier, E/S d’affichage |
| MZ-700 | z80vhw_mz700.c | Sharp MZ-700 | Commutation de banques (32 Ko inferieurs), emulation video/clavier |
| MZ-2000 | z80vhw_mz2000.c | Sharp MZ-2000 | Commutation de banques memoire etendue, controle de mode video |
| PCW-8256 | z80vhw_pcw.c | Amstrad PCW-8256 | Pagination memoire (4 banques de 16 Ko), E/S PCW standard |
| ROM FS | z80vhw_rfs.c | MZ-80A (40/80 col.) | 4 pages ROM commutables ; chargement de fichiers MZF depuis carte SD |
| TZPU SW | z80vhw_tzpu.c | Mode tranZPUter SW | Stub coprocesseur virtuel K64F pour le comportement TZFS |
Emulation Z80
- Bibliotheque Z80 Zeta — L'execution des instructions utilise la bibliotheque Z80 Zeta par Manuel Sainz de Baranda y Goni (LGPL v3). La bibliotheque fournit une implementation complete et precise du jeu d'instructions Z80 incluant tous les opcodes non documentes.
- Boucle d'emulation — Implementee dans
emumz.c. La boucle execute une instruction par iteration et invoque les fonctions de callback de materiel virtuel pour chaque acces memoire ou E/S genere par cette instruction. - Cartes memoire — La disposition memoire de chaque machine supportee (adresses de base, tailles de region, drapeaux d'attributs RAM/ROM) est definie dans
z80driver.h. La carte active est selectionnee au chargement du module. - Performance — L'emulateur atteint un debit equivalent a environ 500 MHz Z80 sur le coeur Cortex-A7 a 1,2 GHz, avec un overhead minimal par instruction grace a l'environnement CPU1 isole.
- Modele de timing — La precision au cycle pres envers l'hote est entierement de la responsabilite du materiel CPLD. L'emulateur n'a qu'a repondre dans les fenetres de timing que le CPLD impose ; il n'implemente pas lui-meme le comptage des T-states.
Utilitaires espace utilisateur
- z80ctrl — Interface de controle en ligne de commande pour le module noyau z80drv. Supporte les operations suivantes :
loadrom(charger une image ROM dans l'espace d'adressage emule),adddev(enregistrer un peripherique virtuel),start/stop(demarrer ou arreter le thread d'emulation Z80),dump(afficher les regions de memoire Z80 emulees),loadmzf(charger un fichier programme MZF et optionnellement l'executer automatiquement). - k64fcpu — Daemon CPU virtuel K64F. Emule le coprocesseur K64F attendu par la ROM TZFS (tranZPUter File System). Communique avec z80drv via une memoire noyau partagee, repondant aux commandes de coprocesseur emises par le programme Z80.
- sharpbiter — Daemon arbitre. Coordonne l'acces au clavier et a l'ecran du Sharp MZ entre ttymzdrv (console Linux) et z80drv (emulation Z80), empechant les conflits de registres lorsque les deux sous-systemes sont actifs.
Disposition du flash et du stockage
Le SOM SSD202 embarque 256 Mo de Flash SPI NAND, partitionne comme suit :
- Partition bootloader U-boot — Bootloaders de premier et second niveau ; charge le noyau Linux depuis la NAND.
- Partition noyau Linux — Linux 4.9-rt avec le correctif PREEMPT_RT applique ; image noyau avec le defconfig FusionX (
infinity2m_spinand_fusionx_defconfig). - Systeme de fichiers racine Buildroot — Systeme de fichiers racine squashfs minimal en lecture seule construit avec Buildroot. Contient uniquement les paquets necessaires au fonctionnement du FusionX.
- Partition application FusionX — Contient :
z80drv.ko,ttymzdrv.ko,z80ctrl,k64fcpu,sharpbiter, scripts de demarrage (start_FusionX.sh) et images ROM pour toutes les machines supportees. - Partition de configuration — Partition JFFS2 ou UBIFS inscriptible. Persiste la configuration utilisateur (selection de machine, mode d'affichage, etc.) entre les mises a jour firmware.
Un emplacement carte SD sur le SOM fournit un stockage supplementaire accessible a l'utilisateur pour : les donnees utilisateur, les images ROM supplementaires, les fichiers programme MZF et les paquets de mise a jour firmware OTA (over-the-air). Le bootloader du SOM detecte automatiquement une carte SD correctement preparee a la mise sous tension et effectue la mise a jour avant de demarrer Linux.
Configuration et construction automatisees (recommande)
Toute la chaine d'outils FusionX — Java + l'assembleur GLASS pour les ROMs, le compilateur croise ARM Linaro pour les modules noyau et l'image Linux, et Quartus II 13.0.1 pour le CPLD — peut etre installee et pilotee automatiquement par le script d'installation fourni pour votre plateforme, plutot que d'installer chaque outil a la main. Chaque script est autonome : copiez le seul fichier correspondant a votre plateforme et executez-le. Il installe les prerequis, clone le depot avec ses sous-modules (par defaut
~/FusionX), recupere le bundle de contenu SharpSoft (TZFS_Files.zip, ~110 Mo), prepare la chaine d'outils et propose de lancer la premiere construction. Les sections de construction manuelle du CPLD et du firmware qui suivent documentent les outils sous-jacents pour les utilisateurs avances et les reconstructions partielles.
| Script | Plateforme | Remarques |
|---|---|---|
setup_FusionX.sh |
Linux (natif) / macOS (Docker) | Sous Linux propose une chaine d’outils native (Java JRE + la chaine de compilation croisee Linaro gcc-linaro-5.5.0-2017.10-arm-linux-gnueabihf vers /opt/arm-linux-gnueabihf + les dependances de construction du noyau) ou des images Docker reproductibles (fusionx-build:latest, fusionx-quartus:13.0.1) ; sous macOS utilise Docker. Le CPLD se construit toujours via l’image Docker Quartus (MAX7000AE). |
setup_FusionX_windows.cmd |
Windows 10/11 | Lanceur a double-clic pour l’installation native PowerShell. Pas de Docker, pas de WSL2. |
setup_FusionX_windows_native.ps1 |
Windows 10/11 (natif, sans WSL2) | Installe via winget Git for Windows + Temurin 17 JRE ; localise un Quartus II 13.x existant (MAX7000AE — non installe automatiquement, avertit s’il est absent) ; met en place une distribution WSL1 (par defaut Ubuntu) pour les composants uniquement Linux. |
setup_FusionX_wsl1.sh |
WSL1 / Ubuntu (appele par le script Windows) | Provisionne la distribution WSL1 : dependances de construction, extras d’image, bibliotheques 32 bits, python2 pour le SDK SigmaStar et la chaine d’outils ARM Linaro ; ecrit /etc/profile.d/fusionx.sh (CROSS_COMPILE, ARCH). |
Linux / macOS :
chmod +x setup_FusionX.sh ./setup_FusionX.sh
Windows 10/11 — double-cliquez sur
setup_FusionX_windows.cmd, ou depuis PowerShell :Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass .\setup_FusionX_windows_native.ps1
La construction est pilotee par
build.sh, qui selectionne une chaine d'outils native, une image Docker ou une distribution WSL1 par composant selon l'hote (Linux : tout natif ; macOS : tout Docker ; Windows : ROMs/CPLD natifs + WSL1 pour les parties uniquement Linux). Executez-le sans argument pour tout construire, ou passez un indicateur pour un seul composant :
Indicateur build.sh |
Construit | Sortie |
|---|---|---|
--asm --tzfs --cpm |
ROMs Z80 / TZFS / CP/M (Java + GLASS glass-0.5.1.jar) |
software/roms/*.bin (dont cpm223_*.bin) |
--drivers |
Modules noyau z80drv / ttymz + applications | Objets arm-linux-gnueabihf |
--spi |
Outils SPI | mspi_main |
--cpld |
Bit streams du CPLD (MZ80A/MZ700/MZ2000/PCW8256) | .pof sous CPLD/v1.0/<machine>/build/output_files/ |
--image |
image SD Linux complete SigmaStar SSD202 (u-boot + noyau 4.9 + Buildroot) | image sous software/linux/.../images |
(aucun) / --all |
tout | — |
./build.sh # tous les composants ./build.sh --cpld # uniquement les bit streams du CPLD ./build.sh --help # lister toutes les options
Surcharges d'environnement pratiques (toutes optionnelles) :
| Variable | Role |
|---|---|
FUSIONX_REPO_URL |
Depot a cloner (par defaut https://git.eaw.app/eaw/tzpuFusionX.git). |
FUSIONX_METHOD |
Force une seule methode de construction pour tous les composants : native, docker ou wsl. |
FUSIONX_FILES_URL |
URL du bundle de contenu SharpSoft (par defaut le TZFS_Files.zip partage). |
FUSIONX_TOOLCHAIN_URL / FUSIONX_TOOLCHAIN_DIR |
URL de telechargement / repertoire d’installation de la chaine d’outils ARM Linaro (par defaut /opt/arm-linux-gnueabihf). |
FUSIONX_DIR |
Construire dans une copie existante au lieu de cloner. |
FUSIONX_WSL_DISTRO |
Nom de la distribution WSL1 (par defaut Ubuntu). |
FUSIONX_ASSUME_YES |
Accepter toutes les invites de maniere non interactive (utilise par le lanceur Windows). |
Les sections ci-dessous couvrent en detail les constructions manuelles du CPLD et du firmware — voir Construction et programmation du CPLD et Construction du firmware Linux.
Construction et programmation du CPLD
Outil de construction
Le HDL du CPLD est compile avec Quartus II 13.0.1 SP1 Web Edition. C'est la derniere version de Quartus II qui supporte la famille de composants MAX7000AE et elle est telechargeable gratuitement depuis Intel/Altera.
Fichiers source
| Fichier | Objectif |
|---|---|
| tzpuFusionX.vhd | RTL principal : FSM du bus Z80, decodeur SPI, logique de controle video/audio |
| tzpuFusionX_Toplevel.vhd | Entite de niveau superieur : affectations des broches d’E/S, connexions des ports |
| tzpuFusionX_pkg.vhd | Package VHDL partage : definitions de types, constantes, records |
Les projets Quartus par machine sont situes a :
CPLD/v1.0/MZ80A/ CPLD/v1.0/MZ700/ CPLD/v1.0/MZ2000/ CPLD/v1.0/PCW8256/
Compilation
Pour compiler depuis la ligne de commande en utilisant le shell Quartus (exemple pour le MZ-80A) :
quartus_sh --flow compile tzpuFusionX_MZ80A
Le fichier de sortie compile est ecrit dans :
build/output_files/tzpuFusionX_MZ80A.pof
Programmation
Le CPLD est programme via JTAG en utilisant un cable Altera USB-Blaster connecte au connecteur JTAG 10 broches de la carte FusionX :
quartus_pgm -c "USB-Blaster" -m JTAG -o "p;tzpuFusionX_MZ80A.pof@1"
Le MAX7000AE utilise des cellules de configuration basees sur EEPROM, qui conservent la logique programmee indefiniment sans batterie ni stockage non volatil externe. La programmation n'est requise que lorsque la conception du CPLD est mise a jour.
Construction du firmware Linux
Chaine d'outils et SDK
- Compilateur croise —
arm-linux-gnueabihf-gcc(ABI hard-float ARM, cible Linux) - SDK — SDK SigmaStar : U-boot + Linux 4.9-rt + Buildroot
- Script de construction maitre —
Build_FusionX.sh
Construction complete du firmware
cd software/linux/ ./Build_FusionX.sh -f nand -p ssd202 -o 2D06 -m 256
La construction progresse a travers les etapes suivantes dans l'ordre :
- Compilation et configuration du bootloader U-boot pour la cible SSD202 NAND.
- Construction du noyau Linux utilisant le defconfig
infinity2m_spinand_fusionx_defconfig. - Construction du systeme de fichiers racine Buildroot (ensemble minimal de paquets).
- Construction de l'application FusionX : modules noyau, utilitaires, scripts de demarrage, empaquetage des images ROM.
- Assemblage de l'image de partition et creation de l'image flash NAND.
Module noyau uniquement (iteration rapide)
Pendant le developpement, il est souvent suffisant de ne reconstruire que le module noyau z80drv. La commande suivante construit la variante MZ-80A de z80drv de maniere isolee :
cd software/FusionX/src/z80drv/src.mz80a make
Flashage
- Programmation initiale — Utilisez l'outil ISP SigmaStar via USB pour ecrire l'image NAND complete sur un SOM vierge ou reinitialise en usine.
- Mise a jour OTA via carte SD — Placez un paquet firmware prepare sur la carte SD. Le bootloader U-boot detecte le paquet de mise a jour au prochain cycle d'alimentation et effectue la mise a jour automatiquement avant de demarrer Linux.
Debogage
Console serie
Le convertisseur USB-serie CH340E expose la console Linux sur
/dev/ttyUSB0 a 115200 bauds, 8N1. Connectez n'importe quel emulateur de terminal (par ex. minicom, picocom, PuTTY) a ce port pour acceder au shell Linux et a la sortie du journal noyau (dmesg). C'est l'interface de debogage principale pendant la mise en route et les diagnostics a l'execution.
JTAG
Le connecteur JTAG 10 broches de la carte principale FusionX se connecte a un Altera USB-Blaster pour la programmation et la verification du CPLD. La meme interface supporte Quartus SignalTap II, l'analyseur logique embarque integre dans Quartus II, qui permet la capture et l'affichage en temps reel des signaux internes du CPLD — y compris le registre d'etat de la FSM du bus Z80, l'etat du decodeur SPI et tous les signaux de controle du bus — sans aucune sonde externe.
Journalisation de debogage du module noyau
Le module noyau z80drv inclut une definition de debogage a la compilation,
DEBUG_PIO. Lorsque cette definition est activee, le module emet une journalisation detaillee des cycles de bus dans le tampon circulaire du noyau pour chaque transaction de bus Z80. Visualisez la sortie avec dmesg -w via la console serie. C'est utile pour tracer les appels aux gestionnaires de materiel virtuel, verifier le decodage de la carte memoire et diagnostiquer les problemes de synchronisation entre le CPLD et le SOM.
z80ctrl --dump
La commande
z80ctrl --dump interroge z80drv et affiche le contenu actuel de toutes les regions de memoire Z80 emulees au format hexadecimal. C'est utile pour verifier les chargements de ROM, inspecter l'etat de la RAM et confirmer que les registres de materiel virtuel sont correctement ecrits par le programme Z80 en cours d'execution.
Quartus SignalTap II
Quartus SignalTap II fournit une analyse logique embarquee du CPLD sans necessiter d'equipement de test externe. Un fichier de configuration SignalTap II peut etre compile dans le bitstream du CPLD, permettant la capture en temps reel des transitions de la machine a etats de la FSM du bus Z80, le decodage des trames SPI, les valeurs des bus d'adresses et de donnees, et tous les fronts de signaux de controle. Les donnees capturees sont affichees dans le visualiseur de formes d'ondes de Quartus II via la connexion JTAG USB-Blaster.
Sites de reference
| Ressource | URL |
|---|---|
| Page du projet tranZPUter FusionX | eaw.app/tranzputer-fusionx |
| Manuel utilisateur | eaw.app/tranzputer-fusionx-usermanual |
| Guide du developpeur | eaw.app/tranzputer-fusionx-technicalguide |
| SigmaStar SSD202 | sigmastarmicro.com |
| Fiche technique Altera MAX7000AE | intel.com — MAX 7000AE Programmable Logic Device Family |
| Bibliotheque Z80 Zeta | github.com/redcode/Zeta |
| Telechargement Quartus II 13.0.1 SP1 | intel.com — Quartus II Web Edition |
| Reference serie Sharp MZ | sharpmz.org |
| Reference Amstrad PCW | cpcwiki.eu/index.php/PCW |
Avis reglementaire sans fil
Cet appareil integre un emetteur-recepteur sans fil SSW101B 2,4 GHz IEEE 802.11 b/g/n (integre dans le SOM SigmaStar SSD202), ce qui en fait un emetteur intentionnel au regard des reglementations radiofrequences mondiales (y compris la FCC Part 15 Subpart C aux Etats-Unis et la Directive sur les equipements radioelectriques 2014/53/EU dans l'Union europeenne).
Bien que le module SOM porte des certifications reglementaires preexistantes, 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 a des fins personnelles, experimentales ou educatives sans obtenir une autorisation d'equipement separee.
Limitations importantes
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 radiofrequences applicables dans sa juridiction. L'auteur fournit ces conceptions a des fins personnelles, educatives et de loisir et ne fait aucune declaration indiquant qu'un appareil construit a partir de celles-ci satisfait aux exigences reglementaires pour la distribution commerciale.
- Les appareils assembles ne doivent pas etre vendus, proposes a la vente, offerts ou autrement distribues a des tiers a moins que le produit fini n'ait ete teste independamment et n'ait obtenu sa propre autorisation d'equipement (par ex. FCC ID, marquage CE avec evaluation par un organisme notifie) dans la juridiction concernee.
- La construction de ce projet a des fins personnelles en quantites limitees est generalement autorisee en vertu des dispositions pour hobbyistes et usage experimental (par ex. FCC § 15.23), a condition que l'appareil ne cause pas d'interference nuisible.
- Les exigences reglementaires varient selon les pays. Les constructeurs en dehors des Etats-Unis doivent consulter leur autorite nationale de radiofrequences pour les regles applicables.
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 radiofrequences applicables dans sa juridiction. L'auteur fournit ces conceptions a des fins personnelles, educatives et de loisir et ne fait aucune declaration indiquant qu'un appareil construit a partir de celles-ci satisfait aux exigences reglementaires pour la distribution commerciale.