Κεφάλαιο – 9
Χειρισμός μεγάλων σκληρών δίσκων
Χειρισμός μεγάλων σκληρών δίσκων
Στο προηγούμενο κεφάλαιο, συζητήσαμε τις λειτουργίες του BIOS-Disk και τη χρήση διακοπών για πρόσβαση στα φυσικά μέσα των σκληρών δίσκων. Χρησιμοποιήσαμε τις λειτουργίες INT 13H εκεί για πρόσβαση στους σκληρούς δίσκους.
Η διεπαφή INT 13H υποστηρίζει πολλές διαφορετικές εντολές όπως ανάγνωση, εγγραφή, μορφοποίηση και επαλήθευση κ.λπ. που μπορούν να δοθούν στο BIOS, το οποίο στη συνέχεια τις μεταβιβάζει στον σκληρό δίσκο. Καθώς χρησιμοποιείται από το DOS για μεγάλο χρονικό διάστημα, το INT13H είναι το πρότυπο για πολλά χρόνια.
Το INT 13H εκχωρεί 24 bit για την προδιαγραφή της γεωμετρίας της μονάδας δίσκου και απαιτεί από το πρόγραμμα κλήσης να γνωρίζει τις συγκεκριμένες παραμέτρους του σκληρού δίσκου και να παρέχει ακριβείς διευθύνσεις κεφαλής, κυλίνδρου και τομέα στις ρουτίνες για να επιτρέπεται η πρόσβαση στο δίσκο.
Το BIOS χρησιμοποιεί τη γεωμετρία του σκληρού δίσκου όπως έχει ρυθμιστεί στο πρόγραμμα εγκατάστασης του BIOS. Τα 24 bit, που εκχωρούνται από τη διεπαφή INT 13H για την προδιαγραφή της γεωμετρίας της μονάδας δίσκου, χωρίζονται ως εξής:
- 10 bit για τον αριθμό του κυλίνδρου. Επομένως, το μέγιστο όριο των συνολικών κυλίνδρων μπορεί να είναι έως και 1.024 κυλίνδρους.
- 8 bit για τον αριθμό κεφαλής. Έτσι, το μέγιστο όριο των συνολικών κεφαλών είναι μέχρι 256.
- 6 bit για τον αριθμό τομέα. Επομένως, το μέγιστο σύνολο τομέων μπορεί να είναι έως και 63 τομείς.
Επομένως, οι μέγιστοι τομείς που υποστηρίζονται από αυτήν την προσέγγιση μπορεί να είναι έως 1024 * 256 * 63 = 16515072.
Αυτό σημαίνει ότι η διεπαφή INT13H μπορεί να υποστηρίξει δίσκους που περιέχουν έως και 16,5 εκατομμύρια τομείς περίπου, που με 512 byte ανά τομέα οδηγεί το πολύ 8,46 GB. Αυτό ακριβώς θέλω να εξηγήσω. Επομένως, χρησιμοποιώντας όλες αυτές τις λειτουργίες ή το INT 13H, μπορούμε να έχουμε πρόσβαση μόνο στους δίσκους έως 8,46 GB.
Γι' αυτό, τα τελευταία χρόνια, οι περιορισμοί αυτής της παλιάς διεπαφής έχουν οδηγήσει στην εγκατάλειψή της προς όφελος ενός νέου τρόπου αντιμετώπισης των σκληρών δίσκων, όπως περιγράφεται στη συνέχεια σε αυτό το κεφάλαιο.
Πρώτα από όλα, επιτρέψτε μου να σας πω μια ιστορία!
Πριν από έντεκα χρόνια, όταν ήμουν στο έβδομο πρότυπο, στο σχολείο μου, άκουσα για τον σκληρό δίσκο χωρητικότητας 42 MB, ίσως ήταν ο WDA-L42 της IBM. Ήταν πραγματικά δύσκολο για μένα και τους φίλους μου να φανταστούμε τόσο μεγάλη χωρητικότητα σκληρού δίσκου, εκείνη την εποχή.
Η μεθοδολογία INT 13H αναπτύχθηκε πριν από περίπου είκοσι χρόνια από σήμερα. Τώρα μπορείτε να καταλάβετε ότι ένας σκληρός δίσκος 8 GB ήταν πολύ μεγαλύτερος για να χωρέσει ακόμα και σε όνειρα σε εκείνη την εποχή. Αλλά σήμερα, αν μιλάμε για έναν σκληρό δίσκο 8 GB σε οποιονδήποτε χρήστη προσωπικού υπολογιστή, μπορεί να μην του αρέσει να τον χρησιμοποιεί λέγοντας ότι είναι μικρός σε χωρητικότητα αποθήκευσης.
Αυτός είναι ο λόγος που η διεπαφή INT 13H έφτασε επιτέλους στο τέλος της χρησιμότητάς της στα σύγχρονα συστήματα. Το INT 13H χρησιμοποίησε 24 bit για να εκχωρήσει τη γεωμετρία του δίσκου και δυστυχώς δεν ήταν δυνατή η επέκταση της υπάρχουσας διεπαφής INT 13H BIOS γιατί αν γινόταν, πολύ παλαιότερο υλικό και λογισμικό θα σταματούσαν να λειτουργούν και μπορείτε να καταλάβετε ότι η σημερινή αγορά υπολογιστών δεν μπορεί ποτέ να αντέξει μια τόσο μεγάλη αλλαγή με εκατομμύρια παλαιότερα προϊόντα λογισμικού και υλικού να σταματήσουν να λειτουργούν.
Λαμβάνοντας υπόψη αυτήν την κατάσταση, το INT 13H έχει αντικατασταθεί από μια νεότερη διεπαφή που ονομάζεται επεκτάσεις INT 13H. Ωστόσο, το INT 13H εξακολουθεί να μπορεί να χρησιμοποιηθεί από το DOS και ορισμένα άλλα παλαιότερα λειτουργικά συστήματα και για άλλους σκοπούς συμβατότητας.
Η νέα διεπαφή INT 13H χρησιμοποιεί 64 bit αντί για 24 bit για διευθυνσιοδότηση και επιτρέπει μέγιστο μέγεθος σκληρού δίσκου 9,4 * 1021 byte που είναι στην πραγματικότητα 9,4 τρισεκατομμύρια gigabyte ή 94000000000000 Gigabyte. Ελπίζω τώρα να είμαστε χαλαροί για λίγο μέχρι να σπάσει αυτό το όριο.
Ορισμένες σημαντικές λειτουργίες της επέκτασης για διακοπή 13H περιγράφονται στη συνέχεια. Μπορείτε να χρησιμοποιήσετε αυτές τις συναρτήσεις στον προγραμματισμό με τον ίδιο τρόπο που χρησιμοποιούσατε τις λειτουργίες του INT 13H. Αυτός είναι επίσης ένας λόγος που αυτές οι συναρτήσεις ονομάζονται επεκτάσεις του INT 13H.
INT 13H Extensions:
INT 13H (0x13)
Συνάρτηση 1BH (0x1B ή 27) --> Λήψη κεφαλίδας παραγωγής (σταθερός δίσκος ESDI)
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:
Αυτή η λειτουργία χρησιμοποιείται για τη λήψη της κεφαλίδας κατασκευής του σταθερού δίσκου. Η πρώτη ανάγνωση του τομέα περιέχει την κεφαλίδα κατασκευής με τον αριθμό των καταχωρήσεων ελαττωμάτων και την αρχή του χάρτη ελαττωμάτων. οι υπόλοιποι τομείς περιέχουν το υπόλοιπο του χάρτη ελαττωμάτων. Η μορφή κεφαλίδας κατασκευής (μορφή εγγραφής χάρτη ελαττωμάτων) βρίσκεται στην Τεχνική αναφορά μονάδων σταθερού δίσκου IBM 70MB, 115MB.
INT 13H (0x13)
Function 1BH (0x1B or 27) --> Get Pointer to SCSI Disk Information Block (Future Domain 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:
Αυτή η συνάρτηση χρησιμοποιείται για τη λήψη του δείκτη στο μπλοκ πληροφοριών δίσκου SCSI. Αυτό ορίζει επίσης μια μη επαναρυθμιζόμενη σημαία που αποτρέπει την εμφάνιση ορισμένων μηνυμάτων ελεγκτή.
INT 13H (0x13)
Function 1CH (0x1C or 28) --> Get Pointer to Free Controller Ram (Future Domain 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:
Αυτή η λειτουργία χρησιμοποιείται για τη λήψη του δωρεάν ελεγκτή Ram. Το ES:BX δείχνει το πρώτο byte της ελεύθερης μνήμης RAM στον ελεγκτή, διαθέσιμο για άλλες χρήσεις. Το ES περιέχει το τμήμα στο οποίο βρίσκεται ο ελεγκτής. Οι δύο θύρες εισόδου/εξόδου με χαρτογράφηση μνήμης του ελεγκτή βρίσκονται σε μετατόπιση 1C00H και 1E00H.
INT 13H (0x13)
Function 1C08H (0x1C08) --> Get Command Completion Status (ESDI Fixed Disk)
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:
Αυτή η συνάρτηση χρησιμοποιείται για τη λήψη της κατάστασης ολοκλήρωσης εντολών. Εάν η λειτουργία είναι επιτυχής, η σημαία μεταφοράς είναι καθαρή και εάν η επιτυχής σημαία έχει οριστεί.
INT 13H (0x13)
Function 1C09H (0x1C09) --> Get Device Status (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:
Αυτή η λειτουργία χρησιμοποιείται για τη λήψη της κατάστασης συσκευής. Εάν η λειτουργία είναι επιτυχής, η σημαία μεταφοράς είναι καθαρή και εάν η επιτυχής σημαία έχει οριστεί.
INT 13H (0x13)
Function 1C0AH (0x1C0A) --> Get Device Configuration (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:
Αυτή η λειτουργία χρησιμοποιείται για τη λήψη της Διαμόρφωσης συσκευής για το δίσκο. Εάν η λειτουργία είναι επιτυχής, η σημαία μεταφοράς είναι καθαρή και ο καταχωρητής AH είναι 01H, διαφορετικά έχει οριστεί η σημαία μεταφοράς και ο καταχωρητής AH Επιστρέφει την κατάσταση. Ο παρακάτω πίνακας δείχνει τη Μορφή του μπλοκ κατάστασης διαμόρφωσης μονάδας ESDI:
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
|
INT 13H (0x13)
Function 1C0BH (0x1C0B) --> Get Adapter Configuration (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:
Αυτή η λειτουργία χρησιμοποιείται για τη λήψη της διαμόρφωσης προσαρμογέα. Εάν η λειτουργία είναι επιτυχής, η σημαία μεταφοράς είναι καθαρή και το AH είναι 01H, εάν έχει οριστεί η σημαία μεταφοράς χωρίς επιτυχία και το AH επιστρέφει την κατάσταση.
INT 13H (0x13)
Function 1C0CH (0x1C0C) --> Get POS Information (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:
Αυτή η λειτουργία χρησιμοποιείται για τη λήψη των πληροφοριών POS. Εάν η λειτουργία είναι επιτυχής, η σημαία μεταφοράς είναι καθαρή και το AH είναι 01H, εάν έχει οριστεί η σημαία μεταφοράς χωρίς επιτυχία και το AH επιστρέφει την κατάσταση.
INT 13H (0x13)
Function 1C0EH (0x1C0E) --> Translate RBA to 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:
Αυτή η συνάρτηση μεταφράζει το RBA (Διεύθυνση σχετικού μπλοκ) σε ABA (Διεύθυνση απόλυτου μπλοκ). Εάν η λειτουργία είναι επιτυχής, η σημαία μεταφοράς είναι καθαρή και ο καταχωρητής AH είναι 01H, διαφορετικά έχει οριστεί η σημαία μεταφοράς και το AH επιστρέφει την κατάσταση.
INT 13H (0x13)
Function 20H (0x20 or 32) --> Get Current Media Format (Compaq ATAPI Removable Media Device)
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:
Αυτή η λειτουργία χρησιμοποιείται για τη λήψη της τρέχουσας μορφής πολυμέσων. Οι τιμές για τον τύπο μέσου δισκέτας Compaq/ATAPI έχουν δοθεί στον ακόλουθο πίνακα:
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
|
INT 13H (0x13)
Function 21H (0x21 or 33) --> Read Multiple Disk Sectors (PS and PS/2, Hard Disks)
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:
Η συνάρτηση χρησιμοποιείται για την ανάγνωση πολλών τομέων δίσκου με χρήση της λειτουργίας πολλαπλών μπλοκ, η οποία δημιουργεί μια διακοπή μόνο μετά το τέλος της μεταφοράς μιας ομάδας τομέων και όχι μετά από κάθε τομέα.
INT 13H (0x13)
Function 22H (0x22 or 34) --> Write Multiple Disk Sectors (PS and PS/2, Hard Disks)
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:
Η συνάρτηση χρησιμοποιείται για την εγγραφή πολλών τομέων δίσκου χρησιμοποιώντας τη λειτουργία πολλαπλών μπλοκ, η οποία δημιουργεί μια διακοπή μόνο μετά το τέλος της μεταφοράς μιας ομάδας τομέων και όχι μετά από κάθε τομέα.
INT 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:
Αυτή η λειτουργία Ενεργοποιεί ή/και απενεργοποιεί την προσωρινή αποθήκευση όλων των μονάδων δίσκου. Εάν η συνάρτηση είναι επιτυχής, ο καταχωρητής AX είναι 0000H διαφορετικά επιστρέφει την κατάσταση.
INT 13H (0x13)
Function 23H (0x23 or 35) --> Set Controller Features Register (PS and PS/2, Hard Disk)
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:
Αυτή η συνάρτηση χρησιμοποιείται για τη ρύθμιση του καταχωρητή χαρακτηριστικών του ελεγκτή. Εάν η λειτουργία είναι επιτυχής, η σημαία μεταφοράς είναι καθαρή και εάν η σημαία μεταφοράς δεν είναι επιτυχής έχει οριστεί και ο καταχωρητής AH επιστρέφει την κατάσταση
INT 13H (0x13)
Function 24H (0x24 or 36) --> Set Multiple – Transfer Mode (Hard Disk, PS and 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:
Αυτή η λειτουργία χρησιμοποιείται για να ρυθμίσετε τη λειτουργία πολλαπλής μεταφοράς. Εάν θέλετε να απενεργοποιήσετε τη λειτουργία πολλαπλών – μεταφοράς, ορίστε τον αριθμό των τομέων σε 0. Η μέγιστη τιμή για το μέγεθος του μπλοκ (όπως 2,4,6,8 και 16 κ.λπ.) εξαρτάται από τον τύπο σταθερής μονάδας δίσκου.
Η τιμή αποθηκεύεται σε byte 15H του πίνακα παραμέτρων σταθερής μονάδας δίσκου που δημιουργείται από το POST (Power On Self-Test). Το byte στη διεύθυνση 0040H:0074H έχει οριστεί σε κατάσταση λειτουργίας. Οι τιμές για τον αριθμό χαρακτηριστικών του σκληρού δίσκου PS/1 παρατίθενται στον ακόλουθο πίνακα:
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
|
INT 13H (0x13)
Function 24H (0x24 or 36) --> Set Sectors (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:
Αυτή η συνάρτηση χρησιμοποιείται για τον ορισμό των Τομέων. Εάν η συνάρτηση είναι επιτυχής, ο καταχωρητής AX είναι 0000H διαφορετικά το AX επιστρέφει την Κατάσταση.
INT 13H (0x13)
Function 25H (0x25 or 37) --> Identify Drive (Hard Disk, PS and 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:
Αυτή η λειτουργία χρησιμοποιείται για την αναγνώριση της μονάδας δίσκου. Το byte στη διεύθυνση 0040h:0074h ορίζεται στην κατάσταση της λειτουργίας. Η IBM ταξινομεί επίσημα αυτή τη λειτουργία ως προαιρετική. Τα πεδία Bit για τη γενική διαμόρφωση μονάδας δίσκου έχουν δοθεί στον ακόλουθο πίνακα:
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)
|
Η περιγραφή του μπλοκ πληροφοριών Μορφή μονάδας δίσκου όπως δίνεται στην προδιαγραφή ATA (Συνημμένο AT) έχει δοθεί στον επόμενο πίνακα:
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
|
INT 13H (0x13)
Function 25H (0x25 or 37) --> Set Flush Interval (QuickCache II v4.20)
Call with: AH = 25H
BX = Interval of Flush
Return: If Function Successful,
AH = 0000H
If Function Unsuccessful,
AH = status
Comments:
Αυτή η λειτουργία χρησιμοποιείται για τη ρύθμιση του διαστήματος έκπλυσης. Εάν η συνάρτηση είναι επιτυχής, το AH είναι 0000H διαφορετικά το AH επιστρέφει την κατάσταση.
INT 13H (0x13)
Function 26H (0x26 or 38) --> QuickCache II v4.20 Uninstall
Call with: AH = 26H
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = status
Comments:
Το AX επιστρέφει την κατάσταση από 0001H σε 00FFH για διάνυσμα διακοπής που συνδέθηκε από άλλο TSR
INT 13H (0x13)
Function 27H (0x27 or 39) --> Installation Check (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:
Εάν εγκατασταθεί, ο καταχωρητής AX είναι 0000H και το BX επιστρέφει μηδενική τιμή.
INT 13H (0x13)
Function 28H (0x28 or 40) --> Set Automatic Dismount (QuickCache II v4.20)
Call with: AH = 28H
AL = New State
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Καλέστε τη λειτουργία με AL = 00H για Απενεργοποίηση και με AL = 01H για Ενεργοποίηση.
INT 13H (0x13)
Function 29H (0x29 or 41) --> No Operation (QuickCache II v4.20)
Call with: AH = 29H
Return: AX = 0000H
INT 13H (0x13)
Function 2AH (0x2A or 42) --> Set Buffer Size (QuickCache II v4.20)
Call with: AH = 2AH
AL = Buffer Size
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Αυτή η συνάρτηση χρησιμοποιείται για να ορίσετε το μέγεθος του buffer. Εάν η συνάρτηση είναι επιτυχής, το AX είναι 0000H, εάν το AX δεν είναι επιτυχές επιστρέφει την κατάσταση.
INT 13H (0x13)
Function 2BH (0x2B or 43) --> Drive Access Sounds (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:
Εάν η συνάρτηση είναι επιτυχής, το AX είναι 0000H, εάν το AX δεν είναι επιτυχές επιστρέφει την κατάσταση. Κλήση λειτουργίας με AL = 00H για απενεργοποίηση και AL = 01H για ενεργοποίηση ήχων πρόσβασης μονάδας
INT 13H (0x13)
Function 2CH (0x2C or 44) --> Set Buffered Write (QuickCache II v4.20)
Call with: AH = 2CH
AL = new state
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Αυτή η λειτουργία ενεργοποιεί ή απενεργοποιεί τις καθυστερημένες εγγραφές για όλες τις μονάδες δίσκου. Χρησιμοποιήστε AH=38H για να αλλάξετε μία μονάδα. Χρησιμοποιήστε AL = 00H για Απενεργοποίηση και 01H για Ενεργοποίηση.
INT 13H (0x13)
Function 2DH (0x2D or 45) --> Set Buffered Read (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:
Αυτή η λειτουργία ενεργοποιεί ή απενεργοποιεί την εκ των προτέρων ανάγνωση για όλες τις μονάδες δίσκου. Χρησιμοποιήστε AL = 00H για Απενεργοποίηση και AL = 01H για Ενεργοποίηση. Χρησιμοποιήστε AH=37H για να αλλάξετε μία μονάδα.
INT 13H (0x13)
Function 2EH (0x2E or 46) --> Set Flush Count (QuickCache II v4.20)
Call with: AH = 2EH
BX = Flush count
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Αυτή η συνάρτηση χρησιμοποιείται για τον ορισμό του Flush Count. Εάν η συνάρτηση είναι επιτυχής, το AX είναι 0000H, εάν το AX δεν είναι επιτυχές επιστρέφει την κατάσταση.
INT 13H (0x13)
Function 2FH (0x2F or 47) --> Force Immediate Incremental Flush (QuickCache II v4.20)
Call with: AH = 2FH
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Εάν η συνάρτηση είναι επιτυχής, το AX είναι 0000H, εάν το AX δεν είναι επιτυχές επιστρέφει την κατάσταση.
INT 13H (0x13)
Function 30H (0x30 or 48) --> Get Information (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:
Αυτή η συνάρτηση χρησιμοποιείται για τη λήψη του διαφορετικού τύπου πληροφοριών σχετικά με το σύστημα, που καθορίζονται από την AL. Εάν η συνάρτηση είναι επιτυχής, το AX είναι 0000H, εάν το AX δεν είναι επιτυχές επιστρέφει την κατάσταση. Το AX = 8000H υποδεικνύει τον μη έγκυρο προσδιοριστή πληροφοριών. Οι αριθμοί πληροφοριών που πρέπει να καθοριστούν στο AL παρατίθενται στον ακόλουθο πίνακα:
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)
|
INT 13H (0x13)
Function 31H (0x31 or 49) --> Reserve Memory (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:
Αυτή η λειτουργία χρησιμοποιείται για την κράτηση της μνήμης για εφαρμογές. Εάν η συνάρτηση είναι επιτυχής, το AX είναι 0000H, εάν το AX δεν είναι επιτυχές επιστρέφει την κατάσταση.
INT 13H (0x13)
Function 32H (0x32 or 50) --> Enable Caching For Specific Drive(QuickCache II v4.20)
Call with: AH = 32H
AL = drive number
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Αυτή η λειτουργία χρησιμοποιείται για την ενεργοποίηση της προσωρινής αποθήκευσης για συγκεκριμένη μονάδα δίσκου. Για παράδειγμα, καλέστε τη Συνάρτηση με AL = 00H για A: και ούτω καθεξής. Εάν η συνάρτηση είναι επιτυχής, το AX είναι 0000H, εάν το AX δεν είναι επιτυχές επιστρέφει την κατάσταση.
INT 13H (0x13)
Function 33H (0x33 or 51) --> Disable Caching For Specific Drive (QuickCache II v4.20)
Call with: AH = 33H
AL = drive number
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Αυτή η λειτουργία χρησιμοποιείται για την απενεργοποίηση της προσωρινής αποθήκευσης για συγκεκριμένη μονάδα δίσκου. Για παράδειγμα, καλέστε τη Συνάρτηση με AL = 00H για A: και ούτω καθεξής. Εάν η συνάρτηση είναι επιτυχής, το AX είναι 0000H, εάν το AX δεν είναι επιτυχές επιστρέφει την κατάσταση.
INT 13H (0x13)
Function 34H (0x34 or 52) --> Lock/Unlock Sector(s) (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:
Αυτή η συνάρτηση χρησιμοποιείται για την κλήση λειτουργιών κλειδώματος/ξεκλειδώματος τομέων, που καθορίζονται από το AL. Εάν η συνάρτηση είναι επιτυχής, το AX είναι 0000H, εάν το AX δεν είναι επιτυχές επιστρέφει την κατάσταση. Οι διαφορετικοί αριθμοί συναρτήσεων που πρέπει να καλούνται με AL έχουν δοθεί στον ακόλουθο πίνακα:
Value
|
Function
|
00H
|
End sector locking/unlocking
|
01H
|
Lock all accessed sectors into cache
|
02H
|
Unlock all accessed sectors and discard from cache
|
INT 13H (0x13)
Function 35H (0x35 or 53) --> Set Lock Pool Size (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:
Αυτή η λειτουργία χρησιμοποιείται για τον καθορισμό του μεγέθους της πισίνας κλειδώματος. Εάν η συνάρτηση είναι επιτυχής, το AX είναι 0000H, εάν το AX δεν είναι επιτυχές επιστρέφει την κατάσταση.
INT 13H (0x13)
Function 36H (0x36 or 54) --> Set Trace Buffer Size
Call with: AH = 36H
AL = New size of trace buffer
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Αυτή η συνάρτηση χρησιμοποιείται για τον ορισμό του Trace Buffer Size. Εάν η συνάρτηση είναι επιτυχής, το AX είναι 0000H, εάν το AX δεν είναι επιτυχές επιστρέφει την κατάσταση. Αυτή η συνάρτηση συνήθως καλείται με τη συνάρτηση 24H του INT 13H με AL=05H.
INT 13H (0x13)
Function 37H (0x37 or 55) --> Set Buffered Reads For Specific Drive (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:
Αυτή η συνάρτηση χρησιμοποιείται για τον ορισμό αναγνώσεων προσωρινής αποθήκευσης για συγκεκριμένο Drive. Εάν AL = 00H η κατάσταση είναι ενεργοποιημένη, διαφορετικά απενεργοποιήστε. Εάν η συνάρτηση είναι επιτυχής, το AX είναι 0000H, εάν το AX δεν είναι επιτυχές επιστρέφει την κατάσταση.
INT 13H (0x13)
Function 38H (0x38 or 56) --> Set Buffered Writes for Specific Drive (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:
Αυτή η συνάρτηση χρησιμοποιείται για τον ορισμό εγγραφών σε προσωρινή μνήμη για συγκεκριμένο Drive. Εάν AL = 00H η κατάσταση είναι ενεργοποιημένη, διαφορετικά απενεργοποιήστε. Εάν η συνάρτηση είναι επιτυχής, το AX είναι 0000H, εάν το AX δεν είναι επιτυχές επιστρέφει την κατάσταση.
INT 13H (0x13)
Function 39H (0x39 or 57) --> Set Read Buffer Size for Specific Drive (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:
Αυτή η συνάρτηση χρησιμοποιείται για να ορίσετε το μέγεθος της προσωρινής μνήμης ανάγνωσης για συγκεκριμένη μονάδα δίσκου, όπως DL = 00H για A: και ούτω καθεξής. Εάν η συνάρτηση είναι επιτυχής, το AX είναι 0000H, εάν το AX δεν είναι επιτυχές επιστρέφει την κατάσταση.
INT 13H (0x13)
Function 3AH (0x3A or 58) --> Set Write Buffer Size for Specific Drive (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:
Αυτή η συνάρτηση χρησιμοποιείται για τον ορισμό του μεγέθους buffer εγγραφής για Συγκεκριμένη μονάδα δίσκου, όπως DL = 00H για A: και ούτω καθεξής. Εάν η συνάρτηση είναι επιτυχής, το AX είναι 0000H, εάν το AX δεν είναι επιτυχές επιστρέφει την κατάσταση.
INT 13H (0x13)
Function 3DH (0x3D or 61) --> Enable/Disable Cylinder Flush for Drive (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:
Αυτή η λειτουργία χρησιμοποιείται για την ενεργοποίηση/απενεργοποίηση της έκπλυσης κυλίνδρων για Συγκεκριμένη μονάδα δίσκου, όπως DL = 00H για A: και ούτω καθεξής. Εάν η συνάρτηση είναι επιτυχής, το AX είναι 0000H, εάν το AX δεν είναι επιτυχές επιστρέφει την κατάσταση. Εάν ο καταχωρητής AL έχει οριστεί σε 01H, η κατάσταση είναι ενεργοποιημένη, αλλιώς απενεργοποιείται.
INT 13H (0x13)
Function 3EH (0x3E or 62) --> Set Single-Sector Bonus (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:
Αυτή η συνάρτηση χρησιμοποιείται για τον ορισμό του μπόνους ενός τομέα. Εάν η συνάρτηση είναι επιτυχής, το AX είναι 0000H, εάν το AX δεν είναι επιτυχές επιστρέφει την κατάσταση.
INT 13H (0x13)
Function 3FH (0x3F or 63) --> Set Bonus Thrashold (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:
Αυτή η συνάρτηση χρησιμοποιείται για τον ορισμό του ορίου μπόνους. Εάν η συνάρτηση είναι επιτυχής, το AX είναι 0000H, εάν το AX δεν είναι επιτυχές επιστρέφει την κατάσταση
INT 13H (0x13)
Function 41H (0x41 or 65) --> Installation Check (IBM/MS INT 13H Extensions)
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:
Αυτή η λειτουργία ελέγχει εάν οι επεκτάσεις IBM/MS INT 13H είναι εγκατεστημένες και υποστηρίζονται. Οι τιμές για τις κύριες εκδόσεις επεκτάσεων έχουν δοθεί στον ακόλουθο πίνακα:
Value
|
Major Version of Extension
|
01H
|
1.x
|
20H
|
2.0 / EDD-1.0
|
21H
|
2.1 / EDD-1.1
|
30H
|
EDD-3.0
|
Τα πεδία Bit για το bitmap υποστήριξης του API επεκτάσεων IBM/MS INT 13H έχουν δοθεί στον ακόλουθο πίνακα:
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)
|
INT 13H (0x13)
Function 42H (0x42 or 66) --> Extended Read (IBM/MS INT 13H Extensions)
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:
Αυτή η συνάρτηση είναι η επέκταση για τη λειτουργία ανάγνωσης δίσκου. Εάν η λειτουργία είναι επιτυχής, η σημαία μεταφοράς είναι καθαρή και ο καταχωρητής AH είναι 00H, διαφορετικά έχει οριστεί η σημαία μεταφοράς και το AH επιστρέφει τον κωδικό σφάλματος. Το πεδίο μέτρησης μπλοκ του πακέτου διεύθυνσης δίσκου ορίζεται στον αριθμό μπλοκ που μεταφέρθηκαν με επιτυχία. Η μορφή του πακέτου διεύθυνσης δίσκου έχει δοθεί παρακάτω:
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)
|
INT 13H (0x13)
Function 43H (0x43 or 67) --> Extended Write (IBM/MS INT 13H Extensions)
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:
Αυτή η συνάρτηση είναι η επέκταση για τη λειτουργία εγγραφής δίσκου. Εάν η λειτουργία είναι επιτυχής, η σημαία μεταφοράς είναι καθαρή και ο καταχωρητής AH είναι 00H, διαφορετικά έχει οριστεί η σημαία μεταφοράς και το AH επιστρέφει τον κωδικό σφάλματος. Το πεδίο μέτρησης μπλοκ του πακέτου διεύθυνσης δίσκου έχει οριστεί σε αριθμό μπλοκ με επιτυχία. Οι πληροφορίες των σημαιών εγγραφής για διαφορετικές εκδόσεις έχουν δοθεί στον ακόλουθο πίνακα:
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
|
INT 13H (0x13)
Function 44H (0x44 or 68) --> Verify Sectors (IBM/MS INT 13H Extensions)
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:
Αυτή η συνάρτηση είναι η επέκταση για τη λειτουργία Verify Sectors. Εάν η λειτουργία είναι επιτυχής, η σημαία μεταφοράς είναι καθαρή και ο καταχωρητής AH είναι 00H, διαφορετικά έχει οριστεί η σημαία μεταφοράς και το AH επιστρέφει τον κωδικό σφάλματος. Το πεδίο μέτρησης μπλοκ του πακέτου διεύθυνσης δίσκου έχει οριστεί σε αριθμό μπλοκ με επιτυχία
INT 13H (0x13)
Function 45H (0x45 or 69) --> Lock/Unlock Drive (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:
Αυτή η λειτουργία χρησιμοποιείται για το Κλείδωμα/Ξεκλείδωμα της μονάδας. Αυτή η λειτουργία απαιτείται να υποστηρίζεται για οποιεσδήποτε αφαιρούμενες μονάδες με αριθμό 80H ή μεγαλύτερο. Μπορούν να τοποθετηθούν έως και 255 κλειδαριές σε μια μονάδα δίσκου και τα μέσα δεν θα ξεκλειδωθούν φυσικά μέχρι να αφαιρεθούν όλες οι κλειδαριές.
Εάν η συνάρτηση είναι επιτυχής, η σημαία μεταφοράς είναι καθαρή και ο καταχωρητής AH είναι 00H, διαφορετικά έχει οριστεί η σημαία μεταφοράς και το AH επιστρέφει τον κωδικό σφάλματος.
Οι αριθμοί λειτουργίας για διαφορετικές λειτουργίες Κλείδωμα/Ξεκλείδωμα της μονάδας δίσκου έχουν δοθεί στον παρακάτω πίνακα:
Value
|
Function
|
00H
|
Lock media in drive
|
01H
|
Unlock media
|
02H
|
Check lock status
|
INT 13H (0x13)
Function 46H (0x46 or 70) --> Eject Media (IBM/MS INT 13H Extensions)
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:
Αυτή η λειτουργία είναι η εξαγωγή μέσων. Εάν η λειτουργία είναι επιτυχής, η σημαία μεταφοράς είναι καθαρή και ο καταχωρητής AH είναι 00H, διαφορετικά έχει οριστεί η σημαία μεταφοράς και το AH επιστρέφει τον κωδικό σφάλματος.
INT 13H (0x13)
Function 47H (0x47 or 71) --> Extended Seek (IBM/MS INT 13H Extensions)
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:
Αυτή η συνάρτηση είναι η επέκταση για τη συνάρτηση αναζήτησης. Εάν η λειτουργία είναι επιτυχής, η σημαία μεταφοράς είναι καθαρή και ο καταχωρητής AH είναι 00H, διαφορετικά έχει οριστεί η σημαία μεταφοράς και το AH επιστρέφει τον κωδικό σφάλματος. Το πεδίο μέτρησης μπλοκ του πακέτου διεύθυνσης δίσκου έχει οριστεί σε αριθμό μπλοκ με επιτυχία.
INT 13H (0x13)
Function 48H (0x48 or 72) --> Get Drive Parameters (IBM/MS INT 13H Extensions)
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:
Αυτή η λειτουργία χρησιμοποιείται για τη λήψη των παραμέτρων της μονάδας δίσκου. Εάν η συνάρτηση είναι επιτυχής, η σημαία μεταφοράς είναι καθαρή και ο καταχωρητής AH είναι 00H με το DS:SI του Filled buffer, διαφορετικά έχει οριστεί η σημαία μεταφοράς και το AH επιστρέφει τον κωδικό σφάλματος.
INT 13H (0x13)
Function 49H (0x49 or 73) --> Extended Media Change (IBM/MS INT 13H Extensions)
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:
Αυτή η λειτουργία είναι η επέκταση για τη λειτουργία αλλαγής πολυμέσων. Εάν η λειτουργία είναι επιτυχής, η σημαία μεταφοράς είναι καθαρή και ο καταχωρητής AH είναι 00H, διαφορετικά έχει οριστεί η σημαία μεταφοράς και το AH επιστρέφει τον κωδικό σφάλματος.
Η κύρια διαφορά σε αυτήν τη συνάρτηση και τη συνάρτηση AH = 16H του INT 13H είναι ότι μπορούμε να καθορίσουμε οποιονδήποτε αριθμό μονάδας δίσκου, όπου η συνάρτηση 16H επιτρέπει μόνο τον αριθμό μονάδας δίσκου 00H έως 7FH για δισκέτες.
INT 13H (0x13)
Function 4AH (0x4A or 74) --> Initiate disk Emulation (Bootable 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:
Αυτή η λειτουργία χρησιμοποιείται για την εκκίνηση της εξομοίωσης δίσκου. Εάν η λειτουργία είναι επιτυχής, η σημαία μεταφοράς είναι καθαρή, διαφορετικά έχει οριστεί η σημαία μεταφοράς και ο καταχωρητής AX επιστρέφει τον κωδικό κατάστασης και η μονάδα δίσκου δεν θα είναι σε λειτουργία εξομοίωσης.
Η μορφή του πακέτου προδιαγραφών CD-ROM με δυνατότητα εκκίνησης έχει δοθεί στον ακόλουθο πίνακα:
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)
|
Τα πεδία Bit για τον τύπο μέσου εκκίνησης με δυνατότητα εκκίνησης CD-ROM έχουν δοθεί στον ακόλουθο πίνακα:
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)
|
INT 13H (0x13)
Function 4B00H (0x4B00) --> Terminate Disk Emulation (Bootable 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:
Αυτή η λειτουργία χρησιμοποιείται για τον τερματισμό της εξομοίωσης δίσκου. Εάν θέλετε να τερματίσετε όλες τις προσομοιώσεις, καλέστε τη συνάρτηση με DL = 7FH. Εάν η Λειτουργία είναι επιτυχής, η σημαία μεταφοράς είναι καθαρή, διαφορετικά έχει οριστεί η σημαία μεταφοράς και ο καταχωρητής AX επιστρέφει τον κωδικό κατάστασης και η μονάδα δίσκου παραμένει σε λειτουργία εξομοίωσης.
INT 13H (0x13)
Function 4B01H (0x4B01) --> Get Status (Bootable 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:
Η συνάρτηση χρησιμοποιείται για τη λήψη της κατάστασης. Εάν η Λειτουργία είναι επιτυχής, η σημαία μεταφοράς είναι καθαρή, διαφορετικά ορίζεται η σημαία μεταφοράς και ο καταχωρητής AX επιστρέφει τον κωδικό κατάστασης
INT 13H (0x13)
Function 4CH (0x4C or 76) --> Initiate Disk Emulation and Boot (Bootable 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:
Αυτή η λειτουργία χρησιμοποιείται για την εκκίνηση της εξομοίωσης δίσκου και την εκκίνηση του συστήματος. Εάν η λειτουργία είναι επιτυχής, δεν επιστρέφει τίποτα άλλο, ορίζεται η σημαία μεταφοράς και ο καταχωρητής AX επιστρέφει τον κωδικό κατάστασης.
INT 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:
Αυτή η συνάρτηση χρησιμοποιείται για την επιστροφή του καταλόγου εκκίνησης. Εάν η Λειτουργία είναι επιτυχής, η σημαία μεταφοράς είναι καθαρή, διαφορετικά ορίζεται η σημαία μεταφοράς και ο καταχωρητής AX επιστρέφει τον κωδικό κατάστασης. Η μορφή του CD-ROM με δυνατότητα εκκίνησης του "Λήψη καταλόγου εκκίνησης" Το πακέτο εντολών έχει δοθεί στον παρακάτω πίνακα:
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
|
INT 13H (0x13)
Function 4EH (0x4E or 78) --> Set Hardware Configuration (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:
Αυτή η λειτουργία χρησιμοποιείται για τη ρύθμιση των παραμέτρων υλικού. Οι αριθμοί συναρτήσεων για να καλέσει το AL αυτή τη συνάρτηση έχουν δοθεί στον ακόλουθο πίνακα:
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 και PIO αποκλείονται αμοιβαία, επομένως η επιλογή DMA απενεργοποιεί το PIO είτε για την καθορισμένη συσκευή είτε για όλες τις συσκευές σε αυτόν τον ελεγκτή και επιλέγοντας το PIO απενεργοποιεί το DMA
INT 13H (0x13)
Function 5001H (0x5001) --> Send Packet Command (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:
Αυτή η λειτουργία χρησιμοποιείται για την αποστολή των εντολών πακέτων. Εάν η λειτουργία είναι επιτυχής, η σημαία μεταφοράς είναι καθαρή και ο καταχωρητής AH είναι 00H, διαφορετικά έχει οριστεί η σημαία μεταφοράς και το AH επιστρέφει τον κωδικό σφάλματος. Το πακέτο εντολών Format of Enhanced Disk Drive Spec v3.0 έχει δοθεί στον ακόλουθο πίνακα:
Offset
|
Size
|
Description
|
00H
|
WORD
|
Signature B055H
|
02H
|
BYTE
|
Length of packet in bytes
|
03H
|
BYTE
|
Reserved (0)
|
04H
|
N BYTEs
|
Formatted packet data
|
INT 13H (0x13)
Function 5501H (0x5501) --> Inquiry (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:
Αυτή η λειτουργία χρησιμοποιείται για την αποστολή ερωτήματος. Το ST01/ST02 BIOS δεν επιστρέφει καμία ένδειξη επιτυχίας ή αποτυχίας για τη λειτουργία, επομένως όλες οι εντολές πρέπει να θεωρηθούν επιτυχείς.
Το ST01/ST02 BIOS αντιστοιχίζει πάντα τους δίσκους του μετά από τις προηγούμενες μονάδες BIOS χωρίς να αλλάξει τον αριθμό μονάδων δίσκου BIOS στο 0040H:0075H. Αυτή η εντολή είναι πανομοιότυπη με την εντολή SCSI Inquiry
INT 13H (0x13)
Function 5502H (0x5502) --> Reserved (Seagate ST01/ST02)
INT 13H (0x13)
Function 5503H (0x5503) --> Set DTQ (Device Type Qualifier) (Seagate ST01/ST02)
Call with: AX = 5503H
DH = DTQ byte (See the table in
comments)
DL = Drive Number
Return: Nothing
Comments:
Αυτή η λειτουργία χρησιμοποιείται για τον ορισμό του DTQ (Device Type Qualifier). Η Συνάρτηση δεν επιστρέφει τίποτα. Τα πεδία Bit για το byte DTQ εμφανίζονται στον ακόλουθο πίνακα:
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
|
INT 13H (0x13)
Function 5504H (0x5504) --> Return Identification (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:
Η λειτουργία χρησιμοποιείται για την επιστροφή της αναγνώρισης της μονάδας ή των μονάδων δίσκου.
INT 13H (0x13)
Function 5505H (0x5505) --> Park Heads (Seagate ST01/ST02)
Call with: AX = 5505H
DL = Drive Number
DH = Sub function (see the comments)
Return:
Nothing
Comments:
Η λειτουργία για τη στάση των κεφαλών του δίσκου. Χρησιμοποιήθηκε στους παλιούς σκληρούς δίσκους, ωστόσο οι σύγχρονοι σκληροί δίσκοι δεν χρειάζονται εξωτερικό πρόγραμμα για να σταθμεύσουν τα κεφάλια τους.
Η λειτουργία Sub 00H παρκάρει τις κεφαλές (εντολή διακοπής SCSI) και η δευτερεύουσα συνάρτηση 01H ξεπαρκάρει τις κεφαλές (εντολή SCSI Start) του δίσκου.
INT 13H (0x13)
Function 5506H (0x5506) --> SCSI Bus Parity (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:
Καλέστε τη συνάρτηση με τον ακόλουθο αριθμό δευτερεύουσας λειτουργίας για DH:
Value
|
Description
|
00H
|
Disable parity check
|
01H
|
Enable parity check
|
02H
|
Return current parity setting
|
INT 13H (0x13)
Function 5507H (0x5507) To Function 550DH (0x550D) --> Reserved Functions (Seagate ST01/ST02)
Call with: AX = 5507H to AX = 550DH
Comments:
Αυτές οι Λειτουργίες έχουν καταχωρηθεί επίσημα ως "Δεσμευμένες"
INT 13H (0x13)
Function A0H (0xA0 or 160) --> Get Resident Code Segment (Super PC-Kwik v3.20 and Later)
Call with: AH = A0H
SI = 4358H
Return:
AX = Segment of Resident Code
Comments:
Αυτή η συνάρτηση χρησιμοποιείται για τη λήψη του τμήματος κώδικα κατοίκου. Το AX επιστρέφει το τμήμα του κωδικού κατοίκου.
INT 13H (0x13)
Function A1H (0xA1 or 161) --> Flush Cache (Super PC-Kwik v3.20 and Later)
Call with: AH = A1H
SI = 4358H
Return:
Carry Flag = Clear
AH = 00H (v5.10)
Comments:
Η συνάρτηση χρησιμοποιείται για την έκπλυση της κρυφής μνήμης.
INT 13H (0x13)
Function A3H (0xA3 or 163) --> Disable Cache (Super PC- Kwik v3.20 and Later)
Call with: AH = A3H
SI = 4358H
Return:
Carry Flag = Clear
Comments:
Η συνάρτηση χρησιμοποιείται για την απενεργοποίηση της προσωρινής μνήμης.
INT 13H (0x13)
Function A4H (0xA4 or 164) --> Enable Cache (Super PC-Kwik v3.20 and Later)
Call with: AH = A4H
SI = 4358H
Return:
Carry Flag = Clear
Comments:
Αυτή η συνάρτηση χρησιμοποιείται για την ενεργοποίηση της προσωρινής μνήμης.
INT 13H (0x13)
Function EEH (0xEE or 238) --> Set 1024-Cylinder Flag (SWBIOS)
Call with: AH = EEH
DL = Drive Number
Return:
Carry Flag = Clear
AH = 00H
Comments:
Η συνάρτηση χρησιμοποιείται για το Set 1024 – Cylinder flag. Η σημαία διαγράφεται από όλες τις κλήσεις INT 13H εκτός από AH=EEH και AH=EFH. Η Διαχείριση δίσκων υποστηρίζει επίσης αυτές τις κλήσεις. Αυτή η λειτουργία ισοδυναμεί με την κλήση της συνάρτησης AH=EFH με CX=0400H για το λογισμικό που υποστηρίζει αυτήν την κλήση.
Αυτή η λειτουργία υποστηρίζεται επίσης από το HyperDisk έκδοση 4.01 και νεότερη έκδοση, και το PC-Cache έκδοση 5.5 και νεότερη έκδοση, προκειμένου να επιτρέπεται η προσωρινή αποθήκευση μονάδων δίσκου που χρησιμοποιούν SWBIOS για πρόσβαση σε περισσότερους από 1024 κυλίνδρους.
INT 13H (0x13)
Function EFH (0xEF or 239) --> Set Cylinder Offset (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:
Η συνάρτηση χρησιμοποιείται για τη ρύθμιση της μετατόπισης κυλίνδρου. Για λογισμικό που υποστηρίζει αυτήν την κλήση, η συνάρτηση AH=EEH ισοδυναμεί με την κλήση αυτής της συνάρτησης με CX=0400H. Η μετατόπιση κυλίνδρου επαναφέρεται στο 0 από όλα τα INT 13H που καλούνται εκτός από τα AH=EEH και AH=EFH.
INT 13H (0x13)
Function F9H (0xF9 or 249) --> Installation Check (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:
Αυτή η λειτουργία χρησιμοποιείται για έλεγχο εγκατάστασης. Εάν η συνάρτηση είναι επιτυχημένη, η σημαία μεταφοράς είναι καθαρή και το DX επιστρέφει τη λέξη διαμόρφωσης, διαφορετικά έχει οριστεί η σημαία μεταφοράς.
Το Bit 15 ορίζεται εάν είναι διαθέσιμες άλλες επεκτάσεις SWBIOS. Η Διαχείριση δίσκων υποστηρίζει επίσης αυτές τις κλήσεις.
INT 13H (0x13)
Function FEH (0xFE or 254) --> Get Extended Cylinder Count (SWBIOS)
Call with: AH = FEH
DL = Drive Number
Return:
Carry Flag = Clear
DX = Number of Cylinders beyond 1024
on drive
Comments:
Αυτή η λειτουργία χρησιμοποιείται για τη λήψη του εκτεταμένου αριθμού κυλίνδρων. Η συνάρτηση AH = 08H του INT 13H θα επιστρέψει έναν αριθμό κυλίνδρων που έχει περικοπεί στο 1024. Το BIOS χωρίς αυτήν την επέκταση θα επέστρεφε το count modul 1024. Το Disk Manager υποστηρίζει επίσης αυτές τις κλήσεις
INT 13H (0x13)
Function FFH (0xFF or 255) --> Officially Private Function (IBM SurePath BIOS)
INT 13H (0x13)
Function FFFFH (0xFFFF) --> Set Turbo Mode (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:
Αυτή η λειτουργία χρησιμοποιείται για τη ρύθμιση της λειτουργίας Turbo. Οι αριθμοί Sub-συναρτήσεων για την κλήση της συνάρτησης με BL έχουν δοθεί στον ακόλουθο πίνακα:
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
|
Πώς να χρησιμοποιήσετε τις επεκτάσεις INT 13H στον προγραμματισμό C
Μπορούμε να καλέσουμε τις Συναρτήσεις Επέκτασης του INT 13H με τις ίδιες συναρτήσεις C (int86(), int86x() κ.λπ.), τις οποίες χρησιμοποιούσαμε στα προηγούμενα κεφάλαια. Ας το μάθουμε με ένα παράδειγμα.
Το ακόλουθο παράδειγμα δίνει την εστίαση στις τρεις λειτουργίες (Έλεγχος παρόντων επεκτάσεων, εκτεταμένη ανάγνωση και εκτεταμένη εγγραφή). Ωστόσο, δεν πρόκειται να χρησιμοποιήσουμε τη λειτουργία εκτεταμένης εγγραφής σε αυτό το κεφάλαιο.
Το πρόγραμμα ελέγχει πρώτα εάν υποστηρίζονται επεκτάσεις ή όχι εάν οι επεκτάσεις υπάρχουν για το INT 13H, διαβάζει τον απόλυτο τομέα 0 (άρα MBR) του δίσκου. Η κωδικοποίηση του προγράμματος γίνεται με τον εξής τρόπο:
/* Πρόγραμμα πρόσβασης σε τομείς πέραν των 8,46 GB χρησιμοποιώντας επεκτάσεις INT 13 BIOS */
#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()
{
/* Θα γραφτεί με τον ίδιο τρόπο όπως η συνάρτηση read_sectors, εκτός από το Function Number, που θα είναι 0x43 σε αυτή τη συνάρτηση. Θα συζητήσουμε την εκτεταμένη λειτουργία εγγραφής στα επόμενα κεφάλαια.
Πριν χρησιμοποιήσετε αυτήν τη λειτουργία, ελέγξτε και επαληθεύστε τι πρόκειται να κάνετε. Θα πρέπει να έχετε τη σωστή γνώση του τι πρόκειται να κάνετε. Η χρήση αυτής της λειτουργίας ελλείψει γνώσης ή απρόσεκτα μπορεί να καταστρέψει τα δεδομένα σας. */
}
/// 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]);
}
}
Σχόλια για την Κωδικοποίηση του προγράμματος
typedef Εκχωρεί το αναγνωριστικό στον τύπο δεδομένων έτσι ώστε να πληκτρολογεί unsigned char Byte. εκχωρεί αναγνωριστικό Byte για τον τύπο δεδομένων char. Ομοίως, το αναγνωριστικό Word εκχωρείται στο int και το DWord εκχωρείται στο long.
Η δομή disk_packet φορτώνεται στο DS:SI και εκτελείται η εντολή (όπως εκτεταμένη ανάγνωση, εκτεταμένη εγγραφή ή επαλήθευση κ.λπ.). Δείτε τις λειτουργίες των επεκτάσεων IBM/MS INT 13H (Λειτουργία 41H έως Λειτουργία 49H) που δόθηκαν προηγουμένως.
Η συνάρτηση check_ext_present() ελέγχει εάν οι επεκτάσεις είναι διαθέσιμες/υποστηριζόμενες ή όχι. Η συνάρτηση καλείται με BX=55AAH (inregs.x.bx=0x55AA;) και εάν υποστηρίζονται επεκτάσεις, ο καταχωρητής BX ορίζεται σε AA55H. (Δείτε τη συνάρτηση 41H που δόθηκε πριν)
Η συνάρτηση read_sectors χρησιμοποιείται για την ανάγνωση του απόλυτου τομέα του δίσκου, που καθορίζεται από το disk_pack.lba1. Σε αυτό το πρόγραμμα έχουμε δώσει disk_pack.lba1=0, επομένως θα διαβάσουμε τον απόλυτο τομέα 0 (Δείτε τη σημείωση παρακάτω) θα διαβάσουμε έτσι το MBR του δίσκου.
Η συνάρτηση write_sector είναι επίσης ίδια με τη συνάρτηση read_sectors και θα γραφτεί με τον ίδιο τρόπο αλλά με τις διαφορετικές επιλογές Function. Θα το χρησιμοποιήσουμε στα επόμενα κεφάλαια.
Σημείωση:
Διαβάζουμε τους τομείς του δίσκου με τους εξής δύο τρόπους:
- Σχετικός Τομέας Ανάγνωση (ή Εγγραφή)
- Απόλυτος τομέας Ανάγνωση (ή Εγγραφή)
Στο Relative Sector Read διαβάζουμε τους τομείς του δίσκου σύμφωνα με τη γεωμετρία CHS (Κύλινδρος, Κεφαλή και Τομέας) του δίσκου. Σε σχετικό τομέα διαβάστε το MBR του δίσκου (First Sector of the disk) βρίσκεται στον κύλινδρο 0, στην κεφαλή 0 και στον τομέα 1.
Στην Απόλυτη ανάγνωση των τομέων του δίσκου, δεν χρειάζεται να καθορίσουμε τους αριθμούς κυλίνδρου ή κεφαλής στο πρόγραμμά μας. Οι απόλυτοι τομείς υπολογίζονται από τον απόλυτο τομέα 0.
Επομένως, εάν πρόκειται να διαβάσουμε το MBR του δίσκου (Πρώτος τομέας του δίσκου), θα διαβάσουμε τον απόλυτο τομέα 0. Είναι δουλειά του BIOS να μετατρέψει τον απόλυτο αριθμό τομέα στον αντίστοιχο Κύλινδρο, Κεφαλή και αριθμός τομέα.
Όπως στην ανάγνωση (ή εγγραφή) απόλυτου τομέα, πρέπει να υπολογίσουμε μόνο τους απόλυτους τομείς εντός του βρόχου στις πράξεις όπως ανάγνωση ή εγγραφή ολόκληρου δίσκου, ενώ σε περίπτωση ανάγνωσης (ή εγγραφής) σχετικού τομέα, πρέπει να εκτελέστε τρεις βρόχους τη φορά για τον υπολογισμό του CHS, επομένως η ανάγνωση/εγγραφή απόλυτου τομέα είναι πολύ πιο γρήγορη από την ανάγνωση/εγγραφή σχετικού τομέα.
Για παράδειγμα,αν έχουμε οποιονδήποτε σκληρό δίσκο με τις 16 κεφαλές (πλευρές), τους 12 κυλίνδρους και τους 63 τομείς, ο πίνακας που ακολουθεί δείχνει τη διαδικασία και τη διαφορά και των δύο μεθόδων ανάγνωσης και έτσι δείχνει την προσέγγιση του απόλυτου τομέα μπορεί να κάνει τα προγράμματα που χρειάζονται χρόνο (όπως η ανάγνωση/εγγραφή ολόκληρου του δίσκου ή ολόκληρα προγράμματα σκουπίσματος δίσκου κ.λπ.) να εκτελούνται πολύ πιο γρήγορα:
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
|
Οι πληροφορίες του πίνακα κατατμήσεων του MBR, οι οποίες εμφανίζονται από οποιοδήποτε εργαλείο ανάλυσης MBR δίσκου, έχουν δοθεί παρακάτω:
Στις παραπάνω πληροφορίες, οι σχετικοί αριθμοί τομέα για την έναρξη και των δύο διαμερισμάτων είναι 63 και 11277630 αντίστοιχα, οι οποίοι είναι απαλλαγμένοι από κατατμήσεις και υπολογίζονται σύμφωνα με τον αριθμό των τομέων που είναι διαθέσιμοι στο δίσκο.
Σελίδα Τροποποιήθηκε στις: 13/01/2022