tranZPUter FusionX Technischer Leitfaden
Uebersicht
Der tranZPUterFusionX basiert auf zwei primaeren Silizium-Bauelementen: einem SigmaStar SSD202 System-On-Module (SOM) mit dualen Cortex-A7-Kernen bei 1,2 GHz und einem Altera MAX7000AE CPLD (EPM7512), das eine zyklusgenaue Z80-Busschnittstelle zur Host-Maschine bereitstellt.
Die grundlegende Aufgabenverteilung ist klar: Das CPLD besitzt den Z80-Bus und stellt korrektes elektrisches und Timing-Verhalten gegenueber dem Host sicher, waehrend das SOM alle Emulationsarbeiten in einem dedizierten Linux-Kernelmodul auf einem isolierten CPU-Kern ausfuehrt. Die beiden Bauelemente kommunizieren ueber einen 50 MHz SPI-Link (SOM → CPLD, Schreib-/Steuerpfad) und einen direkten GPIO-Bus (CPLD → SOM, Lese-/Adresserfassungspfad).
Diese Architektur liefert bis zu ~500 MHz-aequivalenten Z80-Durchsatz — weit ueber jedem echten Z80 — waehrend sie der Host-Maschine eine voellig orthodoxe Z80-Schnittstelle praesentiert. Die EEPROM-basierten Konfigurationszellen des CPLD behalten die programmierte Logik unbegrenzt ohne Batterie oder externen nichtfluchtigen Speicher bei.
Hardware-Architektur
Blockdiagramm
┌────────────────────────────────────────────────────────────────────────┐ │ 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 ] │ └────────────────────────────────────────────────────────────────────────┘
Hauptkomponenten
Die folgende Tabelle listet die primaeren Komponenten auf der Hauptplatine des tranZPUterFusionX auf.
| Komponente | Bauteil | Spezifikation |
|---|---|---|
| SSD202 SOM | SigmaStar SSD202 (Infinity2M) | Dual Cortex-A7 @ 1.2GHz, 128MB DRAM, 256MB NAND, integrated WiFi |
| CPLD | Altera EPM7512AETC144-10 | MAX7000AE, 512 macrocells, 144-pin TQFP, 5V-tolerant inputs |
| DRAM | On-SOM | 128MB DDR2 |
| NAND Flash | On-SOM | 256MB SPI NAND |
| WiFi | SSW101B | IEEE 802.11 b/g/n, 2.4GHz, 500m range |
| Video DAC | GM7123 (3.3V) | 30-bit RGB DAC (ADV7123 equivalent); 10 bits per colour channel |
| Contrast DAC | TLC5602C | 8-bit DAC; drives 4V–5V contrast signal for Sharp MZ monochrome CRT |
| Audio DAC | TLC5602C | 8-bit DAC; stereo 48kHz output |
| Power supply IC | On-board regulator | 5V → 3.3V for SOM and CPLD rails |
| USB power switch | On-board | Switchable USB VBUS for host USB port |
| USB-serial converter | CH340E | 115200 baud 8N1; exposes Linux console as /dev/ttyUSB0 |
| 50MHz oscillator | SMD can oscillator | CPLD master clock; used for Z80 bus FSM timing |
CPLD-Rolle
Das CPLD (EPM7512AETC144-10, 512 Makrozellen, 144-Pin TQFP) ist das Kernstuck des FusionX-Designs. Es erfuellt fuenf verschiedene Funktionen:
- Spannungsumsetzung — Das SOM GPIO arbeitet mit 3,3V; der Z80-Host-Bus arbeitet mit 5V. Das MAX7000AE CPLD hat 5V-tolerante Eingaenge und treibt Ausgaenge mit LVTTL-Pegeln (Logik '1' = 3,3V), was ueber der 2,4V-Schaltschwelle der 5V TTL-Logik auf der Hostseite liegt und eine korrekte Anbindung in beide Richtungen gewaehrleistet.
- Zyklusgenaues Z80-Bustiming — Das CPLD implementiert vollstaendige Z80-Bus-Zustandsmaschinen (FSMs) fuer jeden Z80-Zyklustyp: Opcode Fetch, Memory Read, Memory Write, I/O Read, I/O Write, Interrupt Acknowledge und Bus Request/Grant. Alle FSMs werden vom 50 MHz-Oszillator getaktet und bieten 20 ns Aufloesung gegenueber einem typischen 1 MHz-6 MHz Z80-Host-Takt.
- SOM-Schnittstelle — Zwei unabhaengige Kommunikationspfade existieren: ein 50 MHz SPI-Kanal, ueber den das SOM Daten und Steuerbefehle an das CPLD sendet (Schreibpfad), und ein direkter GPIO-Pfad, ueber den das CPLD Adress-, Daten- und Statussignale auf die SOM-GPIO-Pins treibt fuer schnelle Buszyklus-Erfassung (Lesepfad).
- Video- und Audioumschaltung — Das CPLD steuert die analogen Multiplexer auf den Tochterplatinen und waehlt zwischen dem nativen Video/Audio des Hosts und der SOM-Ausgabe. Es erzeugt das Composite-Sync-Signal (VGA_CSYNCn) und die Farbtraegerfrequenz (VGA_COLR) fuer die Composite-Videoausgabe sowie das Monochrom-Austastsignal (MONO.BLANK) fuer die CRT-Kontraststeuerung.
- Reset-Verwaltung — Das CPLD verlaengert und synchronisiert das RESET-Signal und stellt sicher, dass sowohl das SOM als auch die Host-Maschine koordiniert in den Reset-Zustand eintreten und ihn verlassen, unabhaengig von der Quelle des Reset-Ereignisses.
CPLD-Varianten
Fuer jede unterstuetzte Host-Maschine wird ein separater CPLD-Build erstellt. Jede Variante implementiert die gleiche Kern-Z80-Bus-FSM, unterscheidet sich jedoch in der Speicherabbildungsdekodierung, den E/A-Portzuweisungen, dem Video-Timing und der Bank-Switching-Logik, die fuer die Zielmaschine geeignet sind.
| Variante | Zielmaschine | Hauptunterschiede |
|---|---|---|
| MZ80A | Sharp MZ-80A | 40/80-column display timing; MZ-80A memory map; RFS (ROM Filing System) paging |
| MZ700 | Sharp MZ-700 | Bank switching of lower 32KB; MZ-700 video and keyboard port decoding |
| MZ2000 | Sharp MZ-2000 | Extended memory banking; additional video mode signals |
| PCW8256 | Amstrad PCW-8256 | Memory paging (4×16KB banks); PCW I/O port map |
Z80 Bus FSM
Das CPLD implementiert eine dedizierte Zustandsmaschine fuer jeden Z80-Buszyklustyp. Die verallgemeinerte Sequenz fuer jeden Zyklus ist:
- Warten auf die relevante Kombination von MREQ/IORQ zusammen mit M1/RD/WR, die vom Host-Z80 aktiviert wird.
- Latchen der Adresse von A0-A15.
- Senden der Adresse an das SOM — ueber den GPIO-Lesepfad fuer Lesezyklen oder ueber SPI fuer Schreibzyklen.
- Fuer Lesezyklen: Empfangen des Datenbytes vom SOM und Treiben von D0-D7 in Richtung Host innerhalb des CPLD-erzwungenen T-State-Fensters.
- Fuer Schreibzyklen: Erfassen des Datenbytes von D0-D7 und Weiterleitung an das SOM.
- Deaktivieren der Steuersignale und Freigabe des Busses mit korrektem T-State-Timing gemaess dem Z80-Datenblatt.
| Zyklustyp | Bussignale | T-States | SOM-Benachrichtigungsmethode |
|---|---|---|---|
| Opcode fetch (M1) | MREQ↓ + M1↓ + RD↓ | 4 (min) | GPIO address latch → SPI data reply |
| Memory read | MREQ↓ + RD↓ | 3 (min) | GPIO address latch → SPI data reply |
| Memory write | MREQ↓ + WR↓ | 3 (min) | GPIO address + data → SPI ack |
| I/O read | IORQ↓ + RD↓ | 4 (min) | GPIO address latch → SPI data reply |
| I/O write | IORQ↓ + WR↓ | 4 (min) | GPIO address + data → SPI ack |
| Interrupt acknowledge | IORQ↓ + M1↓ | 4 (min) | SPI interrupt vector reply |
| Bus request/grant | BUSRQ↓ → BUSAK↓ | variable | SPI control command |
SOM-Schnittstelle
Das SOM kommuniziert mit dem CPLD ueber zwei unabhaengige, fuer ihre jeweiligen Richtungen optimierte Pfade:
- SPI-Schreibpfad (50 MHz) — Das SOM treibt das CPLD ueber SPI bei 50 MHz an. Dieser Pfad wird verwendet fuer: Schreiben von Datenbytes auf den Z80-Bus (fuer vom Host gesehene Lesezyklen), Aktivieren von NMI oder INT zum Host, Steuerung von Video- und Audio-Multiplexern auf Tochterplatinen und Einstellen der Busrichtung/Tristate-Steuerung. SPI bietet ausreichende Bandbreite fuer alle Steuer- und Datenausgabeoperationen.
- GPIO-Lesepfad — Das CPLD treibt Adress-, Daten- und Statusbits direkt auf dedizierte SOM-GPIO-Pins. Das SOM liest diese ueber direkten speicherabgebildeten GPIO-Registerzugriff unter Umgehung der Linux GPIO HAL fuer minimale Latenz. Dieser Pfad erreicht etwa 2 MB/s Durchsatz und wird zur Adressbuserfassung bei jedem Z80-Zyklus und zur Datenerfassung vom Z80 fuer Host-Schreibzyklen verwendet. Der direkte Registerzugriff ist wesentlich, da das Linux-GPIO-Subsystem Scheduling-Jitter einfuehrt, der das Z80-Bustiming verletzen wuerde.
Videoausgabe
Die FusionX-Hauptplatine bietet einen 30-Bit RGB-Videoausgabepfad, der fuer alle Sharp MZ-Anzeigemodi und zusaetzliche Aufloesungen bis HD geeignet ist.
- GM7123 RGB DAC — Eine 3,3V-Version des ADV7123, die 10 Bits pro Farbkanal (insgesamt 30 Bit) bereitstellt. Das SOM liefert die oberen 8 Bits pro Kanal; das CPLD stellt die unteren 2 Bits fuer Interpolation und Palette-Feinabstimmung bereit.
- Composite Sync — VGA_CSYNCn wird vom CPLD erzeugt, synchronisiert mit dem Z80-Host-Takt und dem ausgewaehlten Videomodus.
- Farbtraeger — VGA_COLR wird vom CPLD bei der entsprechenden Frequenz fuer die Composite-Farbausgabe erzeugt.
- Kontrast-DAC (TLC5602C, 8 Bit) — Treibt ein 4V-5V-Analogsignal zur Steuerung des Kontrastpegels der internen Sharp MZ Monochrom-CRT. Das CPLD erzeugt auch das MONO.BLANK-Austastsignal, das zum ausgewaehlten Videomodus gated ist.
Audio
- Audio-DAC (TLC5602C, 8 Bit) — Stereoausgabe bei 48 kHz, vom SOM gesteuert. Liefert CD-Qualitaets-Audio fuer emulierten Sound oder beliebige Wellenformwiedergabe.
- SN76489 PSG-Emulation — Der SN76489 Programmable Sound Generator wird vollstaendig in Software auf dem SOM emuliert, wobei das erzeugte Audio an den DAC gesendet wird. Alle drei Tonkanaele und der Rauschkanal werden unterstuetzt.
- Audioverstaerker — Jede Tochterplatine enthaelt eine Audioverstaerkerstufe zur Weiterleitung von Audio an den internen Lautsprecher der Host-Maschine.
- Mikrofoneingang — Ein Mikrofoneingang ist auf dem SOM/der Tochterplatine fuer Audioaufnahmen verfuegbar.
Software-Architektur
Dual-Core-Design
Die beiden Cortex-A7-Kerne des SSD202 sind streng getrennten Rollen zugewiesen. Die CPU-Isolation wird beim Linux-Bootvorgang hergestellt und durch das Startskript erzwungen, was garantiert, dass der Z80-Emulations-Thread niemals vom Linux-Scheduler verdraengt wird.
| Kern | Betriebssystem-Zuweisung | Verantwortlichkeiten |
|---|---|---|
| CPU0 | Linux (normal scheduling) | All Linux processes, kernel threads, hardware IRQs, memory management, file I/O, network stack, USB subsystem, serial console, web server (future), sharpbiter arbiter daemon, k64fcpu daemon |
| CPU1 | Isolated (taskset / isolcpus) | Z80 emulation kernel thread only (z80drv); all other processes and IRQs migrated to CPU0 at startup |
Die CPU-Isolation wird in zwei Schichten implementiert. Erstens wird der Kernel mit dem Parameter
isolcpus=1 gebootet, der den Linux-Scheduler daran hindert, eine Aufgabe auf CPU1 zu platzieren, es sei denn, dies wird ausdruecklich angefordert. Zweitens verwendet das Startskript start_FusionX.sh taskset, um den z80drv-Kernel-Thread an CPU1 zu binden und alle anderen geeigneten Threads davon wegzumigrieren. Das Ergebnis ist ein dedizierter Echtzeitkern mit deterministischer Antwort auf CPLD GPIO-Interrupts, frei von Linux-Scheduling-Jitter.
Kernelmodule
Zwei Linux-Kernelmodule bilden das Herzstuck des FusionX-Software-Stacks:
- z80drv.ko — Z80-Emulationskern
- Haupt-Dispatch-Schleife: fragt CPLD GPIO auf ausstehende Buszyklus-Benachrichtigungen ab.
- Leitet jeden Zyklus basierend auf Adresse und Zyklustyp (Memory Read/Write, I/O Read/Write, Opcode Fetch) an den entsprechenden Virtual Hardware Handler weiter.
- Ruft den Zeta Z80-Befehlsemulator fuer Opcode-Fetch-Zyklen auf.
- Wichtige Quelldateien:
z80driver.c(Haupt-Dispatch),z80io.c(Hardware-Abstraktionsschicht),emumz.c(Befehlsausfuehrungs-Wrapper).
- ttymzdrv.ko — MZ Tastatur/Display TTY-Treiber
- Bildet die Sharp MZ-Tastaturmatrix auf Standard-Linux-Tastaturereignisse ab.
- Bildet Linux-Konsolenausgabe auf Sharp MZ-Display-Controller-Befehle ab.
- Stellt
/dev/ttymz0bereit, was eine Getty-Anmeldesitzung direkt auf der Tastatur und dem Display der Host-Maschine ermoeglicht. - Unterstuetzt Anhalten/Fortsetzen fuer sauberes Umschalten zwischen Z80-Emulationsmodus und Linux-Konsolenmodus.
Virtuelle Hardware-Module
Jede unterstuetzte Host-Maschine hat ein dediziertes Virtual Hardware Module. Die z80drv Dispatch-Schleife waehlt das aktive Modul beim Laden basierend auf dem konfigurierten Maschinenziel aus.
| Modul | Quelldatei | Ziel | Funktion |
|---|---|---|---|
| MZ-80A | z80vhw_mz80a.c | Sharp MZ-80A | Memory map, keyboard matrix, display I/O |
| MZ-700 | z80vhw_mz700.c | Sharp MZ-700 | Bank switching (lower 32KB), video/keyboard emulation |
| MZ-2000 | z80vhw_mz2000.c | Sharp MZ-2000 | Extended memory banking, video mode control |
| PCW-8256 | z80vhw_pcw.c | Amstrad PCW-8256 | Memory paging (4×16KB banks), standard PCW I/O |
| ROM FS | z80vhw_rfs.c | MZ-80A (40/80-col) | 4 switchable ROM pages; MZF file loading from SD card |
| TZPU SW | z80vhw_tzpu.c | tranZPUter SW mode | K64F virtual co-processor stub for TZFS behaviour |
Z80-Emulation
- Zeta Z80-Bibliothek — Die Befehlsausfuehrung verwendet die Zeta Z80-Bibliothek von Manuel Sainz de Baranda y Goni (LGPL v3). Die Bibliothek bietet eine vollstaendige, genaue Z80-Befehlssatzimplementierung einschliesslich aller undokumentierten Opcodes.
- Emulationsschleife — Implementiert in
emumz.c. Die Schleife fuehrt pro Iteration einen Befehl aus und ruft die Virtual Hardware Callback-Funktionen fuer jeden von diesem Befehl erzeugten Speicher- oder E/A-Zugriff auf. - Speicherabbildungen — Das Speicherlayout jeder unterstuetzten Maschine (Basisadressen, Bereichsgroessen, RAM/ROM-Attributflags) ist in
z80driver.hdefiniert. Die aktive Abbildung wird beim Laden des Moduls ausgewaehlt. - Leistung — Der Emulator erreicht etwa 500 MHz Z80-aequivalenten Durchsatz auf dem 1,2 GHz Cortex-A7-Kern, mit minimalem Overhead pro Befehl dank der isolierten CPU1-Umgebung.
- Timing-Modell — Die Zyklusgenauigkeit gegenueber dem Host liegt vollstaendig in der Verantwortung der CPLD-Hardware. Der Emulator muss nur innerhalb der vom CPLD erzwungenen Timing-Fenster antworten; er implementiert selbst kein T-State-Zaehlen.
User-Space-Dienstprogramme
- z80ctrl — Befehlszeilen-Steuerungsschnittstelle fuer das z80drv-Kernelmodul. Unterstuetzt die folgenden Operationen:
loadrom(ein ROM-Image in den emulierten Adressraum laden),adddev(ein virtuelles Geraet registrieren),start/stop(den Z80-Emulations-Thread starten oder anhalten),dump(emulierte Z80-Speicherbereiche anzeigen),loadmzf(eine MZF-Programmdatei laden und optional automatisch ausfuehren). - k64fcpu — K64F virtueller CPU-Daemon. Emuliert den K64F-Coprozessor, der vom TZFS (tranZPUter File System) ROM erwartet wird. Kommuniziert mit z80drv ueber gemeinsamen Kernelspeicher und reagiert auf Coprozessor-Befehle, die vom Z80-Programm ausgegeben werden.
- sharpbiter — Arbiter-Daemon. Koordiniert den Zugriff auf die Sharp MZ-Tastatur- und Display-Hardware zwischen ttymzdrv (Linux-Konsole) und z80drv (Z80-Emulation) und verhindert Registerkonflikte, wenn beide Subsysteme aktiv sind.
Flash und Speicherlayout
Das SSD202 SOM traegt 256 MB SPI NAND Flash, partitioniert wie folgt:
- U-boot Bootloader-Partition — Erst- und Zweitstufen-Bootloader; laedt den Linux-Kernel aus dem NAND.
- Linux-Kernel-Partition — Linux 4.9-rt mit angewendetem PREEMPT_RT-Patch; Kernel-Image mit der FusionX-Defconfig (
infinity2m_spinand_fusionx_defconfig). - Buildroot-Rootdateisystem — Minimales schreibgeschuetztes squashfs-Rootdateisystem, erstellt mit Buildroot. Enthaelt nur die Pakete, die fuer den FusionX-Betrieb erforderlich sind.
- FusionX-Anwendungspartition — Enthaelt:
z80drv.ko,ttymzdrv.ko,z80ctrl,k64fcpu,sharpbiter, Startskripte (start_FusionX.sh) und ROM-Images fuer alle unterstuetzten Maschinen. - Konfigurationspartition — Beschreibbare JFFS2- oder UBIFS-Partition. Speichert Benutzerkonfiguration (Maschinenauswahl, Anzeigemodus usw.) ueber Firmware-Updates hinweg.
Ein SD-Kartensteckplatz am SOM bietet zusaetzlichen benutzerzugaenglichen Speicher fuer: Benutzerdaten, zusaetzliche ROM-Images, MZF-Programmdateien und OTA (Over-the-Air) Firmware-Update-Pakete. Der SOM-Bootloader erkennt automatisch eine entsprechend vorbereitete SD-Karte beim Einschalten und fuehrt das Upgrade vor dem Linux-Boot durch.
Automatisierte Einrichtung und Build (empfohlen)
Die gesamte FusionX-Werkzeugkette — Java + der GLASS-Assembler fuer die ROMs, der Linaro ARM-Cross-Compiler fuer die Kernelmodule und das Linux-Image sowie Quartus II 13.0.1 fuer das CPLD — kann automatisch durch das mitgelieferte Setup-Skript fuer Ihre Plattform installiert und gesteuert werden, anstatt jedes Werkzeug von Hand zu installieren. Jedes Skript ist eigenstaendig: kopieren Sie die eine Datei fuer Ihre Plattform und fuehren Sie sie aus. Es installiert die Voraussetzungen, klont das Repository mit seinen Submodulen (standardmaessig
~/FusionX), laedt das SharpSoft-Content-Bundle herunter (TZFS_Files.zip, ~110 MB), bereitet die Werkzeugkette vor und bietet an, den ersten Build auszufuehren. Die folgenden manuellen CPLD- und Firmware-Build-Abschnitte dokumentieren die zugrunde liegenden Werkzeuge fuer fortgeschrittene Benutzer und Teil-Rebuilds.
| 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 — doppelklicken Sie
setup_FusionX_windows.cmd, oder aus PowerShell:Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass .\setup_FusionX_windows_native.ps1
Der Build wird von
build.sh gesteuert, das pro Komponente je nach Host eine native Werkzeugkette, ein Docker-Image oder eine WSL1-Distribution auswaehlt (Linux: alles nativ; macOS: alles Docker; Windows: native ROMs/CPLD + WSL1 fuer die Linux-only-Teile). Fuehren Sie es ohne Argumente aus, um alles zu bauen, oder uebergeben Sie ein Flag fuer eine einzelne Komponente:
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
Praktische Umgebungsvariablen-Ueberschreibungen (alle optional):
| 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). |
Die folgenden Abschnitte behandeln die manuellen CPLD- und Firmware-Builds im Detail — siehe CPLD-Build und Programmierung und Linux-Firmware-Build.
CPLD-Build und Programmierung
Build-Werkzeug
Die CPLD HDL wird mit Quartus II 13.0.1 SP1 Web Edition kompiliert. Dies ist die letzte Version von Quartus II, die die MAX7000AE-Geratefamilie unterstuetzt, und ist kostenlos von Intel/Altera herunterladbar.
Quelldateien
| Datei | Zweck |
|---|---|
| tzpuFusionX.vhd | Main RTL: Z80 bus FSM, SPI decoder, video/audio control logic |
| tzpuFusionX_Toplevel.vhd | Top-level entity: I/O pin assignments, port connections |
| tzpuFusionX_pkg.vhd | Shared VHDL package: type definitions, constants, records |
Pro-Maschinen Quartus-Projekte befinden sich unter:
CPLD/v1.0/MZ80A/ CPLD/v1.0/MZ700/ CPLD/v1.0/MZ2000/ CPLD/v1.0/PCW8256/
Kompilierung
Um von der Kommandozeile mit der Quartus-Shell zu kompilieren (Beispiel fuer MZ-80A):
quartus_sh --flow compile tzpuFusionX_MZ80A
Die kompilierte Ausgabedatei wird geschrieben nach:
build/output_files/tzpuFusionX_MZ80A.pof
Programmierung
Das CPLD wird ueber JTAG mit einem Altera USB-Blaster-Kabel programmiert, das an den 10-Pin JTAG-Header auf der FusionX-Platine angeschlossen wird:
quartus_pgm -c "USB-Blaster" -m JTAG -o "p;tzpuFusionX_MZ80A.pof@1"
Das MAX7000AE verwendet EEPROM-basierte Konfigurationszellen, die die programmierte Logik unbegrenzt ohne Batterie oder externen nichtfluchtigen Speicher beibehalten. Die Programmierung ist nur erforderlich, wenn das CPLD-Design aktualisiert wird.
Linux-Firmware-Build
Toolchain und SDK
- Cross-Compiler —
arm-linux-gnueabihf-gcc(ARM Hard-Float ABI, Linux-Ziel) - SDK — SigmaStar SDK: U-boot + Linux 4.9-rt + Buildroot
- Master-Build-Skript —
Build_FusionX.sh
Vollstaendiger Firmware-Build
cd software/linux/ ./Build_FusionX.sh -f nand -p ssd202 -o 2D06 -m 256
Der Build durchlaeuft die folgenden Phasen in Reihenfolge:
- U-boot-Bootloader-Kompilierung und -Konfiguration fuer das SSD202 NAND-Ziel.
- Linux-Kernel-Build mit Defconfig
infinity2m_spinand_fusionx_defconfig. - Buildroot-Rootdateisystem-Erstellung (minimaler Paketsatz).
- FusionX-Anwendungs-Build: Kernelmodule, Dienstprogramme, Startskripte, ROM-Image-Paketierung.
- Partitions-Image-Zusammenstellung und NAND-Flash-Image-Erstellung.
Nur Kernelmodul (schnelle Iteration)
Waehrend der Entwicklung ist es oft ausreichend, nur das z80drv-Kernelmodul neu zu erstellen. Folgendes erstellt die MZ-80A-Variante von z80drv isoliert:
cd software/FusionX/src/z80drv/src.mz80a make
Flashen
- Erstprogrammierung — Verwenden Sie das SigmaStar ISP-Tool ueber USB, um das vollstaendige NAND-Image auf ein leeres oder zurueckgesetztes SOM zu schreiben.
- OTA-Update ueber SD-Karte — Legen Sie ein vorbereitetes Firmware-Paket auf die SD-Karte. Der U-boot-Bootloader erkennt das Update-Paket beim naechsten Einschalten und fuehrt das Upgrade automatisch vor dem Linux-Boot durch.
Debugging
Seriellkonsole
Der CH340E USB-Seriell-Konverter stellt die Linux-Konsole auf
/dev/ttyUSB0 bei 115200 Baud, 8N1 bereit. Verbinden Sie einen beliebigen Terminalemulator (z.B. minicom, picocom, PuTTY) mit diesem Port fuer Zugang zur Linux-Shell und Kernel-Log-Ausgabe (dmesg). Dies ist die primaere Debug-Schnittstelle waehrend der Inbetriebnahme und Laufzeitdiagnose.
JTAG
Der 10-Pin JTAG-Header auf der FusionX-Hauptplatine verbindet sich mit einem Altera USB-Blaster fuer CPLD-Programmierung und -Verifizierung. Die gleiche Schnittstelle unterstuetzt Quartus SignalTap II, den In-System-Logikanalysator, der in Quartus II integriert ist und Echtzeit-Erfassung und -Anzeige interner CPLD-Signale ermoeglicht — einschliesslich des Z80-Bus-FSM-Zustandsregisters, des SPI-Decoder-Zustands und aller Buskontrollsignale — ohne externe Sonden.
Kernelmodul-Debug-Logging
Das z80drv-Kernelmodul enthaelt ein Kompilierzeit-Debug-Define,
DEBUG_PIO. Wenn dieses Define gesetzt ist, gibt das Modul ausfuehrliches Buszyklus-Logging in den Kernel-Ringpuffer fuer jede Z80-Bustransaktion aus. Betrachten Sie die Ausgabe mit dmesg -w ueber die Seriellkonsole. Dies ist nuetzlich zur Verfolgung von Virtual Hardware Handler-Aufrufen, zur Verifizierung der Speicherabbildungsdekodierung und zur Diagnose von Timing-Problemen zwischen CPLD und SOM.
z80ctrl --dump
Der Befehl
z80ctrl --dump fragt z80drv ab und zeigt den aktuellen Inhalt aller emulierten Z80-Speicherbereiche im Hexformat an. Dies ist nuetzlich zur Verifizierung von ROM-Ladungen, zur Untersuchung des RAM-Zustands und zur Bestaetigung, dass Virtual Hardware-Register korrekt vom laufenden Z80-Programm beschrieben werden.
Quartus SignalTap II
Quartus SignalTap II bietet In-System-Logikanalyse des CPLD ohne Bedarf an externen Testgeraeten. Eine SignalTap II-Konfigurationsdatei kann in den CPLD-Bitstrom kompiliert werden und ermoeglicht Echtzeit-Erfassung der Z80-Bus-FSM-Zustandsmaschinenwechsel, SPI-Frame-Dekodierung, Adress- und Datenbuswerte und aller Steuersignalkanten. Die erfassten Daten werden im Quartus II Waveform-Viewer ueber die USB-Blaster JTAG-Verbindung angezeigt.
Referenz-Websites
| Ressource | URL |
|---|---|
| tranZPUter FusionX project page | eaw.app/tranzputer-fusionx |
| User Manual | eaw.app/tranzputer-fusionx-usermanual |
| Developer’s Guide | eaw.app/tranzputer-fusionx-technicalguide |
| SigmaStar SSD202 | sigmastarmicro.com |
| Altera MAX7000AE datasheet | intel.com — MAX 7000AE Programmable Logic Device Family |
| Zeta Z80 library | github.com/redcode/Zeta |
| Quartus II 13.0.1 SP1 download | intel.com — Quartus II Web Edition |
| Sharp MZ series reference | sharpmz.org |
| Amstrad PCW reference | cpcwiki.eu/index.php/PCW |
Hinweis zur Funkregulierung
Dieses Geraet enthaelt einen SSW101B 2,4 GHz IEEE 802.11 b/g/n Funktransceiver (integriert im SigmaStar SSD202 SOM), der es zu einem absichtlichen Sender im Sinne der Funkfrequenzvorschriften weltweit macht (einschliesslich FCC Part 15 Subpart C in den Vereinigten Staaten und der Funkanlagenrichtlinie 2014/53/EU in der Europaeischen Union).
Obwohl das SOM-Modul bestehende regulatorische Zertifizierungen traegt, erstrecken sich diese modulbezogenen Zertifizierungen nicht automatisch auf ein fertiges Produkt, das das Modul enthaelt. Die Ausnahme fuer vorzertifizierte Module erlaubt einzelnen Bastlern, eine begrenzte Anzahl von Geraeten fuer persoenlichen, experimentellen oder bildungsbezogenen Gebrauch zu bauen, ohne eine separate Geraetezulassung zu erhalten.
Wichtige Einschraenkungen
Es liegt in der alleinigen Verantwortung des Erbauers sicherzustellen, dass jedes aus diesen Designs konstruierte Geraet allen geltenden Funkfrequenzvorschriften in seiner Rechtshoheit entspricht. Der Autor stellt diese Designs fuer den persoenlichen, bildungsbezogenen und hobbymässigen Gebrauch zur Verfuegung und gibt keine Zusicherung, dass ein aus ihnen gebautes Geraet die regulatorischen Anforderungen fuer die kommerzielle Verteilung erfuellt.
- Zusammengebaute Geraete duerfen nicht verkauft, zum Verkauf angeboten, verschenkt oder anderweitig an Dritte verteilt werden, es sei denn, das fertige Produkt wurde unabhaengig getestet und hat eine eigene Geraetezulassung (z.B. FCC ID, CE-Kennzeichnung mit Bewertung durch eine benannte Stelle) in der entsprechenden Rechtshoheit erhalten.
- Der Bau dieses Projekts fuer den persoenlichen Gebrauch in begrenzter Stueckzahl ist im Allgemeinen unter Hobby- und Experimentierbestimmungen zulaessig (z.B. FCC § 15.23), vorausgesetzt, das Geraet verursacht keine schaedlichen Stoerungen.
- Regulatorische Anforderungen variieren je nach Land. Erbauer ausserhalb der Vereinigten Staaten sollten ihre nationale Funkfrequenzbehoerde bezueglich der geltenden Regeln konsultieren.
Es liegt in der alleinigen Verantwortung des Erbauers sicherzustellen, dass jedes aus diesen Designs konstruierte Geraet allen geltenden Funkfrequenzvorschriften in seiner Rechtshoheit entspricht. Der Autor stellt diese Designs fuer den persoenlichen, bildungsbezogenen und hobbymässigen Gebrauch zur Verfuegung und gibt keine Zusicherung, dass ein aus ihnen gebautes Geraet die regulatorischen Anforderungen fuer die kommerzielle Verteilung erfuellt.