MZ-80A RomDisk — Technischer Leitfaden

RomDisk Technischer Leitfaden

Dieser Leitfaden dokumentiert das Hardware-Design der Sharp MZ-80A RomDisk-Platine, die Speicherarchitektur, die Bank-Steuerungsmechanismen, die SPI-Schnittstellenoptionen, das Software-Modul-Layout, das SD Card Filing System Design, die CP/M-Implementierung und das vollstaendige Build-System. Er richtet sich an Benutzer, die verstehen moechten, wie das RomDisk auf Systemebene funktioniert, Firmware aus dem Quellcode erstellen oder neue Software entwickeln moechten, die die gebankte ROM-Umgebung nutzt.
Fuer die taegliche Nutzung und die Referenz der Monitor-Befehle siehe das RFS Benutzerhandbuch. Fuer Z80-Assembler-Quellcode-Erlaeuterungen siehe das RFS Entwicklerhandbuch.

Hardware-Versionen

Die RomDisk-Platine ist eine Tochterkarte fuer den Sharp MZ-80A. Sie wird in den MZ-80A-Erweiterungsanschluss gesteckt und verwendet Lifter-Sockel, um die Chip-Select-Leitungen des Monitor-ROM (4 KB bei 0x0000-0x0FFF) und des User-ROM (2 KB bei 0xE800-0xEFFF) abzufangen und beide durch gebanktes Flash-RAM zu ersetzen. Drei Hardware-Revisionen wurden produziert.

Version 1.1
Die urspruengliche Produktionsplatine. Hauptmerkmale:
  • Ein 512 KB SST39SF040 Flash-RAM im Monitor-ROM-Sockel (U1) -- bietet acht 4-KB-Bank-Slots.
  • Ein 512 KB Flash-RAM im User-ROM-Sockel (U4) -- bietet 256 Zwei-Kilobyte-Bank-Slots, wobei RFS nur die ersten zwoelf verwendet.
  • Einfacher D-Typ-Latch fuer die Bank-Auswahl -- das Bank-Register ist permanent zugaenglich ohne Schutzmechanismus.
  • SD-Kartenzugriff ueber Software-Bitbang-SPI durch die Paralleldruckerport-Pins des Sharp MZ-80A. Diese Methode ist funktional, aber langsam im Vergleich zum spaeteren Hardware-SPI.
v1.1-Platinen verwenden das PP_SPI_ENA Build-Flag. Es gibt keinen codierten Latch; die Bank-Register koennen jederzeit beschrieben werden.

Version 2.0
Eine wesentliche Ueberarbeitung mit Hardware-SPI, zusaetzlichen Flash-Slots, optionalem SRAM und einem Sicherheitsmechanismus fuer die Bank-Register:
  • Codierter Latch -- ein 74HCT191 4-Bit-Aufwaertszaehler steuert die I/O-Steuerregister-Dekodierlogik. Beim Einschalten oder nach einem Reset-Lesevorgang steht der Zaehler auf 0 und die Bank-Register sind nicht zugaenglich (Lesevorgaenge von 0xEFF8-0xEFFF liefern Flash-ROM-Daten wie ueblich). Die Steuerregister werden erst nach genau 16 aufeinanderfolgenden Lesevorgaengen im Bereich 0xEFF8-0xEFFF aktiv, die den Zaehler bis zu seinem Terminal-Count-Ausgang inkrementieren. Dies verhindert versehentliche Bank-Umschaltungen, wenn Z80-Code zufaellig auf diesen Adressbereich waehrend der normalen Ausfuehrung zugreift.
  • Hardware-SPI-Schaltung -- 74HCT595 Seriell-zu-Parallel-Schieberegister (MOSI/CLK-Ausgang) und 74HCT165 Parallel-zu-Seriell-Schieberegister (MISO-Eingang), getaktet mit 8 MHz von einem 16 MHz Quarzoszillator. SD-Kartensockel direkt auf der Platine montiert.
  • Zweiter und dritter User-ROM-Flash-Slot (U5 und U6) -- jeweils ein weiterer 512 KB SST39SF040. BK2A19/BK2A20-Bits im BNKCTRL-Register waehlen aus, welcher der drei User-ROM-Chips aktiv ist.
  • Optionales 512 KB SRAM -- AS6C4008, gesockelt. Vorgesehen fuer zukuenftige Verwendung als zusaetzlicher gebankter Arbeitsspeicher.
  • JP6-Loetbruecke waehlt aus, ob die Hardware-SPI-Schaltung oder eine Software-Bitbang-SPI-Schaltung bestueckt wird.
