Inhaltsverzeichnis

System

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).

Das Boot-Modul

Im ROM des Boot-Moduls (Bereich C000-C3FFh) stecken zwei Bestandteile:

  1. OS-Systemerweiterung „# „
    Hier wird nur der System-Prompt in „CP/M-System>“ verändert und so das Stecken der CP/M-Module optisch beim Einschalten des Z9001 angezeigt.
  2. Der Bootstrap-Lader

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:

Aufbau der Systemdatei @CPMZ9.COM

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.

Das I/O-Konzept

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

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, …).

Varianten der Systemdatei @CPMZ9.COM

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

CP/M-48K und CP/-58K

cpm_48k.jpg

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.

Mini-CP/M

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.

CP/M am 192K-Modul

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

cpm-vp.jpg cpm-vp2.jpg

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!