Kapitel – 9
Arbeiten mit großen Festplatten
Arbeiten mit großen Festplatten
Im vorherigen Kapitel haben wir die BIOS-Festplattenfunktionen und die Verwendung von Interrupts für den Zugriff auf die physischen Medien von Festplatten besprochen. Dort haben wir INT 13H-Funktionen verwendet, um auf Festplatten zuzugreifen.
Die INT 13H-Schnittstelle unterstützt viele verschiedene Befehle wie Lesen, Schreiben, Formatieren, Überprüfen usw., die an das BIOS übergeben werden können, das sie dann an die Festplatte weiterleitet. Da INT13H lange Zeit von DOS verwendet wurde, war es viele Jahre lang der Standard.
INT 13H reserviert 24 Bit für die Spezifikation der Festplattengeometrie und erfordert, dass das aufrufende Programm die spezifischen Parameter der Festplatte kennt und den Routinen für den Zugriff auf die Festplatte die genaue Kopf-, Zylinder- und Sektoradressierung bereitstellt.
Das BIOS verwendet die Festplattengeometrie, wie sie im BIOS-Setup-Programm konfiguriert wurde. Die von der Schnittstelle INT 13H für die Spezifikation der Plattengeometrie reservierten 24 Bits gliedern sich wie folgt:
- 10 Bits für die Zylindernummer. Somit kann die maximale Grenze der Gesamtzylinderanzahl bis zu 1024 Zylinder betragen.
- 8 Bits für die Kopfnummer. Somit liegt die maximale Gesamtzahl der Ziele bei 256.
- 6 Bits für die Sektornummer. Somit kann die maximale Gesamtzahl der Sektoren bis zu 63 Sektoren betragen.
Somit kann die maximale Anzahl der durch diesen Ansatz unterstützten Sektoren 1024 * 256 * 63 = 16515072 erreichen.
Dies bedeutet, dass die INT13H-Schnittstelle Laufwerke mit bis zu 16,5 Millionen Sektoren unterstützen kann, was bei 512 Bytes pro Sektor maximal 8,46 GB ergibt. Genau das möchte ich erklären. Mit all diesen Funktionen oder INT 13H können wir also nur auf Festplatten mit einer Größe von bis zu 8,46 GB zugreifen.
Aus diesem Grund wurde diese alte Schnittstelle in den letzten Jahren aufgrund ihrer Einschränkungen zugunsten einer neuen Methode zur Adressierung von Festplatten aufgegeben, die später in diesem Kapitel beschrieben wird.
Lassen Sie mich Ihnen zunächst eine Geschichte erzählen!
Vor elf Jahren, als ich in der siebten Klasse war, hörte ich von einer 42 MB großen Festplatte an meiner Schule, möglicherweise war es die WDA-L42 von IBM. Für mich und meine Freunde war es damals kaum vorstellbar, dass eine Festplatte eine so große Kapazität haben könnte.
Die INT 13H-Methode wurde vor etwa zwanzig Jahren entwickelt. Jetzt können Sie sehen, dass eine 8-GB-Festplatte viel größer war, als sich damals irgendjemand auch nur in seinen Träumen hätte vorstellen können. Wenn wir heute jedoch mit einem PC-Benutzer über eine 8 GB-Festplatte sprechen, möchte er sie möglicherweise nicht verwenden, weil sie über eine geringe Speicherkapazität verfügt.
Aus diesem Grund hat die INT 13H-Schnittstelle in modernen Systemen ihre Nützlichkeit endgültig erschöpft. INT 13H verwendete 24 Bits zur Zuweisung der Festplattengeometrie. Leider war es nicht möglich, die vorhandene BIOS INT 13H-Schnittstelle zu erweitern, da sonst viele alte Hardware- und Softwareprodukte nicht mehr funktionieren würden. Es ist verständlich, dass der heutige Computermarkt solch große Veränderungen niemals verkraften würde, wenn Millionen alter Software- und Hardwareprodukte nicht mehr funktionieren.
Unter diesen Umständen wurde INT 13H durch eine neuere Schnittstelle namens INT 13H-Erweiterungen ersetzt. INT 13H kann jedoch weiterhin von DOS und einigen anderen älteren Betriebssystemen sowie aus anderen Kompatibilitätsgründen verwendet werden.
Die neue INT 13H-Schnittstelle verwendet 64 Bit statt 24 Bit zur Adressierung und ermöglicht eine maximale Festplattengröße von 9,4 * 1021 Byte, was tatsächlich 9,4 Billionen Gigabyte oder 94000000000000 Gigabyte entspricht. Bis diese Grenze überschritten wird, können wir nun hoffentlich eine Weile zur Ruhe kommen.
Nachfolgend werden einige wichtige Erweiterungsfunktionen für den Interrupt 13H beschrieben. Sie können diese Funktionen beim Programmieren auf die gleiche Weise verwenden, wie Sie die INT 13H-Funktionen verwendet haben. Dies ist auch der Grund, warum diese Funktionen INT 13H-Erweiterungen genannt werden.
INT 13H Erweiterungen:
INTERN 13H (0x13)
Funktion 1BH (0x1B oder 27) --> Produktionsheader abrufen (ESDI-Festplatte)
Call mit: AH = 1BH
AL = Anzahl der zu lesenden Sektoren
DL = Antrieb
ES:BX = Puffer für Produktionskopf
(Mängelliste)
Rückgabewert: Bei erfolgreicher Funktion
Carry-Flag = löschen
AH = 00X
Wenn die Funktion fehlschlägt
Carry-Flag = gesetzt
AH = Status
Kommentare:
Mit dieser Funktion wird der Fertigungsheader der Festplatte abgerufen. Der erste gelesene Sektor enthält den Fertigungsheader mit der Anzahl der Defekteinträge und dem Anfang der Defektkarte; die übrigen Sektoren enthalten den Rest der Defektkarte. Das Fertigungsheaderformat (Defect Map Record-Format) finden Sie im technischen Referenzhandbuch für IBM 70 MB, 115 MB-Festplattenlaufwerke.
INT 13H (0x13)
Funktion 1BH (0x1B oder 27) --> Zeiger auf SCSI-Festplatteninformationsblock abrufen (Future Domain SCSI Controller)
Call mit: AH = 1BH
DL = Festplatten-ID
Rückgabewert: Bei erfolgreicher Funktion
Carry-Flag = löschen
AH = 01H
Wenn die Funktion nicht erfolgreich ist
Carry-Flag = gesetzt
AH = Status
ES:BX = SCSI-Festplatteninformationsblock
Kommentare:
Mit dieser Funktion wird der Zeiger zum SCSI-Datenträgerinformationsblock abgerufen. Dadurch wird auch ein nicht zurücksetzbares Flag gesetzt, das die Anzeige einiger Controllermeldungen verhindert.
INT 13H (0x13)
Funktion 1CH (0x1C oder 28) --> Zeiger auf freien Controller-RAM abrufen (Future Domain SCSI Controller)
Anruf mit: AH = 1CH
DL = Festplatten-ID für jedes gültige SCSI
Festplatte
Rückgabewert: Bei erfolgreicher Funktion
Carry-Flag = löschen
AH = 01H
Wenn die Funktion nicht erfolgreich ist
Carry-Flag = gesetzt
AH = Status
ES:BX = erstes Byte des freien RAM auf dem Controller
Kommentare:
Mit dieser Funktion wird der freie RAM des Controllers abgerufen. ES:BX zeigt auf das erste Byte freien RAM des Controllers, das für andere Zwecke verfügbar ist. ES enthält das Segment, in dem sich der Controller befindet. Die beiden speicherabgebildeten E/A-Ports des Controllers befinden sich an den Offsets 1C00H und 1E00H.
INT 13H (0x13)
Funktion 1C08H (0x1C08) --> Befehlsabschlussstatus abrufen (ESDI-Festplatte)
Aufruf mit: AX = 1C08H
DL = Antrieb
ES:BX = Puffer für Befehl abgeschlossen
Statusblock
Rückgabewert: Wenn Funktion erfolgreich
Carry-Flag = löschen
AH = 01H
Wenn die Funktion nicht erfolgreich ist
Carry-Flag = gesetzt
AH = Status
Kommentare:
Mit dieser Funktion wird der Befehlsabschlussstatus abgerufen. Wenn die Funktion erfolgreich ist, wird das Carry-Flag gelöscht, und wenn sie nicht erfolgreich ist, wird das Carry-Flag gesetzt.
INT 13H (0x13)
Funktion 1C09H (0x1C09) --> Gerätestatus abrufen (ESDI-Festplatte)
Aufruf mit: AX = 1C09H
DL = Antrieb
ES:BX = Puffer für Gerätestatusblock
Rückgabewert: Wenn Funktion erfolgreich
Carry-Flag = löschen
AH = 01H
Wenn die Funktion nicht erfolgreich ist
Carry-Flag = gesetzt
AH = Status
Kommentare:
Mit dieser Funktion wird der Gerätestatus ermittelt. Wenn die Funktion erfolgreich ist, wird das Carry-Flag gelöscht, und wenn es nicht erfolgreich ist, wird das Carry-Flag gesetzt.
INT 13H (0x13)
Funktion 1C0AH (0x1C0A) --> Gerätekonfiguration abrufen (ESDI-Festplatte)
Anruf mit: AX = 1C0AH
DL = Antrieb
ES:BX = Puffer für Laufwerkskonfigurationsstatus
Block
Rückgabewert: Wenn Funktion erfolgreich
Carry-Flag = löschen
AH = 01H
Wenn die Funktion nicht erfolgreich ist
Carry-Flag = gesetzt
AH = Status
Kommentare:
Mit dieser Funktion wird die Gerätekonfiguration für die Festplatte abgerufen. Wenn die Funktion erfolgreich ist, ist das Carry-Flag gelöscht und das AH-Register ist 01H, andernfalls ist das Carry-Flag gesetzt und das AH-Register gibt den Status zurück. Die folgende Tabelle zeigt das Format des ESDI-Laufwerkskonfigurationsstatusblocks:
Versatz
|
Größe
|
Beschreibung
|
00 Uhr
|
Byte
|
09 Uhr
|
01 Uhr
|
Byte
|
Anzahl der Wörter im Block (06H)
|
02 Uhr
|
Byte
|
Flaggen
|
03 Uhr
|
Byte
|
Anzahl der Ersatzsektoren pro Zylinder
|
04 Uhr
|
Doppelwort
|
Gesamtzahl der nutzbaren Sektoren
|
08 Uhr
|
Wort
|
Gesamtzahl der Zylinder
|
0AH
|
Byte
|
Spuren pro Zylinder
|
0BH
|
Byte
|
Sektoren pro Spur
|
INT 13H (0x13)
Funktion 1C0BH (0x1C0B) --> Adapterkonfiguration abrufen (ESDI-Festplatte)
Anruf mit: AX = 1C0BH
ES:BX = Puffer für Controller-Konfiguration
Statusblock
Rückgabewert: Wenn Funktion erfolgreich
Carry-Flag = löschen
AH = 01H
Wenn die Funktion nicht erfolgreich ist
Carry-Flag = gesetzt
AH = Status
Kommentare:
Mit dieser Funktion wird die Adapterkonfiguration abgerufen. Wenn die Funktion erfolgreich ist, wird das Carry-Flag gelöscht und AH ist 01H. Wenn die Funktion nicht erfolgreich ist, wird das Carry-Flag gesetzt und AH gibt den Status zurück.
INT 13H (0x13)
Funktion 1C0CH (0x1C0C) --> POS-Informationen abrufen (ESDI-Festplatte)
Anruf mit: AX = 1C0CH
ES:BX = Puffer für POS-Informationsstatus
Block
Rückgabewert: Wenn Funktion erfolgreich
Carry-Flag = löschen
AH = 01H
Wenn die Funktion nicht erfolgreich ist
Carry-Flag = gesetzt
AH = Status
Kommentare:
Mit dieser Funktion werden die POS-Informationen abgerufen. Wenn die Funktion erfolgreich ist, wird das Carry-Flag gelöscht und AH ist 01H. Wenn die Funktion nicht erfolgreich ist, wird das Carry-Flag gesetzt und AH gibt den Status zurück.
INT 13H (0x13)
Funktion 1C0EH (0x1C0E) --> RBA in ABA übersetzen (ESDI-Festplatte)
Anruf mit: AX = 1C0EH
CH = untere 8 Bits der Zylindernummer
CL = Sektornummer (die beiden höchsten Bits des
Zylindernummer in Bit 6 und 7)
DH = Kopfnummer
DL = Laufwerksnummer
ES:BX = ABA (Absolute Blockadresse)
Nummer
Rückgabewert: Wenn Funktion erfolgreich
Carry-Flag = löschen
AH = 01H
Wenn die Funktion nicht erfolgreich ist
Carry-Flag = gesetzt
AH = Status
Kommentare:
Diese Funktion übersetzt die RBA (Relative Blockadresse) in ABA (Absolute Blockadresse). Wenn die Funktion erfolgreich ist, ist das Carry-Flag gelöscht und das AH-Register ist 01H, andernfalls ist das Carry-Flag gesetzt und AH gibt den Status zurück.
INT 13H (0x13)
Funktion 20H (0x20 oder 32) --> Aktuelles Medienformat abrufen (Compaq ATAPI Removable Media Device)
Anruf mit: AH = 20H
DL = Laufwerksnummer
Rückgabe: Wenn die Funktion erfolgreich war,
Carry Flag = löschen
AL = Medientyp
AH = 00H
Wenn die Funktion nicht erfolgreich ist,
CF = Satz
AH = Fehlercode
Kommentare:
Mit dieser Funktion wird das aktuelle Medienformat ermittelt. Werte für den Compaq/ATAPI-Diskettenmedientyp sind in der folgenden Tabelle angegeben:
Wert
|
Medien
|
03 Uhr
|
720 KB (1 MB unformatiert)
|
04 Uhr
|
1,44 M (2 M unformatiert)
|
06 Uhr
|
2,88 M (4 M unformatiert)
|
0CH
|
360.000
|
0DH
|
1,2 Mio.
|
0EH
|
Toshiba 3mode
|
0FH
|
NEC 3mode (1024 Bytes pro Sektor)
|
10 Stunden
|
ATAPI-Wechseldatenträger
|
INT 13H (0x13)
Funktion 21H (0x21 oder 33) --> Mehrere Festplattensektoren lesen (PS und PS/2, Festplatten)
Anruf mit: AH = 21H
AL = Anzahl der zu lesenden Sektoren
CH = Low-Byte der 12-Bit-Zylindernummer
CL = Startsektor (Bits 0 bis 5) und Bits 8
und 9 des Zylinders (Bits 6 und 7)
DH = Kopfnummer (Bits 0 bis 5) und Bits 10
und 11 des Zylinders (Bits 6 und 7)
DL = Laufwerksnummer
ES:BX = Zu lesender Datenpuffer
Rückgabe: Wenn die Funktion erfolgreich war,
Carry-Flag = löschen
ES:BX = Gefüllter Datenpuffer
Wenn die Funktion nicht erfolgreich ist,
Carry-Flag = gesetzt
AH = Status
Kommentare:
Die Funktion wird zum Lesen mehrerer Festplattensektoren im Mehrfachblockmodus verwendet, der einen Interrupt erst nach dem Ende der Übertragung einer Sektorengruppe und nicht nach jedem Sektor generiert.
INT 13H (0x13)
Funktion 22H (0x22 oder 34) --> Mehrere Festplattensektoren schreiben (PS und PS/2, Festplatten)
Anruf mit: AH = 22H
AL = Anzahl der zu schreibenden Sektoren
CH = Low-Byte der 12-Bit-Zylindernummer
CL = Startsektor (Bits 0 bis 5) und Bits 8
und 9 des Zylinders (Bits 6 und 7)
DH = Kopfnummer (Bits 0 bis 5) und Bits 10
und 11 des Zylinders (Bits 6 und 7)
DL = Laufwerksnummer
ES:BX = Puffer mit zu schreibenden Daten
Rückgabe: Wenn die Funktion erfolgreich war,
Carry Flag = löschen
AH = 01H
Wenn die Funktion nicht erfolgreich ist,
Carry-Flag = gesetzt
AH = Status
Kommentare:
Die Funktion wird zum Schreiben mehrerer Festplattensektoren im Mehrfachblockmodus verwendet, der einen Interrupt erst nach dem Ende der Übertragung einer Sektorengruppe und nicht nach jedem Sektor generiert.
INT 13H (0x13)
Funktion 22H (0x22 oder 34) --> Cache aktivieren/deaktivieren (QuickCache II v4.20)
Anruf mit: AH = 22H
AL = neuer Status (00H, wenn deaktiviert und 01H,
falls aktiviert)
Rückgabe: Wenn die Funktion erfolgreich war,
AX = 0000H
Wenn die Funktion nicht erfolgreich ist,
AX = Status
Kommentare:
Diese Funktion aktiviert und/oder deaktiviert das Caching aller Laufwerke. Wenn die Funktion erfolgreich ist, ist das AX-Register 0000H, andernfalls wird der Status zurückgegeben.
INT 13H (0x13)
Funktion 23H (0x23 oder 35) --> Controller-Features-Register festlegen (PS und PS/2, Festplatte)
Anruf mit: AH = 23H
AL = Merkmalsnummer
DL = Laufwerksnummer
Rückgabe: Wenn die Funktion erfolgreich war,
Carry-Flag = Löschen
Wenn die Funktion nicht erfolgreich ist,
Carry-Flag = gesetzt
AH = Status
Kommentare:
Mit dieser Funktion wird das Controller-Funktionsregister gesetzt. Wenn die Funktion erfolgreich ist, wird das Carry-Flag gelöscht, und wenn sie nicht erfolgreich ist, wird das Carry-Flag gesetzt und das AH-Register gibt den Status zurück.
INT 13H (0x13)
Funktion 24H (0x24 oder 36) --> Mehrere Übertragungsmodi einstellen (Festplatte, PS und PS/2)
Anruf mit: AH = 24H
AL = Anzahl der Sektoren pro Block
DL = Laufwerksnummer
Rückgabe: Wenn die Funktion erfolgreich war,
Carry-Flag = Löschen
Wenn die Funktion nicht erfolgreich ist,
Carry-Flag = gesetzt
AH = Status
Kommentare:
Mit dieser Funktion wird der Mehrfachübertragungsmodus eingestellt. Wenn Sie den Mehrfachübertragungsmodus deaktivieren möchten, setzen Sie die Anzahl der Sektoren auf 0. Der Maximalwert für die Blockgröße (z. B. 2, 4, 6, 8 und 16 usw.) hängt vom Festplattentyp ab.
Der Wert wird in Byte 15H der Festplattenparametertabelle gespeichert, die von POST (Power On Self-Test) erstellt wird. Das Byte an Adresse 0040H:0074H wird auf den Betriebsstatus gesetzt. Die Werte für die PS/1-Festplattenfunktionsnummer sind in der folgenden Tabelle aufgeführt:
Wert
|
Beschreibung
|
01 Uhr
|
Wählen Sie 8-Bit-Datenübertragungen anstelle von 16-Bit
|
02 Uhr
|
Schreibcache aktivieren
|
22 Uhr
|
Schreiben Sie den gleichen, benutzerdefinierten Bereich
|
33 Stunden
|
Wiederholungsversuche deaktivieren
|
44 Stunden
|
Anzahl der ECC-Bytes für „Long lesen“/„Long schreiben“ festlegen
|
54 Stunden
|
Cache-Segmente festlegen
|
55 Stunden
|
Vorausschauen deaktivieren
|
66 Stunden
|
Deaktivieren der Wiederherstellung der Standardeinstellungen beim Einschalten
|
77H
|
Fehlerkorrektur deaktivieren
|
81H
|
16-Bit-Datenübertragungen auswählen (Standard)
|
82H
|
Schreibcache deaktivieren
|
88H
|
Fehlerkorrektur aktivieren (Standard)
|
99 Stunden
|
Wiederholungsversuche aktivieren (Standard)
|
AAH
|
Vorausschauende Suche aktivieren
|
BBH
|
ECC-Länge für Read Long/Write Long auf vier Bytes einstellen
|
CCH
|
Aktivieren Sie die Wiederherstellung der Standardeinstellungen beim Einschalten.
|
DDH
|
Gleiches schreiben, gesamte Festplatte
|
INT 13H (0x13)
Funktion 24H (0x24 oder 36) --> Sektoren festlegen (QuickCache II v4.20)
Anruf mit: AX = 24H
BX = Neue Anzahl Sektorpuffer in
Cache
Rückgabe: Wenn die Funktion erfolgreich war,
AX = 0000H
Wenn die Funktion nicht erfolgreich ist,
AX = Status
Kommentare:
Mit dieser Funktion werden die Sektoren festgelegt. Wenn die Funktion erfolgreich ist, ist das AX-Register 0000H, andernfalls gibt AX den Status zurück.
INT 13H (0x13)
Funktion 25H (0x25 oder 37) --> Laufwerk identifizieren (Festplatte, PS und PS/2)
Anruf mit: AH = 25H
DL = Laufwerksnummer
ES:BX = Puffer von 512 Bytes für Antwortpaket
Rückgabe: Wenn die Funktion erfolgreich war,
Carry-Flag = Löschen
Puffer mit Laufwerksinformationsblock gefüllt
Wenn die Funktion nicht erfolgreich ist,
Carry-Flag = gesetzt
AH = Status
Kommentare:
Diese Funktion dient zur Identifizierung des Laufwerks. Das Byte an der Adresse 0040h:0074h wird auf den Status der Operation gesetzt. IBM stuft diese Funktion offiziell als optional ein. Die Bitfelder für die allgemeine Laufwerkskonfiguration sind in der folgenden Tabelle aufgeführt:
Bit(s)
|
Beschreibung
|
0
|
Reserviert (0)
|
1
|
Hart sektoriert
|
2
|
Weich sektoriert
|
3
|
Nicht MFM-kodiert
|
4
|
Kopfwechselzeit größer als 15 ms
|
5
|
Spindelmotor-Steuerungsoption implementiert
|
6
|
Fester Antrieb
|
7
|
Herausnehmbares Kassettenlaufwerk
|
8
|
Die Festplattenübertragungsrate ist kleiner oder gleich 5 MBit/s
|
9
|
Die Festplattenübertragungsrate ist größer als 5 MBit/s, aber kleiner oder gleich 10 MBit/s
|
10
|
Die Festplattenübertragungsrate ist größer als 10 MBit/s.
|
11
|
Die Drehzahltoleranz liegt über 0,5 %
|
12
|
Option für Daten-Strobe-Offset verfügbar
|
13
|
Option für Spurversatz verfügbar
|
14
|
Erforderliche Toleranzlücke bei der Formatgeschwindigkeit
|
15
|
Reserviert für nichtmagnetische Laufwerke (0)
|
Die Beschreibung des Formats des Laufwerkinformationsblocks gemäß der ATA-Spezifikation (AT Attachment) finden Sie in der folgenden Tabelle:
Versatz
|
Größe
|
Beschreibung
|
00 Uhr
|
WORT
|
Allgemeine Laufwerkskonfiguration
|
02 Uhr
|
WORT
|
Anzahl der Zylinder
|
04 Uhr
|
WORT
|
Reserviert
|
06 Uhr
|
WORT
|
Anzahl der Köpfe
|
08 Uhr
|
WORT
|
Anzahl unformatierter Bytes pro Spur
|
0AH
|
WORT
|
Anzahl unformatierter Bytes pro Sektor
|
0CH
|
WORT
|
Anzahl der Sektoren pro Spur
|
0EH
|
6 BYTES
|
Eindeutiger Anbieter
|
14 Uhr
|
20 BYTES
|
Seriennummer in ASCII, (0000H=nicht angegeben)
|
28 Stunden
|
WORT
|
Puffertyp
|
2AH
|
WORT
|
Puffergröße in 512-Byte-Schritten (0000H=nicht angegeben)
|
2 Kanäle
|
WORT
|
Anzahl der bei langen Lese-/Schreibbefehlen weitergegebenen ECC-Bytes 0000H = nicht angegeben
|
2EH
|
8 BYTES
|
Firmware-Revision in ASCII, 0000H=nicht angegeben
|
36 Stunden
|
40 BYTES
|
Modellnummer in ASCII, 0000H=nicht angegeben
|
5EH
|
WORT
|
Bits 15-8 herstellerspezifisch, Bits 7-0 (wenn 00H = Mehrfach-Lese-/Schreibbefehle nicht implementiert, sonst xxH = Maximale Anzahl von Sektoren, die pro Interrupt bei Mehrfach-Lese- und Schreibbefehlen übertragen werden können)
|
60 Stunden
|
WORT
|
0000H = Doppelwort-E/A kann nicht durchgeführt werden, 0001H = Doppelwort-E/A kann durchgeführt werden.
|
62 Stunden
|
WORT
|
Bit 15-9 (0=reserviert), Bit 8 (1=DMA unterstützt), Bit 7-0 herstellerspezifisch.
|
64 Stunden
|
WORT
|
Reserviert
|
66 Stunden
|
WORT
|
Bits 15-8 PIO-Datenübertragungszyklus-Timing-Modus, Bits 7-0 Vendor Unique
|
68 Stunden
|
WORT
|
Bits 15-8 DMA-Datenübertragungszyklus-Timing-Modus, Bits 7-0 Vendor Unique
|
6AH
|
WORT
|
Bits 15-1 reserviert, Bit 0 (1=die im Übersetzungsmodus gemeldeten Felder sind gültig, 0=die im Übersetzungsmodus gemeldeten Felder können gültig sein)
|
6 Kanäle
|
WORT
|
Anzahl der aktuellen Zylinder
|
6EH
|
WORT
|
Anzahl der aktuellen Köpfe
|
70 Stunden
|
WORT
|
Anzahl der aktuellen Sektoren pro Spur
|
72 Stunden
|
DWORD
|
Aktuelle Kapazität in Sektoren
|
76 Stunden
|
>WORT
|
Reserviert
|
78 Stunden
|
136 BYTES
|
Nicht definiert
|
100 Stunden
|
64 BYTES
|
Eindeutiger Anbieter
|
140 Stunden
|
96 BYTES
|
Reserviert
|
INT 13H (0x13)
Funktion 25H (0x25 oder 37) --> Flush-Intervall festlegen (QuickCache II v4.20)
Anruf mit: AH = 25H
BX = Spülintervall
Rückgabe: Wenn die Funktion erfolgreich war,
AH = 0000H
Wenn die Funktion nicht erfolgreich ist,
AH = Status
Kommentare:
Mit dieser Funktion wird das Spülintervall eingestellt. Wenn die Funktion erfolgreich ist, ist AH 0000H, andernfalls gibt AH den Status zurück.
INT 13H (0x13)
Funktion 26H (0x26 oder 38) --> QuickCache II v4.20 Deinstallation
Anruf mit: AH = 26H
Rückgabe: Wenn die Funktion erfolgreich war,
AX = 0000H
Wenn die Funktion nicht erfolgreich ist,
AX = Status
Kommentare:
AX gibt den Status von 0001H bis 00FFH für den Interrupt-Vektor zurück, der von einem anderen TSR angehängt wurde.
INT 13H (0x13)
Funktion 27H (0x27 oder 39) --> Installationsprüfung (QuickCache II v4.20)
Anruf mit: AH = 27H
BX = 0000H
Rückgabe: BH = Hauptversion
BL = Binäre Nebenversion
Falls installiert,
AX = 0000H
BX = Ungleich Null
Kommentare:
Falls installiert, ist das AX-Register 0000H und BX gibt einen Wert ungleich Null zurück.
INT 13H (0x13)
Funktion 28H (0x28 oder 40) --> Automatisches Aushängen festlegen (QuickCache II v4.20)
Anruf mit: AH = 28H
AL = Neuer Staat
Rückgabe: Wenn die Funktion erfolgreich war,
AX = 0000H
Wenn die Funktion nicht erfolgreich ist,
AX = Status
Kommentare:
Rufen Sie die Funktion mit AL = 00H zum Deaktivieren und mit AL = 01H zum Aktivieren auf.
INT 13H (0x13)
Funktion 29H (0x29 oder 41) --> Kein Vorgang (QuickCache II v4.20)
Anruf mit: AH = 29H
Rückgabe: AX = 0000H
INT 13H (0x13)
Funktion 2AH (0x2A oder 42) --> Puffergröße festlegen (QuickCache II v4.20)
Call mit: AH = 2AH
AL = Puffergröße
Rückgabe: Wenn die Funktion erfolgreich war,
AX = 0000H
Wenn die Funktion nicht erfolgreich ist,
AX = Status
Kommentare:
Mit dieser Funktion wird die Puffergröße eingestellt. Wenn die Funktion erfolgreich ist, ist AX 0000H, wenn nicht, gibt AX den Status zurück.
INT 13H (0x13)
Funktion 2BH (0x2B oder 43) --> Laufwerkszugriffstöne (QuickCache II v4.20)
Call mit: AH = 2BH
AL = neuer Status (00h deaktiviert, 01h
ermöglicht)
Rückgabe: Wenn die Funktion erfolgreich war,
AX = 0000H
Wenn die Funktion nicht erfolgreich ist,
AX = Status
Kommentare:
Wenn die Funktion erfolgreich ist, ist AX 0000H, wenn nicht erfolgreich, gibt AX den Status zurück. Rufen Sie die Funktion mit AL = 00H auf, um die Laufwerkszugriffstöne zu deaktivieren, und AL = 01H, um sie zu aktivieren.
INT 13H (0x13)
Funktion 2CH (0x2C oder 44) --> Gepuffertes Schreiben festlegen (QuickCache II v4.20)
Anruf mit: AH = 2CH
AL = neuer Zustand
Rückgabe: Wenn die Funktion erfolgreich war,
AX = 0000H
Wenn die Funktion nicht erfolgreich ist,
AX = Status
Kommentare:
Diese Funktion aktiviert oder deaktiviert verzögerte Schreibvorgänge für alle Laufwerke. Verwenden Sie AH=38H, um ein einzelnes Laufwerk zu ändern. Verwenden Sie AL = 00H zum Deaktivieren und 01H zum Aktivieren.
INT 13H (0x13)
Funktion 2DH (0x2D oder 45) --> Gepuffertes Lesen festlegen (QuickCache II v4.20)
Anruf mit: AH = 2Dh
AL = neuer Status (00h deaktiviert, 01h
ermöglicht)
Rückgabe: Wenn die Funktion erfolgreich war,
AX = 0000H
Wenn die Funktion nicht erfolgreich ist,
AX = Status
Kommentare:
Diese Funktion aktiviert oder deaktiviert das Vorauslesen für alle Laufwerke. Verwenden Sie AL = 00H zum Deaktivieren und AL = 01H zum Aktivieren. Verwenden Sie AH=37H, um ein einzelnes Laufwerk zu ändern.
INT 13H (0x13)
Funktion 2EH (0x2E oder 46) --> Flush-Anzahl festlegen (QuickCache II v4.20)
Call mit: AH = 2EH
BX = Flush-Anzahl
Rückgabe: Wenn die Funktion erfolgreich war,
AX = 0000H
Wenn die Funktion nicht erfolgreich ist,
AX = Status
Kommentare:
Mit dieser Funktion wird der Flush-Zähler festgelegt. Wenn die Funktion erfolgreich ist, ist AX 0000H, wenn sie nicht erfolgreich ist, gibt AX den Status zurück.
INT 13H (0x13)
Funktion 2FH (0x2F oder 47) --> Sofortiges inkrementelles Leeren erzwingen (QuickCache II v4.20)
Anruf mit: AH = 2FH
Rückgabe: Wenn die Funktion erfolgreich war,
AX = 0000H
Wenn die Funktion nicht erfolgreich ist,
AX = Status
Kommentare:
Wenn die Funktion erfolgreich ist, lautet der AX-Wert 0000H, wenn sie nicht erfolgreich ist, gibt AX den Status zurück.
INT 13H (0x13)
Funktion 30H (0x30 oder 48) --> Informationen abrufen (QuickCache II v4.20)
Anruf mit: AH = 30H
AL = Informationsnummer (siehe Tabelle in
Kommentare)
DS:DX = Puffer für Informationen
Rückgabe: Wenn die Funktion erfolgreich war,
AX = 0000H
Wenn die Funktion nicht erfolgreich ist,
AX = Status
Kommentare:
Diese Funktion wird verwendet, um verschiedene Arten von Systeminformationen abzurufen, die von AL angegeben werden. Wenn die Funktion erfolgreich ist, ist AX 0000H, wenn sie nicht erfolgreich ist, gibt AX den Status zurück. AX = 8000H zeigt den ungültigen Informationsspezifizierer an. Die für AL anzugebenden Informationsnummern sind in der folgenden Tabelle aufgeführt:
Wert
|
Beschreibung
|
00 Uhr
|
Systeminformationen
|
01 Uhr
|
Laufwerksinformationen
|
02 Uhr
|
Zugriffshäufigkeit (Array von 30 Wörtern)
|
03 Uhr
|
Laufwerksindex (Array aus 32 Bytes, das das BIOS-Laufwerk für das DOS-Laufwerk angibt)
|
INT 13H (0x13)
Funktion 31H (0x31 oder 49) --> Speicher reservieren (QuickCache II v4.20)
Anruf mit: AH = 31H
BX = Anzahl der Absätze von
konventioneller Speicher zu reservieren für
Anwendungen.
Rückgabe: Wenn die Funktion erfolgreich war,
AX = 0000H
Wenn die Funktion nicht erfolgreich ist,
AX = Status
Kommentare:
Mit dieser Funktion wird der Speicher für Anwendungen reserviert. Wenn die Funktion erfolgreich ist, ist AX 0000H, wenn nicht, gibt AX den Status zurück.
INT 13H (0x13)
Funktion 32H (0x32 oder 50) --> Caching für bestimmtes Laufwerk aktivieren (QuickCache II v4.20)
Anruf mit: AH = 32H
AL = Laufwerksnummer
Rückgabe: Wenn die Funktion erfolgreich war,
AX = 0000H
Wenn die Funktion nicht erfolgreich ist,
AX = Status
Kommentare:
Mit dieser Funktion wird das Caching für ein bestimmtes Laufwerk aktiviert. Rufen Sie die Funktion beispielsweise mit AL = 00H für A: usw. auf. Wenn die Funktion erfolgreich ist, ist AX 0000H, wenn sie nicht erfolgreich ist, gibt AX den Status zurück.
INT 13H (0x13)
Funktion 33H (0x33 oder 51) --> Caching für bestimmte Laufwerke deaktivieren (QuickCache II v4.20)
Anruf mit: AH = 33H
AL = Laufwerksnummer
Rückgabe: Wenn die Funktion erfolgreich war,
AX = 0000H
Wenn die Funktion nicht erfolgreich ist,
AX = Status
Kommentare:
Mit dieser Funktion wird das Caching für ein bestimmtes Laufwerk deaktiviert. Rufen Sie die Funktion beispielsweise mit AL = 00H für A: usw. auf. Wenn die Funktion erfolgreich ist, ist AX 0000H, wenn sie nicht erfolgreich ist, gibt AX den Status zurück.
INT 13H (0x13)
Funktion 34H (0x34 oder 52) --> Sektor(en) sperren/entsperren (QuickCache II v4.20)
Anruf mit: AH = 34H
AL = Sperr-/Entsperrfunktionsnummer
(Siehe die Tabelle in den Kommentaren)
Rückgabe: Wenn die Funktion erfolgreich war,
AX = 0000H
Wenn die Funktion nicht erfolgreich ist,
AX = Status
Kommentare:
Mit dieser Funktion werden Sperr-/Entsperrfunktionen für Sektoren aufgerufen, die durch AL angegeben werden. Wenn die Funktion erfolgreich ist, ist AX 0000H, wenn sie nicht erfolgreich ist, gibt AX den Status zurück. Die verschiedenen Funktionsnummern, die mit AL aufgerufen werden können, sind in der folgenden Tabelle aufgeführt:
Wert
|
Funktion
|
00 Uhr
|
Sperren/Entsperren des Endsektors
|
01 Uhr
|
Alle aufgerufenen Sektoren im Cache sperren
|
02 Uhr
|
Alle aufgerufenen Sektoren entsperren und aus dem Cache löschen
|
INT 13H (0x13)
Funktion 35H (0x35 oder 53) --> Lock Pool-Größe festlegen (QuickCache II v4.20)
Anruf mit: AH = 35H
BX = Anzahl der Sektoren im Sperrpool
Rückgabe: Wenn die Funktion erfolgreich war,
AX = 0000H
Wenn die Funktion nicht erfolgreich ist,
AX = Status
Kommentare:
Mit dieser Funktion wird die Größe des Sperrpools festgelegt. Wenn die Funktion erfolgreich ist, ist AX 0000H, wenn sie nicht erfolgreich ist, gibt AX den Status zurück.
INT 13H (0x13)
Funktion 36H (0x36 oder 54) --> Trace-Puffergröße festlegen
Anruf mit: AH = 36H
AL = Neue Größe des Trace-Puffers
Rückgabe: Wenn die Funktion erfolgreich war,
AX = 0000H
Wenn die Funktion nicht erfolgreich ist,
AX = Status
Kommentare:
Mit dieser Funktion wird die Trace-Puffergröße eingestellt. Wenn die Funktion erfolgreich ist, ist AX 0000H, wenn nicht, gibt AX den Status zurück. Diese Funktion wird normalerweise mit Funktion 24H von INT 13H mit AL=05H aufgerufen.
INT 13H (0x13)
Funktion 37H (0x37 oder 55) --> Gepufferte Lesevorgänge für bestimmte Laufwerke festlegen (QuickCache II v4.20)
Anruf mit: AH = 37H
AL = Neuer Status
DL = Laufwerksnummer
Rückgabe: Wenn die Funktion erfolgreich war,
AX = 0000H
Wenn die Funktion nicht erfolgreich ist,
AX = Status
Kommentare:
Mit dieser Funktion werden gepufferte Lesevorgänge für bestimmte Laufwerke festgelegt. Wenn AL = 00H ist, ist der Status aktiviert, andernfalls deaktiviert. Wenn die Funktion erfolgreich ist, ist AX 0000H, wenn sie nicht erfolgreich ist, gibt AX den Status zurück.
INT 13H (0x13)
Funktion 38H (0x38 oder 56) --> Gepufferte Schreibvorgänge für bestimmte Laufwerke festlegen (QuickCache II v4.20)
Anruf mit: AH = 38H
AL = Neuer Status
DL = Laufwerksnummer
Rückgabe: Wenn die Funktion erfolgreich war,
AX = 0000H
Wenn die Funktion nicht erfolgreich ist,
AX = Status
Kommentare:
Mit dieser Funktion werden gepufferte Schreibvorgänge für bestimmte Laufwerke festgelegt. Wenn AL = 00H ist, ist der Status aktiviert, andernfalls deaktiviert. Wenn die Funktion erfolgreich ist, ist AX 0000H, wenn sie nicht erfolgreich ist, gibt AX den Status zurück.
INT 13H (0x13)
Funktion 39H (0x39 oder 57) --> Lesepuffergröße für bestimmtes Laufwerk festlegen (QuickCache II v4.20)
Anruf mit: AH = 39H
AL = Neue Größe des Lesepuffers
DL = Laufwerksnummer
Rückgabe: Wenn die Funktion erfolgreich war,
AX = 0000H
Wenn die Funktion nicht erfolgreich ist,
AX = Status
Kommentare:
Mit dieser Funktion wird die Lesepuffergröße für ein bestimmtes Laufwerk festgelegt, z. B. DL = 00H für A: usw. Wenn die Funktion erfolgreich ist, ist AX 0000H, wenn sie nicht erfolgreich ist, gibt AX den Status zurück.
INT 13H (0x13)
Funktion 3AH (0x3A oder 58) --> Schreibpuffergröße für bestimmtes Laufwerk festlegen (QuickCache II v4.20)
Call mit: AH = 3AH
AL = Neue Größe des Schreibpuffers
DL = Laufwerksnummer
Rückgabe: Wenn die Funktion erfolgreich war,
AX = 0000H
Wenn die Funktion nicht erfolgreich ist,
AX = Status
Kommentare:
Mit dieser Funktion wird die Schreibpuffergröße für ein bestimmtes Laufwerk festgelegt, z. B. DL = 00H für A: usw. Wenn die Funktion erfolgreich ist, ist AX 0000H, wenn sie nicht erfolgreich ist, gibt AX den Status zurück.
INT 13H (0x13)
Funktion 3DH (0x3D oder 61) --> Zylinderspülung für Laufwerk aktivieren/deaktivieren (QuickCache II v4.20)
Anruf mit: AH = 3DH
AL = Neuer Status
DL = Laufwerksnummer
Rückgabe: Wenn die Funktion erfolgreich war,
AX = 0000H
Wenn die Funktion nicht erfolgreich ist,
AX = Status
Kommentare:
Diese Funktion wird verwendet, um die Zylinderspülung für bestimmte Laufwerke zu aktivieren/deaktivieren, z. B. DL = 00H für A: usw. Wenn die Funktion erfolgreich ist, ist AX 0000H, wenn sie nicht erfolgreich ist, gibt AX den Status zurück. Wenn das AL-Register auf 01H eingestellt ist, ist der Status aktiviert, andernfalls deaktiviert.
INT 13H (0x13)
Funktion 3EH (0x3E oder 62) --> Einzelsektorbonus festlegen (QuickCache II v4.20)
Anruf mit: AH = 3EH
AL = Neuer Wert für Bonus
Rückgabe: Wenn die Funktion erfolgreich war,
AX = 0000H
Wenn die Funktion nicht erfolgreich ist,
AX = Status
Kommentare:
Mit dieser Funktion wird der Einzelsektorbonus festgelegt. Wenn die Funktion erfolgreich ist, ist AX 0000H, wenn nicht, gibt AX den Status zurück.
INT 13H (0x13)
Funktion 3FH (0x3F oder 63) --> Bonusschwelle festlegen (QuickCache II v4.20)
Anruf mit: AH = 3FH
AL = Neuer Wert für Bonusschwelle
Rückgabe: Wenn die Funktion erfolgreich war,
AX = 0000H
Wenn die Funktion nicht erfolgreich ist,
AX = Status
Kommentare:
Mit dieser Funktion wird der Bonus-Schwellenwert festgelegt. Wenn die Funktion erfolgreich ist, ist AX 0000H, wenn sie nicht erfolgreich ist, gibt AX den Status zurück
INT 13H (0x13)
Funktion 41H (0x41 oder 65) --> Installationsprüfung (IBM/MS INT 13H-Erweiterungen)
Call mit: AH = 41H
BX = 55AAH
DL = Laufwerksnummer (80H-FFH)
Rückgabe: Wenn Erweiterungen unterstützt werden und die Funktion erfolgreich ist,
Carry-Flag = Löschen
BX = AA55H
AH = Hauptversion der Erweiterungen (siehe
Tabelle in den Kommentaren)
AL = Interne Verwendung
CX = API-Subset-Support-Bitmap (siehe
Tabelle in den Kommentaren)
DH = Erweiterungsversion (v2.0 und höher)
Wenn die Erweiterung nicht unterstützt wird oder die Funktion nicht erfolgreich ist,
Carry-Flag = gesetzt
AH = 01H (Funktion ungültig)
Kommentare:
Diese Funktion prüft, ob die IBM/MS INT 13H-Erweiterungen installiert und unterstützt werden. Werte für die Hauptversionen der Erweiterungen sind in der folgenden Tabelle angegeben:
Wert
|
Hauptversion der Erweiterung
|
01 Uhr
|
1.x
|
20 Stunden
|
2.0 / EDD-1.0
|
21 Uhr
|
2.1 / EDD-1.1
|
30 Stunden
|
EDD-3.0
|
Die Bitfelder für das IBM/MS INT 13H Extensions API-Support-Bitmap sind in der folgenden Tabelle aufgeführt:
Bit(s)
|
Beschreibung
|
0
|
Erweiterte Festplattenzugriffsfunktionen (AH=42H, 43H, 44H, 47h und 48H) werden unterstützt.
|
1
|
Controllerfunktionen für entfernbare Laufwerke (AH=45H, 46H, 48H, 49H und INT15/AH =52H) werden unterstützt.
|
2
|
Verbesserte Festplattenlaufwerkfunktionen (EDD) (AH=48H und AH=4EH) werden unterstützt. Erweiterte Laufwerksparametertabelle ist gültig.
|
3-15
|
Reserviert (0)
|
INT 13H (0x13)
Funktion 42H (0x42 oder 66) --> Erweitertes Lesen (IBM/MS INT 13H-Erweiterungen)
Anruf mit: AH = 42H
DL = Laufwerksnummer
DS:SI = Disk-Adresspaket (siehe Tabelle in
Kommentare)
Rückgabe: Wenn die Funktion erfolgreich war,
Carry-Flag = Löschen
AH = 00H
Wenn die Funktion nicht erfolgreich ist,
Carry-Flag = gesetzt
AH = Fehlercode
Kommentare:
Diese Funktion ist die Erweiterung der Festplattenlesefunktion. Wenn die Funktion erfolgreich ist, ist das Carry-Flag gelöscht und das AH-Register ist 00H, andernfalls ist das Carry-Flag gesetzt und AH gibt den Fehlercode zurück. Das Blockzählfeld des Festplattenadresspakets ist auf die Anzahl der erfolgreich übertragenen Blöcke eingestellt. Das Format des Festplattenadresspakets ist unten angegeben:
Versatz
|
Größe
|
Beschreibung
|
00 Uhr
|
BYTE
|
Paketgröße (10H)
|
01 Uhr
|
BYTE
|
Reserviert (0)
|
02 Uhr
|
WORT
|
Anzahl der zu übertragenden Blöcke
|
04 Uhr
|
DWORD
|
Transferpuffer
|
08 Uhr
|
QWORT
|
Startende absolute Blocknummer (LBA)
|
INT 13H (0x13)
Funktion 43H (0x43 oder 67) --> Erweitertes Schreiben (IBM/MS INT 13H-Erweiterungen)
Anruf mit: AH = 43H
AL = Schreibe Flags (siehe Tabelle in
Kommentare)
DL = Laufwerksnummer.
DS:SI = Datenträgeradresspaket
Rückgabe: Wenn die Funktion erfolgreich war,
Carry Flag = löschen
AH = 00H
Wenn die Funktion nicht erfolgreich ist,
Carry-Flag = gesetzt
AH = Fehlercode
Kommentare:
Diese Funktion ist die Erweiterung der Disk-Schreibfunktion. Wenn die Funktion erfolgreich ist, ist das Carry-Flag gelöscht und das AH-Register ist 00H, andernfalls ist das Carry-Flag gesetzt und AH gibt den Fehlercode zurück. Das Blockzählfeld des Disk-Adresspakets wurde erfolgreich auf die Anzahl der Blöcke gesetzt. Die Informationen zu den Schreibflags für verschiedene Versionen sind in der folgenden Tabelle aufgeführt:
Version 1.0 und 2.0
|
Version 2.1 und höher
|
Wert
|
Beschreibung
|
Wert
|
Beschreibung
|
Bit 0
|
Schreiben überprüfen
|
00H und 01H
|
Schreiben ohne Verifizierung
|
Bits 1 bis 7
|
Reserviert (0)
|
02 Uhr
|
Schreiben mit Verify
|
INT 13H (0x13)
Funktion 44H (0x44 oder 68) --> Sektoren überprüfen (IBM/MS INT 13H-Erweiterungen)
Anruf mit: AH = 44H
DL = Laufwerksnummer
DS:SI = Datenträgeradresspaket
Rückgabe: Wenn die Funktion erfolgreich war,
Carry-Flag = Löschen
AH = 00H
Wenn die Funktion nicht erfolgreich ist,
Carry-Flag = gesetzt
AH = Fehlercode
Kommentare:
Diese Funktion ist die Erweiterung der Funktion „Sektoren überprüfen“. Wenn die Funktion erfolgreich ist, ist das Carry-Flag gelöscht und das AH-Register ist 00H, andernfalls ist das Carry-Flag gesetzt und AH gibt den Fehlercode zurück. Das Blockzählfeld des Datenträgeradresspakets wird erfolgreich auf die Anzahl der Blöcke gesetzt.
INT 13H (0x13)
Funktion 45H (0x45 oder 69) --> Laufwerk sperren/entsperren (IBM/MS INT 13H-Erweiterungen)
Anruf mit: AH = 45H
AL = Operationsnummer (siehe Tabelle in
Kommentare)
DL = Laufwerksnummer
Rückgabe: Wenn die Funktion erfolgreich war,
Carry-Flag = Löschen
AH = 00H
AL = Sperrzustand (00H = Entsperrt)
Wenn die Funktion nicht erfolgreich ist,
Carry-Flag = gesetzt
AH = Fehlercode
Kommentare:
Mit dieser Funktion können Sie das Laufwerk sperren/entsperren. Diese Funktion muss für alle Wechsellaufwerke mit der Nummer 80H oder höher unterstützt werden. Bis zu 255 Sperren können auf einem Laufwerk platziert werden, und das Medium wird erst dann physisch entsperrt, wenn alle Sperren entfernt wurden.
Wenn die Funktion erfolgreich ist, ist das Carry-Flag gelöscht und das AH-Register ist 00H, andernfalls ist das Carry-Flag gesetzt und AH gibt den Fehlercode zurück.
In der folgenden Tabelle sind die Vorgangsnummern für die verschiedenen Sperr-/Entsperrvorgänge des Laufwerks aufgeführt:
Wert
|
Funktion
|
00 Uhr
|
Medium im Laufwerk sperren
|
01 Uhr
|
Medien freischalten
|
02 Uhr
|
Sperrstatus prüfen
|
INT 13H (0x13)
Funktion 46H (0x46 oder 70) --> Medium auswerfen (IBM/MS INT 13H-Erweiterungen)
Anruf mit: AH = 46H
AL = 00H (reserviert)
DL = Laufwerksnummer
Rückgabe: Wenn die Funktion erfolgreich war,
Carry-Flag = Löschen
AH = 00H
Wenn die Funktion nicht erfolgreich ist,
Carry-Flag = gesetzt
AH = Fehlercode
Kommentare:
Diese Funktion dient zum Auswerfen von Medien. Wenn die Funktion erfolgreich ist, ist das Carry-Flag gelöscht und das AH-Register ist 00H, andernfalls ist das Carry-Flag gesetzt und AH gibt den Fehlercode zurück.
INT 13H (0x13)
Funktion 47H (0x47 oder 71) --> Erweiterte Suche (IBM/MS INT 13H-Erweiterungen)
Anruf mit: AH = 47H
DL = Laufwerksnummer
DS:SI = Datenträgeradresspaket
Rückgabe: Wenn die Funktion erfolgreich war,
Carry-Flag = Löschen
AH = 00H
Wenn die Funktion nicht erfolgreich ist,
Carry-Flag = gesetzt
AH = Fehlercode
Kommentare:
Diese Funktion ist die Erweiterung der Suchfunktion. Wenn die Funktion erfolgreich ist, ist das Carry-Flag gelöscht und das AH-Register ist 00H, andernfalls ist das Carry-Flag gesetzt und AH gibt den Fehlercode zurück. Das Blockzählfeld des Datenträgeradresspakets wurde erfolgreich auf die Anzahl der Blöcke gesetzt.
INT 13H (0x13)
Funktion 48H (0x48 oder 72) --> Laufwerksparameter abrufen (IBM/MS INT 13H-Erweiterungen)
Anruf mit: AH = 48H
DL = Antrieb (80H-FFH)
DS:SI = Puffer für Antriebsparameter
Rückgabe: Wenn die Funktion erfolgreich war,
Carry-Flag = Löschen
AH = 00H
DS:SI = Puffer gefüllt
Wenn die Funktion nicht erfolgreich ist,
Carry-Flag = gesetzt
AH = Fehlercode
Kommentare:
Mit dieser Funktion werden die Laufwerksparameter abgerufen. Wenn die Funktion erfolgreich ist, wird das Carry-Flag gelöscht und das AH-Register ist 00H mit DS:SI des gefüllten Puffers, andernfalls wird das Carry-Flag gesetzt und AH gibt den Fehlercode zurück.
INT 13H (0x13)
Funktion 49H (0x49 oder 73) --> Erweiterter Medienwechsel (IBM/MS INT 13H-Erweiterungen)
Anruf mit: AH = 49H
DL = Laufwerksnummer (beliebige Laufwerksnummer, siehe
Kommentare)
Rückgabe: Wenn das Medium nicht gewechselt wurde,
Carry-Flag = Löschen
AH = 00H
Wenn das Medium möglicherweise gewechselt wurde,
Carry-Flag = gesetzt
AH = 06H (Fehlercode für Medienwechsel)
Kommentare:
Diese Funktion ist die Erweiterung der Medienwechselfunktion. Wenn die Funktion erfolgreich ist, ist das Carry-Flag gelöscht und das AH-Register ist 00H, andernfalls ist das Carry-Flag gesetzt und AH gibt den Fehlercode zurück.
Der Hauptunterschied zwischen dieser Funktion und der Funktion AH = 16H von INT 13H besteht darin, dass wir jede beliebige Laufwerksnummer angeben können, wobei Funktion 16H nur die Laufwerksnummern 00H bis 7FH von Disketten zulässt.
INT 13H (0x13)
Funktion 4AH (0x4A oder 74) --> Disk-Emulation starten (Bootfähige CD-ROM)
Call mit: AH = 4AH
AL = 00H
DS:SI = Spezifikationspaket (siehe Tabelle in den Kommentaren)
Rückgabe: Wenn die Funktion erfolgreich war,
Carry-Flag = Löschen
Wenn die Funktion nicht erfolgreich ist,
Carry-Flag = gesetzt
AX = Statuscode
Kommentare:
Mit dieser Funktion wird die Plattenemulation gestartet. Wenn die Funktion erfolgreich ist, ist das Carry-Flag gelöscht, andernfalls ist das Carry-Flag gesetzt, das AX-Register gibt einen Statuscode zurück und das Laufwerk befindet sich nicht im Emulationsmodus.
Das Format des bootfähigen CD-ROM-Spezifikationspakets ist in der folgenden Tabelle angegeben:
Versatz
|
Größe
|
Beschreibung
|
00 Uhr
|
BYTE
|
Paketgröße in Bytes (13H)
|
01 Uhr
|
BYTE
|
Boot-Medientyp
|
02 Uhr
|
BYTE
|
Laufwerknummer
Laufwerknummer
|
Laufwerksbeschreibung
|
00 Uhr
|
Diskettenabbild
|
80 Stunden
|
Bootfähige Festplatte
|
81H zu FFH
|
Nicht bootfähig oder keine Emulation
|
|
03 Uhr
|
BYTE
|
CD-ROM-Controllernummer
|
04 Uhr
|
DWORD
|
Logische Blockadresse des Disk-Images zu Emu
|
08 Uhr
|
WORT
|
Gerätespezifikation
Wert
|
Beschreibung
|
(IDE) Bit 0
|
Laufwerk ist Slave statt Master
|
(SCSI) Bits 0 bis 7
|
LUN (Logical Unit Number) und PUN (Physical Unit Number)
|
Bits 8 bis 15
|
Busnummer
|
|
0AH
|
WORT
|
3-KB-Puffersegment zum Zwischenspeichern von CD-ROM-Lesevorgängen
|
0CH
|
WORT
|
Segment für erstes Boot-Image laden (wenn 0000H, bei Segment 07C0H laden)
|
0EH
|
WORT
|
Anzahl der zu ladenden 512-Byte-virtuellen Sektoren (nur gültig für Funktion 4CH von INT 13H)
|
10 Stunden
|
BYTE
|
Niedrigstes Byte der Zylinderanzahl (für Funktion 08H von INT 13H)
|
11 Uhr
|
BYTE
|
Sektorenanzahl, hohe Bits der Zylinderanzahl (für Funktion 08H von INT 13H)
|
12 Uhr
|
BYTE
|
Kopfzählung (für Funktion 08H von INT 13H)
|
Die Bitfelder für den Startmedientyp der bootfähigen CD-ROM sind in der folgenden Tabelle aufgeführt:
Bit(s)
|
Beschreibung
|
3:0
|
Medientyp
Wert
|
Beschreibung
|
0000
|
Keine Emulation.
|
0001
|
1,2 MB-Diskette.
|
0010
|
1,44-MB-Diskette.
|
0011
|
2,88-MB-Diskette.
|
0100
|
Festplatte (Laufwerk C:)
|
Andere
|
Reserviert
|
|
5-4
|
Reserviert (0)
|
6
|
Das Bild enthält den ATAPI-Treiber
|
7
|
Das Bild enthält SCSI-Treiber
|
INT 13H (0x13)
Funktion 4B00H (0x4B00) --> Disk-Emulation beenden (bootfähige CD-ROM)
Aufruf mit: AX = 4B00H
DL = Laufwerksnummer (oder 7FH zum Beenden
alle Emulationen)
DS:SI = Leeres Spezifikationspaket
Rückgabe: Wenn die Funktion erfolgreich war,
Carry-Flag = Löschen
Wenn die Funktion nicht erfolgreich ist,
Carry-Flag = gesetzt
AX = Statuscode
DS:SI = Spezifikationspaket ausgefüllt
Kommentare:
Mit dieser Funktion wird die Plattenemulation beendet. Wenn Sie alle Emulationen beenden möchten, rufen Sie die Funktion mit DL = 7FH auf. Wenn die Funktion erfolgreich ist, ist das Carry-Flag gelöscht, andernfalls ist das Carry-Flag gesetzt und das AX-Register gibt einen Statuscode zurück und das Laufwerk bleibt im Emulationsmodus.
INT 13H (0x13)
Funktion 4B01H (0x4B01) --> Status abrufen (Bootfähige CD-ROM)
Aufruf mit: AX = 4B01H
DL = Laufwerksnummer
DS:SI = Leeres Spezifikationspaket
Rückgabe: Wenn die Funktion erfolgreich war,
Carry-Flag = Löschen
Wenn die Funktion nicht erfolgreich ist,
Carry-Flag = gesetzt
AX = Statuscode
DS:SI = Spezifikationspaket ausgefüllt
Kommentare:
Die Funktion wird verwendet, um den Status abzurufen. Wenn die Funktion erfolgreich ist, ist das Carry-Flag gelöscht, andernfalls ist das Carry-Flag gesetzt und das AX-Register gibt den Statuscode zurück
INT 13H (0x13)
Funktion 4CH (0x4C oder 76) --> Disk-Emulation und Booten starten (bootfähige CD-ROM)
Anruf mit: AH = 4CH
AL = 00H
DS:SI = Spezifikationspaket
Rückgabe: Wenn die Funktion erfolgreich war,
Nichts
Wenn die Funktion nicht erfolgreich ist,
Carry-Flag = gesetzt
AX = Statuscode
Kommentare:
Mit dieser Funktion wird die Datenträgeremulation initiiert und das System gestartet. Wenn die Funktion erfolgreich ist, wird nichts zurückgegeben, andernfalls wird das Carry-Flag gesetzt und das AX-Register gibt den Statuscode zurück.
INT 13H (0x13)
Funktion 4D00H (0x4D00) --> Boot-Katalog zurückgeben (bootfähige CD-ROM)
Aufruf mit: AX = 4D00H
DS:SI = Befehlspaket (siehe Tabelle in
Kommentare)
Rückgabe: Wenn die Funktion erfolgreich war,
Carry-Flag = Löschen
Wenn die Funktion nicht erfolgreich ist,
Carry-Flag = gesetzt
AX = Statuscode
Kommentare:
Diese Funktion wird verwendet, um den Boot-Katalog zurückzugeben. Wenn die Funktion erfolgreich ist, ist das Carry-Flag gelöscht, andernfalls ist das Carry-Flag gesetzt und das AX-Register gibt einen Statuscode zurück. Das Format der bootfähigen CD-ROM des Befehlspakets „Get Boot Catalog“ ist in der folgenden Tabelle angegeben:
Versatz
|
Größe
|
Beschreibung
|
00 Uhr
|
BYTE
|
Paketgröße in Bytes (08H)
|
01 Uhr
|
BYTE
|
Anzahl der zu lesenden Sektoren des Bootkatalogs
|
02 Uhr
|
DWORD
|
Puffer für Bootkatalog
|
06 Uhr
|
WORT
|
Erster zu übertragender Sektor im Bootkatalog
|
INT 13H (0x13)
Funktion 4EH (0x4E oder 78) --> Hardwarekonfiguration festlegen (IBM/MS INT 13H Extensions v2.1)
Anruf mit: AH = 4EH
AL = Funktionsnummer (siehe Tabelle in den Kommentaren)
DL = Laufwerksnummer
Rückgabe: Wenn die Funktion erfolgreich war,
Carry-Flag = Löschen
AH = 00H
Wenn die Funktion nicht erfolgreich ist,
Carry-Flag = gesetzt
AH = Fehlercode
AL = Status
Kommentare:
Mit dieser Funktion wird die Hardwarekonfiguration eingestellt. Die Funktionsnummern für AL zum Aufrufen dieser Funktion sind in der folgenden Tabelle angegeben:
Wert
|
Beschreibung
|
00 Uhr
|
Prefetch aktivieren
|
01 Uhr
|
Prefetch deaktivieren
|
02 Uhr
|
Maximalen PIO-Übertragungsmodus festlegen
|
03 Uhr
|
PIO-Modus 0 einstellen
|
04 Uhr
|
Standard-PIO-Übertragungsmodus festlegen
|
05 Uhr
|
Aktivieren Sie den INT 13H DMA-Maximalmodus
|
06 Uhr
|
INT 13H DMA deaktivieren
|
DMA- und PIO-Modi schließen sich gegenseitig aus. Daher deaktiviert die Auswahl von DMA PIO entweder für das angegebene Gerät oder für alle Geräte auf diesem Controller. Die Auswahl von PIO deaktiviert DMA.
INT 13H (0x13)
Funktion 5001H (0x5001) --> Paketbefehl senden (Enhanced Disk Drive Spec v3.0)
Aufruf mit: AX = 5001H
DL = Laufwerksnummer
ES:BX = Befehlspaket (siehe Tabelle in
Kommentare)
Rückgabe: Wenn die Funktion erfolgreich war,
Carry-Flag = Löschen
AH = 00H
Wenn die Funktion nicht erfolgreich ist,
Carry-Flag = gesetzt
AH = Fehlercode
Kommentare:
Diese Funktion wird zum Senden der Paketbefehle verwendet. Wenn die Funktion erfolgreich ist, ist das Carry-Flag gelöscht und das AH-Register ist 00H, andernfalls ist das Carry-Flag gesetzt und AH gibt den Fehlercode zurück. Das Format des Befehlspakets Enhanced Disk Drive Spec v3.0 ist in der folgenden Tabelle angegeben:
Versatz
|
Größe
|
Beschreibung
|
00 Uhr
|
WORT
|
Signatur B055H
|
02 Uhr
|
BYTE
|
Länge des Pakets in Bytes
|
03 Uhr
|
BYTE
|
Reserviert (0)
|
04 Uhr
|
N BYTE
|
Formatierte Paketdaten
|
INT 13H (0x13)
Funktion 5501H (0x5501) --> Anfrage (Seagate ST01/ST02)
Aufruf mit: AX = 5501H
DH = Anzahl der zu übertragenden Bytes
DL = Laufwerksnummer
ES:BX = Puffer für Ergebnisse
Zurückkehren
ES:BX-Puffer, gefüllt mit den Abfrageergebnissen.
Kommentare:
Mit dieser Funktion können Sie Anfragen senden. Das ST01/ST02-BIOS gibt keine Erfolgs- oder Fehleranzeige für die Funktion zurück. Daher muss davon ausgegangen werden, dass alle Befehle erfolgreich waren.
Das ST01/ST02 BIOS ordnet seine Laufwerke immer nach den vorherigen BIOS-Laufwerken zu, ohne die BIOS-Laufwerksanzahl bei 0040H:0075H zu ändern. Dieser Befehl ist identisch mit dem SCSI Inquiry-Befehl
INT 13H (0x13)
Funktion 5502H (0x5502) --> Reserviert (Seagate ST01/ST02)
INT 13H (0x13)
Funktion 5503H (0x5503) --> DTQ (Device Type Qualifier) festlegen (Seagate ST01/ST02)
Aufruf mit: AX = 5503H
DH = DTQ-Byte (siehe Tabelle in
Kommentare)
DL = Laufwerksnummer
Rückgabe: Nichts
Kommentare:
Mit dieser Funktion wird der DTQ (Device Type Qualifier) gesetzt. Die Funktion gibt nichts zurück. Die Bitfelder für das DTQ-Byte sind in der folgenden Tabelle aufgeführt:
Bit(s)
|
Beschreibung
|
0
|
Seagate-Installationssoftware vorhanden
|
1
|
Ausgewähltes Laufwerk wurde installiert
|
2
|
Hostadapter prüft die Parität auf dem ausgewählten Laufwerk
|
3
|
Ausgewähltes Laufwerk ist ST225N
|
4
|
Ausgewähltes Laufwerk ist gepaart ST225N/NP
|
5
|
Reserviert
|
6
|
SCSI-Laufwerk angeschlossen
|
7
|
Reserviert
|
INT 13H (0x13)
Funktion 5504H (0x5504) --> Rückgabeidentifikation (Seagate ST01/ST02)
Aufruf mit: AX = 5504H
DL = Laufwerksnummer
Zurückkehren:
AX = 4321H
BL = ausgewählte Laufwerksnummer (00H, 01H)
BH = Anzahl der an den Host angeschlossenen Laufwerke
Adapter
Kommentare:
Die Funktion wird verwendet, um die Identifikation des/der Laufwerke zurückzugeben.
INT 13H (0x13)
Funktion 5505H (0x5505) --> Köpfe parken (Seagate ST01/ST02)
Aufruf mit: AX = 5505H
DL = Laufwerksnummer
DH = Unterfunktion (siehe Kommentare)
Zurückkehren:
Nichts
Kommentare:
Die Funktion wird verwendet, um die Köpfe der Platte zu parken. Sie wurde in alten Festplatten verwendet, moderne Festplatten benötigen jedoch kein externes Programm, um ihre Köpfe zu parken.
Die Unterfunktion 00H parkt die Köpfe (SCSI-Stopp-Befehl) und die Unterfunktion 01H entparkt die Köpfe (SCSI-Start-Befehl) der Platte.
INT 13H (0x13)
Funktion 5506H (0x5506) --> SCSI-Bus-Parität (Seagate ST01/ST02)
Aufruf mit: AX = 5506H
DL = Laufwerksnummer
DH = Unterfunktionsnummer (siehe
Kommentare)
Zurückkehren:
AL = Status (00H Paritätsprüfung
deaktiviert, 01H-Paritätsprüfung aktiviert)
Kommentare:
Rufen Sie die Funktion mit der folgenden Unterfunktionsnummer für DH auf:
Wert
|
Beschreibung
|
00 Uhr
|
Paritätsprüfung deaktivieren
|
01 Uhr
|
Paritätsprüfung aktivieren
|
02 Uhr
|
Aktuelle Paritätseinstellung zurückgeben
|
INT 13H (0x13)
Funktion 5507H (0x5507) bis Funktion 550DH (0x550D) --> Reservierte Funktionen (Seagate ST01/ST02)
Anruf mit: AX = 5507H bis AX = 550DH
Kommentare:
Diese Funktionen wurden offiziell als "Reserviert" aufgeführt
INT 13H (0x13)
Funktion A0H (0xA0 oder 160) --> Residentes Codesegment abrufen (Super PC-Kwik v3.20 und höher)
Anruf mit: AH = A0H
WENN = 4358H
Zurückkehren:
AX = Segment des Resident-Codes
Kommentare:
Mit dieser Funktion wird das Residentcodesegment abgerufen. AX gibt das Segment des Residentcodes zurück.
INT 13H (0x13)
Funktion A1H (0xA1 oder 161) --> Cache leeren (Super PC-Kwik v3.20 und höher)
Mitgehen mit: AH = A1H
WENN = 4358H
Zurückkehren:
Carry-Flag = Löschen
AH = 00H (v5.10)
Kommentare:
Die Funktion wird zum Leeren des Cache verwendet.
INT 13H (0x13)
Funktion A3H (0xA3 oder 163) --> Cache deaktivieren (Super PC- Kwik v3.20 und höher)
Call mit: AH = A3H
WENN = 4358H
Zurückkehren:
Carry-Flag = Löschen
Kommentare:
Die Funktion wird zum Deaktivieren des Cache verwendet.
INT 13H (0x13)
Funktion A4H (0xA4 oder 164) --> Cache aktivieren (Super PC-Kwik v3.20 und höher)
Call mit: AH = A4H
WENN = 4358H
Zurückkehren:
Carry-Flag = Löschen
Kommentare:
Diese Funktion wird verwendet, um den Cache zu aktivieren.
INT 13H (0x13)
Funktion EEH (0xEE oder 238) --> 1024-Zylinder-Flag setzen (SWBIOS)
Rufen Sie mit: AH = EEH
DL = Laufwerksnummer
Zurückkehren:
Carry-Flag = Löschen
AH = 00H
Kommentare:
Die Funktion wird verwendet, um 1024 – Zylinderflag zu setzen. Das Flag wird von allen INT 13H-Aufrufen außer AH=EEH und AH=EFH gelöscht. Disk Manager unterstützt diese Aufrufe ebenfalls. Diese Funktion entspricht dem Aufruf der Funktion AH=EFH mit CX=0400H für die Software, die diesen Aufruf unterstützt.
Diese Funktion wird auch von HyperDisk v4.01 und höher sowie PC-Cache v5.5 und höher unterstützt, um das Caching von Laufwerken mit SWBIOS für den Zugriff auf mehr als 1024 Zylinder zu ermöglichen.
INT 13H (0x13)
Funktion EFH (0xEF oder 239) --> Zylinderversatz einstellen (Ontrack Drive Rocket)
Rufen Sie mit: AH = EFH
CX = Zylinderoffset für nächsten INT 13H-Aufruf
DL = Laufwerksnummer
Zurückkehren:
Carry-Flag = Löschen
AH = 00H
Kommentare:
Die Funktion wird verwendet, um den Zylinderversatz einzustellen. Für Software, die diesen Aufruf unterstützt, ist die Funktion AH=EEH gleichbedeutend mit dem Aufruf dieser Funktion mit CX=0400H. Der Zylinderversatz wird von allen aufgerufenen INT 13H außer AH=EEH und AH=EFH auf 0 zurückgesetzt.
INT 13H (0x13)
Funktion F9H (0xF9 oder 249) --> Installationsprüfung (SWBIOS)
Anruf mit: AH = F9H
DL = Laufwerksnummer
Rückgabe: Wenn die Funktion erfolgreich war,
Carry-Flag = Löschen
DX = Konfigurationswort (siehe Kommentare)
Wenn die Funktion nicht erfolgreich ist,
Carry-Flag = gesetzt
Kommentare:
Diese Funktion wird zur Installationsprüfung verwendet. Wenn die Funktion erfolgreich ist, wird das Carry-Flag gelöscht und DX gibt das Konfigurationswort zurück, andernfalls wird das Carry-Flag gesetzt.
Bit 15 wird gesetzt, wenn andere SWBIOS-Erweiterungen verfügbar sind. Disk Manager unterstützt diese Aufrufe ebenfalls.
INT 13H (0x13)
Funktion FEH (0xFE oder 254) --> Erweiterte Zylinderanzahl abrufen (SWBIOS)
Anruf mit: AH = FEH
DL = Laufwerksnummer
Zurückkehren:
Carry-Flag = Löschen
DX = Anzahl der Zylinder über 1024
auf dem Laufwerk
Kommentare:
Mit dieser Funktion wird die erweiterte Zylinderanzahl ermittelt. Die Funktion AH = 08H von INT 13H gibt eine auf 1024 gekürzte Zylinderanzahl zurück. Das BIOS ohne diese Erweiterung würde eine Anzahl von Modulen 1024 zurückgeben. Disk Manager unterstützt diese Aufrufe ebenfalls.
INT 13H (0x13)
Funktion FFH (0xFF oder 255) --> Offiziell private Funktion (IBM SurePath BIOS)
INT 13H (0x13)
Funktion FFFFH (0xFFFF) --> Turbo-Modus einstellen (UNIQUE UX Turbo Utility)
Aufruf mit: AX = FFFFH
BH = AAH
BL = Unterfunktionsnummer (siehe Tabelle
in Kommentaren)
Rückgabe: Wenn installiert,
AX = 1234H
Kommentare:
Mit dieser Funktion wird der Turbo-Modus eingestellt. Die Unterfunktionsnummern zum Aufrufen der Funktion mit BL sind in der folgenden Tabelle angegeben:
Wert
|
Beschreibung
|
00 Uhr
|
Installationsprüfung
|
01 Uhr
|
Schalten Sie den Turbomodus ein
|
02 Uhr
|
Schalten Sie den Turbomodus aus
|
03 Uhr
|
Stellen Sie den Turbomodus gemäß dem Hardwareschalter ein
|
04 Uhr
|
Stellen Sie den Festplattenzugriff auf den Turbomodus ein
|
05 Uhr
|
Stellen Sie den Festplattenzugriff auf den Normalmodus ein
|
So verwenden Sie INT 13H-Erweiterungen in der C-Programmierung
Wir können die Erweiterungsfunktionen von INT 13H mit denselben C-Funktionen (int86(), int86x() usw.) aufrufen, die wir in den vorherigen Kapiteln verwendet haben. Lassen Sie uns dies anhand eines Beispiels lernen.
Im folgenden Beispiel liegt der Fokus auf den drei Funktionen (Vorhandene Erweiterungen prüfen, erweitertes Lesen und erweitertes Schreiben). Die erweiterte Schreibfunktion werden wir in diesem Kapitel jedoch nicht verwenden.
Das Programm prüft zunächst, ob Erweiterungen unterstützt werden oder nicht, wenn die Erweiterungen für INT 13H vorhanden sind. Es liest den absoluten Sektor 0 (also MBR) der Festplatte. Die Codierung des Programms erfolgt folgendermaßen:
/* Programm zum Zugriff auf Sektoren über 8,46 GB mithilfe der INT 13 BIOS-Erweiterungen */
#include<stdio.h>
#include<dos.h>
/* Ordnet den Bezeichner dem Datentyp zu */
Typdefinition: vorzeichenloses Zeichen Byte;
Typdefinition: unsigniertes int Word;
Typdefinition: vorzeichenloses langes DWord;
/* disk_packet-Struktur wird in DS:SI geladen und Befehl ausgeführt */
Struktur disk_packet
{
Byte size_pack; // Die Paketgröße muss 16 oder 16+ sein
Byte reserviert1; // Reserviert
Byte no_of_blocks;// Anzahl der zu übertragenden Blöcke
Byte reserviert2; // Reserviert
/* Adresse im Segment:Offset-Format */
Wortoffset; //Offsetadresse
Wortsegment; //Segmentadresse
/* Zur Unterstützung von Festplatten sogar mit einer Kapazität von 1152921504,607 GB */
DWord lba1;
DWord lba2;
}
Datenträgerpaket;
/* Funktion zum Überprüfen, ob die Erweiterungen unterstützt werden */
ungültige check_ext_present()
{
union REGS inregs, outregs; /* Eingaberegister und
Ausgabe */
inregs.h.ah=0x41; /* Zu prüfende Funktion
Erweiterung vorhanden */
inregs.x.bx=0x55AA;
inregs.h.dl=0x80; /* Laufwerksnummer für erste Festplatte */
int86(0x13,&inregs,&outregs); /*Unterbrechung aufrufen */
wenn(outregs.x.cflag)
{
/* Erweiterung nicht unterstützt */
printf("\nBios-Erweiterung wird nicht unterstützt");
Ausgang (1);
}
wenn(outregs.x.bx==0xAA55)
wenn(outregs.x.cx & 0x1)
/* Erweiterung vorhanden */
printf("\nErweiterte E/A wird unterstützt");
}
/* Funktion zum Lesen des Sektors */
void read_sectors(void *Puffer)
{
union REGS inregs, outregs; /* Eingabe und Ausgabe
Register */
struct SREGS segregs; // Segmentregister
disk_pack.size_pack=16; // Größe auf 16 setzen
disk_pack.no_of_blocks=1; // Ein Block
disk_pack.reserved1=0; // Reserviertes Wort
disk_pack.reserved2=0; // Reserviertes Wort
disk_pack.segment=FP_SEG(Puffer);// Segment des Puffers
disk_pack.offset=FP_OFF(Puffer); // Offset des Puffers
/* Anforderung des MBR von Festplatte 1 */
/* Absoluten Sektor 0 lesen */
disk_pack.lba1=0; /* LBA-Adresse, Enthält zuerst
32 Bit */
/* Normalerweise benötigen wir (Laufwerke < 2,1 TB) zum Einstellen
nur das */
disk_pack.lba2=0; // Letzte 32-Bit-Adresse
inregs.h.ah=0x42; // Zu lesende Funktion
inregs.h.dl=0x80; // Laufwerksnummer für erste Festplatte inregs.x.si = FP_OFF(&disk_pack); /*DS:SI-Punkt erstellen
zum Disk_Pack */
segregs.ds = FP_SEG(&disk_pack);
/* Anrufunterbrechung */
int86x(0x13,&inregs,&outregs,&segregs);
wenn(outregs.x.cflag)
printf("\n\nFehler %d\n",outregs.h.ah);
anders
printf("\n\nIch hoffe, alles ist in Ordnung");
}
//// Sektorfunktion schreiben \\\\
void write_sector()
{
/* Es wird auf die gleiche Weise wie die Funktion read_sectors geschrieben, außer dass die Funktionsnummer in dieser Funktion 0x43 ist. Wir werden die erweiterte Schreibfunktion in den nächsten Kapiteln besprechen.
Bevor Sie diese Funktion verwenden, prüfen Sie bitte, was Sie tun werden. Sie sollten genau wissen, was Sie tun werden. Die Verwendung dieser Funktion ohne Wissen oder aus Unachtsamkeit kann Ihre Daten zerstören. */
}
/// Hauptfunktion \\\\
void main()
{
} i = 0;
/* Puffer zur Aufnahme des MBR */
Byte mbr[512];
clrscr();
/* auf vorhandene BIOS-Erweiterung prüfen */
check_ext_present();
/* Sektor lesen */
Sektoren lesen(&mbr);
printf("\n\n Daten des MBR \n");
printf("▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀\n\n\n");
während(i++<512)
{
/* MBR-Puffer anzeigen */
printf("%c",mbr[i]);
}
}
Daten von MBR
Kommentare zur Kodierung des Programms
typedef Weist den Bezeichner dem Datentyp zu, sodass typedef unsigned char Byte den Bezeichner Byte dem Datentyp char zuweist. Ebenso wird der Bezeichner Word dem Datentyp int und DWord dem Datentyp long zugewiesen.
Die disk_packet-Struktur wird in DS:SI geladen und der Befehl (wie erweitertes Lesen, erweitertes Schreiben oder Überprüfen usw.) wird ausgeführt. Siehe die zuvor angegebenen Funktionen der IBM/MS INT 13H-Erweiterungen (Funktion 41H bis Funktion 49H).
Die Funktion check_ext_present() prüft, ob die Erweiterungen verfügbar/unterstützt sind oder nicht. Die Funktion wird mit BX=55AAH (inregs.x.bx=0x55AA;) aufgerufen und wenn Erweiterungen unterstützt werden, wird das BX-Register auf AA55H gesetzt. (Siehe Funktion 41H zuvor)
Die Funktion read_sectors wird verwendet, um den absoluten Sektor der Festplatte zu lesen, der durch disk_pack.lba1 angegeben wird. In diesem Programm haben wir disk_pack.lba1=0 angegeben, daher werden wir den absoluten Sektor 0 lesen (siehe Hinweis unten) und damit den MBR der Festplatte.
Die Funktion write_sector ist dieselbe wie die Funktion read_sectors und wird auf dieselbe Weise geschrieben, jedoch mit unterschiedlichen Funktionsoptionen. Wir werden sie in den nächsten Kapiteln verwenden.
Notiz:
Wir lesen die Festplattensektoren auf die folgenden zwei Arten:
- Relativer Sektor lesen (oder schreiben)
- Absolutes Sektorlesen (oder -schreiben)
Beim relativen Sektorlesen lesen wir die Festplattensektoren gemäß der CHS-Geometrie (Zylinder, Kopf und Sektor) der Festplatte. Beim relativen Sektorlesen befindet sich der MBR der Festplatte (erster Sektor der Festplatte) auf Zylinder 0, Kopf 0 und Sektor 1.
Beim absoluten Lesen der Plattensektoren müssen wir in unserem Programm weder Zylinder- noch Kopfnummern angeben. Die absoluten Sektoren werden ab dem absoluten Sektor 0 gezählt.
Wenn wir also den MBR der Festplatte (erster Sektor der Festplatte) lesen, lesen wir den absoluten Sektor 0. Es ist die Aufgabe des BIOS, die absolute Sektornummer in die entsprechende Zylinder-, Kopf- und Sektornummer umzuwandeln.
Da wir beim absoluten Sektorlesen (oder -schreiben) bei Vorgängen wie dem Lesen oder Schreiben der gesamten Festplatte nur die absoluten Sektoren innerhalb der Schleife berechnen müssen, müssen wir beim relativen Sektorlesen (oder -schreiben) zur Berechnung von CHS drei Schleifen gleichzeitig ausführen, weshalb das absolute Sektorlesen/-schreiben viel schneller ist als das relative Sektorlesen/-schreiben.
Wenn wir beispielsweise eine Festplatte mit 16 Köpfen (Seiten), 12 Zylindern und 63 Sektoren haben, zeigt die folgende Tabelle das Verfahren und die Unterschiede zwischen den beiden Lesemethoden und verdeutlicht so, wie der absolute Sektoransatz dazu führen kann, dass unsere zeitaufwändigen Programme (wie etwa Programme zum Lesen/Schreiben der gesamten Festplatte oder zum Löschen der gesamten Festplatte usw.) viel schneller ausgeführt werden:
Relative Sektorenwerte
|
Absoluter Sektorwert
|
Zylinder =0, Kopf =0, Sektor = 1
|
Absoluter Sektor = 0
|
Zylinder =0, Kopf =0, Sektor = 2
|
Absoluter Sektor = 1
|
Zylinder =0, Kopf =0, Sektor = 3
|
Absoluter Sektor = 2
|
.
.
.
.
|
.
.
.
.
|
Zylinder =0, Kopf =0, Sektor = 62
|
Absoluter Sektor = 61
|
Zylinder =0, Kopf =0, Sektor = 63
|
Absoluter Sektor = 62
|
Zylinder =0, Kopf =1, Sektor = 1
|
Absoluter Sektor = 63
|
Zylinder =0, Kopf =1, Sektor = 2
|
Absoluter Sektor = 64
|
Zylinder =0, Kopf =1, Sektor = 3
|
Absoluter Sektor = 65
|
Zylinder =0, Kopf =1, Sektor = 4
|
Absoluter Sektor = 66
|
.
.
.
.
|
.
.
.
.
|
Zylinder =0, Kopf =1, Sektor = 63
|
Absoluter Sektor = 125
|
Zylinder =0, Kopf =2, Sektor = 1
|
Absoluter Sektor = 126
|
Zylinder =0, Kopf =2, Sektor =2
|
Absoluter Sektor = 127
|
Zylinder =0, Kopf =2, Sektor = 3
|
Absoluter Sektor = 128
|
.
.
.
.
|
.
.
.
.
|
Zylinder =0, Kopf =15, Sektor = 63
|
Absoluter Sektor = 1007
|
Zylinder =1, Kopf =0, Sektor = 1
|
Absoluter Sektor = 1008
|
Zylinder =1, Kopf =0, Sektor =2
|
Absoluter Sektor = 1009
|
Zylinder =1, Kopf =0, Sektor = 3
|
Absoluter Sektor = 1010
|
.
.
.
.
|
.
.
.
.
|
Zylinder =1, Kopf =0, Sektor = 63
|
Absoluter Sektor = 1070
|
Zylinder =1, Kopf =1, Sektor = 1
|
Absoluter Sektor = 1071
|
Zylinder =1, Kopf =1, Sektor = 2
|
Absoluter Sektor = 1072
|
Zylinder =1, Kopf =1, Sektor = 3
|
Absoluter Sektor = 1073
|
.
.
.
.
|
.
.
.
.
|
Zylinder = 1, Kopf = 15, Sektor = 63
|
Absoluter Sektor = 2015
|
Zylinder =2, Kopf =0, Sektor =1
|
Absoluter Sektor = 2016
|
Zylinder =2, Kopf =0, Sektor =2
|
Absoluter Sektor = 2017
|
Zylinder =2, Kopf =0, Sektor =3
|
Absoluter Sektor = 2018
|
.
.
.
.
|
.
.
.
.
|
Zylinder = 11, Kopf = 15, Sektor = 60
|
Absoluter Sektor = 12092
|
Zylinder = 11, Kopf = 15, Sektor = 61
|
Absoluter Sektor = 12093
|
Zylinder = 11, Kopf = 15, Sektor = 62
|
Absoluter Sektor = 12094
|
Zylinder = 11, Kopf = 15, Sektor = 63
|
Absoluter Sektor = 12095
|
Nachfolgend finden Sie die Informationen zur MBR-Partitionstabelle, die von jedem MBR-Analysetool auf der Festplatte angezeigt werden:
Wird von jedem MBR-Analysetool auf der Festplatte angezeigt
In den obigen Informationen lauten die relativen Sektornummern für den Anfang beider Partitionen 63 bzw. 11277630, sie sind frei von Partitionen und werden entsprechend der Anzahl der auf der Festplatte verfügbaren Sektoren gezählt.