Bekannter Fehler: Der Z80 fuehrt DRAM-Refresh-Zyklen mit den Adressbuspins A0-A7 (der Refresh-Adresse) durch. Wenn diese Zyklen zufaellig eine Adresse im Bereich 0xEFF8-0xEFFF erzeugten, wurde der 74HCT191-Zaehler unbeabsichtigt inkrementiert, wodurch der codierte Latch unerwartet oeffnete und versehentliche Bank-Register-Schreibvorgaenge zuliess.

Version 2.1 (Aktuell)
Eine gezielte Fehlerbehebungsrevision zur Loesung des v2.0-Refresh-Adressproblems. Aenderungen gegenueber v2.0:
  • UND-Gatter aus diskreten Dioden (D1/D2), hinzugefuegt am Takteingang des Zaehlers. Das Gatter kombiniert das Adressdekodierungssignal mit dem Z80-Signal /MREQ, sodass nur echte Speicher-Lese-Buszyklen (keine Refresh-Zyklen) den 74HCT191-Zaehler inkrementieren koennen. Refresh-Zyklen aktivieren /RFSH und deaktivieren /MREQ, sodass sie blockiert werden.
  • 0xEFF9 neu verdrahtet als dedizierte Loesch-Adresse fuer den codierten Latch. Ein einzelner Lesevorgang von 0xEFF9 setzt den 74HCT191-Zaehler auf 0 zurueck und deaktiviert den Zugriff auf die I/O-Steuerregister.
  • PCB-Siebdruck bereinigt -- Bauteilbezeichnungen korrigiert.
Version 2.1 ist die aktuelle empfohlene Version. Alle neuen Builds sollten v2.1 verwenden.

Speicherarchitektur

Die Z80-CPU des Sharp MZ-80A adressiert 64 KB Speicher. Das RomDisk ersetzt beide ROM-Fenster durch gebanktes Flash-RAM und fuegt acht I/O-Steuerregister in den oberen acht Bytes des User-ROM-Adressbereichs hinzu. Der vollstaendige Bereich 0x1200-0xCFFF bleibt fuer Benutzerprogramme verfuegbar.

Z80-Adressraum-Layout
Address     Size    Contents
─────────────────────────────────────────────────────────────────────────────
0x0000      4 KB    Monitor-ROM-Fenster — 4-KB-Seite in 512 KB MROM Flash (U1)
                    Banks: 0 = SA-1510 (40-Spalten, Standard bei Einschalten)
                           1 = SA-1510 80-Spalten
                           2 = CP/M CBIOS Kernel
                           3 = RFS Monitor-ROM-Hilfsprogramme
                           4 = 1Z-013A MZ-700 Monitor
                           5 = 1Z-013A 80-Spalten
                           6 = IPL (Initial Program Loader)
                           7 = (leer)
0x1000      256 B   MZ-80A Systemvariablen und Stack
0x1200    ~46 KB    Benutzer-RAM (Hauptprogrammbereich, 0x1200–0xCFFF)
0xCFFF
0xD000      12 KB   Video-RAM + speicherabgebildetes I/O (Sharp MZ-80A Mainboard-Hardware)
0xE800       2 KB   User-ROM-Fenster — 2-KB-Seite in 512 KB UROM Flash (U4/U5/U6)
                    Banks 0–7:  RFS-Firmware-Module
                    Banks 8–11: CP/M CBIOS-Module
0xEFF8       8 B    Codierter-Latch-Lesebereich (v2+): 16 Lesevorgaenge hier entsperren Steuerregister
                    Auch Flash-ROM-Daten wenn Latch geschlossen
0xEFF9       1 B    Codierter-Latch-Reset: ein Lesevorgang sperrt die Steuerregister wieder (v2.1+)
0xEFFB       1 B    HWSPIDATA  — Hardware-SPI-Datenregister (v2+)
0xEFFC       1 B    HWSPISTART — Hardware-SPI-Start/Trigger-Register (v2+)
0xEFFD       1 B    BNKSELMROM — Monitor-ROM-Bank-Auswahlregister
0xEFFE       1 B    BNKSELUSER — User-ROM-Bank-Auswahlregister
0xEFFF       1 B    BNKCTRL    — Bank-Steuerregister
0xF000       4 KB   Floppy-AFI-ROM-Bereich (Original Sharp Floppy-Controller-ROM)
─────────────────────────────────────────────────────────────────────────────

