tranZPUter FusionX Guida Tecnica

Panoramica

Il tranZPUterFusionX e costruito attorno a due dispositivi al silicio principali: un System-On-Module (SOM) SigmaStar SSD202 con doppi core Cortex-A7 a 1,2 GHz e un CPLD Altera MAX7000AE (EPM7512) che fornisce un'interfaccia bus Z80 precisa al ciclo verso la macchina host. La divisione fondamentale delle responsabilita e chiara: il CPLD possiede il bus Z80 e garantisce un comportamento elettrico e di temporizzazione corretto verso l'host, mentre il SOM gestisce tutto il lavoro di emulazione all'interno di un modulo kernel Linux dedicato in esecuzione su un core CPU isolato. I due dispositivi comunicano tramite un collegamento SPI a 50 MHz (SOM → CPLD, percorso di scrittura/controllo) e un bus GPIO diretto (CPLD → SOM, percorso di lettura/cattura indirizzo). Questa architettura offre un throughput equivalente Z80 fino a ~500 MHz — ben oltre qualsiasi Z80 reale — presentando al contempo un'interfaccia Z80 perfettamente ortodossa alla macchina host. Le celle di configurazione basate su EEPROM del CPLD mantengono la logica programmata indefinitamente senza batteria o storage non volatile esterno richiesto.

Architettura hardware

Diagramma a blocchi

┌────────────────────────────────────────────────────────────────────────┐
│                         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     │            │
│  └───────────────────────────────┘  └─────────────────────────┘            │
│  [ USB-serial CH340E ]──USB──►[ Linux console /dev/ttyUSB0 ]          │
└────────────────────────────────────────────────────────────────────────┘

Componenti chiave

Componente Codice Specifica
SSD202 SOM SigmaStar SSD202 (Infinity2M) Doppio Cortex-A7 a 1,2 GHz, 128 MB DRAM, 256 MB NAND, WiFi integrato
CPLD Altera EPM7512AETC144-10 MAX7000AE, 512 macrocelle, TQFP 144 pin, ingressi tolleranti a 5V
Video DAC GM7123 (3,3V) DAC RGB 30 bit (equivalente ADV7123); 10 bit per canale colore
Contrasto DAC TLC5602C DAC 8 bit; pilota segnale di contrasto 4V-5V per CRT monocromatico Sharp MZ
Audio DAC TLC5602C DAC 8 bit; uscita stereo 48 kHz
Convertitore USB-seriale CH340E 115200 baud 8N1; espone la console Linux come /dev/ttyUSB0
Oscillatore 50 MHz Oscillatore SMD Clock master CPLD; utilizzato per il timing della FSM del bus Z80

Ruolo del CPLD

Il CPLD (EPM7512AETC144-10, 512 macrocelle, TQFP 144 pin) e il cardine del design FusionX. Svolge cinque funzioni distinte:
  1. Traduzione di tensione — Il GPIO del SOM opera a 3,3V; il bus host Z80 opera a 5V. Il CPLD MAX7000AE ha ingressi tolleranti a 5V e pilota le uscite a livelli LVTTL (logica '1' = 3,3V), che e superiore alla soglia di commutazione di 2,4V della logica TTL 5V lato host.
  2. Timing preciso al ciclo del bus Z80 — Il CPLD implementa FSM complete del bus Z80 per ogni tipo di ciclo Z80: fetch di opcode, lettura memoria, scrittura memoria, lettura I/O, scrittura I/O, riconoscimento interrupt e richiesta/concessione bus. Tutte le FSM sono temporizzate dall'oscillatore a 50 MHz, offrendo una risoluzione di 20 ns.
  3. Interfaccia SOM — Due percorsi di comunicazione indipendenti: un canale SPI a 50 MHz per il percorso di scrittura e un percorso GPIO diretto per il percorso di lettura.
  4. Commutazione video e audio — Il CPLD controlla i multiplexer analogici sulle schede figlia.
  5. Gestione del reset — Il CPLD allunga e sincronizza il segnale RESET.

Varianti CPLD

Variante Macchina target Differenze chiave
MZ80A Sharp MZ-80A Timing display 40/80 colonne; mappa di memoria MZ-80A; paginazione RFS
MZ700 Sharp MZ-700 Commutazione banchi dei 32 KB inferiori; decodifica video e porta tastiera MZ-700
MZ2000 Sharp MZ-2000 Commutazione banchi memoria estesa; segnali modalita video aggiuntivi
PCW8256 Amstrad PCW-8256 Paginazione memoria (4 banchi da 16 KB); mappa porte I/O PCW

