CP/A
CP/A ist ein CP/M-2.2-kompatibles Betriebssystem der Akademie der Wissenschaften der DDR, der Hauptentwickler war Hans Willy Dames.
CP/A setzt einen Z80-Prozessor voraus. Die Bestandteile CCP, BDOS und BIOS sind in sich abgeschlossene Programmteile und unabhängig voneinander. Sie können einzeln oder gemeinsam gegen die entsprechenden Programmteile des originalen CP/M 2.2 ausgetauscht werden. Alle CP/M-Programme laufen weiter unverändert.
Vorteile des CP/A gegenüber CP/M 2.2. sind erweiterte Funktionalitäten. Diese sind in einem ständig erweiterten Handbuch CPA.DOK nachzulesen. Herausragend sind
- Urladen des Systems aus einer Datei @OS.COM. Das System musste nicht in speziellen Systemspuren gespeichert werden.
- automatische Erkennung von Diskettenformaten
- eingebauter Systemmonitor
Das CP/A wurde für Bürocomputer A5120, A5130 und den PC1715 ausgeliefert. Es gab BIOS-Quelltexte und REL-Dateien von CCP und BDOS, mit denen individuelle Systeme generiert werden konnten.
s.a. http://www.robotrontechnik.de/html/software/scp.htm#cpa
Downloads
- cpa_src.zip Assembler-Quellcode von CCP und BDOS, 3 Versionen, incl. Quellen von CP/M 2.2 zum direkten Vergleichen
- cpa.zip komplettes CPA-Archiv aller mir bekannten Versionen (s.u.)
Versionen
- cpa biop 861106.zip
- cpa biop 861125.zip
- cpa biop 890103.zip
- cpa bios 880531.zip
- cpa bios 880531.zip 2. Variante
- cpa bios 890925.zip
- Verschiedene Beschreibungen
CCP
Das CCP von CP/A ist ziemlich sicher ursprünglich aus einem reassemblierten CP/M-2.2-CCP entstanden; wurde aber konsequent auf Z80-Befehle umgearbeitet und vielfach verändert und erweitert.
2014: Ich habe das CCP, welche im CP/A für den PC1715 und dem des Z9001 enthalten sind, reassembliert und mit den Originalmarkennamen und -kommentaren des originalen CP/M-2.2 CCP von Digital Research versehen. Ein Textvergleich aller Varianten offenbart die Unterschiede.
Die Version für den Z9001 und PC1715 (neuer?) unterscheiden sich in ein paar Punkten:
- der Z9001 benutzt eine andere Adresse für die User-und Laufwerks-Speicheradresse
- die Copyrightmeldung ist geändert
- das DIR-Kommando zeigt die Dateien in 2 statt 4 Spalten an
- Meldungstexte liegen am Ende des CCP
- der Buffer fürs CLK-Kommando liegt an einer anderen Adresse, außerdem werden nur 3 Byte genutzt
- kleine Unterschiede in der Implementierung, besonders bei den CP/A-spezifischen Kommandos EXT, SWAP, CLK
Besonderheiten des CCP
Das CCP enthält gegenüber der Version CP/M 2.2 einige Erweiterungen (bei gleichem Hauptspeicherbedarf von 800h Bytes). Sie betreffen vor allem die Arbeit mit verschiedenen Nutzerbereichen, wie sie sich bei 800k-Disketten als sinnvoll erweisen kann.
Bei einem eingestellten Nutzerbereich größer als 0 lautet die Prompt-Meldung du> statt nur d> (d für Default-Laufwerk, u für dezimale Nutzernummer). Hierdurch hat der Anwender bei der Aufteilung einer Diskette in mehrere Nutzerbereiche einen leichteren Überblick, in welchem Bereich er sich z.Zt. bewegt.
Kommandofiles werden bei USER>0 auch unter USER 0 und wenn dort erfolglos auf der Systemdiskette (im Kaltstart-LW) unter USER 0 gesucht (gilt nicht für nachgeladene Files!).
Weiterhin existieren zusätzliche residente Kommandos:
CLK hh:mm:ss tt.mm.jj
Durch dieses Kommando können Uhrzeit und Datum (beide Angaben ab 50h in BCD-Form vom Kaltstart bzw. von ACCOUNT hinterlegt) neu gestellt werden.
GO <beliebige Parameter>
Das letzte geladene Programm wird ohne Neuladen aktiviert, Parameter können wie beim Direktaufruf angegeben werden, Nutzerbereich beliebig (d.h. das Programm kann zuvor über einen anderen Nutzerbereich in den Hauptspeicher gebracht worden sein),
EXT [d:]<filename>
Das angegeben COM-File wird zu einem residenten Kommando erklärt, indem es vor BDOS, CCP und vor evtl. schon residenten zusätzlichen Kommandos im Hauptspeicher abgelegt wird, um bei Aufruf statt von Diskette von dort nach 100h geladen zu werden. Hierdurch verringert sich jedoch der TPA entsprechend.
Da residente Kommandos nur maximal 4 Zeichen lang sein dürfen, trifft dies auch auf <filename> zu.
RES
Streichen aller zusätzlich residenten Kommandos
HELP
Ausgabe einer Liste aller z.Zt. residenten Kommandos
Bei jedem Warmstart prüft das BIOS, ob das über das CCP definierte Standard-Laufwerk im System definiert ist. Im negativen Fall (z.B. Tippfehler) wird auf das Kaltstart-Laufwerk umgeschaltet, der Nutzerbereich bleibt erhalten.
BDOS
Vom BDOS lag mir leider kein Quelltext vor. Ich habe deshalb das BDOS, welche im CP/A für den für den PC1715 und dem des Z9001 enthalten sind, reassembliert und mit den Originalmarkennamen und -kommentaren des originalen CP/M-2.2 BDOS von Digital Research versehen. Ein Textvergleich beider Varianten (bdos_cpa.asm und bdos22.asm) mittels DIFF offenbart die Unterschiede:
- Das CP/A-BDOS wurde im Prinzip komplett und fast 1:1 aus dem DR-BDOS abgekupfert
- Durch Verwendung der Z80-spezifischen short jumps (jr) wurden einige Byte eingespart
- der interne BDOS-Stack ist 32 Level tief, im Original sind es nur 24 Level
- BDOS sichert die Register IX und IY
- leicht andere Implementierung von CONIN, CONBRK, INITIAL2,
- andere Implementierung von RENAME, RESELECT, FUNC13, FUNC14,FUNC25,FUNC37,GOBACK
- DSKWR2 hat einen Patch am Anfang
- READ beachtet zusätzlich 13H (Ctrl-S)
Die Version vom PC1715, datiert 11.1.89, enthält eine kürzere Meldung bei „bad sector“, ist ansonsten identisch mit der vom Z9001.
2014/08: Aus den Quelltexten des BIC A5105 geht hervor, dass W. Dames das originale BDOS reassembliert und hat. Das dort verwendete BDOS stammt direkt vom BDOS des CP/A ab („modifizierungen gegenueber original cp/m 2.2: (Original Dames“) Viele Marken heißen auch noch „i<hexadr>“.
Besonderheiten des BDOS
CP/A unterscheidet sich durch folgende inhaltlichen Veränderungen im BDOS vom Betriebssystem CP/M, Version 2.2 (bei gleichem Hauptspeicherbedarf von E00h Bytes):
- Beschleunigung der Arbeit mit Nicht-Default-Laufwerken. Ist im FCB ein anderes als das Default-Laufwerk angegeben (FCB[0]<>0) und dies ist nicht ausgewählt, so wird vom BDOS auf dieses umgeschaltet (SELDSK) und beim Verlassen nicht zurückgeschaltet, sondern nur eine hängende Umschaltung vermerkt. Dadurch wird eine ständige Übernahme der Disk-Parameter durch das BDOS vermieden, so dass auch in diesem Fall die gleiche Geschwindigkeit wie bei der Arbeit mit Default- Disketten erreicht wird.
- Wegfall der ^S-Funktion.
Das Stoppen von Konsolausgaben kann als Spezialfall der allgemeinen Stop- Funktion im BIOS (s.5.1.3) erreicht werden. Verbunden mit dem Wegfall der ^S- Funktion konnte auf die Pufferung von Konsoleingaben im BDOS völlig verzichtet werden, d.h. es werden keine Zeichen vertauscht, wenn zwischen BDOS und direkter BIOS-Tastatureingabe gewechselt wird.
- ^S und DEL wirken bei der Stringeingabe über das BDOS wie ^H.
- Um eine Arbeit ohne LW A (weil es gerade defekt ist und die Laufwerke nicht umgesteckt werden können) zu erlauben, wird statt Laufwerk A: dasjenige Laufwerk, von dem aus der Kaltstart erfolgte bei der BDOS-Funktion „Disk-Reset“ selektiert. Da mit dieser BDOS-Funktion auch die Abarbeitung von SUBMIT-Strömen verbunden ist, muss daher beim Aufruf von SUBMIT das Kaltstart-Laufwerk als Standardlaufwerk zugewiesen sein, damit der Kommandostrom dort abgelegt wird! Erfolgte der Kaltstart von Laufwerk A, so hat diese BDOS-Änderung keine Auswirkungen.
- IX und IY werden durch das BDOS (und daraus resultierende BIOS-Aufrufe) nicht zerstört.
- Es wurde ein Kopierschutz integriert, das Kopieren geschützter Dateien
führt zu der Fehlermeldung 'File R/O' (unabhängig vom evtl. R/O-Status der
Dateien). Wie dieser Schutz funktioniert, wird hier nicht verraten.
; - Kopierschutz durch Kommando: ; POWER SET [-X] ; alle zu schuetzenden Files auswaehlen. ; Vor "[" kann ein Laufwerk, z.B. "B:[-X]" angegeben werden. ; Beim Kopier-Versuch erfolgt die Ausschrift 'File R/O' ; und Abbruch. Geschuetzte Files sind anderweitig nicht er- ; kennbar, insbesondere liefern DIR und DIR in POWER keinen ; Hinweis. ; Die Kopierfunktion im FORMAT[P]-Programm wird im Menuetext ; und als Menueantwort nur bei der Aufrufform 'FORMATP CPA' ; zugelassen, im normalen Aufruf 'FORMATP' ohne oder mit fal- ; schem Parameter ist sie verboten. ; Diese Schutzfunktionen sollten nur vom Systemverantwortlichen ; genutzt werden und auch nur diesem bekannt sein!
aus den BIC-Quellen:
;; modifizierungen gegenueber original cp/m 2.2: (Original Dames) ; - um eine arbeit ohne lw a zu erlauben, wird das erste ; default-lw nach kaltstart als $$$.sub-lw bei disk-reset ; benutzt. dem anwenderprogramm wird dazu nach disk-reset ; in h die kaltstart-lw-nr (a=0, b=1,..) und in l und a ; ff bei vorhandener $-datei, 00 sonst uebergeben. ; - um fuer pc1715 im directory "sauber" die loader-informa- ; tionen unterzubringen, werden zu uebergehende dir-ein- ; traege bei login nicht nur an USER=e5h, sondern auch ; an filename[1] =00h oder >=f0h erkannt. ; - einfuehrung eines kopierschutzes: ; eine $$$-datei kann nicht in eine datei mit gesetztem ; bit 7 im 3. typ-byte umbenannt werden (file r/o -meldung) ; die $$$-eintragung im directory wird unkenntlich gemacht. ; - ix und iy werden vom BDOS gerettet und wiederhergestellt ; - einsparung von bytes durch einfuehrung von jr-spruengen ; und streichen von steuerzeichen fuer nicht-bildschirm- ; konsolen. ; - beschleunigung der arbeit mit fcb(0)=0 indem nicht sofort ; wieder auf current-laufwerk zurueckgeschaltet wird ; - das puffern von zeichen im BDOS entfaellt zusammen mit der ; ^s-funktion (nur dafuer noetig), da im BIOS ein allgemei- ; nes stop des rechners implementiert ist (ci-taste). ; - ^s wirkt wie ^h (falls ^h-taste zu ^s umdefiniert wurde) ; - verlegung des sprungverteilers fuer die BDOS-funktionen ; nach vorn, damit speicherschutz von BDOS+40h moeglich ist. ; - fehlerkorrektur bei selektivem lw-reset (fkt. 25h), funktionierte ; nur bei zwischenzeitlichem lw-wechsel
Kompilieren
s. CPA.DOK
a) fuer Buerocomputer
(( Modifikation des BIOS-Quelltextes BIOS.MAC)) t: s:M80 s:BIOS.ERL=BIOS s: LINKMT @OS=CPABAS,CCP,BDOS,BIOS/P:xxxx ((Kaltstart))
b) fuer PC1715
(( Modifikation des BIOS-Quelltextes BIOP.MAC)) t: s:M80 s:BIOP.ERL=BIOP s: LINKMT @OS=CPPBAS,CCP,BDOS,BIOP/P:xxxx ((Kaltstart))
handschriftlich vom einem Listing PC1715 BIOP 02.11.87:
m80 =biop/x/c ref lst:=biop ( statt lst auch datei PRN ) linkmt @os=ccpbas,ccp,bdos,x:biop/p:0ba80