Monitor-ROM-Banks (je 4 KB)
Das Monitor-ROM-Fenster bei 0x0000-0x0FFF wird ueber acht 4-KB-Banks im MROM-Flash-Chip bei U1 bankumgeschaltet. Bank 0 wird beim Einschalt-Reset ausgewaehlt.
Bank Module Description
0 monitor_sa1510.asm Original SA-1510 40-Spalten-Monitor. Die Standard-Bank beim Einschalten.
1 monitor_80c_sa1510.asm SA-1510 gepatcht fuer 80-Spalten-Anzeige (erfordert Kuma 80-Spalten-Upgrade).
2 cbios.asm CP/M 2.2 CBIOS-Kernel – zur Laufzeit nach 0xC000-0xCFFF waehrend des CP/M-Boots umplatziert.
3 rfs_mrom.asm RFS Monitor-ROM-Hilfsprogramme – MZF-Image-Scanning und -Laden. Laeuft im MROM-Bereich, damit das User-ROM umgeschaltet werden kann, ohne sich selbst auszublenden.
4 monitor_1z-013a.asm MZ-700 1Z-013A Monitor-Variante.
5 monitor_80c_1z-013a.asm 1Z-013A Monitor gepatcht fuer 80-Spalten-Anzeige.
6 ipl.asm Initial Program Loader.
7 (leer) Unbenutzt.

User-ROM-Banks (je 2 KB)
Das User-ROM-Fenster bei 0xE800-0xEFFF wird ueber 12 aktive Banks verteilt auf die drei User-ROM-Flash-Chips (U4, U5, U6) bankumgeschaltet. Das BNKSELUSER-Register waehlt die 2-KB-Seite innerhalb des aktiven Chips; die BK2A19- und BK2A20-Bits im BNKCTRL waehlen, welcher Chip adressiert wird.
Bank Module Description
0 rfs.asm Primaerer RFS-Einstiegspunkt, Befehlsverteiler, Befehlstabelle, Bank-Switch-Infrastruktur, die von allen Banks gemeinsam genutzt wird.
1 rfs_bank1.asm Floppy-Disk-Controller (FDC) Funktionen – Laufwerksauswahl und FDC-Boot.
2 rfs_bank2.asm SD-Karten-Controller – SPI-Treiber, SD-Karten-Initialisierung, SDCFS-Verzeichnis und Datei-Lesen/Schreiben.
3 rfs_bank3.asm Speicher-Hilfsprogramme – Hex-Dump (D), Speicherbearbeitung (M), Speicherkopie (CP), Kassette-zu-SD-Kopie (T2SD/SD2T).
4 rfs_bank4.asm CMT (Kassetten-)Controller – Kassetten-Laden, -Speichern und -Verifizieren.
5 rfs_bank5.asm (Reserviert / unbenutzt.)
6 rfs_bank6.asm Hilfebildschirm, Meldungszeichenketten, ASCII-zu-Sharp-Zeichensatz-Konvertierungstabelle.
7 rfs_bank7.asm Speichertest (R), 8253-Timer-Test (T).
8 cbios_bank1.asm CP/M CBIOS – Audio-Funktionen und Low-Level-Hilfsprogramme.
9 cbios_bank2.asm CP/M CBIOS – Bildschirmtreiber und ANSI-Terminal-Emulation.
10 cbios_bank3.asm CP/M CBIOS – SD-Karten-Laufwerkstreiber (CP/M-Laufwerke A:-G:).
11 cbios_bank4.asm CP/M CBIOS – Floppy-Disk-Controller.

Bank-Steuerung

Codierter-Latch-Mechanismus
Auf v2.0- und v2.1-Platinen sind die Bank-Steuerregister durch einen 74HCT191 4-Bit-Aufwaertszaehler geschuetzt, der als codierter Latch fungiert. Der Mechanismus verhindert, dass Z80-Code, der im Programm-RAM laeuft, versehentlich ROM-Banks umschaltet, indem er einfach eine Adresse liest oder schreibt, die zufaellig in den Bereich 0xEFF8-0xEFFF faellt.
Funktionsweise:
  1. Beim Einschalten oder nach einem Latch-Reset-Lesevorgang steht der 74HCT191-Zaehler auf 0. Die I/O-Steuerregister-Dekodierlogik ist deaktiviert -- Lesevorgaenge von 0xEFF8-0xEFFF liefern Flash-ROM-Daten wie ueblich, und Schreibvorgaenge auf BNKSELMROM/BNKSELUSER/BNKCTRL haben keine Wirkung.
  2. Zum Entsperren der Steuerregister: Fuehren Sie genau 16 Lesezyklen auf eine beliebige Adresse im Bereich 0xEFF8-0xEFFF aus. Jeder Lesevorgang inkrementiert den Zaehler um eins. Auf v2.1-Platinen zaehlen nur echte Speicher-Lese-Buszyklen (mit aktiviertem /MREQ); Z80-DRAM-Refresh-Zyklen (die /RFSH aktivieren und /MREQ deaktivieren) werden durch das D1/D2-UND-Gatter blockiert und inkrementieren den Zaehler nicht.
  3. Wenn der Zaehler den Terminal Count (16) erreicht, wird der TC-Ausgang aktiv und aktiviert die I/O-Steuerregister-Dekodierlogik. Die Bank-Auswahlregister sind jetzt beschreibbar.
  4. Zum Wiedersperren: Lesen Sie einmal von der Adresse 0xEFF9. Dies aktiviert die Zaehler-Lade-/Reset-Leitung, setzt den Zaehler auf 0 zurueck und deaktiviert sofort die I/O-Steuerregister.
