|
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 ; = > < . : , [ ] / | .
|