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
tranZPUter SW
tzfs_definitions.asm ausgewaehlt.
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
tranZPUter FusionX
BUILD_VIDEOMODULE-Flag.
FPGA-basierter virtueller tranZPUter. Ausgewaehlt mit
picoZ80
BUILD_FUSIONX-Flag.
RP2350-basierter Z80-Ersatz. Ausgewaehlt mit
BUILD_PICOZ80-Flag.
Speicherarchitektur
Z80-Adressraum-LayoutAddress 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. |
| 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- Der Z80 fuellt den Service-Kommunikationsblock bei 0xED80 aus und schreibt
TZSVC_STATUS_REQUEST(0xFE) nachTZSVCRESULT. - Der Z80 schreibt an I/O-Port
SVCREQ(0x68) um den K64F zu signalisieren. - Der K64F setzt
TZSVCRESULTaufTZSVC_STATUS_PROCESSING(0xFF). - Der Z80 pollt bis der Wert weder 0xFF noch 0xFE ist.
- Bei Erfolg:
TZSVC_STATUS_OK(0x00). Bei Fehler: Fehlercode ungleich Null.
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
Voraussetzungen
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.
| 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. |
git clone https://git.eaw.app/eaw/tranZPUter.git cd tranZPUter ./build.shAusgabedateien
| 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 |