Die Anzahl der zum Entsperren erforderlichen Lesevorgaenge kann ueber die CDLTCH1-3-Bits im BNKCTRL-Register angepasst werden, die den Startversatz des Zaehlers konfigurieren (effektiv koennen 1-16 Lesevorgaenge erforderlich sein). Die Standard-Firmware verwendet die volle 16-Lesevorgang-Sequenz.

Bank-Steuerregister (BNKCTRL, 0xEFFF)
Das BNKCTRL-Register steuert die SPI-Bitbang-Signale, die SD-Karten-Chipauswahl, die Konfiguration des codierten Latch und die User-ROM-Chipauswahl. Es ist nur beschreibbar (nachdem der codierte Latch entsperrt wurde).
Bits Name Description
0 BBCLK BitBang SPI Clock Ausgang. Wird von Software-SPI-Routinen umgeschaltet, um das SPI-Taktsignal zu erzeugen.
1 SDCS SD Card Chip Select – aktiv niedrig. Auf 0 setzen zum Auswaehlen der SD-Karte, 1 zum Abwaehlen.
2 BBMOSI BitBang SPI MOSI Datenausgang. Auf den Bitwert setzen, bevor BBCLK umgeschaltet wird.
5:3 CDLTCH1-3 Konfigurationsbits fuer den codierten Latch. Setzt den anfaenglichen Zaehlerversatz und steuert, wie viele Lesevorgaenge von 0xEFF8-0xEFFF zum Entsperren der Register erforderlich sind. Standard 0 = 16 Lesevorgaenge erforderlich.
6 BK2A19 User-ROM-Geraete/Adress-Auswahlbit 0. Zusammen mit BNKSELUSER zur Adressierung der vollen 512 KB jedes User-ROM-Chips und zur Auswahl zwischen U4, U5 und U6.
7 BK2A20 User-ROM-Geraete/Adress-Auswahlbit 1. Siehe BK2A19.
Die BK2A19/BK2A20-Bits erweitern den effektiven User-ROM-Adressraum ueber die 256 Zwei-Kilobyte-Banks hinaus, die allein ueber BNKSELUSER verfuegbar sind. Zusammen mit BNKSELUSER bilden sie eine zusammengesetzte Adresse in die drei User-ROM-Flash-Chips und waehlen aus, welcher Chip aktiv ist (U4, U5 oder U6) und welche 2-KB-Seite darin auf das Fenster 0xE800-0xEFFF abgebildet wird.

SPI-Schnittstelle

Drei SPI-Implementierungen werden unterstuetzt und werden zur Build-Zeit durch das Setzen genau eines Flags auf 1 in rfs_definitions.asm ausgewaehlt. In einem bestimmten Firmware-Build darf nur eines aktiviert sein.
Flag Value Method Speed Hardware Required
HW_SPI_ENA 1 Hardware-SPI – 74HCT595/74HCT165 Schieberegister, 16 MHz Quarz 8 MHz – vergleichbar mit Flash-ROM-Zugriffsgeschwindigkeit v2.0/v2.1 PCB mit JP6 fuer Hardware-SPI konfiguriert
SW_SPI_ENA 1 Software-Bitbang-SPI ueber Z80-I/O-Port-Bitmanipulation von BNKCTRL ~300 KB/s – schneller als Floppy, langsamer als ROM v2.0/v2.1 PCB mit JP6 fuer Software-SPI konfiguriert
PP_SPI_ENA 1 Paralleldruckerport-Bitbang (Original-v1.1-Methode) Am langsamsten Nur v1.1 PCB
Hardware-SPI-Betrieb (v2.0/v2.1-Platinen):
  1. Schreiben Sie das Datenbyte in HWSPIDATA (0xEFFB). Das 74HCT595-Schieberegister laedt das Byte fuer die Uebertragung.
  2. Schreiben Sie einen beliebigen Wert in HWSPISTART (0xEFFC), um die Uebertragung zu starten. Das Schieberegister taktet das Byte auf der MOSI-Leitung synchronisiert zum 16-MHz-Oszillator aus, waehrend der 74HCT165 gleichzeitig MISO-Bits von der SD-Karte einschiebt.
  3. Lesen Sie HWSPIDATA (0xEFFB), um das empfangene Byte abzurufen. Der vollstaendige 8-Bit-Austausch ist in weniger Zeit abgeschlossen als ein einzelner Z80-Speicherlesezyklus -- deshalb ist der Hardware-SPI-Durchsatz mit der Flash-ROM-Zugriffsgeschwindigkeit vergleichbar.
