Home Programmierung
und BIOS
Shareware-
FAQ
Kontakt u.
Infos

BIOS-Interrupt 13h (Disketten- und Festplatten)

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:


ASM

  mov {...}

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

  int $13;

  mov {...}

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

END;

Generell wird im Register AH die Funktionsnummer übergeben.

Fehlercodes bei Festplatten

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

Fehlercodes bei Diskettenlaufwerken

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

Struktur des Formatpuffers (Funktion 05h) bei Festplatten

Byte-Nr. Bedeutung
0 Spur
1 Kopf
2 Sektornummer
3 Bytes pro Sektor: 0=128; 1=256; 2=512; 3=1024

Wichtig: In diesem Formatblock müssen Spur- und Kopfnummer den tatsächlichen physikalischen Gegebenheiten entsprechen. Die Sektorennummern müssen aufsteigend (beginnend bei 1) nummeriert sein, wenn DOS die Disketten verwenden soll. Man kann jedoch auch einem Sektor eine beliebige Nummer geben, wenn nur man selbst ihn lesen will.

Struktur des Formatpuffers (Funktion 05h) bei Disketten

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

Aufbau des Disk Drive Parameter Table (DDPT)

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.

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