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:
Version 2.0
- 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.
PP_SPI_ENA Build-Flag. Es gibt keinen codierten Latch; die Bank-Register koennen jederzeit beschrieben werden.
Eine wesentliche Ueberarbeitung mit Hardware-SPI, zusaetzlichen Flash-Slots, optionalem SRAM und einem Sicherheitsmechanismus fuer die Bank-Register:
Version 2.1 (Aktuell)
- 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.
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/RFSHund 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.
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. |
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:
Bank-Steuerregister (BNKCTRL, 0xEFFF)
- 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.
- 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/RFSHaktivieren und/MREQdeaktivieren) werden durch das D1/D2-UND-Gatter blockiert und inkrementieren den Zaehler nicht. - 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.
- 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.
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):
- Schreiben Sie das Datenbyte in HWSPIDATA (0xEFFB). Das 74HCT595-Schieberegister laedt das Byte fuer die Uebertragung.
- 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.
- 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.
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
Boot-Prozess
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.
- Der RFS-Befehl
CPMschaltet das Monitor-ROM auf Bank 2 (den CBIOS-Kernel), der den CP/M-Kaltstart-Einstiegspunkt bei 0x0000 enthaelt. - Die CBIOS-Kaltstartroutine initialisiert die gesamte Hardware (Tastatur, Bildschirm, SD-Karte, Floppy falls vorhanden) und erstellt die Disk-Parameter-Header fuer jedes verfuegbare Laufwerk.
- Das CBIOS liest die CCP- und BDOS-Images von der CP/M-Systemdiskette auf der SD-Karte in den RAM bei 0x9C00.
- Die Steuerung wird an den CCP bei 0x9C00 uebergeben. CP/M laeuft jetzt.
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-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
Voraussetzungen
build.sh im Verzeichnis software/RFS/.
| 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
Build-Flags
tools/glass.jar mitgeliefert -- keine separate Installation erforderlich.
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. |
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:
- Kompiliert
cpmtoolsaus dem Quellcode, falls noch nicht erstellt, und fuegt es demPATHhinzu. tools/assemble_rfs.sh-- assembliert alle RFS-Firmware-Banks (rfs.asm, rfs_bank1-7.asm) in einzelne ROM-Images.tools/assemble_cpm.sh-- assembliert den CP/M 2.2 CBIOS (cbios.asm, cbios_bank1-4.asm) und den CP/M CCP+BDOS-Kernel.tools/assemble_roms.sh-- assembliert alle Monitor-Varianten (SA-1510, 80c, 1Z-013A, IPL) und MZF-Anwendungsbinarien.tools/processMZFfiles.sh(nur mit-mFlag) -- konvertiert rohe MZF-Dateien ausMZF/in 128-Byte- und 256-Byte-sektoraufgefuellte Images inMZB/.tools/make_roms.sh-- paketiert assemblierte ROM-Images und MZF-Anwendungsbinarien in 512-KB-Flash-ROM-Images fuer jeden Flash-Chip.tools/make_cpmdisks.sh-- erstellt CP/M-Disk-Images im RAW-Format (fuer SD-Karte) und im CPC Extended Disk Format (fuer Floppy-Emulatoren).tools/make_sdcard.sh-- kombiniert die 10 RFS-Laufwerk-Images und 7 CP/M-Disk-Images zum endgueltigen SD-Karten-Image.
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 |