Zum Inhalt springen

Interrupts 80x86/ INT 13

Aus Wikibooks

Int 13h Disketten- und Festplattenzugriff

Funktion 0: Initialisieren

[Bearbeiten]
AH=0    Initialisieren
DL=Laufwerknummer. A: hat Code 00, B: hat Code 01
Die erste Festplatte hat den Code 80h, die zweite 81h usw.

Ausgabe:

CY-Flag zeigt Fehler an, AH = Fehler-Code

Besonderheiten:

Wenn DL=0, erfolgt Reset aller Diskettenlaufwerke

Fehlercodes

[Bearbeiten]
00h kein Fehler
01h Illegale Funktionsnummer
02h Keine Adress-Markierung
03h Diskette ist schreibgeschützt
04h Sektor nicht gefunden
05h Reset erfolglos
07h Fehlerhafte Initialisierung
08h Überlauf DMA
09h Segmentgrenzen-Überlauf des DMA
10h Lesefehler
11h Daten trotz falscher Prüfsumme gelesen
20h Fehler des Controllers
40h Spur nicht gefunden
80h Laufwerk reagiert nicht
BBh BIOS-Fehler
FFh Nicht aufschlüsselbarer Fehler

Funktion 1: Status lesen

[Bearbeiten]
AH=1    Status lesen
DL=Laufwerknummer

Ausgabe:

CY-Flag zeigt Fehler an, AH = Fehler-Code

Funktion 2h: Sektoren lesen

[Bearbeiten]
AH=2
AL=Sektorenanzahl
DL=Laufwerknummer
DH=Seiten/Kopf-Nummer
CH=Spur-/Zylindernummer
CL=Sektornummer
ES:BX=Adresse des Lesepuffers

Ausgabe:

CY-Flag zeigt Fehler an, AH = Fehler-Code (Tabelle siehe Interrupts 80x86/ INT 13#Fehlercodes

Anmerkungen:

  • Bit 6 und 7 von CL enthalten die oberen Bits der Zylindernummer
  • Bit 0 bis 5 von CL enthalten die Sektornummer
  • Puffergröße ausreichend bemessen! 512 Byte pro Sektor kalkulieren!

Funktion 3h: Sektoren schreiben

[Bearbeiten]
AH=3
ES:BX=Adresse der zu schreibenden Daten
alles andere wie bei Funktion 2h

Funktion 4h: Sektoren überprüfen

[Bearbeiten]

Funktion 5h: Spur formatieren

[Bearbeiten]

Funktion 6h: Zylinder formatieren und Flags für fehlerhafte Sektoren setzen

[Bearbeiten]

Funktion 7h: Laufwerk formatieren und bei Zylinder anfangen

[Bearbeiten]

Funktion 8h: Aktuelle Laufwerksparameter ermitteln

[Bearbeiten]
AH = 08h
DL = Laufwerksindex (z.B. 01h für 1. FD, 80h für 1. HD)

Ausgabe:

CF = 1 bei Fehler, ansonsten 0
AH = Rückgabewert
DH = logische Anzahl der Köpfe (beginnt mit 0)
CX = logische Anzahl der Zylinder (beginnt mit 0) und Sektoren (beginnt mit 1)
     (wie bei Funktion 02h)

Funktion 9h: Fremdlaufwerke anpassen

[Bearbeiten]

Funktion 0Ah: Erweiterte Sektoren lesen

[Bearbeiten]

Funktion 0Bh: Fremdlaufwerke anpassen

[Bearbeiten]

Funktion 0Ch: Zylinder suchen

[Bearbeiten]

Funktion 0Dh: Zusätzlicher Disk-Reset

[Bearbeiten]

Funktion 0Eh: Sektoren-Buffer lesen

[Bearbeiten]

Funktion 0Fh: Sektoren-Buffer schreiben

[Bearbeiten]

Funktion 10h: Überprüfung der Laufwerksbereitschaft

[Bearbeiten]

Funktion 11h: Plattenköpfe parken

[Bearbeiten]

Funktion 12h: Controller-RAM-Diagnose

[Bearbeiten]

Funktion 13h: Sektor 0 überprüfen

[Bearbeiten]

Funktion 14h: Controller-Diagnose

[Bearbeiten]

Funktion 15h: DASD-Typ lesen

[Bearbeiten]

Funktion 16h: Diskettenwechsel ermitteln

[Bearbeiten]
AH=16h
DL=Laufwerknummer (0 = A:, 1 = B:)

Ausgabe:

AH = 6, wenn ein Wechsel stattgefunden hat, sonst AH = 0

Funktion 17h: Diskettenformatierung festlegen

[Bearbeiten]

Funktion 18h: Media-Typ festlegen

[Bearbeiten]

Funktion 19h: Köpfe parken

[Bearbeiten]