ZCPR D&J

ZCPR ist ein Ersatz für den standard ConsoleCommandProcessors (CCP) des CP/M. Er bietet viele nützliche Erweiterungen wie unten gezeigt. ZCPR ist in Z80-Assembler geschrieben und passt daher in die Grösse des Original-CCP (2k). Dies ist ein Vorteil gegenüber ähnlichen Erweiterungen (z.B. NZ-COM), alle Kommandi sind ohne Nachladen jederzeit verfügbar.  Dies sind die Kommandi des ZCPR-D&J (Auszug aus der Dokumentation):
DIR - directory command enhanced to list optionally all user areas
REN - standard rename command
USER- move to new user number area on same drive
SAVE- save specified number of TPA pages or records in a file
TYPE- display a file on the console with optional page break pauses
LIST- print command plus optional form feed insertion
PAGE- send form feed to list device
ERA - standard file erase command
ERAQ- file erase with confirmation query at each file
DFU - set default user number for .com search path
BELL- send a bell character to the console
SAK - pause until a key is struck on the console (Strike Any Key)
SCL - toggle multiple commands per line (Single Command on a Line)
GET - load a file into the TPA at any specified location
JUMP- process command tail and execute program at specified address
GO  - process command tail and execute program loaded at 100H
PEEK- display hexadecimal byte string starting with specified address
POKE- load hexadecimal byte string starting with specified address
BOOT- execute BIOS cold boot routine

Englischer Zeichensatz

Wenn das System mehrheitlich für Programmierung verwendet wird, sind die deutschen Umlaute doch eher hinderlich, vor allem in Turbo-Pascal. Zudem sehen die standard-CP/M Utilities mit ä ö anstelle [ ] seltsam aus. Das gepatchte 2732 EPROM-Image ist für den VKI Adapter

Assembler Bibliothek

Diese Bibliothek deckt die wichtigsten Bedürfnisse für Assembler-Programmierung mit dem ITT-3030 ab. Sie besteht aus zwei Hauptmodulen, einem Hardware-spezifischen (LIBH) und einem allgemeinen (LIBG), das auch auf anderen Systemen laufen sollte.
 
Das LIBH Modul enthält Funktionen für die schnelle Abfrage des Tastaturstatus direkt über Portzugriffe, den Serielladapter (Z80 SIO, polling- und interrupt Modi mit wahlweiser Unterstützung von RTS/CTS und/oder DTR/DSR Handshake in beiden Modi), für den Paralleladapter (Z80 PIO, alle Betriebsarten, zusätzlich einen Treiber für Paralleldrucker, jedoch ohne Interrupt-Möglichkeit). Ein Modul für Interrupt-Timer mit dem Combo-Chip mit Callback-Funktion ist ebenfalls vorhanden. Zusätzlich sind hier alle Video-Steuersequenzen und andere gerätespezifischen Parameter definiert.
 
Das LIBG Modul enthält Funktionen für Konsolen Ein- und Ausgabe, formatierte Eingabe, Cursor-Positionierung, verschiedene Konvertier- und Stringfunktionen, Disk Datei lesen und schreiben, Disk Sektor lesen und schreiben, ein Menuprogramm, BDOS Aufrufe mit gesicherten Registern sowie BIOS Calls. 