Software-Bitbang-SPI-Betrieb: Die Firmware manipuliert die Felder BBCLK (Bit 0), BBMOSI (Bit 2) und SDCS (Bit 1) des BNKCTRL-Registers direkt in einer engen Schleife, wobei BBCLK einmal pro Bit umgeschaltet wird, waehrend BBMOSI auf den Wert des ausgehenden Bits gesetzt wird. MISO wird von einem dedizierten Eingangsportbit abgetastet. Dies erreicht etwa 300 KB/s, was fuer SD-Kartenuebertragungen ausreichend ist.
Parallelport-Bitbang (nur v1.1): Verwendet die Paralleldruckerport-Daten- und Statusleitungen des Sharp MZ-80A als SPI-Signale. Funktional, aber die langsamste der drei Optionen aufgrund des Printer-Port-I/O-Timings.

Softwarearchitektur

Die vollstaendige Modultabelle -- jede Quelldatei, ihr Ziel-Flash-Chip, ROM-Bank und Funktion:
Module Flash Chip Bank Size Description
rfs.asm User (U4) 0 2 KB Befehlsverteiler, Befehlstabelle, Bank-Switch-Infrastruktur.
rfs_bank1.asm User (U4) 1 2 KB Floppy-Disk-Controller – Laufwerksauswahl und FDC-Boot.
rfs_bank2.asm User (U4) 2 2 KB SD-Karten-Controller – SPI-Treiber, SDCFS-Verzeichnis, Datei-Lesen/Schreiben.
rfs_bank3.asm User (U4) 3 2 KB Speicher-Hilfsprogramme – D, M, CP, T2SD, SD2T.
rfs_bank4.asm User (U4) 4 2 KB CMT-Controller – Kassetten-Laden, -Speichern, -Verifizieren.
rfs_bank5.asm User (U4) 5 2 KB (Reserviert / unbenutzt.)
rfs_bank6.asm User (U4) 6 2 KB Hilfebildschirm, Meldungszeichenketten, Zeichensatz-Konvertierung.
rfs_bank7.asm User (U4) 7 2 KB Speichertest (R), Timer-Test (T).
cbios_bank1.asm User (U4) 8 2 KB CP/M CBIOS – Audio, Low-Level-Hilfsprogramme.
cbios_bank2.asm User (U4) 9 2 KB CP/M CBIOS – Bildschirmtreiber, ANSI-Terminal-Emulator.
cbios_bank3.asm User (U4) 10 2 KB CP/M CBIOS – SD-Karten-Laufwerkstreiber (Laufwerke A:-G:).
cbios_bank4.asm User (U4) 11 2 KB CP/M CBIOS – Floppy-Disk-Controller.
monitor_sa1510.asm Monitor (U1) 0 4 KB Original SA-1510 Monitor-ROM (40-Spalten).
monitor_80c_sa1510.asm Monitor (U1) 1 4 KB SA-1510 gepatcht fuer 80-Spalten-Anzeige.
cbios.asm Monitor (U1) 2 4 KB CP/M 2.2 CBIOS-Kernel (waehrend CP/M-Boot nach 0xC000 umplatziert).
rfs_mrom.asm Monitor (U1) 3 4 KB RFS Monitor-ROM-Hilfsprogramme – ROM-Scanning, MZF-Laden.
monitor_1z-013a.asm Monitor (U1) 4 4 KB MZ-700 1Z-013A Monitor-Variante.
monitor_80c_1z-013a.asm Monitor (U1) 5 4 KB 1Z-013A gepatcht fuer 80-Spalten-Anzeige.
ipl.asm Monitor (U1) 6 4 KB Initial Program Loader.
Da der Z80 immer nur einen 2-KB-Abschnitt des User-ROM sehen kann, enthaelt jede User-ROM-Bank eine Kopie des Bank-Switching-Stubs an einer festen Adresse innerhalb des Fensters. Wenn Bank 0 eine Routine in Bank 3 aufrufen muss, schreibt sie die Ziel-Banknummer in BNKSELUSER, springt zum bekannten Einstiegspunkt in der neu gemappten Bank, fuehrt den erforderlichen Code aus, schreibt Bank 0 zurueck in BNKSELUSER und kehrt zurueck. Dieser Mechanismus macht den gesamten Code von 12 x 2 KB = 24 KB User-ROM aus jedem Ausfuehrungskontext zugaenglich.
Wichtige Einschraenkung bei v2.0/v2.1-Platinen: Keine eng gekoppelte Befehlssequenz im User-ROM-Bank-Code darf den Adressbereich 0xEFF8-0xEFFF ueberstreichen, da wiederholte Lesevorgaenge in diesem Bereich den codierten Latch-Zaehler inkrementieren und schliesslich die Bank-Register unerwartet entsperren.

