home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Power-Programmierung
/
CD2.mdf
/
doc
/
techref
/
kapitel.004
< prev
Wrap
Text File
|
1993-03-01
|
230KB
|
3,953 lines
** technische Referenz für Programmierer für MSDOS und den IBM PC **
─────────────────────────┤ eingetragene Anwenderversion ├───────────────────────────
nicht für den allgemeinen Vertrieb
Urheberrecht (c) 1987, 1990 Dave Williams
Deutsche Übersetzung Urheberrecht (c) 1990 Klaus Overhage
Änderungen und Erweiterungen Urheberrecht (c) 1990 Klaus Overhage
K A P I T E L V I E R
DOS INTERRUPTS und Funktionsaufrufe
I N H A L T E
Allgemeine Anleitung zur Programmierung .............................. 4**1
DOS Register ......................................................... 4**2
DOS Stapel ........................................................... 4**3
DOS Interrupts ....................................................... 4**4
Interrupt 20h (beenden) .............................................. 4**5
DOS Funktionen (Schnellübersicht) .................................... 4**6
Aufruf der DOS Funktionen ............................................ 4**7
wesentliche Versions Information ..................................... 4**8
PCjr Kassettenunterstützung .......................................... 4**9
Kompatibilitätsprobleme mit DOS 4.0+ ................................. 4**10
eDOS 4.0 ............................................................. 4**11
DOS Funktionen ausführlich ........................................... 4**12
Allgemeine Anleitung zur Programmierung .............................. 4**1
Microsoft empfiehlt die Vermeidung der "alten Art" (01h-0Ch und 26h) Systemaufrufe
wo dies auch immer möglich ist. Die Programmierer sind bedrängt die "neue Art" (DOS 2.0+)
dafür zu benutzen.
Es sollten keine "nicht dokumentierte" Funktionen benutzt werden, falls diese nicht kritisch für
die Anwendung sind und keine andere passende hierfür gefunden werden kann. Beachten sie das
das die Programme unter verschiedenartige Versionen von DOS, DOS Nachbauten wie
Digital's DR-DOS, in der OS/2 Kompatibilität Box, oder dem Unix DOS Fenster augeführt werden sollen.
Solche Umgebungen oder OS Simulationen haben nicht immer die nicht dokumentierten Aufrufe realisiert.
In DOS 2.x fehlen viele von den Erweiterungen der späteren Versionen. Die Anwendung
sollte die DOS Version kontrollieren, falls DOS 3.x+ Merkmale verlangt werden.
Direkte Festplattenzugriffe über die Hardware oder dem BIOS sollten vermieden werden, falls das Programm nicht
ausschließlich auf der wesentlichen Hardware ausgeführt wird oder unter anderen zuverlässigen Verhältnisse.
Einige Versionen von DOS 2.x behandeln ihre Disketten in einer Art ähnlich 3.x. Einige
Anbieter fügten mehrfache DOS Bereiche oder übergroße Laufwerksunterstützung hinzu, vor der
"offiziellen " 3.3 Freigabe. Nicht alle diese Systeme arbeiten in der gleichen Weise! Die neuen
SCSI oder ESDI Festplattencontroller bilden nicht immer alle der Standard BIOS
Aufrufe nach..
DOS Register ......................................................... 4**2
DOS benutzt die folgenden Register, Zeiger, und Kennzeichen sobald es
Interrupts und Funktionsaufrufe ausführt:
┌───────────────────┬──────────┬───────────────────────────────────────────────┐
│allgemein Register │ Register │ Definition │
│ ├──────────┼───────────────────────────────────────────────┤
│ │ AX │ Akkumulator (16 Bit) │
│ │ AH │ Akkumulator höherwertiges Byte (8 Bit) │
│ │ AL │ Akkumulator niederwertiges Byte (8 Bit) │
│ │ BX │ Basis( 16 Bit) │
│ │ BH │ Basis höherwertiges Byte (8 Bit) │
│ │ BL │ Basis niederwertiges Byte (8 Bit) │
│ │ CX │ Zählen (16 Bit) │
│ │ CH │ Zählen höherwertiges Byte (8 Bit) │
│ │ CL │ Zählen niederwertiges Byte (8 Bit) │
│ │ DX │ Daten (16 Bit) │
│ │ DH │ Daten höherwertiges Byte (8 Bit) │
│ │ DL │ Daten niederwertiges Byte( 8 Bit) │
├───────────────────┼──────────┼───────────────────────────────────────────────┤
│ Segment Register │ Register │ Definition │
│ ├──────────┼───────────────────────────────────────────────┤
│ │ CS │ Codesegment (16 Bit) │
│ │ DS │ Datensegment (16 Bit) │
│ │ SS │ Stacksegment (16 Bit) │
│ │ ES │ Extrasegment (16 Bit) │
├───────────────────┼──────────┼───────────────────────────────────────────────┤
│ Index Register │ Register │ Definition │
│ ├──────────┼───────────────────────────────────────────────┤
│ │ DI │ Zielindex (16 Bit) │
│ │ SI │ Quellindex (16 Bit) │
├───────────────────┼──────────┼───────────────────────────────────────────────┤
│ Zeiger │ Register │ Definition │
│ ├──────────┼───────────────────────────────────────────────┤
│ │ SP │ Stapelzeiger (16 Bit) │
│ │ BP │ Basiszeiger (16 Bit) │
│ │ IP │ Befehlszeiger (16 Bit) │
├───────────────────┴──────────┴───────────────────────────────────────────────┤
│ Kennzeichen AF, CF, DF, IF, OF, PF, SF, TF, ZF │
└──────────────────────────────────────────────────────────────────────────────┘
Diese Register, Zeiger, und Kennzeichen sind "niedrigste allgemeine Nenner" 8088-8086
CPU orientierte. DOS macht kein Versuch irgendeine von den besonderen oder erweiterten
Anweisungen der späteren CPUs zu benutzen welche auch den 8088 Code durchführen, derartig wie
der 80186, 80286, 80386, oder NEC V20, V30, V40, oder V50.
Benutzte Register außer AX werden nicht verändert, falls nicht Information über diese zurück-
gegeben werden. Dies ist bei den wesentlichen Funktionsaufrufen bermerkt.
DOS Stapel ........................................................... 4**3
Sobald DOS die Steuerung nach einem Funktionsaufruf übernimmt, es schaltet auf einen internen
Stapel. Register welche nicht benutzt werden um Information zurüchzugeben (andere als AX) werden
gesichert. Der Stapel des aufrufenden Programmes muß groß genug sein um
das Interrupt System anzupassen - wenigstens 128 Bytes zusätzlich zu andere Interrupts.
DOS unterhält tatsächlich drei Stapel -
Stapel 1: 384 Bytes (in DOS 3.1)
für Funktionen 00h und für 0Dh und aufwärts, und für ints 25h und 26h.
Stapel 2: 384 Bytes (in DOS 3.1)
für Funktionsaufrufe 01h bis 0Ch.
Stapel 3: 48 Bytes (in DOS 3. 1)
für Funktionen 0Dh und darüber. Dieser Stapel ist der anfängliche Stapel der von dem
int 21h Handler benutzt wird, bevor er entscheidet welcher von den anderen beiden benutzt werden soll.
Es wird auch benutzt von den Funktion 59h (holen erweiterten Fehler), und 01h bis 0Ch falls
diese während eines int 24h (kritischer Fehler) Handler ausgeführt werden. Die Funktionen
33h (holen/setzen Abbruch Kennzeichen), 50h (setze Prozess ID), 51h (hole Prozess ID)
und 62h (holen PSP Adresse) benutzen keine der DOS Stapel unter DOS 3.x
(unter 2.x, 50h und 51h benutzen den Stapel Nummer 2).
IBM und Microsoft haben eine Änderung in DOS 3.0 oder 3.1 gemacht, um die Größe von
DOS zu reduzieren. Sie reduzierten den Platz, der für die Scratch Bereiche belegt wird, sobald Interrupts
verarbeitet werden. Der vorgegebene Wert ändert sich mit der DOS Version und der
Maschine, aber 8 Stapel Rahmen erscheinen allgemein. Falls beabsichtigt wird mehr als
8 interrupts zur selben Zeit zu holen, Taktgeber, Festplatte, Druckerspooler,
Tastatur, com Port, etc., stürtzt das System ab. Es scheint als wenn dies gewöhnlich auf
einem Netzwerk passiert. STACKS=16,256 bedeutet das 16 Interrupts jeden anderen unterbrechen können und
erlaubt 256 Bytes für jeden Scratch Bereich. Acht ist der Mindestwert.
DOS 3.2 Schaltet einige unterschiedliche Stapel als die vorhergehenden Versionen. Die
interrupts welche geschaltet werden, sind 02h, 08h, 09h, 0Ah, 0Bh, 0Ch, 0Dh, 0Eh, 70h,
72h, 73h, 74h, 75h, 76h, und 77h. DOS 3.2 hat eine besondere Kontrolle in dem
Initialisierungscode für einen PCjr und aktiviert die Stapel Schaltung nicht auf dieser Maschine.
DOS 3.3 wurde so geändert, daß keine Stapel Schaltung auftritt beim PC, PC-XT, oder dem
tragbaren PC, und der Standardwert ist 9 Stapel mit je 128 Bytes bei einem AT.
DOS Interrupts ....................................................... 4**4
Microsoft empfiehlt, daß ein Programm welches die Inhalte von irgendeinen Interruptvektor
prüft oder einstellt die DOS Funktionsaufrufe 35h und 25h benutzen soll, die für jene
Zwecke vorgesehen sind und die direkte Bezugnahme auf Interruptvektor Adressen vermieden werden soll.
DOS reserviert die Interrupts 20h bis 3Fh für seine eigene Benutzung. Dies bedeutet,
das die absoluten Speicheradressen 80h bis 0FFh von DOS reserviert sind.
┌─────────────────────────────────────────────────────────────────────────────┐
│ Interrupt 20h beenden aktuelles Programm 4**5 │
└─────────────────────────────────────────────────────────────────────────────┘
(0:0080h)
ausgeben int 20h veranlasst das beenden von einem Programm. Dieser Vektor übergibt die Logik ans
DOS zum wiederherstellen der Beendigungsadresse, der Ctrl-Break Adresse, und der kritische
Fehler Ausstiegsadresse auf die Werte die sie hatten vor dem Aufruf des Programms. Alle Datei-
puffer werden gelöscht und alle Dateien geschlossen. Es sollten alle Dateien geschlossen werden,
die die Länge verändert haben (siehe Funktionsaufrufe 10h und 3Eh) bevor dieser Interrupt ausgegeben
wird. Falls die geänderte Datei nicht geschlossen wird, werden dessen Länge, Uhrzeit, und Datum
nicht korrekt in dem Inhaltsverzeichnis aufgezeichnet.
Für ein Programm das ein Beendigungscode oder einen Fehlercode zurückgeben muß, es
muß einer von den beiden Funktionsaufruf 4Ch (beenden ein Prozess) oder 31h (beenden
Prozess und verbleiben speicherresistent) benutzt werden. Diese zwei Methoden sind der Benutzung
von int 20h vorzuziehen und die Codes die zurückgegeben werden, können bei der Stapel Abarbeitung abgefragt werden.
Wichtig: bevor ein Interrupt 20h ausgegeben wird, muß das Programm garantieren daß
das CS Register das Segment von seinem Programm Segment Prefix enthält.
Interrupt 20h DOS - beenden Programm
Aufruf kein Parameter
Rückgabe die folgend Vektoren sind wiederhergestellt von dem Programm Segment Prefix:
0Ah Programm beenden
0Eh Control-C
12h kritischer Fehler
Anmerkung 1) IBM und Microsoft empfehlen die Benutzung von int 21 Fn 4Ch. Die Benutzung
von int 20 wird offiziell mißbilligt seit der Einführung von DOS 2.0
2) in DOS 3.2 zum mindestens, int 20h ruft nur int 21h, fn 00h auf.
DOS Funktionen (Schnellübersicht) .................................... 4**6
┌─────────────────────────────────────────────────────────────────────────────┐
│ Interrupt 21h Funktionsaufruf Anforderung │
└─────────────────────────────────────────────────────────────────────────────┘
(0:0084h)
DOS liefert ein breite Vielfalt von Funktionsaufrufe für Zeichentreiber I/O, Datei-
handhabung, Speicherverwaltung, Datum und Zeit Funktionen, Ausführung von anderen
Programmen, und mehr. Sie sind in folgende Gruppen aufgeteilt:
Anruf Beschreibung
00h Programm beenden
01h-0Ch Zeichentreiber I/O, CP/M Kompatibilitätsformat
0Dh-24h Dateihandhabung, CP/M Kompatibilitätsformat
25h-26h nondevice Funktionen, CP/M Kompatibilitätsformat
27h-29h Dateihandhabung, CP/M Kompatibilitätsformat
2Ah-2Eh nondevice Funktionen, CP/M Kompatibilitätsformat
2Fh-38h erweiterte Funktionen
39h-3Bh Inhaltsverzeichnis Gruppe
3Ch-46h erweiterte Dateihandhabung
47h Inhaltsverzeichnis Gruppe
48h-4Bh Erweiterungsspeicher Handhabung
54h-57h erweiterte Funktionen
5Eh-5Fh Netzwerkbetrieb
60h-62h erweiterte Funktionen
63h-66h erweiterte Fremdsprachenunterstützung
Liste der DOS Funktionen: *= nicht dokumentiert
00h beenden Programm
01h holen Tastatureingabe
02h Anzeige Zeichen zu STDIO
03h holen Zeichen von STDAUX
04h Zeichenausgabe zu STDAUX
05h Zeichenausgabe zu STDPRN
06h direkte Ein- und Ausgabe von Zeichen - Tastatur zu Bildschirm
07h holen Zeichen von std I/O ohne Ausgabe
08h holen Zeichen von std I/O ohne Ausgabe, überprüft auf ^C
09h Anzeige einer Zeichenkette zu STDOUT
0Ah gepufferte Tastatureingabe
0Bh kontrollieren STDIN Status
0Ch löschen Tastaturpuffer und aufrufen Tastaturfunktion
o 0Dh Übertragen alle Plattenpuffer
o 0Eh auswählen Festplatte
0Fh Datei öffnen mit Dateikontrollblock
10h Datei schließen mit Dateikontrollblock
11h suche erste Datei im aktuellen Verzeichnis mit Dateikontrollblock
12h suche nächste Datei im aktuellen Verzeichnis mit Dateikontrollblock
13h lösche Datei spezifiziert durch den Dateikontrollblock
14h sequentielles lesen einer Datei spezifiziert durch den Dateikontrollblock
15h sequentielles schreiben einer Datei spezifiziert durch den Dateikontrollblock
16h erstellen oder leeren einer Datei mit Dateikontrollblock
17h umbenennen einer Datei spezifiziert durch den Dateikontrollblock
18h* Unbekannt
o 19h Rückgabe aktuelles Festplattenlaufwerk
o 1Ah einstellen Diskettentransferbereich (DTA)
1Bh hole FAT des aktuellen Laufwerks
1Ch hole FAT von irgendeinen Laufwerk
1Dh* Unbekannt
1Eh* Unbekannt
1Fh* lese DOS Plattenblock, Standardlaufwerk
20h* Unbekannt
21h wahlfreies lesen einer Datei spezifiziert durch den FCB
22h wahlfreies schreiben einer Datei spezifiziert durch den FCB
23h Rückgabe Anzahl Sätze in der Datei spezifiziert durch FCB
24h einstellen Satznummer der relativen Datei für die Datei spezifiziert durch den FCB
o 25h einstellen Interrupt Vektor
26h erstellen neues Programm Segment Prefix (PSP)
27h wahlfreies lesen eines Dateiblockes einer Datei spezifiziert durch den FCB
28h wahlfreies schreiben eines Dateiblockes einer Datei spezifiziert durch den FCB
29h analysieren der Befehlszeile für Dateiname
o 2Ah lese das Datum des Systems
o 2Bh einstellen Datum des Systems
o 2Ch lese die Uhrzeit des Systems
o 2Dh einstellen Uhrzeit des Systems
o 2Eh setzen/löschen Verify-Kennzeichen für Schreiboperation der Laufwerke
o 2Fh holen Adresse Datenübertragungsbereich (DTA)
o 30h holen DOS Versionsnummer
31h TSR, geöffnete Dateien bleiben offen
32h* lesen DOS Plattenblock
o 33h holen oder einstellen Ctrl-Break Kennzeichen
34h* INDOS kritisches Bereichskennzeichen
o 35h holen Segment und Offsetadresse eines Interrupts
o 36h festellen freien Platz auf dem Laufwerk
37h* holen/einstellen Wahlmöglichkeit Markierungszeichen (SWITCHAR)
o 38h Rückgabe Landesspezifische Information
o 39h erstellen Unterverzeichnis
o 3Ah entfernen Unterverzeichnis
o 3Bh ändern aktuelles Inhaltsverzeichnis
o 3Ch erstellen und Rückgabe Dateinummer
o 3Dh öffne Datei und Rückgabe Dateinummer
o 3Eh schließen Datei gekennzeichnet durch Dateinummer
o 3Fh lesen von Datei gekennzeichnet durch Dateinummer
o 40h Datei schreiben gekennzeichnet durch Dateinummer
o 41h löschen Datei
o 42h bewegen Dateizeiger (bewegen Lese-Schreib Zeiger für Datei)
o 43h einstellen/Rückgabe Dateiattribute
o 44h Gerät IOCTL (I/O Steuerung) Information
o 45h duplizieren Dateinummer
o 46h erzwingen einer duplizierten Dateinummer
o 47h holen aktuelles Inhaltsverzeichnis
o 48h Speicher belegen
o 49h Freigabe von belegten Speicher
o 4Ah modifizieren belegten Speicher
o 4Bh laden oder ausführen eines Programms
o 4Ch Programm beenden und Rückgabe zu DOS
o 4Dh holen Rückgabecode eines Unterprozesses erstellt bei 4Bh
o 4Eh suche erste Datei
o 4Fh suche nächste Datei
50h* einstellen neues aktuelles Programm Segment Prefix (PSP)
51h* legt aktuelles PSP in BX
52h* Zeiger zu der DOS auflisten von zeigt
53h* übersetzt BPB (Bios Parameterblock, siehe unterhalb)
o 54h holen Platte Überprüfungszustand (VERIFY)
55h* erstellen PSP: ähnlich wie Funktion 26h
o 56h umbenennen einer Datei
o 57h holen/einstellen Datum und Uhrzeit einer Datei
58h holen/einstellen Belegungsstrategie (DOS 3.x)
o 59h holen erweiterte Fehlerinformation
o 5Ah erstellen eines eindeutigen Dateiname
o 5Bh erstellen einer DOS Datei
o 5Ch sperren/entsperren Datei Inhalte
5Dh* Netzwerk
5Eh* Netzwerk Drucker
5Fh* Netzwerk Umleitung
60h* analysieren Pfadname
61h* Unbekannt
62h holen Programm Segment Prefix (PSP)
63h* holen anführen Byte Tabelle (DOS 2.25)
64h* Unbekannt
65h holen erweiterte Länderinformation (DOS 3.3)
66h holen/einstellen globale Code Seiten Tabelle (DOS 3.3)
67h einstellen Handle Zähler (DOS 3.3)
68h anvertrauen Datei (DOS 3.3)
69h Festplatte serielle Nummer (DOS 4.0)
6Ah Unbekannt
6Bh Unbekannt
6Ch erweitertes öffnen/erstellen (DOS 4.0)
Elemente die mit 'o' markiert sind, werden in der OS/2 Kompatibilität Box
unterstützt, entsprechend zu MicroSoft.
Anruf der DOS Funktionen ............................................. 4**7
Der DOS Funktionen werden aufgerufen, indem die Nummer der gewünschten Funktion im
Register AH, Unterfunktion in AL übertragen wird und alle anderen Register mit den Werten
die erforderlich sind versorgt werden und der int 21h aufgerufen wird.
Sobald der Interrupt aufgerufen ist, werden alle Register und Kennzeichen auf dem
Stapel abgelegt. Int 21h enthält ein Zeiger auf eine absolute Adresse in der IBMDOS.COM
Datei. Dies Adresse ist der Hauptschleife für den DOS Befehls Handler. Der Handler
holt die Registerwerte, vergleicht diese mit seine Liste von Funktionen, und führt diese
aus, falls die Funktion zulässig ist. Sobald die Funktion beendet ist, kann diese Werte an
den Befehlshandler zurückgeben. Der Handler sichert (PUSH) die Werte in dem Stapel und
übergibt dann die Steuerung an das aufrufende Programm.
Die meisten Funktionen geben einen Fehlercode zurück; einige geben aber mehr Information zurück.
Details hierüber sind in der Beschreibung der einzelnen Funktionen enthalten. Erweiterte
Fehlercodes für die meisten Funktionen, können durch den Aufruf der Funktion 59h festgestellt werden.
Register Einstellungen sind verzeichnet wenn diese von DOS benutzt werden. Einige Funktionen geben
Ausschußdaten in ungebrauchte Register zurück. Es sollten keine Tests auf Werte in nicht
spezifizierten Register durchgeführt werden; das Programm kann ein ungewöhnliches Verhalten an den Tag legen.
DS:DX Zeiger sind die Datensegment Register (DS) indiziert zu dem DH und DL
Register (DX). DX enthält immer die Offsetadresse, DS enthält die Segmentadresse.
Die Datei Kontrollblock Funktionen (FCB Funktionen) waren ein Teil von DOS 1.0. Seit
der Freigabe von DOS 2.0, Microsoft empfiehlt, daß diese Funktionen nicht benutzt werden
sollen. Eine Anzahl von beträchtlich erweiterten Funktionen (Verarbeitungsfunktionen) wurden
mit DOS 2.0 eingeführt. Die Verarbeitungsfunktionen liefern die Unterstützung für Wildcards und
Unterverzeichnisse, und die erweiterte Fehlererkennung via Funktion 59h.
Die Daten für die folgenden Aufrufe sind von verschiedenartige Intel, Microsoft,
IBM, und andere Veröffentlichungen zusammengestellt worden. Da sind viele spitzfindige
Unterschiede zwischen MSDOS und PCDOS und zwischen den einzelnen Versionen. Unterschiede
zwischen den Versionen sind vermerkt wie sie auftreten.
Es gibt verschiedenartige Wege um die DOS Funktionen aufzurufen. Für alle Methoden, die
Funktionsnummer ist geladen im Register AH, Unterfunktionen und/oder Parameter sind
geladen in AL oder andere Register, und aufrufen int 21 bei einer der folgenden
Methoden:
A) anrufen Interrupt 21h direkt (das empfohlene Verfahren)
B) durchführen ein long call zu Offset 50h in dem Programm PSP.
1) dies Methode der wille nicht arbeiten unter DOS 1. x
2) obgleich empfohlen von Microsoft für DOS 2.0, diese Methode benötigt mehr
Zeit und ist nicht mehr empfohlen.
C) plazieren der Funktionsnummer in CL und durchführen eines intrasegment Aufrufes zu
Stelle 05h in dem aktuellen Codesegment. Dies Stelle enthält ein long call
zu dem DOS Funktionsverteiler.
1) IBM empfiehlt, das diese Methode ausschließlich benutzt werden soll, sobald existierende Programme
für unterschiedlich Anruf Konventionen geschrieben werden. (wie konvertieren CP/M
Programme). Dies Methode sollte vermieden werden, falls nicht wesentliches dafür spricht.
2) AX wird durch diese Methode immer zerstört.
3) diese Methode ist ausschließlich zulässig für die Funktionen 00h-24h.
Es gibt auch verschiedenartig Wege um ein Programmvon zu beenden. (vorrausgesetzt es ist nicht
als ein TSR geplant). Alle Methoden außer der Aufruf 4Ch muß garantieren daß das
Segmentregister die Segmentadresse von dem PSP enthält.
A) Interrupt 21h, Funktion 4Ch (beenden mit Rückgabecode). Dies ist die
"offiziell" empfohlene Methode um zu DOS zurückzukehren.
B) Interrupt 21h, Funktion 00h (beenden Programm). Dies ist der frühere
int 21 Funktionsaufruf. Er ruft einfach den int 20h auf.
C) Interrupt 20h (aussteigen).
D) eine JMP Instruktion zu Offset 00h (int 20h Vektor) in dem Programm Segment
Prefix. Dies ist nur ein Umweg um den int 20h aufzurufen. Diese Methode
war vorbereitet in DOS 1.0 für die bequeme Umsetzung von CP/M Programme.
Es ist nicht länger zur Benutzung empfohlen.
E) eine JMP Instruktion zu Offset 05h (int 21 Vektor) in dem Programm Segment
Prefix, mit AH einstellen zu 00h oder 4Ch. Dies ist eine andere CP/M
typische Funktion.
wesentliche Versions Information ..................................... 4**8
* Funktionsaufrufe:
DOS 2.x Unterstützung der Funktionsaufrufe 00h bis 57h.
DOS 2.25 ist die ausschließliche Version zum unterstützen der Funktion 63h (Ausländische Tastatur)
DOS 3.x hat mehr weltoffenere Funktionsaufrufe zur Fehlerbehandlung
und Feststellung verfügbar als 2.x.
DOS 3.0 Unterstützung der Funktionsaufrufe 00h bis 5Ch und 62h, einschließlich
neue und geänderten Funktionsaufrufe für Version 3.0:
3Dh öffnen Datei
59h holen erweiterten Fehler
5Ah erstellen temporäre Datei
5Bh erstellen neue Datei
5Ch sperren/entsperren Dateizugriff
62h holen Programm Segment Prefix Adresse
DOS 3.1 Unterstützung der Funktionsaufrufe 00h bis 62h, einschließlich
der neuen und geänderten Funktionsaufrufe für DOS 3.1:
5E00h holen Maschinenname
5E02h einstellen Druckereinstellung
5E03h holen Druckereinstellung
5F02h holen Umleitung Liste Einsprungstelle
5F03h umleiten Gerät
5F04h abbrechen Umleitung
DOS 3.2 Unterstützung der folgenden neuen Funktionen:
44h erweiterte IOCTL Funktionen
DOS 3.3 Unterstützung der folgenden neuen Funktionen:
44h erweiterte IOCTL Funktionen
65h holen erweiterte Länderinformation (DOS 3.3)
66h holen/einstellen globale Code Seite Tabelle (DOS 3.3)
67h einstellen Handle Zähler (DOS 3.3)
68h commit Datei (DOS 3.3)
DOS 4.0 Unterstützung der folgend neuen Funktionen:
44h erweiterte IOCTL Funktionen
69h Festplatte serielle Nummer
6Ch erweitertes öffnen/erstellen
PCjr Kassetten Unterstützung ......................................... 4**9
Die PCJr ROM Kassetten haben eine Befehlstabelle, die den Namen von
jedem unterstützten Befehl und seinem Vektor im ROM enthält. Es wird als erste
das ROM angepaßt, vor der internen Befehlsanpassung, sodaß das abläuft, was
dort gefunden wurde.
Eigentlich, kann der ganze PCJr Code ohne Probleme durch NOP ersetzt werden -- AST und
Toshiba haben beide ein COMMAND.COM ohne diesen, und es gibt keine Hauptprobleme. Das
interessante ist, daß PC-DOS 4.0x diesen noch hat, obwohl sie ausdrücklich
sagen, daß DOS 4 nicht auf dem PCJr unterstützt wird (*sie* bedeutet bekanntlich IBM).
Der PCJr Code in COMMAND.COM wird ausschließlich auf dem PCJr ausgeführt und der PCJr
unterstützt keine normalen BIOS Erweiterung ROMs, ausschließlich der Erweiterungkasetten.
Kompatibilitätsprobleme mit DOS 4.0+ ................................. 4**10
Kompatibilitätsprobleme mit DOS 4.00 liegen vorwiegend in int 2Ah und int 2Fh. Bisher
war 2Ah immer reserviert, einige Netzwerksoftware benutzt dies Interrupt. IBM und
Microsofts Dokumentation vor 4.0 besagten nachdrücklich, daß int 2Fh Funktionen
nicht schon benutzt von PRINT.COM und zur allgemeinen Benutzung offen waren. DOS 4.00
benutzt eine Anzahl dieser Funktionen. Die Differenz in der Festplattenbehandlung sobald> 32mb
Bereiche benutzt werden, veranlässt Probleme mit einiger älterer Software.
Die meisten DOS 4.00 externen Programme (ASSIGN, SUBST, etc) kontrollieren für Dateien dasein
gedruckt - einschließlich LABEL. Dies ist ein Teil der erweiterten Netzwerkunterstützung.
Beinahe alle DOS 4.00 externen überprüfen außerdem das Vorhandensein von NETBIOS.
eDOS 4.0 ............................................................. 4**11
Wie im Abschnitt 1 erwähnt, das DOS 4. 0 welches an ausgewählte OEMS in England und
Europa in '86/87' ausgegeben wurde, ist nicht derselbe Code wie in DOS 4.0 bei der Freigabe in
1988. Das europäische DOS 4.0 (eDOS?) ist ein multitasking DOS geschrieben von Microsoft,
solange das US DOS 4.0 ist ein single tasking DOS geschrieben von IBM. eDOS 4.0 war
in Europa nach 3.1 freigegeben, aber bevor 3.2.
(gesondert von einem vorher freigegebenen Dokument):
`Microsoft Multitasking MS-DOS Produkt Specifikation' datiert April 28, 1986
MS-DOS 4.0 ist ein multitasking Betriebssystem, entwickelt von und verträglich
mit MS-DOS 3.1. Es unterstützt echtes multitasking welches dem Anwender die
illusion gibt von und begünstigt von viele unabhängige Computer. Ferner, MS-DOS 4.0
erlaubt es die meisten existierenden MS-DOS 2.x und 3.x Anwendungen auszuführen
ohne Änderung in der MS-DOS 4.0 multitasking Umgebung.
(Ende von gesondert).
eDOS 4.0 bestand aus einem Hauptprogramm (DOS2/3 verträglich) und verschiedene
multitasking (Hintergrund) Programme, die speziell geschrieben wurden. Der Grund
hierfür war, der Zwang in die einzelne 640k Speicher Abbildung zu passen.
int 21h Funktionen: (einige von diesen erscheinen in späteren Versionen von DOS)
AEXEC identisch zu EXEC sub 4.
CREATMEM erstellen eines benannten Speicherbereiches, welcher kann Zugang durch andere
Vorgänge erhalten. (gemeinsam benutzter Speicher \SHAREMEM\ ...)
CRITENTER, CRITLEAVE (Semaphore Routinen)
CRITERR (dies ist eine der die DOS 3 haben sollte)
ermöglicht die Abarbeitung von schweren Fehlern oder automatisches vernachlässigen von schweren Fehlern.
CWAIT wartet auf einen Rückgabecode von einem asynchronen Prozess. Kehrt zurück, sobald irgendein
Unterprozess beendet wird. Unterprozesse können auch wie Waisen gestartete werden,
sodaß hieruaf nicht gewartet werden muß.
EXEC 4Bh (sub Funktion 4) - Start asynchronen Prozess.
FREEZE Hält den Ablauf eines spezifizierten Prozesses an.
GETEXTENDEDERROR - wie für DOS3, außer es wird die Versionsnummer überprüft, um die Ebene
der Fehlerbehandlung zu beschreiben - du kann fragen für ein Zeiger zu der schweren
Fehler Information paketieren für den letzten schweren Fehler.
GETMEM bekommt Zugriff zu einem vorher erstellten gemeinsam benutzten Speicherbereich.
GETPID gibt zurück Prozess ID und Abstammungs Prozess ID.
GET/SET MEMORY PARTITION SIZE
Vordergrundspeicher wird für übliche Anwendungen benutzt. Hintergrundspeicher wird
für DOS 4 Anwendungen benutzt, die nicht den Bildschirm benutzen (oder ausschließlich benutzen es
bis popup Funktionen). Hintergrund Anwendungen können auch Vordergrundspeicher
benutzen, aber nicht umgekehrt.
KILL beendet ein Prozess.
PBLOCK blockt ein Prozess bis ein zugehöriger PRUN gegeben ist. Ein Zeitüberschreitung ist auch
spezifiziert. Eine Speicherstelle ist ging vorbei welcher muß sein paarig in
der PRUN. (Semaphore)
PIPE erstellen einer PIPE. Zugriff ist bis lesen/schreiben/schließen (aber nicht LSEEK).
PRUN Freigabe eines gesperrten Prozesses. (Semaphore)
RELEASEMEM Freigabe eines gemeinsam benutzten Speicherzugriffes. Falls der Referenzzähler Null enthält
wurde der Speicher freigegeben.
RESUME Wiederaufnehmen eines eingefrorenen Prozesses.
SEND SIGNAL
Signals waren:
SIGINTR, SIGTERM, SIGPIPE, SIGUSER1, SIGUSER2.
Control C, Programmende, kaputte Pipe, Anwender def, Anwender def.
Aktionen waren:
beenden Prozess auf Quittung, ignorieren, annehmen,
Sender bekommt Fehler oder empfing Empfangsbestätigung Signal.
Die letzte von diesen gibt unmittelbar zu dem Sender zurück - es ist
geplant zur Benutzung, sobald die Abarbeitung des Signals zu lange dauert.
SETFILETABLE (86h) installieren einer neuen Dateihandler Tabelle. (mehr als 20 Dateien,
wie in DOS 3.3+?)
SETPRI setzten Prozess Priorität (für diesen Prozess oder vollständig subtree).
SET SIGNAL HANDLER
SLEEP Suspendieren des aktuellen Prozesses für die Anzahl der gegebenen Millisekunden.
MSC 4.0 hatte eine Demo welche 'DOS_sleep' int 21h/fn 89h aufgerufen hat -
erscheinen bzw. wird nicht ausgeführt in den bekannten DOS Versionen.
WAIT wie für DOS 3.
int 2Fh Funktionen:
CHECKPU kontrollieren für popup Paket Installierung
POSTPU öffnen/schließen eines popup Bildschirms
SAVEPU sichern popup Bildschirm
RESTOREPU umspeichern popup Bildschirm
Andere nützliche Merkmale:
eDOS 4.0 Programme benutzen das Windows .EXE Format
Programme können gemeinsame Code Segmente benutzen
verbesserte Gerätetreiber
der seriell Port hatte einen vollen Satz der IOCTL Aufrufe (benutzt bis zu
einem neuen auswählbaren IOCTL Aufruf).
Gerätetreiber können multi-tasking sein. Sie haben geeignete Routinen zur
Unterstützung von mehrfach angeforderten Warteschlangen (ebenso wie OS/2 dies später vorsieht)
Interrupt gesteuerte seriell Anschlüsse
sortierte Plattenpuffer bevor diese geschrieben werden
Die folgenden waren verzeichnete als mögliche zukünftige Erweiterungen:
Dateisystem Schutz und Genehmigungen
Hochleistungsdateisystem (HPFS wurde in OS/2 1.2 realisiert)
installierbare Dateisysteme (IFS Haken ist vorhanden in US DOS 4.0)
Symbolische Verbindungen (sie haben diese auf OS/2 nicht, gerade jetzt ausführen sie?)
Löschungen rückgängig machen
lange Namen, Kleinbuchstaben Namen, zugreifen/erstellen Datum/Uhrzeit, Name von Anwendungen
erstellen Datei, Revisionsnummer etc. (OS/2 HPFS)
Entsprechend den wenigen Information die vom BIX ausgwählt wurden, Wang prüfte eine alpha
Version von eDOS 4.0 zur Benutzung für ein laptop Projekt irgendwann in 1985, aber gab es dann auf
weil das OS unfähig war, mit "schlechten" Programme in einer vernünftigen Art und Weise
umzugehen. Ich redete mit einer Person welche hatte beta-tested es für MS, diese kommentierte
"der einzigste was ausführt wird ist COMMAND.COM." Microsoft hat offensichtlich entweder
eDOS komplette aufgegeben oder (wahrscheinlich) vereinte es in OS/2. Ich bin unfähig
festzustellen, ob die französische Post eDOS benutzt, und zu der beste
ich kann suchen außerhalb Apricot Computer nie tat viel mit es.
Obgleich es höchst unwahrscheinlich ist das irgendeiner je Information zur Programmierung
von eDOS braucht, ich finde die vollständig Unterwerfung faszinierend. IBM hatte nicht
nur das Produkt angekündigt, sondern auch hierfür Werbung von 1984-85 gemacht. Wer verwarf den Entwurf? Warum?
Wier werden es wahrscheinlich nie herausfinden.
DOS Funktionen ausführlich ........................................... 4**12
INT 21H DOS Funktionen
Funktion (Hex)
* zeigt an das die Funktionen nicht in der IBM DOS technischen Referenz dokumentiert sind.
Anmerkung einige Funktionen sind dokumentiert in anderen Microsoft oder zugelassen OEM
Dokumentation.
Funktion 00h beenden Programm
beendet Programm, aktualisiert FAT, überträgt Puffer, wiederherstellen Register
Aufruf AH 00h
CS Segmentadresse von PSP
Rückgabe keine
Anmerkung 1) Programm muß plazieren die Segmentadresse von dem PSP Kontrollblock im CS
bevor diese Funktion aufgerufen wird.
2) die Beendigungs, ctrl-break, und kritische Fehler Ausgangsadressen (0Ah, 0Eh,
12h) sind auf die Werte zurückgesetzt, die sie beim Aufruf des Programms hatten,
diese Werte sind gesichert in dem Programm Segment Prefix an den Adressen
PSP:000Ah, PSP:000Eh, und PSP:0012h.
3) alle Dateiopuffer werden übertragen und die geöffneten Handles des Prozesses
werden geschlossen.
4) falls irgendeine der Dateien ihre Länge verändert hat und nicht geschlossen wird,
wird dies im Inhaltsverzeichnis nicht richtig aufgezeichnet.
5) überträgt Steuerung an die Beendigungsadresse.
6) dieser Aufruf führt genau dieselbe Funktion wie int 20h aus.
7) alle benutzten Speicher des Programms werden an DOS zurückgegeben. DOS ebenso geht die
Speicherkette von Speicherblöcke aufwärts und markiert das alle die vom PSP benutzt wurden
wieder frei sind.
8) TOS:$ 00 TERM. Gibt die Systemsteuerung an das Programm zurück von welchem es
gestartet wurde. Falls EXECed von einem Programm, es gibt diese zu dem Programm zurück.
Falls von DeskTop gestartet, gibt es zurück zum DeskTop. Dies ist wichtig für die verketteten
Programmsegmente.
9) Dateien welche mit FCBs geöffnet wurden, werden nicht automatisch geschlossen.
Funktion 01h holen Tastatureingabe
wartet auf ein Zeichen von STDIN (falls notwendig), Echos zu STDOUT
Aufruf AH 01h
Rückgabe AL ASCII Zeichen von STDIN (8 Bits)
Anmerkung 1) überprüft Zeichen auf Ctrl-C, falls Zeichen ist Ctrl-C, ausführen int 23h.
2) für Funktionsaufruf 06h, erweiterte ASCII Codes benötigt zwei Funktionsaufrufe.
Der erste Aufruf gibt 00h zurück, wie ein Anzeiger das der nächste Aufruf
ein erweiterter ASCII Code ist.
3) Eingabe und Ausgabe können umgeleitet werden. Falls umgeleitet, es gibt kein Weg um
EOF festzustellen.
4) TOS:$ 1 CONIN. Zeichen wird in D0 zurückgegeben. ASCII Code des Zeichens im höherwertigen Byte,
Tastaturauswahlcode im niederwertigen Byte. Gibt Scancodes von Tasten zurück, welche
keinen ASCII Wert haben.
Funktion 02h Anzeigen Ausgabe
Anzeigen Zeichen in DL zu STDOUT
Aufruf AH 02h
DL 8 Bit Daten (gewöhnlich ASCII Zeichen)
Rückgabe keine
Anmerkung 1) falls Zeichen ist 08 (zurücksetzen) der Cursor wird un 1 Zeichen nach links bewegt
(nicht löschendes zurücksetzen).
2) falls Ctrl-C nach der Eingabe erkannt wird, int 23h ist ausgeführt.
3) Eingabe und Ausgabe können umgeleitet werden. Falls umgeleitet, es gibt kein Weg um
EOF festzustellen.
4) TOS:$ 2 CONOUT. Zeichen muß auf den Stapel gebracht werden, wie das erste Wort. Der
ASCII Wert des Zeichen geht in dem niederwertigen Byte und das höherwertige Byte ist Null.
Zeichen werden zum Gerät #2 ausgegeben, normal die Ausgabe auf die Console.
Steuerzeichen und Escape Sequenzen werden normalerweise interpretiert.
Funktion 03h Hilfseingabe
holen (oder warten bis) Zeichen von STDAUX
Aufruf AH 03h
Rückgabe AL ASCII Zeichen von Hilfseinheit
Anmerkung 1) AUX, COM1, COM2 ist ungepuffert und nicht Interrupt gesteuert
2) dieser Funktionsaufruf gibt keinen Zustand oder Fehlercodes zurück. Zur besseren
Kontrolle wird empfohlen die ROM BIOS Routine (int 14h) zu benutzen oder
einen AUX Gerätetreiber zu schreiben und benutzen IOCTL.
3) beim Starten, PC-DOS initializiert den ersten Hilfsport (COM1) zu 2400
Baud, keine Parität, ein Stop-Bit, und ein 8-bit Wort. MSDOS kann abweichen.
4) falls Ctrl-C von STDIN eingegeben wird, int 23h wird ausgeführt.
5) TOS:$ 03 Hilfseingabe. Funktion kehrt zurück sobald ein Zeichen empfangen
wurde. Zeichen wird im niederwertigen Byte von D0 zurückgegeben.
Funktion 04h Hilfsausgabe
schreiben Zeichen zu STDAUX
Aufruf AH 04h
DL ASCII Zeichen zum senden an AUX
Rückgabe keine
Anmerkung 1) dieser Funktionsaufruf gibt keinen Zustand oder Fehlercodes zurück. Zur besseren
Kontrolle wird empfohlen die ROM BIOS Routine (int 14h) zu benutzen oder
einen AUX Gerätetreiber zu schreiben und benutzen IOCTL.
2) falls Ctrl-C von STDIN eingegeben wird, int 23h wird ausgeführt.
3) vorgegeben ist COM1 falls dieser nicht von DOS umgeleitet wird.
4) falls das Gerät beschäftigt ist, wartet diese Funktion solange bis es bereit ist.
5) TOS:$ 04 Hilfsausgabe. Höherwertiges Byte sollte Null sein, niederwertiges Byte
ist der ASCII Code.
Funktion 05h Drucker Ausgabe
schreiben Zeichen zu STDPRN
Aufruf AL 05h
DL ASCII Code des Zeichen zum senden
Rückgabe keine
Anmerkung 1) falls Ctrl-C von STDIN eingegeben wird, int 23h wird ausgeführt.
2) vorgegeben ist PRN oder LPT1 falls dieser nicht mit dem MODE Befehl umgeleitet wurde.
3) falls der Drucker beschäftigt ist, wartet diese Funktion solange bis er bereit ist.
5) TOS:$ 05 Drucker Ausgabe. Höherwertiges Byte von D0 ist Null, niederwertiges Byte ist Zeichen.
Gibt -1 zurück, falls Zeichen erfolgreich gesendet wurde. Zeitüberschreitung nach 30
Sekunden und setzt D0 auf Null.
Funktion 06h direkte Console I/O
holen Zeichen von STDIN; echo Zeichen zu STDOUT
Aufruf AH 06h
DL 0FFh für Console Eingabe, oder 00h-0FEh für Console Ausgabe
Rückgabe ZF gesetzt wenn kein Zeichen verfügbar
gelöscht wenn Zeichen empfangen wurde
AL ASCII Code des Zeichens
Anmerkung 1) erweiterte ASCII codes benötigen zwei Funktionsaufrufe. Der erste Aufruf gibt
00h als Hinweis zurück, das der nächste Aufruf eine erweiterten Code zurückgibt.
2) falls DL ist nicht 0FFh, DL nimmt an das es ein zulässiges Zeichen zur
Ausgabe an STDOUT hat.
3) dies Funktion überprüft nicht auf Ctrl-C oder Ctrl-PrtSc.
4) Eingabe wird nicht am Bildschirm angezeigt.
5) falls I/O ist umgeleitet, EOF oder Platte voll wird nicht erkannt.
6) TOS:$ 06 RAWCONIO. Holen Zeichen von Tastatur bei Anruf mit $FF in
D0. ASCII und Scancodes werden wie bei CONIN zurückgegeben. Falls ein anderer Wert
als $FF benutzt wird, wird es zu STDOUT an der aktuell Cursorposition
ausgegeben. Dieser Aufruf interpretiert alle Steuerzeichen und Escape Sequenzen.
Funktion 07h direkt Console Eingabe ohne Echo (kontrolliert nicht auf BREAK)
holen oder warten auf Zeichen von STDIN, gibt Zeichen in AL zurück
Aufruf AH 07h
Rückgabe AL ASCII Zeichen vom Standardeingabegerät
Anmerkung 1) erweiterte ASCII codes benötigen zwei Funktionsaufrufe. Der erste Aufruf gibt
00h als Hinweis zurück, das der nächste Aufruf einen erweiterten Code zurückgibt.
2) dies Funktion überprüft nicht auf Ctrl-C oder Ctrl-PrtSc.
3) Eingabe kann umgeleitet werden.
4) TOS:$ 07 direkt CONIN ohne ECHO. Dasselbe wie Funktion 01h, ausser
das die Zeichen nicht am Bildschirm angezeigt werden.
Funktion 08h Console Eingabe ohne Echo (überprüft BREAK)
holen oder warten auf Zeichen von STDIN, gibt Zeichen in AL zurück
Aufruf AH 08h
Rückgabe AL Zeichen vom Standardeingabegerät
Anmerkung 1) Zeichen wird auf ctrl-C überprüft. Falls ctrl-C ist erkannt, ausführen int 23h.
2) für Funktionsaufruf 08h, erweiterte ASCII Zeichen benötigen zwei Funktionsaufrufe.
Der erste Aufruf gibt 00h als Hinweis zurück, das der nächste Aufruf den
eigentlichen erweiterten Code zurückgibt.
3) Eingabe kann umgeleitet werden. Falls umgeleitet, es gibt kein Weg um EOF festzustellen.
4) TOS:$ 08 CONIN ohne ECHO. Derselbe wie der vorhergehende Aufruf. (keine Kontrolle für
Steuerzeichen).
Funktion 09h anzeigen Zeichenkette
Ausgabe Zeichen der anzuzeigenden Zeichenkette zu STDOUT
Aufruf AH 09h
DS:DX Zeiger zu der Zeichenkette die angezeigt werden soll
Rückgabe keine
Anmerkung 1) die Zeichenfolge in Speicher muß mit einem $ (24h) beendet sein
2) das $ wird nicht angezeigt, bleibt aber in AL erhalten.
3) Ausgabe zu STDOUT ist dasselbe wie Funktionsaufruf 02h.
4) TOS:$ 09 drucken Zeile. Die Adresse von der ASCIIZ Zeichenkette ist auf dem
Stapel wie ein Parameter abgestellt und ist gedruckt an der aktuellen
Cursorposition. Die Größe der Zeichenkette ist nicht begrenzt. D0 enthält die Anzahl
der zu druckenden Zeichen. Steuerzeichen und Escape Sequenzen werden ausgewertet.
Funktion 0Ah gepufferte Tastatureingabe
liest Zeichen von STDIN und fügt diese in den Puffer ein, beginnend
mit dem dritten Byte.
Aufruf AH 0Ah
DS:DX Zeiger zum Eingabepuffer
Rückgabe keine
Anmerkung 1) Min Puffer Größe=1, max=255.
2) Zeichen wird ctrl-C überprüft. Falls ctrl-C erkannt wird, ausführen int 23h.
3) Format von Puffer DX:
Byte Inhalt
1 maximale Anzahl von Zeichen die der Puffer aufnimmt, einschließlich CR.
Lesen STDIN und füllen des Puffers solange bis ein CR (<ENTER> oder 0Dh)
gelesen wird. Falls der Puffer bis zur maximalen Anzahl -1 gefüllt ist
jede zusätzliche Eingabe wird nicht beachtet und ASCII 7 (BEL) wird ausgegeben
solange bis ein CR gelesen wird. (du mußt diesen Wert einstellen)
2 eigentliche Anzahl empfangener Zeichen, ohne CR welches immer das
letzte Zeichen ist. (die Funktion setzt diesen Wert)
3-n eingebene Zeichen werden in dem Puffer ab hier abgestellt.
Puffer muß mindestens so groß sein, wie die Nummer im 1.Byte.
n+1 CR Zeichen( 0Dh).
4) Eingabe kann umgeleitet werden. Falls umgeleitet, es gibt kein Weg um EOF festzustellen.
5) die Zeichenkette kann mit den Standard DOS Editierbefehlen
während der Eingabe editiert werden.
6) erweiterte ASCII Zeichen werden als 2 Bytes gespeichert, das erste Byte
ist dann Null.
7) TOS:$ 0A READLINE. Abrufen CR-beendete Zeile von CONIN. Die Adresse
des Puffer wird wie ein Parameter übergeben. Byte 1 ist die maximale Länge
der Zeile, Byte 2 ist die Anzahl der eingegeben Zeichen, Byte 3 ist das
erste Zeichen. Escape Sequenzen werden nicht interpretiert, dafür aber die
normalen Steuerzeichen zum editieren.
Funktion 0Bh kontrollieren Standardeingabe (STDIN) Status
überprüft ob Zeichen an STDIN verfügbar sind
Aufruf AH 0Bh
Rückgabe AL 0FFh falls ein Zeichen von STDIN verfügbar ist
00h wenn kein Zeichen von STDIN verfügbar ist
Anmerkung 1) überprüft auf Ctrl-C. Falls Ctrl-C erkannt wird, int 23h wird ausgeführt.
2) Eingabe kann umgeleitet sein.
3) überprüft auf Zeichen ausschließlich, es wird nicht in die Anwendung eingelesen
4) IBM berichtet, daß dieser Aufruf nicht richtig funktioniert unter dem DOSSHELL
Programm in DOS 4.00 und 4.01. DOSSHELL gibt immer Null zurück. Diese
Funktion arbeitet korrekt von der Befehlszeile oder einer Anwendung.
5) TOS:$ 0B CONSTAT. überprüft 64-byte OS Eingabepuffer.
Funktion 0Ch löschen Tastaturpuffer & aufrufen einer Tastaturfunktion (FCB)
Abbildung Puffer, ausführen Funktion in AL (01h, 06h, 07h, 08h, 0Ah ausschließlich)
Aufruf AH 0Ch
AL Funktionsnummer (muß sein 01h, 06h, 07h, 08h, oder 0Ah)
Rückgabe AL 00h Puffer wurde gelöscht, keine andere Abarbeitung wurde ausgeführt
andere irgendwelche anderen Werte haben keine Bedeutung
Anmerkung 1) zwingt System zu warten bis ein Zeichen eingegeben wurde.
2) Löscht alle typeahead Eingaben, dann ausführen Funktion spezifiziert in AL (durch
Übertragung in AH und wiederholend des int 21 Aufrufes).
3) falls AL ein Wert enthält, der nicht vorher aufgelistet wurde, (derartig wie 00h) der
Eingabepuffer wird gelöscht und keine andere Handlung durchgeführt. Anmerkung daß dies
der STDIN Puffer ist und nicht der eigentliche Tastaturpuffer. Der Tastatur-
puffer wird nicht gelöscht, falls die Eingabe umgeleitet ist.
Funktion 0Dh Platte zurücksetzen
Übertragen alle aktuellen offenen Dateipuffer zur Platte
Aufruf AH 0Dh
Rückgabe keine
Anmerkung 1) schließt nicht die Dateien. Aktualisiert nicht die Einträge im Inhaltsverzeichnis; geänderte Dateien
die die Größe verändert haben, aber nicht geschlossen werden, werden im Inhaltsverzeichnis nicht korrekt aufgezeichnet.
2) setzt DTA Adresse auf DS:0080h
3) sollte vor einem Plattewechsel benutzt werden, Ctrl-C Handler, und zum übertragen
der Puffer zur Platte.
4) dies Aufruf ist ausdrücklich in der OS/2 Kompatibilitätsbox unterstützt.
Funktion 0Eh Auswahl des aktuellen Laufwerks
wählt das Laufwerk spezifiziert in DL (falls zulässig) als aktuelles Laufwerk aus
Aufruf AL 0Eh
DL neue aktuelle Laufwerksnummer (0=A:, 1=B:, 2=C:, etc.)
Rückgabe AL Anzahl physischer Laufwerke, falls nicht LASTDRIVE= in der CONFIG.SYS
angegeben wurde und eine höher Nummer als die vom letzten physischen
Laufwerk spezifiziert.
Anmerkung 1) für DOS 1.x und 2.x, der minimale Wert für AL ist 2.
2) für DOS 3.x und 4.x, der minimale Wert für AL ist 5.
3) die zurückgegebene Laufwerksnummer ist nicht zwangsläufig ein zulässig Laufwerk.
4) für DOS 1.x: 16 logische Laufwerke sind verfügbar, A-P.
Für DOS 2.x: 63 logische Laufwerke sind verfügbar. (Buchstaben sind ausschließlich benutzt für
die ersten 26 Laufwerke. Falls mehr als 26 logische Laufwerke benutzt
werden, weitere Laufwerksbuchstaben sind andere ASCII Zeichen wie
{,], etc.
Für DOS 3.x, 4.x: 26 logische Laufwerke sind verfügbar, A-Z.
5) TOS:$ 0E SETDRV. Ein 16-bit Parameter mit drivespec wird an TOS übergeben.
Beim beenden, enthält D0 die Nummer des Laufwerk das vorher aktiv war.
(Nicht die Anzahl der vorhandenen Laufwerke)
6) dies Aufruf ist ausdrücklich in der OS/2 Kompatibilitätsbox unterstützt.
Funktion 0Fh öffnen Datei (FCB)
durchsucht das aktuell Inhaltsverzeichnis nach dem spezifizierten Dateiname und
plaziert die wichtigen Information in den Dateikontrollblock.
Aufruf AH 0Fh
DS:DX Zeiger zu einem ungeöffneten FCB
Rückgabe AL 00h falls Datei gefunden
0FFh falls Datei nicht gefunden
Anmerkung 1) falls der Laufwerkscode war 0 (aktuelles Laufwerk) wird er geändert zu dem eigentlich
Laufwerk das benutzt wird (1=A:, 2=B:, 3=C:, etc). Dies erlaubt das ändern des aktuellen Laufwerks
ohne störend auf nachträglich Transaktionen dieser Datei zu wirken.
2) das aktuelle Blockfeld (FCB Bytes C-D, Offset 0Ch) wird auf Null eingestellt.
3) die Satzlänge mit der gearbeitet wird (FCB Bytes E-F, Offset 0Eh) wird
auf den vom System vorgegebenen Wert von 80h gesetzt. Die Größe der Datei (Offset 10h) und
das Datum (Offset 14h) sind eingestellt auf die Information die dem Hauptverzeichnis
entnommen wurden. Der Standardwert für die Satzlänge (FCB Bytes E-F) kann geändert werden,
oder einstellen der wahlfreien Satzlänge und/oder des aktuellen Satzfeldes.
Diese Aktionen können erst nach dem öffnen durchgeführt werden, aber
bevor irgendeine Festplattentransaktionen durchgeführt wird.
4) mit DOS 3.x die Datei wird im Kompatibilitätsmodus geöffnet. (Netzwerk)
5) Microsoft empfiehlt die Benutzung des Funktionsaufruf 3Dh dafür.
6) dieses Aufruf wird auch von dem APPEND Befehl in DOS 3.2+ benutzt
7) bevor eine sequentielle Festplatteoperation auf die Datei durchgeführt wird,
muß das aktuelle Satzfeld (Offset 20h) eingestellt werden. Bevor ein wahlfreier
Zugriff auf die Datei durchgeführt wird, muß das entsprechende Feld
(Offset 21h) gesetzt werden. Falls die vorgegeben Satzlänge von 128 Bytes
falsch ist, muß diese auf den richtigen Wert eingestellt werden.
Funktion 10h Datei schließen (FCB)
schließt eine Datei nach dem schreiben
Aufruf AH 10h
DS:DX Zeiger zu einem geöffneten FCB
Rückgabe AL 00h falls die Datei gefunden und geschlossen wurde
0FFh falls die Datei im aktuellen Inhaltsverzeichnis nicht gefunden wurde
Anmerkung 1) dieses Funktionsaufruf muß bei einer offenen Datei die nicht mehr benötigt wird gemacht werden,
und nach einem Schreibzugriff, damit sichergestellt ist, das alle Information im Inhaltsverzeichnis
aktualisiert werden.
2) falls die Datei im aktuellen Inhaltsverzeichnis nicht gefunden wird,
wird in AL 0FFh zurückgegeben, weil vermutet wird, das die Diskette gewechselt wurde.
Wie verlautet, ist diese Fehlerangabe nicht absolut verläßlich mit der DOS
Version 2.x.
3) falls gefunden, wird das Inhaltsverzeichnis aktualisiert, die Puffer werden
übertragen, und AL gibt 00h zurück.
4) da ist ein spitzfindiger aber gefährlicher Fehler in dieser Funktion. Falls eine
Datei geschlossen wird, die vorher nicht mit einem erfolgreichen OPEN Befehl
geöffnet wurde, wird die Dateilänge auf Null gesetzt, und die Cluster die
der Datei zugewiesen waren werden freigegeben.
Funktion 11h suche ersten Directory-Eintrag (FCB)
durchsucht das aktuelle Laufwerk & Inhaltsverzeichnis nach dem ersten Auftreten eines Dateinamens
Aufruf AH 11h
DS:DX Zeiger zur Adresse vom FCB
Rückgabe AL 00h Suche war erfolgreich
0FFh Datei nicht gefunden
Anmerkung 1) der FCB kann die Wildcard Zeichen ? unter DOS 2.x, und ? oder *
unter 3.x und 4.x enthalten.
2) der original FCB an DS:DX enthält die Information um die Suche mit
der Funktion 12h fortzusetzen, und sollte nicht modifiziert werden.
3) falls eine Datei gefunden wurde, gibt AL 00h zurück und die Adressen an der
Adresse des Diskettentransferbereichs wird wie folgt eingestellt:
a) falls der FCB zur Durchsuchung ein erweiterter FCB war, dann wird das erste
Byte an dem Diskettentransferbereich auf 0FFh gesetzt, gefolgt von 5 Bytes
mit Nullen, dann das Attributbyte von der Datei, dann die benutzte
Laufwerksnummer (1=A, 2=B, etc) und dann die 32 Bytes von dem Inhaltsverzeichnis
Eintrag. So, die Adresse des Diskettentransferbereiches enthält ein zulässig ungeöffneten FCB
mit der derselbe suchen schreibt zu wie der suchen FCB.
b) falls der FCB zur Durchsuchung ein normaler FCB war, dann enthält das erste
Byte die benutzte Laufwerksnummer (1= A, 2= B, etc), und die nächsten 32
Bytes enthalten den Inhaltsverzeichnis Eintrag. So, der Diskettentransferbereich
enthält einen zulässigen ungeöffneten normalen FCB.
4) falls ein erweiterter FCB benutzt wird, gilt folgendes Suchmuster:
a) falls das FCB Attributbyte Null ist, ausschließlich normale Dateieinträge werden
gefunden. Einträge fürs Datenträgeretikett, Unterverzeichnisse, versteckte oder System-
dateien, werden nicht zurückgegeben.
b) falls das Attributbyte auf versteckte oder Systemdateien, oder
Unterverzeichniseinträge eingestellt ist, es wird als inklusives Suchen erachtet.
Alle normal Dateieinträge plus alle übereinstimmenden Einträge mit den spezifizierten
Attributen werden zurückgegeben. Um alle Directory-Einträge außer dem Datenträgeretikett
zu erhalten, das Attributbyte kann auf versteckt + system + Inhaltsverzeichnis
(alle 3 Bits an) eingestellt werden.
c) falls der Attributfeld für dein Datenträgeretikett eingestellt ist, es wird als
exklusives Suchen behandelt, und ausschließlich der Datenträgeretikett Eintrag wird zurückgegeben.
5) dies Aufruf wird auch von dem APPEND Befehl in DOS 3.2+ benutzt
Funktion 12h suchen nächsten Directory-Eintrag (FCB)
suchen nach den Auftreten von weiteren Dateinamen
Aufruf AH 12h
DS:DX Zeiger zum ungeöffneten FCB spezifiziert durch dir vorhergehende Suchen
ersten (11h) oder suchen nächsten (12h)
Rückgabe AL 00h falls weitere Dateinamen gefunden wurden
0FFh falls keine weitere Dateinamen gefunden wurden
Anmerkung 1) nachdem ein übereinstimmendenr Dateiname mit dem Funktionsaufruf 11h gefunden wurde,
Funktion 12h kann dazu benutzt werden, den nächsten übereinstimmenden Dateinamen
zu suchen, nach einer unklaren Anforderung. Für DOS 2.x, ? sind in dem Dateiname
zugelassen. Für DOS 3.x und 4.x, globale (*) Dateinamen Zeichen sind zugelassen.
2) die DTA enthält Information von der vorhergehende ersten Suche oder der nächsten Suche.
3) Es sollten keine Transaktionen auf dem Laufwerk mit diesem FCB zwischen einer vorhergehenden
Funktion 11h oder 12h Aufruf und diesem erfolgen. "nicht dokumentierte" Felder im FCB
werden benutzt, um notwendige Information für die Dauer der Suchen zu speichern, und
einige Laufwerks Transaktionen können diese Bereiche überschreiben.
4) falls die Datei gefunden wurde, ein FCB ist erstellt an der DTA Adresse und
darauf eingestellt diese zu öffnen oder zu löschen.
Funktion 13h Datei löschen (FCB)
löscht die im FCB spezifizierte Datei vom aktuellen Inhaltsverzeichnis
Aufruf AH 13h
DS:DX Zeiger zu der Adresse des FCBs
Rückgabe AL 00h Datei wurde gelöscht
0FFh falls Datei nicht gefunden wurde oder nur Lesezugriff möglich ist
Anmerkung 1) alle übereinstimmenden aktuellen Inhaltsverzeichniseinträge werden gelöscht. Das globale Dateiname
Zeichen "?" ist in dem Dateiname zugelassen.
2) löschen keine Dateien mit dem Nur Lesen(read-only) Attribut
3) schließt offene Dateien bevor diese gelöscht werden.
4) verlangt Netzwerk Zugriffsrechte.
5) dieses Aufruf unterstützt Wildcards und ist sehr schnell. Der "neue" Aufruf
41h ist vermutlich dazu da, diesen zu ersetzen, seit es Unterver-
zeichnisse gibt. Leider unterstützt die fn 41h keine Wildcards.
Funktion 14h Datei sequentiell lesen (FCB)
liest Datensätze sequentiell vom Laufwerk via FCB
Aufruf AH 14h
DS:DX Zeiger zu einem geöffneten FCB
Rückgabe AL 00h erfolgreich gelesen
01h Dateiende (keine Daten gelesen)
02h DTA Bereich zu klein für die spezifizierte Satzlänge
oder Segment Überlauf
03h Datensatz teilweise gelesen, EOF gefunden
Anmerkung 1) die Satzlänge wird auf den Wert vom Offset 0Eh in dem FCB gesetzt.
2) der Satz zeigt auf den aktuellen Block (Offset 0Ch) und das aktuelle
Satzfeld (Offset 20h) ist geladen an die DTA, dann der aktuelle Block
und das aktuelle Satzfeld werden erhöht.
3) der Satz wird in den Speicher gelesen an die aktuelle DTA Adresse wie spezifiziert
von dem letzten Aufruf der Funktion 1Ah. Falls der Größe von dem Satz und
die Stelle von dem DTA sind so, daß ein Segment Überlauf oder Umlauf auftritt,
der Fehlercode in AL wird auf 02h eingestellt.
4) falls ein teilweiser Satz am Ende der Datei gelesen wurde, wird die angeforderte
Größe mit Nullen aufgefüllt und der Fehlercode in AL wird auf 03h eingestellt.
Funktion 15h Datei sequentiell schreiben (FCB)
schreibt Sätze spezifiziert durch den FCB sequentiell zum Laufwerk
Aufruf AH 15h
DS:DX Zeiger zur Adresse vom FCB
Rückgabe AL 00h erfolgreiches schreiben
01h Disk voll, schreiben wurde annulliert
02h Diskettentransferbereich (DTA) zu klein oder Segment eingewickelt
Anmerkung 1) die zu schreibenden Daten wedren dem Diskettentransferbereich entnommen.
2) die Satzlänge ist auf den Wert vom Offset 0Eh in dem FCB eingestellt.
3) diese Funktion kann nicht schreiben, wenn die Dateien mit dem Nur-Lesen Attribut versehen ist.
4) der Satz zeigt auf den aktuellen Block (Offset 0Ch) und das aktuelle
Satzfeld (Offset 20h) ist geladen an die DTA, dann der aktuelle Block
und das aktuelle Satzfeld werden erhöht.
5) falls die Satzlänge kleiner als ein Sektor ist, die Daten in der DTA in einem Puffer
geschrieben; der Puffer wird auf die Platte geschrieben, sobald er einen voll Sektor
von Daten enthält, die Datei geschlossen wird, oder ein Zurücksetzen der Platte (Funktion 0Dh) ist
erfolgt.
3) der Satz wird an die aktuelle DTA Adresse geschrieben, wie spezifiziert
von dem letzten Aufruf der Funktion 1Ah. Falls der Größe von dem Satz und
die Stelle von dem DTA sind so, daß ein Segment Überlauf oder Umlauf auftritt,
der Fehlercode in AL wird auf 02h eingestellt.
Funktion 16h erstellen einer Datei (FCB)
suchen und öffnen oder erstellen Inhaltsverzeichnis Eintrag für Datei
Aufruf AH 16h
DS:DX Zeiger zu einem FCB
Rückgabe AL 00h erfolgreiche Erstellung
0FFh kein Platz im Inhaltsverzeichnis
Anmerkung 1) falls ein vorhandener Inhaltsverzeichnis Eintrag gefunden wird, die Datei
wird auf die Länge von Null Bytes zurückgesetzt.
2) falls keine Datei vorhanden ist, wird eine erstellt.
3) dieser Funktionsaufrufe benutzt Funktion 0Fh (öffnen Datei) nach dem erstellen oder
zurücksetzen einer Datei.
4) ein versteckte Datei kann erstellt werden, indem ein erweiterter FCB mit dem
Attribut Byte (Offset FCB-1) 2 benutzt wird.
Funktion 17h umbenennen Datei spezifiziert durch den Dateikontrollblock (FCB)
Umbenennen einer Datei im aktuellen Inhaltsverzeichnis
Aufruf AH 17h
DS:DX Zeiger zu einem FCB (siehe Anmerkung 4)
Rückgabe AL 00h erfolgreiche Umbenennung
0FFh Datei nicht gefunden oder Dateiname existiert schon
Anmerkung 1) diese Funktion kann nicht Nur-lesen Dateien umbenennen.
2) der "?" wildcard kann benutzt werden.
3) falls der "?" wildcard beim zweiten Dateinamen benutzt wird, der entsprechende
Buchstabe in dem Dateinamen von dem Inhaltsverzeichnis Eintrag wird nicht geändert.
4) ein besonders modifizierter FCB wird benutzt. Es muß eine Laufwerksnummer haben, Dateiname,
und Erweiterung in der normalen Position, und ein zweiter Dateiname startend 6
Bytes nach der ersten, an Offset 11h. Dies ist normalerweise ein "reservierter"
Bereich.
5) die zwei Dateien dürfen nicht denselben Namen haben.
6) FCB enthält den neuen Name beginnend an Byte 17h.
Funktion 18h DOS intern
* Unbekannt - wie verlautet nicht benutzt
Aufruf AH 18h
Rückgabe AL 00h
Funktion 19h holen aktuelles Laufwerk
Rückgabe Bestimmung desn aktuellen Laufwerks
Aufruf AH 19h
Rückgabe AL aktuelles Laufwerk (0=A, 1=B, etc.)
Anmerkung 1) einige andere DOS Funktionen benutzen 0 für aktuelles, 1=A, 2=B, etc.
2) dies Aufruf ist ausdrücklich in der OS/2 Kompatibilitätsbox unterstützt.
3) TOS:$ 19 aktuelles Laufwerk. D0 gibt die Nummer des Laufwerks zurück (0=A:)
Funktion 1Ah einstellen Diskettentransferbereich Adresse (DTA)
setzt DTA Adresse auf die spezifizierte Adresse in DS:DX
Aufruf AH 1Ah
DS:DX Zeiger zum DTA Puffer
Rückgabe keine
Anmerkung 1) der vorgegeben DTA ist 128 Bytes an Offset 80h in der PSP. Der eigene DTA kann
auf irgendeine Größe und Stelle gesetzt werden. Der DTA sollte groß genug sein
um den größtmöglich zu schreibenden Satz zu enthalten.
2) Register sind unverändert.
3) keine Fehlercodes werden zurückgegeben.
4) Der Diskettentransferbereich kann nicht vom Ende des Segments zu dem
Anfang gewickelt werden oder ein Überlauf in ein anderes Segment.
5) DOS benutzt den DTA für Datei I/O. (siehe Abschnitt 6)
6) dies Aufruf ist ausdrücklich in der OS/2 Kompatibilitätsbox unterstützt.
7) TOS:$ 1A einstellen Diskettentransferbereich Adresse. Setzt ein 44-byte Puffer
für Laufwerks Transaktionen.
Funktion 1Bh hole Information zur Dateibelegungstabelle vom aktuellen Laufwerk
gibt zurück Information von der FAT auf dem aktuellen Laufwerk
Aufruf AH 1Bh
Rückgabe AL Anzahl Sektoren pro Belegungseinheit (Cluster)
CX Anzahl Bytes pro Sektor
DS:BX Adresse von dem Mediumbeschreibungsbyte des aktuellen Laufwerkes
DX Anzahl Belegungseinheiten (Clusters) für vorgegeben Laufwerk
Anmerkung 1) sichern DS bevor diese Funktion aufgerufen wird.
2) dieser Aufruf gab in DOS 1.x ein Zeiger zu der FAT zurück. Ab DOS 2.00
wird ausschließlich ein Zeiger zu de ID Byte der Tabelle zurückgegeben.
3) IBM empfiehlt Programmierern dies Aufruf zu vermeiden und dafür int 25h zu benutzen .
4) Offset DS:[BX-1] ist das schmutzig Byte für der Tabelle: 00=sauber, 01=schmutzig.
5) DOS 2.x+ und darüber halten die FAT nicht im RAM. Diese Funktion sollte nicht
benutzt werden, um auf die FAT zuzugreifen. Funktion 36 ist bevorzugt.
Funktion 1Ch holen Dateibelegungstabelle Information für angegebenes Gerät
gibt zurück Information des spezifizierten Laufwerks
Aufruf AH 1Ch
DL Laufwerksnummer (1=A, 2=B, 3=C, etc)
Rückgabe AL Anzahl Sektoren pro Belegungseinheit (Cluster)
0FFh ungültige Laufwerks Angabe
DS:BX Adresse vom Mediumbeschreibungsbyte für Laufwerk in DL
CX Sektorgröße in Bytes
DX Anzahl Belegungseinheiten (Clusters)
Anmerkung 1) setze DL= 0 für aktuelles Laufwerk.
2) sichern DS bevor diese Funktion aufgerufen wird.
3) Format des media-descriptor Bytes:
Bits: 0 0 (gelöscht) nicht doppelseitig
1 (gesetzt) doppelseitig
1 0 (gelöscht) nicht 8 Sektor
1 (gesetzt) 8 Sektor
2 0 (gelöscht) kein auswechselbares Gerät
1 (gesetzt) auswechselbar Gerät
3-7 immer gesetzt (1)
4) dieser Aufruf gab in DOS 1.x ein Zeiger zu der FAT zurück. Ab DOS 2.00
wird ausschließlich ein Zeiger zu de ID Byte der Tabelle zurückgegeben.
5) IBM empfiehlt Programmierern dies Aufruf zu vermeiden und dafür int 25h zu benutzen .
6) diese Funktion liest ausschließlich den BPB und ist sehr schnell.
Funktion 1Dh nicht dokumentiert von Microsoft
* Unbekannt - wie verlautet nicht benutzt
Aufruf AH 1Dh
Rückgabe AL 00h
Funktion 1Eh nicht dokumentiert von Microsoft
* Unbekannt - wie verlautet nicht benutzt
Aufruf AH 1Eh
Rückgabe AL 00h
Anmerkung tut scheinbar nichts.
Funktion 1Fh holen aktuellen Laufwerksparameterblock
* dasselbe wie Funktionsaufruf 32h (unterhalb), außer daß auf die Tabelle
des aktuellen Laufwerks zugegriffen wird
Aufruf AH 1Fh
andere Register Unbekannt
Rückgabe AL 00h kein Fehler
0FFh Fehler
DS:BX Zeiger zu DOS Laufwerksparameterblock für vorgegebenes Laufwerk.
Anmerkung für DOS 2, 3, 4.x, dies ruft nur die Funktion 32h (nicht dokumentiert,
lesen DOS Laufwerksblock) mit DL=0 auf.
Funktion 20h Unbekannt
* intern - tut nichts?
Aufruf AH 20h
Rückgabe AL 00h
Funktion 21h wahlfreies lesen einer Datei spezifiziert durch den Dateikontrollblock (FCB)
liest ein Satz wie spezifiziert in dem FCB von der aktuellen DTA.
Aufruf AH 21h
DS:DX Adresse von dem geöffneten FCB
Rückgabe AL 00h erfolgreich gelesen
01h Dateiende (EOF), keine Daten gelesen
02h DTA für die spezifizierte Satzlänge zu klein
03h Dateiende (EOF), teilweise Daten gelesen
Anmerkung 1) der aktuelle Block und das aktuelle Satzfeld sind eingestellt um zusammenzupassen mit dem
wahlfreien Aufzeichnungsfeld. Der Satz der durch diese Felder adressiert ist, wird dann gelesen
in den Speicher an der aktuellen Diskettentransferbereich Adresse.
2) der aktuelle Dateizeiger wird durch diese Funktion nicht erhöht.
3) falls der DTA größer als die Datei ist, wird die Datei bis zu der angeforderten
Länge mit Nullen aufgefüllt.
Funktion 22h wahlfreies schreiben einer Datei spezifiziert durch den FCB (FCB)
schreibt ein Satz wie spezifiziert in dem FCB zu der aktuellen DTA
Aufruf AH 22h
DS:DX Adresse von dem geöffneten FCB
Rückgabe AL 00h erfolgreich geschrieben
01h Platte voll; keine Daten geschrieben (schreiben wurde annulliert)
02h DTA für die spezifizierte Satzlänge zu klein (schreiben wurde annulliert)
Anmerkung 1) diese Funktion kann nicht schreiben, wenn die Dateien mit dem Nur-Lesen Attribut versehen ist.
2) der Satz zeigt auf den aktuellen Block (Offset 0Ch) und das aktuelle
Satzfeld (Offset 20h) ist an die DTA geladen, danach werden der aktuelle
Block und das aktuelle Satzfeld erhöht.
3) falls die Satzlänge kleiner als ein Sektor ist, die Daten in der DTA in einem Puffer
geschrieben; der Puffer wird auf die Platte geschrieben, sobald er einen voll Sektor
von Daten enthält, die Datei geschlossen wird, oder ein Zurücksetzen der Platte (Funktion 0Dh) ist
erfolgt.
4) der aktuelle Dateizeiger wird durch diese Funktion nicht erhöht.
5) der Satz wird an die aktuelle DTA Adresse geschrieben, wie spezifiziert
von dem letzten Aufruf der Funktion 1Ah. Falls der Größe von dem Satz und
die Stelle von dem DTA sind so, daß ein Segment Überlauf oder Umlauf auftritt,
der Fehlercode in AL wird auf 02h eingestellt.
Funktion 23h holen Dateigröße (FCB)
durchsucht das aktuelle Unterverzeichnis nach einer Datei, und gibt deren Größe im FCB zurück
Aufruf AH 23h
DS:DX Adresse von einem ungeöffneten FCB
Rückgabe AL 00h Datei gefunden
0FFh Datei nicht gefunden
Anmerkung 1) Satzlängenfeld (Offset 0Eh) muß eingetragen werden, bevor diese Funktion aufgerufen wird
2) das Inhaltsverzeichnis wird nach dem angegebenen Dateinamen durchsucht. Falls ein
Eintrag gefunden wird, wird das wahlfreie Aufzeichnungsfeld auf die Anzahl Sätze
in der Datei eingestellt. Falls der Wert von dem Satzlängenfeld ein nicht gerader Divisor
der Dateigröße ist, wird der Wert im relativen Aufzeichnungsfeld aufgerundet.
Dies ergibt dann einen größeren Wert als die eigentliche Dateigröße
3) dies Aufruf wird von dem APPEND Befehl in DOS 3.2+ benutzt
Funktion 24h einstellen Relatives Aufzeichnungsfeld (FCB)
einstellen wahlfreies Aufzeichnungsfeld spezifiziert durch den FCB
Aufruf AH 24h
DS:DX Adresse von einem geöffneten FCB
Rückgabe wahlfreies Aufzeichnungsfeld vom FCB ist auf denselben Wert wie der aktuelle Block
und der aktuelle Satz eingestellt.
Anmerkung 1) diese Funktion muß aufgerufen werden, bevor ein wahlfreier Dateizugriff erfolgt.
2) das relative Aufzeichnungsfeld vom FCB (Offset 21h) ist auf denselben Wert wie der
aktuelle Block (Offset 0Ch) und der aktuelle Satz (Offset 20h) eingestellt.
3) keine Fehlercodes werden zurückgegeben.
4) der FCB muß geöffnet sein.
Funktion 25h einstellen Interrupt Vektor
Setzt die Adresse von dem Code den DOS immer dann durchführt, wenn der spezifizierte
Interrupt aufgerufen wird.
Aufruf AH 25h
AL Interrupt Nummer
DS:DX Adresse vom neuen Interrupt Vektor
Rückgabe keine
Anmerkung 1) Register sind unverändert.
3) keine Fehlercodes werden zurückgegeben.
3) die Interruptvektor-Tabelle für die spezifizierte Interrupt Nummer in AL
ist auf die Adresse in DS:DX eingestellt. Benutze Funktion 35h (holen Vektor)
um die Inhalte von dem Interrupt Vektor zu holen und es für die spätere Benutzung zu sichern.
4) sobald die Funktion 25 zum einstellen eines Interrupt Vektors benutzt wird, DOS 3.2 zeigt
nicht auf der eigentlichen angeforderten Interrupt Vektor. Dafür, es
setzt den Interrupt Vektor auf eine Routine im DOS, welche folgendes tut:
1. Sichern alten Stapelzeiger
2. Umschalten zum neuen Stapelzeiger von DOS's Stapel Pool
3. Aufrufen der neuen Routine
4. Umspeichern alten Stapelzeiger
der Zweck hierfür war, einen möglichen Stapelüberlauf zu verhindern, sobald
eine groß Anzahl von Interrupts aktiv ist. IBM war betroffen (dies war eine
IBM Änderung, nicht Microsoft) daß auf ein Token Ring Netzwerk wo
eine Gruppe von Interrupts in Betrieb genommen werden, und das den Anwendungen
nicht mehr viel Platz auf dem Stapel übrig blieb.
5) dies Aufruf ist ausdrücklich in der OS/2 Kompatibilitätsbox unterstützt.
Funktion 26h erstellen neues Programm Segment Prefix (PSP)
diese Funktion kopiert das aktuell Program-Segment Prefix zu einer neuen Speicher-
stelle für die Erstellung eines neuen Programms oder Overlay. Wenn das neue PSP
erstellt ist, ein DOS Programm kann eine DOS COM oder Overlay Datei an die Speicher-
stelle unmittelbar nach dem neuen PSP lesen und an dem die Ablaufsteuerung übergeben.
Aufruf AH 26h
DX Segmentadresse für das neue PSP
Rückgabe aktuelles PSP ist zu dem spezifizierten Segment kopiert
Anmerkung 1) Microsoft empfiehlt die Benutzung der neuen DOS Funktion 4Bh (EXEC) dafür.
2) der vollständige 100h Bereich an Stelle 0 in dem aktuellen PSP wird an die
Stelle 0 von dem neuen PSP kopiert. Der Information an Stelle 6 zur Speichergröße
wird im neuen Segment aktualisiert und die aktuelle Beendigungs, ctrl-break,
und kritische Fehler Adressen von den Interruptvektor-Tabelle Einträgen für
ints 22h, 23h, und 24 sind gesichert in dem neu Programm Segment beginnend ab
0Ah. Sie werden wiederhergetellt von diesem Bereich sobald das Programm beendet wird.
3) der PSP Aufbau ist in Abschnitt 6 beschrieben.
Funktion 27h wahlfreies lesen eines Blockes der Datei spezifiziert durch den FCB
ähnlich wie 21h (wahlfreies lesen), außer es erlaubt mehrere Sätze zu lesen.
Aufruf AH 27h
CX Anzahl der zu lesenden Sätze
DS:DX Adresse von einem geöffneten FCB
Rückgabe AL 00h erfolgreich gelesen
01h Dateiende, keine Daten gelesen
02h DTA zu klein für die spezifizierte Satzlänge (lesen annulliert)
03h Dateiende
CX Anzahl der gelesenden Sätze (beinhaltet auch Teilsätze falls AL= 03h)
Anmerkung 1) die Satzlänge ist in dem FCB spezifiziert. Die Funktion aktualisiert den aktuellen
Block (Offset 0Ch) und das aktuelle Satzfeld (Offset 20h) zu dem nächsten
nicht gelesenen Satz.
2) falls CX beim Aufruf 0 enthält, ist dies ein NOP.
3) falls der DTA ist größer als die Datei, die Datei wird mit Nullen auf
die angeforderte Länge aufgefüllt.
4) diese Funktion nimmt an daß das FCB Satzlängenfeld (0Eh) korrekt eingestellt ist.
Falls es nicht vom Anwender eingestellt wird, gilt der vorgegebene Wert 128 Bytes.
3) der Satz wird in den Speicher gelesen an die aktuelle DTA Adresse wie spezifiziert
von dem letzten Aufruf der Funktion 1Ah. Falls der Größe von dem Satz und
die Stelle von dem DTA sind so, daß ein Segment Überlauf oder Umlauf auftritt,
der Fehlercode in AL wird auf 02h eingestellt.
Funktion 28h wahlfreies schreiben eines Blockes zur Datei spezifiziert durch den FCB
ähnlich wie 27h (wahlfreies lesen), außer es erlaubt mehrere Sätze zu schreiben.
Aufruf AH 28h
CX Anzahl zu schreibender Sätze
DS:DX Adresse von einem geöffneten FCB
Rückgabe AL 00h erfolgreich geschrieben
01h Platte voll, keine Daten geschrieben
02h DTA zu klein für die spezifizierte Satzlänge (schreiben annulliert)
CX Anzahl geschriebener Sätze
Anmerkung 1) die Satzlänge ist in dem FCB spezifiziert.
2) diese Funktion belegt Platten Cluster wie verlangt.
3) diese Funktion nimmt an daß das FCB Satzlängenfeld (0Eh) korrekt eingestellt ist.
Falls es nicht vom Anwender eingestellt wird, gilt der vorgegebene Wert 128 Bytes.
4) die Satzlänge ist in dem FCB spezifiziert. Die Funktion aktualisiert den aktuellen
Block (Offset 0Ch) und das aktuelle Satzfeld (Offset 20h) zu dem nächsten
nicht gelesenen Satz.
5) der Satz wird an die aktuelle DTA Adresse geschrieben, wie spezifiziert
von dem letzten Aufruf der Funktion 1Ah. Falls der Größe von dem Satz und
die Stelle von dem DTA sind so, daß ein Segment Überlauf oder Umlauf auftritt,
der Fehlercode in AL wird auf 02h eingestellt.
6) falls CX beim Auruf 0 enthält, werden keine Sätze geschrieben, aber die Dateigröße des FCB's
Eintrags (Offset 1Ch) wird auf die Größe gesetzt, die im relativen
Satzfeld (Offset 21h) des FCB's spezifiziert ist.
Funktion 29h analysieren der Befehlszeile für Dateiname
überträgt einen Dateinamen einer ASCII-Zeichenkette in die Felder von einem Dateikontrollblock
Aufruf AH 29h
DS:SI Zeiger zu der zu analysierenden Zeichenkette
ES:DI Zeiger zum Speicherpuffer zum ausfüllen mit dem ungeöffneten FCB
AL Bit Maske zur Steuerung der Syntaxanalyse
Bit 0 0 Syntaxanalyse hält an, falls ein Datei Seperator gefunden wird
1 veranlässt die Funktion den Dateinamen auf zu entfernenden führende Zeichen wie
Leerzeichen zu untersuchen. Andernfalls wird angenommen, das der Dateiname
mit dem ersten Byte beginnt
1 0 Laufwerksnummer im FCB wird auf Standardlaufwerk (0) gesetzt, falls
die Zeichenkette keine Laufwerksnummer enthält
1 Laufwerksnummer im FCB wird nicht geändert
2 0 Dateiname im FCB wird auf 8 Leerzeichen gesetzt, wenn kein Dateiname in der
Zeichenkette ist
1 Dateiname im FCB wird nicht geändert falls die Zeichenkette kein
Dateiname enthält
3 0 Erweiterung im FCB wird auf 3 Leerzeichen gesetzt, wenn keine Erweiterung in
der Zeichenkette ist
1 Erweiterung bleibt unverändert
4-7 muß Null sein
Rückgabe AL 00h keine Wildcards im Name oder in der Erweiterung
01h Wildcards im Name oder in der Erweiterung vorhanden
0FFh ungültiges Laufwerk specifiert
DS:SI Zeiger zu dem ersten Byte nach der Zeichenkette
ES:DI Zeiger zum Puffer mit der dem ungeöffneten FCB gefüllt ist
Anmerkung 1) falls das * Wildcard Zeichen in der Befehlszeile gefunden wurde, diese Funktion
ersetzt nachträglich alle Zeichen in dem FCB mit Fragezeichen.
2) diese Funktion benutzt die Zeichen als Dateiname Seperatoren
DOS 1 : ; . , + / [ ] = " TAB SPACE
DOS 2,3,4 : ; . , + = TAB SPACE
3) diese Funktion benutzt die Zeichen
: ; . , + < > | / \ [ ] = " TAB SPACE
oder irgendein Steuerzeichen wie ein zulässigen Dateiname Seperator
4) ein Dateiname kann kein Dateiname Endezeichen enthalten. Falls eins enthalten ist,
wird die Abarbeitung angehalten. Der Handle Funktionen erlauben die Benutzung
von einigen dieser Zeichen.
5) wenn kein zulässig Dateiname in der Befehlszeile gefunden wurde, ES:DI+1 zeigt
auf ein Leerzeichen (ASCII 32).
6) dies Funktion kann nicht mit Dateispezifikationen welche einen Pfad enthalten benutzt werden.
7) Syntaxanalyse ist in der Form D:Dateiname.EXT. Falls eine Datei gefunden wird, ein entsprechender
ungeöffneter FCB wird an ES:DI zusammengesetzt.
Funktion 2Ah holen Datum
gibt den Tag der Woche, Jahr, Monat, und Datum zurück
Aufruf AH 2Ah
Rückgabe CX Jahr (1980-2099)
DH Monat (1-12)
DL Tag (1-31)
AL Wochentag 00h Sonntag
01h Montag
02h Dienstag
03h Mittwoch
04h Donnerstag
05h Freitag
06h Samstag
Anmerkung 1) Datum ist automatisch verstellt, falls der Taktgeber den nächsten Tag erreicht,
und übernimmt das übersprungende Jahr und die Anzahl der Tage in jedem Monat in seinen Zähler.
2) obgleich DOS kein ungültiges Datum einstellen kann, kann es eines lesen, etwa
91/32/80, etc.
3) DesQview akzeptiert auch CX=4445h und DX=5351h, z.b. 'DESQ' als zulässig.
4) dies Aufruf ist ausdrücklich in der OS/2 Kompatibilitätsbox unterstützt.
5) DOS nimmt CH=0 (Mitternacht) als eine zulässige Uhrzeit an, aber falls eine Datei die Uhrzeit
hat, wird die Uhrzeit mit dem DIR Befehl nicht angezeigt. (außer DR-DOS)
6) TOS:$ 2A holen Datum.
Funktion 2Bh einstellen Datum
einstellen aktuelles Systemdatum
Aufruf AH 2Bh
CX Jahr (1980-2099)
DH Monat (1-12)
DL Tag (1-31)
Rückgabe AL 00h kein Fehler (zulässiges Datum)
0FFh ungültiges Datum spezifiziert
Anmerkung 1) beim Aufruf muß CX:DX ein zulässiges Datum in demselben Format wie
es von dem Funktionsaufruf 2Ah zurückgegeben wird enthalten.
2) DOS 3.3+ setzt auch den CMOS Taktgeber.
3) unter der DesQview System Shell, dies ist die DV_GET_VERSION Kontrolle.
Aufruf AH 2Bh
AL 01h DesQ Aufruf
CX 4445h 'DE' (ungültiges Datum benutzt
DX 5351h 'SQ' für DesQview ID)
Rückgabe AH übergeordnete Versionsnummer
AL Nebenversion
AX 0FFh DesQ nicht installiert (DOS Fehlercode)
4) für DESQview 2.00+, prüfen ob installiert
Aufruf AH 2Bh
AL Unterfunktion (DV v2.00+)
01h holen Version
Rückgabe BX Version (BH=Haupt..., BL=Neben...)
Anmerkung frühere Kopien von v2.00 geben 0002h zurück.
02h holen Schattenpuffer Information, und Start Schattierung
Rückgabe BH Zeilen in Schattenpuffer
BL Spalten in Schattenpuffer
DX Segment vom Schattenpuffer
04h holen Schattenpuffer Information
Rückgabe BH Zeilen in Schattenpuffer
BL Spalten in Schattenpuffer
DX Segment vom Schattenpuffer
05h Schattierung anhalten
CX 4445h ('DE')
DX 5351h ('SQ')
Rückgabe AL 0FFh falls DESQview nicht installiert ist
Anmerkung in DESQview v1.x, gab es keine Unterfunktionen; dieser Aufruf
identifizierte ausschließlich ob DESQview geladen war oder nicht.
5) PC-Tools PC-Cache 5.1 (Multisoft Pufferspeicher) Installationsüberprüfung.
Aufruf CX 4358h ('CX')
Rückgabe AL 00h installiert
CX 6378h
0FFh nicht installiert
6) dies Aufruf ist ausdrücklich in der OS/2 Kompatibilitätsbox unterstützt.
7) TOS: holen Datum.
Funktion 2Ch holen Uhrzeit
holen aktuelle Systemzeit von Taktgeber$ Treiber
Aufruf AH 2Ch
Rückgabe CH Stunden (0-23)
CL Minuten (0-59)
DH Sekunden (0-59)
DL hunderstel Sekunden (0-99)
Anmerkung 1) Uhrzeit wird alle 5/100 Sekunde aktualisiert.
2) das Datum und die Uhrzeit sind im binären Format.
3) dies Aufruf ist ausdrücklich in der OS/2 Kompatibilitätsbox unterstützt.
4) TOS: holen Uhrzeit.
Funktion 2Dh einstellen Uhrzeit
einstellen aktuelle Systemzeit
Aufruf AH 2Dh
CH Stunden (0-23)
CL Minuten (0-59)
DH Sekunden (0-59)
DL hunderstel Sekunden (0-99)
Rückgabe AL 00h wenn kein Fehler
0FFh falls eine fehlerhafte Zeit angegeben wurde
Anmerkung 1) DOS 3.3+ setzt auch den CMOS Taktgeber.
2) CX und DX muß eine zulässige Uhrzeit im binären Format enthalten.
3) dies Aufruf ist ausdrücklich in der OS/2 Kompatibilitätsbox unterstützt.
4) TOS: einstellen Uhrzeit.
Funktion 2Eh einschalten/ausschalten VERIFY Schalter
einstellen VERIFY Kennzeichen
Aufruf AH 2Eh
AL 00 um VERIFY auszuschalten (vorgegeben)
01 um VERIFY einzuschalten
Rückgabe keine
Anmerkung 1) dies ist der Aufruf der durch den DOS VERIFY Befehl ausgeführt wird.
2) Die Einstellung des VERIFY Schalters kann durch den Anruf 54h ermittelt werden.
3) dieser Aufruf wird nicht auf Netzwerklaufwerke unterstützt.
4) DOS überprüft dies Kennzeichen bei jedem Zugriff auf ein Laufwerk.
4) dieser Aufruf ist ausdrücklich in der OS/2 Kompatibilitätsbox unterstützt.
Funktion 2Fh holen Adresse des Daten-Übertragungsbereichs (DTA)
gibt die aktuelle des Daten-Übertragungsbereichs zurück, die von allen DOS Dateizugriffen benutzt wird
Aufruf AH 2Fh
Rückgabe ES:BX Adresse des DTA
Anmerkung 1) die DTA wird durch den Funktionsaufruf 1Ah eingestellt
2) vorgegebene DTA Adresse ist ein 128 Byte Puffer an Offset 80h in dem
Programm-Segment Prefix des Programmes.
3) siehe Abschnitt 6 für eine Beschreibung der DTA.
4) dieser Aufruf ist ausdrücklich in der OS/2 Kompatibilitätsbox unterstützt.
5) TOS: holen DTA. Gibt die Segmentadresse des aktuellen DTA in D0 zurück.
Funktion 30h DOS Versionsnummer feststellen
Rückgabe DOS Version und/oder Anwender Nummer
Aufruf AH 30h
Rückgabe AH Nebenversionsnummer (das heißt, DOS 2. 10 gibt zurück AX= 0A02h)
AL übergeordnete Versionsnummer Nummer (0 für DOS 1.x)
BH OEM ID Nummer
00h IBM
16h DEC (andere sind nicht bekannt)
BL:CX 24-bit serielle Anwendernummer
Anmerkung 1) falls AL eine Null als übergeordnete Versionsnummer zurückgibt, ist die DOS Version
kleiner 1.28 für MSDOS und kleiner 2.00 für PCDOS.
2) IBM PC-DOS gibt immer 0000h in BX und CX zurück, wie auch DR-DOS.
3) OS/2 v1.0 Kompatibilitätsbox gibt ein Wert von 10 für die übergeordnete Versionsnummer zurück.
4) durch die OS/2 Rückgabe und der Tatsache daß einige europäische Versionen von DOS
eine höhere Versionsnummer als IBM's DOS zurückgeben, sollten Dienstprogramme welche
die DOS Version kontrollieren nicht abbrechen, falls eine höhere Version als die verlangte
erkannt wird, wenn nicht wesentliche Probleme bekannt sind.
5) dieser Aufruf ist ausdrücklich in der OS/2 Kompatibilitätsbox unterstützt.
6) TOS:$ 30 holen Versionsnummer. Gibt GEMDOS Versionsnummer in D0 zurück.
7) unter PC-MOS/386, falls AX=BX=CX=DX, wird die PC-MOS/386 Versionsnummer
zurückgegeben. Falls nicht alle Register denselben Wert haben, wird eine MSDOS
gleichwertige Versionsnummer zurückgegeben. Die PC-MOS/386 Versionsnummer
ist immer unterschiedlich von der MSDOS Versionsnummer.
Funktion 31h beenden Programm und warten speicherresistent (KEEP)
Aufruf AH 31h
AL Ende-Code
DX benötigter Programmspeicher in 16 Byte Paragraphen
Rückgabe AX Rückgabe Code (herausholen durch Funktion 4Dh)
Anmerkung 1) Durch die Anwendung geöffnete Dateien werden nicht geschlossen sobald dieser Aufruf gemacht wird.
2) Der Speicher kann besser genutzt werden, indem die beinhaltede Kopie von
dem DOS Environment freigegeben wird, bevor das Programm beendent wird. Dies kann gemacht werden,
imdem ES mit dem Segment das in 2Ch von dem PSP enthalten ist geladen wird, und der
Funktionsaufruf 49h (freigeben belegten Speicher) durchgeführt wird.
3) im Gegensatz zu int 27h, können mit diesem Aufruf mehr als 64k speicherresistent gemacht werden.
4) TOS:$ 31 anhalten Prozess.
Funktion 32h lesen DOS Festplattenparameterblock
* erhalten Zeiger zu dem Laufwerksparameterblock für ein Laufwerk
Aufruf AH 32h
DL Laufwerk (0=aktuelles, 1=A:, etc.).
Rücklauf AL 00h falls Laufwerk zulässig ist
0FFh falls Laufwerk nicht zulässig ist
DS:BX Zeiger zur DOS Laufwerksparametertabelle. Format des Blocks:
┌────────┬──────┬────────────────────────────────────────────────
│ Bytes │ Typ │ Wert
├────────┼──────┼────────────────────────────────────────────────
│ 00h │ Byte │ Laufwerk: 0=A:, 1=B:, etc.
│ 01h │ Byte │ Einheit im Gerätetreiber (0, 1, 2, etc.)
│ 02h-03h│ Wort │ Bytes pro Sektor
│ 04h │ Byte │ größte Sektornummer im Cluster (eins kleiner als
│ │ │ Sektoren pro Cluster)
│ 05h │ Byte │ Cluster zu Sektor umschalten (das heißt., wie weit nach links
│ │ │ schalten der Bytes/Sektor um die Bytes/Cluster zu holen)
│ 06h-07h│ Wort │ Anzahl reservierter (Start) Sektoren
│ 08h │ Byte │ Anzahl Kopien von der FAT
│ 09h-0Ah│ Wort │ Anzahl Hauptverzeichniseinträge
│ 0Bh-0Ch│ Wort │ 1. Sektor # der Daten. Sollte derselbe sein wie # von
│ │ │ Sektoren/Spur.
│ 0Dh-0Eh│ Wort │ größtmöglichste Clusternummer (eins mehr als
│ │ │ die Anzahl der Daten Cluster)
├────────┴──────┼────────────────────────────────────────────────
│ nur DOS 2.x │
├────────┬──────┼────────────────────────────────────────────────
│ 0Fh │ Byte │ Anzahl Sektoren für eine Kopie von der FAT
│ 10h-11h│ Wort │ Nummer des ersten Sektors im Hauptverzeichnis
│ 12h-15h│ dwort│ Adresse vom Beginn des Gerätetreibers für dieses Laufwerk
│ │ │ (Anfang vom Gerätetreiber)
│ 16h │ Byte │ Mediumbeschreibungsbyte für dies Laufwerk
│ 17h │ Byte │ 0FFh zeigt an, das der Block neu gebildet werden muß
│ 18h-1Bh│ dwort│ Adresse vom nächsten DOS Festplattenblock (0FFFFh bedeutet
│ │ │ der letzte in der Kette)
│ 1Ch │ Wort │ Anfangscluster vom aktuellen Verzeichnis (0=Hauptverzeichnis)
│ 1Eh │64byts│ ASCII Zeichenkette des Pfads im aktuellen Inhaltsverzeichnis
├────────┴──────┼────────────────────────────────────────────────
│ DOS 3.x │
├────────┬──────┼────────────────────────────────────────────────
│ 0Fh │ Byte │ Anzahl Sektoren in einer FAT Kopie
│ 10h │ Wort │ erster Sektor vom Hauptverzeichnis
│ 12h │ dwort│ Adresse vom Gerätetreiber für dieses Laufwerk
│ 16h │ Byte │ Mediumbeschreibungsbyte für das Medium
│ 17h │ Byte │ 0FFh= Block muß neu gebildet werden, 00h zeigt
│ │ │ einen Blockzugriff an
│ 18h │ dwort│ Adresse vom nächsten Geräteblock, Offset= 0FFFFh
│ │ │ bedeutet der letzte
│ 1Ch │ Wort │ Cluster ab dem nach einem freien Platz gesucht wird,
│ │ │ sobald ein Schreibzugriff erfolgt
│ 1Eh │ Wort │ Anzahl freier Cluster auf Laufwerk, 0FFFFh
│ │ │ Unbekannt?
├────────┴──────┼────────────────────────────────────────────────
│ DOS 4.0 │
├────────┬──────┼────────────────────────────────────────────────
│ 0Fh │ Wort │ Anzahl Sektoren in einer FAT Kopie
│ 11h │ Wort │ erste Sektor vom Hauptverzeichnis
│ 13h │ dwort│ Adresse vom Gerätetreiber für dieses Laufwerk
│ 17h │ Byte │ Mediumbeschreibungsbyte für das Medium
│ 18h │ Byte │ 0FFh= Block muß neu gebildet werden, 00h zeigt
│ │ │ einen Blockzugriff an
│ 19h │ dwort│ Adresse vom nächsten Geräteblock, Offset= 0FFFFh
│ │ │ bedeutet der letzte
│ 1Dh │ Wort │ Cluster ab dem nach einem freien Platz gesucht wird,
│ │ │ sobald ein Schreibzugriff erfolgt
│ 1Fh │ Wort │ Anzahl freier Cluster auf Laufwerk, 0FFFFh=
│ │ │ Unbekannt?
└────────┴──────┴────────────────────────────────────────────────
Anmerkung 1) benutze [BX+0D] um die Anzahl der Cluster zu ermitteln (>1000h, 16-bit FAT; falls nicht, 12-bit
(genau teilend Zeile ist wahrscheinlich ein wenig unterhalb 1000h zu erlauben für
schlechte Sektoren, EOF Anzeiger, etc.)
2) kurzer Artikel von C. Petzold, im PC Magazine Vol.5, no. 8.
3) einige Information von dem Artikel "Finding Disk Parameters" in der Mai
1986 Ausgabe vom PC Tech Journal.
4) dieser Aufruf wird größtenteils in der OS/2 Kompatibilitätsbox unterstützt.
Das dwort an 12h gibt in der Kompatibilitätsbox nicht die Adresse von dem
nächsten Gerätetreiber zurück.
5) benutzt von CHKDSK.
Funktion 33h Control-Break Kontrolle
holen oder einstellen Control-Break Kontrolle an CON
Aufruf AH 33h
AL 00h zum testen der Break Kontrolle
01h zum einstellen der Break Kontrolle
DL 00h ausschalten Break Kontrolle
01h einschalten Break Kontrolle
02h intern, aufgerufen durch PRINT.COM (DOS 3.1)
03h Unbekannt
04h Unbekannt - DOS 4.0's CPSW Befehl in CONFIG.SYS ruft
diese Funktion auf
05h holen Startlaufwerk (DOS 4.0+)
Rückgabe DL Break Einstellung (AL= 00h)
00h wenn Break = aus
01h wenn Break = an
(falls AL= 05h) Startlaufwerk, A=1, B=2, etc)
AL 0FFh Fehler
Anmerkung dieser Aufruf ist ausdrücklich in der OS/2 Kompatibilitätsbox unterstützt.
Funktion 34h Rückgabe INDOS Kennzeichen
gibt zurück ES:BX zeigt zum kritischen Bereichskennzeichen, Byte deutet darauf hin, ob
es sicher ist, einen Interrupt aufzurufen.
Aufruf AH 34h
Rückgabe ES:BX zeigt zu 1-byte DOS "kritischen Bereichskennzeichen"
Anmerkung 1) falls dieses Byte 0 ist, ist es sicher DOS zu unterbrechen.
2) das Byte an ES:BX+1 wird von dem Print Programm für denselben Zweck benutzt,
deshalb ist es wahrscheinlich sicherer, das Wort an ES:BX zu kontrollieren.
3) wie verlautet, die Prüfung des DOS 2.10 Codes in diesem Bereich zeigt an, daß das
Byte welches dem "kritischen Bereichskennzeichen" unmittelbar folgt, 00h sein muß, um
PRINT.COM zu erlauben eine Interrupt aufzurufen. Für DOS 3.0 und 3.1 (außer
Compaq DOS 3.0), das Byte vor dem "kritischen Bereichskennzeichen" muß Null sein;
für Compaq DOS 3.0, das Byte 01AAh bevor es Null sein muß.
4) in DOS 3.10 wurde dies wie verlautet auf ein Wort Wert geändert, mit vorangehendem Byte.
5) dieser Aufruf ist ausdrücklich in der OS/2 Kompatibilitätsbox unterstützt.
6) Gordon Letwin von Microsoft diskutierte diesen Aufruf bei ARPAnet 1984. Er
spezifiziert:
a) dieser wird in keiner Version von DOS unterstützt
b) er arbeitet gewöhnlich unter DOS 2, kann aber unter Umständen
auch nicht funktionieren (allgemeines Dementi, weiß nichts von dem wesentlichen
Umstand)
c) normal er arbeitet nicht unter DOS 3 und DOS 3.1; das DOS ist
beträchlich neu strukturiert und dieses Kennzeichen erhält weitere
Bedeutungen und Verwendungen
d) er versagt katastrophal unter DOS 4.0 und weiteren.
** offensichtlich ist diese Information falsch, denn der Aufruf arbeitet genau
bis DOS 3.3. Microsoft glasnost? Er arbeitet auch offensichtlich im US
DOS 4.0, aber es ist wahrscheinlich das Letwin auf das zurückgriff was bis jetzt als OS/2
bekannt war. Niemand berichtete irgendwas von zusätzlichen Bedeutungen und wird deshalb weiter
benutzt, obgleich Vereinbarungen von Bits in dem In_DOS Byte fähig sind, dieses
für mehrere Bedeutungen zu benutzen.
7) dieser Aufruf ist in einigen ZENITH MS-DOS technischen Referenzen dokumentiert .
Es wurde auch von Microsoft in deren Vorschlag zur TSR Standarddokumentation diskutiert,
obgleich IBM diesen Aufruf nicht zu unterstützt und somit als
"nicht dokumentiert" erachtet werden muß.
8) PC Magazine berichtet es funktioniert verläßlich unter den DOS Versionen 2.0
bis 3.3. Chris Dunford (von CED Ruhm) und ein Anzahl anonyme
Botschaften in der BBSs weisen darauf hin, das es nicht immer so verläßlich ist.
Funktion 35h holen Vektor
holen Interrupt Vektor
Aufruf AH 35h
AL Interrupt Nummer (hexadezimal)
Rückgabe ES:BX Adresse des Interrupt Vektors
Anmerkung 1) benutze Funktionsaufruf 25h um die Interrupt Vektoren einzustellen.
2) dieser Aufruf ist ausdrücklich in der OS/2 Kompatibilitätsbox unterstützt.
Funktion 36h feststellen freien Platz auf dem Laufwerk
holen Information für das spezifizierte Laufwerk
Aufruf AH 36h
DL Laufwerksnummer (0= aktuelles, 1=A:, 2=B:, etc)
Rückgabe AX Anzahl Sektoren pro Cluster
0FFFFh spezifiziertes Laufwerk in DL ist ungültig
BX Anzahl verfügbarer Cluster
CX Bytes pro Sektor
DX Cluster pro Laufwerk
Anmerkung 1) multipliziere AX * CX * BX um den freien Platz auf dem Laufwerk zu bekommen.
2) multipliziere AX * CX * DX um die gesamte Kapazität des Laufwerk zu erhalten. .
3) Die Funktion 36h gibt nach einem ASSIGN Befehleine eine falschen Wert zurück. Vor
dem ASSIGN, enthält das DX Register 0943h als Rückgabewert, welches der freie Platz
in Cluster auf der HC Diskette ist. Nach dem ASSIGN, selbst mit keinem
Parameter, wird 0901h im DX Register zurückgegeben; dies ist ein falscher
Wert. Ähnlich Ergebnisse treten mit DD Disketten auf einem PC-XT oder einem PC-AT auf.
Dies tritt ausschließlich auf, wenn das Laufwerk nicht das aktuelle Laufwerk ist.
Die Ergebnisse sind richtig, sobald das Laufwerk das aktuelle Laufwerk ist. Deshalb sollte
das gewünschte Laufwerk zum aktuellen Laufwerk erklärt werden, bevor
diese Funktion aufgerufen wird.
4) diese Funktion ersetzt die Funktionen 1Bh und 1Ch.
5) dieser Aufruf ist ausdrücklich in der OS/2 Kompatibilitätsbox unterstützt.
6) TOS:$ 36 holen freien Platz auf dem Laufwerk.
Funktion 37h SWITCHAR/AVAILDEV
* holen/einstellen Option Markierungszeichen (ist gewöhnlich "/"), und Gerätetyp
Aufruf AH 37h
AL 00h lesen Schalterzeichen (gibt aktuelles Zeichen in DL zurück)
01h einstellen Zeichen in DL als neues Schalterzeichen
(DOS 2.x) 02h lesen Geräteverfügbarkeit (wie bei Funktion AL= 3 gesetzt) in DL.
Ein 0 bedeutet daß Geräte einen Zugang beim Datei I/O Aufruf durch
/dev/Gerät erhalten müssen. Ein anderer Wert als Null bedeutet,
daß auf die Geräte von jeder Ebene des Inhaltsverzeichnisbaumes zugegriffen
werden kann. (z.B., PRN ist der Drucker und nicht die Datei PRN).
AL= 2 um Kennzeichen in DL zurückzugeben, AL= 3 zum einstellen von DL (0=gesetzt,
1= nicht gesetzt).
(DOS 2.x) 03h holen Geräteverfügbarkeit, wobei:
DL 00h /dev/ muß dem Gerätenamen vorausgehen
01h /dev/ braucht dem Gerätenamen nicht vorausgehen
Rückgabe DL Schalterzeichen (falls AL= 0 oder 1)
Geräteverfügbarkeits Kennzeichen (falls AL=2 oder 3)
AL 0FFh der Wert in AL war nicht im Bereich von 0-3
Anmerkung 1) Die Funktionen 2 & 3 sind nicht für DOS 3.x implementiert.
2) es ist dokumentiert auf Seite 4.324 von der MS-DOS (Version 2) Programmer's
Utility Pack (Microsoft - veröffentlicht durch ZENITH).
3) arbeitet mit allen Versionen von IBM PC-DOS von 2.0 bis 3.3.1.
4) das SWITCHAR ist das Zeichen welches in DOS Befehlen als "Schalter" benutzt
wird (Standard ist '/', wie in "DIR /P"). '-' ist weitverbreitet um ein System
anzufertigen, welches mehr dem UNIX ähnelt; falls das SWITCHAR ein anderes als '/' ist,
dann kann '/' an Stelle von '\' für Pfadnamen benutzt werden.
5) wird von XCOPY, PKARC, LIST ignoriert.
6) SWITCHAR kann nicht auf ein Zeichen eingestellt werden, das in irgendeinem Dateiname benutzt wird.
7) in DOS 3.x kann das "AVAILDEV" Byte mit Unterfunktion 02h gelesen werden,
aber es wird immer 0FFh zurückgegeben, selbst wenn es mit der Unterfunktion 0 oder
03h geändert wurde.
8) AVAILDEV= 0 bedeutet, daß Geräte in einem scheinbaren Unterverzeichnis
"\dev" (ähnlich dem UNIX's /dev/*) beschrieben werden müssen; ein Dateiname "PRN.DAT"
kann erstellt und manipuliert werden wie jede andere auch. Falls AVAILDEV!= 0
dann werden Gerätenamen irgendwo erkannt, (dies ist der Standard):
"PRN.DAT" ist sinnverwandt mit "PRN:".
9) diese Funktionen wird, wie verlautet nicht in derselben Art und Weise
in den verschiedenartige Implementationen von DOS unterstützt.
10) benutzt von CHKDSK, BASIC, und DEBUG in DOS 3.3.
11) SWITCHAR wird nicht in der OS/2 Kompatibilitätsbox unterstützt.
Funktion 38h Rückgabe Landesspezifische Information
(PCDOS 2.0, 2.1, MSDOS 2.00 ausschließlich)
Aufruf AH 38h
AL Funktionscode (muß 0 sein in DOS 2.x)
DS:DX Zeiger zum 32 Byte Speicherpuffer für die zurückgegebenen Information
Rückgabe CF gesetzt wenn Fehler
AX Fehlercode (02h)
BX Ländercode
DS:DX Zeiger zum Puffer der die Landesinformation enthält:
Bytes 00h,01h Datum/Zeitformat
0000h USA Standard H:M:S M-D-Y
0001h Europa Standard H:M:S D/M/Y
0002h Japan Standard H:M:S D:M:Y
02h ASCIIZ Zeichenkette Währungszeichen
03h Byte mit 0
04h ASCIIZ Zeichenkette Tausender Trennung
05h Byte mit 0
06h ASCIIZ Zeichenkette dezimale Trennung
07h Byte mit 0
24 Bytes 08h-1Fh reserviert
Funktion 38h holen Landesspezifische Information
(PCDOS 3.x+, MSDOS 2.01+)
Aufruf AH 38h
AL Funktionscode
00h holen aktuelle Länderinformation
01h-0FEh Ländercode mit Codes kleiner 255 für die die Information
geholt werden sollen
0FFh holen Länderiformation für Staaten mit ein Code größer als 255
BX 16 Bit Ländercode falls AL= 0FFh
DS:DX Zeiger zum 32 Byte Speicherpuffer für die zurückgegebenen Information
DX 0FFFFh falls Einstellung Ländercode eher als bekommend Information
Rückgabe CF 0 (gelöscht) Funktion vervollständigt
1 (gesetzt) Fehler
AX Fehlercode
02h ungültiger Ländercode (keine Tabelle dafür vorhanden)
(falls DX<> 0FFFFh)
BX Ländercode (gewöhnlich die international Vorwahlnummer)
DS:DX Zeiger zum Datenpuffer des Landes
Bytes 0,1 Datum/Zeitformat
0 USA Standard H:M:S M/D/Y
1 Europa Standard H:M:S D/M/Y
2 Japan Standard H:M:S D:M:Y
Bytes 02h-06h ASCIIZ Währungszeichen
Byte 07h ASCIIZ Tausender Trennung
Byte 08h Byte mit 0
Byte 09h ASCIIZ dezimale Trennung
Byte 0Ah Byte mit 0
Byte 0Bh ASCIIZ Datum Trennung
Byte 0Ch Byte mt 0
Byte 0Dh ASCIIZ Uhrzeit Trennung
Byte 0Eh Byte mit 0
Byte 0Fh Byte Währungsformat
Bit 0 0 falls Währungszeichen vor dem Wert
1 falls Währungszeichen nach dem Wert
1 0 kein Leerzeichen zwischen dem Wert und dem Währungszeichen
1 1 Leerzeichen zwischen dem Wert und dem Währungszeichen
2 gesetzt falls Währungszeichen das Dezimalkomma ersetzt
3-7 nicht definiert bei Microsoft
Byte 10h Genauigkeit
(Anzahl Stellen nach dem Dezimalkomma)
Byte 11h Byte Zeitformat
Bit 0 0 12-Stunden-Uhr
1 24-Stunden-Uhr
1-7 Unbekannt, wahrscheinlich nicht benutzt
Bytes 12h-15h Adresse einer Routine (FAR Prozedur, AL= Kleinbuchstabe) die Kleinbuchstaben
ind Großbuchstaben umwandelt
Aufruf AL ASCII Code des Zeichen das in einen Großbuchstaben
konvertiert werden soll
Rückgabe AL ASCII Code von dem Großbuchstaben
Byte 16h data-list Trennungszeichen
Byte 17h 0
Bytes 18h-21h 5 Wörter reserviert
Anmerkung 1) sobald eine alternativer Tastatur Handler aufgerufen wird, wird die Tastaturroutine
an den niedrigsten Bereich des verfügbaren Anwenderspeichers geladen.
Der BIOS Interrupt Vektor der Tastaturroutine wird zu dem Speicherbereich
umgeleitet wo die neue Routine haust. Jede neue Routine benötigt 1.6K
vom Speicher und hat Suchtabellen, sodas eindeutige Werte für jede Sprache
zurückgegeben werden. (KEYBxx in der DOS Liste)
Sobald der Tastatur Interrupt Vektor von der DOS Tastatur Routine geändert ist,
erledigt die neue Routine alle Aufrufe, solange bis das System wieder
auf das US Format mit der ctrl-alt-F1 Tastenkombination umgeschaltet wird. Dies
ändert aber nicht den Interrupt Vektor auf die BIOS Adresse; es wird
nur die Tabelle übergangen und die ROM Adressen werden benutzt.
2) Ctrl-Alt-F1 ändert ausschließlich Systeme mit US ROMS auf die US Anordnung.
Einige Systeme wedren ohne US Tastaturroutinen im ROM ausgeliefert
3) Zeichenumwandlung: das Segment/Offset von einer FAR Prozedur die die
länderspezifische klein-zu-groß Buchstaben Umwandlung von ASCII Zeichen ab 80h bis
0FFh vornimmt. Diese wird mit dem entsprechenden Zeichen in AL aufgerufen. Falls ein
Großbuchstabe für den Buchstabe vorhanden ist, wird dieser in AL zurückgegeben,
andernfalls gibt es hierfür keinen oder wurde die Funktion war gerufen mit einem Wert
als 80h aufgerufen, bleibt AL unverändert.
4) dieser Aufruf ist ab der MS-DOS Version 2.01 voll implementiert. In der
Version 2.00 ist dieser vorhanden, jedoch nicht vollständig. ( entsprechend zu Microsoft).
5) dieser Aufruf ist ausdrücklich in der OS/2 Kompatibilitätsbox unterstützt.
Funktion 38h einstellen landesabhängige Information
Aufruf AH 38h
AL Code Ländercode zum einstellen der Information für Staaten
mit Codes kleiner als 255
0FFh einstellen Länderinformation für Staaten mit einem Code
größer als 255
BX 16 Bit Ländercode falls AL= 0FFh
DX 0FFFFh
Rückgabe CF gelöscht erfolgreich
gesetzt falls Fehler
AX Fehlercode (02h)
Anmerkung 1) einige Ländercodes sind:
061 Australien
039 Italien
041 die Schweiz
033 Frankreich
351 Portugal
002 Kanada
758 mittlerer Osten
001 USA
972 Israel
046 Schweden
358 Finnland
047 Norwegen
032 Belgien
003 S.America
044 U.K.
049 Deutschland
034 Spanien
045 Dänemark
031 Holland
081 Japan
2) die Dokumentation für COUNTRY= enthält die Informationen welche Codes
für die benutzte DOS Version möglich sind.
Funktion 39h erstellen Unterverzeichnis (MKDIR)
erstellen Unterverzeichnis entlang dem Pfad
Aufruf AH 39h
DS:DX Adresse von ASCIIZ Pfadname Zeichenkette
Rückgabe Kennzeichen CF 0 erfolgreich
1 Fehler
AX Fehlercode falls vorhanden (03h, 05h)
Anmerkung 1) die ASCIIZ Zeichenkette enthält das Laufwerk und das Unterverzeichnis.
2) Laufwerk kann irgendein zulässiges Laufwerk sein (nicht unbedingt das aktuelle Laufwerk).
3) der Pfadname kann nicht länger als 64 Zeichen sein.
4) dieser Aufruf ist ausdrücklich in der OS/2 Kompatibilitätsbox unterstützt.
5) die Zeichen [,],=, und " können in Unterverzeichnisnamen nicht benutzt werden.
6) TOS:$ 39 MKDIR.
Funktion 3Ah entfernen Unterverzeichnis (RMDIR)
Aufruf AH 3Ah
DS:DX Adresse von ASCIIZ Pfadname Zeichenkette
Rückgabe CF löschen erfolgreich
gesetzt AX Fehlercode falls vorhanden (3, 5, 16)
Anmerkung 1) die ASCIIZ Zeichenkette enthält das Laufwerk und das Unterverzeichnis.
2) Laufwerk kann irgendein zulässiges Laufwerk sein (nicht unbedingt das aktuelle Laufwerk).
3) der Pfadname kann nicht länger als 64 Zeichen sein.
4) dieser Aufruf ist ausdrücklich in der OS/2 Kompatibilitätsbox unterstützt.
5) TOS:$ 3A RMDIR.
Funktion 3Bh ändern aktuelles Inhaltsverzeichnis (CHDIR)
Aufruf AH 3Bh
DS:DX Adresse von ASCIIZ Zeichenkette
Rückgabe Kennzeichen CF 0 erfolgreich
1 Fehler
AX Fehlercode falls vorhanden (03h)
Anmerkung 1) die ASCIIZ Zeichenkette kann das Laufwerk und das Unterverzeichnis enthalten.
2) Laufwerk kann irgendein zulässiges Laufwerk sein (nicht unbedingt das aktuelle Laufwerk).
3) der Pfadname kann nicht länger als 64 Zeichen sein.
4) dieser Aufruf ist ausdrücklich in der OS/2 Kompatibilitätsbox unterstützt.
5) TOS:$ 3B CHDIR.
Funktion 3Ch erstellen einer Datei (CREAT)
erstellen einer Datei mit Handle
Aufruf AH 3Ch
CX Byte Dateiattribut
00h normal
01h nur lesen
02h versteckt
03h System
DS:DX Adresse der ASCIIZ Zeichenkette die den Dateiname enthält
Rückgabe CF 0 erfolgreich Erstellung
1 Fehler
AX 16 Bit Datei Handle (Dateinummer)
oder Fehlercode (03h, 04h, 05h)
Anmerkung 1) die ASCIIZ Zeichenkette kann das Laufwerk und das Unterverzeichnis enthalten.
2) Laufwerk kann irgendein zulässiges Laufwerk sein (nicht unbedingt das aktuelle Laufwerk).
3) falls die Datenträgeretikett oder Unterverzeichnis Bits in CX gesetzt sind, werden diese ignoriert
4) die Datei wird im lesen/schreiben Modus geöffnet
5) falls die Datei nicht existiert, wird sie erstellt. Falls eine mit demselben Namen
existiert, wird diese auf die Länge von 0 zurückgesetzt.
6) eine gute Praxis ist, das öffnen der Datei mit fn 3Dh zu versuchen, und springen zu einer
Fehlerroutine falls erfolgreich, oder erstellen der Datei falls 3Dh erfolglos war. Dieser Weg
verhindert, daß eine existierende Datei überschrieben wird.
7) dieser Aufruf ist ausdrücklich in der OS/2 Kompatibilitätsbox unterstützt.
8) TOS:$ 3C CREAT.
Funktion 3Dh öffnen einer Datei
öffnen einer Datei mit Handle
Aufruf AH 3Dh
AL Byte Zugriffscode
(DOS 2.x) Bits 0-2 Datei Attribut
000 nur lesen
001 nur schreiben
010 lesen/schreiben (vorgegeben)
3-7 reserviert, sollte auf Null gesetzt werden
(DOS 3.x) Bits 0-2 Datei Attribut
000 nur lesen
001 nur schreiben
010 lesen/schreiben (vorgegeben)
3 reserviert, sollte auf Null gesetzt werden
4-6 File-Sharing-Modus (Netzwerk)
000 Kompatibilitätsmodus (vorgegeben)
001 lesen/schreiben Zugriff erlaubt (exklusiv)
010 Schreibzugriff erlaubt
011 Lesezugriff erlaubt
100 alle Zugriffe erlaubt
7 Handle Kennzeichen
0 Datei kann auch durch das Kind-Programm abgearbeitet werden
1 nur das aktuelle Programm kann die Datei abarbeiten
DS:DX Adresse von ASCIIZ Zeichenkette mit Laufwerk/Pfad/Dateiname
Rückgabe CF gesetzt wenn Fehler
AX Fehlercode - MSDOS (01h, 02h, 03h, 04h, 05h, 0Ch)
- DRDOS (02h, 04h, 05h, 0Ch)
AX 16 Bit DOS Datei Handle (Dateinummer)
Anmerkung 1) öffnet irgendeine normale, System, oder versteckte Datei.
2) Dateien daß Ende in ein Doppelpunkt werden nicht geöffnet.
3) der lese/schreiben Zeiger ist auf das erste Byte der Datei eingestellt und die
Satzlänge der Datei ist 1 Byte (der lese/schreiben Zeiger durch den
Funktionsaufruf 42h geändert werden). Die zurückgegebene Dateinummer (Handle) muß
für alle nachträglichen Ein- und Ausgaben zu der Datei benutzt werden.
4) falls die Dateinummer (Handle) von einem übergeordneten Prozess übergeben wurde oder
durch DUP oder FORCEDUP verdoppelt wurde, werden alle Sharing und Zugriffseinschränkungen
vererbt.
5) ein File-Sharing Fehler (Fehler 01h) veranlässt einen int 24h mit dem
Fehlercode 02h.
6) dieser Aufruf ist ausdrücklich in der OS/2 Kompatibilitätsbox unterstützt.
7) TOS:$ 3D OPEN.
8) falls irgendein Prozess eine Datei öffnet, die ein Ebene von Zugriffen bestreitet, alle
nachträgliche Versuche die Datei auf der Ebene von Zugriffen zu öffnen versagen.
9) irgendein Versuch eine Datei mit einem Sharing Modus zu öffnen, die schon von einem
existierenden Prozess benutzt wird, schlägt immer fehl.
Funktion 3Eh Datei schließen
schließen ein Datei und Freigabe des Handles (Dateinummer)
Aufruf AH 3Eh
BX Dateinummer (erzeugt durch 3Dh)
Rückgabe Kennzeichen CF gelöscht erfolgreiches schließen
gesetzt Fehler
AX Fehlercode falls Fehler (06h)
Anmerkung 1) sobald ausgeführt, wird die Datei geschlossen, das Inhaltsverzeichnis wird aktualisiert, und alle
Puffer der Datei werden gelöscht. Falls die Datei geändert wurde, wird die Uhrzeit
und das Datum der Datei auf die aktuelle Uhrzeit abgeändert.
2) falls der Aufruf mit dem Handle 00000h erfolgt, wird STDIN (normalerweise die
Tastatur) geschlossen.
3) dieser Aufruf ist ausdrücklich in der OS/2 Kompatibilitätsbox unterstützt.
4) TOS:$ 3E CLOSE.
5) in den meisten Versionen von DOS sind ausschließlich 15 Datei Handles für den Anwender
verfügbar. Es ist eine gute Praxis, die Dateien zu schließen, sobald diese nicht
mehr benutzt werden.
Funktion 3Fh lesen von einer Datei oder Gerät
lesen von Datei mit Handle (Dateinummer)
Aufruf AH 3Fh
BX Dateinummer
CX Anzahl zu lesender Bytes
DS:DX Adresse des Puffer
Rückgabe Kennzeichen CF gelöscht erfolgreich gelesen
gesetzt Fehler
AX 00h Zeiger war schon am Dateiende
oder Anzahl der gelesenden Bytes
oder Fehlercode (05h, 06h)
Anmerkung 1) diese Funktion versucht die Anzahl der Bytes die in CX spezifiziert sind
an einen Puffer zu übergeben. Es ist nicht garantiert, daß alle Bytes gelesen werden.
2) falls von STDIN (Dateinummer 0000) ausgeführt, kann die Eingabe umgeleitet sein
3) falls zum lesen der Tastatur benutzt, wird ausschließlich bis zu dem ersten CR gelesen.
4) der Dateizeiger wird erhöht zu dem letzten gelesenen Byte.
5) dieser Aufruf ist ausdrücklich in der OS/2 Kompatibilitätsbox unterstützt.
6) TOS:$ 3F READ.
7) falls AX< CX wurde nur ein Teil des Satzes gelesen.
Funktion 40h schreiben zu einer Datei oder Gerät
schreiben zu Datei mit Handle (Dateinummer)
Aufruf AH 40h
BX Dateinummer
CX Anzahl zu schreibender Bytes
DS:DX Adresse des Puffer
Rückgabe CF gelöscht erfolgreich geschrieben
gesetzt Fehler
AX Anzahl geschriebener Bytes
oder Fehlercode (05h, 06h)
Anmerkung 1) diese Funktion versucht die Anzahl der Bytes die in CX angegeben sind, von einem Puffer
zu einer Datei zu übergeben. Falls CX und AX nach dem schreiben nicht gleich sind,
ist ein Fehler aufgetreten; jedoch wird kein Fehlercode für dieses Problem zurückgegeben.
Dies ist gewöhnlich dann der Fall, wenn der Datenträger voll ist.
2) falls auf STDOUT (Dateinummer 0000) ausgeführt, kann die Ausgabe umgeleitet sein
3) zum abschneiden der Datei an der aktuellen Position des Dateizeigers, muß die
Anzahl der Bytes in CX auf Null gesetzt werden, bevor der int 21h Anruf erfolgt. Der Zeiger
kann zu irgendeiner gewünschten Position mit der Funktion 42h bewegte werden.
4) diese Funktion schreibt nicht zu einer Datei oder Gerät mit dem Atrribut Nur-Lesen.
5) kann auch an Stelle von fn 09h benutzt werden, um Zeichenketten an CON anzuzeigen. Diese
Funktion schreibt nur die Anzahl Bytes in CX und hört dann auf; fn 09h schreibt
solange bis ein $ Zeichen gefunden wird.
6) dies ist die Funktion, die DOS eigentlich benutzt um zum Bildschirm zu schreiben
in DOS 2.x und darüber.
7) dieser Aufruf ist ausdrücklich in der OS/2 Kompatibilitätsbox unterstützt.
8) TOS:$ 40 WRITE.
Funktion 41h löschen einer Datei von einem spezifizierten Unterverzeichnis (UNLINK)
Aufruf AH 41h
DS:DX Zeiger zum ASCIIZ der zu löschenden Datei
Rückgabe CF gelöscht erfolgreich
gesetzt Fehler
AX Fehlercode falls Fehler (02h, 05h)
Anmerkung 1) diese Funktion arbeitet nicht mit Dateien die das Atrribut Nur-Lesen haben.
2) Wildcards sind nicht zugelassen.
3) zum löschen mehrerer Dateien, Funktion 13h ist schneller.
4) dieser Aufruf ist ausdrücklich in der OS/2 Kompatibilitätsbox unterstützt.
5) TOS:$ 41 UNLINK.
Funktion 42h bewegen Dateizeiger lesen/schreiben (LSEEK)
Aufruf AH 42h
AL Methode Codebyte
00h Offset vom Anfang der Datei
01h Offset von aktueller Stelle
02h Offset vom Dateiende
BX Dateinummer
CX:DX Offset in Datei (höherwertiges/niederwertiges Wort) in Bytes
Rückgabe AX:DX neuer Dateizeiger (Segment/Offset)
CF gesetzt Fehler
AX Fehlercode( 01h, 06h)
gelöscht erfolgreiches bewegen
Anmerkung 1) falls Zeiger am Dateiende ist, kann hieraus die Dateigröße in Bytes erkannt werden.
2) der Wert in DX:AX ist der absolute 32 Bit Byte Offset vom Anfang
der Datei.
3) dieser Aufruf ist ausdrücklich in der OS/2 Kompatibilitätsbox unterstützt.
4) TOS:$ 42 LSEEK.
Funktion 43h holen/einstellen Dateiattribut (CHMOD)
Aufruf AH 43h
AL 00h holen Dateiattribut
01h einstellen Dateiattribut
CX einzustellende Dateiattribute
Bit 0 nur lesen
1 versteckte Datei
2 Systemdatei
3 Datenträgeretikett
4 Unterverzeichnis
5 verändert seit dem letzten Sichern (Archive Bit)
6, 7 nicht benutzt
8 gemeinsam benutzbar (shareable) (Novell NetWare)
9-F nicht benutzt
DS:DX Segment/Offset Zeiger zum vollen ASCIIZ Dateiname
Rückgabe CF gesetzt falls Fehler
AX Fehlercode - MSDOS (01h, 02h, 03h, 05h)
DRDOS (02h, 03h, 05h)
CX Dateiattribute beim holen
Attribute:
01h nur lesen
02h versteckt
04h System
0FFh Archive
Anmerkung 1) diese Funktion ändert nicht das Datenträgeretikett oder Inhaltsverzeichnis Bit. (3&4)
2) irgendeine Kombination von Dateiattributen kann benutzt werden.
3) dieser Aufruf ist ausdrücklich in der OS/2 Kompatibilitätsbox unterstützt.
4) TOS:$ 43 CHANGE MODE (CHMOD).
Funktion 44h I/O Steuerung für Geräte (IOCTL)
Gerätetreiber Handler
Aufruf AH 44h
AL 00h holen Geräteinformation
BX Datei oder Geräte Handle
Rückgabe CF gesetzt wenn Fehler
AX Fehlercode
DX Wort Geräteinformation
Bit 7 gesetzt = Zeichentreiber
Bit 0 Bedienungsfeld Eingabegerät
1 Bedienungsfeld Ausgabegerät
2 NUL Gerät
3 CLOCK$ Gerät
4 besonderes Gerät
5 binär (unbearbeitet) Modus
6 nicht EOF
12 Netzwerk Gerät (DOS 3. x)
14 kann IOCTL Steuerungszeichen
abarbeiten (subfns 2-5)
Bit 7 gelöscht = Datei
Bit 0-5 Blocktreiber Nummer
6 Datei wurde nicht geschrieben
12 Netzwerk Gerät (DOS 3.x)
14 Unbekannt (DOS 3.x)
15 Datei ist entfernt (remote) (DOS 3.x)
01h einstellen Geräteinformation
BX Gerät Handle
DH 00h (DH muß Null sein für diesen Aufruf)
DL einzustellende Geräteinformation (Bits 0-7 von Funktion 0)
Anmerkung DX Bits:
0 1 Bedienungsfeld Eingabegerät
1 1 Bedienungsfeld Ausgabegerät
2 1 NUL Gerät
3 1 CLOCK Gerät
4 1 reserviert
5 0 binär Modus - kontrolliert nicht auf Steuerzeichen
1 gefiltert Modus - kontrollieren auf Steuerzeichen
6 0 EOF - Dateiende bei Eingabe
7 Gerät ist Zeichentreiber falls gesetzt, falls nicht, EOF
ist 0 falls Kanal geschrieben wurde, Bits 0-5 sind
Blocktreiber Nummer
12 Netzwerk Gerät
14 1 kann Steuerzeichen abarbeiten (AL 2-5, kann ausschließlich
gelesen und nicht eingestellt werden)
15 n reserviert
02h lesen Zeichentreiber Steuerungszeichen
BX Gerät Handle
CX Anzahl zu lesender Bytes
DS:DX Zeiger zum Steuerungszeichen Puffer
Rückgabe AX (keine Fehler) Anzahl gelesener Bytes
03h schreiben Zeichentreiber Steuerungszeichen
BX Gerät Handle
CX Anzahl zu schreibender Bytes
DS:DX Zeiger zum Puffer
Rückgabe AX (keine Fehler) Anzahl geschriebener Bytes
04h lesen vom Blocktreiber (Laufwerksnummer in BL)
BL Laufwerksnummer (0= vorgegeben)
CX Anzahl zu lesender Bytes
DS:DX Zeiger zum Puffer
Rückgabe AX (keine Fehler) Anzahl gelesener Bytes
05h schreiben Blocktreiber Steuerungszeichen
BL Laufwerksnummer (0= vorgegeben)
CX Anzahl zu schreibender Bytes
DS:DX Zeiger zum Puffer
Rückgabe AX (keine Fehler) Anzahl übertragener Bytes
06h holen Eingabe Handle Status
BX Datei oder Geräte Handle
Rückgabe AL 00h Gerät ist nicht bereit
0FFh Gerät ist bereit
Anmerkung für eine Eingabedatei, 0FFh bedeutet Dateiende.
07h holen Ausgabe Handle Status
BX Datei oder Geräte Handle
Rückgabe AL 00h nicht bereit
0FFh bereit
Anmerkung für DOS 2.x, Dateien sind immer zur Ausgabe bereit.
08h auswechselbares Media Bit (DOS 3.x+)
BL Laufwerksnummer (0=aktuelles)
Rückgabe AX 00h Gerät ist auswechselbar
01h Gerät ist nicht auswechselbar
0Fh ungültige Laufwerksbeschreibung
09h Test ob lokales oder Netzwerk Gerät (DOS 3.1+)
BL Laufwerksnummer (0= vorgegeben)
Rückgabe DX Attribut Wort, Bit 12 gesetzt falls Gerät remote ist
0Ah ist Handle in BX lokal oder remote? (DOS 3.1+)
BX Dateinummer
Rückgabe DX Bit 15 gesetzt falls Datei remote ist,
gelöscht falls Datei lokal ist
Anmerkung 1) falls Datei remote ist, gibt Novell Advanced NetWare 2.0
die Nummer des File Servers auf welchem der Handle
ermittelt ist in CX zurück.
0Bh ändern Anzahl Wiederholungen in DX für Sharinng (DOS 3.1+)
CX Verzögerung (vorgegeben=1)
DX Wiederholungen (vorgegeben=3)
Anmerkung Ändert die Anzahl der Wiederholungen von Laufwerksoperationen
nach einer Sharing Übertretung.
0Ch allgemein IOCTL (DOS 3.3 [3.2?]) erlaubt einen Gerätetreiber
vorzubereiten, auszuwählen, aufzufrischen, und erfragen Codeseiten
BX Gerät Handle
CH Kategorie Code
00h Unbekannt (DOS 3.3)
01h COMn: (DOS 3.3)
03h CON (DOS 3.3)
05h LPTn:
CL Funktion
45h einstellen Wiederholungszähler
4Ah auswählen Codeseite
4Ch Start Codeseite Vorbereitung
4Dh Ende Codeseite Vorbereitung
65h holen Wiederholungszähler
6Ah erfragen ausgewählte Codeseite
6Bh erfragen Vorbereitungsliste
DS:DX Zeiger zum Parameterblock. Format:
(für CL=45h) Wort Anzahl wie oft die Ausgabe versucht wird
Treiber nimmt an Gerät ist beschäftigt
(für CL=4Ah, 4Dh, 6Ah) Wort Länge der Daten
Wort Codeseite ID
(für CL=4Ch) Wort Kennzeichen
Wort Länge vom Rest des Parameterblocks
Wort Anzahl Codeseiten folgen
n Wörter Codeseite 1, ..., N
(für CL=6Bh) Wort Länge der folgenden Daten
Wort Anzahl Hardware Codeseiten
n Wörter Hardware Codeseiten 1, ..., N
Wort Anzahl vorbereiteter Codeseiten
n Wörter vorbereitete Codeseiten 1, ..., N
0Dh Blocktreiber Anforderung (DOS 3.3+)
BL Laufwerksnummer (0=aktuelles, 1=A:, etc.)
CH Kategorie Code
08h Festplattenlaufwerk
CL Unterfunktion
40h einstellen Geräteparameter
41h schreiben logische Gerätespur
42h formatieren und prüfen logische Gerätespur
46h Unbekannt (DOS 4.0+)
60h holen Geräteparameter
61h lesen logische Gerätespur
62h prüfen logische Gerätespur
DS:DX Zeiger zum Parameterblock
(Für fns 40h, 60h) Byte besonders Funktionen
Bit 0 gesetzt falls fn aktuellen BPB benutzen soll, gelöscht
falls Gerät BIOS Parameterblock Feld
neuen vorgegebenen BPB enthält
1 gesetzt falls Funktion ausschließlich die Spuranordnungsfelder
benutzen soll. Muß gelöscht sein, falls CL=60h
2 gesetzt falls alle Sektoren in der Spur dieselbe Größe haben
(sollte gesetzt sein)
3-7 reserviert
Byte Gerätetyp
00h 320k/360k Diskette
01h 1.2M Diskette
02h 720k Diskette
03h single-density 8-inch Diskette
04h double-density 8-inch Diskette
05h Festplatte
06h Bandlaufwerk
07h anderer Typ eines Blocktreiber
Wort Geräteattribut
Bit 0 gesetzt falls kein austauschbares Medium
1 gesetzt falls Tür sperren unterstützt
2-15 reserviert
Wort Anzahl Zylinder
Byte Media Typ
00h 1.2M Diskette (vorgegeben)
01h 320k/360k Diskette
31 Bytes Geräte BPB (siehe Funktion 53h)
Wort Anzahl Sektoren pro Spur (Start von Spur-
anordnungsfeld)
n Wort Paare: Nummer, Größe von jedem Sektor in der Spur
Dies kann definiert sein in einem Aufbau etwa wie:
DeviceParameters Struc
SpecialFunctions db ?
GeraeteTyp db ?
GeraeteAttribut dw ?
AnzahlZylinder dw ?
MediaType db ?
DeviceBPB A_BPB <>
TrackLayout A_TrackLayout <>
DeviceParameters Ends
(Für Funktionen 41h, 61h) Byte reserviert, muß Null sein
Wort Anzahl Köpfe
Wort Anzahl Zylinder
Wort Anzahl der ersten Sektoren zum lesen/schreiben
Wort Anzahl Sektoren
dwort Übertragungsadresse
(für Funktionen 42h, 62h) Byte reserviert, muß Null sein
Wort Anzahl Köpfe
Wort Anzahl Zylinder
Anmerkung DOS 4.01 scheint das höherwertige Byte von der
Anzahl der Inhaltsverzeichniseinträge in dem BPB für
Disketten zu ignorieren.
0Eh holen logische Geräteabbildung (DOS 3. 2+)
gibt den logischen Laufwerksbuchstabe der beim letzten Zugriff auf
den Blocktreiber benutzt wurde zurück. Benutzt von SUBST, JOIN, etc.
BL Laufwerksnummer (0=vorgegeben)
Rückgabe AL 00h Blocktreiber hat ausschließlich ein
logisches Laufwerk zugewiesen 1 .. n der
letzte Buchstabe wird zur Referenz des
Gerätes benutzt (1=A:, etc)
01h-1Ah Laufwerksnummer (1..26 DOS 3.0+)
Anmerkung 1) dies ist keine Netzwerk-abhängige Funktion.
2) dieser Aufruf erlaubt es, festzustellen ob mehr als
ein logisches Laufwerk dem Blocktreiber ist.
Sobald dieses Funktion aufgerufen wird, wird eine
Laufwerksnummer in BL übertragen als Eingabe. Falls dem
Blockgerät hat mehr als ein logischer Laufwerksbuchstabe
zugewiesen ist, wird in AL eine Laufwerksnummer
entsprechend dem letzte Laufwerksbuchstabe der
benutzt wurde zurückgegeben.
Falls ausschließlich ein Laufwerksbuchstabe dem Gerät
zugewiesen ist, wird durch diesen Aufruf 0 in AL zurückgegeben.
0Fh einstellen logisch Geräteabbildung( DOS 3. 2+)
BL physische Laufwerksnummer (0=vorgegeben)
Rückgabe AL 00h falls ausschließlich 1 Laufwerksbuchstabe
zum Blocktreiber zugewiesen ist
01h ... 1=A:, 2=B:, ...
Anmerkung bildet logische Laufwerke zu physische Laufwerke, ähnlich
wie DOS's Behandlung eines einzelnen physischen Disketten-
laufwerks als A: und B:
BL Laufwerksnummer: 0=vorgegeben, 1=A:, 2=B:, etc.
BX Dateinummer
CX Anzahl zu lesender oder schreibender Bytes
DS:DX Daten oder Puffer
DX Daten
Rückgabe AX Anzahl übertragener Bytes
oder Fehlercode (siehe Funktion 59h für erweiterte Fehlercodes)
oder Zustand 00h nicht bereit
0FFh bereit
CF gesetzt falls Fehler
Anmerkung dieser Aufruf ist ausdrücklich in der OS/2 Kompatibilitätsbox unterstützt.
Funktion 45h duplizieren einer Dateinummer (DUP)
Aufruf AH 45h
BX zu duplizierende Dateinummer
Rückgabe CF gelöscht AX duplizierte Dateinummer (Handle)
gesetzt AX Fehlercode (04h, 06h)
Anmerkung 1) falls der Zeiger von einem Handle mit 3Fh (lesen), 40h (schreiben), oder
42h (bewegen Zeiger) bewegt wird, so wird der Zeiger von dem anderen bewegt.
2) der Handle in BX muß offen sein.
3) dieser Aufruf ist ausdrücklich in der OS/2 Kompatibilitätsbox unterstützt.
4) TOS:$ 45 DUP.
5) diese Funktion kann benutzt werden, um den Inhaltsverzeichniseintrag einer Datei zu aktualisieren,
ohne das öffnen und schließen durchzuführen. Als Beispiel, diese Funktion
gefolgt von fn 3Eh (schließen Datei) mit der duplizierten Dateinummer verursacht
das DOS dessen Puffer löscht und den Inhaltsverzeichniseintrag aktualisiert, solange
die Originaldatei im lesen/schreiben Modus geöffnet bleibt.
Funktion 46h erzwingen Duplikat von einem Handle (FORCEDUP oder CDUP)
erzwingt Handle in CX das auf dieselbe Datei an derselben Position
Bezug nimmt wie BX
Aufruf AH 46h
BX existierende offene Dateinummer die dupliziert werden soll
CX neue Dateinummer
Rückgabe CF gelöscht beide Handle nehmen jetzt Bezug auf eine existierende Datei
gesetzt Fehler
AX Fehlercode (04h, 06h)
Anmerkung 1) falls CX eine offene Datei war, wird diese erst geschlossen.
2) falls der Zeiger von einem Handle mit 3Fh (lesen), 40h (schreiben), oder
42h (bewegen Zeiger) bewegt wird, so wird der Zeiger von dem anderen bewegt.
3) der Handle in BX muß offen sein.
4) dieser Aufruf ist ausdrücklich in der OS/2 Kompatibilitätsbox unterstützt.
5) TOS$ 46 FORCE.
6) diese Funktion kann benutzt werden, um die Eingabe und Ausgabe umzuleiten.
Funktion 47h holen aktuelles Inhaltsverzeichnis
überträgt den vollen Pfadnamem des aktuellen Inhaltsverzeichnisses/Laufwerk in einen Puffer
Aufruf AH 47h
DL Laufwerk (0=aktuelles, 1=A:, etc.)
DS:SI Segment/Offset Zeiger zum 64-byte Puffer Bereich
Rückgabe CF gelöscht DS: DI Zeiger zu ASCIIZ Pfadname vom aktuellen Inhaltsverzeichnis
gesetzt AX Fehlercode (0Fh)
Anmerkung 1) Zeichenkette beginnt nicht mit einer Laufwerkskennung oder einem Backslash (\).
2) dies Aufruf ist ausdrücklich in der OS/2 Kompatibilitätsbox unterstützt.
3) TOS:$ 47 GETDIR.
Funktion 48h Speicher belegen (MALLOC)
belegt angeforderte Anzahl von 16-byte Paragraphen Speicher
Aufruf AH 48h
BX Anzahl gewünschter 16-byte Paragraphen gewünscht
Rückgabe CF gelöscht AX Segmentadresse des belegten Speichers
BX maximale Anzahl verfügbarer Pragraphen
gesetzt AX Fehlercode (07h, 08h)
Anmerkung 1) BX zeigt den maximalen verfügbaren Speicher ausschließlich falls die Reservierung scheiterte.
2) dieser Aufruf ist ausdrücklich in der OS/2 Kompatibilitätsbox unterstützt.
3) TOS:$ 48 MALLOC.
Funktion 49h belegten Speicher freigeben
befreit spezifizierte Speicherblöcke
Aufruf AH 49h
ES Segmentadresse vom freizugebenden Bereich
Rückgabe CF gelöscht erfolgreich
gesetzt AX Fehlercode (07h, 09h)
Anmerkung 1) diese Funktion ist ausschließlich zulässig, sobald Speicher mit der Funktion 48h reserviert wurde.
2) ein Programm sollte nicht versuchen Speicher freizugeben, der nicht von ihm belegt wurde.
3) dieser Aufruf ist ausdrücklich in der OS/2 Kompatibilitätsbox unterstützt.
4) TOS:$ 49 MFREE.
Funktion 4Ah modifizieren belegte Speicherblöcke (SETBLOCK)
erweitern oder vermindern Speicher für ein Programm
Aufruf AH 4Ah
BX neue Größe in 16 Byte Paragraphen
ES Segmentadresse des zu ändernden Blocks
Rückgabe CF gelöscht nichts
gesetzt AX Fehlercode (07h, 08h, 09h)
oder BX maximale Anzahl verfügbarer Paragraphen
Anmerkung 1) BX zeigt den maximalen verfügbaren Speicher ausschließlich falls die Funktion scheiterte.
2) Speicher kann ausschließlich erweitert werden, falls der Speicher verfügbar ist.
3) dieser Aufruf ist ausdrücklich in der OS/2 Kompatibilitätsbox unterstützt.
4) TOS:$ 4A SETBLOCK.
Funktion 4Bh laden oder ausführen eines Programms (EXEC)
Aufruf AH 4Bh
AL 00h laden und ausführen Programm. Ein PSP für das Programm wird angelegt,
die ctrl-break und Beendigungs Adressen werden auf den neuen PSP
eingestellt.
*01h laden aber nicht ausführen (intern, DOS 3.x & DESQview)
(siehe Anmerkung 1)
*02h laden aber nicht ausführen (intern, DOS 2.x ausschließlich)
03h laden Overlay (kein erstellen eines PSP, Ausführung nicht beginnen)
*04h Start async Prozess (Euro-DOS 4.0 ausschließlich) (siehe Anmerkung 12)
DS:DX Segment/Offset Zeiger zu der ASCIIZ Zeichenkette mit dem Laufwerk,
Pfad, und dem Dateinamen der geladen werden soll
ES:BX Segment/Offset Zeiger zu einem Parameterblock für das Laden
(AL=00h) Wort Segmentadresse von Environment Zeichenkette die
übergeben werden soll (0=benutzen aktuelle)
dwort Zeiger zu der Befehlszeile die an PSP+80h eingestellt wird
dwort Zeiger zum vorgegeben FCB welcher an PSP+5Ch übertragen wird
dwort Zeiger zum vorgegeben FCB welcher an PSP+6Ch übertragen wird
(*AL=01h) Wort Segment vom Environment (0=benutzen aktuelles)
dwort Zeiger zur Befehlszeile
dwort Zeiger zum FCB 1
dwort Zeiger zum FCB 2
(DOS 3.x+) dwort zum sichern von SS:SP bei der Rückkehr
(DOS 3.x+) dwort zum sichern der Programmeinsprungstelle (CS:IP) bei der Rückkehr
(*AL=02h) Wort Segment vom Environment (0=benutzen aktuelles)
dwort Zeiger zur Befehlszeile
dwort Zeiger zum FCB 1
dwort Zeiger zum FCB 2
(AL=03h) Wort Segmentadresse wohin die Datei geladen wird
Wort Verschiebungsfaktor der auf das Abbild angewandt wird
Rückgabe CF gesetzt Fehler
AX Fehlercode (01h, 02h, 05h, 08h, 0Ah, 0Bh)
CF gelöscht falls erfolgreich
für fn 00h, Prozess ID ist auf das neue PSP eingestellt; holen mit
Funktion 62h
für fn 01h und DOS 3. x+ oder DESQview, Porzess ID ist auf das neue
PSP eingestellt; holen mit Funktion 62h
für fn 01h und DOS 2.x, der anfängliche Stapel und Einsprungspunkt des neuen
Programmes wird in Register zurückgegeben
für fn 02h, der anfängliche Stapel und Einsprungspunkt des neuen
Programmes wird in den Registern zurückgegeben
Anmerkung 1) falls der Aufruf dieser Funktion mit AL=1 durchgeführt wird, wird das Programm geladen, so als wenn
der Aufruf mit AL=0 gemacht wurde, außer daß das Programm nicht ausgeführt wird.
Zusätzlich, mit AL=1 das Stacksegment und Zeiger zusammen mit dem
CS:IP Einsprungspunkt des Programmes werden an das Programm zurückgegeben, welches den
4B01h Aufruf durchgeführt hat. Diese Werte sind ausgeben in den vier Wörtern an ES:BX+0Eh. Auf
Einsprungstelle zu dem Aufruf ES:BX zeigt zu der Environmentadresse, der Befehls-
zeile und den zwei vorgegeben FCBs. Diese Form von EXEC wird von DEBUG.COM benutzt.
2) Anwendungsprogramme können eine sekundäre Kopie von der Befehlsprozessors
(normalerweise COMMAND.COM) aufrufen, indem die EXEC Funktion benutzen wird. Das
Programm kann dann ein DOS Befehl wie ein Parameter übergeben, daß der sekundär
Kommandoprozessor ausführt, so als wenn dieser vom Standardeingabegerät
eingegeben wurde,
Das Verfahren ist:
A. Zusichern das genügend freier Speicher (17k für 2.x und 3.0, 23k für 3.1
und höher) existiert, um die zweite Kopie von dem Kommandoprozessor zu erhalten und
der Befehl der ausgeführt werden soll. Dies wird erreicht, imdem der
Funktionsaufruf 4Ah zum vermindern des belegten Speicher auf die aktuellen
Forderungen des Programmes durchgeführt wird. Danach, ausführen Funktionsaufruf 48h
mit BX= 0FFFFh. Diese gibt den verfügbaren Speicher zurück.
B. Erstellen einer Parameterzeichenkette für den sekundären Kommandoprozessor in der
Form:
1 Byte Länge der Parameterzeichenkette
xx Bytes Parameterzeichenkette
1 Byte 0Dh (Carriage Return)
als Beispiel, die Assembleranweisung unterhalb erstellt die
Zeichenkette zur Ausführung von dem Befehl FOO.EXE:
DB 19,"/C C:FOO",13
C. Benutzen des EXEC Funktionsaufrufs (4Bh), Funktion 0 um die Ausführung
von der sekundären Kopie von dem Kommandoprozessor zu veranlassen. (das Laufwerk,
Inhaltsverzeichnis, und Name des Kommandoprozessors kann durch die
COMSPEC Variable in dem DOS Environment ermittelt werden, welches an PSP+2Ch übergeben wird.)
D. Nicht vergessen den Offset 2 von dem EXEC Kontrollblock auf den Punkt zu der
zusammengesetzten Zeichenkette von vorher einzustellen.
3) alle offenen Dateien von einem Prozess werden dupliziert in dem neu erstellten
Prozess nach einem EXEC, außer für Dateien die vom Original
mit dem Handle Bit eingestellt auf 1 geöffbnet wurden.
4) das Environment ist eine Kopie von dem original Befehlsprozessor
Environment. Änderungen in dem EXECed Environment werden nicht an das
Original zurückgegeben. Dem Environment folgt eine Kopie von dem DS:DX
Dateinamen der an dem Kind Prozess übergeben wurde. Ein Null Wert verursacht, daß
der Kind Prozess das Environment von dem aufrufenden Prozesses mitschleppt. Die
Segmentadresse von dem Environment wird an Offset 2Ch von dem PSP
des aufgerufenden Programmes abgestellt.
5) diese Funktion benutzt denselben speicherresistent Teil von COMMAND.COM, erstellt
aber eine Kopie von dem vorrübergehenden Teil.
6) wie EXEC erkennt wohin er zurück muß: grundsätzlich enthält der Vektor für int 22h
die Beendigungsadresse für den aktuellen Prozess. Sobald ein Prozess
gestartet wird, der vorhergehend Inhalte von int 22h wird in den
PSP für diesen Prozess übergeben, dann wird int 22h modifiziert. Deshalb wenn Prozess A
EXECs Prozess B, solange Prozess B läuft, der Vektor für int 22h enthält
die Rückkehradresse zu Prozess A, solange die Sicherungsstelle in dem PSP
von Prozess B die Rückkehradresse vom Prozess A enthält, kehrt er zurück sobald
*er* beendet wird. Sobald Prozess B normal legal beendet wird,
die Inhalte von int 22h sind (vermutlich) auf den Stapel geschoben,
die alten Beendigungs Vektor Inhalte werden zum int 22h Vektor zurückkopiert vom
PSP des Prozesses B, dann ein RETF oder gleichwertiger wird ausgeführt, um die
Steuerung an Prozess A zu übergeben.
7) laden einer Overlay Datei mit 4B: Erstens, nicht den Speicher freigeben
indem das Overlay geladen wird. Mit den anderen 4Bh Funktionen, das
Gegenteil ist wahr--zuerst den Speicher freigeben, mit Funktion 4Ah.
Zweitens, die "Segmentadresse wohin die Datei geladen wird" (erstes Element
in dem Parameterblock für Unterfunktion 03) sollte eine Bereichsgrenze
im gegenwärtigen belegten Speicher sein. Drittens, falls die Prozeduren
im Overlay FAR Prozeduren sind (solange sie ablaufen, ist CS gleich der
Segmentadresse von dem Overlay Bereich), sollte der Verschiebungsfaktor
Null sein. Auf der anderen Seite, falls das CS Register unterschiedlich
von der Overlaybereichs Segmentadresse sein muß, sollte der Verschiebungs-
faktor auf die auftretende Differenz gesetzt werden. Um festzustellen
wo im Speicher die Overlay Datei geladen wird, benutze die Segmentadresse
dir vorher erwähnt wurde. Overlay Dateien sind. EXEs (beinhalten
Dateikopf, Verschiebungstabelle, und Speicherabbild).
8) sobald Funktion 00h die Steuerung zurück gibt, alle Register sind geändert, einschließlich der
Stapel. Du mußt SS, SP, und irgendwelche anderen verlangten Register zurücksichern.
9) PCDOS EXEC Funktion 3 (Overlay) befindet sich in dem vorrübergehenden Teil von
COMMAND.COM und wird geladen sobald es benötigt wird, so die Bedingung für
genug freien Speicher um das EXEC Ladeprogramm (über 1. 5k) zu laden. Unter MSDOS
befindet sich das EXEC System Systemspeicher.
10) falls versucht wird eine. EXE Datei zu überlagern mit der high/low Schalter eingestellt zum laden
in den hohen Speicher ereignet sich nichts. Der high/low Schalter ist ausschließlich für
Prozess Erstellung, nicht für Overlays.
11) DOS 2.x zerstört alle Register, einschließlich SS:SP.
12) (AL=04h) das ist DOS 4.0, wie freigegeben 1987 zu verschiedenartigen europäischen OEMs.
Es wird nicht in dem US DOS 4.0 verwandt.
13) dieser Aufruf ist ausdrücklich in der OS/2 Kompatibilitätsbox unterstützt.
14) TOS:$ 4B EXEC.
Funktion 4Ch beenden Prozess (EXIT)
beenden mit ERRORLEVEL Rückgabecode
Aufruf AH 4Ch
AL Rückgabecode in AL der zum nächsten Prozess übergeben wird
Rückgabe keine
Anmerkung 1) Übergibt die Steuerung an DOS oder an das aufrufende Programm.
2) Rückgabecode von AL kann durch ERRORLEVEL oder Funktion 4Dh festgestellt werden.
3) alle von diesem Prozess geöffneten Dateien werden geschlossen, Puffer werden gelöscht, und
das Inhaltsverzeichnis des Laufwerks wird aktualisiert.
4) Restauriert: Beendigungs Vektor von PSP:000Ah
Ctrl-C Vektor von PSP:000Eh
kritischer Fehler Vektor von PSP:0012h
5) dieser Aufruf ist ausdrücklich in der OS/2 Kompatibilitätsbox unterstützt.
6) TOS:$ 4C TERM. Gibt ein 2-byte errorlevel zum aufrufenden Programm zurück
Funktion 4Dh holen Rückgabecode von einem Unterprozess (WAIT)
bekommt Rückgabecode von Funktionen 31h und 4Dh (ERRORLEVEL)
Aufruf AH 4Dh
Rückgabe AH Umstand welcher die Beendigung veranlasste
00h normal Beendigung
01h control-break oder control-C
02h kritischer Gerätefehler
03h beenden und warten speicherresistent (Funktion 31h)
AL Rückgabecode vom Unterprogramm (Funktionen 31h oder 4Ch)
Anmerkung 1) der Rückgabecode wird ausschließlich einmal zurückgegeben (das erste Mal).
2) dieser Aufruf ist ausdrücklich in der OS/2 Kompatibilitätsbox unterstützt.
Funktion 4Eh suchen ersten Directory-Eintrag (FIND FIRST)
Aufruf AH 4Eh
CX Attribut der Datei (siehe Funktion 43h)
DS:DX Segment/Offset Zeiger zum ASCIIZ Dateiname (mit Attribut)
Rückgabe CF gesetzt AX Fehlercode (02h, 12h)
gelöscht Datenblock geschrieben an aktuelle DTA
Format des Blockes ist: (Information von BIX)
dokumentiert von Micro- |00h 1 Byte Attributbyte zum Suchen
soft als "reserviert für |01h 1 Byte Laufwerksbuchstabe zum Suchen
DOS' benutzt von folgenden|02h 11 Bytes der zu suchende Dateiname
Suchen nächste Aufruf" |0Ch 2 Bytes Wort Wert des letzten Eintrags
Funktion 4Fh |0Fh 4 Bytes dwort Zeiger zu dieser DTA
|13h 2 Bytes Wort Start Inhaltsverzeichnis
| PC-DOS 3.10 (von INTERRUP.ARC)
|00h 1 Byte Laufwerksbuchstabe
|01h-0Bh 11 Bytes zu suchender Dateiname
|0Ch 1 Byte Attributbyte
| DOS 2.x (und DOS 3.x außer 3.1?) (von INTERRUP.ARC)
|00h 1 Byte Attributbyte
|01h 1 Byte Laufwerksbuchstabe
|02h-0Ch 11 Bytes zu suchender Dateiname
|0Dh-0Eh 2 Bytes Anzahl Einträge im Inhaltsverzeichnis
|0Fh-12h 4 Bytes reserviert
|13h-14h 2 Bytes Anzahl Cluster im Ursprung Inhaltsverzeichnis
15h 1 Byte Dateiattribut
16h 2 Bytes Uhrzeit der Datei, Bitmaske:
0-4 halbe-Sekunden
5-10 minute
11-15 Stunde
18h 2 Bytes Datum der Datei, Bitmaske:
0-4 Tag
5-8 Monat
9-15 Jahre seit 1980
1Ah 2 Bytes niederwertiges Wort der Dateigröße
1Ch 2 Bytes höherwertiges Wort der Dateigröße
1Eh 13 Bytes Name und Erweiterung der gefundenen Datei, plus
1 Byte von 0s. Alle Leerzeichen werden von dem
Name und Erweiterung entfernt, und falls eine
Erweiterung vorhanden ist, geht ihr ein Punkt
voran.
Anmerkung 1) diese Funktion unterstützt keine Netzwerk Transaktionen.
2) Wildcards sind in der Dateibezeichnung zugelassen.
3) falls das Attribut Null ist, ausschließlich übliche Dateien werden gefunden. Falls das Datenträger-
etikett Bit eingestellt ist, ausschließlich Datenträgeretiketten werden gefunden. Irgendwelche andere Attribute
geben die Dateien mit dem Attribut und alle normalen Dateien gemeinsam zurück.
4) um alles außer dem Datenträgeretikett zu suchen, setzen der versteckt, System,
und Unterverzeichnis Bits alle auf 1.
5) dieser Aufruf ist ausdrücklich in der OS/2 Kompatibilitätsbox unterstützt.
6) TOS:$ 4E SFIRST.
Funktion 4Fh suchen nächsten Directory-Eintrag (FIND NEXT)
suchen nächste ASCIIZ Datei
Aufruf AH 4Fh
Rückgabe CF gelöscht Datenblock geschrieben an aktuelle DTA
gesetzt AX Fehlercode (02h, 12h)
Anmerkung 1) falls Datei gefunden wird, DTA ist formatiert wie im Aufruf 4Eh.
2) Suchen Datenträgeretikett mit 4Eh/4Fh ist wie verlautet nicht 100% verläßlich
unter DOS 2.x. Der Aufruf berichtet irgendwann das ein Datenträgeretikett gefunden wurde und
zeigt zu einem wertlosen DTA, auch wenn das Datenträgeretikett das ausschließliche Element ist
das nicht gesucht werden sollte. Die meisten Referenzen empfehlen die Benutzung von den älteren
FCB Aufrufen zur Behandlung von Datenträgeretiketten.
3) diese Funktion unterstützt keine Netzwerk Transaktionen.
4) Benutzen von dieser Funktion nimmt an, daß die Original Dateibezeichnung Wildcards enthält
5) dieser Aufruf ist ausdrücklich in der OS/2 Kompatibilitätsbox unterstützt.
6) TOS:$ 4F SNEXT.
Funktion 50h "benutzt intern von DOS" - einstellen PSP
* einstellen neues Programm Segment Prefix (aktueller Prozess ID)
Aufruf AH 50h
BX Segmentadresse von dem neuen PSP
Rückgabe keine - neues PSP wird als aktuelles von DOS betrachtet
Anmerkung 1) durch übertragen des PSP Segment Werts in BX und ausgebend eines 50h Aufrufes, DOS speichert
den Wert in eine Variable und benutzt diesen Wert immer, wenn ein Dateiaufruf
gemacht wird.
2) Anmerkung daß in dem PSP (oder PDB) ein Tabelle von 20 (dezimal) offenen Datei
Handles ist. Diese Tabelle startet an Offset 18h in dem PSP. Falls ein
0FFh in einem Byte ist, dann wird dieser Handle nicht benutzt. Eine Nummer in einer von den
Bytes ist ein Index zu eine interne FB Tabelle für den Handle. Als
Beispiel das Byte an Offset 18h ist für Handle 0, an Offset 19h Handle
1, etc. Bis zu 13h. Falls das höchste Bit gesetzt ist, dann ist die Datei, die dem Handle
zugewiesen ist, nicht gemeinsam mit Kind Prozessen EXEC'd mit Aufruf 4Bh benutzt.
3) Funktion 50h ist gefährlich in Hintergrund Transaktionen vor DOS 3.x weil
es den falschen Stapel zum speichern von Register benutzt. (dasselbe wie Funktionen
0 .. 0Ch in DOS 2.x). Benutz keine Stapel in 3.0+ - voll ablaufinvariant.
4) unter DOS 2.x, diese Funktion kann nicht innerhalb eines int 28h Handlers aufgerufen werden
ohne Einstellung des kritischen Fehler Kennzeichens.
5) Information über offene Dateien, etc. Wird in dem PSP gespeichert, den DOS als aktuellen betrachtet.
Falls ein Programm (z.B. ein speicherresistentes Programm) einen zweiten benötigten PSP erstellt,
dann der zweite PSP sollte als aktueller gesetzt werden, damit sicher ist, das DOS schließt
wie entgegengesetzt zu dem ersten, sobald die zweite Anwendung beendet wird.
6) siehe PC Mag Vol.5, No 9, p. 314 für Diskussionen, auch benutzt in BCOPY.ASM
7) benutzt von DOS 3.3 PRINT & DEBUG, DesQview 2.01, Windows 1.03, SYMDEB
von MASM 4. 0.
8) diese Funktion ist verfügbar in der OS/2 DOS Kompatibilitätsbox.
9) DOS speichert die PID an eine Stelle, aber die eigentliche Adresse ist Version-
abhängig. Die Strategie ist, suchen der PID und dabei seine Adresse
suchen. Falls du hast seine Adresse, du kannst überlagern PIDs von den TSR pop-up
Code durch peeking und pooking. In dem Initialisierungscode, benutze GetPID
(0x50) zum holen der PID. DOS bleibt zwischen den Interrupt Vektoren 0:0 - 0:100
und dem PID. Andere Programme können auch da sein, aber DOS auch.
Suche in diesem Speicher nach einer Kopie von dem PID. Sobald eine gefunden
wird, benutze SetPID (0x51) um einen falschen PID einzustellen. Falls die Stelle wo
die original PID Änderungen zu der falsch PID gefunden ist, du hast gefunden die
Adresse von dem PID. Nicht vergessen den PID mit SetPID nach jedem Test
zu löschen. DOS 2.0 und 2.1 erhalten die PID in zwei Adressen, nicht in einer.
Funktion 51h "benutzt intern von DOS " - holen Programm Segment Prefix
* gibt die PSP Adresse von dem aktuell ausführenden Programm zurück
Aufruf AH 51h
Rückgabe BX Adresse vom aktuell ausführenden Programm (Prozess ID)
Anmerkung Format vom PSP:
Offset Größe Beschreibung
00h 2 Bytes Programm Austiegspunkt
02h Wort Speichergröße in Paragraphen
04h Byte ungebraucht (0)
05h 5 Bytes CP/M Style Einsprungspunkt (far Aufruf zu DOS)
0Ah Wort Beendigungsadresse (alt int 22h)
0Ch Wort Beendigungssegment
0Eh Wort break Adresse (alt int 23h)
10h Wort break Segment
12h Wort Fehler Adresse (alt int 24h)
14h Wort Fehler Segment
16h Wort Ursprung PSP Segment
18h 20 Bytes DOS 2.0+ offene Dateien, 0FFh= ungebraucht
2Ch Wort DOS 2. 0+ Environment Segment
2Eh dwort far Zeiger zum Prozess SS:SP
32h Wort DOS 3.x+ max geöffnete Dateien
34h DOS 3.x+ Adresse Dateitabelle geöffneter Dateien
36h dwort DOS 3.x+ Segment Dateitabelle geöffneter Dateien
38h 24 Bytes ungebraucht bei DOS Versionen vor 3.3
50h 3 Bytes DOS Funktionsverteiler (Far Routine)
53h 9 Bytes ungebraucht
55h FCB #1 Erweiterung
5Ch 16 Bytes FCB #1, gefüllt vom ersten Befehlszeilen Argument
6Ch 20 Bytes FCB #2, gefüllt vom zweiten Befehlszeilen Argument
80h 128 Bytes Befehlsende/vorgegebener DTA Puffer
Anmerkung 1) benutzt in DOS 2.x, 3.x benutzt 62h.
2) Funktion 51h ist gefährlich in Hintergrund Transaktionen vor DOS 3.x weil
es den falschen Stapel zum speichern von Register benutzt. (dasselbe wie Funktionen
0 .. 0Ch in DOS 2.x). Benutz keine Stapel in 3.0+ - voll ablaufinvariant.
3) 50h und 51h kann benutzt werden, falls mehr als ein Prozess in einem PC benutzt wird.
Als Beispiel, falls ein speicherresistentes Programm eine Datei öffnen muß,
kann dies als erstes 51h aufrufen, um den aktuellen ID zu sichern und dann 50h
aufrufen um den ID zu seinen PSP einzustellen.
4) unter DOS 2.x, diese Funktion kann nicht innerhalb eines int 28h Handlers aufgerufen werden
ohne Einstellung des kritischen Fehler Kennzeichens.
5) benutzt von DOS 3.3 PRINT, DEBUG.
6) diese Funktion ist verfügbar in der OS/2 DOS Kompatibilitätsbox.
Funktion 52h "benutzt intern von DOS" - IN-VARS
* gibt einen Far Zeiger zurück, zu ein verknüpften Liste von DOS Daten Variablen
Aufruf AH 52h
Rückgabe ES:BX Zeiger zu der DOS Liste von Listen, für Laufwerksinformation. Greift
nicht auf das laufwerk zu, deshalb kann die Information in den Tabellen falsch sein, falls
das Laufwerk geändert wurde. Gibt einen Zeiger auf den folgend Bereich
von longword Zeiger zurück:
Bytes Wert Beschreibung
(allgemein) -2h, Wort Segment vom ersten Speicherkontrollblock verfügbar
für MALLOC
00h dwort Far Zeiger zum ersten DOS Festplattenparameterblock
04h dwort Far Zeiger zu verknüpften Liste von DOS geöffnete Dateien
Tabellen. (offen Dateien Tabelle Auflistung)
08h dwort Far Zeiger zu CLOCK$: Gerätetreiber, ob
installierbar oder speicherresistent
0Ch dwort Far Zeiger zum aktuellen CON: Gerätetreiber,
ob installierbar oder speicherresistent
(DOS 2.x ausschließlich)
10h Wort Anzahl logischer Laufwerke im System
11h Wort größte unterstützte logische Sektorgröße
13h dwort Far Zeiger zum ersten Plattenpuffer benutzt von dem
logisch Laufwerke. Der Größe von jedem Sektorpuffer
ist gleich der logischen Sektorgröße plus eines 16
Byte Kopfs. (Sektor Puffer Kopf) die Anzahl
dieser Puffer wird durch die CONFIG.SYS. (Sektor
Puffer Aufbau) eingestellt.
17h ---- Anfang (kein Zeiger. Der echte Anfang!)
vom NUL Gerätetreiber. Dies ist das erste Gerät
in der DOS Liste der Gerätetreiber.
(DOS 3.x+)
10h Wort größte unterstützte logische Sektorgröße
(die meisten Versionen von DOS sind hardcoded zu 200h)
12h dwort Far Zeiger zum Sektor Puffer Aufbau benutzt von
den logischen Laufwerke. (Sektor Puffer Aufbau)
16h dwort Far Zeiger zum Laufwerk Pfad und positionieren Information
Tabelle. (Laufwerk Pfad Tabelle)
1Ah dwort Far Zeiger zu einer Tabelle von FCBs. Dies Tabelle ist
ausschließlich zulässig falls FCBS=xx in der CONFIG.SYS benutzt wurde
1Eh Wort Größe der FCB Tabelle
20h Byte Anzahl logischer Laufwerke zur Zeit unterstützt
21h Byte Wert von LASTDRIVE= in CONFIG.SYS (vorgegeben 5)
22h 18 Bytes Anfang (kein Zeiger-der echte Anfang!)
vom NUL Gerätetreiber. Dies ist das erste Gerät
in der DOS Liste der Gerätetreiber.
34h Byte Anzahl der JOINed Laufwerke
Anmerkung 1) dieser Aufruf ist nicht in der OS/2 1.0's DOS Kompatibilitätsbox unterstützt.
2) benutzt von DOS 4.0 MEM.EXE, DOS 3.3 ASSIGN.COM, PRINT.COM, SUBST.EXE.
3) Artikel in Dr. Dobbs' journal, Juni 1989.
4) Festplattenparameterblock
Offset Größe Beschreibung
00h Byte Nummer Platteneinheit, 0=A, 1=B, etc. Falls dies und das nächste
Byte 0FFh sind, dieser Eintrag ist das Ende der Auflistung und
ist nicht zulässig
01h Byte Übergebene Nummer der Platteneinheit an das Blocktreibergerät
welche verantwortlich für dieses logisches Laufwerk ist
02h Wort die logische Sektorgröße des Laufwerks in Bytes
04h Byte Anzahl Sektoren pro Cluster -1. Die Anzahl der Sektoren
pro Cluster muß eine Potenz von 2 sein
05h Byte Belegungsumschaltung. Der Umschaltwert wird zum berechnen
der Anzahl Sektoren von der Anzahl Cluster benutzt,
ohne eine Division durchzuführen. Anzahl Sektoren=
Anzahl Cluster << Belegungsumschaltung.
06h Wort Anzahl reservierter Sektoren am Anfang von dem
logischen Laufwerk. Kann Partition Information enthalten.
08h Byte Anzahl FATs. Vorgegeben 2
09h Wort Anzahl Hauptverzeichniseinträge
0Bh Wort erste Sektor der Daten beinhaltet (Platten Dateien)
0Dh Wort letzte Cluster Nummer. Anzahl Cluster im Datenbereich
+1. Falls kleiner als 0FF6h die FAT benutzt 12-bit Inhaltsverzeichnis-
einträge, andernfalls 16 Bit Einträge
0Fh Byte FAT Größe. Größe von einer FAT in logischen Sektoren
10h Wort Sektornummer vom ersten Hauptverzeichniseintrag
12h dwort Far Zeiger zu dem Blocktreibergerät
16h Byte Mediumbeschreibungsbyte (siehe Abschnitt 8)
17h Byte Kennzeichen Medium. Falls dies 0 ist, wurde auf das Laufwerk zugegriffen.
Falls es -1 ist oder auf -1 gesetzt wird, baut DOS alle Datenstrukturen
beim nächsten Zugriff neu auf, die diesem Laufwerk angeschlossen sind.
18h dwort Far Zeiger zum nächsten Festplattenparameterblock
5) offene Dateien Tabelle
Offset Größe Beschreibung
00h dwort Far Zeiger zu der nächsten Tabelle in der Liste. Falls der
Offset von diesem Zeiger 0FFFFh ist, dann ist die nächste Tabelle
der abschließende Eintrag und ungültig
04h Wort Anzahl Tabelleneinträge. Jeder Tabellen Eintrag ist 53 Bytes
lang. Es ist wenigsten ein Eintrag in jeder Tabelle
außer dem Datenstationeintrag
06h --- Anfang von den offenen Dateien Tabelleneinträge (Anmerkung 6)
6) offene Dateien Tabelleneintrag (35h Bytes lang)
Offset Größe Beschreibung
00h Wort Anzahl Datei Handles die zu dieser Datei zurückgreifen
02h Byte Zugriffsart (siehe Funktion 3Dh)
03h Unbekannt
05h Wort Geräteinformation (siehe Funktion 44h/00h)
06h dwort Far Zeiger zum Geräteinformationskopf falls dies ein Zeichentreiber
ist. Falls dies ein Blocktreiberist, dies ist ein far
Zeiger zu dem Festplattenparameterblock
07h dwort Zeiger zum Gerätetreiberkopf falls Zeichentreiber;
Zeiger zum DOS Gerätekontrollblock falls Blocktreiber
(Format siehe fn 32h)
0Bh Wort erster Cluster der Datei
0Dh Wort Uhrzeit der Datei im gepackten Format
0Fh Wort Datum der Datei im gepackten Format
11h dwort Dateigröße
15h dwort aktuelles Offset in Datei
19h Wort Unbekannt
1Bh Wort letzter gelsener Cluster
1Dh Wort Anzahl Sektoren die den Inhaltsverzeichniseintrag beinhalten
1Fh Byte Offset vom Inhaltsverzeichniseintrag im Sektor (Byte Offset/32)
20h 11 Bytes Dateiname im FCB Format (kein Pfad, kein Punkt, mit Leer-
zeichen aufgefüllt)
2Bh 6 Bytes PSP Segment vom Dateibesitzer
2Dh 3 Bytes Unbekannt - normalerweise 0
31h Wort PSP Segment vom Dateibesitzer
33h-34h Unbekannt - normalerweise 0
7) Sektorpuffer Kopf: (DOS 2.0+)
Offset Größe Beschreibung
00h dwort Zeiger zum nächsten Festplattenpuffer, 0FFFFh falls der letzte
04h 4 Bytes Unbekannt
08h Wort logische Sektornummer
10h 2 Bytes Unbekannt
12h dwort Zeiger zum DOS Gerätekontrollblock (siehe Funktion 32h)
8) Sektorpuffer Aufbau, gefolgt von einem 512 Byte Puffer (DOS 2.x)
Offset Größe Beschreibung
00h dwort Zeiger zum nächsten Festplattenpuffer, Offset=FFFFh falls der letzte
04h Byte Laufwerk (0=A, 1=B, etc), FFh falls nicht in Benutzung
05h 3 Bytes ungebraucht? (enthält immer 00h 00h 01h)
08h Wort logische Sektornummer
0Ah Byte Anzahl zu schreibender Kopien (1 für nicht-FAT Sektoren)
0Bh Byte Sektor Offset zwischen Kopien falls mehrfache Kopien
geschrieben worden sind
0Ch dwort Zeiger zum DOS Gerätekontrollblock (siehe AH=32h)
10h ---- gepufferte Daten
9) Sektorpuffer Aufbau, gefolgt von einem 512 Byte Puffer (DOS 3.x)
Offset Größe Beschreibung
00h dwort Far Zeiger zu dem nächsten Sektorpuffer. Puffer werden
gefüllt in der Anordnung in der sie in der Liste
erscheinen. Der letzte Puffer ist zulässig und hat den Wert
0FFFFFFFFh
04h Byte Laufwerksnummer. Dies ist das Laufwerk, auf das die aktuellen
Daten in dem Puffer verweisen. 0FFh falls nie benutzt.
05h Byte Datenart Kennzeichen. Bit Felder welcher Bereich von dem Laufwerk
auf den Puffer verweist.
Bit Beschreibung
0 Start Sektor?
1 FAT Daten
2 Inhaltsverzeichnis oder Unterverzeichnis Daten
3 Datei Daten
4 ---
5 Puffer wird benutzt - kann überschrieben werden, falls gesetzt
6 Puffer ist schlecht
7 ---
06h Wort logische Sektornummer der gepuffert Daten
08h Byte Anzahl zu schreibender Kopien (1 für nicht-FAT Sektoren)
09h Byte Sektor Offset zwischen Kopien falls mehrfache Kopien
geschrieben worden sind
0Ah dwort Far Zeiger zum Festplattenparameterblock (siehe fn 32h)
0Eh Wort nicht benutzt, normalerweise 0
10h ---- gepufferte Daten
7) Sektorpuffer Kopf: (DOS 4.0+)
DOS 4.x Festplattenpuffer Kopfkette (Array, ein Eintrag pro Kette):
Offset Größe Beschreibung
00h Wort EMS logische Seitennummer in welcher die Kette speicherresistent ist,
wertlos falls kein EMS benutzt wird
02h dwort Zeiger zum kleinsten kürzlich benutzten Puffer Kopf. Alle
Puffer in dieser Kette sind in demselben Segment.
06h Wort Unbekannt - gewöhnlich Null
10) Sektorpuffer Aufbau, gefolgt von einem 512 Byte Puffer (DOS 4.x)
Offset Größe Beschreibung
00h Wort Vorwärts Zeiger, Offset ausschließlich, zu nächsten kleinsten kürzlich
benutzten Puffer
02h Wort Rückwärts Zeiger, Offset ausschließlich
04h Byte Laufwerk (0=A, 1=B, etc), 0FFh falls nicht in Benutzung
05h Byte Datenart Kennzeichen. Bit Felder welcher Bereich von dem Laufwerk
auf den Puffer verweist.
Bit Beschreibung
0 Start Sektor?
1 FAT Daten
2 Inhaltsverzeichnis oder Unterverzeichnis Daten
3 Datei Daten
4 ---
5 Puffer wird benutzt - kann überschrieben werden, falls gesetzt
6 Puffer ist schlecht
7 ---
06h dwort logische Sektornummer
0Ah Byte Anzahl zu schreibender kopien
für FAT Sektoren, dieselbe Anzahl wie FATs
für Daten und Inhaltsverzeichnis Sektoren, gewöhnlich 1
0Bh Wort Offset in Sektoren zwischen Kopien zum schreiben für
FAT Sektoren
0Dh dwort Zeiger zum DOS Gerätekontrollblock (siehe AH= 32h)
11h 3 Bytes Unbekannt
14h gepuffert Daten
11) Laufwerkspfad Tabelleneintrag (Array, ein 51h-byte Eintrag pro Laufwerk):
Offset Größe Beschreibung
00h 64 Bytes aktueller vorgegebener ASCIIZ Pfadname mit Laufwerksbuchstabe,
Doppelpunkt, und führenden Backslash (\)
44h Byte Kennzeichenbyte. Alle zulässige Einträge enthalten ein 40h, letzter
Eintrag enthält 00h.
Bits 15 Netzwerklaufwerk
14 physisches Laufwerk
13 JOINed, aktueller Pfad ist eigentlicher Pfad ohne
SUBST Laufwerksbuchstabe im Pfad kann abweichen vom
logischen Laufwerksnamen
12 SUBSTed, aktueller Pfad ist eigentlicher Pfad ohne
SUBST Laufwerksbuchstabe im Pfad kann abweichen vom
logischen Laufwerksnamen
45h dwort Far Zeiger zum aktuellen Festplattenparameterblock
49h Wort aktueller Block oder Spur/Sektornummer für dieses Inhaltsverzeichnis
0 falls Hauptverzeichnis, -1 falls nie Zugriff erhielt
4Bh dwort Unbekannt. Far Zeiger zu (?). Gewöhnlich -1
4Fh Wort Offset vom '\' im aktuellen Pfadfeld präsentiert das
Hauptverzeichnis vom logischen Laufwerk (2 falls nicht SUBSTed oder JOINed,
andernfalls Anzahl Bytes in SUBST/JOIN Pfad)
Funktion 53h "intern von DOS benutzt" - übersetzen BPB
* übersetzt BPB (BIOS Parameterblock, siehe unterhalb) in ein DOS
Festplattenblock (siehe Funktionsaufruf 32h).
Aufruf AH 53h
DS:SI Zeiger zum BPB (BIOS Parameterblock)
ES:BP Zeiger zum Pufferbereich für DOS Festplattenblock
Anordnung von BPB:
Offset Größe Beschreibung
00h-01h Wort Bytes pro Sektor, erhalten von DDB Bytes 02h-03h.
02h Byte Sektoren pro Cluster, erhalten von (DDB Byte 4)+1
03h-04h Wort reservierte Sektoren, erhalten von DDB Bytes 06h-07h
05h Byte Anzahl FATs, erhalten von DDB Byte 08h
06h-07h Wort # von Hauptverzeichniseinträge, erhalten von DDB Bytes 09h-0Ah
für DOS 3.x: 08h-09h Wort gesamte Anzahl Sektoren, erhalten von:
((DDB Bytes 0Dh-0Eh)-1) * (Sektoren pro Cluster
(BPB Byte 2)) + (DDB Bytes 0Bh-0Ch)
für DOS 4.x: auf Null gesetzt, falls Partition größer als 32Mb ist,
setzt dwort an 15h auf die eigentliche Anzahl Sektoren
0Ah Wort Mediumbeschreibungsbyte, erhalten von DDB Byte 16h
0Bh-0Ch Wort Anzahl Sektoren pro FAT, holen von DDB Byte 0Fh
für DOS 3.x: 0Dh Wort Anzahl Sektoren pro Spur
0Fh Wort Anzahl Köpfe
11h dwort Anzahl versteckter Sektoren
15h 11 Bytes reserviert
für DOS 4.x: 15h dwort gesamte Anzahl Sektoren falls Wort an 08h Null
enthält
Rückgabe Unbekannt
Anmerkung diese Funktion ist dokumentiert wie 'SetDPB' in dem ZENITH MS-DOS 3.05 TRM.
Funktion 54h holen VERIFY Einstellung
holen Zustand des VERIFY Kennzeichens
Aufruf AH 54h
Rückgabe AL 00h falls VERIFY aus
01h falls VERIFY an
Anmerkung 1) Kennzeichen kann mit Funktion 2Eh eingestellt werden.
2) dieser Aufruf ist ausdrücklich in der OS/2 Kompatibilitätsbox unterstützt.
Funktion 55h "intern von DOS benutzt" - erstellen "Kind" PSP
* erstellen PSP: ähnlich wie Funktion 26h (welche ein neuen Programm Segment
Prefix an Segment in DX erstellt), außer das ein "Kind" PSP erstellt wird,
schneller als as existierende zu kopieren.
Aufruf AH 55h
DX Segmentadresse an welcher das neue PSP erstellt werden soll.
Rücklauf Unbekannt
Anmerkung 1) diese Funktion ist ähnlich der Funktion 26h welche erstellt ein PSP, außer daß ungleich
der Funktion 26h die Segmentadresse von dem Ursprungsprozess erhalten wird von dem
aktuellen Prozess ID, eher als von dem CS Wert auf dem Stapel (von dem
INT 21h Aufruf). DX hat den neuen PSP Wert und SI enthält den Wert der
im PSP:2 abgestellt wird (Anfang vom Speicher).
2) Funktion 55 ist nur ein Ersatz für Funktion 26h. Es wird der aktuelle PSP zu
der Segmentadresse DX kopiert, mit der Ergänzung, daß SI das neue
Speicher Anfang Segment enthält. Dies setzt voraus, daß Funktion
26h SI auf das gefundene Segment setzt in dem aktuell PSP und dann die
Funktion 55h aufruft.
Funktion 56h umbenennen einer Datei
Aufruf AH 56h
DS:DX Zeiger zu ASCIIZ mit altem Pfadname
ES:DI Zeiger zu ASCIIZ mit neuem Pfadname
Rückgabe CF gelöscht erfolgreiches umbenennen
gesetzt AX Fehlercode (02h, 03h, 05h, 11h)
Anmerkung 1) arbeitet mit Dateien in demselben logisch Laufwerk ausschließlich.
2) Globale Zeichen sind im Dateinamen nicht zugelassen.
3) der Name von einer Datei ist der volle Pfadname. Der volle Pfadname der Datei kann
geändert sein, solange die eigentliche Dateiname.EXT unverändert bleibt. Ändern
des Pfadnamens erlaubt es die Datei von Unterverzeichnis zu
Unterverzeichnis auf einem logischen Laufwerk "zu verschieben" ohne das
die Datei eigentlich kopiert wird.
4) DOS 3.x erlaubt das Umbenenne von verzeichnissen.
5) dieser Aufruf ist ausdrücklich in der OS/2 Kompatibilitätsbox unterstützt.
6) TOS:$ 56 RENAME. Ähnlich wie MS-DOS 2.x.
Funktion 57h holen/einstellen Datum und Uhrzeit einer Datei
lesen oder modifizieren Uhrzeit- und Datumseintrag eines Dateieintrages
Aufruf AH 57h
AL Funktionscode
00h holen Datum und Uhrzeit
01h einstellen Datum und Uhrzeit
CX einzustellende Uhrzeit
DX einzustellendes Datum
02h Unbekannt (DOS 4.0+)
03h Unbekannt
04h Unbekannt (DOS 4.0+)
BX Dateinummer
Rückgabe CF gelöscht CX Uhrzeit vom letzten Schreibzugriff (falls AL=0)
DX Datum von letzten Schreibzugriff (falls AL=0)
gesetzt AX Fehlercode (01h, 06h)
Anmerkung 1) Datum/Uhrzeit Formate sind:
CX Bits 0Bh-0Fh Stunden (0-23) DX Bits 09h-0Fh Jahr (relative zu 1980)
05h-0Ah Minuten (0-59) 05h-08h Monat (0-12)
00h-04h Sek. in 2er Schritte (0-29) 00h-04h Tag des Monats (0-31)
2) dieser Aufruf ist ausdrücklich in der OS/2 Kompatibilitätsbox unterstützt.
3) TOS:$ 57 GSDTOF.
Funktion 58h holen/einstellen Belegungsstrategie (DOS 3.0+)
Aufruf AH 58h
AL 00h holen aktuelle Strategie
01h einstellen neue aktuelle Strategie
BL neue Strategie
00h ersten passenden - wählt den niedrigsten Block im Speicher
welcher paßt (dies ist der vorgegebene Weg). (benutzt
erste Speicherblock der groß genug ist)
01h besten passenden - wählt den kleinsten Block welcher
der Anforderung genügt.
02h letzten passenden - wählt den höchsten Block welcher paßt
Rücklauf CF gelöscht erfolgreich
AX Strategie Code
gesetzt Fehler
AX Fehlercode( 01h)
Anmerkung 1) dokumentiert in ZENITH DOS Version 3.1, einige im erweiterten MSDOS.
2) die Unterfunktion einstellen akzeptiert irgendein Wert in BL; 2 oder größer bedeutet den letzten
passenden. Die Unterfunktion holen, gibt den letzten eingestellten Wert zurück, deshalb sollten
Programme kontrollieren, ob der Wert größer oder gleich 2 ist.
3) für Diskussion vom besten passenden kontra ersten passenden Belegungsstrategie, siehe
Knuth, *Fundamental Algorithms.* mit sehr wenigen worten, Knuth findet daß ersten
passenden Methoden sind fern übergeordnet zum besten passenden, welche erhöht den
Belegungsaufwand und die Speicherzersplitterung. Der "letzte" passenden den DOS
anbietet ist nichts andere als ein erster passender, wobei die Suche an dem
anderen Ende von der Kette beginnt (der Algorithmus nimmt den ersteen passenden
Block, der ihm bei der Suche begegnet).
Funktion 59h holen erweiterten Fehlercode (DOS 3. 0+)
der Funktionsaufruf (59h) holen erweiterten Fehler ist geplant um eine allgemeine
Einstellung von Fehlercodes zu liefern und um umfassendere Information über den Fehler
an die Anwendung weiterzugeben. Die Information die von dem Funktionsaufruf 59h zurückgegeben wird , in
Beifügung zu dem Fehlercode, ist die Fehler Klasse bzw. Gruppe, der Ort, und die
empfohlene Handlung. Die Fehler Klasse bzw. Gruppe liefert Information über den Fehlertyp
(Hardware, intern, System, etc.). Der Ort liefert Information über den Bereich
der in den Ausfall verwickelt ist (serielles Gerät, Blocktreiber, Netzwerk,
oder Speicher). Die empfohlene Handlung liefert eine vorgegebene Handlung für
Programme die den wesentliche Fehlercode nicht verstehen.
Neu geschriebene Programme sollte die Benutzung der erweiterten Fehler unterstützen beide von
Interrupt 24h Hard Error Handler und nach irgendeinem int 21h Funktionsaufruf. FCB
Funktionsaufrufe zeigen einen Fehler an, indem 0FFh in AL zurückgeben wird. Handle Funktion
setzen das Carry Flag (CF) um einen Fehler anzuzeigen, und den den Fehlercode
in AX zurück. Int 21h Handle Funktionsaufrufe für DOS 2.x geben Fehlercodes von 0-18
zurück. Int 24h Handle Funktionsaufrufe geben Fehlercodes von 0-12 zurück.
Aber die Anwendung kann irgendeinen von den Fehlercodes bekommen, die in
der erweiterten Fehlercode Tabelle benutzt werden, indem die Funktion 59h aufgerufen wird.
Handle Funktionsaufrufe für DOS 3.x können irgendwelche von den Fehlercodes zurückgeben. Jedoch,
wird empfohlen daß dem Funktionsaufruf ein Aufruf der Funktion 59h folgt, um
die Fehler Klasse bzw. Gruppe, den Ort, und die empfohlene Handlung zu bekommen.
Die Funktion holen erweiterten Fehler (59h), kann immer aufgerufen werden, ungeachtet dessen
ob der vorhergehende DOS Aufruf ein alter Entwurf (Fehlercode in AL) oder neuer Entwurf
(Carry Bit). Kann auch innerhalb eines int 24h Handlers benutzt werden.
Du kannst entweder AL oder das Carry Bit kontrollieren um festzustellen das kein Fehler aufgetreten ist
und die Funktion 59h ausschließlich dann aufrufen, falls da ein Fehler war, oder einfach
immer die Funtion 59h aufrufen um festzustellen ob ein fehler aufgetreten ist
oder nicht. Sobald die Funktion 59h aufgerufen wird, gibt diese in AX= 0 zurück, falls der
vorhergehende DOS Aufruf erfolgreich war.
Verschiedenartige Versionen von IBM's DOS, MSDOS, OEM kundenspezifische Versionen von MSDOS,
Digital's DRDOS, und andere DOS Umgebungsnachbildungen geben manchmal unter-
schiedliche Fehlercodes für dieselbe Funktion zurück. DIes sollte sorgfältig geprüft werden, falls
auf eine wesentliche Fehlerbedingung geprüft wird.
Aufruf AH 59h
BX Version Code (0000 für DOS 3.0 und 3.1)
Rückgabe AX erweiterter Fehlercode:
01h ungültige Funktionsnummer
02h Datei nicht gefunden
03h Pfad nicht gefunden
04h zu viele offene Dateien, keine freien Handles mehr
05h Zugriff verweigert
06h ungültiges Handle
07h Speicherkontrollblöcke zerstört
08h ungenügend Speicher
09h ungültige Speicherblockadresse
0Ah ungültiges Environment
0Bh ungültiges Format
0Ch ungültiger Zugriffscode
0Dh ungültige Daten
0Eh reserviert
0Fh ungültiges Laufwerk wurde spezifiziert
10h Versuch das aktuelle Inhaltsverzeichnis zu entfernen
11h nicht dasselbe Gerät
12h keine weiteren Dateien
13h Versuch auf schreibgeschützte Diskette zu schreiben
14h Unbekannte Einheit
15h Laufwerk nicht bereit
16h Unbekannter Befehl
17h CRC Fehler
18h falsche Datenlänge
19h Positionierungsfehler
1Ah Unbekannter Gerätetyp
1Bh Sektor nicht gefunden
1Ch Drucker hat kein Papier mehr
1Dh Schreibfehler
1Eh Lesefehler
1Fh allgemeiner Fehler
20h Sharing Übertretung
21h Sperren Übertretung
22h unerlaubter Disketten-Wechsel
23h FCB nicht verfügbar
24h Sharing Pufferüberlauf
25h reserviert
26h "
27h "
28h "
29h "
2Ah "
2Bh "
2Ch "
2Dh "
2Eh "
2Fh "
30h "
31h reserviert
32h Netzwerk: Anforderung wird nicht unterstützt (DOS 3.1 + MS Netzwerke)
33h Remote Computer nicht angeschlossen
34h doppelter Name auf Netzwerk
35h Netzwerk: Name nicht gefunden
36h Netzwerk: beschäftigt
37h Netzwerk: Gerät existiert nicht mehr
38h NETBIOS Befehlsgrenze überschritten
39h Netzwerk: Adapter Hardwarefehler
3Ah falsche Antwort vom Netzwerk
3Bh unerwarteter Netzwerkfehler
3Ch unverträglicher remote Adapter
3Dh Drucker Warteschlange voll
3Eh nicht genug Platz für Druckdatei
3Fh Druckdatei war gelöscht
40h Netzwerk: Name war gelöscht
41h Netzwerk: Zugriff verweigert
42h Netzwerk: falscher Gerättyp
43h Netzwerk: Name nicht gefunden
44h Netzwerk: Namensgrenze überschritten
45h NETBIOS Sitzungslimit überschritten
46h temporäre Pause
47h Netzwerk: Anforderung nicht akzeptiert
48h Drucken oder Festplattenumleitung angehalten (DOS 3.1 + MS Netzwerke)
49h reserviert
4Ah "
4Bh "
4Ch "
4Dh "
4Eh "
4Fh reserviert
50h Datei existiert
51h reserviert
52h kann nicht anfertigen Inhaltsverzeichniseintrag
53h versagen auf Interrupt 24h
54h zu viele Umleitungen
55h duplizieren Umleitung
56h ungültiges Passwort
57h ungültiger Parameter
58h Netzwerk: Gerätefehler
BH Klasse bzw. Gruppe vom Fehler:
01h kein Speicherplatz mehr auf dem Medium
02h augenblickliches Zugriffsverbot
03h keine Berechtigung (Zugriff verweigert)
04h intern
05h Hardwareausfall
06h Systemausfall
07h Fehler im Anwenderprogramm
08h nicht gefunden
09h ungültiges Format
0Ah Datei ist gesperrt
0Bh Media Fehler (falsches Datenträger ID, Festplattenausfall)
0Ch schon existiert
0Dh Unbekannt
BL vorgeschlagene Handlung:
01h nochmal wiederholen
02h nochmal wiederholen anch einer Pause
03h Anwendereingabe
04h abbrechen nach Säuberungsaktion
05h sofort abbrechen
06h ignorieren
07h nochmal wiederholen, wenn Anwender Fehler behoben hat
CH Ort (wo sich der Fehler ereignete):
01h Unbekannt oder nicht geeignet
02h Blocktreiber
03h Netzwerk
04h serielles Gerät
05h Speicher
Anmerkung 1) nicht alle DOS Funktionen benutzen das Carry Flag um auf einen Fehler hinzuweisen. Carry
sollte ausschließlich bei Funktionen benutzt werden, bei denen die Verwendung dokumentiert ist.
2) keine der DOS Funktionen welche vor 2.0 existierten, benutzen das Carry Flag
Fehleranzeiger. Viele von ihnen benutzen das Register AL um auf einen Fehler hinzuweisen.
Bei einem Fehler wird gewöhnlich 0FFh in AL übertragen. Die meisten, aber nicht alle, der "neuen"
(2.x,3.x) Funktionen benutzen das Carry Flag, und die meisten, aber nicht alle, von den "alten"
(1.x) Funktionen benutzen AL.
3) bei der Rückkehr, sind CL,DI,DS,DX,ES,BP, und SI zerstört - sichern bevor
diese Funktion aufegrufen wird, falls verlangt.
4) DOS 2.x Fehlercodes: falls die Funktionsaufrufe 38h-57h mit DOS 2.x benutzt werden,
um zu prüfen, ob sich ein Fehler ereignet hat, sollte das AX Register
auf die folgend Fehlercodes überprüft werden:
Funktion Fehlercode Funktion Fehlercode Funktion Fehlercode
38h 2 41h 2,3,5 4Ah 7,8,9
39h 3,5 42h 1,6 4Bh 1,2,3,5,8,10,11
3Ah 3,5,15 43h 1,2,3,5 4Eh 2,3,18
3Bh 3 44h 1,3,5,6 4Fh 18
3Ch 3,4,5 45h 4,6 56h 2,3,5,17
3Dh 2,3,4,5,12 46h 4,6 57h 1,6
3Eh 6 47h 15
3Fh 5,6 48h 7,8
40h 5,6 49h 7,9
5) Anmerkung die erweiterten Fehlercodes 13h bis 1Fh entsprechen den Fehler-
codes 00h bis 0Ch die vom int 24h zurückgegeben werden.
6) dieser Aufruf ist ausdrücklich in der OS/2 Kompatibilitätsbox unterstützt.
Funktion 5Ah erstellen temporäre Datei
erstellen eindeutige Datei (zur temporären Benutzung) (DOS 3.0+)
Aufruf AH 5Ah
DS:DX Zeiger zum Puffer der ein ASCIIZ Inhaltsverzeichnispfad
beendet mit einem Backslash (\) beinhaltet. Der Puffer muß wenigsten 13
freie Bytes nach dem Backslash haben, wohin der Dateiname und die
Erweiterung geschrieben wird.
CX Dateiattribut
Rückgabe CF gelöscht AX Dateinummer (Handle)
DS:DX neuer ASCIIZ Pfadname
gesetzt AX Fehlercode (03h, 05h)
Anmerkung 1) die erstellte Datei ist wahrlich nicht "temopär". Sie muß durch den
Anwender entfernt werden.
2) falls ein Dateiname erstellt werden soll, der schon in dem aktuellen Inhaltsverzeichnis
existiert, ruft sich diese Funktion wieder selbst mit einem anderen eindeutigen Dateinamen
auf, bis ein eindeutiger Dateiname gefunden worden ist.
3) der temporäre Dateiname besteht gewöhnlich aus Buchstaben und Zahlen.
Es wird keine Dateierweiterung erzeugt.
4) dieser Aufruf ist ausdrücklich in der OS/2 Kompatibilitätsbox unterstützt.
Funktion 5Bh erstellen einer neuen Datei (DOS 3.0+)
Aufruf AH 5Bh
DS:DX Segment/Offset Zeiger zu einem ASCIIZ Pfadname
CX Datei Attribut
Rückgabe CF gelöscht AX Dateinummer
DS:DX neuer ASCIIZ Pfadname
gesetzt AX Fehlercode (03h, 04h, 05h, 50h)
Anmerkung 1) ungleich Funktion 3Ch, Funktion 5Bh versagt falls die Datei schon existiert.
2) die neue Datei wird im lese/schreiben Modus geöffnet.
3) dieser Aufruf ist ausdrücklich in der OS/2 Kompatibilitätsbox unterstützt.
Funktion 5Ch sperren/entsperren Dateizugriff (DOS 3.0+)
Aufruf AH 5Ch
AL 00h sperren Dateibereich
01h entsperren Dateibereich
BX Dateinummer
CX:DX Start Offset des zu sperrenden Bereiches
SI:DI höchste/niedrigste Größe des zu sperrenden Bereiches
Rückgabe CF gelösch erfolgreich
gesetzt AX Fehlercode (01h,06h,21h)
Anmerkung 1) Entsperre alle Dateien vor dem Beenden oder unbestimmt Ergebnisse können auftreten.
Programme die Datei Sperrung benutzen, sollten den int 23h (Control-C Anwender
Adresse) und den int 24h (Kritische Fehler Routine Adresse) abfangen und
die Dateien entsperren, bevor an den Anrufer zurückgegeben wird.
2) Programme hervorgebracht mit EXEC, schleppen alle die Ursprungsdateinummern mit,
aber nicht die Dateisperren.
3) dieser Aufruf ist ausdrücklich in der OS/2 Kompatibilitätsbox unterstützt.
4) es kann eine vollständige Datei, irgendwelche Teile von einer Datei, oder verschiedene Stück von
derselben Datei gesperrt werden. Als Beispiel, es ist wirkungsvoller einen Bereich in
einer Datenbank zu sperren, der einen einzelnen Satz enthält als die Datei vollständig
zu sperren.
5) Es sollte nur soviel von einer Datei gesperrt werden, wie echt benötigt wird, und ausschließlich
nur solange wie notwendig. Wenn auf eine Datei gemeinsam zugegriffen und oft
aktualisiert wird, dauerndes sperren und entsperren kann den Dateizugriff
spürbar verlangsamen.
Funktion 5Dh nicht dokumentiert - Multifunktion
* DOS intern - teilweise (DOS 3.x+)
Aufruf AH 5Dh
AL Unterfunktion
00h indirekter Funktionsaufruf
DS:DX Zeiger zum Puffer der die Registerwerte beinhaltet
AX, BX, CX, DX, SI, DI, DS, ES für ein Aufruf von
int 21h
Rückgabe entsprechend der aufgerufenen Funktion
Anmerkung kontrolliert nicht AH. Ungültige Werte können das
Abstürzen des Systems veranlassen.
01h SYNC? (DOS 3.1+)
Parameter Unbekannt
Anmerkung 1) tut etwas mit jeder Plattendatei in dem System.
Dateitabelle zu welcher geschrieben wurde.
2) falls Remote Datei, ruft int 2Fh/fn1107h.
3) scheint den Uhrzeiteintrag von allen offenen
Dateien zu denen geschreiben wurde zu aktualisieren.
02h SHARE.EXE? (DOS 3.1+)
Anmerkung Fehler falls SHARE nicht geladen ist (ruft fn 52h+4Ah)
03h SHARE.EXE? (DOS 3.1+)
Anmerkung Fehler falls SHARE nicht geladen ist (ruft fn 52h+4Ah)
04h SHARE.EXE Funktionen? (DOS 3.1+)
Anmerkung Fehler falls SHARE nicht geladen ist (ruft fn 52h+4Ah)
05h Netzwerk Funktionen? (DOS 3.1+)
DS:DX Zeiger zum Puffer (siehe AX=0Ah), ausschließlich die Felder am
Offset 12h, 14h werden benutzt
Anmerkung Fehler falls SHARE nicht geladen ist (ruft fn 52h+4Ah)
06h holen Adresse von kritischen Fehler Kennzeichen
DS:DX Zeiger zum Puffer (siehe AX=0Ah), ausschließlich die Felder am
Offset 12h, 14h werden benutzt
Rückgabe CX Unbekannter Wert
DX Unbekannter Wert
DS:SI Zeiger zum kritischen Fehler Kennzeichen
Anmerkung dieser Aufruf erledigt eine Anzahl von anderen Arbeiten und gibt
zusätzlich den Zeiger zur Einstellung des CritErr Kennzeichens zurück
erlaubt die Benutzung der Funktionen 50h/51h vom int 28h
unter DOS 2.x durch den Zwang den richtigen Stapel zu benutzen.
(LANtastic) 07h Rückgabe umgeleiteter Druckermodus
Rückgabe DL 00 Ausgabe ist kombiniert
01h Ausgabe ist separat
Anmerkung der aktuelle Druckermodus (jede Druckerausgabe
kombinierte oder separat) wird zurückgegeben.
(LANtastic) 08h Einstellen umgeleiteter Druckermodus (jede Druckerausgabe
DL 00h einstellen umgeleitete Ausgabe ist kombiniert
01h einstellen umgeleitete Ausgabe ist separat.
(Startet stillschweigend einen neuen Druckauftrag)
Rückgabe keine
Anmerkung 1) der aktuelle Druckermodus (jede Druckerausgabe
kombiniert oder separat) kann einstellt werden.
2) kann von COMMAND.COM benutzt sein
(LANtastic) 09h Löscht Druckerausgabe
Rückgabe keine
Anmerkung 1) Druckerausgabe ist gelöscht auf und ein neuer Druckenauftrag
wird gestartet. Wenn kein zu löschende Ausgabe existiert,
dann hat diese Funktion keine Wirkung.
2) kann von COMMAND.COM benutzt sein
09h Unbekannt - kann von COMMAND.COM benutzt sein
0Ah einstellen Fehlerinformation (Fehler, Klasse bzw. Gruppe, Handlung, und Ort)
DS:DX Adresse der 11-Worte Fehlerinformationstabelle
Format der Fehlerinformationstabelle:
Offset Größe Beschreibung
00h Wort Wert der beim nächsten Aufruf von fn 59h
in AX zurückgegeben wird
02h Wort Wert der beim nächstes Aufruf von fn 59h
in BX zurückgegeben wird
04h Wort CX
06h Wort DX
08h Wort SI
0Ah Wort DI
0Ch Wort DS
0Eh Wort ES
10h Wort reserviert (0)
12h Wort Unbekannt (0 für DOS 3.1)
14h Wort Unbekannt (0 für DOS 3.1)
Rückgabe CX Unbekannter Wert
DX Unbekannter Wert
DS:SI (für 06h) Zeiger zum kritischen Fehler Kennzeichen
Anmerkung 1) dies anrufen scheint viele unterschiedlich Funktionen zu haben.
2) Funktion 0Ah; DOS 3.1+.
3) Funktion 06h; Einstellung CritErr Kennzeichen erlaubt die Benutzung der Funktionen 50h/51h vom
int 28h unter DOS 2.x durch den Zwang den richtigen Stapel zu benutzen.
4) Funktionen 07h, 08h, 09h sind identisch in DOS 3.1 und rufen int 2Fh
fn1125h auf.
Funktion 5Eh Netzwerk Drucker (teilweise dokumentiert von Microsoft)
DOS 3.1+ mit Netzwerk Software
Aufruf AH 5Eh
AL 00h holen Maschinenname
DS:DX Zeiger zum 16-byte Puffer für ASCIIZ Name
Rückgabe CH 00h falls Name nicht definiert ist
<>0 Name ist definiert
CL 00h Name nicht vorhanden
<>0 NetBIOS Nummer des Namens
DS:DX Zeiger zum ASCIIZ Name falls CH <>0
Anmerkung der ASCIIZ Name ist eine 15 Byte lange Zeichenkette, mit Nullen
auf die Länge aufgefüllt.
01h einstellen Maschinenname
CH 00h Name löschen
<>0 einstellen Name
CL Nummer des Namens
DS:DX Zeiger zum ASCIIZ Name
02h einstellen Zeichenkette zur Druckersteuerung
BX Index Umleitungsliste
CX Länge der einzustellenden Zeichenkette (max 64 Bytes)
DS:SI Zeiger zum Zeichenketten Puffer
Anmerkung 1) einstellen Zeichenkette erstellt eine Zeichenkette die
immer zu dem Netzwerkdrucker gesendet wird, wenn eine Datei an
den Drucker gesendet wird.
2) LANtastic LANOS bearbeitet diese Anforderung nicht,
seit die Druckereinstellungen durch den Systemverwalter
kontrolliert werden, indem das Programm NET_MGR benutzt
wird. Wie auch immer, der Systemaufruf gibt
keine Fehler zurück.
03h holen Zeichenkette zur Druckersteuerung
BX Index Umleitungsliste
ES:DI Zeiger zum 64-byte Zeichenketten Puffer
Rückgabe CX Länge der eingestellten Zeichenkette (max 64 Bytes)
Anmerkung 1) dieser Aufruf gibt die Zeichenkette zurück, die mit der
vorhergehenden fn 02h eingestellt wurde.
2) LANtastic LANOS bearbeitet diese Anforderung nicht,
seit die Druckereinstellungen durch den Systemverwalter
kontrolliert werden, indem das Programm NET_MGR benutzt
wird. Wie auch immer, der Systemaufruf gibt
keine Fehler zurück und die Länge der Zeichenkette
(CX) ist 0.
04h DOS 3.1+ +Microsoft Netzwerke - Unbekannt
Anmerkung ruft int 2F/AX=11Fh mit 5E04h auf dem Stapel.
05h DOS 3.1+ +Microsoft Netzwerke - Unbekannt
Anmerkung ruft int 2F/AX=111Fh mit 5E05h auf dem Stapel.
06h DOS 3.1+ +Microsoft Netzwerke - Unbekannt
Anmerkung ruft int 2F/AX=111Fh mit 5E06h auf dem Stapel.
Rücklauf CF gelöscht erfolgreich
gesetzt Fehler
AX Fehlercode (01h für alle verzeichneten Unterfunktionen)
Anmerkung 1) benutzt in IBM's & Microsoft's Netzwerkprogrammen.
2) teilweise Dokumentation im Herbst 1985 Byte.
3) diese Funktion verlangt, daß die Netzwerksoftware installiert ist.
4) teilweise Dokumentation im erweiterten MS-DOS.
5) SHARE muß geladen sein oder Ergebnisse sind unbrauchbar mit 00h, oder versagt
mit 02h oder 03h.
Funktion 5Fh Netzwerk Umleitung
(DOS 3.1+ und Microsoft Netzwerke)
Aufruf AH 5Fh
AL *00h Unbekannt
*01h Unbekannt
02h holen Umleitungslisten Eintrag
BX Index Umleitungseintrag. Index 0 spezifiziert den
ersten Eintrag
DS:SI Zeiger zum 16 Byte Bereich welcher den ASCIIZ Gerätnamem
für den Umleitungsindex aufnimmt
ES:DI Zeiger zum 128 Byte Puffer für den ASCIIZ
Netzwerknamen
Rückgabe CF gesetzt wenn Fehler
AX Fehlercode (01h, 12h)
BH Gerätszustandskennzeichen (Bit 0=0 falls zulässig)
(Bit 0=1 falls ungültig)
(Bits 1-7 reserviert)
BL Gerätetyp
03 Drucker
04 Laufwerk (Datei)
CX Wert gespeichert beim fn 03h Aufruf. Sollte 0 sein
zur Kompatibilität mit LANOS
DS:SI Zeiger zum 16 Byte ASCIIZ lokalen Gerätenamen
ES:DI Zeiger zum 128 Byte ASCIIZ Netzwerknamen
Anmerkung 1) DX und BP wedren duch diesen Aufruf zerstört.
2) dieser Aufruf gibt Information über ein einzelnes
umgeleitetes Gerät (siehe fn 03h) zurück. Diese fn kann
benutzt werden, um die Auflistung der umgeleiteten Geräte zu untersuchen.
03h umleiten Gerät - anfertigen Zuweisung zum Auflistungseintrag
Leitet eine Workstation, Laufwerk oder Gerät zu einem Server
Inhaltsverzeichnis oder Gerät um.
AX Fehlercode falls Fehler
BL Gerätetyp
03 Drucker
04 Datei
CX gespeicherter Parameterwert (0 zur Kompatibilität
mit IBM PC Netzwerk Programm und LANtastic)
DS:SI Zeiger zum 16-byte ASCIIZ Quelle Gerätename
für Drucker schreibe: PRN, LPT1, LPT2, LPT3
ES:DI Zeiger zum Ziel 128-byte ASCIIZ Netzwerk
Pfad und ASCIIZ Passwort
(z.b., '\\ machinen_name\Pfad',0,'Passwort',0)
Anmerkung umleiten Gerät erlaubt das Anschließen von lokalen
Geräten zur Netzwerkbenutzung. Als Beispiel, du kannst
eueren LPT1 zu einem Drucker auf einem anderen Netzknoten anschließen.
Anweisungen an LPT1 werden zu dem Netzwerk umgeleitet.
04h abbrechen Umleitungszuordnung
DS:SI Zeiger zu ASCIIZ Gerätenamen oder Netzwerk Pfad
der annulliert werden soll
Anmerkung abbrechen Geräteumleitung erlaubt das Entfernen
einer Geräteumleitung, sodaß das Gerät auf seinen
vorherigen Status zurückgesetzt wird.
Rücklauf CF gelöscht erfolgreich
gesetzt falls Fehler
AX Fehlercode
(fn 02h) 01h, 12h
(fn 03h) 01h, 03h, 05h, 08h
(fn 04h) 01h, 0Fh
Anmerkung 1) benutzt in IBM's Netzwerk Programm.
2) teilweise Dokumentation im Herbst 1985 Byte.
3) diese Funktion verlangen daß die Netzwerksoftware installiert ist.
4) teilweise Dokumentation im erweiterten MS-DOS.
5) SHARE muß geladen sein oder der Aufruf versagt.
6) der Netzwerk Gerätename verlangt ein Passwort.
Funktion 60h analysieren Pfadname (DOS 3.0+)
* durchführen Name Abarbeitung einer Zeichenkette (DOS intern)
Aufruf AH 60h
DS:SI Zeiger zur ASCIIZ Quelle Zeichenkette (beendet mit Null)
ES:DI Zeiger zum Ziel 80 Byte ASCIIZ Zeichenkettenpuffer
Rückgabe ES:DI Puffer gefüllt mit geeignetem Name in der Form (Laufwerk):(Pfad)
CF gesetzt Fehler
AX Fehlercode (02h, 03h)
gelöscht kein Fehler
Anmerkung 1) dokumentiert in ZENITH 3.05 technische Referenz.
2) die gesamte Abarbeitung des Namens geschieht in der Eingabezeichenkette: Zeichenkette
Ersetzung werden in einzelne Bestandteile zerlegt, aktuelles Laufwerk/Verzeichnisse
werden vorangestellt ,. und .. werden entfernte.
3) Beispiel: falls aktuelle Laufwerk/Inhaltsverzeichnis ist c:\test, myfile.x wird übersetzt
zu c:\test\myfile.x; ..\source\sample.asm wird übersetzt zu c:\source\
sample.asm.
4) es liegt in der Verantwortung des Aufrufer, das sicher ist, das DS:SI nicht auf
eine nichtige Zeichenkette zeigt. Falls doch, SI ist erhöht, ein nichtiges Byte
wird an ES:DI gespeichert, und die Routine kehrt zurück.
5) benutzt von CHKDSK, zum mindestens in DOS 3.3, und DOS 3.x.
6) falls Pfad Zeichenkette auf ein JOINed Laufwerk zeigt, der zurückgegebene Name ist der eine der
benötigt wird, falls das Laufwerk nicht JOINed war; ähnlich wie ein SUBSTed
Laufwerksbuchstabe. Durch dies, ist es möglich ein geeigneten Namen zu bekommen,
der nicht legal ist mit der aktuellen Kombination von SUBSTs und JOINs.
7) benutzt von DOS 4.0 SHELLC.EXE.
Funktion 61h nicht dokumentiert - (DOS 3.0)
* DOS intern - Parameter nicht bekannt
Aufruf AH 61h
Rückgabe AL 00h
Anmerkung angeblich dokumentiert in der technischen Referenz vom ZENITH DOS 3.05.
Funktion 62h holen Programm Segment Prefix (PSP)(DOS 3.0+)
Aufruf AH 62h
Rückgabe BX Segmentadresse vom PSP
Anmerkung unter DOS 3.x+, benutzt diese Funktion keine der internen DOS Stapel
und ist somit voll ablaufinvariant.
Funktion 63h holen Lead Byte Tabelle (MS-DOS 2.25 ausschließlich)
Hinzugefügt in DOS 2.25 zur zusätzlichen Unterstützung von fremden Zeichenvorräten.
Aufruf AH 63h
AL Unterfunktion
00h holen System Lead Byte Tabelle Adresse
01h einstellen/löschen Interim Bedienungsfeldkennzeichen
DL 0000h löschen Interim Bedienungsfeldskennzeichen
0001h einstellen Interim Bedienungsfeldkennzeichen
02h holen Interim Bedienungsfeldkennzeichen
Rückgabe DS:SI Zeiger zur Lead Byte Tabelle (AL=00h)
DL Interim Bedienungsfeldkennzeichen (AL=02h)
Anmerkung 1) Funktion 63h zerstört alle Register außer SS:SP bei der Rückgabe.
2) nicht unterstützt in DOS 3.x oder 4.x.
3) Anmerkung fn 63h gibt keine Fehler in AL oder CF zurück.
Funktion 64h nicht dokumentiert - intern von DOS benutzt
Aufruf AH 64h
Rückgabe Unbekannt
Anmerkung 1) DOS 3.2+ interne Funktion von einigen Typen? kann eine Netzwerkfunktion sein.
2) in DOS 3.31 sobald AL mit einer anderen Nummer als Null geladen wird,
wird int 28h öfters aufgerufen. AL=0 setzt zurück zu dem "Start"
Status.
Funktion 65h holen erweiterte Länderinformation (DOS 3. 3+)
gibt zurück Information über der ausgewählt Land Formate, Code
Seiten, und Umsetzungstabellen
Aufruf AH 65h
AL Information ID Code
01h holen allgemein internationale Information
02h holen Zeiger zur Großbuchstabentabelle (130 Bytes max)
(wandelt Zeichen 80h-0FFh in ihre Großbuchstabenwerte um,
falls vorhanden; benutzt vorwiegend zur Abbildung von Akzenten oder andere Vokale
zu den entsprechenden Vokalen)
03h Unbekannt
04h holen Zeiger zum Dateiname Großbuchstabentabelle (130 Bytes max)
(ähnlich der Tabelle für AL=02h)
05h Unbekannt
06h holen Zeiger zur Abgleichungstabelle (258 Bytes max)
(ablegen von Großbuchstaben, Klein-, und Akzentbuchstaben zur gemeinsamen
Sortierung)
07h holen Zeiger zur Doppel-Wort Zeichenvorrattabelle
BX Codeseite (0FFFFh=CON: Gerät)
CX Anzahl von Information die zurückgegeben wurden (minimum 5)
DX Zielland ID (0FFFFh= vorgegeben aktuelle Land)
ES:DI Segment/Offset Zeiger zum Länderinformationspuffer
Rückgabe CF gesetzt wenn Fehler
AX Fehlercode (02h)
andernfalls:
CX Größe dern Länderinformation die zurückgegeben wurde
ES:DI Zeiger zur Länderiformation:
Offset Länge Beschreibung
00h 1 Byte Informations ID (für alle folgenden Puffer)
falls Informations ID Code <>1:
01h dwort Zeiger zu Information
falls Informations ID Code=1:
01h Wort Länge von Rest des Puffers (<=38)
03h Wort Länder ID
05h Wort Code Seitennummer
07h 34 Bytes dieselben wie für int 21h Funktion 38h
falls Information ID Code=2:
01h Wort Tabellengröße
05h dwort Zeiger zur Großbuchstabentabelle
128 Bytes Großbuchstaben Gegenwerte der Zeichen 80h-0FFh (falls vorhanden)
falls Information ID Code=4:
01h Wort Tabellengröße
05h dwort Zeiger zur Abgleichungstabelle
256 Bytes Werte die benutzt werden, um die Zeichen 00h-0FFh zu sortieren
falls Information ID Code=6:
01h Wort Tabellegröße
05h dwort Zeiger zum Dateiname Großbuchstabentabelle. Diese
Tabelle startet mit einem 2-Byte Längenfeld, dann
256 ASCII Werte in der Reihenfolge
128 Bytes Großbuchstaben Gegenwerte der Zeichen 80h-0FFh (falls vorhanden)
falls Information ID Code=7: (DOS 4.0)
Unbekannt
Anmerkung 1) für AL=02h, 04h, oder 06h, die ersten zwei Bytes von der Tabelle sind die
Länge und dann eine 128 Byte Tabelle von Großbuchstaben ASCII Zeichen für
02h oder 04h und ein Zeiger zu der Abgleichung für 06h.
2) der Ländercode und Codeseite müssen passen. Falls nicht, Fehler 02h ist in AX.
3) falls mehr Information vorhanden sind, als durch CX angefordert wurden, werden
diese abgeschnitten, ohne das ein Fehler erzeugt wird.
4) Länderinformation:
Bytes Beschreibung
01h Wert von AL (01h)
02h, 03h Größe (max= 38)
04h, 05h Ländercode
06h, 07h Codeseite
08h, 09h Datumsformat
0Ah, 0Eh Währungszeichen
0Fh, 10h Tausender Trennung
11h, 12h dezimale Trennung
13h, 14h Datum Trennung
15h, 16h Uhrzeit Trennung
17h Währungsformat Kennzeichen
18h Genauigkeit (Anzahl Stellen nach dem Dezimalkomma)
19h Zeitformat
20h-22h monocase Routine Einsprungspunkt
23h-24h Datenliste Trennung
25h-29h Nullen
Funktion 66h holen/einstellen globale Codeseitentabelle (DOS 3.3+)
erfragen /löschen Standard Codeseite
Aufruf AH 66h
AL 00h holen globale Codeseite
01h einstellen globale Seite
BX aktive Codeseite
DX System Codeseite (aktive Seite beim Start)
Rückgabe CF gelöscht erfolgreich
gesetzt AX Fehlercode (Unbekannt)
falls 00h BX aktive Codeseite
DX System Codeseite (aktive Seite beim Start)
Anmerkung BX= aktive Codeseite: 437 = US, 860 = Portugal, 863= Kanada (französisch)
865 = Norwegen/Dänemark, 850= Mehrsprachig
Funktion 67h einstellen Handle Zähler( DOS 3. 3+)
Zur Unterstützung von mehr als 20 offenen Dateien pro Prozess
Aufruf AH 67h
BX gewünscht Anzahl Handles (max 65535)
Rückgabe CF gelöscht falls OK
gesetzt falls Fehler
AX Fehlercode (Unbekannt)
Anmerkung 1) diese Funktion ändert den 20-byte Handle Tabellenzeiger in dem PSP zu
zu einer neuen, größeren Handle Tabelle irgendwo im Speicher.
2) der Speicher den der 67h Aufruf belegt wird vom normalen DOS Pool geholt,
und nach der Beendigung dorthin zurückgegeben, deshalb geht nichts verloren.
3) sobald diese Funktion aufgerufen wird, muß genug Speicher für DOS freigegeben werden,
um die erweiterte Handle Tabelle zu erthalten.
4) falls die angeforderte Anzahl Handles kleiner als 20 ist, es ist aufgerundet
auf 20.
Funktion 68h Commit Datei (DOS 3. 3+)
schreiben aller gepufferten Daten zur Festplatte
Aufruf AH 68h
BX Dateinummer
Rückgabe CF gelöscht wenn erfolgreich
gesetzt wenn Fehler
AX Fehlercode
Anmerkung 1) schneller und sichere Methode zur Schließung einer Datei in einem Netzwerk als
der aktuelle Schließen Befehl.
2) dies ist effektiv dasselbe wie DUPing der Handles für eine Datei und dann
Schließung der neuen, außer daß dieser Aufruf nicht versagt falls das System
kene Handles mehr frei hat.
3) die Dateipuffer werden gelöscht und sein Inhaltsverzeichnis und FAT Eintrag wird
aktualisiert.
Funktion 69h Festplatte serielle Nummer DOS 4.0+ (US Versionen)
behandelt "Datenträger serielle Nummer" auf Disketten formatiert mit 4.0+
Aufruf AH 69h holen serielle Nummer des Datenträgers
AL 00h holen seriell Nummer
01h einstellen serielle Nummer
BL Laufwerk (0=aktuelles, 1=A, etc)
DS:DX Zeiger zu Festplatten Informationstabelle
Rückgabe CF gesetzt wenn Fehler
AX Fehlercode
gelöscht falls erfolgreich
AH zerstört
AL (fn 00h) Puffer mit geeigneten Werten vom
erweiterten BPB gefüllt
(fn 01h) erweiterter BPB auf Festplatte auf die Werte vom Puffer eingestellt
DS:DX Festplatte Informationstabelle. Format:
Offset Größe Beschreibung
00h Wort Unbekannt (Nullen auf meinem System)
02h dwort serielle Festplattennummer (binär)
06h 11 Bytes Datenträgeretikett oder "NO Name" falls keiner
11h 8 Bytes FAT Typ - Zeichenkette "FAT12" oder "FAT16"
Anmerkung 1) das FAT Typenfeld verweist auf die Anzahl Bits pro Inhaltsverzeichniseintrag.
2) erzeugt kein kritischen Fehler; alle Fehler werden in AX zurückgegeben.
3) Fehler 0005h bedeutet kein erweiterter BPB auf der Festplatte.
4) arbeitet nicht auf Netzwerk Laufwerke (Fehler 0001h).
5) Puffer nach den ersten zwei Bytes ist eine genaue Kopie der Bytes 27h bis 3Dh von
dem erweiterten BPB auf der Festplatte.
Funktion 6Ah Unbekannt (DOS 4.0?)
Funktion 6Bh Unbekannt (DOS 4.0?)
Funktion 6Ch erweitertes Öffenen/Erstellen DOS 4.0+ (US)
kombiniert verfügbare Funktionen mit Öffnen, Erstellen, neu Erstellen,
und Commit Datei
Aufruf AH 6Ch
AL 00h reserviert [welchen Sinn macht es dann, andere Unterfunktionen zu haben?]
BX Modus Format 0WF0 0000 ISSS 0AAA
AAA ist Zufgriffscode (lesen, schreiben, lesen/schreiben)
SSS ist Sharing Modus
I 0 übergeben Handle zu "Kind"
1 nicht mitschleppen [interessant!]
F 0 benutze int 24h für Fehler
1 ausschalten int 24h für alle
I/O auf diesen Handle; benutze eigene
Fehlerroutine
W 0 kein Commit
1 automatisches Commit bei allen Schreibzugriffen
CX erstellen Attribut
Bits 0 Nur-Lesen
1 versteckt
2 System
3 Datenträgeretikett
4 reserviert
5 Archiv
6-15 reserviert
DH 00h (reserviert)
DL Handlung falls Datei existiert/nicht existiert
Bits 0-3 Handlung falls Datei existiert
0000 abbrechen
0001 öffnen
0010 ersetzen/öffnen
4-7 Handlung falls Datei nicht existiert
0000 abbrechen
0001 erstellen
DS:SI Zeiger zum ASCIIZ Dateiname
Rückgabe CF gesetzt wenn Fehler
AX Fehlercode (Unbekannt)
gelöscht
AX Dateinummer (Handle)
CX durchgeführte Handlung
01h Datei geöffnet
02h Datei erstellt/geöffnet
03h Datei ersetzt/geöffnet
Anmerkung sobald APPEND installiert ist, falls DX=xx1x ist, wird nur im aktuellen Inhaltsverzeichnis
gesucht, falls DX=xx0x wird er gesamte APPEND Pfad durchsucht. DX wird das
Öffnungskennzeichen genannt und bestimmt die Handlung die durchgeführt wird, falls die Datei
existiert oder nicht existiert.
Funktion 89h nicht dokumentiert - DOS_Sleep
* nicht dokumentiert bei Microsoft
Aufruf AH 89h
Rückgabe Unbekannt
Anmerkung 1) Funktion ist im Microsoft C 4.0 Startup Code MSDOS.INC enthalten.
2) Ein Test zeigt, daß die erste Instruktion beim Aufruf AH mit 64h vergleicht
(zum mindestens in DOS 3.2) und bricht den Aufruf ab, falls AH> 64.
3) möglich benutzt im europäisch MSDOS 4.0?
Funktionsaufrufe installiert in späteren Anwendungen:
Novell Netware 2. 11:.
Novell empfiehlt nicht mehr die int 21h Methode zum Aufruf der
Netware Funktionen. Int 21h wird auf unbestimmte Zeit unterstützt sein, aber das
Netz API ruft zur Adressierung der Software den mehrfach Interrupt (2Fh) auf.
Das API kann durch den int 2Fh in derselben Art wie der int 21h adressiert
werden; nur die Interrupt Nummer ist unterschiedlich.
Novell API Aufrufe sind im Abschnitt 13 beschrieben. Die meisten Funktionen von
0B6h bis 0F9h sind belegt durch NetWare; falls eure Software benutzt irgendeinen
von diesen Aufrufen für einen anderen Zweck, läuft diese wahrscheinlich nicht unter
NetWare.
Anmerkung: Novell (und die meiste andere) Netzwerksoftware und SoftLogic's DoubleDOS
geraten bei den folgenden int 21h Funktionen 0EAh-0EEh in einen Konflikt. Netware muß
die int 2Fh Funktionen an Stelle von 21h Funktionen benutzen, falls DoubleDOS auf dem
Netzwerk benutzt wird.
Funktion 0E4h DoubleDOS - holen Aktivkennzeichen
Aufruf AX 0E4h
Rückgabe AL 00h falls DoubleDOS nicht eingeschaltet ist
<> 0 DoubleDOS ist eingeschaltet
Funktion 0EAh DoubleDOS - ausschalten Task Switching
Aufruf AX 0EAh
Rückgabe keine
Anmerkung Task Switching ausgeschaltet.
Funktion 0EBh DoubleDOS - einschalten Task Switching
Aufruf AH 0EBh
Rückgabe keine
Anmerkung Task Switching eingeschaltet.
Funktion 0ECh DoubleDOS - holen virtuelle Bildschirmadresse
Aufruf AH 0ECh
Rückgabe ES Segment vom virtuellen Bildschirm
Anmerkung Bildschirmadresse kann geändert werden, falls Task Switching an ist!
Funktion 0EEh DoubleDOS - Freigabe Zeitanteil
abgeben Zeit an andere Aufgaben
Aufruf AH 0EEh
AL Anzahl 55ms Zeitanteile die abgegeben werden
Rückgabe keine
Anmerkung gibt zurück nachdem Zeitabgegeben ist.
Funktion 0FFh CED (CJ Dunford's DOS Makro und Befehlszeilen Editor)
CED installierbare Befehle
Aufruf AH 0FFh
AL 00h hinzufügen installierbaren Befehl
01h entfernen installierbaren Befehl
02h reserviert, kann zum Test der CED Installierung benutzt werden
BL Modus Byte
Bit 0 aufrufbar vom DOS Anforderungszeichen
1 aufrufbar von der Anwendung
2-7 nicht benutzt im Public Domain CED
DS:SI Zeiger zum CR-beendeten Befehlsnamen
ES:DI Zeiger zur Far Routine Einsprungspunkt
Rückgabe CF gesetzt wenn Fehler
AX 01h ungültige Funktion
02h Befehl nicht gefunden (ausschließlich Unterfunktion 1)
08h ungenügend Speicher (ausschließlich Unterfunktion 0)
0Eh fehlerhafte Daten (ausschließlich Unterfunktion 0)
AH 0FFh falls CED nicht installiert ist