ROM-Dateisystem (RFS)
Uebersicht
* Eingabeaufforderung, allen Originalbefehlen und einem umfassenden Satz neuer Befehle fuer SD-Karten- und ROM-Dateiverwaltung, CP/M-Start, BASIC-Laden und vieles mehr.
Die Firmware unterstuetzt vier Hardware-Plattformen, die jeweils zur Kompilierzeit ueber ein Flag in rfs_definitions.asm ausgewaehlt werden:
- RomDisk-Karte — das urspruengliche Ziel. Bis zu 4×512 KB Flash-RAMs, 512 KB statisches RAM und ein SDXC-Kartenleser. Monitor-ROM und User-ROM werden ueber das Flash-RAM per Bank-Switching umgeschaltet.
- SFD-700 — die Sharp Floppy-Disk-Schnittstellenkarte. RFS belegt den CPLD/ROM-Bereich der SFD-700 und bietet Monitor, BASIC-Laden und Floppy-Boot.
- tranZPUter FusionX — die FPGA-basierte Z80-Erweiterungsplatine. RFS laeuft in deren Flash-ROM-Bereich.
- picoZ80 — die Raspberry Pi Pico-basierte Z80-Ersatz-/Emulatorplatine. Auf dem picoZ80 laeuft RFS unter der dem Host praesentierten Maschinen-Persona — neben dem MZ-80A umfasst dies nun auch den Sharp MZ-80K, der dieselben Sharp-Schnittstellenkarten wie der MZ-80A verwenden kann (RFS, MZ80AFI, MZ-1E14/E19, MZ-1R12/R18/R37, PIO-3034) sowie seinen eigenen nativen MZ-80FD (T3444M) Floppy-Controller.
RFS-Monitor
+ RFS", wenn das Dateisystem erfolgreich initialisiert wurde. Der originale SA-1510-Befehlssatz ist vollstaendig verfuegbar, zusammen mit einem Satz erweiterter Befehle. Einige erweiterte Befehle (SD-Karten-Operationen, Laufwerksauswahl) sind nur im RomDisk-/picoZ80-Build vorhanden. Ein integrierter Z80-Assembler und Disassembler ist in allen Builds verfuegbar.
Der vollstaendige Befehlssatz ist unten aufgefuehrt. Mit (R) gekennzeichnete Befehle sind nur im RomDisk-/picoZ80-Build vorhanden.
| Befehl | Parameter | Beschreibung |
|---|---|---|
| 0 .. 9 (R) | — | Aktives RFS-SD-Kartenlaufwerk waehlen (0–9). |
| 40 (R) | — | In den 40-Spalten-Anzeigemodus wechseln (erfordert Kuma 40/80-Upgrade oder Video Module). |
| 80 (R) | — | In den 80-Spalten-Anzeigemodus wechseln (erfordert Kuma 40/80-Upgrade oder Video Module). |
| ASM | <address> | Interaktiver Z80-Assembler. Assembler-Mnemonics direkt ab der angegebenen Adresse in den Speicher eingeben. |
| B | — | Tastatur-Signalton umschalten. |
| BASIC | — | BASIC SA-5510 auf dem aktiven SD-Laufwerk oder ROM suchen, laden und ausfuehren. |
| C | [<8-Bit-Wert>] | Speicher von 0x1200 bis zum RAM-Ende mit 0x00 oder dem angegebenen Bytewert initialisieren. |
| CP | <src> <dst> <size> | Einen Speicherblock kopieren. Alle drei Argumente sind 4-stellige Hex-Werte: Quelladresse, Zieladresse, Byteanzahl. |
| CPM | — | CP/M 2.2 auf dem aktiven SD-Laufwerk oder ROM suchen, laden und starten. |
| D | <addr> [<addr2>] | Speicherinhalt von <addr> bis <addr2> (oder 20 Zeilen) als Hex und ASCII ausgeben. Die Ausgabe pausiert bei jedem vollen Bildschirm; Taste druecken zum Fortfahren, ‘U’ fuer Seite zurueck, ‘X’ zum Beenden. Wiederholung von ‘D’ ohne Adresse setzt ab der letzten Position fort. |
| DASM | <addr> [<addr2>] | Z80-Maschinencode von <addr> bis <addr2> disassemblieren. |
| DUC (R) | [H|T] <name> oder <Dateinr.> | Inhalt einer SD-Karten-Datei ausgeben. Standard: Hex-Dump. DUCH: Hex-Dump mit MZF-Header-Info (Ladeadresse, Ausfuehrungsadresse, Groesse). DUCT: Textausgabe (nur druckbare ASCII-Zeichen). |
| EC (R) | <name> oder <Dateinr.> | Eine Datei vom aktiven SD-Kartenlaufwerk nach Name oder Dateinummer loeschen. |
| F / FL | [<drive>] | Vom angegebenen Floppy-Laufwerk booten. Falls weggelassen, wird zur Eingabe einer Laufwerksnummer aufgefordert. |
| FD | [<drive>] | Verzeichnisliste einer Floppy-Disk anzeigen. Die optionale Laufwerksnummer waehlt Laufwerk 1–4 (Standard: 1). |
| FC | <start> <end> <exec> | Einen Speicherbereich in eine Floppy-Disk-Datei speichern. |
| FD2T | <name> oder <Dateinr.> | Eine Datei von Floppy-Disk auf Band kopieren. |
| T2FD | — | Von Band laden und auf Floppy-Disk speichern. |
| f | — | Den originalen Floppy-AFI-Bootcode bei 0xF000 ausfuehren. |
| H | — | Hilfebildschirm anzeigen (seitenweise, Leertaste zum Fortfahren). |
| IC (R) | — | Seitenweise Verzeichnisliste der Dateien auf dem aktiven SD-Kartenlaufwerk. Jeder Eintrag zeigt eine Hex-Dateinummer und den Dateinamen. |
| IN | <port>[,<port>…] | Einen oder mehrere I/O-Ports lesen. Jeder Port ist eine 2- oder 4-stellige Hex-Adresse. Werte werden als 2-stellige Hex-Werte, durch Leerzeichen getrennt, ausgegeben. |
| IR | — | Seitenweise Verzeichnisliste der im Flash-ROM gespeicherten Programme. |
| J | <address> | Zur angegebenen Adresse springen (ausfuehren). |
| L | LT | [<filename>] | Eine Datei vom Band (CMT) laden und ausfuehren. |
| LTNX | [<filename>] | Eine Datei vom Band (CMT) laden, ohne sie auszufuehren. |
| LR | <name> oder <Dateinr.> | Ein Programm aus dem ROM nach Name oder Dateinummer laden und ausfuehren. |
| LRNX | <name> oder <Dateinr.> | Ein Programm aus dem ROM nach Name oder Dateinummer laden, ohne es auszufuehren. |
| LC (R) | <name> oder <Dateinr.> | Ein Programm von der SD-Karte laden und ausfuehren. |
| LCNX (R) | <name> oder <Dateinr.> | Ein Programm von der SD-Karte laden, ohne es auszufuehren. |
| M | <address> | Interaktiver Speichereditor ab <address>. |
| OUT | <port>:<value>[,<port>:<value>…] | Auf einen oder mehrere I/O-Ports schreiben. Jeder Port ist eine 2- oder 4-stellige Hex-Adresse, gefolgt von einem Doppelpunkt und einem 2-stelligen Hex-Wert. |
| P | — | Einen Test am angeschlossenen Drucker ausfuehren. |
| R | — | DRAM-Speichertest ausfuehren. |
| S | ST | <start> <end> <exec> | Einen Speicherbereich auf Band (CMT) speichern. Sie werden nach einem Dateinamen gefragt. Beispiel: S120020001203 speichert von 0x1200 bis 0x2000 mit Ausfuehrungsadresse 0x1203. |
| SC (R) | <start> <end> <exec> | Einen Speicherbereich auf dem aktiven SD-Kartenlaufwerk speichern. Sie werden nach einem Dateinamen gefragt. |
| SD2T (R) | <name> oder <Dateinr.> | Eine Datei von der SD-Karte auf Band im CMT kopieren. |
| T | — | Den 8253-Timer testen. |
| T2SD (R) | — | Ein Programm vom Band laden und auf das aktive SD-Kartenlaufwerk schreiben. |
| V | — | Eine Bandaufnahme mit den aktuellen Daten im Speicher vergleichen. |
| X (R) | — | Zur Hi-Load-ROM-Variante wechseln, sodass DRAM den Bereich 0x0000–0xCFFF umfasst. |
Falls das Kuma 40/80-Spalten-Upgrade oder das Video Module installiert ist, schaltet die Eingabe von 4 in den 40-Spalten-Modus und 8 in den 80-Spalten-Modus. Im 80-Spalten-Modus zeigen die Verzeichnisbefehle (IC / IR) vier Spalten an.
Erweiterte Anwendungen
Sharp BASIC SA-5510
| Befehl | Parameter | Beschreibung |
|---|---|---|
| LOAD | "TEST" |
Das aktive Laufwerk nach einem Programm namens TEST durchsuchen, laden und ausfuehren. |
| LOAD | Die naechste sequenzielle Datei vom aktiven Laufwerk laden. Wenn zuletzt Datei 5 geladen wurde, wird Datei 6 geladen. | |
| LOAD | "3:TEST" |
TEST von RFS-Laufwerk 3 laden und Laufwerk 3 als aktiv setzen. |
| LOAD | "C:TEST" |
TEST von der internen Kassette (CMT) laden und CMT als aktives Laufwerk setzen. |
| SAVE | "TEST" |
Eine vorhandene Datei namens TEST auf dem aktiven Laufwerk ueberschreiben oder neu erstellen. Auf CMT wird sofort an der aktuellen Bandposition geschrieben. |
| SAVE | Das aktuelle Programm unter einem automatisch generierten Namen DEFAULT<n> speichern, wobei <n> die aktuelle Sequenznummer ist. |
|
| SAVE | "3:TEST" |
TEST auf RFS-Laufwerk 3 speichern/erstellen und Laufwerk 3 als aktiv setzen. |
| SAVE | "C:TEST" |
Auf CMT mit dem Namen TEST speichern und CMT als aktiv setzen. |
| DIR | Das SD-Kartenverzeichnis fuer das aktive Laufwerk im RFS-Format anzeigen (Dateinummer + Dateiname). | |
| DIR | "3:" |
Das Verzeichnis auf Laufwerk 3 anzeigen und Laufwerk 3 als aktiv setzen. |
Siehe SD-Karten-Organisation unten fuer das Standard-Laufwerkslayout.
Microsoft BASIC
- MS-BASIC(MZ-80A) — fuer originale MZ-80A-Hardware, nur Kassettenspeicher.
- MS-BASIC(RFS40) — RFS mit 40-Spalten-Anzeige; fuegt SD-Karten-, CLOAD-, CSAVE-, DIR-Befehle hinzu.
- MS-BASIC(RFS80) — RFS mit 80-Spalten-Anzeige; fuegt SD-Karten-, CLOAD-, CSAVE-, DIR-Befehle hinzu.
Jede Variante erscheint auf dem RFS-ROM-Laufwerk und SD-Laufwerk. Den vollstaendigen Standard-Befehlssatz finden Sie im NASCOM Basic Manual. Die folgende Tabelle listet die fuer RFS hinzugefuegten Erweiterungen auf.
| Befehl | Parameter | Version | Beschreibung |
|---|---|---|---|
| CLOAD | "<filename>" |
MZ-80A | Ein tokenisiertes BASIC-Programm von Kassette laden. |
| CSAVE | "<filename>" |
MZ-80A | Das aktuelle BASIC-Programm im tokenisierten Format auf Kassette speichern. |
| CLOAD | "[<drive>:]<filename>" |
RFS40, RFS80 | Von Band oder SD-Karte laden. <drive> ist 0–9; <filename> ist ein 17-Zeichen-MZ-Name oder eine 2-stellige RFS-Hexnummer. Beispiel: CLOAD "8:13" oder CLOAD "8:othello". |
| CSAVE | "[<drive>:]<filename>" |
RFS40, RFS80 | Auf Band oder SD-Karte mit optionalem Laufwerks-Praefix speichern. |
| DIR | "[<drive>:]" |
RFS40, RFS80 | Inhalt des aktiven oder angegebenen RFS-Laufwerks anzeigen. |
| ANSITERM | 0 = Aus, 1 = Ein |
Alle | Den integrierten ANSI-Terminal-Prozessor aktivieren oder deaktivieren (Standard: ein). Dieser uebersetzt ANSI-Escape-Sequenzen in Bildschirmaktionen, sodass portable BASIC-Programme unveraendert laufen koennen. (Das Star Trek V2 BASIC-Programm verwendet ANSI-Escape-Sequenzen.) |
NASCOM-Kassettenimage-Konverter
nasconv-Werkzeug entfernt das Band-Framing und baut den BASIC-Code in ein auf dem MZ-80A unter RFS ladbares Format um. Es bildet Token-Werte automatisch neu ab, da die RFS MS-BASIC-Erweiterung neue Token hinzufuegt, die die Tabelle verschieben.
nasconv v1.0
Required:
-i | --image <file> Cassette image file to convert.
-o | --output <file> Output file for converted BASIC data.
Options:
-l | --loadaddr <addr> MZ-80A BASIC start address.
-n | --nasaddr <addr> Original NASCOM BASIC start address.
-h | --help Show this help.
-v | --verbose Verbose output.
Example:
nasconv --image 3dnc.cas --output 3dnc.bas \
--nasaddr 0x10fa --loadaddr 0x4341
BASIC MZ-5Z008 (Quick Disk)
BASIC 5Z-008BRFS". Dieses BASIC laeuft auch auf dem MZ-1500 ueber die picoZ80 MZ-1500-Persona und bietet die gleiche Geraeteunterstuetzung einschliesslich NETx:-Netzwerkzugriff. Programme koennen ueber alle unterstuetzten Geraete geladen, gespeichert und aufgelistet werden, indem ein Geraete-Praefix im Dateinamen verwendet wird.
| Befehl | Parameter | Beschreibung |
|---|---|---|
| LOAD | "RFSx:filename" |
Ein BASIC-Programm vom RFS-SD-Kartenlaufwerk x laden (1–7, abgebildet auf SD-Laufwerke 4–10). |
| SAVE | "RFSx:filename" |
Das aktuelle BASIC-Programm auf dem angegebenen RFS-SD-Kartenlaufwerk speichern. |
| DIR | RFSx: |
Die Verzeichnisliste des angegebenen RFS-SD-Kartenlaufwerks anzeigen. |
| LOAD | "FDx:filename" |
Ein BASIC-Programm vom Floppy-Disk-Laufwerk x laden. |
| SAVE | "FDx:filename" |
Das aktuelle BASIC-Programm auf Floppy-Disk-Laufwerk x speichern. |
| DIR | FDx: |
Die Floppy-Disk-Verzeichnisliste anzeigen. |
| LOAD | "QDx:filename" |
Ein BASIC-Programm vom Quick Disk-Laufwerk x laden. |
| SAVE | "QDx:filename" |
Das aktuelle BASIC-Programm auf Quick Disk-Laufwerk x speichern. |
| DIR | QDx: |
Die Quick Disk-Verzeichnisliste anzeigen. |
| LOAD | "NETx:filename" |
Ein BASIC-Programm vom Netzwerk-Dateiserver-Einheit x laden (1–7). Erfordert eine Celestite-Platine und netfs.py auf einem PC. |
| SAVE | "NETx:filename" |
Das aktuelle BASIC-Programm auf Netzwerk-Dateiserver-Einheit x speichern. |
| DIR | NETx: |
Die Verzeichnisliste vom Netzwerk-Dateiserver-Einheit x anzeigen. |
| LOAD | "CMT:filename" |
Ein BASIC-Programm vom Kassettenband laden. |
| SAVE | "CMT:filename" |
Das aktuelle BASIC-Programm auf Kassettenband speichern. |
BASIC MZ-2Z009E (Floppy Disk)
BASIC 2Z-009ERFS". Programme koennen ueber alle unterstuetzten Geraete geladen, gespeichert und aufgelistet werden, indem ein Geraete-Praefix im Dateinamen verwendet wird.
| Befehl | Parameter | Beschreibung |
|---|---|---|
| LOAD | "RFSx:filename" |
Ein BASIC-Programm vom RFS-SD-Kartenlaufwerk x laden (1–7, abgebildet auf SD-Laufwerke 4–10). |
| SAVE | "RFSx:filename" |
Das aktuelle BASIC-Programm auf dem angegebenen RFS-SD-Kartenlaufwerk speichern. |
| DIR | RFSx: |
Die Verzeichnisliste des angegebenen RFS-SD-Kartenlaufwerks anzeigen. |
| LOAD | "FDx:filename" |
Ein BASIC-Programm vom Floppy-Disk-Laufwerk x laden. |
| SAVE | "FDx:filename" |
Das aktuelle BASIC-Programm auf Floppy-Disk-Laufwerk x speichern. |
| DIR | FDx: |
Die Floppy-Disk-Verzeichnisliste anzeigen. |
| LOAD | "QDx:filename" |
Ein BASIC-Programm vom Quick Disk-Laufwerk x laden. |
| SAVE | "QDx:filename" |
Das aktuelle BASIC-Programm auf Quick Disk-Laufwerk x speichern. |
| DIR | QDx: |
Die Quick Disk-Verzeichnisliste anzeigen. |
Software-Architektur
| Modul | Ziel-ROM | Groesse | Bank | Beschreibung |
|---|---|---|---|---|
| rfs.asm | User | 2 KB | 0 | Primaerer RFS-Einstiegspunkt, Befehlsverteiler und Befehlstabelle. Enthaelt die Bank-Switching-Infrastruktur, die von allen Baenken gemeinsam genutzt wird. |
| rfs_bank1.asm | User | 2 KB | 1 | Floppy-Disk-Controller (FDC)-Funktionen. Verarbeitet Laufwerksauswahl, Boot, Floppy-Kopie (FC), Floppy-zu-Band (FD2T) und Band-zu-Floppy (T2FD). |
| rfs_bank2.asm | User | 2 KB | 2 | SD-Karten-Controller. SPI-Treiber, SD-Karten-Initialisierung, SDCFS-Verzeichnis und Datei-Lese/Schreib-Operationen. |
| rfs_bank3.asm | User | 2 KB | 3 | Monitor-Speicher-Dienstprogramme: Hex-Dump, Speichereditor, Speicherkopie, SD-Karten-Datei-Dump (DUC), I/O-Port-Lesen/Schreiben (IN / OUT), Band-SD-Kopie (T2SD / SD2T), Druckertest. |
| rfs_bank4.asm | User | 2 KB | 4 | CMT (Kassetten)-Controller: Bandladen, Speichern und Verifizieren. |
| rfs_bank5.asm | User | 2 KB | 5 | Allgemeine Hilfsfunktionen: formatierte Ausgabe, String-Routinen und gemeinsam genutzter Hilfs-Code. |
| rfs_bank6.asm | User | 2 KB | 6 | Z80-Assembler/Disassembler Opcode-Tabelle 1, PRINTMSG-Funktion und Meldungstext-Infrastruktur. |
| rfs_bank7.asm | User | 2 KB | 7 | Z80-Assembler/Disassembler Opcode-Tabelle 2, Z80-Disassembler (DASM), DRAM-Speichertest und 8253-Timer-Test. |
| rfs_bank8.asm | User | 2 KB | 8 | Z80 interaktiver Assembler (ASM). |
| rfs_bank9.asm | User | 2 KB | 9 | ROM-Verzeichnis, Dateisuche, Lade- und Druckfunktionen (von Bank 0 verschoben, um Platz freizumachen). |
| rfs_bank10.asm | User | 2 KB | 10 | Reserviert / frei. |
| rfs_bank11.asm | User | 2 KB | 11 | Hilfebildschirm. |
| cbios_bank1.asm | User | 2 KB | 12 | CP/M CBIOS: Audiofunktionen, RTC, Tastatur und Low-Level-Dienstprogramme. |
| cbios_bank2.asm | User | 2 KB | 13 | CP/M CBIOS: Bildschirmtreiber und ANSI-Terminal-Emulation. |
| cbios_bank3.asm | User | 2 KB | 14 | CP/M CBIOS: SD-Karten-Treiber (stellt CP/M-Laufwerke A:–G: bereit). |
| cbios_bank4.asm | User | 2 KB | 15 | CP/M CBIOS: Floppy-Disk-Controller. |
| monitor_sa1510.asm | Monitor | 4 KB | 0 | Originale SA-1510 Monitor-ROM (40-Spalten). |
| monitor_80c_sa1510.asm | Monitor | 4 KB | 1 | SA-1510-Monitor fuer 80-Spalten-Anzeige angepasst. |
| cbios.asm | Monitor | 4 KB | 2 | CP/M 2.2 CBIOS-Kernel (wird beim CP/M-Boot nach 0xC000–0xCFFF geladen). |
| rfs_mrom.asm | Monitor | 4 KB | 3 | RFS Monitor-ROM-Dienstprogramme. Da Code, der aus dem User-ROM ausgefuehrt wird, sich nicht selbst umschalten kann, um den restlichen ROM zu scannen, laufen diese Routinen aus Monitor-ROM Bank 3, um in den User-ROM-Flash-RAMs gespeicherte MZF-Dateien zu scannen und zu laden. |
| monitor_1z-013a.asm | Monitor | 4 KB | 4 | MZ-1Z-013A Monitor-ROM (MZ-700 / MZ-1200 Variante). |
| monitor_80c_1z-013a.asm | Monitor | 4 KB | 5 | MZ-1Z-013A-Monitor fuer 80-Spalten-Anzeige angepasst. |
| rfs_mrom_bank6.asm | Monitor | 4 KB | 6 | Z80-Assembler/Disassembler Opcode-Tabelle 1 (MROM-Kopie). |
| rfs_mrom_bank7.asm | Monitor | 4 KB | 7 | Z80-Assembler/Disassembler Opcode-Tabelle 2 (MROM-Kopie). |
| ipl.asm | Monitor | 4 KB | 8 | Initial Program Loader. |
| rfs_mrom_bank9.asm | Monitor | 4 KB | 9 | RFS-Meldungstexte-Repository. |
CP/M 2.2 wird mit 47 KB nutzbarem Programm-RAM unterstuetzt. Nur CCP und BDOS befinden sich im RAM (und koennen von Anwendungen ueberschrieben werden); das CBIOS selbst residiert in Monitor-ROM Bank 2 und User-ROM Baenken 12–15 und verbraucht ueberhaupt kein Programm-RAM.
Die Monitor-ROM erzeugt ausserdem mehrere weitere Monitor-Varianten, die gleichzeitig gebaut werden: ein Standard-SA-1510, ein 80-Spalten-SA-1510, eine Kuma-80-Version (ausgewaehlt ueber das
KUMA80_ENA-Flag in rfs_definitions.asm) sowie Hi-Load-Varianten von SA-1510 und 80-Spalten-SA-1510, die verwendet werden, wenn DRAM den gesamten Bereich 0x0000–0xCFFF fuellen muss.
Build-System
Der empfohlene Weg, RFS zu bauen, ist das automatisierte Setup-Skript fuer Ihre Plattform (siehe Automatisiertes Setup und Build unten) — es installiert die wenigen benoetigten externen Werkzeuge, holt die Inhalte, bereitet die Umgebung vor und kann den ersten Build fuer Sie ausfuehren, ohne dass tiefgehende Kenntnisse der Werkzeuge oder Konfiguration erforderlich sind. Die manuellen Schritte weiter unten sind fuer fortgeschrittene Benutzer und Teil-Builds gedacht.
Voraussetzungen
| Werkzeug | Hinweise |
|---|---|
| Java (JRE 8+) | Erforderlich zum Ausfuehren des GLASS Z80-Assemblers. java muss im PATH sein. |
| bash | Alle Build-Skripte sind bash-Skripte. |
| perl | Erforderlich fuer mzftool.pl. |
| gcc / make | Erforderlich zum Kompilieren von cpmtools aus dem Quellcode (erfolgt automatisch beim ersten Build). |
| dd, cat, stat | Standard-Linux-Dienstprogramme, die von den Verpackungsskripten verwendet werden. |
Der GLASS Z80-Assembler (glass.jar) ist im Verzeichnis tools/ enthalten — keine separate Installation erforderlich.
Automatisiertes Setup und Build (empfohlen)
macOS / Linux / WSL — setup_RFS.sh
chmod +x setup_RFS.sh
./setup_RFS.sh
Windows 10 / 11 — setup_RFS_windows_native.ps1 (empfohlen — nativ, kein WSL). In einer PowerShell-Eingabeaufforderung:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
.\setup_RFS_windows_native.ps1
Das native Skript verwendet winget, um Git for Windows (das bash, coreutils, perl und curl bereitstellt) und eine Temurin JRE (Java, fuer den GLASS-Assembler) zu installieren, klont das Repository, holt das Inhaltspaket und fuehrt ./build.sh ueber Git Bash aus — ohne WSL, Docker oder Neustart. Der RFS-Build benoetigt unter Windows keinen C-Compiler, da zwei vorgefertigte Host-Werkzeuge (tools/cpmcp.exe und tools/sdtool.exe) mitgeliefert werden.
Windows 10 / 11 — setup_RFS_windows.ps1 (Alternative — baut innerhalb von WSL2 / Ubuntu). In einer Administrator-PowerShell:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
.\setup_RFS_windows.ps1
Diese WSL-Variante installiert WSL2 + Ubuntu, falls sie noch nicht vorhanden sind (dies erfordert einen einmaligen Neustart — neu starten, Ubuntu einmal ueber das Startmenue starten, um Ihren Linux-Benutzernamen/Ihr Passwort anzulegen, dann das Skript erneut ausfuehren). Anschliessend fuehrt es setup_RFS.sh innerhalb von Ubuntu aus. Bevorzugen Sie das native Skript oben, sofern Sie nicht ausdruecklich eine WSL-Umgebung wuenschen.
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. Die Eingabeaufforderungen erscheinen in dieser Reihenfolge:
Nur Windows (in PowerShell, bevor das Linux-Setup laeuft):
| Eingabeaufforderung | Standard | Was zu tun ist |
|---|---|---|
Continue anyway? [y/N] (nur, wenn nicht als Administrator gestartet) |
Nein | Antworten Sie mit N, oeffnen Sie PowerShell erneut ueber Als Administrator ausfuehren und beginnen Sie von vorn — die Installation von WSL erfordert Administratorrechte. |
Install WSL2 + Ubuntu now? [y/N] (nur, wenn WSL / Ubuntu fehlt) |
Nein | Antworten Sie mit y. Windows installiert WSL2 + Ubuntu und fordert Sie dann zum Neustart auf. Starten Sie nach dem Neustart Ubuntu einmal, um Ihren Linux-Benutzer anzulegen, und fuehren Sie das Skript erneut aus. |
Repo URL [https://git.eaw.app/eaw/RFS.git] |
oeffentliches Repo | Druecken Sie Enter fuer das oeffentliche RFS-Repository oder fuegen Sie eine andere URL ein (z. B. das private Entwicklungs-Repo). |
macOS / Linux / WSL (in der Linux-/Ubuntu-Shell):
| Eingabeaufforderung | Standard | Was zu tun ist |
|---|---|---|
Install now? [Y/n] (nur, wenn Werkzeuge fehlen) |
Ja | Druecken Sie Enter. Das Skript installiert die fehlenden Werkzeuge mit Ihrem Paketmanager (apt / dnf / pacman oder Homebrew unter macOS); Sie werden moeglicherweise nach Ihrem sudo-Passwort gefragt. Unter macOS loest es zunaechst den Installer fuer die Xcode Command Line Tools aus und benoetigt Homebrew. |
Repo URL [https://git.eaw.app/eaw/RFS.git]: (nur, wenn nicht bereits in einem Checkout) |
oeffentliches Repo | Druecken Sie Enter fuer das oeffentliche Repo oder fuegen Sie die private Repo-URL ein. (Unter Windows uebersprungen — der PowerShell-Schritt hat Ihre Wahl bereits weitergegeben.) |
Install directory [~/RFS]: (nur beim Klonen) |
~/RFS |
Druecken Sie Enter, um nach ~/RFS zu klonen, oder geben Sie einen anderen Pfad ein. |
Remove <dir> and re-clone …? [y/N] (nur, wenn dieses Verzeichnis bereits ein anderes Repo enthaelt) |
Nein | Antworten Sie nur mit y, wenn Sie sicher sind, dass Sie dieses Verzeichnis loeschen und neu klonen moechten; andernfalls N und waehlen Sie ein anderes Installationsverzeichnis. |
Download and install them now? [Y/n] (Inhalts-Images, ~110 MB) |
Ja | Druecken Sie Enter, um die MZF-/Disk-/CP/M-/BASIC-Inhalte aus RFS_Files.zip herunterzuladen — fuer einen vollstaendigen Build erforderlich. Antworten Sie nur mit n, wenn Sie sie bereits ueber einen parallelen SharpSoft-Checkout haben. |
Run the first build now (./build.sh -m …)? [Y/n] |
Ja | Druecken Sie Enter, um sofort zu bauen — dies verifiziert die gesamte Umgebung. Der erste Build verwendet -m, um die MZF-Quellen in MZB/ zu verarbeiten, und ist langsamer als spaetere Builds. |
Sie werden moeglicherweise auch nach Ihrem sudo-Passwort (Paketinstallation) und Ihren git-Anmeldedaten gefragt, falls Sie ein privates Repository gewaehlt haben.
Nach dem Setup — erneut bauen
Wenn das Setup abgeschlossen ist, gibt es den Checkout-Pfad aus. Um spaeter neu zu bauen:
cd ~/RFS # oder das von Ihnen gewaehlte Verzeichnis
source ./rfs_env.sh # nur macOS (fuegt GNU coreutils + die JRE zum PATH hinzu); anderswo harmlos
./build.sh -m # ERSTER Build: MZF -> MZB verarbeiten, dann alles bauen
./build.sh # spaetere Builds (-m nur erneut, wenn sich MZF-Quellen aendern)
./build.sh -h # Varianten und Optionen auflisten
Unter Windows oeffnen Sie das Ubuntu-Terminal (Startmenue → “Ubuntu” oder wsl in PowerShell eingeben) und fuehren dieselben Befehle in ~/RFS aus. Die ROM-Images erscheinen in ~/RFS/roms.
build.sh baut standardmaessig alle Hardware-Varianten; uebergeben Sie einen oder mehrere Variantennamen (sfd700, romdisk_mz80a, picoz80_mz80a, picoz80_kuma, picoz80_mz700, picoz80_mz1500, picoz80_mz80k oder all), um nur diese zu bauen. Die Auswahl einer Variante konfiguriert alles automatisch — keine Quellcode-Aenderungen noetig. Optionen: -m (MZF verarbeiten), -s (gemeinsame Assemblierung ueberspringen), -c (clean), -v (ausfuehrlich), -h (Hilfe).
Fortgeschritten: Build-Ziel-Flags
Fuer die meisten Builds benoetigen Sie diesen Abschnitt nicht — die Auswahl einer Variante mit build.sh (oben) konfiguriert alles automatisch. Der zugrunde liegende Mechanismus ist ein Satz von Flags in asm/include/rfs_definitions.asm; genau eines der folgenden wird fuer ein bestimmtes Ziel auf 1 gesetzt (alle anderen 0), was build.sh pro Variante fuer Sie erledigt. Bearbeiten Sie sie nur fuer eine benutzerdefinierte Konfiguration von Hand:
| Flag | Ziel | Beschreibung |
|---|---|---|
BUILD_ROMDISK |
RomDisk-Karte | MZ-80A mit 4x512 KB Flash-RAM + SDXC-Kartenerweiterung. |
BUILD_SFD700 |
SFD-700 | Sharp Floppy-Disk-Schnittstellenkarte. Keine SD-Karte. |
BUILD_PICOZ80 |
picoZ80 | Raspberry Pi Pico-basierte Z80-Ersatzplatine. |
Zusaetzliche optionale Flags in derselben Datei:
| Flag | Standard | Beschreibung |
|---|---|---|
KUMA80_ENA |
0 | Auf 1 setzen, wenn das Kuma 40/80-Spalten-Upgrade installiert ist. |
VIDEOMODULE_ENA |
0 | Auf 1 setzen, wenn das 40/80-Spalten-Farb-Video-Module installiert ist. |
FUSIONX_ENA |
0 | Auf 1 setzen, wenn RFS auf der tranZPUter FusionX-Platine laeuft. |
HW_SPI_ENA |
1 | Hardware-SPI (RomDisk v2+ PCB). Fuer alle aktuellen Platinen auf 1 lassen. |
ENADEBUG |
0 | Assembly-Zeitliche Debug-Ausgabe aktivieren. |
Manueller Build und was build.sh tut
Wenn Sie das Setup-Skript nicht verwenden moechten (oder einen CI-Build skripten), koennen Sie direkt klonen und bauen — Sie muessen die Voraussetzungen weiterhin installiert haben und bei einem frischen, eigenstaendigen Klon die Inhalts-Images selbst holen (oder setup_RFS.sh ausfuehren, das dies fuer Sie erledigt):
git clone --recurse-submodules https://git.eaw.app/eaw/RFS.git
cd RFS
# Vollstaendiger Build (assembliert alle ROMs, verpackt ROM-Images, erstellt SD-Karten-Image):
./build.sh
# Vollstaendiger Build einschliesslich erneuter Verarbeitung aller MZF-Anwendungsdateien
# (nur erforderlich, wenn sich MZF-Quelldateien in MZF/ geaendert haben):
./build.sh -m
build.sh fuehrt die folgenden Schritte der Reihe nach aus:
- Kompiliert
cpmtoolsaus dem Quellcode (nur beim ersten Lauf) und fuegt das Ergebnis zumPATHhinzu. tools/assemble_rfs.sh— assembliertrfs.asmundrfs_mrom.asmzuroms/rfs.romundroms/rfs_mrom.rom.tools/assemble_cpm.sh— assembliert das CP/M 2.2 CBIOS (cbios.asm,cbios_bank1–4.asm,cpm22.asm) zuroms/*.rom.tools/assemble_roms.sh— assembliert alle Monitor-Varianten (SA-1510, 80c SA-1510, 1Z-013A, Hi-Load-Varianten, Kuma-Version, IPL) und MZF-Anwendungsdateien (SA-5510, MS-BASIC-Varianten usw.) inroms/undMZB/.tools/make_roms.sh— verpackt die assemblierten ROMs und MZF-Anwendungen in Flash-ROM-Images (siehe Ausgabedateien unten).tools/make_cpmdisks.sh— erstellt CP/M-Disk-Images in RAW- und CPC Extended Disk-Format fuer jedes der vorbelegten CP/M-Laufwerkssets.tools/make_sdcard.sh— stellt das endgueltige SD-Karten-Image aus 10 RFS-Laufwerks-Images und 7 CP/M-Disk-Images zusammen.
Die einzelnen Skripte koennen auch direkt aus dem Verzeichnis tools/ fuer Teil-Builds ausgefuehrt werden.
Ausgabedateien
Nach einem erfolgreichen Build enthaelt das Verzeichnis roms/:
| Datei | Flash-Chip | Beschreibung |
|---|---|---|
MROM_ROMDISK_256.bin |
SST39SF040 (Monitor ROM) | Monitor-ROM-Image fuer den RomDisk-Build. Enthaelt SA-1510, 80c SA-1510, CP/M CBIOS, RFS-MROM-Dienstprogramme, 1Z-013A-Monitore, Assembler/Disassembler-Opcode-Tabellen, IPL und Meldungstexte ueber 16x4 KB Seiten. |
MROM_PICOZ80_256.bin |
SST39SF040 (Monitor ROM) | Monitor-ROM-Image fuer den picoZ80-Build (Bank-Reihenfolge unterscheidet sich von ROMDISK). |
USER_ROM_256.bin |
SST39SF040 (User ROM 1) | User ROM 1: RFS-Baenke 0–11, CP/M CBIOS-Baenke 12–15, CP/M 2.2-Image und ein gepackter Satz von MZF-Anwendungen. |
USER_ROM_II_256.bin |
SST39SF040 (User ROM 2) | User ROM 2: zusaetzliche MZF-Anwendungen. |
USER_ROM_III_256.bin |
SST39SF040 (User ROM 3) | User ROM 3: zusaetzliche MZF-Anwendungen. |
SFD700_256.bin |
SST39SF040 | SFD-700-ROM: MZ-80A AFI Floppy-ROM (0x00000–0x00FFF), MZ-700 Floppy-ROM (0x01000–0x01FFF), RFS-Firmware (0x02000–0x0BFFF), dann ROM-Dateisystem. |
SHARP_MZ80A_RFS_IMAGE_0–9.img |
SD-Karte | Zehn RFS-Laufwerks-Images (eines pro Laufwerk 0–9). |
SHARP_MZ80A_RFS_CPM_IMAGE_1.img |
SD-Karte | Kombiniertes SD-Karten-Image: 10 RFS-Laufwerke gefolgt von 7 CP/M-Disk-Images. Direkt auf eine SD-Karte kopieren. |
Programmierung der Flash-ROMs
Die ROM-Images werden mit einem TL866 oder kompatiblen Programmer auf SST39SF040 (512 KB) Flash-RAM-Chips geschrieben:
# Monitor ROM (RomDisk-Build):
minipro --infoic /path/to/minipro/infoic.xml -p SST39SF040 -s -w roms/MROM_ROMDISK_256.bin
# User ROM 1:
minipro --infoic /path/to/minipro/infoic.xml -p SST39SF040 -s -w roms/USER_ROM_256.bin
# SFD-700:
minipro --infoic /path/to/minipro/infoic.xml -p SST39SF040 -s -w roms/SFD700_256.bin
Beschreiben des SD-Karten-Images
Schreiben Sie das kombinierte SD-Karten-Image direkt mit dd auf die SD-Karte:
# Ersetzen Sie /dev/sdX durch Ihren SD-Karten-Geraeteknoten:
dd if=roms/SHARP_MZ80A_RFS_CPM_IMAGE_1.img of=/dev/sdX bs=512
sync
Keine Partitionierung erforderlich. Das SDCFS-Image beginnt bei Sektor 0. Setzen Sie die SD-Karte in den Leser auf der RomDisk-Platine ein.
Anwendungen zu den ROM-Laufwerken hinzufuegen
Anwendungen, die in den Flash-ROM-Laufwerken gespeichert werden sollen, muessen zuerst vom MZF-Format in sektorausgerichtete Binaer-Images konvertiert werden. Platzieren Sie die MZF-Dateien im entsprechenden Unterverzeichnis unter MZF/ und fuehren Sie aus:
tools/processMZFfiles.sh
Dies konvertiert alle MZF-Dateien in 128-Byte- und 256-Byte-sektorausgerichtete Images in MZB/. Sie werden dann automatisch von make_roms.sh erfasst.
Um auszuwaehlen, welche Anwendungen in jedem ROM-Laufwerk erscheinen, bearbeiten Sie tools/make_roms.sh und passen Sie die addMZFToROMImageList-Aufrufe an. Jeder Aufruf nimmt vier Flags (in ROMDISK-Build einschliessen, in SFD700-Build einschliessen, in picoZ80-Build einschliessen, reserviert) und den Pfad zum sektorierten Binaer:
# Format:
# addMZFToROMImageList <ROMDISK> <SFD700> <picoZ80> <reserved> "<MZB path>"
#
# Beispiel — in allen Builds einschliessen:
addMZFToROMImageList 1 1 1 0 "${MZB_PATH}/Common/sa-5510_rfs.${SECTORSIZE}.bin"
# Beispiel — nur RomDisk und picoZ80:
addMZFToROMImageList 1 0 1 0 "${MZB_PATH}/MZ-80A/defender.${SECTORSIZE}.bin"
Anwendungen werden in der aufgefuehrten Reihenfolge gepackt, wobei zuerst User ROM 1 gefuellt wird, dann User ROM 2 und 3. Platzieren Sie Anwendungen, die Sie immer verfuegbar haben moechten, am Anfang der Liste.
Build-Werkzeuge Referenz
| Skript / Werkzeug | Beschreibung |
|---|---|
build.sh |
Build-Skript auf oberster Ebene. Fuehrt alle nachfolgenden Schritte der Reihe nach aus. Uebergeben Sie -m, um auch MZF-Anwendungsdateien erneut zu verarbeiten. |
tools/assemble_rfs.sh |
Assembliert rfs.asm und rfs_mrom.asm → roms/rfs.rom, roms/rfs_mrom.rom. |
tools/assemble_cpm.sh |
Assembliert das CP/M 2.2 CBIOS und den Kernel → roms/*.rom. |
tools/assemble_roms.sh |
Assembliert alle Monitor-ROM-Varianten und MZF-Anwendungsbinaerdateien. Verarbeitet die vier MS-BASIC-Build-Varianten ueber eine BUILD_VERSION EQU, die vor jedem Durchlauf in include/msbasic_buildversion.asm geschrieben wird. |
tools/make_roms.sh |
Verpackt ROM- und MZF-Binaerdateien in Flash-ROM-Images fuer ROMDISK-, SFD700- und picoZ80-Ziele. |
tools/make_cpmdisks.sh |
Erstellt CP/M-Disk-Images in RAW-Format (fuer SD-Karte) und CPC Extended Disk-Format (fuer Floppy-Emulatoren oder physisches Kopieren). |
tools/make_sdcard.sh |
Kombiniert RFS-Laufwerks-Images und CP/M-Disk-Images zu einem einzigen SD-Karten-Image. |
tools/processMZFfiles.sh |
Konvertiert MZF-Anwendungsdateien in 128-Byte- und 256-Byte-sektorausgerichtete Images in MZB/. |
tools/mzftool.pl |
Perl-Skript zum Erstellen, Extrahieren und Inspizieren von MZF-Format-Images. |
tools/sdtool |
Binaer-Werkzeug, das die RFS-SD-Karten-Verzeichnisstruktur aufbaut und mit MZF-/Binaer-Anwendungen befuellt. |
tools/nasconv |
Konvertiert NASCOM-Kassettenimage-Dateien in das MZ-80A-ladbare Format und bildet MS-BASIC-Token-Werte nach Bedarf neu ab. |
tools/glass.jar |
Mitgelieferter GLASS Z80-Assembler (Java). Wird von allen drei Assembly-Skripten verwendet. |
tools/MZFD/MZFDTool |
Erstellt und verwaltet Raw-Floppy-Disk-Images fuer den MZ-700 FDC. Befehle: format (leeres Image erstellen), dir (Verzeichnis auflisten), add (MZF-Datei hinzufuegen), extract (Datei in MZF extrahieren), boot (Boot-Programm festlegen). Standard-Image: MZ700.img. |
tools/MZQD/MZQDTool |
Erstellt und verwaltet Quick Disk (QD)-Images fuer den MZ-700. Befehle: format (leeres Image erstellen), dir (Verzeichnis auflisten), add (MZF-Datei hinzufuegen). Standard-Image: MZ700.qd. |
cpmtools/ |
cpmtools-Quellcode (cpmcp, cpmls, cpmrm usw.). Wird automatisch beim ersten Build kompiliert und in tools/ installiert. |
SD Card Filing System
SDCFS-Struktur
| FLAG1 | FLAG2 | FILE NAME | START SECTOR | SIZE | LOAD ADDR | EXEC ADDR | RESERVED |
|---|---|---|---|---|---|---|---|
| 1 Byte | 1 Byte | 17 Bytes | 4 Bytes | 2 Bytes | 2 Bytes | 2 Bytes | 3 Bytes |
| Feld | Beschreibung |
|---|---|
| FLAG1 | Bit 7 = 1: gueltiger Eintrag. Bit 7 = 0: inaktiv / geloescht. |
| FLAG2 | MZF-Ausfuehrungstyp (0x01 = Binaerprogramm). |
| FILE NAME | Standard 17-Zeichen MZF-Dateiname. |
| START SECTOR | Erster Sektor innerhalb dieses Laufwerks-Images, an dem die Dateidaten beginnen. |
| SIZE | Tatsaechliche Byte-Anzahl der Dateidaten. |
| LOAD ADDR | RAM-Adresse, an die die Dateidaten geladen werden. |
| EXEC ADDR | Automatische Ausfuehrungsadresse fuer Binaerdateien. |
| RESERVED | Derzeit nicht verwendet. |
Jeder Dateiblock ist fest 64 KB gross, entsprechend der maximalen CMT (Band)-Blockgroesse. Dies haelt das Layout einfach und ermoeglicht es, Dateien genau so zu lesen oder zu schreiben, als waeren sie auf Band, was transparente SD-CMT-Kopieroperationen ermoeglicht.
SD-Karten-Layout
ADDRESS SECTOR CONTENT
00000000 00000 +-------------------------------------------------------------+
| RFS DRIVE 0 |
00000000 00000 | Directory entry 000 (32 bytes) |
| ... |
00001FE0 0000F | Directory entry 255 (32 bytes) |
00002000 00010 | File block 0 (64 KB) |
| ... |
00FF2000 7FF90 | File block 255 (64 KB) |
01001FFF 8000F +-------------------------------------------------------------+
... (RFS-Laufwerke 1–8 folgen dem gleichen Muster)
09012000 48090 +-------------------------------------------------------------+
| RFS DRIVE 9 |
0A013FFF 5009F +-------------------------------------------------------------+
... Auffuellung bis zur 256 MB-Grenze ...
10000000 80000 +-------------------------------------------------------------+
| CP/M DISK IMAGE 0 (16 MB, 32 sectors x 1024 tracks) |
11000000 88000 +-------------------------------------------------------------+
| CP/M DISK IMAGE 1 |
| ... |
XX000000 | CP/M DISK IMAGE n |
+-------------------------------------------------------------+
SD-Karten-Organisation
Das von den Repository-Werkzeugen erstellte SD-Karten-Image ist wie folgt vorbelegt:
| RFS-Laufwerk | Inhalt |
|---|---|
| 0 | Allgemeine und MZ-80A Maschinencode-Programme. |
| 1 | MZ-80K Maschinencode-Programme. |
| 2 | MZ-700 Maschinencode-Programme. |
| 3 | MZ-800 / MZ-1500 Maschinencode-Programme. |
| 4 | MZ-80B / MZ-2000 Maschinencode-Programme. |
| 5 | BASIC-Programme, Typ 2 (MZ-80A). |
| 6 | BASIC-Programme, Typ 2 (MZ-80K). |
| 7 | BASIC-Programme, Typ 5 (MZ-700 / MZ-800). |
| 8 | Sonstige Programme. |
| 9 | Sonstige Programme. |
| CP/M-Laufwerk | User# | Disk-Image | Inhalt |
|---|---|---|---|
| 0 | 0 | CPM00_SYSTEM | CP/M-Systemprogramme |
| 1 | CPM01_TURBOP | Turbo Pascal | |
| 2 | CPM02_HI_C | Hi-Soft C | |
| 3 | CPM03_FORTRAN80 | Fortran 80 | |
| 4 | CPM04_MBASIC | Microsoft BASIC 80/85 | |
| 5–7 | CPM05–07_COBOL80 | Cobol v1.3, v2.0, Cobol 80 | |
| 8 | CPM08_Z80FORTH | Z80 Forth | |
| 9 | CPM09_CPMTEX | CP/M TeX | |
| 10 | CPM10_DISKUTILFUNC5 | Disk-Dienstprogramme | |
| 11 | CPM11_MAC80 | Macro Assembler 80 | |
| 12 | CPM29_ZSID_v14 | ZSID Debugger | |
| 13–14 | CPM32–33_ZCPR3 | ZCPR3 CCP-Erweiterung | |
| 1 | 0 | CPM12_PASCALMTP_v561 | Pascal v5.61 |
| 1 | CPM26_TPASCAL_v300a | Turbo Pascal v3.00a | |
| 2–11 | CPM13–22_MTPUG_01–10 | Pascal User Group Disks 01–10 | |
| 2 | 0–2 | CPM23–25_PLI / PLI80 | PLI Compiler, PLI 80 v1.3, v1.4 |
| 3 | CPM28_PLM80 | PLM 80 | |
| 4–6 | CPM27,30,31_WORDSTAR | WordStar v3.0, v3.3, v4.0 | |
| 3–6 | 0–9 | CPM_MC_C0–F9 | Grant Searle CP/M-Sammlung Disks C0–F9 |
Handbuecher
| Handbuch | Beschreibung |
|---|---|
| Benutzerhandbuch | RFS beziehen, Monitorbefehlsreferenz, SD-Laufwerke verwenden, BASIC, CP/M und Fehlerbehebung |
| Technischer Leitfaden | Hardware-Plattformen, Speicherarchitektur, Bank-Switching, SDCFS-Design, CP/M CBIOS und vollstaendige Build-System-Referenz |
| Entwicklerhandbuch | Z80-Assembler-Einfuehrung, vollstaendige Quellmodul-Walkthroughs (einschliesslich Bank-Switching-Interna) und Anleitungen zum Hinzufuegen neuer Befehle und Hardware-Ziele |
Danksagungen
Lizenzen
Keine kommerzielle Nutzung dieses Designs oder jeglicher Hardware-/Firmware-Komponente ohne ausdrueckliche Genehmigung des Autors. Diese Bedingung ueberwiegt alle durch die GNU GPL 3-Lizenz eingeraeumten Rechte.
Die GNU General Public License v3
Die Quelldateien werden in der Hoffnung verteilt, dass sie nuetzlich sein werden, jedoch OHNE JEGLICHE GEWAEHRLEISTUNG; sogar ohne die stillschweigende Gewaehrleistung der MARKTFAEHIGKEIT oder EIGNUNG FUER EINEN BESTIMMTEN ZWECK. Siehe die GNU General Public License fuer weitere Details.
Sie sollten eine Kopie der GNU General Public License zusammen mit diesem Programm erhalten haben. Falls nicht, siehe http://www.gnu.org/licenses/.