SD Card Filing System (SDCFS)

Anstatt FAT zu implementieren (was zu gross waere, um in die verfuegbaren 2-KB-ROM-Banks zu passen), verwendet die RomDisk-Firmware ein speziell entwickeltes Dateisystem namens SD Card Filing System (SDCFS). Das Design priorisiert Einfachheit und einen minimalen ROM-Speicherbedarf gegenueber Flexibilitaet.
Die SD-Karte wird roh verwendet -- es wird keine Partitionstabelle geschrieben. Das SDCFS-Image beginnt bei Byte 0 (Sektor 0) der Karte. CP/M-Disk-Images werden an der 256-MB-Grenze platziert, um sicherzustellen, dass alle 10 RFS-Laufwerke Platz haben, unabhaengig davon, wie voll sie werden.

Verzeichnisstruktur
Jedes SDCFS-Laufwerk enthaelt ein flaches Verzeichnis mit bis zu 256 Eintraegen. Jeder Eintrag ist genau 32 Bytes gross und verwendet eine Struktur, die vom Standard-MZF-Kassetten-Header-Format abgeleitet ist (dasselbe 32-Byte-Layout, das auf Sharp-MZ-Kassetten verwendet wird):
Field Bytes Description
FLAG1 1 Bit 7 = 1: gueltiger Eintrag. Bit 7 = 0: inaktiv / geloescht.
FLAG2 1 MZF-Ausfuehrungstyp (0x01 = Binaerprogramm).
FILE NAME 17 Standard 17-Zeichen MZF-Dateiname (Sharp-Zeichenkodierung).
START SECTOR 4 Erster SD-Karten-Sektor innerhalb dieses Laufwerk-Images, wo der Datenblock der Datei beginnt.
SIZE 2 Tatsaechliche Byteanzahl der Dateidaten.
LOAD ADDR 2 Z80-RAM-Adresse, an die die Dateidaten geladen werden.
EXEC ADDR 2 Auto-Ausfuehrungsadresse fuer Binaerdateien (wird nach dem Laden angesprungen, wenn ungleich Null).
RESERVED 3 Derzeit nicht verwendet.
Das Verzeichnis belegt die ersten 8 KB jedes Laufwerk-Images (256 Eintraege x 32 Bytes). Dateidaten folgen unmittelbar. Jeder Datei wird ein fester 64-KB-Block zugewiesen -- passend zur maximalen Sharp-MZ-Kassettenband-Blockgroesse -- was das Layout auf der Disk trivial einfach haelt und die SD-zu-Kassetten-Kopie zu einer direkten sektorausgerichteten Byte-fuer-Byte-Uebertragung macht.

SD-Karten-Layout
ADDRESS       CONTENT
────────────────────────────────────────────────────────────────────────
0x00000000    RFS DRIVE 0  (16 MB)
                0x00000000–0x00001FE0  Directory (256 × 32 B)
                0x00002000–0xFF2000    File blocks (256 × 64 KB)
0x01002000    RFS DRIVE 1  (gleiche Struktur)
...
0x09012000    RFS DRIVE 9  (gleiche Struktur)
0x0A014000    (Auffuellung bis zur 256-MB-Grenze)
────────────────────────────────────────────────────────────────────────
0x10000000    CP/M DISK IMAGE 0  (A:)  — 16 MB
0x11000000    CP/M DISK IMAGE 1  (B:)  — 16 MB
...
0x16000000    CP/M DISK IMAGE 6  (G:)  — 16 MB
────────────────────────────────────────────────────────────────────────

CP/M 2.2 Implementierung

CP/M 2.2 ist auf dem RomDisk als eingebaute Faehigkeit verfuegbar. Die Eingabe von CPM am RFS-Monitor-Prompt startet CP/M direkt von der SD-Karte. Der CP/M-TPA ist 47 KB gross; der CCP befindet sich bei 0x9C00 mit dem BDOS darueber, waehrend das gesamte CBIOS im ROM lebt (Monitor-ROM-Bank 2 plus User-ROM-Banks 8-11) und keinen Programm-RAM verbraucht.
Boot-Prozess
  1. Der RFS-Befehl CPM schaltet das Monitor-ROM auf Bank 2 (den CBIOS-Kernel), der den CP/M-Kaltstart-Einstiegspunkt bei 0x0000 enthaelt.
  2. Die CBIOS-Kaltstartroutine initialisiert die gesamte Hardware (Tastatur, Bildschirm, SD-Karte, Floppy falls vorhanden) und erstellt die Disk-Parameter-Header fuer jedes verfuegbare Laufwerk.
  3. Das CBIOS liest die CCP- und BDOS-Images von der CP/M-Systemdiskette auf der SD-Karte in den RAM bei 0x9C00.
  4. Die Steuerung wird an den CCP bei 0x9C00 uebergeben. CP/M laeuft jetzt.
