Die Funktionen des Interruptes 13h (Disketten- und Festplatten)
stellt die folgende Tabelle dar:
| Funktion |
Bedeutung |
Eingabe |
Ausgabe |
BIOS - Implementierung |
Anmerkungen |
| 00h |
Reset |
AH=00h
DL=0 oder 1 |
CF=Fehler
AH=Fehlercode (bei CF) |
PC, XT, AT, PS/2 |
ermöglicht einen Reset aller Diskettenlaufwerke (DL=0) oder des gesamten Systems (DL=1)
und setzt die Leseköpfe auf Spur 0. Die Funktion soll nach einer fehlerhaften Disketten- bzw.
Festplattenoperation aufgerufen werden. Eine Auflistung der Fehlercodes ist
unter dieser Tabelle zu finden. |
| 01h |
Status ermitteln |
AH=01h
DL=0 oder 1 |
CF=Fehler
AH=Fehlercode |
PC, XT, AT, PS/2 |
Mit dieser Funktion kann der Status der zuletzt ausgeführten Operation erneut ermittelt
werden. Eine Auflistung der Fehlercodes ist unter dieser Tabelle zu
finden. |
| 02h |
Lesen von Sektoren |
AH=02h
AL=Anzahl zu lesender Sektoren
CH=Spur
CL=erster Sektor
DH=Kopf (bei Disk: 0=oben, 1=unten)
DL=Laufwerksnummer
ES=Segmentadresse des Puffers
BX=Offsetadresse des Puffers |
CF=Fehler
AL=Anzahl gelesener Sektoren
AH=Fehlercode (bei CF=1) |
PC, XT, AT, PS/2 |
Ermöglicht das Lesen physikalischer Sektoren eines Laufwerkes. Für DL bezeichnet 0
das erste Diskettenlaufwerk (A), 1 das zweite (B). Sollen Festplatten angesprochen werden,
bezeichnet ein Wert von 80h die erste Festplatte, 81h die zweite usw.
Ist die Spurnummer bei Festplattenlaufwerken größer als 8 Bit, können Bit 6 und 7
von CL hinzugezogen werden. Die max. Sektorenanzahl darf bei Diskettenoperationen nur innerhalb der
angegebenen Spur (und Kopf) liegen. Bei Festplatten bis 128. Eine Auflistung der Fehlercodes ist unter dieser Tabelle zu finden. Der Rückgabewert in AL bezeichnet
den Sektor, der den Fehler verursacht hat. |
| 03h |
Schreiben von Sektoren |
AH=03h
AL=Anzahl zu schreibender Sektoren
CH=Spur
CL=erster Sektor
DH=Kopf (bei Disk: 0=oben, 1=unten)
DL=Laufwerksnummer
ES=Segmentadresse des Puffers
BX=Offsetadresse des Puffers |
CF=Fehler
AL=Anzahl geschriebener Sektoren
AH=Fehlercode (bei CF=1) |
PC, XT, AT, PS/2 |
Ermöglicht das Schreiben physikalischer Sektoren eines Laufwerkes. Für DL bezeichnet
0 das erste Diskettenlaufwerk (A), 1 das zweite (B). Sollen Festplatten angesprochen werden,
bezeichnet ein Wert von 80h die erste Festplatte, 81h die zweite usw.
Ist die Spurnummer bei Festplattenlaufwerken größer als 8 Bit, können Bit 6 und 7
von CL hinzugezogen werden. Die max. Sektorenanzahl darf bei Diskettenoperationen nur innerhalb der
angegebenen Spur (und Kopf) liegen. Bei Festplatten bis 128. Eine Auflistung der Fehlercodes ist unter dieser Tabelle zu finden. Der Rückgabewert in AL bezeichnet
den Sektor, der den Fehler verursacht hat. |
| 04h |
Prüfen von Sektoren |
AH=04h
AL=Anzahl zu prüfender Sektoren
CH=Spur
CL=erster Sektor
DH=Kopf
DL=Laufwerksnummer |
CF=Fehler
AL=Anzahl geprüfter Sektoren
AH=Fehlercode (bei CF=1) |
PC, XT, AT, PS/2 |
Ermöglicht das Prüfen physikalischer Sektoren eines Laufwerkes. Für DL
bezeichnet 0 das erste Diskettenlaufwerk (A), 1 das zweite (B). Sollen Festplatten angesprochen
werden, bezeichnet ein Wert von 80h die erste Festplatte, 81h die zweite usw.
Ist die Spurnummer bei Festplattenlaufwerken größer als 8 Bit, können Bit 6 und 7
von CL hinzugezogen werden. Die max. Sektorenanzahl darf bei Diskettenoperationen nur innerhalb der
angegebenen Spur (und Kopf) liegen. Bei Festplatten bis 128. Eine Auflistung der Fehlercodes ist unter dieser Tabelle zu finden. Der Rückgabewert in AL bezeichnet
den Sektor, der den Fehler verursacht hat. |
| 05h |
Spur formatieren |
AH=05h
AL=Anzahl Sektoren
CH=Spur
CL=erster Sektor
DH=Kopf
DL=Laufwerksnummer
ES=Segmentadresse des Formatpuffers
BX=Offsetadresse des Formatpuffers |
CF=Fehler
AH=Fehlercode (bei CF=1) |
PC, XT, AT, PS/2 |
Die Funktion formatiert die entsprechende Spur eines Laufwerks Der Formatpuffer muß
für jeden zu formatierenden Sektor einen Formatblock (s.u.)
beinhalten. Werden also 18 Sektoren pro Spur formatiert, sind 18 hintereinanderliegende Blöcke
erforderlich.
Hinweis: Bevor diese Funktion das erste Mal aufgerufen wird, soll einmalig Funktion 18h
aufgerufen werden.
Eine Auflistung der Fehlercodes ist unter dieser Tabelle zu finden. |
08h
(bei Festplatten) |
Festplatten - Format lesen |
AH=08h
DL=Laufwerksnummer (80h oder 81h) |
CF=Fehler
AH=Fehlercode (bei CF=1)
bei CF=0:
DL=Anzahl Festplatten
DH=Anzahl Köpfe
CH=Anzahl Zylinder
CL=Anzahl Sektoren |
PC, XT, AT, PS/2 |
Ermittelt das Format einer Festplatte. Bit 6 und 7 von CL dienen als höchstwertige Bits
der Zylindernummer (8 und 9). Eine Auflistung der Fehlercodes ist unter dieser
Tabelle zu finden. |
08h
(bei Disketten) |
Diskettenformat lesen |
AH=08h
DL=Laufwerksnummer (80h oder 81h) |
CF=Fehler
AH=Fehlercode (bei CF=1)
bei CF=0:
BL=Art des Laufwerkes:
01h: 5,25" (360KB)
02h: 5,25" (1,2MB)
03h: 3,5" (720KB)
04h: 3,5" (1,44MB)
DH=größte Seitennummer (immer 1)
CH=größte Spurnummer
CL=größe Sektornummer
ES:DI=Zeiger auf DDPT |
PC, XT, AT, PS/2 |
Ermittelt das Format eines Diskettenlaufwerkes.Eine Auflistung der Fehlercodes ist unter dieser Tabelle zu finden. |
09h
(nur Festplatten) |
Anpassung fremder Laufwerke |
AH=09h
DL=Laufwerksnummer (80h oder 81h) |
??? |
XT, AT, PS/2 |
Diese Funktion ist leider ein wenig komplex zu erklären - wer es wirklich braucht, kann
mir eine eMail schicken! |
0Ah
(nur Festplatten) |
Lesen von erweiterten Sektoren |
AH=0Ah
AL=Anzahl zu lesender Sektoren
CH=Spur
CL=erster Sektor
DH=Kopf
DL=Festplattennummer (80h, ...)
ES=Segmentadresse des Puffers
BX=Offsetadresse des Puffers |
CF=Fehler
AH=Fehlercode (bei CF=1) |
XT, AT, PS/2 |
Mit dieser Funktion werden außer den 512 Bytes eines Sektores zusätzlich 4
Prüfbytes eingelesen, also 516 Bytes je Sektor. Ist die Spurnummer bei Festplattenlaufwerken
größer als 8 Bit, können Bit 6 und 7 von CL hinzugezogen werden. Eine Auflistung
der Fehlercodes ist unter dieser Tabelle zu finden. |
0Bh
(nur Festplatten) |
Schreiben von erweiterten Sektoren |
AH=0Bh
AL=Anzahl zu schreibender Sektoren
CH=Spur
CL=erster Sektor
DH=Kopf
DL=Festplattennummer
ES=Segmentadresse des Puffers
BX=Offsetadresse des Puffers |
CF=Fehler
AL=Anzahl geschriebener Sektoren
AH=Fehlercode (bei CF=1) |
XT, AT, PS/2 |
Mit dieser Funktion werden außer den 512 Bytes eines Sektors zusätzlich 4
Prüfbytes geschrieben, also 516 Bytes pro Sektor. Ist die Spurnummer größer als 8
Bit, können Bit 6 und 7 von CL hinzugezogen werden. Eine Auflistung der Fehlercodes ist unter dieser Tabelle zu finden. |
0Ch
(nur Festplatten) |
Schreib- / Lesekopf bewegen |
??? |
??? |
XT, AT, PS/2 |
Es lagen leider nicht genügend Informationen zu dieser Funktion vor. |
0Dh
(nur Festplatten) |
Festplatte: Reset |
AH=0Dh
DL=Festplattennummer |
CF=Fehler
AH=Fehlercode |
XT, AT, PS/2 |
Führt einen Reset der Festplatte und des Festplatten - Controllers aus. Eine Auflistung
der Fehlercodes ist unter dieser Tabelle zu finden. |
0Eh
(nur Festplatten) |
Controller - Lesetest |
??? |
??? |
PS/2 |
Es lagen leider nicht genügend Informationen zu dieser Funktion vor. |
0Fh
(nur Festplatten) |
Controller - Schreibtest |
??? |
??? |
PS/2 |
Es lagen leider nicht genügend Informationen zu dieser Funktion vor. |
11h
(nur Festplatten) |
Festplatte: Rekalibrieren |
AH=11h
DL=Festplattennummer |
CF=Fehler
AH=Fehlercode |
XT, AT, PS/2 |
Sollte nach einem Festplattenfehler neben der Funktion 0Dh aufgerufen werden. |
12h
(nur Festplatten) |
Controller - RAM - Test |
??? |
??? |
PS/2 |
Es lagen leider nicht genügend Informationen zu dieser Funktion vor. |
13h
(nur Festplatten) |
Laufwerkstest |
??? |
??? |
PS/2 |
Es lagen leider nicht genügend Informationen zu dieser Funktion vor. |
14h
(nur Festplatten) |
Controller - Diagnose |
??? |
??? |
XT, AT, PS/2 |
Es lagen leider nicht genügend Informationen zu dieser Funktion vor. |
15h
(nur Festplatten) |
Festplatte: Kapazität |
AH=15h
DL=Festplattennummer |
CF=1 (ungültiges Laufwerk)
sonst:
AH=3
CX=Sektorenanzahl Bits 16 - 31
DX=Sektorenanzahl Bits 0 - 15 |
AT, PS/2 |
Ermittlung der Kapazität einer Festplatte ab AT. |
15h
(allgemein) |
Feststellung des Laufwerkstyps |
AH=15h
DL=Diskettenlaufwerks - Nummer |
CF=1 (ungültiges Laufwerk)
sonst:
AH=Laufwerkstyp:
00h: Laufwerk nicht vorhanden
01h: Diskettenlaufwerk, erkennt keinen Diskettenwechsel
02h: Diskettelaufwerk, erkennt Diskettenwechsel
03h: Festplatte (s.o.) |
AT, PS/2 |
- |
16h
(nur Disketten) |
Feststellung des Diskettenwechsels |
??? |
??? |
AT, PS/2 |
Es lagen leider nicht genügend Informationen zu dieser Funktion vor. |
17h
(nur Disketten) |
Format festlegen |
??? |
??? |
AT, PS/2 |
Es lagen leider nicht genügend Informationen zu dieser Funktion vor. |
18h
(nur Disketten) |
Format festlegen |
AH=18h
CH=größte Spurnummer
CL=größte Sektornummer
DL=Diskettenlaufwerks - Nummer |
CF=Fehler |
AT, PS/2 |
Fixiert das Diskettenformat und soll einmalig vor dem Formatieren einer Diskette aufgerufen
werden. Die Diskette muß sich bereits im Laufwerk befinden. Eine Auflistung der Fehlercodes ist unter dieser Tabelle zu finden. |
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.
| Fehlercode |
Bedeutung |
| 01h |
illegale Funktionsnummer oder Laufwerk |
| 02h |
Adressmarkierung nicht gefunden |
| 04h |
Sektor nicht gefunden |
| 05h |
Reset erfolglos |
| 07h |
fehlerhafte Initialisierung |
| 09h |
Segmentgrenzen - Überlauf (DMA) |
| 0Ah |
Sektor fehlerhaft |
| 10h |
Lesefehler |
| 11h |
Lesefehler über ECC korrigiert |
| 20h |
Controller - Fehler |
| 40h |
Spur nicht gefunden |
| 80h |
Laufwerk reagiert nicht (Time-Out-Fehler) |
| AAh |
Laufwerk nicht bereit |
| BBh |
Fehler im BIOS |
| CCh |
Schreibfehler |
| FFh |
unbekannter Fehler |
| Fehlercode |
Bedeutung |
| 01h |
illegale Funktionsnummer |
| 02h |
Adressmarkierung nicht gefunden |
| 03h |
Diskette ist schreibgeschützt |
| 04h |
Sektor nicht gefunden |
| 06h |
Diskette wurde gewechselt |
| 08h |
DMA-Überlauf |
| 09h |
Segmentgrenzen - Überlauf (DMA) |
| 10h |
Lesefehler |
| 20h |
Controller - Fehler |
| 40h |
Spur nicht gefunden |
| 80h |
Laufwerk reagiert nicht (Time-Out-Fehler) |
| BBh |
Fehler im BIOS |
| FFh |
unbekannter Fehler |
| Byte-Nr. |
Bedeutung |
| 0 |
Spur |
| 1 |
Kopf |
| 2 |
Sektornummer |
| 3 |
Bytes pro Sektor: 0=128; 1=256; 2=512; 3=1024 |
| Byte-Nr. |
Bedeutung |
| 0 |
Spur |
| 1 |
Diskettenseite (0=Vorderseite, 1=Rückseite) |
| 2 |
Sektornummer |
| 3 |
Bytes pro Sektor: 0=128; 1=256; 2=512; 3=1024 |
| Offset |
Bedeutung |
Typ |
| 00h |
Step-Rate und Head-Unload-Time |
1 Byte |
| 01h |
Head-Load-Time |
1 Byte |
| 02h |
Nachlaufzeit des Diskettenmotors |
1 Byte |
| 03h |
Sektorgröße |
1 Byte |
| 04h |
Sektoren pro Spur |
1 Byte |
| 05h |
Länge von GAP3 beim Lesen / Schreiben |
1 Byte |
| 06h |
DTL (Data Length) |
1 Byte |
| 07h |
Länge von GAP3 beim Formatieren |
1 Byte |
| 08h |
Füll-Byte für das Formatieren |
1 Byte |
| 09h |
Head-Settle-Time |
1 Byte |
| 0Ah |
Hochlaufzeit des Diskettenmotors |
1 Byte |
Alle Angaben ohne Gewähr.