tranZPUter-Dateisystem (TZFS) -- Entwicklerhandbuch
TZFS Entwicklerhandbuch
Dieses Handbuch ist eine detaillierte Durchgehung des TZFS-Quellcodes (tranZPUter Filing System) und der Entwicklungsumgebung. Es erklaert Z80-Assembler-Konzepte fuer Entwickler, die moeglicherweise nicht mit der Sprache vertraut sind, fuehrt durch jedes Quellmodul, dokumentiert die TZMM-Bank-Switching-Architektur und zeigt, wie neue Befehle hinzugefuegt, vorhandene Module geaendert und TZFS auf neue Hardwareplattformen portiert werden koennen.
Fuer Hardwarearchitektur und Build-System-Details siehe den Technischen Leitfaden. Fuer die benutzerorientierte Bedienung siehe das Benutzerhandbuch.
Einfuehrung in Z80-Assembler fuer Nicht-Assembler-Programmierer
Register
Der Z80 hat keine "Variablen" -- stattdessen hat er einen kleinen Satz von Registern (schnelle Speicherorte innerhalb der CPU):
| Register | Groesse | Rolle |
|---|---|---|
| A | 8-Bit | Akkumulator – das primaere Register fuer Arithmetik, Logik und I/O-Operationen. |
| B, C | 8-Bit | Allgemein. BC zusammen bildet ein 16-Bit-Paar, haeufig als Schleifenzaehler verwendet. |
| D, E | 8-Bit | Allgemein. DE zusammen ist ein 16-Bit-Paar, haeufig als Quell- oder Zielzeiger. |
| H, L | 8-Bit | Allgemein. HL zusammen ist der Haupt-16-Bit-Speicherzeiger. |
| IX, IY | 16-Bit | Indexregister – fuer Basis+Offset-Speicheradressierung. |
| SP | 16-Bit | Stack Pointer – zeigt auf die Spitze des Aufrufstapels. |
| PC | 16-Bit | Program Counter – die Adresse des aktuellen Befehls. |
| F | 8-Bit | Flags-Register – Z (Zero), C (Carry), S (Sign), P/V (Parity/Overflow). |
LD dest, src-- Laden (kopieren) von Daten.CALL addr-- Unterprogramm aufrufen.RET-- Aus Unterprogramm zurueckkehren.JP addr-- Unbedingter Sprung.DJNZ offset-- B dekrementieren und springen wenn nicht Null.IN A, (port)/OUT (port), A-- I/O-Port lesen/schreiben.PUSH rr / POP rr-- 16-Bit-Registerpaar auf dem Stack speichern/wiederherstellen.
- Kommentare beginnen mit
;. EQUdefiniert eine Konstante:MMCFG EQU 060H.DB(Define Byte) fuegt Rohbytes ein.DW(Define Word) fuegt 16-Bit Little-Endian-Werte ein.ORG addrsetzt den Assemblierungsursprung.IF / ENDIFbedingte Assemblierung.
Quellbaum
| Pfad | Inhalt |
|---|---|
asm/tzfs.asm |
Bank 0: Einstiegspunkt, Initialisierung, Befehlsdispatcher, Sprungtabellen |
asm/tzfs_bank2.asm |
Bank 1: Nachrichten, Hilfebildschirm, Druckroutinen, Sharp/ASCII-Konvertierung |
asm/tzfs_bank3.asm |
Bank 2: Speicher-Utilities, I/O-Port R/W, Tape-Kompensation, CPU/Emulationsbefehle |
asm/tzfs_bank4.asm |
Bank 3: Vollstaendiger Z80-Assembler und -Disassembler (belegt 52 KB) |
asm/include/ |
Gemeinsame Definitionen und Konfigurationsdateien |
asm/include/tzfs_definitions.asm |
Alle Konfigurationskonstanten und I/O-Port-Definitionen |
asm/include/tzfs_svcstruct.asm |
K64F-Servicebefehl- und Strukturdefinitionen |
build.sh |
Top-Level-Build-Skript |
tools/ |
Build-Werkzeuge einschliesslich glass.jar |
Konfiguration: tzfs_definitions.asm
Build-Ziel-FlagsBUILD_FUSIONX EQU 0 ; 1 = running on tranZPUter FusionX hardware BUILD_PICOZ80 EQU 1 ; 1 = running on picoZ80 board ENADEBUG EQU 0 ; 1 = enable additional diagnostic outputAdresskonstanten
UROMADDR EQU 0E800H ; Base address of the TZFS entry point TZVARMEM EQU 0EC80H ; TZFS variable block TZSVCMEM EQU 0ED80H ; K64F service communication block BANKRAMADDR EQU 02000H ; Base address for bank4 assembler/disassembler tablesTZMM-Modus-Konstanten
MMCFG EQU 060H ; I/O port for memory management config register TZMM_TZFS EQU 022H ; Mode 0x22: bank 0 — main TZFS code TZMM_TZFS2 EQU 023H ; Mode 0x23: bank 1 — tzfs_bank2 TZMM_TZFS3 EQU 024H ; Mode 0x24: bank 2 — tzfs_bank3 TZMM_TZFS4 EQU 025H ; Mode 0x25: bank 3 — tzfs_bank4
Bank-Switching im Detail
Bank-Switching ist der zentrale Architekturmechanismus von TZFS. Das native Monitor-ROM belegt 0x0000-0xDFFF. Das User-ROM-Fenster bei 0xE800-0xEFFF gibt TZFS nur 2 KB permanent sichtbaren Adressraum -- viel zu klein fuer das gesamte System. Banking ermoeglicht es TZFS, verschiedene Code-Module im selben Adressbereich bei Bedarf darzustellen.
| TZMM-Modus | Wert | 0xE800-0xEFFF | 0xF000-0xFFFF | Verwendet von |
|---|---|---|---|---|
| TZMM_TZFS | 0x22 | TZFS-Kern (Bank 0) | TZFS-Kern (Bank 0) | Normalbetrieb |
| TZMM_TZFS2 | 0x23 | TZFS-Kern (Bank 0) | tzfs_bank2 (Bank 1) | Hilfe, Nachrichten |
| TZMM_TZFS3 | 0x24 | TZFS-Kern (Bank 0) | tzfs_bank3 (Bank 2) | Speicher-Utilities, Emulation |
| TZMM_TZFS4 | 0x25 | – | tzfs_bank4 (Bank 3) | Assembler/Disassembler |
; One TZFS command table entry: ; DB FLAGS ; 1 byte: END|MATCH|BANK[5:3]|SIZE[2:0] ; DB "COMMAND" ; SIZE bytes: the command string ; DW HANDLER_ADDR ; 2 bytes: handler routine address
Sprungtabellen
Externe Sprungtabelle bei 0xE880 (TZFSJMPTABLE)CMT_RDINF EQU UROMADDR+80H ; 0xE880 CMT_RDDATA EQU UROMADDR+83H ; 0xE883 CMT_WRINF EQU UROMADDR+86H ; 0xE886 CMT_WRDATA EQU UROMADDR+89H ; 0xE889 CMT_VERIFY EQU UROMADDR+8CH ; 0xE88C CMT_DIR EQU UROMADDR+8FH ; 0xE88F CMT_CD EQU UROMADDR+92H ; 0xE892 SET_FREQ EQU UROMADDR+95H ; 0xE895Inter-Bank-Funktions-Stubs (?-Praefix)
Jede Funktion, die von einer anderen Bank als der, in der sie sich befindet, aufgerufen werden muss, hat einen entsprechenden ?-praefixierten Stub in
tzfs.asm. Der Aufrufer schreibt einfach CALL ?PRINTMSG und der Bank-Switch wird transparent gehandhabt.
Modul-Durchgaenge
tzfs.asm -- Befehlsdispatcher (Bank 0, TZMM_TZFS)
Der Einstiegspunkt fuer alle TZFS-Funktionalitaet. Enthaelt die externe Sprungtabelle, Inter-Bank-Stub-Tabelle, Befehlstabelle (CMDTABLE), Hauptdispatcher-Schleife und Variablenspeicher.
tzfs_bank2.asm -- Nachrichten und Hilfe (Bank 1, TZMM_TZFS2)
Alle benutzerorientierten Textausgaben: Zeichensatzkonvertierung (PRINTASCII), formatierter Nachrichtendruck (PRINTMSG), Dateinamensanzeige (PRTFN) und der Hilfebildschirm (HELPSCR).
tzfs_bank3.asm -- Utilities (Bank 2, TZMM_TZFS3)
Speicherbearbeitung, Hex-Dump, Blockkopie, Fuellen, I/O-Portzugriff, Tape-Kompensation, Hardwareemulationssteuerung, CPU-Umschaltung und Videomodus-Steuerung.
tzfs_bank4.asm -- Assembler / Disassembler (Bank 3, TZMM_TZFS4)
Vollstaendiger interaktiver Z80-Assembler und -Disassembler. Diese Bank ist architektonisch einzigartig: TZMM_TZFS4 bildet Bank 3 ueber den gesamten User-RAM-Bereich (0x1200-0xCFFF) sowie 0xF000-0xFFFF ab, was 52 KB Arbeitsplatz ergibt.
K64F-Serviceaufrufe
; Step 1 — Set command and parameters
LD A, TZSVC_CMD_LOADFILE
LD (TZSVCCMD), A
; Step 2 — Signal request to K64F
LD A, TZSVC_STATUS_REQUEST
LD (TZSVCRESULT), A
OUT (SVCREQ), A
; Step 3 — Poll result
WAIT:
LD A, (TZSVCRESULT)
CP TZSVC_STATUS_REQUEST
JR Z, WAIT
; Step 4 — Check result
LD A, (TZSVCRESULT)
OR A
JR NZ, ERROR
Einen neuen Monitorbefehl hinzufuegen
- Handler in der passenden Bank-Datei schreiben. Fuer einen Utility-Befehl in
tzfs_bank3.asmeine Routine hinzufuegen. - ?-Praefix-Stub in tzfs.asm hinzufuegen im TZFSJMPTABLE-Abschnitt.
- Eintrag zu CMDTABLE in tzfs.asm hinzufuegen mit Bank-Index und Handler-Adresse.
- Hilfetext zu HELPSCR in tzfs_bank2.asm hinzufuegen.
./build.shausfuehren.
Eine neue Hardwareplattform hinzufuegen
- Build-Flag in
tzfs_definitions.asmhinzufuegen. - I/O-Port- und TZMM-Modus-Konstanten hinzufuegen.
- Bedingte Assemblierungsbloecke im Quellcode hinzufuegen.
- K64F-Service-API auf der neuen Plattform implementieren.
build.shaktualisieren.
Debugging-Tipps
Debug-Ausgabe aktivieren:
ENADEBUG EQU 1 in tzfs_definitions.asm setzen.
I/O-Ports direkt mit RIO/WIO pruefen: RIO port liest jeden I/O-Port. WIO port,value schreibt einen Wert.
TZFS-Variablenblock inspizieren: D EC80 fuer den TZVARMEM-Bereich.
K64F-Serviceblock inspizieren: D ED80 fuer den TZSVCMEM-Bereich.
Assemblierten Code mit DASM verifizieren: Nach dem ASM-Befehl sofort DASM addr,endaddr verwenden.
Build-Umgebung
Der TZFS-Build verwendet den GLASS-Z80-Assembler (im Repository enthalten) und das globale FusionX-Build-Skript. Zum Bauen der Z80-Assembler-Komponenten werden nur eine Java-Laufzeitumgebung und
Automatisiertes Setup und Build (empfohlen)
git benoetigt. Der empfohlene Weg zum Bauen ist das automatisierte Setup-Skript fuer Ihre Plattform (siehe Automatisiertes Setup und Build unten); die nachfolgenden manuellen und FusionX-Build-Schritte sind fuer fortgeschrittene Benutzer und Teil-Builds gedacht.
Der empfohlene Weg, TZFS zu bauen, ist das in sich geschlossene Setup-Skript fuer Ihre Plattform. Es installiert die Voraussetzungen (Java fuer den GLASS-Z80-Assembler sowie
git/perl/coreutils; unter Windows Git Bash + Java), klont das Repository, holt das Inhaltspaket und kann die ROM-Images bauen — alles interaktiv, mit sinnvollen Standardwerten, die Sie durch Druecken von Enter 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
Das Skript installiert Java (das den GLASS-Assembler
tools/glass-0.5.1.jar ausfuehrt), eine C-Toolchain + make (um das cpmtools-Submodul zu bauen), perl und git; unter macOS installiert es zusaetzlich GNU coreutils und bash 4 und fuegt sie ueber ein generiertes tzfs_env.sh zum PATH hinzu. Falls nicht vorhanden, holt es das Inhaltspaket TZFS_Files.zip (~110 MB MZF/DSK/CPM/CAS/BAS/BASIC-Inhalte).
Windows 10 / 11 — setup_TZFS_windows.ps1 (natives Git Bash, kein WSL). In PowerShell:
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, holt das Inhaltspaket und fuehrt
./build.sh ueber Git Bash aus. Ein vorgefertigtes tools\cpmcp.exe ist enthalten, sodass unter Windows kein C-Compiler erforderlich ist.
Fragen, die das Setup stellt, und was zu tun ist. Jede Eingabeaufforderung hat einen sicheren Standardwert in Klammern — der Grossbuchstabe ist der Standard, sodass Druecken von Enter ihn uebernimmt.
macOS / Linux / WSL (setup_TZFS.sh):
| Eingabeaufforderung | Standard | Was zu tun ist |
|---|---|---|
Install now? [Y/n] (fuer fehlende Pakete) |
Ja | Enter — installiert die fehlenden Voraussetzungen; fragt evtl. nach Ihrem sudo-Passwort. |
Repo URL [https://git.eaw.app/eaw/TZFS.git] |
oeffentliches Repo | Enter fuer das oeffentliche Repo oder eine andere (private) URL einfuegen. |
Install directory [~/TZFS] |
~/TZFS |
Enter fuer ~/TZFS oder einen Pfad eingeben. |
Download and install them now? [Y/n] (Inhaltspaket) |
Ja | Enter, um die fuer einen vollstaendigen Build benoetigten MZF/DSK/CPM/CAS/BAS/BASIC-Inhalte zu holen. |
Run the build now (./build.sh …)? [Y/n] |
Ja | Enter, um sofort zu bauen (verifiziert die Umgebung). |
Windows (setup_TZFS_windows.ps1):
| Eingabeaufforderung | Standard | Was zu tun ist |
|---|---|---|
Repo URL [https://git.eaw.app/eaw/TZFS.git] |
oeffentliches Repo | Enter fuer das oeffentliche Repo oder eine andere URL einfuegen. |
TZFS checkout directory [%USERPROFILE%\TZFS] |
%USERPROFILE%\TZFS |
Enter fuer den Standard oder einen Pfad eingeben. |
Download and install them … now? [Y/n] (Inhaltspaket) |
Ja | Enter, um das Inhaltspaket zu holen. |
Build the TZFS firmware now (runs ./build.sh via Git Bash)? [Y/n] |
Ja | Enter, um sofort ueber Git Bash zu bauen. |
Setzen Sie die Umgebungsvariable
TZFS_REPO_URL, um die Standard-Repository-URL zu ueberschreiben, ohne das Skript zu bearbeiten.
Ausgabe und Neu-Bauen. ROM-Images werden nach
Bauen (manuell / FusionX)
roms/ geschrieben — zum Beispiel tzfs.rom, die FusionX-Varianten, die Monitor-ROMs und die CP/M-Binaerdateien. Um spaeter neu zu bauen, wechseln Sie in den Checkout (cd ~/TZFS); unter macOS fuehren Sie zuerst source ./tzfs_env.sh aus, um GNU coreutils und bash 4 in den PATH zu legen; dann fuehren Sie ./build.sh aus (oder ./build.sh -m, um auch die MZF-Quellen erneut zu verarbeiten). Unter Windows fuehren Sie ./build.sh aus Git Bash im Checkout aus.
sudo apt install -y default-jre git git clone https://git.eaw.app/eaw/tzpuFusionX.git cd tzpuFusionX git submodule update --init --recursive ./build.sh --tzfs ./build.sh --cpm ./build.sh --all
| Ausgabe | Beschreibung |
|---|---|
software/roms/tzfs_mz80a_fusionx.rom |
TZFS-Firmware fuer MZ-80A |
software/roms/tzfs_mz700_fusionx.rom |
TZFS-Firmware fuer MZ-700 |
software/roms/tzfs_mz2000_fusionx.rom |
TZFS-Firmware fuer MZ-2000 |
software/roms/cpm223_*.bin |
CP/M 2.2-Binaerdateien |
Referenzseiten
| Ressource | Link |
|---|---|
| TZFS-Projektseite | /sharpmz-upgrades-tzfs/ |
| TZFS Benutzerhandbuch | /sharpmz-upgrades-tzfs-usermanual/ |
| TZFS Technischer Leitfaden | /sharpmz-upgrades-tzfs-technicalguide/ |
| FusionX Entwicklerhandbuch | /tranzputer-fusionx-developersguide/ |
| GLASS Z80-Assembler | Enthalten in tools/glass-0.5.1.jar |