Beim Warmstart (z.B. nachdem eine grosse Anwendung den CCP ueberschrieben hat) laedt der CBIOS-Warmstart-Vektor bei 0x0003 den CCP und BDOS von der Disk neu und tritt wieder in den CCP ein.
CBIOS-Modul-Layout
Das Custom BIOS ist auf fuenf ROM-Module aufgeteilt, damit keine einzelne 2-KB-Bank ueberschritten wird:
Module ROM Location Contents
cbios.asm Monitor-ROM-Bank 2 (0x0000-0x0FFF waehrend aktiv) Alle 17 CP/M CBIOS API-Vektoren, Kalt-/Warmstart-Handler, Interrupt-Handler, Disk-Parametertabellen.
cbios_bank1.asm User-ROM-Bank 8 Audio (Klingel, Melodie), Echtzeituhr-Routinen, Low-Level-Tastatur-Handler.
cbios_bank2.asm User-ROM-Bank 9 Bildschirmtreiber (Zeichenausgabe, Scrollen, Cursorsteuerung), ANSI/VT100-Terminal-Emulator.
cbios_bank3.asm User-ROM-Bank 10 SD-Karten-Laufwerkstreiber – uebersetzt CP/M 128-Byte-Sektorlesevorgaenge und -schreibvorgaenge in SDCFS-Laufwerk-Images an der 256-MB-Grenze.
cbios_bank4.asm User-ROM-Bank 11 Floppy-Disk-Controller – unterstuetzt physische CP/M-Disketten.
CP/M-Laufwerkskonfiguration
CP/M-Laufwerke werden waehrend des CBIOS-Kaltstarts auf SD-Karten-Disk-Images abgebildet. Die Standard-Laufwerkszuordnung ist:
CP/M Drive Image Contents
A: CP/M Disk Image 0 Betriebssystemprogramme, Turbo Pascal, Hi-Soft C, Fortran 80, MS-BASIC 80.
B: CP/M Disk Image 1 Pascal MTP v5.61, Turbo Pascal v3.00a, Pascal User Group Disketten.
C: CP/M Disk Image 2 PLI, PLM 80, WordStar v3.0/v3.3/v4.0.
D:-G: CP/M Disk Images 3-6 Grant Searle CP/M Sammlungsdisketten.

Build-System

Die gesamte Entwicklung erfolgt unter Linux (Debian/Ubuntu). Das Build-System ist eigenstaendig innerhalb des Repositorys. Der Einstiegspunkt auf oberster Ebene ist build.sh im Verzeichnis software/RFS/.

Voraussetzungen
Tool Purpose
Java JRE 8+ Fuehrt den GLASS Z80 Assembler aus (tools/glass.jar). java muss im PATH sein.
bash Alle Build-Skripte sind Bash-Shell-Skripte.
perl Erforderlich fuer tools/mzftool.pl zur MZF-Dateimanipulation.
gcc / make Kompiliert cpmtools beim ersten Build aus dem Quellcode (automatisch).
dd, cat, stat Standard-Linux-Hilfsprogramme, die von den Paketierungsskripten verwendet werden.
Der GLASS Z80 Assembler ist als tools/glass.jar mitgeliefert -- keine separate Installation erforderlich.

Build-Flags
Bearbeiten Sie asm/include/rfs_definitions.asm vor dem Build. Die SPI-Schnittstellen-Flags sind gegenseitig ausschliessend -- setzen Sie genau eines auf 1:
Flag Default Description
HW_SPI_ENA 1 Hardware-SPI (v2.0/v2.1 PCB, JP6 fuer Hardware-SPI konfiguriert). Standard fuer alle aktuellen Platinen.
SW_SPI_ENA 0 Software-Bitbang-SPI (v2.0/v2.1 PCB, JP6 fuer Software-SPI konfiguriert).
PP_SPI_ENA 0 Parallelport-Bitbang-SPI. Nur fuer v1.1-Platinen.
FUSIONX_ENA 1 tranZPUter FusionX-Unterstuetzung einschliessen.
ENADEBUG 0 Debug-Ausgabe zur Assemblerzeit aktivieren.

