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 :
  1. 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.
  2. 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.
  3. 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).
  4. 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.
  5. 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 :
  1. Attendre la combinaison appropriee de MREQ/IORQ avec M1/RD/WR activee par le Z80 hote.
  2. Verrouiller l'adresse depuis A0-A15.
  3. Envoyer l'adresse au SOM — via le chemin de lecture GPIO pour les cycles de lecture, ou via SPI pour les cycles d'ecriture.
  4. 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.
  5. Pour les cycles d'ecriture : capturer l'octet de donnees depuis D0-D7 et le transmettre au SOM.
  6. 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 croisearm-linux-gnueabihf-gcc (ABI hard-float ARM, cible Linux)
  • SDK — SDK SigmaStar : U-boot + Linux 4.9-rt + Buildroot
  • Script de construction maitreBuild_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 :
  1. Compilation et configuration du bootloader U-boot pour la cible SSD202 NAND.
  2. Construction du noyau Linux utilisant le defconfig infinity2m_spinand_fusionx_defconfig.
  3. Construction du systeme de fichiers racine Buildroot (ensemble minimal de paquets).
  4. Construction de l'application FusionX : modules noyau, utilitaires, scripts de demarrage, empaquetage des images ROM.
  5. 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
  • 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.
Responsabilite du constructeur
Il est de la seule responsabilite du constructeur de s'assurer que tout appareil construit a partir de ces conceptions est conforme a toutes les reglementations 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.