CP/M 2.2, CP/M 3.0, MP/M 2.1 [Reine MP/M Funktionen im Anhang]
Zusammengestellt von Jim Lopushinsky
Hinweise:
.Ausdruck bedeutet die Adresse des Ausdrucks.
Rot zeigt Erweiterungen an |
Unterstützt von (X) | ||||||
---|---|---|---|---|---|---|
FUNK | CP/M 2.2 | CP/M 3.0 | MP/M 2.1 | FUNKTIONSNAME | EINGABE PARAMETER | ZURÜCKGEGEBENE WERTE |
0 | X | X | X | System Rücksetzen | keiner | keine |
1 | X | X | X | Konsoleingabe | keiner | A = Zeichen |
2 | X | X | X | Konsolausgabe | E = Zeichen | keine |
3 | X | X | - | Hilfsgeräteeingabe | keiner | A = Zeichen |
3 | - | - | X | Unbearbeitete Konsoleingabe | keiner | A = Zeichen |
4 | X | X | - | Hilfsgeräteausgabe | E = Zeichen | keine |
4 | - | - | X | Unbearbeitete Konsolausgabe | E = Zeichen | keine |
5 | X | X | X | Druckerausgabe | E = Zeichen | keine |
6 | X | X | X | Direkte Konsolein/ausgabe | E = 0FFH/ 0FEH/ 0FDH/ char |
A = Zeichen/ Status/ Zeichen/ keine |
7 | X | - | - | I/O Byte holen | keiner | A = IOBYTE |
7 | - | X | - | Hilfsgerätestatus für Eingabe | keiner | A = 00/0FFH |
8 | X | - | - | I/O Byte setzen | E = IOBYTE | keine |
8 | - | X | - | Hilfsgerätestatus für Ausgabe | keiner | A = 00/0FFH |
9 | X | X | X | Zeichenkette ausgeben | DE = .Zeichenkette | keine |
10 | X | X | X | Zeile über die Konsole einlesen | DE = .Zeile | Zeichen in der Zeile |
11 | X | X | X | Konsolstatus holen | keiner | A = 00/01 |
12 | X | X | X | Versionsnummer holen | keiner | HL = Version |
13 | X | X | X | Disksystem zurücksetzen | keiner | Hinweis1 |
14 | X | X | X | Select Disk | E = Disk Number | Hinweis2 |
15 | X | X | X | Öffnen einer Datei | DE = .FCB | A = Verzeichniswert3 |
16 | X | X | X | Datei schließen | DE = .FCB | A = Verzeichniswert |
17 | X | X | X | Suche nach erster Datei | DE = .FCB | A = Verzeichniswert |
18 | X | X | X | Suche nach nächster Datei | keiner | A = Verzeichniswert |
19 | X | X | X | Datei löschen | DE = .FCB | A = Verzeichniswert |
20 | X | X | X | Sequentiellen Rekord lesen | DE = .FCB | A = Fehlerkode |
21 | X | X | X | Sequentiellen Rekord schreiben | DE = .FCB | A = Fehlerkode |
22 | X | X | X | Datei anlegen | DE = .FCB | A = Verzeichniswert |
23 | X | X | X | Datei umbenennen | DE = .FCB | A = Verzeichniswert |
24 | X | X | X | Login Vektor holen | keiner | HL= Login Vektor |
25 | X | X | X | Aktuelles Laufwerk holen | keiner | A = Aktuelle Laufwerks # |
26 | X | X | X | DMA Adresse festlegen | DE = .DMA | keine |
27 | X | X | X | Belegungsvektor holen | keiner | HL= .Belegungsvektor |
28 | X | X | X | Schreibschutz für aktuelles Laufwerk | keiner | keine |
29 | X | X | X | Schreibschutzvektor holen | keiner | HL= Schreibschutzvektor |
30 | X | X | X | Dateiattribut setzen | DE = .FCB | A = Verzeichniswert |
31 | X | X | X | Adresse des DPB holen | keiner | HL= .DPB |
32 | X | X | X | Nutzerbereich (User Area) setzen/holen | E = 0FFH/ Nutzernummer |
A = Aktueller Nutzer/ keine |
33 | X | X | X | Random Rekord lesen | DE = .FCB | A = Fehlerkode |
34 | X | X | X | Random Rekord schreiben | DE = .FCB | A = Fehlerkode |
35 | X | X | X | Dateigröße bestimmen | DE = .FCB | R0, R1, R2 |
36 | X | X | X | Random Rekord festlegen | DE = .FCB | R0, R1, R2 |
37 | X | X | X | Laufwerk zurücksetzen | DE = Laufwerksvektor | A = Fehlerkode |
38 | - | X | X | Laufwerk belegen | DE = Laufwerksvektor | keine |
39 | - | X | X | Laufwerk freigeben | DE = Laufwerksvektor | keine |
40 | X | X | X | Random Rekord schreiben mit Auffüllen von Nullen | DE = .FCB | A = Fehlerkode |
41 | - | - | X | Rekord schreiben und überprüfen | DE = .FCB | HL= Fehlerkode |
41 | - | X | - | Rekord schreiben und überprüfen | DE = .FCB | A = 0FFH |
42 | - | X | X | Lock Rekord | DE = .FCB | HL = Fehlerkode |
43 | - | X | X | Unlock Rekord | DE = .FCB | HL = Fehlerkode |
44 | - | X | X | Multi-Sektor Anzahl festlegen | E = # Sektoren | A = Return Code |
45 | - | X | X | BDOS Fehlermodus festlegen | E = Fehlermodus | keine |
46 | - | X | X | Freien Laufwerksplatz bestimmen | E = Laufwerk # | Anzahl freier Sektoren |
47 | - | X | X | Anderes Programm aufrufen | E = Aufrufmarke | keine |
48 | - | X | X | Puffer leeren | E = Leerungskode | A = Fehlerkode |
49 | - | X | - | Systemkontrolle holen/setzen | DE = .SCB PB Block | A = Rückgabe Byte HL= Rückgabe Wort |
50 | - | X | - | Direkter Bios Aufruf | DE = .BIOS PB | BIOS Rückgabe |
59 | - | X | - | Overlay laden | DE = .FCB | A = Fehlerkode |
60 | - | X | - | Aufruf einer Residenten System Erweiterung | DE = .RSX PB | A = Fehlerkode |
98 | - | X | - | Blöcke freigeben | keiner | keine |
99 | - | X | - | Datei kürzen | DE = .FCB | A = Verzeichniswert |
100 | - | X | X | Verzeichnisnamen festlegen | DE = .FCB | A = Verzeichniswert |
101 | - | X | X | Daten aus Verzeichnisnamen laden | E = Drive | A = Daten aus Namen |
102 | - | X | X | Datumsstempel und Passwortmodus lesen | DE = .FCB | A = Verzeichniswert |
103 | - | X | X | Passwort und Sicherung für Datei setzen | DE = .FCB | A = Verzeichniswert |
104 | - | X | X | Datum und Zeit setzen | DE = .DAT | keine |
105 | - | X | X | Datum und Zeit holen | DE = .DAT | Datum und Zeit A = Sekunden |
106 | - | X | X | Passwort voreinstellen | DE = .Passwrd | keine |
107 | - | X | X | Seriennummer holen | keiner | DE = .Serial # Feld der Seriennummer |
108 | - | X | - | Programm Rückgabe-Code holen/setzen | DE = 0FFFFH/ Code |
HL= Rückgabe-Code keine |
109 | - | X | - | Konsole-Einstellung holen/setzen | DE = 0FFFFH/ Einstellung |
HL= Konsoleinstellung/ keine |
110 | - | X | - | Endzeichen holen/setzen | DE = 0FFFFH/ E = Endzeichen |
A = Endzeichen/ keine |
111 | - | X | - | Textbereich ausgeben | DE = .CCB | keine |
112 | - | X | - | Textbereich drucken | DE = .CCB | keine |
115 | - | X | X | Graphische Erweiterung | DE = Kontrollfeld | Kontrollfeld |
152 | - | X | X | Dateinamen bestimmen | DE = .PFCB | Hinweis4 |
Die MP/M Funktionen | ||||||
128 | - | - | X | Absolute Memory Request | DE = .MD | A = Fehlerkode |
129 | - | - | X | Relocatable Memory Request | DE = .MD | A = Fehlerkode |
130 | - | - | X | Memory Free | DE = .MD | keine |
131 | - | - | X | Poll | E = Device | keine |
132 | - | - | X | Flag Wait | E = Flag | A = Fehlerkode |
133 | - | - | X | Flag Set | E = Flag | A = Fehlerkode |
134 | - | - | X | Make Queue | DE = .QCB | keine |
135 | - | - | X | Open Queue | DE = .UQCB | A = Fehlerkode |
136 | - | - | X | Delete Queue | DE = .QCB | A = Fehlerkode |
137 | - | - | X | Read Queue | DE = .UQCB | keine |
138 | - | - | X | Conditional Read Queue | DE = .UQCB | A = Fehlerkode |
139 | - | - | X | Write Queue | DE = .UQCB | keine |
140 | - | - | X | Conditional Write Queue | DE = .UQCB | A = Fehlerkode |
141 | - | - | X | Delay | DE = # ticks | keine |
142 | - | - | X | Dispatch | keiner | keine |
143 | - | - | X | Terminate Process | E = Term. Code | keine |
144 | - | - | X | Create Process | DE = .PD | keine |
145 | - | - | X | Set Priority | E = Priority | keine |
146 | - | - | X | Attach Konsol | keiner | keine |
147 | - | - | X | Detach Konsol | keiner | keine |
148 | - | - | X | Set Konsol | E = Konsol | keine |
149 | - | - | X | Assign Konsol | DE = .APB | A = Fehlerkode |
150 | - | - | X | Send CLI Command | DE = .CLICMD | keine |
151 | - | - | X | Call Resident Sys Proc | DE = .CPB | HL= result |
153 | - | - | X | Get Konsol Number | keiner | A = Konsol # |
154 | - | - | X | System Data Address | keiner | HL= Sys Data Addr |
155 | - | - | X | Get Date and Time | DE = .TOD | date and time |
156 | - | - | X | Return Process Descriptor | keiner | HL= PD Addr |
157 | - | - | X | Abort Specified Process | DE = .ABT PB | A = Fehlerkode |
158 | - | - | X | Attach List | keiner | keine |
159 | - | - | X | Detach List | keiner | keine |
160 | - | - | X | Set List | E = List # | keine |
161 | - | - | X | Conditional Attach List | keiner | A = Fehlerkode |
162 | - | - | X | Conditional Attach Konsol | keiner | A = Fehlerkode |
163 | - | - | X | MPM Version Number | keiner | HL= Version # |
164 | - | - | X | Get List Number | keiner | A = List # |
1. |
In der Version CP/M 2.2 wird Laufwerk A: als Standardlaufwerk eingestellt.
Als Rückgabe erhält man 0FFH, wenn eine Datei gefunden wurde, deren Name mit $ beginnt, sonst 0.
Unter MP/M 2.1 wir bei Erfolg eine 0 zurückgegeben. Das Resultat ist 0FFH, wenn andere Prozesse Dateien geöffnet haben in Wechsel- oder schreibgeschützten Laufwerken. |
2. | Setzt das Laufwerk im Akku als aktuelles Laufwerk; meldet das Laufwerk an. Gibt 0 bei Erfolg zurück oder 0FFh im Fehlerfall. Unter MP/M II und späteren Versionen hält das Register H die physikalische Fehlernummer. |
3. |
Verzeichniswert = Directory Code.
Ein Wert zwischen 0 und 3.
Dieser Wert kann verwendet werden, um die Adresse des entsprechenden Verzeichniswert zu bestimmen:
DMA+A*32 |
4. |
Wandelt einen ASCII Dateinamen um in einen FCB.
Der Parameterblock (PFCB) hat folgendes Format:
DEFW ASCII Adresse DEFW FCB AdresseDas Ergebnis im Register HL ist 0FFFFh, wenn der Dateiname ungültig war; 0, wenn der Dateiname mit Null oder RETURN abgeschlossen war; sonst die Adresse des dem Dateinamen folgenden Zeichens. Der Dateiname kann beliebige Gestalt annehmen bis hin zu d:dateiname.typ;passwort (Passwort nur unter CP/M 3 und höher).
Wenn der Dateiname analysiert wird, wird das Passwort kopiert nach FCB+10h mit der Länge in FCB+1Ah.
[Unter ZPM3 kann der Dateiname das folgende Format annehmen: du:dateiname.typ;passwort ; der Wert in FCB+0Dh ist 0, wenn keine Nutzernummer (u) angegeben wurde oder andernfalls 1+u.
Wenn ein Z-System geladen ist, kann ZPM3 auch den Dateinamen in der Form dir:dateiname.typ;passwort wandeln.
FEHLER: ZPM3 (Version N10) speichert das Passwort nach FCB+0Ch statt FCB+10h, wobei die Nutzernummer in FCB+0Dh überschrieben wird. Außerdem werden die letzten vier Bytes des FCB nicht auf Null gesetzt, wie CP/M es tut.] Der Dateiname kann abgeschlossen werden durch eins der fogenden Zeichen:
Leerzeichen Tabulator RETURN Null ; = > < . : , [ ] / | .
|