Build-Schritte
git clone https://git.eaw.app/eaw/RFS.git
cd RFS/software/RFS

# Vollstaendiger Build -- assembliert alle ROMs, paketiert Flash-Images, erstellt SD-Karten-Image:
./build.sh

# Vollstaendiger Build einschliesslich Neuverarbeitung aller MZF-Anwendungsdateien
# (nur noetig, wenn Dateien in MZF/ geaendert wurden):
./build.sh -m
build.sh fuehrt die folgenden Schritte der Reihe nach aus:
  1. Kompiliert cpmtools aus dem Quellcode, falls noch nicht erstellt, und fuegt es dem PATH hinzu.
  2. tools/assemble_rfs.sh -- assembliert alle RFS-Firmware-Banks (rfs.asm, rfs_bank1-7.asm) in einzelne ROM-Images.
  3. tools/assemble_cpm.sh -- assembliert den CP/M 2.2 CBIOS (cbios.asm, cbios_bank1-4.asm) und den CP/M CCP+BDOS-Kernel.
  4. tools/assemble_roms.sh -- assembliert alle Monitor-Varianten (SA-1510, 80c, 1Z-013A, IPL) und MZF-Anwendungsbinarien.
  5. tools/processMZFfiles.sh (nur mit -m Flag) -- konvertiert rohe MZF-Dateien aus MZF/ in 128-Byte- und 256-Byte-sektoraufgefuellte Images in MZB/.
  6. tools/make_roms.sh -- paketiert assemblierte ROM-Images und MZF-Anwendungsbinarien in 512-KB-Flash-ROM-Images fuer jeden Flash-Chip.
  7. tools/make_cpmdisks.sh -- erstellt CP/M-Disk-Images im RAW-Format (fuer SD-Karte) und im CPC Extended Disk Format (fuer Floppy-Emulatoren).
  8. tools/make_sdcard.sh -- kombiniert die 10 RFS-Laufwerk-Images und 7 CP/M-Disk-Images zum endgueltigen SD-Karten-Image.

Ausgabedateien
Nach einem erfolgreichen Build enthaelt das roms/-Verzeichnis:
File Target Chip Description
MROM_ROMDISK_256.bin Monitor-ROM Flash (U1) Monitor-ROM-Image: SA-1510, 80c SA-1510, CP/M CBIOS, RFS mrom-Hilfsprogramme, 1Z-013A-Monitore, IPL ueber 7 x 4 KB Banks.
USER_ROM_256.bin User-ROM Flash U4 RFS-Banks 0-7, CP/M CBIOS-Banks 8-11, gepackte MZF-Anwendungen.
USER_ROM_II_256.bin User-ROM Flash U5 Zusaetzliche MZF-Anwendungen (Ueberlauf von U4).
USER_ROM_III_256.bin User-ROM Flash U6 Zusaetzliche MZF-Anwendungen (Ueberlauf von U5).
SHARP_MZ80A_RFS_IMAGE_0–9.img SD-Karte Einzelne RFS-Laufwerk-Images, eines pro Laufwerk (Laufwerke 0-9).
SHARP_MZ80A_RFS_CPM_IMAGE_1.img SD-Karte Kombiniertes Image: 10 RFS-Laufwerke + 7 CP/M-Disk-Images. Schreiben Sie diese Datei auf die SD-Karte.
Zum Programmieren der Flash-Chips verwenden Sie einen geeigneten SST39SF040-kompatiblen Programmierer. Schreiben Sie MROM_ROMDISK_256.bin auf U1, USER_ROM_256.bin auf U4 und die Ueberlauf-Images auf U5 und U6, falls bestueckt. Um das SD-Karten-Image zu schreiben, verwenden Sie dd:
dd if=roms/SHARP_MZ80A_RFS_CPM_IMAGE_1.img of=/dev/sdX bs=512 status=progress

Referenzseiten

Resource Link
RomDisk Projektseite /sharpmz-upgrades-romdisk/
RFS Projektseite /sharpmz-upgrades-rfs/
RFS Benutzerhandbuch /sharpmz-upgrades-rfs-usermanual/
RFS Entwicklerhandbuch /sharpmz-upgrades-rfs-developersguide/
RFS Technischer Leitfaden /sharpmz-upgrades-rfs-technicalguide/
RFS Galerie /sharpmz-upgrades-rfs-gallery/
SFD-700 mkII Technischer Leitfaden /sfd700-technicalguide/
picoZ80 Technischer Leitfaden /picoz80-technicalguide/
GLASS Z80 Assembler Mitgeliefert in tools/glass.jar
SST39SF040 Flash Datenblatt Microchip / Greenliant Produktseite
AS6C4008 SRAM Datenblatt Alliance Memory Produktseite