tranZPUter-Dateisystem (TZFS) -- Technischer Leitfaden

TZFS Technischer Leitfaden

Dieser Leitfaden dokumentiert die Hardwareintegration des tranZPUter Filing System (TZFS), die Speicherarchitektur, das Software-Modul-Layout, die K64F-I/O-Prozessor-Service-API, die CP/M-Implementierung und das vollstaendige Build-System. Er richtet sich an Benutzer, die verstehen moechten, wie TZFS auf Systemebene funktioniert, TZFS auf neue Hardware portieren oder einen vollstaendigen Build aus den Quellen durchfuehren moechten.
TZFS ist ein Port von RFS, angepasst fuer die tranZPUter-Boardfamilie. Im Gegensatz zu RFS, das physische Flash-ROM-Chips programmiert, laeuft TZFS vollstaendig im 512 KB RAM des tranZPUters -- der K64F-I/O-Prozessor laedt die gesamte Firmware beim Booten von der SD-Karte in den SRAM. Alle SD-Kartenzugriffe erfolgen ueber die K64F-Service-API; der Z80 beruehrt nie direkt die SPI-Hardware.
Fuer die taegliche Nutzung und die Monitor-Befehlsreferenz siehe das Benutzerhandbuch. Fuer Z80-Assembler-Quellcode-Erlaeuterungen siehe das Entwicklerhandbuch.

Hardwareplattformen

TZFS zielt auf fuenf Hardwareplattformen. Jede wird zur Kompilierzeit ueber Flags in tzfs_definitions.asm ausgewaehlt.

tranZPUter SW
Die erste Produktions-tranZPUter-Platine mit K64F ARM Cortex-M4 I/O-Prozessor, 512 KB SRAM und FPGA (T80, ZPU Evolution, Hardwareemulation, VGA).

tranZPUter SW-700 v1.3
Aktuelle Lieferversion mit verbessertem PCB-Layout. Gleicher K64F, 512 KB SRAM, FPGA.

tranZPUter Fusion
tranZPUter SW-700 kombiniert mit einem 40/80-Farb-Videomodul. Ausgewaehlt mit BUILD_VIDEOMODULE-Flag.

tranZPUter FusionX
FPGA-basierter virtueller tranZPUter. Ausgewaehlt mit BUILD_FUSIONX-Flag.

picoZ80
RP2350-basierter Z80-Ersatz. Ausgewaehlt mit BUILD_PICOZ80-Flag.

Speicherarchitektur

Z80-Adressraum-Layout
Address     Size    Contents
─────────────────────────────────────────────────────────────────────
0x0000      4 KB    Monitor ROM area — SA-1510 (or 1Z-013A, MZ-80B IPL etc.)
0x1000      256 B   MZ system variables / stack
0x1200    ~46 KB    User RAM (main program area)
0xD000      12 KB   Video RAM + memory-mapped I/O
0xE800       2 KB   TZFS fixed code window
0xEC80      256 B   TZFS variables
0xED80      640 B   K64F service communication block (TZSVCMEM)
0xF000       4 KB   Switchable code window — bank selected by TZMM mode
─────────────────────────────────────────────────────────────────────

Speicherverwaltungsmodi (TZMM)
Modus Code Beschreibung
TZMM_ORIG 0x00 Original Sharp MZ-Modus.
TZMM_BOOT 0x01 Originalmodus mit tranZPUter SRAM bei 0xE800-0xEFFF.
TZMM_TZFS 0x02 TZFS-Hauptmodus – gesamter Speicher im tranZPUter-SRAM.
TZMM_TZFS2 0x03 0xF000-0xFFFF bildet auf Block 1 ab (tzfs_bank2).
TZMM_TZFS3 0x04 0xF000-0xFFFF bildet auf Block 2 ab (tzfs_bank3).
TZMM_TZFS4 0x05 0xF000-0xFFFF bildet auf Block 3 ab (tzfs_bank4, nutzt auch 0x1200-0xCFFF).
TZMM_CPM 0x06 CP/M-Modus – gesamter SRAM, Block 4.
TZMM_CPM2 0x07 CP/M-Modus 2 – gemischte Block 4/5-Konfiguration.

Softwarearchitektur

