Kapitel – 9
Umgang mit großen Festplatten
Umgang mit großen Festplatten
Im vorherigen Kapitel haben wir die BIOS-Disk-Funktionen und die Verwendung von Interrupts für den Zugriff auf die physischen Medien der Festplatten besprochen. Wir haben dort INT 13H-Funktionen verwendet, um auf die Festplatten zuzugreifen.
Die INT 13H-Schnittstelle unterstützt viele verschiedene Befehle wie Lesen, Schreiben, Formatieren und Verifizieren usw., die an das BIOS gegeben werden können, das sie dann an die Festplatte weiterleitet. Da es von DOS schon lange verwendet wird, ist INT13H seit vielen Jahren der Standard.
Der INT 13H weist 24 Bits für die Spezifikation der Geometrie des Laufwerks zu und erfordert, dass das aufrufende Programm die spezifischen Parameter der Festplatte kennt und den Routinen eine genaue Kopf-, Zylinder- und Sektoradressierung liefert, um den Plattenzugriff zu ermöglichen.
Das BIOS verwendet die Geometrie für die Festplatte, wie sie im BIOS-Setup-Programm eingerichtet ist. Die 24 Bit, die von der INT 13H-Schnittstelle zur Spezifikation der Antriebsgeometrie belegt werden, teilen sich wie folgt auf:
- 10 Bit für die Zylindernummer. Somit kann die Höchstgrenze der Gesamtzahl von Zylindern bis zu 1.024 Zylinder betragen.
- 8 Bit für die Kopfnummer. Somit beträgt die Höchstgrenze der Gesamtkopfzahl bis zu 256.
- 6 Bit für die Sektornummer. Somit kann eine maximale Gesamtzahl von Sektoren bis zu 63 Sektoren betragen.
Somit können die maximal von diesem Ansatz unterstützten Sektoren bis zu 1024 * 256 * 63 = 16515072 betragen.
Das bedeutet, dass die INT13H-Schnittstelle Platten mit bis zu etwa 16,5 Millionen Sektoren unterstützen kann, was bei 512 Bytes pro Sektor zu maximal 8,46 GB führt. Genau das möchte ich erklären. Wenn wir also alle diese Funktionen oder INT 13H verwenden, können wir nur auf die Festplatten bis zu 8,46 GB zugreifen.
Aus diesem Grund haben die Einschränkungen dieser alten Schnittstelle in den letzten Jahren dazu geführt, dass sie zugunsten einer neuen Art der Adressierung von Festplatten aufgegeben wurde, wie im Folgenden 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 in meiner Schule von einer Festplatte mit einer Kapazität von 42 MB, vielleicht war es WDA-L42 von IBM. Es war wirklich schwierig für mich und meine Freunde, sich damals eine so große Festplattenkapazität vorzustellen.
Die INT 13H-Methodik wurde vor etwa zwanzig Jahren von heute entwickelt. Sie können jetzt verstehen, dass eine 8-GB-Festplatte viel größer war, um in diesem Alter sogar in Träume zu passen. Aber heute, wenn wir mit einem PC-Benutzer über eine 8-GB-Festplatte sprechen, wird er sie vielleicht nicht gerne verwenden und sagen, dass sie wenig Speicherkapazität hat.
Aus diesem Grund hat die INT 13H-Schnittstelle in modernen Systemen endgültig das Ende ihrer Nützlichkeit erreicht. INT 13H verwendete 24 Bit, um die Festplattengeometrie zuzuweisen, und leider war es nicht möglich, die vorhandene INT 13H-BIOS-Schnittstelle zu erweitern, da sonst viel ältere Hardware und Software nicht mehr funktionieren würde, und Sie können das auf dem heutigen Computermarkt verstehen kann es niemals ertragen, dass eine so große Änderung mit Millionen älterer Software- und Hardwareprodukte nicht mehr funktioniert.
Unter Berücksichtigung dieser Bedingung wurde INT 13H durch eine neuere Schnittstelle namens INT 13H-Erweiterungen ersetzt. INT 13H kann jedoch weiterhin von DOS und einigen anderen älteren Betriebssystemen und für andere Kompatibilitätszwecke 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 9400000000000 Gigabyte entspricht. Ich hoffe, dass wir jetzt einige Zeit entspannt sind, bis diese Grenze durchbrochen wird.
Einige wichtige Funktionen der Erweiterung für Interrupt 13H wurden als nächstes beschrieben. Sie können diese Funktionen beim Programmieren genauso verwenden wie die Funktionen von INT 13H. Aus diesem Grund werden diese Funktionen auch als Erweiterungen von INT 13H bezeichnet.
INT 13H-Erweiterungen:
GANZZAHL 13H (0x13)
Funktion 1BH (0x1B oder 27) --> Fertigungskopfzeile abrufen (ESDI-Festplatte)
Call with: AH = 1BH
AL = number of sector(s) to read
DL = drive
ES: BX = buffer for manufacturing header
(defect list)
Returns: If function successful
Carry flag = clear
AH = 00H
If function unsuccessful
Carry flag = set
AH = status
Comments:
Diese Funktion wird verwendet, um den Herstellungskopf der Festplatte zu erhalten. Der erste gelesene Sektor enthält den Herstellungskopf mit der Anzahl der Fehlereinträge und dem Beginn der Fehlerkarte; die verbleibenden Sektoren enthalten den Rest der Defektkarte. Das Manufacturing Header-Format (Defect Map Record-Format) finden Sie in IBM 70 MB, 115 MB Fixed Disk Drives Technical Reference.
GANZZAHL 13H (0x13)
Funktion 1BH (0x1B oder 27) --> Abrufen des Zeigers auf den SCSI-Datenträger-Informationsblock (zukünftiger Domänen-SCSI-Controller)
Call with: AH = 1BH
DL = hard drive ID
Returns: If function successful
Carry flag = clear
AH = 01H
If function unsuccessful
Carry flag = set
AH = status
ES:BX = SCSI disk information block
Comments:
Diese Funktion wird verwendet, um den Zeiger auf den SCSI Disk Information Block zu erhalten. Dadurch wird auch ein nicht rücksetzbares Flag gesetzt, das verhindert, dass einige Controller-Meldungen angezeigt werden.
GANZZAHL 13H (0x13)
Funktion 1CH (0x1C oder 28) --> Zeiger auf freien Controller-RAM abrufen (zukünftiger Domänen-SCSI-Controller)
Call with: AH = 1CH
DL = hard drive ID for any valid SCSI
hard disk
Returns: If function successful
Carry flag = clear
AH = 01H
If function unsuccessful
Carry flag = set
AH = status
ES:BX = first byte of free RAM on controller
Comments:
Diese Funktion wird verwendet, um den freien Controller-RAM zu erhalten. ES:BX zeigt auf das erste Byte des freien RAM auf dem Controller, der für andere Zwecke verfügbar ist. ES enthält das Segment, in dem sich der Controller befindet. Die beiden speicherabgebildeten I/O-Ports des Controllers befinden sich an den Offsets 1C00H und 1E00H.
GANZZAHL 13H (0x13)
Funktion 1C08H (0x1C08) --> Status der Befehlsausführung abrufen (ESDI-Festplatte)
Call with: AX = 1C08H
DL = drive
ES:BX = buffer for Command Complete
Status Block
Return: If function successful
Carry flag = clear
AH = 01H
If function unsuccessful
Carry flag = set
AH = status
Comments:
Diese Funktion wird verwendet, um den Status der Befehlsausführung abzurufen. Wenn die Funktion erfolgreich ist, wird das Übertrags-Flag gelöscht, und wenn nicht erfolgreich, wird das Übertrags-Flag gesetzt.
GANZZAHL 13H (0x13)
Funktion 1C09H (0x1C09) --> Gerätestatus abrufen (ESDI Fixed Disk)
Call with: AX = 1C09H
DL = drive
ES:BX = buffer for Device Status Block
Return: If function successful
Carry flag = clear
AH = 01H
If function unsuccessful
Carry flag = set
AH = status
Comments:
Diese Funktion wird verwendet, um den Gerätestatus abzurufen. Wenn die Funktion erfolgreich ist, wird das Übertrags-Flag gelöscht, und wenn nicht erfolgreich, wird das Übertrags-Flag gesetzt.
GANZZAHL 13H (0x13)
Funktion 1C0AH (0x1C0A) --> Gerätekonfiguration abrufen (ESDI Fixed Disk)
Call with: AX = 1C0AH
DL = drive
ES:BX = buffer for Drive Configuration Status
Block
Return: If function successful
Carry flag = clear
AH = 01H
If function unsuccessful
Carry flag = set
AH = status
Comments:
Diese Funktion wird verwendet, um die Gerätekonfiguration für die Festplatte abzurufen. 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 Statusblocks der ESDI-Laufwerkskonfiguration:
Offset
|
Size
|
Description
|
00H
|
Byte
|
09H
|
01H
|
Byte
|
number of words in block (06H)
|
02H
|
Byte
|
flags
|
03H
|
Byte
|
number of spare sectors per cylinder
|
04H
|
Double Word
|
total number of usable sectors
|
08H
|
Word
|
total number of cylinders
|
0AH
|
Byte
|
tracks per cylinder
|
0BH
|
Byte
|
sectors per track
|
GANZZAHL 13H (0x13)
Funktion 1C0BH (0x1C0B) --> Adapterkonfiguration abrufen (ESDI Fixed Disk)
Call with: AX = 1C0BH
ES:BX = buffer for Controller Configuration
Status Block
Return: If function successful
Carry flag = clear
AH = 01H
If function unsuccessful
Carry flag = set
AH = status
Comments:
Diese Funktion wird verwendet, um die Adapterkonfiguration abzurufen. Wenn die Funktion erfolgreich ist, ist das Carry-Flag gelöscht und AH ist 01H, wenn das Carry-Flag nicht erfolgreich ist, wird AH den Status zurückgeben.
GANZZAHL 13H (0x13)
Funktion 1C0CH (0x1C0C) --> POS-Informationen abrufen (ESDI Fixed Disk)
Call with: AX = 1C0CH
ES:BX = buffer for POS Information Status
Block
Return: If function successful
Carry flag = clear
AH = 01H
If function unsuccessful
Carry flag = set
AH = status
Comments:
Diese Funktion wird verwendet, um die POS-Informationen abzurufen. Wenn die Funktion erfolgreich ist, ist das Carry-Flag gelöscht und AH ist 01H, wenn das Carry-Flag nicht erfolgreich ist, wird AH den Status zurückgeben.
GANZZAHL 13H (0x13)
Funktion 1C0EH (0x1C0E) --> Übersetzen Sie RBA in ABA (ESDI Fixed Disk)
Call with: AX = 1C0EH
CH = low 8 bits of cylinder number
CL = sector number (high two bits of
cylinder number in bits 6 and 7)
DH = head number
DL = drive number
ES:BX = ABA (Absolute Block Address)
number
Return: If function successful
Carry flag = clear
AH = 01H
If function unsuccessful
Carry flag = set
AH = status
Comments:
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.
GANZZAHL 13H (0x13)
Funktion 20H (0x20 oder 32) --> Holen Sie sich das aktuelle Medienformat (Compaq ATAPI Wechselmediengerät)
Call with: AH = 20H
DL = drive number
Return: If Function Successful,
Carry Flag = clear
AL = media type
AH = 00H
If Function Unsuccessful,
CF = set
AH = error code
Comments:
Diese Funktion wird verwendet, um das aktuelle Medienformat abzurufen. Die Werte für den Compaq/ATAPI-Diskettenmedientyp sind in der folgenden Tabelle angegeben:
Value
|
Media
|
03H
|
720K (1M unformatted)
|
04H
|
1.44M (2M unformatted)
|
06H
|
2.88M (4M unformatted)
|
0CH
|
360K
|
0DH
|
1.2M
|
0EH
|
Toshiba 3mode
|
0FH
|
NEC 3mode (1024 bytes per sectors)
|
10H
|
ATAPI Removable Media Device
|
GANZZAHL 13H (0x13)
Funktion 21H (0x21 oder 33) --> Lesen mehrerer Festplattensektoren (PS und PS/2, Festplatten)
Call with: AH = 21H
AL = number of sectors to Read
CH = low byte of 12-bit cylinder number
CL = starting sector (bits 0 to 5) and bits 8
and 9 of cylinder (bits 6 and 7)
DH = head number (bits 0 to 5) and bits 10
and 11 of cylinder (bits 6 and 7)
DL = drive number
ES:BX = Data buffer to be read
Return: If Function Successful,
Carry flag = clear
ES:BX = Filled Data Buffer
If Function Unsuccessful,
Carry flag = set
AH = status
Comments:
Die Funktion wird verwendet, um die mehreren Festplattensektoren unter Verwendung des Mehrfachblockmodus zu lesen, der einen Interrupt nur nach dem Ende der Übertragung einer Gruppe von Sektoren und nicht nach jedem Sektor erzeugt.
GANZZAHL 13H (0x13)
Funktion 22H (0x22 oder 34) --> Schreiben mehrerer Festplattensektoren (PS und PS/2, Festplatten)
Call with: AH = 22H
AL = number of sectors to be written
CH = low byte of 12-bit cylinder number
CL = starting sector (bits 0 to 5) and bits 8
and 9 of cylinder (bits 6 and 7)
DH = head number (bits 0 to 5) and bits 10
and 11 of cylinder (bits 6 and 7)
DL = drive number
ES:BX = buffer containing data to be written
Return: If function Successful,
Carry Flag = clear
AH = 01H
If function Unsuccessful,
Carry Flag = Set
AH = Status
Comments:
Die Funktion wird verwendet, um die mehreren Festplattensektoren im Mehrfachblockmodus zu schreiben, der einen Interrupt nur nach dem Ende der Übertragung einer Gruppe von Sektoren und nicht nach jedem Sektor erzeugt.
GANZZAHL 13H (0x13)
Function 22H (0x22 or 34) --> Enable/Disable Cache (QuickCache II v4.20)
Call with: AH = 22H
AL = new state (00H, if disabled and 01H,
if enabled)
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = status
Comments:
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.
GANZZAHL 13H (0x13)
Funktion 23H (0x23 oder 35) --> Controller-Features einstellen Register (PS und PS/2, Festplatte)
Call with: AH = 23H
AL = feature number
DL = drive number
Return: If Function Successful,
Carry Flag = Clear
If Function Unsuccessful,
Carry Flag = Set
AH = Status
Comments:
Diese Funktion wird verwendet, um das Controller-Funktionsregister einzustellen. Wenn die Funktion erfolgreich ist, ist das Carry-Flag gelöscht und wenn das Carry-Flag nicht erfolgreich ist, wird das AH-Register gesetzt und gibt den Status zurück
GANZZAHL 13H (0x13)
Funktion 24H (0x24 oder 36) --> Mehrere einstellen – Übertragungsmodus (Festplatte, PS und PS/2)
Call with: AH = 24H
AL = number of sectors per block
DL = drive number
Return: If Function Successful,
Carry Flag = Clear
If Function Unsuccessful,
Carry Flag = Set
AH = Status
Comments:
Diese Funktion wird verwendet, um den Multiple – Transfer Mode einzustellen. Wenn Sie den Multiple – Transfer Mode deaktivieren möchten, setzen Sie die Anzahl der Sektoren auf 0. Der maximale Wert für die Blockgröße (z. B. 2,4,6,8 und 16 usw.) hängt vom Typ des Festplattenlaufwerks ab.
Der Wert wird in Byte 15H der Parametertabelle des Festplattenlaufwerks gespeichert, die durch POST (Power On Self-Test) erstellt wird. Das Byte an Adresse 0040H:0074H wird auf Betriebsstatus gesetzt. Die Werte für die Funktionsnummer der PS/1-Festplatte sind in der folgenden Tabelle aufgeführt:
Value
|
Description
|
01H
|
Select 8-bit data transfers instead of 16-bit
|
02H
|
Enable write cache
|
22H
|
Write Same, user-specified area
|
33H
|
Disable retries
|
44H
|
Set number of ECC bytes for read long/write long
|
54H
|
Set cache segments
|
55H
|
Disable look ahead
|
66H
|
Disable reverting to power-on defaults
|
77H
|
Disable error correction
|
81H
|
Select 16-bit data transfers (default)
|
82H
|
Disable write cache
|
88H
|
Enable error correction (default)
|
99H
|
Enable retries (default)
|
AAH
|
Enable look ahead
|
BBH
|
Set ECC length for read long/write long to four bytes
|
CCH
|
Enable reverting to power-on defaults
|
DDH
|
Write Same, entire disk
|
GANZZAHL 13H (0x13)
Funktion 24H (0x24 oder 36) --> Sektoren festlegen (QuickCache II v4.20)
Call with: AX = 24H
BX = New number of sector buffers in
cache
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Diese Funktion wird verwendet, um die Sektoren einzustellen. Wenn die Funktion erfolgreich ist, ist das AX-Register 0000H, sonst gibt AX den Status zurück.
GANZZAHL 13H (0x13)
Funktion 25H (0x25 oder 37) --> Laufwerk identifizieren (Festplatte, PS und PS/2)
Call with: AH = 25H
DL = Drive number
ES:BX = Buffer of 512 bytes for reply packet
Return: If Function Successful,
Carry Flag = Clear
Buffer filled with drive information block
If Function Unsuccessful,
Carry Flag = Set
AH = Status
Comments:
Diese Funktion wird verwendet, um das Laufwerk zu identifizieren. Das Byte an Adresse 0040h:0074h wird auf den Status der Operation gesetzt. IBM stuft diese Funktion offiziell als optional ein. Die Bitfelder für die allgemeine Antriebskonfiguration sind in der folgenden Tabelle angegeben:
Bit(s)
|
Description
|
0
|
Reserved (0)
|
1
|
Hard sectored
|
2
|
Soft sectored
|
3
|
Not MFM encoded
|
4
|
Head switch time greater than 15msec
|
5
|
Spindle motor control option implemented
|
6
|
Fixed drive
|
7
|
Removable cartridge drive
|
8
|
Disk transfer rate is less than or equal to 5Mbs
|
9
|
Disk transfer rate is greater than 5Mbs but less than or equal to 10Mbs
|
10
|
Disk transfer rate is greater than 10Mbs
|
11
|
Rotational speed tolerance is greater than 0.5%
|
12
|
Data strobe offset option available
|
13
|
Track offset option available
|
14
|
Format speed tolerance gap required
|
15
|
Reserved for non-magnetic drives (0)
|
Die Beschreibung des Informationsblocks „Format of Drive“ gemäß der ATA-Spezifikation (AT Attachment) ist in der folgenden Tabelle angegeben:
Offset
|
Size
|
Description
|
00H
|
WORD
|
General drive configuration
|
02H
|
WORD
|
Number of cylinders
|
04H
|
WORD
|
Reserved
|
06H
|
WORD
|
Number of heads
|
08H
|
WORD
|
Number of unformatted bytes per track
|
0AH
|
WORD
|
Number of unformatted bytes per sector
|
0CH
|
WORD
|
Number of sectors per track
|
0EH
|
6 BYTES
|
Vendor unique
|
14H
|
20 BYTES
|
Serial number in ASCII, (0000H=not specified)
|
28H
|
WORD
|
Buffer type
|
2AH
|
WORD
|
Buffer size in 512 byte increments (0000H=not specified)
|
2CH
|
WORD
|
Number of ECC bytes passed on Read/Write Long commands 0000H = not specified
|
2EH
|
8 BYTES
|
Firmware revision in ASCII, 0000H=not specified
|
36H
|
40 BYTES
|
Model number in ASCII, 0000H=not specified
|
5EH
|
WORD
|
Bits 15-8 Vendor Unique, bits 7-0, (if 00H = Read/Write Multiple commands not Implemented, else xxH = Maximum number of sectors that can be transferred per interrupt on Read and Write Multiple Commands)
|
60H
|
WORD
|
0000H = Cannot perform Doubleword I/O,
0001H = Can perform Doubleword I/O.
|
62H
|
WORD
|
Bit 15-9 (0=reserved),
bit 8 (1=DMA Supported),
Bit 7-0 Vendor Unique.
|
64H
|
WORD
|
Reserved
|
66H
|
WORD
|
Bits 15-8 PIO data transfer cycle timing mode, Bits 7-0 Vendor Unique
|
68H
|
WORD
|
Bits 15-8 DMA data transfer cycle timing mode, Bits 7-0 Vendor Unique
|
6AH
|
WORD
|
Bits 15-1 reserved,
bit 0 (1=the fields reported in translation mode are valid,
0=the fields reported in translation mode may be valid)
|
6CH
|
WORD
|
Number of current cylinders
|
6EH
|
WORD
|
Number of current heads
|
70H
|
WORD
|
Number of current sectors per track
|
72H
|
DWORD
|
Current capacity in sectors
|
76H
|
>WORD
|
Reserved
|
78H
|
136 BYTES
|
Not defined
|
100H
|
64 BYTES
|
Vendor unique
|
140H
|
96 BYTES
|
Reserved
|
GANZZAHL 13H (0x13)
Funktion 25H (0x25 oder 37) --> Leerungsintervall festlegen (QuickCache II v4.20)
Call with: AH = 25H
BX = Interval of Flush
Return: If Function Successful,
AH = 0000H
If Function Unsuccessful,
AH = status
Comments:
Diese Funktion wird verwendet, um das Spülintervall einzustellen. Wenn die Funktion erfolgreich ist, ist AH 0000H, sonst gibt AH den Status zurück.
GANZZAHL 13H (0x13)
Funktion 26H (0x26 oder 38) --> QuickCache II v4.20 deinstallieren
Call with: AH = 26H
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = status
Comments:
AX gibt den Status von 0001H bis 00FFH für den Unterbrechungsvektor zurück, der von einem anderen TSR eingehakt wurde
GANZZAHL 13H (0x13)
Funktion 27H (0x27 oder 39) --> Installationsprüfung (QuickCache II v4.20)
Call with: AH = 27H
BX = 0000H
Return: BH = Major Version
BL = Binary Minor Version
If installed,
AX = 0000H
BX = Non-zero
Comments:
Falls installiert, ist AX Register 0000H und BX gibt einen Wert ungleich Null zurück.
GANZZAHL 13H (0x13)
Funktion 28H (0x28 oder 40) --> Automatisches Aufheben der Bereitstellung festlegen (QuickCache II v4.20)
Call with: AH = 28H
AL = New State
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Rufen Sie die Funktion mit AL = 00H zum Deaktivieren und mit AL = 01H zum Aktivieren auf.
GANZZAHL 13H (0x13)
Funktion 29H (0x29 oder 41) --> Kein Vorgang (QuickCache II v4.20)
Call with: AH = 29H
Return: AX = 0000H
GANZZAHL 13H (0x13)
Funktion 2AH (0x2A oder 42) --> Puffergröße festlegen (QuickCache II v4.20)
Call with: AH = 2AH
AL = Buffer Size
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Diese Funktion wird verwendet, um die Puffergröße einzustellen. Wenn die Funktion erfolgreich ist, ist AX 0000H, wenn nicht erfolgreich, gibt AX den Status zurück.
GANZZAHL 13H (0x13)
Funktion 2BH (0x2B oder 43) --> Laufwerkzugriffsgeräusche (QuickCache II v4.20)
Call with: AH = 2BH
AL = new state (00h disabled, 01h
enabled)
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Wenn die Funktion erfolgreich ist, ist AX 0000H, wenn nicht erfolgreich, gibt AX den Status zurück. Rufen Sie die Funktion mit AL = 00H zum Deaktivieren und AL = 01H zum Aktivieren von Drive Access Sounds auf
GANZZAHL 13H (0x13)
Funktion 2CH (0x2C oder 44) --> Gepuffertes Schreiben einstellen (QuickCache II v4.20)
Call with: AH = 2CH
AL = new state
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
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.
GANZZAHL 13H (0x13)
Funktion 2DH (0x2D oder 45) --> Gepuffertes Lesen einstellen (QuickCache II v4.20)
Call with: AH = 2Dh
AL = new state (00h disabled, 01h
enabled)
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
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.
GANZZAHL 13H (0x13)
Funktion 2EH (0x2E oder 46) --> Flush-Zähler festlegen (QuickCache II v4.20)
Call with: AH = 2EH
BX = Flush count
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Diese Funktion wird verwendet, um den Spülzähler einzustellen. Wenn die Funktion erfolgreich ist, ist AX 0000H, wenn nicht erfolgreich, gibt AX den Status zurück.
GANZZAHL 13H (0x13)
Funktion 2FH (0x2F oder 47) --> Sofortige inkrementelle Leerung erzwingen (QuickCache II v4.20)
Call with: AH = 2FH
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Wenn die Funktion erfolgreich ist, ist AX 0000H, wenn nicht erfolgreich, gibt AX den Status zurück.
GANZZAHL 13H (0x13)
Funktion 30H (0x30 oder 48) --> Informationen abrufen (QuickCache II v4.20)
Call with: AH = 30H
AL = Information Number (See Table in
Comments)
DS:DX = buffer for info
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Diese Funktion wird verwendet, um die verschiedenen Arten von Informationen über das System zu erhalten, die von AL angegeben werden. Wenn die Funktion erfolgreich ist, ist AX 0000H, wenn nicht erfolgreich, gibt AX den Status zurück. AX = 8000H gibt den ungültigen Informationsbezeichner an. Die an AL zu übermittelnden Informationsnummern sind in der folgenden Tabelle aufgeführt:
Value
|
Description
|
00H
|
System information
|
01H
|
Drive information
|
02H
|
Access frequency (Array of 30 words)
|
03H
|
Drive Index (Array of 32 bytes indicating BIOS drive for DOS drive)
|
GANZZAHL 13H (0x13)
Funktion 31H (0x31 oder 49) --> Speicher reservieren (QuickCache II v4.20)
Call with: AH = 31H
BX = Number of paragraphs of
conventional memory to reserve for
Applications.
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Diese Funktion wird verwendet, um den Speicher für Anwendungen zu reservieren. Wenn die Funktion erfolgreich ist, ist AX 0000H, wenn nicht erfolgreich, gibt AX den Status zurück.
GANZZAHL 13H (0x13)
Funktion 32H (0x32 oder 50) --> Caching für bestimmtes Laufwerk aktivieren (QuickCache II v4.20)
Call with: AH = 32H
AL = drive number
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Diese Funktion wird verwendet, um das Caching für bestimmte Laufwerke zu aktivieren. Rufen Sie beispielsweise Function mit AL = 00H für A: auf und so weiter. Wenn die Funktion erfolgreich ist, ist AX 0000H, wenn nicht erfolgreich, gibt AX den Status zurück.
GANZZAHL 13H (0x13)
Funktion 33H (0x33 oder 51) --> Caching für bestimmtes Laufwerk deaktivieren (QuickCache II v4.20)
Call with: AH = 33H
AL = drive number
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Diese Funktion wird verwendet, um das Caching für bestimmte Laufwerke zu deaktivieren. Rufen Sie beispielsweise Function mit AL = 00H für A: auf und so weiter. Wenn die Funktion erfolgreich ist, ist AX 0000H, wenn nicht erfolgreich, gibt AX den Status zurück.
GANZZAHL 13H (0x13)
Funktion 34H (0x34 oder 52) --> Sektor(en) sperren/entsperren (QuickCache II v4.20)
Call with: AH = 34H
AL = Locking/Unlocking function number
(See the Table Given in Comments)
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Diese Funktion wird verwendet, um Sperr-/Entsperrfunktionen von Sektoren aufzurufen, die durch AL spezifiziert sind. Wenn die Funktion erfolgreich ist, ist AX 0000H, wenn nicht erfolgreich, gibt AX den Status zurück. Die verschiedenen mit AL aufzurufenden Funktionsnummern sind in der folgenden Tabelle angegeben:
Value
|
Function
|
00H
|
End sector locking/unlocking
|
01H
|
Lock all accessed sectors into cache
|
02H
|
Unlock all accessed sectors and discard from cache
|
GANZZAHL 13H (0x13)
Funktion 35H (0x35 oder 53) --> Größe des Sperrpools festlegen (QuickCache II v4.20)
Call with: AH = 35H
BX = Number of sectors in lock pool
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Diese Funktion wird verwendet, um die Größe des Sperrpools festzulegen. Wenn die Funktion erfolgreich ist, ist AX 0000H, wenn nicht erfolgreich, gibt AX den Status zurück.
GANZZAHL 13H (0x13)
Funktion 36H (0x36 oder 54) --> Legen Sie die Trace-Puffergröße fest
Call with: AH = 36H
AL = New size of trace buffer
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Diese Funktion wird verwendet, um die Trace-Puffergröße einzustellen. Wenn die Funktion erfolgreich ist, ist AX 0000H, wenn nicht erfolgreich, gibt AX den Status zurück. Diese Funktion wird normalerweise mit Funktion 24H von INT 13H mit AL=05H aufgerufen.
GANZZAHL 13H (0x13)
Funktion 37H (0x37 oder 55) --> Gepufferte Lesevorgänge für bestimmtes Laufwerk festlegen (QuickCache II v4.20)
Call with: AH = 37H
AL = New state
DL = Drive number
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Diese Funktion wird verwendet, um gepufferte Lesevorgänge für bestimmte Laufwerke festzulegen. Wenn AL = 00H ist, ist der Zustand aktiviert, andernfalls deaktiviert. Wenn die Funktion erfolgreich ist, ist AX 0000H, wenn nicht erfolgreich, gibt AX den Status zurück.
GANZZAHL 13H (0x13)
Funktion 38H (0x38 oder 56) --> Gepufferte Schreibvorgänge für bestimmtes Laufwerk festlegen (QuickCache II v4.20)
Call with: AH = 38H
AL = New state
DL = Drive number
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Diese Funktion wird verwendet, um gepufferte Schreibvorgänge für bestimmte Laufwerke festzulegen. Wenn AL = 00H ist, ist der Zustand aktiviert, andernfalls deaktiviert. Wenn die Funktion erfolgreich ist, ist AX 0000H, wenn nicht erfolgreich, gibt AX den Status zurück.
GANZZAHL 13H (0x13)
Funktion 39H (0x39 oder 57) --> Legen Sie die Lesepuffergröße für ein bestimmtes Laufwerk fest (QuickCache II v4.20)
Call with: AH = 39H
AL = New size of read buffer
DL = Drive number
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Diese Funktion wird verwendet, um die Größe des Lesepuffers für bestimmte Laufwerke festzulegen, wie z. B. DL = 00H für A: und so weiter. Wenn die Funktion erfolgreich ist, ist AX 0000H, wenn nicht erfolgreich, gibt AX den Status zurück.
GANZZAHL 13H (0x13)
Funktion 3AH (0x3A oder 58) --> Legen Sie die Schreibpuffergröße für ein bestimmtes Laufwerk fest (QuickCache II v4.20)
Call with: AH = 3AH
AL = New size of Write buffer
DL = Drive number
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Diese Funktion wird verwendet, um die Größe des Schreibpuffers für bestimmte Laufwerke festzulegen, wie z. B. DL = 00H für A: und so weiter. Wenn die Funktion erfolgreich ist, ist AX 0000H, wenn nicht erfolgreich, gibt AX den Status zurück.
GANZZAHL 13H (0x13)
Funktion 3DH (0x3D oder 61) --> Zylinderspülung für Laufwerk aktivieren/deaktivieren (QuickCache II v4.20)
Call with: AH = 3DH
AL = New state
DL = drive number
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Diese Funktion wird verwendet, um die Zylinderspülung für bestimmte Laufwerke zu aktivieren/deaktivieren, wie z. B. DL = 00H für A: und so weiter. Wenn die Funktion erfolgreich ist, ist AX 0000H, wenn nicht erfolgreich, gibt AX den Status zurück. Wenn das AL-Register auf 01H gesetzt ist, ist der Zustand aktiviert, andernfalls deaktiviert.
GANZZAHL 13H (0x13)
Funktion 3EH (0x3E oder 62) --> Einzelsektorbonus festlegen (QuickCache II v4.20)
Call with: AH = 3EH
AL = New value for bonus
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Diese Funktion wird verwendet, um den Einzelsektorbonus einzustellen. Wenn die Funktion erfolgreich ist, ist AX 0000H, wenn nicht erfolgreich, gibt AX den Status zurück.
GANZZAHL 13H (0x13)
Funktion 3FH (0x3F oder 63) --> Set Bonus Thrashhold (QuickCache II v4.20)
Call with: AH = 3FH
AL = New value for bonus threshold
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Diese Funktion wird verwendet, um den Bonus-Schwellenwert festzulegen. Wenn die Funktion erfolgreich ist, ist AX 0000H, wenn nicht erfolgreich, gibt AX den Status
zurück
GANZZAHL 13H (0x13)
Funktion 41H (0x41 oder 65) --> Installationsprüfung (IBM/MS INT 13H-Erweiterungen)
Call with: AH = 41H
BX = 55AAH
DL = Drive number (80H-FFH)
Return: If Extensions Supported and Function Successful,
Carry Flag = Clear
BX = AA55H
AH = Major version of extensions (See the
table in Comments)
AL = Internal use
CX = API subset support bitmap (See the
Table in Comments)
DH = Extension version (v2.0 and later)
If Extension not Supported or Function Unsuccessful,
Carry Flag = set
AH = 01H (Function Invalid)
Comments:
Diese Funktion prüft, ob die IBM/MS INT 13H Extensions installiert sind und unterstützt werden. Werte für Hauptversionen von Erweiterungen sind in der folgenden Tabelle angegeben:
Value
|
Major Version of Extension
|
01H
|
1.x
|
20H
|
2.0 / EDD-1.0
|
21H
|
2.1 / EDD-1.1
|
30H
|
EDD-3.0
|
Die Bit-Felder für die Bitmap zur Unterstützung der IBM/MS INT 13H-Erweiterungs-API sind in der folgenden Tabelle angegeben:
Bit(s)
|
Description
|
0
|
Extended disk access functions (AH=42H, 43H, 44H, 47h and 48H) supported.
|
1
|
Removable drive controller functions (AH=45H, 46H, 48H, 49H, and INT15/AH =52H) supported.
|
2
|
Enhanced disk drive (EDD) functions (AH=48H and AH=4EH) supported. Extended drive parameter table is valid.
|
3-15
|
Reserved (0)
|
GANZZAHL 13H (0x13)
Funktion 42H (0x42 oder 66) --> Erweitertes Lesen (IBM/MS INT 13H-Erweiterungen)
Call with: AH = 42H
DL = Drive number
DS:SI = Disk address packet (See the table in
comments)
Return: If Function Successful,
Carry Flag = Clear
AH = 00H
If Function Unsuccessful,
Carry Flag = Set
AH = error code
Comments:
Diese Funktion ist die Erweiterung für die 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 Plattenadresspakets wird auf die Anzahl der erfolgreich übertragenen Blöcke gesetzt. Das Format des Plattenadressenpakets ist unten angegeben:
Offset
|
Size
|
Description
|
00H
|
BYTE
|
Size of Packet (10H)
|
01H
|
BYTE
|
Reserved (0)
|
02H
|
WORD
|
Number of blocks to transfer
|
04H
|
DWORD
|
Transfer buffer
|
08H
|
QWORD
|
Starting absolute block number (LBA)
|
GANZZAHL 13H (0x13)
Funktion 43H (0x43 oder 67) --> Erweitertes Schreiben (IBM/MS INT 13H-Erweiterungen)
Call with: AH = 43H
AL = write flags (See the table in
comments)
DL = drive number.
DS:SI = disk address packet
Return: If Function Successful,
Carry Flag = clear
AH = 00H
If Function Unsuccessful,
Carry Flag = set
AH = error code
Comments:
Diese Funktion ist die Erweiterung für die Festplattenschreibfunktion. 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 Plattenadresspakets wird erfolgreich auf die Anzahl der Blöcke gesetzt. Die Informationen der Schreib-Flags für verschiedene Versionen sind in der folgenden Tabelle angegeben:
Version 1.0 and 2.0
|
Version 2.1 and later
|
Value
|
Description
|
Value
|
Description
|
Bit 0
|
Verify Write
|
00H and 01H
|
Write without Verify
|
Bits 1 to 7
|
Reserved (0)
|
02H
|
Write with verify
|
GANZZAHL 13H (0x13)
Funktion 44H (0x44 oder 68) --> Sektoren überprüfen (IBM/MS INT 13H-Erweiterungen)
Call with: AH = 44H
DL = drive number
DS:SI = disk address packet
Return: If Function Successful,
Carry Flag = Clear
AH = 00H
If Function Unsuccessful,
Carry Flag = Set
AH = error code
Comments:
Diese Funktion ist die Erweiterung für die 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 Feld für die Blockanzahl des Plattenadresspakets wurde erfolgreich auf die Anzahl der Blöcke gesetzt
GANZZAHL 13H (0x13)
Funktion 45H (0x45 oder 69) --> Laufwerk sperren/entsperren (IBM/MS INT 13H Extensions)
Call with: AH = 45H
AL = Operation Number (See the Table in
comments)
DL = Drive number
Return: If Function Successful,
Carry Flag = Clear
AH = 00H
AL = Lock State (00H = Unlocked)
If Function Unsuccessful,
Carry Flag = Set
AH = Error code
Comments:
Diese Funktion dient zum Sperren/Entsperren des Laufwerks. Diese Funktion muss für alle Wechseldatenträger mit der Nummer 80H oder höher unterstützt werden. Auf einem Laufwerk können bis zu 255 Sperren angebracht werden, und die Medien werden nicht physisch entsperrt, bis 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.
Operationsnummern für verschiedene Sperr-/Entsperroperationen des Laufwerks sind in der folgenden Tabelle angegeben:
Value
|
Function
|
00H
|
Lock media in drive
|
01H
|
Unlock media
|
02H
|
Check lock status
|
GANZZAHL 13H (0x13)
Funktion 46H (0x46 oder 70) --> Medien auswerfen (IBM/MS INT 13H-Erweiterungen)
Call with: AH = 46H
AL = 00H (reserved)
DL = Drive number
Return: If Function Successful,
Carry Flag = Clear
AH = 00H
If Function Unsuccessful,
Carry Flag = Set
AH = error code
Comments:
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.
GANZZAHL 13H (0x13)
Funktion 47H (0x47 oder 71) --> Erweiterte Suche (IBM/MS INT 13H-Erweiterungen)
Call with: AH = 47H
DL = Drive number
DS:SI = Disk address packet
Return: If Function Successful,
Carry Flag = Clear
AH = 00H
If Function Unsuccessful,
Carry Flag = Set
AH = error code
Comments:
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 Feld für die Blockanzahl des Plattenadresspakets wurde erfolgreich auf die Anzahl der Blöcke gesetzt.
GANZZAHL 13H (0x13)
Funktion 48H (0x48 oder 72) --> Laufwerksparameter abrufen (IBM/MS INT 13H-Erweiterungen)
Call with: AH = 48H
DL = Drive (80H-FFH)
DS:SI = Buffer for drive parameters
Return: If Function Successful,
Carry Flag = Clear
AH = 00H
DS:SI = Buffer filled
If Function Unsuccessful,
Carry Flag = Set
AH = Error code
Comments:
Diese Funktion wird verwendet, um die Antriebsparameter abzurufen. Wenn die Funktion erfolgreich ist, ist das Carry-Flag gelöscht und das AH-Register ist 00H mit DS:SI des gefüllten Puffers, andernfalls ist das Carry-Flag gesetzt und AH gibt den Fehlercode zurück.
GANZZAHL 13H (0x13)
Funktion 49H (0x49 oder 73) --> Erweiterter Medienwechsel (IBM/MS INT 13H-Erweiterungen)
Call with: AH = 49H
DL = Drive number (any drive number, see
Comments)
Return: If media has not been changed,
Carry Flag = Clear
AH = 00H
If media may have been changed,
Carry Flag = Set
AH = 06H (Error code for media change)
Comments:
Diese Funktion ist die Erweiterung für die 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 eine beliebige Laufwerksnummer angeben können, wobei die Funktion 16H nur die Laufwerksnummern 00H bis 7FH von Disketten zulässt.
GANZZAHL 13H (0x13)
Funktion 4AH (0x4A oder 74) --> Disk-Emulation starten (bootfähige CD-ROM)
Call with: AH = 4AH
AL = 00H
DS:SI = Specification packet (see the Table in comments)
Return: If Function Successful,
Carry Flag = Clear
If Function unsuccessful,
Carry Flag = Set
AX = Status Code
Comments:
Diese Funktion wird verwendet, um die Disk-Emulation zu initiieren. 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 und das Laufwerk befindet sich nicht im Emulationsmodus.
Das Format des bootfähigen CD-ROM-Spezifikationspakets ist in der folgenden Tabelle angegeben:
Offset
|
Size
|
Description
|
00H
|
BYTE
|
Size of packet in bytes (13H)
|
01H
|
BYTE
|
Boot media type
|
02H
|
BYTE
|
Drive Number
Drive Number
|
Drive Description
|
00H
|
Floppy image
|
80H
|
Bootable hard disk
|
81H to FFH
|
Non bootable or no Emulation
|
|
03H
|
BYTE
|
CD-ROM controller number
|
04H
|
DWORD
|
Logical Block Address of disk image to Emu
|
08H
|
WORD
|
Device Specification
Value
|
Description
|
(IDE) Bit 0
|
Drive is slave instead of master
|
(SCSI) Bits 0 to 7
|
LUN (Logical Unit Number) and PUN (Physical Unit Number)
|
Bits 8 to 15
|
Bus Number
|
|
0AH
|
WORD
|
Segment of 3Kb buffer for caching CD-ROM reads
|
0CH
|
WORD
|
Load segment for initial boot image (if 0000H, load at segment 07C0H)
|
0EH
|
WORD
|
Number of 512-byte virtual sectors to load (only valid for Function 4CH of INT 13H)
|
10H
|
BYTE
|
Low byte of cylinder count (for Function 08H of INT 13H)
|
11H
|
BYTE
|
Sector count, high bits of cylinder count (for Function 08H of INT 13H)
|
12H
|
BYTE
|
Head count (for Function 08H of INT 13H)
|
The Bit fields for Bootable CD-ROM boot media type have been given in the following table:
Bit(s)
|
Description
|
3-0
|
Media type
Value
|
Description
|
0000
|
No emulation.
|
0001
|
1.2M diskette.
|
0010
|
1.44M diskette.
|
0011
|
2.88M diskette.
|
0100
|
Hard disk (drive C:)
|
Other
|
Reserved
|
|
5-4
|
Reserved (0)
|
6
|
Image contains ATAPI driver
|
7
|
Image contains SCSI driver(s)
|
GANZZAHL 13H (0x13)
Funktion 4B00H (0x4B00) --> Festplattenemulation beenden (bootfähige CD-ROM)
Call with: AX = 4B00H
DL = Drive number (or 7FH to terminate
all emulations)
DS:SI = Empty specification packet
Return: If Function Successful,
Carry Flag = Clear
If Function Unsuccessful,
Carry Flag = Set
AX = Status code
DS:SI = Specification packet filled
Comments:
Diese Funktion wird verwendet, um die Disk-Emulation zu beenden. 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 wird das Carry-Flag gesetzt und das AX-Register gibt den Statuscode zurück und das Laufwerk bleibt im Emulationsmodus.
GANZZAHL 13H (0x13)
Funktion 4B01H (0x4B01) --> Status abrufen (bootfähige CD-ROM)
Call with: AX = 4B01H
DL = Drive number
DS:SI = Empty specification packet
Return: If Function Successful,
Carry Flag = Clear
If Function Unsuccessful,
Carry Flag = Set
AX = Status code
DS:SI = Specification packet filled
Comments:
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
GANZZAHL 13H (0x13)
Funktion 4CH (0x4C oder 76) --> Datenträgeremulation initiieren und booten (bootfähige CD-ROM)
Call with: AH = 4CH
AL = 00H
DS:SI = Specification packet
Return: If Function Successful,
Nothing
If Function Unsuccessful,
Carry Flag = Set
AX = Status code
Comments:
Diese Funktion wird verwendet, um die Festplattenemulation zu initiieren und das System zu booten. Wenn die Funktion erfolgreich ist, wird nichts zurückgegeben, sonst wird das Carry-Flag gesetzt und das AX-Register gibt den Statuscode zurück.
GANZZAHL 13H (0x13)
Function 4D00H (0x4D00) --> Return Boot Catalog (Bootable CD-ROM)
Call with: AX = 4D00H
DS:SI = Command packet (See the Table in
comments)
Return: If Function Successful,
Carry Flag = Clear
If Function Unsuccessful,
Carry Flag = Set
AX = Status code
Comments:
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 den Statuscode zurück. Das Format der bootfähigen CD-ROM von "Get Boot Catalog" Befehlspaket wurde in der folgenden Tabelle angegeben:
Offset
|
Size
|
Description
|
00H
|
BYTE
|
Size of packet in bytes (08H)
|
01H
|
BYTE
|
Number of sectors of boot catalog to read
|
02H
|
DWORD
|
Buffer for boot catalog
|
06H
|
WORD
|
First sector in boot catalog to transfer
|
GANZZAHL 13H (0x13)
Funktion 4EH (0x4E oder 78) --> Hardwarekonfiguration festlegen (IBM/MS INT 13H Extensions v2.1)
Call with: AH = 4EH
AL = Function Number ( See the Table in comments)
DL = Drive number
Return: If Function Successful,
Carry Flag = Clear
AH = 00H
If Function Unsuccessful,
Carry Flag = Set
AH = error code
AL = Status
Comments:
Diese Funktion wird verwendet, um die Hardwarekonfiguration einzustellen. Die Funktionsnummern für AL zum Aufrufen dieser Funktion sind in der folgenden Tabelle angegeben:
Value
|
Description
|
00H
|
Enable prefetch
|
01H
|
Disable prefetch
|
02H
|
Set maximum PIO transfer mode
|
03H
|
Set PIO mode 0
|
04H
|
Set default PIO transfer mode
|
05H
|
Enable INT 13H DMA maximum mode
|
06H
|
Disable INT 13H DMA
|
DMA- und PIO-Modi schließen sich gegenseitig aus, daher deaktiviert die Auswahl von DMA PIO entweder für das angegebene Gerät oder alle Geräte auf diesem Controller und die Auswahl von PIO deaktiviert DMA
GANZZAHL 13H (0x13)
Funktion 5001H (0x5001) --> Paketbefehl senden (Enhanced Disk Drive Spec v3.0)
Call with: AX = 5001H
DL = Drive number
ES:BX = Command packet (See the Table in
comments)
Return: If Function Successful,
Carry Flag = Clear
AH = 00H
If Function Unsuccessful,
Carry Flag = Set
AH = error code
Comments:
Diese Funktion wird verwendet, um die Paketbefehle zu senden. 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 Befehlspaket „Format of Enhanced Disk Drive Spec v3.0“ ist in der folgenden Tabelle angegeben:
Offset
|
Size
|
Description
|
00H
|
WORD
|
Signature B055H
|
02H
|
BYTE
|
Length of packet in bytes
|
03H
|
BYTE
|
Reserved (0)
|
04H
|
N BYTEs
|
Formatted packet data
|
GANZZAHL 13H (0x13)
Funktion 5501H (0x5501) --> Anfrage (Seagate ST01/ST02)
Call with: AX = 5501H
DH = Number of bytes to transfer
DL = Drive Number
ES:BX = Buffer for results
Return
ES:BX buffer, filled with the Inquiry results.
Comments:
Diese Funktion wird verwendet, um eine Anfrage zu 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 Anzahl der BIOS-Laufwerke bei 0040H:0075H zu ändern. Dieser Befehl ist identisch mit dem SCSI-Anfragebefehl
GANZZAHL 13H (0x13)
Funktion 5502H (0x5502) --> Reserviert (Seagate ST01/ST02)
GANZZAHL 13H (0x13)
Funktion 5503H (0x5503) --> Stellen Sie DTQ (Device Type Qualifier) ein (Seagate ST01/ST02)
Call with: AX = 5503H
DH = DTQ byte (See the table in
comments)
DL = Drive Number
Return: Nothing
Comments:
Mit dieser Funktion wird der DTQ (Device Type Qualifier) eingestellt. Die Funktion gibt nichts zurück. Die Bitfelder für das DTQ-Byte sind in der folgenden Tabelle dargestellt:
Bit(s)
|
Description
|
0
|
Seagate installation software present
|
1
|
Selected drive has been installed
|
2
|
Host Adapter checks parity on the selected drive
|
3
|
Selected drive is ST225N
|
4
|
Selected drive is paired ST225N/NP
|
5
|
Reserved
|
6
|
SCSI drive attached
|
7
|
Reserved
|
GANZZAHL 13H (0x13)
Funktion 5504H (0x5504) --> Rücksendeidentifikation (Seagate ST01/ST02)
Call with: AX = 5504H
DL = Drive Number
Return:
AX = 4321H
BL = selected drive number (00H, 01H)
BH = number of drives attached to Host
Adapter
Comments:
Funktion wird verwendet, um die Identifikation des Laufwerks/der Laufwerke zurückzugeben.
GANZZAHL 13H (0x13)
Funktion 5505H (0x5505) --> Parkköpfe (Seagate ST01/ST02)
Call with: AX = 5505H
DL = Drive Number
DH = Sub function (see the comments)
Return:
Nothing
Comments:
Die Funktion wird verwendet, um die Köpfe der Platte zu parken. Es wurde in den alten Festplatten verwendet, aber die modernen Festplatten benötigen kein externes Programm, um ihre Köpfe zu parken.
Die Unterfunktion 00H parkt die Köpfe (SCSI-Stoppbefehl) und die Unterfunktion 01H entparkt die Köpfe (SCSI-Startbefehl) der Festplatte.
GANZZAHL 13H (0x13)
Funktion 5506H (0x5506) --> SCSI-Busparität (Seagate ST01/ST02)
Call with: AX = 5506H
DL = Drive Number
DH = Sub function Number (See
Comments)
Return:
AL = Status (00H parity checking
disabled, 01H parity checking enabled)
Comments:
Rufen Sie die Funktion mit der folgenden Unterfunktionsnummer für DH auf:
Value
|
Description
|
00H
|
Disable parity check
|
01H
|
Enable parity check
|
02H
|
Return current parity setting
|
GANZZAHL 13H (0x13)
Funktion 5507H (0x5507) Zu Funktion 550DH (0x550D) --> Reservierte Funktionen (Seagate ST01/ST02)
Call with: AX = 5507H to AX = 550DH
Comments:
Diese Funktionen wurden offiziell als "Reserviert"
GANZZAHL 13H (0x13)
Funktion A0H (0xA0 oder 160) --> Resident Code Segment abrufen (Super PC-Kwik v3.20 und höher)
Call with: AH = A0H
SI = 4358H
Return:
AX = Segment of Resident Code
Comments:
Diese Funktion wird verwendet, um das residente Codesegment zu erhalten. AX gibt das Segment des residenten Codes zurück.
GANZZAHL 13H (0x13)
Funktion A1H (0xA1 oder 161) --> Cache leeren (Super PC-Kwik v3.20 und höher)
Call with: AH = A1H
SI = 4358H
Return:
Carry Flag = Clear
AH = 00H (v5.10)
Comments:
Die Funktion wird verwendet, um den Cache zu leeren.
GANZZAHL 13H (0x13)
Funktion A3H (0xA3 oder 163) --> Cache deaktivieren (Super PC-Kwik v3.20 und höher)
Call with: AH = A3H
SI = 4358H
Return:
Carry Flag = Clear
Comments:
Die Funktion wird verwendet, um den Cache zu deaktivieren.
GANZZAHL 13H (0x13)
Funktion A4H (0xA4 oder 164) --> Cache aktivieren (Super PC-Kwik v3.20 und höher)
Call with: AH = A4H
SI = 4358H
Return:
Carry Flag = Clear
Comments:
Diese Funktion wird verwendet, um den Cache zu aktivieren.
GANZZAHL 13H (0x13)
Funktion EEH (0xEE oder 238) --> 1024-Zylinder-Flag setzen (SWBIOS)
Call with: AH = EEH
DL = Drive Number
Return:
Carry Flag = Clear
AH = 00H
Comments:
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 auch diese Aufrufe. 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 und 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.
GANZZAHL 13H (0x13)
Funktion EFH (0xEF oder 239) --> Zylinderversatz einstellen (Ontrack Drive Rocket)
Call with: AH = EFH
CX = Cylinder offset for next INT 13H call
DL = Drive Number
Return:
Carry Flag = Clear
AH = 00H
Comments:
Die Funktion wird verwendet, um den Zylinder-Offset einzustellen. Für Software, die diesen Aufruf unterstützt, entspricht die Funktion AH=EEH dem Aufruf dieser Funktion mit CX=0400H. Der Zylinderoffset wird von allen aufgerufenen INT 13H außer AH=EEH und AH=EFH auf 0 zurückgesetzt.
GANZZAHL 13H (0x13)
Funktion F9H (0xF9 oder 249) --> Installationsprüfung (SWBIOS)
Call with: AH = F9H
DL = Drive Number
Return: If Function Successful,
Carry Flag = Clear
DX = Configuration Word (see comments)
If Function Unsuccessful,
Carry Flag = Set
Comments:
Diese Funktion wird für die Installationsprüfung verwendet. Wenn die Funktion erfolgreich ist, ist 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 auch diese Aufrufe.
GANZZAHL 13H (0x13)
Funktion FEH (0xFE oder 254) --> Erweiterte Zylinderanzahl abrufen (SWBIOS)
Call with: AH = FEH
DL = Drive Number
Return:
Carry Flag = Clear
DX = Number of Cylinders beyond 1024
on drive
Comments:
Diese Funktion wird verwendet, um die erweiterte Zylinderzahl zu erhalten. Die Funktion AH = 08H von INT 13H gibt eine auf 1024 verkürzte Zylinderzahl zurück. Das BIOS ohne diese Erweiterung würde das Zählmodul 1024 zurückgeben. Disk Manager unterstützt auch diese Aufrufe
GANZZAHL 13H (0x13)
Funktion FFH (0xFF oder 255) --> Offiziell private Funktion (IBM SurePath BIOS)
GANZZAHL 13H (0x13)
Funktion FFFFH (0xFFFF) --> Turbo-Modus einstellen (UNIQUE UX Turbo Utility)
Call with: AX = FFFFH
BH = AAH
BL = Sub Function Number (See the table
in Comments)
Return: If installed,
AX = 1234H
Comments:
Mit dieser Funktion wird der Turbo-Modus eingestellt. Die Unterfunktionsnummern zum Aufrufen der Funktion mit BL sind in der folgenden Tabelle angegeben:
Value
|
Description
|
00H
|
Installation check
|
01H
|
Turn on Turbo mode
|
02H
|
Turn off Turbo mode
|
03H
|
Set Turbo mode according to hardware switch
|
04H
|
Set disk access to Turbo mode
|
05H
|
Set disk access to Normal mode
|
Verwendung von 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. Lernen wir es an einem Beispiel.
Das folgende Beispiel konzentriert sich auf die drei Funktionen (Check Extensions present, Extended Read und Extended Write). Allerdings werden wir in diesem Kapitel keine erweiterte Schreibfunktion verwenden.
Das Programm prüft zunächst, ob Erweiterungen unterstützt werden oder ob die Erweiterungen für INT 13H vorhanden sind. Es liest den absoluten Sektor 0 (also MBR) der Platte. Die Codierung des Programms läuft folgendermaßen ab:
/* Programm für den Zugriff auf Sektoren über 8,46 GB mithilfe von INT 13-BIOS-Erweiterungen */
#include<stdio.h>
#include<dos.h>
/* Assigns the identifier to the data type */
typedef unsigned char Byte;
typedef unsigned int Word;
typedef unsigned long DWord;
/* disk_packet structure is loaded in DS:SI and command executed */
struct disk_packet
{
Byte size_pack; // Size of packet must be 16 or 16+
Byte reserved1; // Reserved
Byte no_of_blocks;// Number of blocks for transfer
Byte reserved2; // Reserved
/* Address in Segment:Offset format */
Word offset; //offset address
Word segment; //segment address
/* To Support the Disk Even of Capacity of 1152921504.607 GB */
DWord lba1;
DWord lba2;
}
disk_pack;
/* Function to check if the Extensions are supported */
void check_ext_present()
{
union REGS inregs, outregs; /* Input Registers and
Output */
inregs.h.ah=0x41; /* Function to Check
Extension Present */
inregs.x.bx=0x55AA;
inregs.h.dl=0x80; /* Drive No for first Hard Disk */
int86(0x13,&inregs,&outregs); /*Call interrupt */
if(outregs.x.cflag)
{
/* Extension Not Supported */
printf("\nBios extension not supported");
exit(1);
}
if(outregs.x.bx==0xAA55)
if(outregs.x.cx & 0x1)
/* Extension Present */
printf("\nExtended I/O supported");
}
/* Function to read the Sector */
void read_sectors(void *buffer)
{
union REGS inregs, outregs; /* Input and Output
Registers */
struct SREGS segregs; // Segment Registers
disk_pack.size_pack=16; // Set size to 16
disk_pack.no_of_blocks=1; // One block
disk_pack.reserved1=0; // Reserved Word
disk_pack.reserved2=0; // Reserved Word
disk_pack.segment=FP_SEG(buffer);// Segment of buffer
disk_pack.offset=FP_OFF(buffer); // Offset of buffer
/* request for MBR of hard disk 1 */
/* Read Absolute sector 0 */
disk_pack.lba1=0; /* LBA address, Contains first
32 bits */
/* We normally require( drives < 2.1 T.B) to set
only this */
disk_pack.lba2=0; // Last 32 bit address
inregs.h.ah=0x42; // Function to read
inregs.h.dl=0x80; // Drive Number for First Hard Disk inregs.x.si = FP_OFF(&disk_pack); /*Make DS:SI point
to disk_pack */
segregs.ds = FP_SEG(&disk_pack);
/* Call Interrupt */
int86x(0x13,&inregs,&outregs,&segregs);
if(outregs.x.cflag)
printf("\n\nError %d\n",outregs.h.ah);
else
printf("\n\nI hope Everything is all Right");
}
//// Write Sector Function \\\\
void write_sector()
{
/* It will be written in the same way as read_sectors function, except Function Number, which will be 0x43 in this function. We’ll discuss extended write function in next chapters.
Before Using this Function please check and verify what are you going to do. You should have the proper knowledge of what you are going to do. Use of this function in lack of knowledge or carelessly may destroy your data. */
}
/// Main Function \\\\
void main()
{
int i=0;
/* buffer to hold MBR */
Byte mbr[512];
clrscr();
/* check for BIOS extension present */
check_ext_present();
/* read sector */
read_sectors(&mbr);
printf("\n\n Data of MBR \n");
printf("▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀\n\n\n");
while(i++<512)
{
/* display the MBR buffer */
printf("%c",mbr[i]);
}
}
Kommentare zur Codierung des Programms
typedef Weist dem Datentyp den Bezeichner zu, so dass typedef unsigned char Byte; weist Kennung Byte für den Datentyp char zu. In ähnlicher Weise wird der Bezeichner Word int und DWord long zugewiesen.
Die disk_packet-Struktur wird in DS:SI geladen und der Befehl (z. B. erweitertes Lesen, erweitertes Schreiben oder Verifizieren usw.) wird ausgeführt. Siehe die zuvor angegebenen Funktionen von IBM/MS INT 13H Extensions (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 oben angegebene Funktion 41H)
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, also werden wir den absoluten Sektor 0 lesen (siehe Hinweis unten) und somit den MBR der Festplatte lesen.
Die Funktion write_sectors ist auch die gleiche wie die Funktion read_sectors und wird auf die gleiche Weise geschrieben, jedoch mit unterschiedlichen Funktionsoptionen. Wir werden es in den nächsten Kapiteln verwenden.
Notiz:
Wir lesen die Festplattensektoren auf die folgenden zwei Arten:
- Relativer Sektor Lesen (oder Schreiben)
- Absoluter Sektor lesen (oder schreiben)
Beim relativen Sektorlesen lesen wir die Festplattensektoren gemäß der CHS-Geometrie (Cylinder, Head and Sector) 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 die Zylinder- noch die Kopfnummer 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 Arbeit des BIOS, die absolute Sektornummer in die entsprechende Zylinder-, Kopf- und Sektornummer umzuwandeln .
Wie beim absoluten Lesen (oder Schreiben) von Sektoren müssen wir bei Operationen wie dem Lesen oder Schreiben der gesamten Festplatte nur die absoluten Sektoren innerhalb der Schleife berechnen, während wir beim relativen Lesen (oder Schreiben) von Sektoren drei Schleifen ausführen müssen zu einem Zeitpunkt zum Berechnen von CHS, daher ist das absolute Lesen/Schreiben von Sektoren viel schneller als das relative Lesen/Schreiben von Sektoren.
Zum Beispiel, wenn wir irgendeine Festplatte mit 16 Köpfen (Seiten), 12 Zylindern und mit 63 Sektoren haben, zeigt die folgende Tabelle das Verfahren und den Unterschied der beiden Lesemethoden und zeigt somit, wie Der absolute Sektoransatz kann dazu führen, dass unsere zeitaufwändigen Programme (wie das Lesen/Schreiben ganzer Festplatten oder Programme zum Löschen ganzer Festplatten usw.) viel schneller ausgeführt werden:
Relative Sectors Reading
|
Absolute Sector reading
|
Cylinder =0, Head =0, Sector = 1
|
Absolute Sector = 0
|
Cylinder =0, Head =0, Sector = 2
|
Absolute Sector = 1
|
Cylinder =0, Head =0, Sector = 3
|
Absolute Sector = 2
|
.
.
.
.
|
.
.
.
.
|
Cylinder =0, Head =0, Sector = 62
|
Absolute Sector = 61
|
Cylinder =0, Head =0, Sector = 63
|
Absolute Sector = 62
|
Cylinder =0, Head =1, Sector = 1
|
Absolute Sector = 63
|
Cylinder =0, Head =1, Sector = 2
|
Absolute Sector = 64
|
Cylinder =0, Head =1, Sector = 3
|
Absolute Sector = 65
|
Cylinder =0, Head =1, Sector = 4
|
Absolute Sector = 66
|
.
.
.
.
|
.
.
.
.
|
Cylinder =0, Head =1, Sector = 63
|
Absolute Sector = 125
|
Cylinder =0, Head =2, Sector = 1
|
Absolute Sector = 126
|
Cylinder =0, Head =2, Sector = 2
|
Absolute Sector = 127
|
Cylinder =0, Head =2, Sector = 3
|
Absolute Sector = 128
|
.
.
.
.
|
.
.
.
.
|
Cylinder =0, Head =15, Sector = 63
|
Absolute Sector = 1007
|
Cylinder =1, Head =0, Sector = 1
|
Absolute Sector = 1008
|
Cylinder =1, Head =0, Sector = 2
|
Absolute Sector = 1009
|
Cylinder =1, Head =0, Sector = 3
|
Absolute Sector = 1010
|
.
.
.
.
|
.
.
.
.
|
Cylinder =1, Head =0, Sector = 63
|
Absolute Sector = 1070
|
Cylinder =1, Head =1, Sector = 1
|
Absolute Sector = 1071
|
Cylinder =1, Head =1, Sector = 2
|
Absolute Sector = 1072
|
Cylinder =1, Head =1, Sector = 3
|
Absolute Sector = 1073
|
.
.
.
.
|
.
.
.
.
|
Cylinder =1, Head =15, Sector = 63
|
Absolute Sector = 2015
|
Cylinder =2, Head =0, Sector = 1
|
Absolute Sector = 2016
|
Cylinder =2, Head =0, Sector = 2
|
Absolute Sector = 2017
|
Cylinder =2, Head =0, Sector = 3
|
Absolute Sector = 2018
|
.
.
.
.
|
.
.
.
.
|
Cylinder =11, Head =15, Sector = 60
|
Absolute Sector = 12092
|
Cylinder =11, Head =15, Sector = 61
|
Absolute Sector = 12093
|
Cylinder =11, Head =15, Sector = 62
|
Absolute Sector = 12094
|
Cylinder =11, Head =15, Sector = 63
|
Absolute Sector = 12095
|
Die Informationen der Partitionstabelle des MBR, die von jedem MBR-Analysetool für Festplatten angezeigt werden, sind unten angegeben:
In den obigen Informationen sind die relativen Sektornummern für den Start beider Partitionen 63 bzw. 11277630, die frei von Partitionen sind und gemäß der Anzahl der auf der Festplatte verfügbaren Sektoren gezählt werden.
Seite Geändert am: 08/03/2022