Beide Module enthalten eine Definitionsdatei, worin angegeben wird, welche Module für die Applikation benötigt werden. Die Bibliothek muss einmal pro Applikation mit den angepassten Definitionsdateien assembliert werden, damit nur die benötigten Module eingebunden werden. Schöner wäre inkrementelles Linken, dies wird aber von M80/L80 nicht unterstützt. Die Applikation selbst wird dann mit den daraus resultierenden Objektdateien gelinkt.
Zum Testen der einzenen Funktionen existiert ein spezielles Testprogramm, womit alle Funktionen der Bibliothek einzeln getestet werden können. Dabei sind die Funktionen nicht im Menu aufgeführt, die von anderen, aufgeführten Funktionen verwendet werden. Dieses Testprogramm kann auch als Vorlage für andere Applikationen verwendet werden.
Bemerkungen zum Interrupt-Betrieb
Das System verwendet Bank-Switching, der Interruptcode und die Vektortabelle müssen in einem von allen Banks sichtbaren Speicherbereich liegen. Dieser beginnt bei C000H. Das BDOS beginnt bei CC00H, der CCP 2k darunter. Ohne Ueberscheiben des CCP (die Applikation kann mit einem RET, ohne Warmstart, beendet werden) bleiben noch 1k, 3k mit Ueberschreiben des CCP und Beenden mit Warmstart für Vektortabelle und Interruptcode übrig.
Die Interrupt Vektortabelle muss auf einer Adresse MOD 16 = 0 beginnen (xxx0). Dies ist bedingt duch die Adressdekodierung der Adapterkarten. Aus dem gleichen Grund müssen die SIO-Interrupts am Ende der Serviceroutinen durch den Befehl 'return from int' beendet werden. RETI kann nicht decodiert werden. Beim PIO ist´s noch schlimmer. Dieser muss nach jedem Interrupt rückgesetzt und neu programmiert werden, er verfügt nicht über einen 'return from int' Befehl wie die SIO.
Bei Cursor-Positionierung mit laufenden Interrupts kommt es vor, dass der Cursor falsch positioniert wird. Gesehen mit laufendem 10mS Timer-Interrupt. Deshalb sollten Interrupts während der Cursor-Positionierung gesperrt werden.
Wird der Seriell-Adapter mit einem Windows System verbunden, muss darauf geachtet werden, dass im RX Buffer genügend Platz oberhalb der Handshake-Ausschaltschwelle vorhanden ist. Windows sendet noch etliche Zeichen nach Deaktivieren des Handshake. Dies ist vermutlich system- und/oder treiberbedingt. Getestet mit Hardware-UART 16550 unter Win-XP.
Download
Disketten Images

Die Downloads enthalten SamDisk Images mit CP/M 2.2 5.33T ST und integriertem ZCPR (ausser anders angegeben). .ITL sind 48TPI, .ITH 96 TPI Images. Diese Dateien müssen vor Schreiben auf Diskette mit SamDisk auf .DSK umbenannt werden. Alle nicht explizit markierten Links sind 48TPI. Dienstprogramme, die auf allen Disketten vorhanden sind, haben das $SYS Attribut, sind mit DIR nicht sichtbar. Das ZCPR Kommando DIR * S listet diese Dateien. Zudem sind alle Dateien einzeln im Download enthalten. Disketten-Icons mit Etikette zeigen beim Klicken das Inhaltsverzeichnis mit Beschreibung, erstellt mit DIRF.COM (auf allen Programmdisketten vorhanden).
System und meistgebrauchte Utilities
System und Utilities. CP/M 2.2 5.32 ST (A+C) DT (B+D). Unterstützt 48 TPI Laufwerk als Drives A und C, 96 TPI als B und D. Erstellt mit GEN.
GEN System. Dient zum Erstellen von Systemdisketten für verschiedene Konfigurationen. Dies sind die Tastatur (normal oder Textverarbeitung), Harddisk (5/7/15 MB oder keine), gleichzeitige Unterstützung von 48 und 96 TPI Diskettenlaufwerken. Die Auswahl der Konfiguration ist menugeführt. Benötigt GEN Util.
GEN Util. Wird von GEN System benötigt, enthält die CP/M Utilities, die auf die zu erstellende Diskette kopiert werden.
ZCPR-D&J V1.4 CCP Ersatz. Enthalt Source und Dokumentation
Assembler Programmierung. Enthält alle notwendigen Tools zum Erstellen von Assemblerprogrammen
Turbo-Pascal V2.0A
Turbo-Pascal V3.0A
MBasic-80 mit Bascom Compiler
Fortran-80 Compiler
dBaseII V2.41 englisch
Wordstar V3.30 deutsch mit Mailmerge