Modul Speicherbereich Groesse TZMM-Modus Beschreibung
tzfs.asm 0xE800-0xEFFF 2 KB fest TZMM_TZFS Primaerer Einstiegspunkt, Befehlsdispatcher, Sprungtabellen.
tzfs_bank2.asm 0xF000-0xFFFF 4 KB TZMM_TZFS2 Nachrichtendruck, ASCII-Konvertierung, Hilfebildschirm.
tzfs_bank3.asm 0xF000-0xFFFF 4 KB TZMM_TZFS3 Speicher-Utilities, I/O, Tape-Kompensation, Emulationsumschaltung.
tzfs_bank4.asm 0x1200-0xCFFF + 0xF000-0xFFFF 52 KB TZMM_TZFS4 Z80-Assembler und -Disassembler.
Externe Sprungtabelle (TZFSJMPTABLE bei 0xE880)
Adresse Name Beschreibung
0xE880 CMT_RDINF Tape/SD-Header lesen
0xE883 CMT_RDDATA Tape/SD-Datenblock lesen
0xE886 CMT_WRINF Tape/SD-Header schreiben
0xE889 CMT_WRDATA Tape/SD-Datenblock schreiben
0xE88C CMT_VERIFY Tape-Daten verifizieren
0xE88F CMT_DIR SD-Karten-Verzeichnisauflistung
0xE892 CMT_CD SD-Karten-Verzeichnis wechseln
0xE895 SET_FREQ CPU-Taktfrequenz setzen

K64F / I/O-Prozessor-Service-API

Service-Anfragemechanismus
  1. Der Z80 fuellt den Service-Kommunikationsblock bei 0xED80 aus und schreibt TZSVC_STATUS_REQUEST (0xFE) nach TZSVCRESULT.
  2. Der Z80 schreibt an I/O-Port SVCREQ (0x68) um den K64F zu signalisieren.
  3. Der K64F setzt TZSVCRESULT auf TZSVC_STATUS_PROCESSING (0xFF).
  4. Der Z80 pollt bis der Wert weder 0xFF noch 0xFE ist.
  5. Bei Erfolg: TZSVC_STATUS_OK (0x00). Bei Fehler: Fehlercode ungleich Null.

Service-Kommunikationsblock (0xED80, 640 Bytes)
Offset  Size    Field            Description
────────────────────────────────────────────────────────────────────────────
+0x00   1 B     TZSVCCMD         Service command code
+0x01   1 B     TZSVCRESULT      Result/status byte (0x00=OK, 0xFE=request, 0xFF=busy)
+0x02   1 B     TZSVCDIRSEC      Directory sector number
+0x09   2 B     TZSVC_LOADADDR   Load/save address / CPU frequency
+0x0B   2 B     TZSVC_LOADSIZE   Image size in bytes
+0x0D  20 B     TZSVC_DIRNAME    Directory name
+0x21  17 B     TZSVC_FILENAME   Sharp MZ filename (17-character)
+0x32  20 B     TZSVCWILDC       Directory wildcard filter
+0x46 512 B     TZSVCSECTOR      Data sector buffer
────────────────────────────────────────────────────────────────────────────

Servicebefehle
Code Name Beschreibung
0x01 READDIR Verzeichnis oeffnen und erste Eintraege zurueckgeben.
0x03 READFILE Datei oeffnen und ersten Block zurueckgeben.
0x07 CLOSE Offene Datei oder Verzeichnis schliessen.
0x08 LOADFILE Komplette Datei in tranZPUter-SRAM laden.
0x09 SAVEFILE SRAM-Bereich als Datei speichern.
0x0A ERASEFILE Datei loeschen.
0x0B CHANGEDIR Aktives Verzeichnis aendern.
0x20-0x2F LOAD*BIOS / LOADTZFS Monitor- und BIOS-Firmware laden.
0x30-0x33 CP/M disk ops CP/M BDOS laden, SD-Laufwerk anbinden, lesen, schreiben.
0x40-0x42 CPU frequency CPU-Frequenz-Steuerung.
0x50-0x5D CPU/EMU switch CPU- und Hardwareemulations-Umschaltung (nur SW/Fusion).
0x7F EXIT TZFS beenden und Maschine im Originalmodus neu starten.

CP/M 2.2-Implementierung

