CP/M v2.23
Uebersicht
Eine Version von CP/M wurde von Micro Technology fuer den Sharp MZ80A erstellt, aber da er keinen 80-Spalten-Bildschirm hatte, war er ohne Upgrade nicht sehr nuetzlich. Ich habe das 80-Spalten-Farb-Upgrade-Board und das Rom Filing System mit dem primaeren Ziel entwickelt, CP/M auf dem MZ80A zu realisieren. Die meisten Upgrades der Vergangenheit erfordern Schnitte und Verbindungen an der Original-PCB, was ich ausdruecklich vermeiden wollte -- ich moechte die Original-Hardware so erhalten, wie Sharp sie gebaut hat!
So begann ich, CP/M zum Laufen zu bringen, und entschied mich schliesslich, meine eigene ROM-basierte Version des CBIOS zu schreiben und sie mit dem BDOS+CCP von CP/M v2.23 zu kombinieren.
CP/M-Bootprozess
Der CP/M-Start erfolgt in zwei Phasen:
- Mit der originalen AFI-Floppydisk-Steuersoftware einen invertierten Bootsektor einlesen, pruefen, ob er an 0x0000 den Steuercode 0x02 + “IPLPRO” enthaelt, dann die Kontrolle an den eingebetteten Bootloader uebergeben
- Ab 0x9C00 CCP, BDOS und CBIOS laden. Das CBIOS uebernimmt die Kontrolle und wendet ein anderes Diskettenformat an.
CBIOS
Die folgenden API-Methoden muessen bereitgestellt werden:
| API-Methode | Beschreibung |
|---|---|
| BOOT | Kaltstart, alle Hardware initialisieren. |
| WBOOT | Warmstart, CCP+BDOS neu laden. |
| CONST | Konsolenstatus – pruefen, ob eine Tastatureingabe wartet. |
| CONIN | Konsoleneingabe – Taste von der Tastatur holen. |
| CONOUT | Konsolenausgabe – ein Zeichen auf den Bildschirm ausgeben. |
| LIST | Listengeraet-Ausgabe (Drucker). |
| HOME | Kopf der aktuellen Disk auf Spur 0 bewegen. |
| SELDSK | Eine Disk auswaehlen/aktivieren. |
| SETTRK | Diskspur fuer die naechste Lese-/Schreiboperation setzen. |
| SETSEC | Disksektor setzen. |
| SETDMA | Disk-Speicheradresse setzen. |
| READ | Einen Disksektor lesen. |
| WRITE | Einen Disksektor schreiben. |
| SECTRN | Sektoruebersetzung (logisch zu physisch). |
| ROM | Adresse | Beschreibung |
|---|---|---|
| 4K MROM | 0xC000 - 0xCFFF | CBIOS mit CP/M-API, Initialisierungsroutinen, ROM-Disk-Controller. |
| 2K Paged ROM | 0xE800 - 0xEFFF, Bank 8 | Sound, RTC, Tastatur und Hilfsfunktionen. |
| 2K Paged ROM | 0xE800 - 0xEFFF, Bank 9 | Bildschirm-I/O und ANSI-Terminal-Parser. |
| 2K Paged ROM | 0xE800 - 0xEFFF, Bank 10 | SD-Karten-Controller-Funktionalitaet. |
| 2K Paged ROM | 0xE800 - 0xEFFF, Bank 11 | Floppy-Disk-Controller-Funktionalitaet. |
*CPM-Laufwerke*
*Funktionen*
- Real Time Clock mit 50ms-Granularitaet
- Interrupt-gesteuerte Tastatur mit Puffer und automatischer Wiederholung
- Drei-Modus-Tastatursperre: Normal, Caps Lock, Shift Lock
- ANSI-Terminal-Funktionalitaet
- Umadressierbare Floppy-Disk-Laufwerke (1.44M, 720K, 320K)
- Umadressierbare ROM-Laufwerke (240K)
- Umadressierbare SD-Karten-16MB-Festplatten
- Verlassen zum Monitor ueber SHIFT+GRAPH+BREAK
Automatische Einrichtung und Erstellung (empfohlen)
TZFS_Files.zip, das die CP/M-Software enthaelt) herunter und kann den Build fuer Sie ausfuehren, ohne dass tiefgehende Kenntnisse der Toolchain erforderlich sind. Die manuellen, werkzeugweisen Schritte weiter unten sind fuer fortgeschrittene Benutzer und Teil-Neuerstellungen gedacht.
| Skript | Plattform | Hinweise |
|---|---|---|
setup_TZFS.sh |
macOS / Linux / WSL | Installiert eine Java-JRE (GLASS-Assembler), eine C-Toolchain + make (zum Kompilieren des mitgelieferten cpmtools-Submoduls), perl, git und (unter macOS) GNU coreutils und bash 4 ueber ein generiertes tzfs_env.sh. |
setup_TZFS_windows.ps1 |
Windows 10 / 11 – natives Git Bash, kein WSL | Verwendet winget, um Git for Windows und eine Temurin-17-JRE zu installieren, und baut dann ueber Git Bash. Kein C-Compiler erforderlich – ein vorgefertigtes tools\cpmcp.exe ist enthalten. |
macOS / Linux / WSL – setup_TZFS.sh
chmod +x setup_TZFS.sh
./setup_TZFS.sh
Windows 10 / 11 (natives Git Bash) – setup_TZFS_windows.ps1, an einer PowerShell-Eingabeaufforderung:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
.\setup_TZFS_windows.ps1
Die Skripte beachten die Umgebungsvariablen TZFS_REPO_URL (Standard https://git.eaw.app/eaw/TZFS.git) und TZFS_FILES_URL (Speicherort des Inhaltspakets), um die interaktiven Eingabeaufforderungen zu ueberschreiben. Der Build schreibt das TZFS-ROM, das CP/M-CBIOS/MZF und die CP/M-Disk-Images in das Verzeichnis roms/; kopieren Sie sie mit tools/copytosd.sh auf eine FAT32-formatierte SD-Karte. Fuer die vollstaendige Schritt-fuer-Schritt-Anleitung siehe den TZFS Technischen Leitfaden – Build-System.
CPM erstellen
cd <software>
tools/assemble_cpm.sh
Diskettenformate
diskdef MZ80A-A
seclen 256
tracks 40
sectrk 32
blocksize 2048
maxdir 64
skew 0
boottrk 1
os 2.2
end
diskdef MZ80A-1440
seclen 512
tracks 80
sectrk 36
blocksize 2048
maxdir 128
skew 0
boottrk 0
os 2.2
end
diskdef MZ80A-SDC16M
seclen 512
tracks 1024
sectrk 32
blocksize 8192
maxdir 512
skew 0
boottrk 0
os 2.2
end
MZ80A CP/M-Disks extrahieren
samdisk copy <MZ80A DISK NAME>.DSK <MZ80A DISK NAME>.RAW --cyls=40 --head=2 --sectors=16 --size=256
python3 -c "import sys; sys.stdout.buffer.write(bytes(~b & 0xFF for b in open('<MZ80A DISK NAME>.RAW','rb').read()))" > <MZ80A DISK NAME>_normal.RAW
cpmls -f MZ80A-A <MZ80A DISK NAME>_normal.RAW
cpmcp -f MZ80A-A <MZ80A DISK NAME>_normal.RAW 0:*.* /output/directory/
MZ80K CP/M-Disks extrahieren
MZ80B CP/M-Disks extrahieren
Entwicklerhandbuch
Lizenzen
Dieses Design, Hardware und Software, ist unter der GNU Public Licence v3 lizenziert.