Interrupts 80x86/ INT 13

Aus Wikibooks
Zur Navigation springen Zur Suche springen

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]