Das Z9001-CP/M-System ist eine spezielle CP/A-Version, die sich in einigen wenigen Punkten vom Standard-CP/M unterscheidet (s. auch Beschreibung). Als Autor zeichnet sich Dr. Frank Schwarzenberg (Rossendorf) verantwortlich.
Hinweis: Fast alle Informationen auf dieser Seite wurden durch Analyse und Reassemblierung der Binärdateien gewonnen. Im Original heißen die Routinen also vermutlich anders; es kann auch sein, dass der eine oder andere Punkt falsch interpretiert wurde. Auch die Basis des Quellcodes, der CP/A-Quellcode, ist nur eine Vermutung und wurde nicht durch die eigentlichen Softwareautoren bestätigt.
Im Download-Paket cpm.zip liegen alle hier beschriebenen Dateien incl. reassemblierter und kommentierter Quelltexte für Selbstkompilierer).
Im ROM des Boot-Moduls (Bereich C000-C3FFh) stecken zwei Bestandteile:
Der Bootstrap-Lader wird mit
BOOT [Laufwerk A-F] [Seiten 1/2] [Dichte 4/8]
(robotron) bzw.
CPM [Laufwerk A-F] [Seiten 1/2] [Dichte 4/8]
(Rossendorf) gestartet.
Standardmäßig ist Laufwerk A, 2seitig, 80 Spuren eingestellt (Parameter A 2 8). Es wird also im ersten Floppy-Laufwerk eine 800K-Systemdiskette erwartet.
Bei Start von BOOT bzw. CPM wird der gesamte Boot-ROM nach 0400H kopiert und dort weiter gestartet. Der Bootstrap-Lader schaltet den Boot-ROM ab und liest nun von einem an das Rossendorfer Floppy-Modul angeschlossenen Floppy-Laufwerk die ERSTE Datei ein. Diese muss im Directory der Diskette an erster Stelle stehen, außerdem muss sie die ersten für Programme nutzbaren Blöcke auf der Diskette nutzen.
Ist der Dateiname @CPMZ9.COM (Bem: Fehler im Programm, s. im Quellcode binit7), und steht auf dem zweiten Programmbyte 11h, wird die Datei als gültige� CP/A-Systemdatei erkannt und auf die Adresse geladen, die im dritten und vierten Programmbyte angegeben ist (normalerweise 8000h). Dabei werden die ersten bereits gelesenen 128 Byte (der CPM-Lader) nicht mit abgelegt.
Das geladene Programm wird schließlich auf der Adresse Ladeadresse + 1600h gestartet (normalerweise 9600h).
Bislang sind 4 Varianten des Boot-Loader bekannt, die sich aber nur marginal unterscheiden:
Die Datei @CPMZ9.COM besteht aus mehreren Bestandteilen:
Offset | Ziel-Adresse | Inhalt |
0000h-007Fh | 0100h-017Fh | der CPM-Lader. Wird die Datei @CPMZ9 unter CP/M gestartet, wird über diesen Lader der Bootstrap-Mechanismus in Gang gesetzt und das CP/M neu geladen. Auf Adresse 0001h muss der Befehl >ld de, LOADADRESSstehen. |
0080h-167Fh | CC00h-D405h CCP, D406h-E1fFFh (*) | CCP und BDOS. Eine Kopie des CCP und BDOS wird im Shadow-RAM ab 4000h-55FFh abgelegt. |
1680h | 5600h-xxxx in Shadow-RAM | Shadow-BIOS. Enthält die eigentlichen BIOS-Funktionen |
xxx | 0180h | Boot-Init-Routine (u.a. Startmeldung und Kopierschutz) |
xxx | E200h (*) | Upper-BIOS. Enthält den BIOS-Sprungverteiler und Wrapper für die BIOS-Funktionen, die im Shadow-RAM liegen (i.W. Zu- und Abschalten des Shadow-RAM) |
(*) gilt für die meisten CP/M-Dateien. Bei größerem Upper-BIOS verändern sich die Adressen von CCP, BDOS und BIOS natürlich.
Je nach Startmethode (Start über Boot-Modul oder Start aus CP/M) erfolgt die Initialisierung des Shadow-RAMs unterschiedlich.
Beim Start über CP/M wird das Programm auf Adresse 100h gestartet (der CPM-Lader). Beim normalen Start über das Boot-Modul wird das Programm auf Adresse 9600h gestartet. Hier steht ein Sprung zur Routine START. Das ist eine Routine, die unabhängig von ihrer Lage im Speicher aufgerufen werden kann.
Beide Startmethoden kopieren alles nach dem CP/M-Lader folgende in den Shadow-RAM und enden mit einem Sprung zur Routine START1 im Shadow-RAM.
START1 (je nach BIOS-Version etwa bei Adresse 6060h im Shadow-RAM) kopiert die weiteren Bestandteile an ihre endgültigen Zieladressen (CCP+BDOS, UBIOS, Boot-Init) und startet die Boot-Init-Routine.
Die Boot-Init-Routine BINIT gibt die Startmeldung aus, initialisiert die Gerätetreibertabelle, führ den RAM-Test aus, kopiert einen Startbefehl in den CCP-Befehlspuffer und springt zu WBOOT im Shadow-BIOS. Dort wird am Ende das CCP gestartet.
Zur universellen Nutzung verschiedener Geräte unter den logischen Gerätenamen CON:, LST:, RDR: und PUN: wurde die bereits im Z9001-OS vorhandene Implementierung des I/O-Bytes und der Zuweisung von 4 unterschiedlichen physischen Treibern zu einem logischen Gerät unter CP/M mit genutzt. Das hat zur Folge, das das I/O-Byte abweichend vom Intel-CP/M-Standard auf Adresse 4 liegt.
Adr. | 3 | 4 |
---|---|---|
CP/M | I/O-Byte | akt. Laufwerk |
CP/M-Z9001 | akt. Laufwerk | I/O-Byte |
Programme, die das I/O-Byte direkt abfragen/verändern, müssen entsprechend angepasst werden.
Mehrere physische Drucker- und Consoltreiber sind im BIOS enthalten. Die Treiber können über das I/O-Byte (z.B. mit dem Programm STAT) jederzeit während des Betriebes ausgewählt werden. Folgende Treiber stehen zur Verfügung:
Console: (STAT CON:=TTY:) -> Tastatur-Beep Umwandlung Groß- <-> Kleinb. Behandlung der Sondertasten wie unter 3. angegeben. (STAT CON:=CRT:) -> Tastatur-Beep, keine Umwandlg. (zu empfehlen bei der Arbeit mit Basic) (STAT CON:=UC1:) -> ohne Beep und Umwandlung
Drucker: (STAT LST:=CRT:) -> V24-Userport 1200 Baud (STAT LST:=LPT:) -> V24-Userport 9600 Baud (STAT LST:=UL1:) -> Centronics-Userport
Der Druckeranschluss über den User-Port sind in mp 10/87 S. 311 ff. beschrieben. Für die Nutzung der robotron-Druckermodule gibt es ein CP/M-Systemprogramm V24.COM.
Der Floppy-Treiber basiert im Wesentlichen auf den Quellen BIOSDSK.MAC von CP/A und unterstützt damit auch dessen Komfortmerkmale. So werden eine Reihe gängiger Formate automatisch erkannt (800k (Standard), 780K, 720K, 624K, 400K, 360K, 200K, 148K, …).
Auf einer Diskette zu den Rossendorfer Modulen befanden sich eine ganze Reihe von CP/A-Versionen. Leider war keine Version ohne Shadow-RAM-Nutzung dabei (ungeschaltetes System). Prinzipiell sind die Filenamen für CP/M-Z9001-Systeme nach folgendem Schema aufgebaut:
CPM [S] TT KK .COM ^ ^ ^ ^ | | | |______ 2 Buchstaben Kennung fuer zus. Treiber | | |_________ 2 Buchst. Laufwerkstyp | | (D8 - 80 Track DS | | S8 - 80 Track SS | | D4 - 40 Track DS | | S4 - 40 Track SS) | |____________ 1 Buchst. geschaltetes System (s) |__________________3 Buchst. CPM (konstant) Zusatzkennungen: sm - mit Treiber fuer S6010 (SIO-Karte)
Zur Unterscheidung, ob ein System für das Rossendorfer oder das Robotron-Floppy-Modul ist, reicht eine Suche nach den beiden Bytes „db 98“. Wird diese Byte-Kombination gefunden, handelt es sich um ein System für Robotron-Floppy-Modul, wird dagegen die Bytefolge „db 10“ gefunden, handelt es sich um ein System für Rossendorf-Floppy-Modul.
Es gibt zwei unterschiedliche CCP-Versionen des CP/A: ccp und ccp2 haben beide den Eintrag CCP fuer shadow BDOS 09.12.88, aber unterscheiden sich. Die zugehörigen BDOSse sind gleich.
ccp2 scheint aktueller zu sein. Die Version ccp2 wurde gegen unterschiedliche Adressbereiche gelinkt (CC00h und CD00h) und bildet damit die Basis für ein eigenes „movecpm“, auch wenn die Quellen für CCP und BDOS nicht vorhanden sind.
Die CCP-Version kann anhand des Sprungziels auf Adresse 0080h (Beginn CCP) unterschieden werden.
Programmname | Systemmeldung | Floppy-Modul | Bemerkung |
---|---|---|---|
@CPMZ9.COM | Version 06.02.89, 5“(80,DS)/5“(80,DS) | Rossendorf | von Floppies älter 0080: c3 ef ce → ccp2, cc00 |
CPMZ9OK.COM | Version 18.01.89, 5„(80,DS)/5“(80,DS) | Robotron | U. Zander, mit speziellem RAM-Modul auf Adr. 71..73. Werden die Ports 72h auf 04h und 73h auf 05h geändert, läuft CPMZ9OK.COM auch mit dem Standard-RAM-Modul 0080: c3 e4 ce → ccp, cc00 |
CPM6010.COM | Version 23.02.89, 5„(80,DS)/5“(80,DS),S 6010 (SIO) 1200 Bd | Rossendorf | Main Version der Rossendorf-Floppys 0080: c3 ef ce → ccp2, cc00 |
CPMSD4.COM | Version 18.01.89, 5„(40,DS)/5“(40,DS) | Rossendorf | 0080: c3 e4 ce → ccp, cc00 |
CPMSD8.COM | Version 23.02.89, 5„(80,DS)/5“(80,DS) | Rossendorf | 0080: c3 ef ce → ccp2, cc00 |
CPMSDS8.COM | Version 18.03.89, 5„(80,DS)/5“(80,SS) | Rossendorf | 0080: c3 ef ce → ccp2, cc00 |
CPMSS4.COM | Version 23.02.89, 5„(40,SS)/5“(40,SS) | Rossendorf | 0080: c3 ef cf → ccp2, cd00 |
CPMSS4R.COM | Version 18.03.89, 5„(40,SS)/5“(40,SS) | Robotron | 0080: c3 ef ce → ccp2, cc00 |
CPMSS8.COM | Version 18.03.89, 5„(80,SS)/5“(80,SS) | Rossendorf | 0080: c3 ef ce → ccp2, cc00 |
Anschluss der S6010 bei CPM6010.COM als Tastatur und Drucker:
Leitungen Signal V 24 A1 103 TxD A2 105 RTS A6 104 RxD A7 106 CTS B1..B4 B7 B10.B13 102 GND ; Das BIOS entspricht CPMSD8, enthält aber RDR-, PUN- und LST-Treiber für die S6010. ; Die S6010 wird vermutlich über ein normales V24-Modul mit anderen Adressen ; angeschlossen und dient als Tastatur und Drucker SIODA equ 20h ; SIODA SIO-Kanal Daten SIOKD equ 22h ; SIOKD SIO-Kanal Kommandos CTC equ 24h ; Adr CTC Kanal 0
Seit 2007 gibt es von mir auch eine CP/M-Version, die ohne das spezielle 64K-Modul mit 2 RAM-Modulen arbeitet. Wird der Bootloader von Kassette geladen (oder er steckt in einem normalen ROM-Modul, das nicht abschaltbar sein muss), kann man CP/M ausschließlich mit einem Floppy-Modul betreiben. Hat man auch dieses nicht, bleibt zum Kennenlernen noch das Mini-CP/M.
Wer mehr RAM hat (z.B. mit einem Schalt-ROM-Modul umgebauten ROM-Modul), kann mit meinem CPM-58K noch mal 10K mehr freien Speicher unter CP/M nutzen.
Wer CP/M nur mal so probieren möchte, kann sich mein MINI-CP/M minicpm.zip herunterladen. Es läuft mit 2 RAM-Modulen und benötigt kein Floppy-Laufwerk! CP/M-Programme wie POWER können mit dem System-CLOAD geladen werden und werden nach dem Restart von CP/M mit CPM einfach mit GO gestartet.
Das 192K-Modul bzw. dessen Software ist für nativen und auch direkten CP/M-Betrieb vorbereitet. Leider ist diese Software nicht verfügbar. (Sie wurde von L. Elßner nicht komplett programmiert.)
Ich habe aber - aufbauend auf der Rossendorfer Lösung - ein BIOS geschrieben, das mit dem Robotron-Floppy-Modul arbeitet. Mit dem bereits im Modul gebrannten CP/M-Starter BOOT wird
wie bei den obigen Lösungen eine Datei @CPMZ9 von Diskette geladen und gestartet. Als Alternative zum speziellen 64K-RAM-Modul werden in meiner Lösung die RAM-Speicherbänke des 192K-Moduls genutzt. Es steht sogar noch eine 24K-RAM-Disk zur Verfügung!
Hinweis: Das Netzteil des Z9001 hat genug Power, um ein 1.6er Laufwerk mit anzutreiben. Deshalb habe ich die benötigten Spannungen gleich mit am Modul herausgeführt.
Anstelle eines 5 1/4„-Laufwerkes ist es günstiger, ein (leicht modifiziertes) 3.5“-Laufwerk zu nutzen. Die 3.5„-Disketten sind kleiner, robuster und leichter erhältlich. Auf der Webseite von U. Zander http://www.sax.de/~zander/ und beim KC-Klub http://www.iee.et.tu-dresden.de/~kc-club/ gibt es Hinweise dazu. HONI hat nun sogar eine ganze Seite {http://honi.hucki.de/ diesem Thema gewidmet!