Architettura software

Design dual-core

Core Assegnazione OS Responsabilita
CPU0 Linux (schedulazione normale) Tutti i processi Linux, thread del kernel, IRQ hardware, gestione memoria, I/O file, stack di rete, sottosistema USB, console seriale, daemon arbitro sharpbiter, daemon k64fcpu
CPU1 Isolato (taskset / isolcpus) Solo thread del kernel emulazione Z80 (z80drv); tutti gli altri processi e IRQ migrati sulla CPU0 all’avvio

Moduli kernel

  • z80drv.ko — Core di emulazione Z80 — Ciclo di dispatch principale, routing di ogni ciclo al gestore di hardware virtuale appropriato, chiamata all'emulatore di istruzioni Z80 Zeta per i cicli di fetch di opcode.
  • ttymzdrv.ko — Driver TTY tastiera/display MZ — Mappa la matrice tastiera Sharp MZ in eventi tastiera Linux standard, espone /dev/ttymz0.

Moduli hardware virtuali

Modulo File sorgente Target Funzione
MZ-80A z80vhw_mz80a.c Sharp MZ-80A Mappa di memoria, matrice tastiera, I/O display
MZ-700 z80vhw_mz700.c Sharp MZ-700 Commutazione banchi, emulazione video/tastiera
MZ-2000 z80vhw_mz2000.c Sharp MZ-2000 Commutazione banchi memoria estesa, controllo modalita video
PCW-8256 z80vhw_pcw.c Amstrad PCW-8256 Paginazione memoria, I/O PCW standard
ROM FS z80vhw_rfs.c MZ-80A (40/80 col.) 4 pagine ROM commutabili; caricamento file MZF da scheda SD
TZPU SW z80vhw_tzpu.c Modalita tranZPUter SW Stub coprocessore virtuale K64F per comportamento TZFS

Layout flash e storage

  • Partizione bootloader U-boot
  • Partizione kernel Linux — Linux 4.9-rt con patch PREEMPT_RT
  • Filesystem root Buildroot
  • Partizione applicazione FusionX
  • Partizione di configurazione

Setup automatizzato e build (raccomandato)

