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:
- 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.
- 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.
- 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.
- Commutazione video e audio — Il CPLD controlla i multiplexer analogici sulle schede figlia.
- 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/ttyUSB0a 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.
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.