| Funktion |
Unter-
funktion |
Bedeutung |
Eingabe |
Ausgabe |
DOS - Implemen-
tierung |
Anmerkungen |
| 00h |
- |
Programm beenden |
AH=00h
CS=Segmentadresse des PSP |
- |
1.0 |
Beendet das aktive Programm, gibt dessen Speicher frei, setzt die
Interruptvektoren 22h, 23h und 24h zurück und schließt alle vom Programm geöffneten
Dateien. |
| 01h |
- |
Zeicheneingabe mit Echo |
AH=01h |
AL=ASCII - Code |
1.0 |
Liest ein Zeichen von der Standardeingabe (Tastatur) und gibt es auf der
Standardausgabe (Bildschirm) aus. Bei erweiterten Tasten (z.B. Funktionstasten) liefert die
Funktion 0, der darauffolgende Aufruf den Scancode der Taste. |
| 02h |
- |
Zeichenausgabe |
AH=02h
DL=ASCII - Code |
- |
1.0 |
Gibt ein Zeichen auf der Standardausgabe (Bildschirm) aus. |
| 03h |
- |
Zeichen von der seriellen Schnittstelle lesen |
AH=03h |
AL=ASCII - Code |
1.0 |
Liest ein Zeichen von der seriellen Schnittstelle AUX (normalerweise COM1). Ist
kein Zeichen verfügbar, wartet die Funktion. |
| 04h |
- |
Zeichen auf serieller Schnittstelle ausgeben |
AH=04h
DL=ASCII - Code |
- |
1.0 |
Schreibt ein Zeichen auf die serielle Schnittstelle AUX (normalerweise
COM1). |
| 05h |
- |
Ausgabe an Drucker |
AH=05h
DL=ASCII - Code |
- |
1.0 |
Gibt ein Zeichen auf dem Gerät PRN aus. Sollte das Gerät nicht bereit
sein, wartet der Interrupt bzw. ein Interrupt 24h wird ausgelöst. |
| 06h |
- |
Direkte Zeicheneingabe und -ausgabe |
AH=06h
DL=0..254: dieses Zeichen ausgeben
DL=255: Zeichen einlesen |
ZF=1: kein Zeichen verfügbar
ZF=0: AL=ASCII - Code |
1.0 |
Dient zur Ein- und Ausgabe von Zeichen über die Standardeingabe / -ausgabe.
Spezielle Tasten wie ^C und ^P (also mit Strg) werden nicht als solche erkannt. |
| 07h |
- |
Zeicheneingabe ohne Echo |
AH=07h |
AL=ASCII - Code |
1.0 |
Liest ein Zeichen von der Standardeingabe, ohne es auf der Standardausgabe
auszugeben. Spezielle Steuercodes werden nicht also solche interpretiert. |
| 08h |
- |
Zeichen von der Tastatur lesen |
AH=08h |
AL=ASCII - Code |
1.0 |
Liest ein Zeichen von der Standardeingabe, ohne es auf der Standardausgabe
auszugeben. Spezielle Steuercodes werden als solche erkannt. |
| 09h |
- |
Ausgabe einer Zeichenkette |
AH=09h
DS=Segmentadresse der Zeichenkette
DX=Offsetadresse der Zeichenkette |
- |
1.0 |
Gbit einen String, der mit dem Zeichen $ (Dollar) enden muß, über die
Standardausgabe aus. Spezielle Steuercodes werden als solche erkannt. |
| 0Ah |
- |
Gepufferte Tastatureingabe |
AH=0Ah
AL=max. Stringlänge
DS=Segmentadresse des Puffers
DX=Offsetadresse des Puffers |
- |
1.0 |
Bietet die Möglichkeit der Texteingabe über die Standardeingabe.
Spezielle Steuercodes werdem als solche erkannt.
Der Puffer muß zwei Zeichen größer sein als die maximale Zeichenzahl. Vor dem
Aufruf trägt man in das erste Byte die maximale Anzahl Zeichen ein, die eingegeben werden
dürfen. An das zweite Byte schreibt DOS die Anzahl der eingegebenen Zeichen. Die Eingabe wird
mit Enter abgeschlossen. |
| 0Bh |
- |
Eingabestatus prüfen |
AH=0Bh |
AL=0: kein Zeichen verfügbar
AL=255: Zeichen verfügbar |
1.0 |
- |
| 0Ch |
- |
Eingabepuffer leeren, dann Eingabe |
AH=0Ch
AL=Nummer der aufzurufenden Funktion: 01h, 06h, 07h, 08h, 0Ah
weitere Register je nach Funktion |
je nach aufgerufener Funktion |
1.0 |
Löscht den Eingabepuffer und ruft anschließend die in AL angegebene
DOS-Funktion auf. Übergibt man in AL den Wert null (0), so kehrt die Funktion sofort
zurück. |
| 0Dh |
- |
Plattenpuffer leeren (Laufwerks - Reset) |
AH=0Dh |
- |
1.0 |
Weist DOS an, die Plattenpuffer (Buffers) zu leeren. |
| 0Eh |
- |
Standardlaufwerk setzen |
AH=0Eh
DL=Laufwerksnummer |
AL=Nummer des höchsten Laufwerks plus 1 |
1.0 |
Setzt das angegebene Laufwerk (A=0, B=1,...) als Standardlaufwerk für weitere
Operationen. |
| 0Fh - 018h |
FCB - Funktionen. Diese Funktonen dienen der Dateiarbeit mit FCBs. Da
diese Funktionen aber in der Regel überholt sind, werden sie hier nicht mehr
aufgeführt. |
| 19h |
- |
Standardlaufwerk ermitteln |
AH=19h |
AL=aktuelles Standardlaufwerk |
1.0 |
A=0, B=1,... |
| 1Ah |
- |
DTA - Adresse setzen |
AH=1Ah
DS=Segmentadresse der DTA
DX=Offsetadresse der DTA |
- |
1.0 |
Verändert die DTA-Adresse, die standardmäßg nach dem Programmstart
auf Offset 80h des PSP steht. Die DTA (Disk Transfer Area) kommt bei FCB-orientierten
Dateioperationen sowie bei den DOS-Funktionen 4Eh und 4Fh zum Einsatz. |
| 1Bh |
- |
Informationen über aktuelles Laufwerk einholen |
AH=1Bh |
AL=Anzahl Sektoren pro Cluster
DS:BX=FAR - Zeiger auf das Media - Descriptor - Byte
CX=Anzahl Bytes pro Cluster
DX=Anzahl Cluster |
1.0 |
- |
| 1Ch |
- |
Informationen über ein beliebiges Laufwerk einholen |
AH=1Ch
DL=Laufwerksnummer |
AL=Anzahl Sektoren pro Cluster
DS:BX=FAR - Zeiger auf das Media - Descriptor - Byte
CX=Anzahl Bytes pro Cluster
DX=Anzahl Cluster |
1.0 |
0=aktuelles Laufwerk, A=1, B=2, ... |
| 21h - 24h |
FCB - Funktionen. Diese Funktonen dienen der Dateiarbeit mit FCBs. Da
diese Funktionen aber in der Regel überholt sind, werden sie hier nicht mehr
aufgeführt. |
| 25h |
- |
Interrupt - Vektor setzen |
AH=25h
AL=Nummer des Interrupts
DS=Segmentadresse der neuen Interruptroutine
DX=Offsetadresse der neuen Interruptroutine |
- |
1.0 |
Setzt für einen Interrupt eine neue Behandlungsroutine ein. |
| 26h |
- |
Neuen PSP erstellen |
AH=26h
DX=Segmentadresse |
- |
1.0 |
Erstellt eine Kopie des aktiven PSPs und trägt dort alle relevanten Werte
ein. |
| 27h - 29h |
FCB - Funktionen. Diese Funktonen dienen der Dateiarbeit mit FCBs. Da
diese Funktionen aber in der Regel überholt sind, werden sie hier nicht mehr
aufgeführt. |
| 2Ah |
- |
Datum ermitteln |
AH=2Ah |
AL=Wochentag (0=Sonntag, 1=Montag...)
DL=Monatstag
DH=Monat
CX=Jahr |
1.0 |
- |
| 2Bh |
- |
Datum ändern |
AH=2Bh
DL=Monatstag
DH=Monat
CX=Jahr |
AL=0: neues Datum eingestellt
AL=255: ungültiges Datum |
1.0 |
- |
| 2Ch |
- |
Systemzeit ermitteln |
AH=2Ch |
CH=Stunde
CL=Minute
DH=Sekunde
DL=100stel Sekunde |
1.0 |
- |
| 2Dh |
- |
Systemzeit ändern |
AH=2Dh
CH=Stunde
CL=Minute
DH=Sekunde
DL=100stel Sekunde |
AL=0: neue Zeit eingestellt
AL=255: ungültige Uhrzeit |
1.0 |
Stellt die Uhrzeit. Ab DOS-Version 3.3 wird ebenfalls die Echtzeituhr
gestellt. |
| 2Eh |
- |
Verify |
AH=2Eh
AL=0: Verify aus
AL=1: Verify an |
- |
1.0 |
Ist Verify eingeschaltet, werden geschriebene Sektoren noch einmal eingelesen, um
zu überprüfen, ob alle Sektoren beschreibbar waren. |
| 2Fh |
- |
DTA-Adresse ermitteln |
AH=2Fh |
ES=Segmentadresse der DTA
BX=Offsetadresse der DTA |
2.0 |
Ermittelt die gegenwärtige DTA-Adresse |
| 30h |
- |
DOS-Version ermitteln |
AH=30h |
AH=Nebenversionsnummer
AL=Hauptversionsnummer
BX=OEM-Nummer oder Versions-Flag
BL=High-Byte der 24-Bit- Seriennummer
CX=Low-Byte der 24-Bit- Seriennummer |
2.0 |
Ermittelt die installierte DOS-Version. "Setver" kann die die Werte
verfälschen. DR-DOS bis Version 6.0 meldet über diese Funktion die Versionsnummer 3.31,
MS-DOS 1.0 die Nummer 0.
OEM- und Seriennummer müssen nicht vorhanden sein. |
| 31h |
- |
Programm resident beenden |
AH=31h
AL=Exitcode
DX=Anzahl der Paragraphen, die resident im Speicher bleiben. |
- |
2.0 |
Die Interruptvektoren 22h, 23h und 24h werden zurückgesetzt. Offene Dateien
werden nicht geschlossen. Der belegte Speicherblock wird entsprechend der Größe in DX
angepaßt. |
| 32h |
- |
DPB ermitteln |
AH=32h
DL=Laufwerksnummer (0=aktuell, 1=A, 2=B,...) |
AL=Status (0:erfolgreich, FFh:Fehler)
BX=Zeigeroffset auf DPB-Struktur
DS=Zeigersegment auf DPB-Struktur |
k.A. |
- |
| 33h |
00h |
CTRL+C - Flag lesen |
AH=33h
AL=00h |
DL=Break-Flag (0: aus, 1: an) |
k.A. |
- |
| 33h |
01h |
CTRL+C - Flag setzen |
AH=33h
AL=01h
DL=Break-Flag (0: aus, 1: an) |
- |
k.A. |
- |
| 33h |
05h |
Bootlaufwerk ermitteln |
AH=33h
AL=05h |
DL=Laufwerksbuchstabe |
4.0 |
A=1, B=2,... |
| 33h |
06h |
MS-DOS Version ermitteln |
AH=33h
AL=06h |
BX=Versionsnummer
DX=
Bits 0..2: Revisionsnummer
Bit 11: ROM-Version
Bit 12: DOS in HMA |
MS-DOS 5.0 |
liefert die wahre DOS-Version, "Setver" ist wirkungslos. |
| 34h |
- |
InDOS-Flag ermitteln |
AH=34h |
ES=Segmentadresse des Flags
BX=Offsetadresse des Flags |
2.0 |
Wird in Verbindung mit speicherresidenten Programmen benötigt. Ermittelt die
Adresse eines Flags, das auf 1 gesetzt wird, wenn ein DOS-Interrupt aktiv ist (andernfalls
0). |
| 35h |
- |
Interrupt - Vektor ermitteln |
AH=35h
AL=Interruptnummer |
ES=Segmentadresse der Interrupt - Routine
BX=Offsetadresse der Interrupt - Routine |
2.0 |
Ermittelt die aktuelle Adresse eines Interrupt - Vektors. Wird in der Regel kurz
vor Funktion 25h aufgerufen, um den alten Interrupt - Vektor zu sichern. |
| 36h |
- |
Freien Speicherplatz ermitteln |
AH=36h
DL=Laufwerksnummer |
AX=Sektoren pro Cluster (0FFFFh bei Fehler)
BX=Anzahl der freien Cluster
CX=Anzahl der Bytes pro Sektor
DX=Anzahl aller Cluster |
2.0 |
A=1, B=2, ... |
| 38h |
00h |
Länderspezifische Daten lesen |
AH=38h
AL=Länder - Code oder FFh
BX=Länder -Code oder FFh
DX=Offset des Zeigers auf Countryinfo - Struktur
DS=Segment des Zeigers auf Countryinfo - Struktur |
CF=Fehler
AX=Fehlercode (bei gesetztem Carry)
BX=Länder - Code (bei CF gelöscht)
Buffer=Länderdaten oder Countryinfo - Struktur |
2.1 |
Ist der Länder - Code kleinergleich 254, ist AL=Länder - Code. Ist der
Länder - Code größer als 254, ist AL=0FFh und BX=Länder - Code. |
| 38h |
xxh |
Landesspezifische Daten setzen (xx=Länder - Code) |
AH=36h
AL=Länder - Code oder FFh
BX=Länder - Code, wenn AL=FFh
DX=FFFFh
DS=FFFFh |
CF=Fehler
AX=Fehlercode (bei gesetztem Carry) |
3.0 |
Ist der Länder - Code kleinergleich 254, ist AL=Länder - Code. Ist der
Länder - Code größer als 254, ist AL=0FFh und BX=Länder - Code. |
| 39h |
- |
Verzeichnis erstellen |
AH=39h
DS:DX=FAR-Zeiger auf den ASCIIZ - String |
CF=Fehler
AX=Fehlercode (3: Pfad nicht gefunden; 5: Zugriff verweigert) |
2.0 |
Der übergebene ASCIIZ-String (nullterminierte Zeichenkette) kann eine
komplette Pfad- sowie Laufwerksbezeichnung enthalten. Es kann nur eine Verzeichnisebene auf einmal
erstellt werden. |
| 3Ah |
- |
Verzeichnis löschen |
AH=3Ah
DS:DX=FAR-Zeiger auf ASCIIZ - String |
CF=Fehler
AX=Fehlercode (3: Pfad nicht gefunden; 5: Zugriff verweigert; 16: aktuelles Verzeichnis kann nicht
gelöscht werden) |
2.0 |
Löscht den angegebenen Verzeichnisnamen, der eine komplette Pfad- und
Laufwerksbezeichnung enthalten darf. |
| 3Bh |
- |
Verzeichnis wechseln |
AH=3Bh
DS:DX=FAR-Zeiger auf ASCIIZ - String |
CF=Fehler
AX=Fehlercode (3: Pfad nicht gefunden; 5: Zugriff verweigert) |
2.0 |
Der angegebene Verzeichnisnamen darf eine komplette Pfad- und Laufwerksbezeichnung
enthalten. |
| Wert |
Bedeutung |
| F0h |
3,5-Zoll-Diskette (80 Spuren, 18 Sektoren, 2 Seiten) oder (80 Spuren, 36 Sektoren, 2
Seiten) |
| F8h |
Festplatte oder RAM-Laufwerk |
| F9h |
3,5-Zoll-Diskette (80 Spuren, 9 Sektoren, 2 Seiten) oder 5,25-Zoll-Diskette (80 Spuren, 15
Sektoren, 2 Seiten) |
| FDh |
5,25-Zoll-Diskette (40 Spuren, 9 Sektoren, 2 Seiten) |
| Offset |
Länge |
Name |
Inhalt |
| 00h |
1 Byte |
dpbDrive |
Laufwerksnummer (0=A, 1=B,...) |
| 01h |
1 Byte |
dpbUnit |
Unitnummer des Treibers |
| 02h |
1 Word |
dpbSectorSize |
Sektorgröße in Byte |
| 04h |
1 Byte |
dpbClusterMask |
Sektoren pro Cluster minus 1 |
| 05h |
1 Byte |
dpbClusterShift |
Sektoren pro Cluster in Zweierpotenzen |
| 06h |
1 Word |
dpbFirstFAT |
Erster Sektor mit FAT |
| 08h |
1 Byte |
dpbFATCount |
Anzahl FAT's |
| 09h |
1 Word |
dpbRootEntries |
Anzahl Einträge im Stammverzeichnis |
| 0Bh |
1 Word |
dpbFirstSector |
Erster Sektor des ersten Clusters |
| 0Dh |
1 Word |
dpbMaxClusters |
Anzahl Cluster auf dem Laufwerk plus 1 |
| 0Fh |
1 Word |
dpbFATSize |
Anzahl Sektoren, welche die FAT belegt |
| 11h |
1 Word |
dpbDirSector |
Erster Sektor mit Verzeichnis |
| 13h |
1 DWord |
dpbDriverAddr |
Adresse des Gerätetreibers |
| 17h |
1 Byte |
dpbMedia |
Media-Descriptor |
| 18h |
1 Byte |
dpbFirstAccess |
Zugriff auf Laufwerk |
| 19h |
1 DWord |
dpbNextAccess |
Adresse des nächsten Parameterblocks |
| 1Dh |
1 Word |
dpbNextFree |
Letzter reservierter Cluster |
| 1Fh |
1 Word |
dpbFreeCnt |
Anzahl freier Cluster |
| 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.
Die Funktionen können mit dem Turbo-Pascal-eigenen Assembler
aufgerufen werden. Ein Anwendungsbeispiel könnte so aussehen:
Generell wird im Register AH die Funktionsnummer
übergeben.
Alle Angaben ohne Gewähr.