L'intera toolchain FusionX — Java + l'assemblatore GLASS per le ROM, il cross-compilatore ARM Linaro per i moduli kernel e l'immagine Linux, e Quartus II 13.0.1 per il CPLD — puo essere installata e gestita automaticamente dallo script di setup incluso per la propria piattaforma, invece di installare ogni strumento a mano. Ogni script e autonomo: copiare il singolo file per la propria piattaforma ed eseguirlo. Installa i prerequisiti, clona il repository con i suoi sottomoduli (default ~/FusionX), scarica il bundle di contenuti SharpSoft (TZFS_Files.zip, ~110 MB), prepara la toolchain e propone di eseguire il primo build. Le sezioni di build manuale di CPLD e firmware che seguono documentano gli strumenti sottostanti per gli utenti avanzati e le ricompilazioni parziali.
Script Platform Notes
setup_FusionX.sh Linux (native) / macOS (Docker) On Linux offers a native tool chain (Java JRE + the Linaro gcc-linaro-5.5.0-2017.10-arm-linux-gnueabihf cross toolchain to /opt/arm-linux-gnueabihf + kernel build deps) or reproducible Docker images (fusionx-build:latest, fusionx-quartus:13.0.1); on macOS uses Docker. The CPLD always builds via the Quartus Docker image (MAX7000AE).
setup_FusionX_windows.cmd Windows 10/11 Double-click launcher for the native PowerShell setup. No Docker, no WSL2.
setup_FusionX_windows_native.ps1 Windows 10/11 (native, no WSL2) winget-installs Git for Windows + Temurin 17 JRE; locates an existing Quartus II 13.x (MAX7000AE — not auto-installed, warns if absent); sets up a WSL1 distro (default Ubuntu) for the Linux-only components.
setup_FusionX_wsl1.sh WSL1 / Ubuntu (called by the Windows script) Provisions the WSL1 distro: build deps, image extras, 32-bit libs, python2 for the SigmaStar SDK, and the Linaro ARM toolchain; writes /etc/profile.d/fusionx.sh (CROSS_COMPILE, ARCH).
Linux / macOS:
chmod +x setup_FusionX.sh
./setup_FusionX.sh
Windows 10/11 — doppio clic su setup_FusionX_windows.cmd, oppure da PowerShell:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
.\setup_FusionX_windows_native.ps1
Il build e guidato da build.sh, che seleziona una toolchain nativa, un'immagine Docker o una distribuzione WSL1 per componente a seconda dell'host (Linux: tutto nativo; macOS: tutto Docker; Windows: ROM/CPLD nativi + WSL1 per le parti solo-Linux). Eseguirlo senza argomenti per costruire tutto, oppure passare un flag per un singolo componente:
build.sh flag Builds Output
--asm --tzfs --cpm Z80 ROMs / TZFS / CP/M (Java + GLASS glass-0.5.1.jar) software/roms/*.bin (incl. cpm223_*.bin)
--drivers z80drv / ttymz kernel modules + apps arm-linux-gnueabihf objects
--spi SPI tools mspi_main
--cpld CPLD bit streams (MZ80A/MZ700/MZ2000/PCW8256) .pof under CPLD/v1.0/<machine>/build/output_files/
--image full SigmaStar SSD202 Linux SD image (u-boot + kernel 4.9 + Buildroot) image under software/linux/.../images
(none) / --all everything
./build.sh                 # all components
./build.sh --cpld          # just the CPLD bit streams
./build.sh --help          # list all options
Override utili dell'ambiente (tutti opzionali):
Variable Purpose
FUSIONX_REPO_URL Repository to clone (default https://git.eaw.app/eaw/tzpuFusionX.git).
FUSIONX_METHOD Force one build method for all components: native, docker or wsl.
FUSIONX_FILES_URL SharpSoft content bundle URL (default the shared TZFS_Files.zip).
FUSIONX_TOOLCHAIN_URL / FUSIONX_TOOLCHAIN_DIR Linaro ARM toolchain download URL / install directory (default /opt/arm-linux-gnueabihf).
FUSIONX_DIR Build in an existing checkout instead of cloning.
FUSIONX_WSL_DISTRO WSL1 distro name (default Ubuntu).
FUSIONX_ASSUME_YES Accept all prompts non-interactively (used by the Windows launcher).
Le sezioni seguenti trattano in dettaglio i build manuali di CPLD e firmware — vedere Compilazione e programmazione CPLD e Compilazione firmware Linux.

Compilazione e programmazione CPLD

L'HDL del CPLD e compilato con Quartus II 13.0.1 SP1 Web Edition.
quartus_sh --flow compile tzpuFusionX_MZ80A
quartus_pgm -c "USB-Blaster" -m JTAG -o "p;tzpuFusionX_MZ80A.pof@1"

Compilazione firmware Linux

cd software/linux/
./Build_FusionX.sh -f nand -p ssd202 -o 2D06 -m 256

Debug

  • Console seriale — Il convertitore USB-seriale CH340E espone la console Linux su /dev/ttyUSB0 a 115200 baud, 8N1.
  • JTAG — L'intestazione JTAG a 10 pin si collega a un Altera USB-Blaster per la programmazione e la verifica del CPLD.
  • Logging debug modulo kernel — Il modulo kernel z80drv include un define di debug a compilazione, DEBUG_PIO.
  • Quartus SignalTap II — Fornisce analisi logica in-system del CPLD senza richiedere apparecchiature di test esterne.

Siti di riferimento

Risorsa URL
Pagina progetto tranZPUter FusionX eaw.app/tranzputer-fusionx
Manuale utente eaw.app/tranzputer-fusionx-usermanual
Guida dello sviluppatore eaw.app/tranzputer-fusionx-technicalguide

Avviso normativo wireless

Questo dispositivo incorpora un ricetrasmettitore wireless SSW101B 2,4 GHz IEEE 802.11 b/g/n (integrato nel SOM SigmaStar SSD202), rendendolo un emettitore intenzionale secondo le normative sulle radiofrequenze a livello mondiale.
Responsabilita del costruttore
E responsabilita esclusiva del costruttore assicurarsi che qualsiasi dispositivo costruito sulla base di questi progetti sia conforme a tutte le normative sulle radiofrequenze applicabili nella propria giurisdizione.