Home Programmierung
und BIOS
Shareware-
FAQ
Kontakt u.
Infos

DOS-Interrupt 21h (Teil 3)

Funktion Unter - Funktion Bedeutung Eingabe Ausgabe DOS - Implemen- tierung Anmerkungen
48h - Speicher anfordern AH=48h
BX=Größe in Paragraphen
CF=Fehler
AX=Segmentadresse oder Fehlercode (7=Speicher- Kontrollblöcke zerstört, 8=nicht genügend Speicher)
BX=maximale Blockgröße (wenn CF=1)
2.0 Fordert einen Speicherblock an, der bis zu einem Megabyte groß sein könnte, wenn so ein großer Block existieren würde. Diese Funktion kann dazu verwendet werden, die Größe des verfügbaren Speichers zu ermitteln, indem man ein Megabyte anfordert und daraufhin in BX die maximale Blockgröße erhält.
49h - Speicher freigeben AH=49h
ES=Segmentadresse des Speicherblocks
CF=Fehler
AX=Fehlercode (7=Speicherkontroll- Blöcke zerstört, 8=ungültiges Segment)
2.0 -
4Ah - Speicherblock verändern AH=4Ah
BX=neue Größe des Speicherblockes in Paragraphen
ES=Segmentadresse des Speicherblockes
CF=Fehler
AX=Fehlercode (bei gesetztem Carry)
BX=maximale Größe (bei CF=1)
2.0 Wird benötigt, um den Speicherblock des Programmes zu verkleinern, wenn man weitere Programme via EXEC ausführen will.
4Bh 00h Programm laden und ausführen AH=48h
AL=00h
DS:DX=FAR-Zeiger auf den Programm - Dateinamen
ES:BX=FAR-Zeiger auf eine Parametertabelle
CF=Fehler
AX=Fehlercode (bei gesetztem Carry)
2.0 Lädt ein Programm und führt es aus. Nach Rückkehr können sämtliche Register zerstört sein. Mit dieser Funktion kann prinzipiell jede Datei ausgeführt werden, sofern Sie ausführbaren Code enthält.
4Bh 01h Programm laden AH=48h
AL=01h
DS:DX=FAR-Zeiger auf den Programm - Dateinamen
ES:BX=FAR-Zeiger auf eine Parametertabelle
CF=Fehler
AX=Fehlercode (bei gesetztem Carry)
2.0 Nach Rückkehr können sämtliche Register zerstört sein.
4Bh 03h Overlay laden AH=48h
AL=03h
DS:DX=FAR-Zeiger auf den Programm - Dateinamen
ES:BX=FAR-Zeiger auf Loadoverlay - Struktur
CF=Fehler
AX=Fehlercode (bei gesetztem Carry)
2.0 Nach Rückkehr können sämtliche Register zerstört sein.
4Bh 05h Setze ausführbaren Status AH=4Bh
AL=05h
DS:DX=FAR-Zeiger auf Execstate - Struktur
- 5.0 k.A.
4Ch - Programm beenden AH=4Ch
AL=Exitcode
- 2.0 Beendet ein Programm, gibt dessen Speicher frei, setzt die Interrupts 22h, 23h und 24h zurück und schließt alle Dateien.
4Dh - Exitcode abfragen AH=4Dh AH=Kennziffer für Programmende (0: normal, 1: durch Int23h, 2: durch Int24h, 3: resident)
AL=Programm - Exitcode (Errorlevel)
2.0 Ermittelt den Exitcode des zuletzt beendeten Programmes.
4Eh - Ersten Eintrag finden AH=4Eh
CX=Attribut
DS:DX=FAR-Zeiger auf den Dateinamen
CF=Fehler
AX=Fehlercode (3: Pfad nicht gefunden, 18: keine weiteren Einträge)
DTA enthält Informationen
2.0 Diese Funktion sucht nach dem ersten Eintrag, der auf die Bezeichnung Dateiname paßt, und liefert Dateiinformationen über die DTA zurück. Der Dateiname kann einen Suchweg und Laufwerks - Bezeichner enthalten. Auch die Jokerzeichen ? und * sind erlaubt.
4Fh - Nächsten Eintrag finden AH=4Fh CF=Fehler
AX=Fehlercode (3: Pfad nicht gefunden, 18: keine weiteren Einträge)
2.0 Vorher muß Funktion 4Eh aufgerufen worden sein! Daten werden wieder in DTA abgelegt.
50h - Aktiven PSP festlegen AH=50h
BX=Segmentadresse des neuen PSP
- 2.0 Legt den aktiven PSP (Program Segment Prefix) fest, dem vor allem bei den Funktionen zum Beenden eines Programmes Bedeutung zukommt. Wichtig auch für TSR - Programme: Da beim residenten Beenden eines Programmes die geöffneten Dateien nicht geschlossen werden, bleiben die Einträge in der Job File Table des residenten Programmes, die sich im PSP befindet, erhalten. Nach dem residenten Beenden wird der PSP des aufrufenden Programms wieder aktiv. Dadurch hat das residente Programm keinen Zugriff mehr auf geöffnete Dateien. Es muß dazu zunächst den eigenen PSP aktivieren. Natürlich muß das TSR-Programm vor Austritt den alten PSP wieder aktivieren.
51h - Aktiven PSP ermitteln AH=51h BX=Segmentadresse des neuen PSP 2.0 Ermittelt die Segmentadresse des gerade aktiven PSP.
52h - DOS - Datenbereich ermitteln AH=52h ES=Segmentadresse des DOS-Datenbereichs
BX=Offsetadresse des DOS - Datenbereichs
2.0 Liefert einen Zeiger auf den DOS - Datenbereich.
54h - Verify - Status ermitteln AH=54h AL=Status (0: keine Prüfung, 1: Prüfung) 2.0 k.A.
55h - Neuen PSP anlegen AH=55h
DX=Segmentadresse des neuen PSP
- 2.0 Erstellt einen neuen PSP unter Verwendung aller relevanten Einträge des aktiven PSPs.
56h - Datei / Verzeichnis umbenennen AH=56h
DS:DX=Zeiger auf den ASCIIZ-String des alten Namens
ES:DI=Zeiger auf den ASCIIZ-String des neuen Namens
CF=Fehler
AX=Fehlercode (bei gesetztem Carry)
2.0 Die Dateinamen können eine komplette Pfadbezeichnung und Laufwerks - Bezeichnung enthalten. Die Laufwerks - Bezeichner müssen aber gleich sein! Auch dürfen offene Dateien nicht umbenannt werden! Gleiches gilt für das aktive Verzeichnis.
57h 00h / 01h Zeit / Datum von Dateien AH=57h
AL=0 Ermitteln
AL=1 Einstellen
BX=Handle
CX=Uhrzeit (wenn AL=1)
DX=Datum (wenn AL=1)
CF=Fehler
AX=Fehlercode (bei gesetztem Carry)
CX=Zeit (wenn AL=0)
DX=Datum (wenn AL=0)
2.0 Ermittelt Datum und Zeit einer Datei oder setzt sie.
58h 00h / 01h / 02h / 03h Speicher - Zuordnungs - Strategien AH=58h
AL=0 aktuelle Logik ermitteln
AL=1 Logik festlegen
AL=2 Prüfen, ob UMBs eingebunden werden
AL=3 UMB - Einbindung festlegen
BX=Logik (AL=0)
BX=0 oder 1 (AL=3)
CF=Fehler
AX=Fehlercode (bei gesetztem Carry)
AX=Logik (AL=0)
AX=0 oder 1 (AL=2)
2.0 Ermittelt und verändert die Speicher - Zuordnungs - Strategien, welche DOS-Funktion 48h verwendet. Siehe dazu Tabelle Logik.
59h - Erweiterten Fehlercode holen AH=59h
BH=0
BH=0
AX=Erweiterter Fehlercode des letzten Fehlers
BH=Fehlerklasse
BL=vorgeschlagene Reaktion
CH=Fehlerposition
3.0 Nach der Rückkehr sind die Register CL, DX, SI, DI, DS, ES zerstört.
5Ah - Temporäre Datei anlegen AH=5Ah
CX=Attribut
DS:DX=Zeiger auf einen Puffer
CF=Fehler
AX=Fehlercode (bei gesetztem Carry)
3.0 Erzeugt eine der Bezeichnung nach eindeutige Datei mit rein zufälligem Namen. Die Datei wird nur angelegt, nicht geöffnet. Der übergebene Puffer, der den Dateinamen und Suchweg aufnimmt, sollte ausreichend dimensioniert sein. Wird ein Suchweg mit übergeben, wird die Datei in dem entsprechenden Verzeichnis angelegt, sonst im Stammverzeichnis.
5Bh - Neue Datei erstellen AH=5Bh
CX=Attribut
DS:DX=Zeiger auf Dateinamen (ASCIIZ)
CF=Fehler
AX=Handle oder Fehlercode
3.0 Erzeugt wie Funktion 3Ch eine neue Datei. Eventuell bestehende Dateien werden jedoch nicht gelöscht.
5Ch 00h Dateizugriff sperren AH=5Ch
AL=00h
BX=Handle
CX=Höherwertiger Teil des Offsets, der zu sperrenden Dateibereich angibt
DX=Niederwertiger Teil des Offsets, der zu sperrenden Dateibereich angibt
SI=Höherwertiger Teil der Länge des zu sperrenden Dateibereichs
DI=Niederwertiger Teil der Länge des zu sperrenden Dateibereichs
CF=Fehler
AX=Fehlercode (bei gesetztem Carry)
3.0 Sollte nur verwendet werden, wenn Datei in Modus geöffnet wurde, der entweder Lesezugriffe oder gar nichts verbietet.
5Ch 01h Dateizugriff freigeben AH=5Ch
AL=01h
BX=Handle
CX=Höherwertiger Teil des Offsets, der freizugebenden Dateibereich angibt
DX=Niederwertiger Teil des Offsets, der freizugebenden Dateibereich angibt
SI=Höherwertiger Teil der Länge des freizugebenden Dateibereichs
DI=Niederwertiger Teil der Länge des freizugebenden Dateibereichs
CF=Fehler
AX=Fehlercode (bei gesetztem Carry)
3.0 Der Dateibereich muß dem mit Funktion 5Ch, Unterfunktion 00h, gesperrten übereinstimmen.
5Dh 0Ah Erweiterten Fehlercode setzen AH=5Dh
AL=0Ah
SI=Zeigeroffset auf Error - Struktur
SS=Zeigersegment auf Error - Struktur
- 5.0 k.A.
5Eh 00h Maschinen - Namen ermitteln AH=5Eh
AL=00h
DX=Offset des zeigers, der 16 - Byte - Buffer angibt
DS=Segment des Zeigers, der 16 - Byte - Buffer angibt
CF=Fehler
AX=Fehlercode (bei gesetztem Carry)
CH=Gültigkeit (0: ungültiges Netzwerk - Gerät, 1: gültig)
CL=Netbios-Nr. (local)
DX=Offset des Zeigers, der 64 - Byte - Buffer angibt
DS=Segment des Zeigers, der 64 - Byte - Buffer angibt
Buffer=Netzwerk - Bezeichnung
3.1 k.A.
5Eh 02h Drucker - Zeichenkette setzen AH=5Eh
AL=02h
BX=Index in Zuweisungsliste
CH=Länge der Drucker - Zeichenkette
DX=Offset des Zeigers, der Initialisierungs - Zeichenkette angibt
DS=Segment des Zeigers, der Initialisierungs - Zeichenkette angibt
Zeichenkette=Drucker - Zeichenkette
CF=Fehler
AX=Fehlercode (bei gesetztem Carry)
3.1 Druckerinitialisierung kann nicht länger als 64 Bytes sein.
5Eh 03h Drucker - Zeichenkette lesen AH=5Eh
AL=03h
BX=Index der Zuweisungsliste
DI=Offset des Zeigers, der 64 - Byte - Buffer angibt
ES=Segment des Zeigers, der 64 - Byte - Buffer angibt
CF=Fehler
AX=Fehlercode (bei gesetztem Carry)
CX=Länge der Drucker - Zeichenkette
Buffer=Initialisierungs - Zeichenkette
3.1 k.A.
5Fh 02h Lies Eintrag aus der Zuweisungsliste AH=5Fh
AL=02h
BX=Index der Zuweisungsliste
SI=Offset des Zeigers, der 16 - Byte - Buffer für Local - Namen angibt
DS=Segment des Zeigers, der 16 - Byte - Buffer für Local - Namen angibt
DI=Offset des Zeigers, der 128 - Byte - Buffer für Remote - Namen angibt
ES=Segment des Zeigers, der 128 - Byte - Buffer für Remote - Namen angibt
CF=Fehler
AX=Fehlercode (bei gesetztem Carry)
BH=Status (0: gültiges Netzwerk - Device, 1: ungültiges Gerät)
BL=Code (03: Drucker - Device, 04: Laufwerks - Device)
16 - Byte - Buffer=Local - Name (ASCIIZ)
128 - Byte - Buffer=Remote - Name (ASCIIZ)
3.1 Netzwerk muß aktiv sein. DH, DL, BP sind nach der Rückkehr zerstört.IBM gibt für den 16-Byte-Buffer eine 128-Byte-Größe an.
5Fh 03h Füge Eintrag in die Zuweisungsliste ein AH=5Fh
AL=03h
BL=Code (03: Drucker - Device, 04: Laufwerks - Device)
CX=Benutzerwert (sollte 0 sein)
SI=Offset des Zeigers, der 16 - Byte - Zeichenkette mit Source - Gerät - Namen angibt
DS=Segment des Zeigers, der 16 - Byte - Zeichenkette mit Source - Gerät - Namen angibt
DI=Offset des Zeigers, der 128 - Byte - Zeichenkette mit Remote - Gerät - Namen angibt
ES=Segment des Zeigers, der 128 - Byte - Zeichenkette mit Remote - Gerät - Namen angibt.
CF=Fehler
AX=Fehlercode (bei gesetztem Carry)
3.1 Bei BL=03 muß der lokale Namensbuffer PRN, LPT1, LPT2 oder LPT3 sein. Bei BL=04 muß der lokale Namensbuffer der Laufwerksbuchstabe gefolgt von einem Doppelpunkt oder einen Nullstring sein.
Zeichenketten sollten im ASCIIZ-Format vorliegen.
5Fh 04h Lösche Eintrag aus der Zuweisungsliste AH=5Fh
AL=04h
SI=Offset des Zeigers, der 16 - Byte - Zeichenkette mit Source - Gerät - Namen angibt
DS=Segment des Zeigers, der 16 - Byte - Zeichenkette mit Source - Gerät - Namen angibt
CF=Fehler
AX=Fehlercode (bei gesetztem Carry)
3.1 Zeichenkette sollte im ASCIIZ-Format vorliegen.
60h - Dateinamen erweitern AH=60h
DS:SI=Zeiger auf Dateinamen (ASCIIZ)
ES:DI=Zeiger auf einen Puffer
CF=Fehler
AX=Fehlercode (bei gesetztem Carry)
3.0 Erweitert einen Dateinamen zu einem vollständigen Pfadnamen und verwendet für die Erweiterung das aktuelle Verzeichnis.
62h - Aktiven PSP ermitteln AH=62h BX=Segmentadresse des PSP 3.0 wie Funktion 51h.
65h 01h Erweiterte landesspezifische Information ermitteln AH=65h
AL=01h
BX=ID der Codeseite
CX=Puffergröße für Länderinfo (mind. 5)
DX=Ländercode
DI=Zeigeroffset auf Länderinfo - Tabelle
ES=Zeigersegment auf Länderinfo - Tabelle
CF=Fehler
AX=Fehlercode (bei gesetztem Carry)
Tabelle=Landes - spezifische Informationen (Einzelbyte, von Extcountryinfo - Struktur in DOS 5.0 gefolgt)
3.3 k.A.
65h 02h Großbuchstabentabelle holen AH=65h
AL=02h
BX=ID der Codeseite
CH=5
DX=Ländercode
DI=Zeigeroffset auf Großbuchstaben - Tabelle
ES=Zeigersegment auf Großbuchstaben - Tabelle
CF=Fehler
AX=Fehlercode (bei gesetztem Carry)
Tabelle=Zeiger auf Großbuchstaben - Puffer (zeigt auf den Puffer, in dem DOS den 8 - Bit - Bezeichner (02h) der Großbuchstaben - Tabelle und die 32 - Bit - Adresse (segment:offset) der Tabelle plaziert. Der Puffer muß mindestens fünf Byte lang sein.)
3.3 k.A.
65h 04h Dateinamen - Großbuchstaben - Tabelle holen AH=65h
AL=04h
BX=ID der Codeseite
CL=5
DX=Ländercode
ES:DI=FAR-Zeiger auf Länderinfo - Tabelle
CF=Fehler
AX=Fehlercode (bei gesetztem Carry)
Tabelle=Zeiger auf Dateinamen - Großbuchstaben - Puffer (zeigt auf Puffer, in dem DOS den 8 - Bit - Bezeichner (04h) der Dateinamen - Großbuchstaben - Tabelle und die 32 - Bit - Adresse (segment:offset) der Tabelle plaziert. Der Puffer muß mindestens fünf Byte lang sein.)
3.3 k.A.
65h 05h Dateinamen - Zeichentabelle holen AH=65h
AL=05h
BX=ID der Codeseite
CH=5
DX=Ländercode
ES:DI=Zeiger auf Länderinfo - Tabelle
CF=Fehler
AX=Fehlercode (bei gesetztem Carry)
Tabelle=Zeiger auf Dateinamen - Zeichenpuffer (zeigt auf den Puffer, in dem DOS den 8 - Bit - Bezeichnet (05h) der Dateinamen - Zeichentabelle und die 32 - Bit - Adresse (segment:offset) der Tabelle plaziert. Der Puffer muß mindestens fünf Byte lang sein.
3.3 k.A.
65h 06h Collations - Sequenz - Tabelle holen AH=65h
AL=06h
BX=ID der Codeseite
CH=5
DX=Ländercode
ES:DI=Zeiger auf Länderinfo - Tabelle
CF=Fehler
AX=Fehlercode (bei gesetztem Carry)
Tabelle=Zeiger auf Collations - Sequenz - Tabelle (zeigt auf den Puffer, in dem DOS den 8 - Bit - Bezeichner (06h) der Collations - Sequenz - Tabelle und die 32 - Bit - Adresse (segment:offset) der Tabelle plaziert. Der Puffer muß mindestens fünf Byte lang sein.
3.3 k.A.
65h 07h Doppel - Byte - Zeichensatz (DBCS) holen AH=65h
AL=07h
BX=ID der Codeseite
CH=5
DX=Ländercode
ES:DI=Zeiger auf Länderinfo - Tabelle
CF=Fehler
AX=Fehlercode (bei gesetztem Carry)
Tabelle=Zeiger auf DBCS-Puffer (zeigt auf den Puffer, in dem DOS den 8 - Bit - Bezeichner (07h) des DBCS - Wertes und die 32 - Bit - Adresse (segment:offset) der Tabelle plaziert. Der Puffer muß mindestens fünf Byte lang sein.
3.3 k.A.
65h 20h Zeichen umwandeln AH=65h
AL=20h
DL=Zeichen
CF=Fehler
AX=Fehlercode (bei gesetztem Carry)
DL=Großbuchstabe
5.0 k.A.
65h 21h STRING umwandeln AH=65h
AL=21h
DS:DX=Zeiger auf String
String=Kleinbuchstabe
CF=Fehler
AX=Fehlercode (bei gesetztem Carry)
String=Großbuchstabe
5.0 k.A.
65h 22h ASCIIZ - String umwandeln AH=65h
AL=22h
DS:DX=Zeiger auf String
String=ASCIIZ
CF=Fehler
AX=Fehlercode (bei gesetztem Carry)
String=Großbuchstaben
5.0 k.A.
67h - Maximale Handle - Zahl festlegen AH=67h
BX=neue Handle-Zahl
CF=Fehler
AX=Fehlercode (bei gesetztem Carry)
3.3 Bietet die Möglichkeit, die Größe des Job File Table von standardmäßig 20 auf maximal 255 geöffnete Dateien zu erweitern.Es wird Funktion 48h zum Allokieren von Speicherplatz verwendet. Das Programm darf deshalb nicht den geamten Speicher belegen, was standardmäßig so ist.
68h - Datei aktualisieren AH=68h
BX=Handle
CF=Fehler
AX=Fehlercode (bei gesetztem Carry)
3.3 Aktualisiert die über Handle angegebene Datei auf dem Datenträger. D.h., die Puffer werden geleert, die FAT aktualisiert sowie Datum/Zeit und Dateilänge gesetzt.
6Ch - Erweiteres Öffnen 7 Erzeugen AH=6Ch
BX=Modus
CH=0
CL=Attribut-Byte (00h: normal;01h: readonly; 02h: hidden; 03h: system; 04h: archiv)
DX=Aktion (01h: Neue Datei erzeugen; 10h Datei öffnen; 20h: Datei abschneiden)
DS:SI=FAR-Zeiger auf Pfadname
CF=Fehler
AX=Fehlercode (bei gesetzem Carry)
5.0 Benötigt CREATE-Rechte in einem Netz. Modus ist einer der folgenden:
0000h: readonly
0001h: writeonly
0002h: read/write
0010h: deny read/write
0020h: deny write
0030h: deny read
040h: deny none
0080h: keine Vererbung
2000h: kein Handler für kritische Fehler
4000h: Schreibt die Datei



Fehlercodes

Code Bedeutung
01h ungültiger Funktionscode
02h Datei nicht gefunden
03h Pfad nicht gefunden
04h zu viele offene Dateien
05h Zugriff verweigert
06h ungültiges Handle
07h Arena zerstört
08h nicht genug Speicherplatz
09h ungültiger Block
0Ah ungültige Umgebung
0Bh ungültiges Format
0Ch ungültiger Zugriffscode
0Dh ungültige Daten
0Eh reserviert
0Fh ungültiges Laufwerk
10h Versuch, das aktuelle Verzeichnis zu entfernen
11h nicht dasselbe Gerät
12h keine Datei mehr
13h Diskette ist schreibgeschützt
14h Disketten-Unit ist fehlerhaft
15h Laufwerk nicht bereit
16h ungültiger Befehl
17h CRC-Fehler
18h Länge der Request-Struktur falsch
19h Suchfehler
1Ah Keine DOS-Diskette
1Bh Sektor nicht gefunden
1Ch Papier aus
1Dh Schreibfehler
1Eh Lesefehler
1Fh Allgemeienr Fehler
20h Fehler bei gemeinsamen Zugriff
21h Sperr-Fehler
22h Falsche Diskette
23h FCB nicht zugänglich
24h Puffer für gemeinsamen Zugriff: Überlauf
25h Falsche Codeseite
26h Handle-EOF
27h Handle-Diskette voll
28h - 31h reserviert
32h Netzanfrage nicht unterstützt
33h entfernter Rechner nicht bereit
34h doppelter Name im Netz
35h Netzpfad nicht gefunden
36h Netz beschäftigt
37h Netztreiber existiert nicht mehr
38h BIOS-Befehlsgrenze ins Netz überschritten
39h Netzkartenfehler
3Ah Falsche Antwort vom Netz
3Bh unerwarteter Netzfehler
3Ch nicht kompatible Karte in fernem Computer
3Dh Druckerwarteschlange voll
3Eh Nicht genug Platz für Druckdatei
3Fh Druckdatei wurde gelöscht
40h Zugriff verweigert
41h Typ des Netztreibers nicht korrekt
42h Netzname nicht gefunden
43h Grenze der BIOS-Sitzung im Netz überschritten
44h temporäre Pause
45h Neztanfrage abgelehnt
46h Druck- oder Diskettenumlenkung angehalten
47h Netzanfrage nicht akzeptiert
48h Drucker oder Plattenumleitung angehalten
49h - 4Fh reserviert
50h Datei existiert schon
51h FCB doppelt
52h kann Verzeichniseintrag nicht erstellen
53h Interrupt 24h gescheitert
54h keine Strukturen mehr
55h schon zugewiesen
56h ungültiges Passwort (unter DR DOS ab Version 5.0)
57h ungültiger Parameter
58h Netz-Schreibe-Fehler
59h Funktion vom Netz nicht unterstützt
5Ah nötige Systemkomponente nicht installiert

Je nach Funktion sind meist nur bestimmte Codes relevant.


Aufbau des Parameterblocks für Registerpaar ES:BX (Funktion 4Bh)

Offset Größe Bedeutung
00h 1 Wort Segmentadresse des Umgebungsblock
02h 1 DWort Zeiger auf Kommandozeile
06h 1 DWort Adresse des 1. FCB
0Ah 1 DWort Adresse des 2. FCB



LOADOVERLAY-Struktur

Offset Länge Name Inhalt
00h 1 Word loStartSegment Segment-Adresse, wo das Overlay zu laden ist
02h 1 Word loRelocationFactor Segment:Offset, wo das Overlay zu laden ist (normalerweise wie die Lade-Adresse, kann auf den höheren Teil eines Programms (nur Overlay) erhöht werden)



EXECSTATE-Struktur

Offset Länge Name Inhalt
00h 1 Word esReserved reserviert (muß 0 sein)
02h 1 Word esFlags Typ-Flags
04h 1 DWord esProgName Zeiger auf ASCIIZ-String (Programmname)
08h 1 Word esPSP PSP-Segment des neuen Programmes
0Ah 1 DWord esStartAddr CS:IP des neuen Programmbeginns
0Eh 1 DWord esProgSize Programmgröße inklusive PSP



Codierung des Attributs (Funktion 4Eh)

Bit Bedeutung
0 Read-Only-Dateien werden einbezogen
1 versteckte Dateien werden einbezogen
2 System-Dateien werden einbezogen
3 Volume-Label wird einbezogen
4 Unterverzeichnisse werden einbezogen
5 Archivierungs-Dateien werden einbezogen



Aufbau der DTA bei Funktionen 4Eh und 4Fh

Offset Größe Bedeutung
00h 21 Byte benutzt DOS
15h 1 Byte Dateiattribut
16h 1 Wort Zeit der Datei (codiert)
18h 1 Wort Datum der Datei (codiert)
1Ah 1 DWort Größe der Datei
1Eh   Dateiname (nullterminiert)



DOS-Datenbereich (Funktion 52h)

Offset Größe Bedeutung
-4 1 DWort Zeiger auf den ersten MCB
0 1 DWort Zeiger auf den ersten Drive - Parameter - Block
04h 1 DWort Zeiger auf die System File Table
08h 1 DWort Zeiger auf den Uhrentreiber
0Ch 1 DWort Zeiger auf den CON-Treiber
10h 1 Wort maximale Blockgröße für den Blocktreiber
12h 1 DWort Zeiger auf den ersten Sektorpuffer
16h 1 DWort Zeiger auf die Current Directory Structure
1Ah 1 DWort Zeiger auf FCB-Tabelle
1Eh 1 Wort Anzahl der geschützten FCBs
20h 1 Byte Anzahl der Geräte, die über einen Blocktreiber gesteuert werden
21h 1 Byte Anzahl logischer Laufwerke (LastDrive)
22h   Kopf des NUL-Treibers
34h 1 Byte Anzahl der Laufwerke, die über JOIN definiert wurden
35h 1 Wort Offsetadresse der Setver-Tabelle
37h 1 DWort Einsprungadresse eines Installable File Systems (IFS)
3Bh 1 DWort Adresse des ersten IFS-Treibers
3Fh 1 Wort Anzahl Sektorenpuffer (Buffers)
41h 1 Wort Anzahl der Look Ahead Buffer
43h 1 Wort Bezeichnung des Bootlaufwerks (1=A,...)
45h 1 Wort Größe des erweiterten Speichers

Gilt ab Offset 10h erst ab DOS-Version 5.0, der Datenbereich früherer DOS-Versionen ist anders aufgebaut.


Codierung des Datums (Funktion 57h)

Bit Bedeutung
0 - 4 Tag
5 - 8 Monat
9 - 15 Jahr minus 1980



Codierung der Zeit (Funktion 57h)

Bit Bedeutung
0 - 4 Sekunden geteilt durch 2
5 - 10 Minuten
11 - 15 Stunden



Logik (Funktion 58h)

Code Bedeutung
0 First Fit - DOS sucht von unten nach oben den ersten passenden Speicherblock
1 Best Fit - DOS such nach dem besten passenden Block.
2 Last Fit - DOS sucht von oben nach unten den ersten passenden Speicherblock



COUNTRYINFO-Struktur

Offset Länge Name Inhalt USA-Wert
00h 1 Word ciDateFormat 0=U.S. (mm/dd/yy)
1=Europe (dd/mm/yy)
2=Japan (yy/mm/dd)
0
02h 5 Byte ciCurrency ASCIIZ-String $
07h 2 Byte ciThousands ASCIIZ-String ,
09h 2 Byte ciDecimal ASCIIZ-String .
0Bh 2 Byte ciDateSep ASCIIZ-String /
0Dh 2 Byte ciTimeSep ASCIIZ-String :
0Fh 1 Byte ciBitField 0=Währungssymbol vor Betrag, kein Leerzeichen
1=Währungssymbol nach Betrag, kein Leerzeichen
2=Währungssymbol vor Betrag, ein Leerzeichen
3=Währungssymbol nach Betrag, ein Leerzeichen
4=Währungssymbol ersetzt Dezimaltrennzeichen (laut IBM)
0
10h 1 Byte ciCurrencyPlaces Binärwert 2
11h 1 Byte ciTimeFormat 0=12 Stunden
1=24 Stunden
1
12h 1 DWord ciCaseMap Die Segment:Offset - Adresse der FAR-Prozedur, die Klein-/Groß- Buchstaben von 80h auf FFh abbildet NA
16h 2 Byte ciDataSep ASCIIZ-String NA
18h 10 Byte ciReserved   NA



CODEPAGE-Struktur

Offset Länge Name Inhalt
00h 1 Word cpLength Muß 2 sein
02h 1 Word cpId Codeseiten-ID:
Codeseiten-ID kann eine der folgenden sein: Wert Bedeutung
437 U.S.
850 Mehrsprachig (Roman. 1)
852 Slawisch (Roman. 2)
860 Portogiesisch
863 Kanada-Französisch
865 Nordisch



Länder-Codes

Code Land Tastencode
001 USA US
002 Kanada (Französisch) CF
003 Lateinamerika LA
031 Niederlande NL
032 Belgien BE
033 Frankreich FR
034 Spanien SP
036 Ungarn HU
038 Jugoslavien (nur DOS 5.0) YU
039 Italien IT
041 Schweiz (Französisch) SF
041 Schweiz (Deutsch) SG
042 Tschechoslowakei (Tsch.) (nur DOS 5.0) CZ
042 Tschechoslowakei (Slow.) (nur DOS 5.0) SL
044 Großbritannien UK
045 Dänemark DK
046 Schweden SV
047 Norwegen NO
048 Polen (nur DOS 5.0) PL
049 Deutschland GR
055 Brasilien (nur DOS 5.0) BR
061 Internationales Englisch -
081 Japan (nur DOS 4.0) JA
082 Korea (nur DOS 4.0) KO
086 Volksrepublik China (nur DOS 4.0) CH
088 Taiwan (nur DOS 4.0) TN
351 Portugal PO
358 Finnland SU
785 Arabische Länder -
972 Israel (Hebräisch) -



Error-Struktur

Offset Länge Name Inhalt
00h 1 Word errAX AX-Register (einer dieser Werte)
02h 1 Word errBX BX-Register (einer dieser Werte)
04h 1 Word errCX CX-Register (einer dieser Werte)
06h 1 Word errDX DX-Register
08h 1 Word errSI SI-Register
0Ah 1 Word errDI DI-Register
0Ch 1 Word errDS DS-Register
0Eh 1 Word errES ES-Register
10h 1 Word errReserved  
12h 1 Word errUID Computer, wo der Fehler auftrat (0=lokaler Rechner)
14h 1 Word errPID Programm, in dem der Fehler auftrat (0=lokales Programm)



Fehlerklasse

Wert in BH Beschreibung der Klasse Beispiel
01h Ressource aus Speicher oder Leistung
02h Temporäre Situation Gesperrte Region oder Datei
03h Berechtigungsproblem Anwender ohne Rechte
04h Interner Fehler in System-Software -
05h Hardware-Fehler -
06h System-Software-Fehler Keine Konfigurationsdatei
07h Programmfehler -
08h Element nicht gefunden Datei nicht zu finden
09h Ungültiges Format/Typ Datei im falschen Format
0Ah Zugriffskonflikt bei Element Zwei Konfliktzugriffe auf Datei
0Bh Medien-Problem Falsche Diskette, Fehler auf Diskette
0Ch Existiert schon Deklarierter Maschinenname, der schon existiert
0Dh Unbekannt -



Lösungsvorschlag

Wert in BL Beschreibung des Lösungsvorschlags
01h Neuer Versuch, dann Anwender anfragen
02h Neuer Versuch nach kurzer Pause
03h Wenn Anwender Element eingab, Neueingabe
04h Dateien schließen, Abbruch
05h Sofort abbrechen, Dateien nicht schließen
06h Keine Aktion, Fehler diente nur zur Information
07h Vom Anwender Aktion verlangen (z.B. Diskette wechseln)



Position

Wert in CH Vermutliche Fehlerposition Beispiel
01h In DOS unbekannt -
02h Gerät mit wahlfreiem Zugriff Diskettenlaufwerk
03h Netz Netz-Software, -Hardware
04h Speicher -
05h Speicher RAM



Die Funktionen können mit dem Turbo-Pascal-eigenen Assembler aufgerufen werden. Ein Anwendungsbeispiel könnte so aussehen:


ASM

  mov {...}

  {Register entsprechend der Spalte "Eingabe" belegen...}

  int $21;

  mov {...}

  {Register auslesen gemäß der Spalte "Ausgabe"...}

END;

Generell wird im Register AH die Funktionsnummer übergeben.

Alle Angaben ohne Gewähr.

Achtung: bitte Hinweise zur Aktualitšt der Daten beachten! Copyright