CP/M 2.2 ist auf allen TZFS-Plattformen ueber den CPM-Monitorbefehl verfuegbar. Die Implementierung verwendet TZMM_CPM / TZMM_CPM2-Modi. Das CBIOS nutzt K64F-Serviceaufrufe fuer alle Platten-E/A. CP/M-Laufwerke A:-G: sind SD-Karten-Disk-Images. CP/M 2.2 liefert 47 KB nutzbaren Programm-RAM.

Build-System

Automatische Einrichtung und Erstellung (empfohlen)
Der empfohlene Weg, TZFS zu bauen, ist das eigenstaendige Setup-Skript fuer Ihre Plattform. Es installiert die Voraussetzungen (eine Java-JRE fuer den GLASS-Z80-Assembler, eine C-Toolchain + make zum Kompilieren des mitgelieferten cpmtools-Submoduls sowie perl/git/coreutils; unter Windows Git Bash + Java), klont das Repository, laedt das ~110 MB grosse Inhaltspaket (TZFS_Files.zip) herunter und kann die ROM-Images bauen -- alles interaktiv, mit sinnvollen Standardwerten, die Sie durch Druecken der Eingabetaste uebernehmen koennen. Kopieren Sie einfach die einzelne Datei fuer Ihre Plattform und fuehren Sie sie aus.

macOS / Linux / WSL – setup_TZFS.sh

chmod +x setup_TZFS.sh
./setup_TZFS.sh

Windows 10 / 11 – setup_TZFS_windows.ps1 (natives Git Bash, kein WSL). An einer PowerShell-Eingabeaufforderung:

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
.\setup_TZFS_windows.ps1
Das Windows-Skript verwendet winget, um Git for Windows (das bash, coreutils, perl und curl bereitstellt) und die Temurin-17-JRE (Java) zu installieren, klont das Repository, laedt das Inhaltspaket herunter und fuehrt ./build.sh ueber Git Bash aus. Ein vorgefertigtes tools\cpmcp.exe ist enthalten, sodass unter Windows kein C-Compiler erforderlich ist.
Setzen Sie die Umgebungsvariable TZFS_REPO_URL, um die Standard-Repository-URL (https://git.eaw.app/eaw/TZFS.git) zu ueberschreiben, ohne das Skript zu bearbeiten, und TZFS_FILES_URL, um auf ein alternatives Inhaltspaket zu verweisen. ROM-Images und CP/M-Disk-Images werden nach roms/ geschrieben; um spaeter neu zu bauen, wechseln Sie in das Checkout-Verzeichnis (unter macOS fuehren Sie zuerst source ./tzfs_env.sh aus) und fuehren Sie ./build.sh aus (oder ./build.sh -m, um auch die MZF-Quellen erneut zu verarbeiten). Kopieren Sie die erstellten Dateien mit tools/copytosd.sh auf eine FAT32-formatierte SD-Karte.

Voraussetzungen
Werkzeug Zweck
Java JRE 8+ Fuehrt den GLASS Z80-Assembler aus (tools/glass.jar).
bash Alle Build-Skripte sind Bash-Shell-Skripte.
perl Erforderlich fuer tools/mzftool.pl.
gcc / make Kompiliert cpmtools beim ersten Build.

Build-Schritte
git clone https://git.eaw.app/eaw/tranZPUter.git
cd tranZPUter
./build.sh

Ausgabedateien
Datei Beschreibung
tzfs.bin Primaeres TZFS-Image (0xE800-0xEFFF, Block 0).
tzfs_bank2.bin Bank 2-Image – Nachrichtendruck, Hilfebildschirm.
tzfs_bank3.bin Bank 3-Image – Speicher-Utilities, I/O, Emulation.
tzfs_bank4.bin Bank 4-Image – Z80-Assembler und -Disassembler.
monitor_SA1510.bin SA-1510 40-Spalten-Monitor-Image.
cbios.bin CP/M 2.2 CBIOS SRAM-Image.
CPM_DISK_*.img CP/M-Disk-Images (RAW-Format).

Referenzseiten

Ressource Link
TZFS-Projektseite /sharpmz-upgrades-tzfs/
TZFS Benutzerhandbuch /sharpmz-upgrades-tzfs-usermanual/
TZFS Entwicklerhandbuch /sharpmz-upgrades-tzfs-developersguide/
tranZPUter-Projektseite /transzputer-sw/
RFS Technischer Leitfaden /sharpmz-upgrades-rfs-technicalguide/
GLASS Z80-Assembler Enthalten in tools/glass.jar