Capitolo – 9
Gestione di dischi rigidi di grandi dimensioni
Gestione di dischi rigidi di grandi dimensioni
Nel capitolo precedente abbiamo discusso delle funzioni BIOS-Disk e dell'uso degli interrupt per accedere al supporto fisico dei dischi rigidi. Abbiamo usato le funzioni INT 13H per accedere ai dischi rigidi.
L'interfaccia INT 13H supporta molti comandi diversi come lettura, scrittura, formattazione e verifica ecc. che possono essere dati al BIOS, che poi li trasmette al disco rigido. Poiché è stato utilizzato per molto tempo da DOS, INT13H è stato lo standard per molti anni.
L'INT 13H alloca 24 bit per la specifica della geometria dell'unità e richiede che il programma di richiamo conosca i parametri specifici del disco rigido e fornisca l'esatto indirizzamento di testa, cilindro e settore alle routine per consentire l'accesso al disco.
Il BIOS utilizza la geometria per il disco rigido così come è impostata nel programma di configurazione del BIOS. I 24 bit, allocati dall'interfaccia INT 13H per la specifica della geometria dell'azionamento, sono così suddivisi:
- 10 bit per il numero del cilindro. Pertanto il limite massimo di bombole totali può arrivare fino a 1.024 bombole.
- 8 bit per il numero di testa. Quindi il limite massimo di teste totali è fino a 256.
- 6 bit per il numero del settore. Pertanto, un totale massimo di settori può essere fino a 63 settori.
Quindi i settori massimi supportati da questo approccio possono essere fino a 1024 * 256 * 63 = 16515072.
Ciò significa che l'interfaccia INT13H può supportare dischi contenenti fino a circa 16,5 milioni di settori, che a 512 byte per settore portano a un massimo di 8,46 GB. È proprio questo che voglio spiegare. Quindi, utilizzando tutte queste funzioni o INT 13H, possiamo accedere solo ai dischi fino a 8,46 GB.
Ecco perché, negli ultimi anni, i limiti di questa vecchia interfaccia ne hanno causato l'abbandono a favore di un nuovo modo di indirizzare i dischi rigidi, come descritto di seguito in questo capitolo.
Prima di tutto, lascia che ti racconti una Storia!
Undici anni fa, quando ero al settimo standard, nella mia scuola, ho sentito parlare dell'hard disk con la capacità di 42 MB, forse era WDA-L42 di IBM. È stato davvero difficile per me e i miei amici immaginare una capacità del disco rigido così grande, quella volta.
La metodologia INT 13H è stata sviluppata circa vent'anni fa da oggi. Ora puoi capire che un disco rigido da 8 GB era molto più grande per adattarsi anche ai sogni di quell'età. Ma oggi, se parliamo di un disco rigido da 8 GB a qualsiasi utente di personal computer, potrebbe non piacere usarlo dicendo che ha una capacità di archiviazione ridotta.
Questo è il motivo per cui l'interfaccia INT 13H ha finalmente esaurito la sua utilità nei sistemi moderni. INT 13H utilizzava 24 bit per allocare la geometria del disco e sfortunatamente non è stato possibile espandere l'interfaccia BIOS INT 13H esistente perché se fosse stato fatto, molto hardware e software più vecchi smetterebbero di funzionare e puoi capire che il mercato dei computer di oggi non potrà mai sopportare un cambiamento così grande con milioni di prodotti software e hardware meno recenti che smettono di funzionare.
Tenendo presente questa condizione, INT 13H è stato sostituito con un'interfaccia più recente denominata estensioni INT 13H. Tuttavia INT 13H può ancora essere utilizzato da DOS e da altri sistemi operativi meno recenti e per altri scopi di compatibilità.
La nuova interfaccia INT 13H utilizza 64 bit anziché 24 bit per l'indirizzamento e consente una dimensione massima del disco rigido di 9,4 * 1021 byte, ovvero 9,4 trilioni di gigabyte o 9400000000000 Gigabyte. Spero che ora siamo rilassati per un po' di tempo fino a quando questo limite non sarà superato.
Di seguito sono state descritte alcune importanti funzioni dell'estensione per interrupt 13H. È possibile utilizzare queste funzioni nella programmazione nello stesso modo in cui si utilizzano le funzioni di INT 13H. Questo è anche un motivo per cui queste funzioni sono chiamate estensioni di INT 13H.
INT 13H Estensioni:
INT 13H (0x13)
Funzione 1BH (0x1B o 27) --> Ottieni intestazione di produzione (disco fisso 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:
Questa funzione viene utilizzata per ottenere l'intestazione di produzione del disco fisso. Il primo settore letto contiene l'intestazione di fabbricazione con il numero di voci dei difetti e l'inizio della mappa dei difetti; i settori rimanenti contengono il resto della mappa dei difetti. Il formato dell'intestazione di produzione (formato del record della mappa dei difetti) è disponibile in IBM 70MB, 115MB Fixed Disk Drives Technical Reference.
INT 13H (0x13)
Funzione 1BH (0x1B o 27) --> Ottieni il puntatore al blocco delle informazioni del disco SCSI (controller SCSI del dominio futuro)
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:
Questa funzione viene utilizzata per ottenere il puntatore a Blocco informazioni disco SCSI. Questo imposta anche un flag non ripristinabile che impedisce la visualizzazione di alcuni messaggi del controller.
INT 13H (0x13)
Funzione 1CH (0x1C o 28) --> Ottieni il puntatore alla RAM del controller gratuita (controller SCSI di dominio futuro)
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:
Questa funzione viene utilizzata per ottenere la Ram del controller gratuita. ES:BX punta al primo byte di RAM libera sul controller, disponibile per altri usi. ES contiene il segmento in cui risiede il controller. Le due porte I/O mappate in memoria del controller sono agli offset 1C00H e 1E00H.
INT 13H (0x13)
Funzione 1C08H (0x1C08) --> Ottieni lo stato di completamento dei comandi (disco fisso ESDI)
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:
Questa funzione viene utilizzata per ottenere lo stato di completamento del comando. Se la funzione ha esito positivo, il flag di riporto è cancellato e se il flag di riporto non riuscito è impostato.
INT 13H (0x13)
Funzione 1C09H (0x1C09) --> Ottieni lo stato del dispositivo (disco fisso ESDI)
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:
Questa funzione viene utilizzata per ottenere lo stato del dispositivo. Se la funzione ha esito positivo, il flag di riporto è cancellato e se il flag di riporto non riuscito è impostato.
INT 13H (0x13)
Funzione 1C0AH (0x1C0A) --> Ottieni la configurazione del dispositivo (disco fisso ESDI)
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:
Questa funzione viene utilizzata per ottenere la configurazione del dispositivo per il disco. Se la funzione ha esito positivo, il flag di riporto è azzerato e il registro AH è 01H altrimenti il flag di riporto è impostato e il registro AH restituisce lo stato. La tabella seguente mostra il formato del blocco di stato della configurazione dell'unità 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)
Funzione 1C0BH (0x1C0B) --> Ottieni la configurazione dell'adattatore (disco fisso ESDI)
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:
Questa funzione viene utilizzata per ottenere la configurazione dell'adattatore. Se la funzione ha esito positivo, il flag di riporto è azzerato e AH è 01H, se viene impostato il flag di riporto non riuscito e AH restituisce lo stato.
INT 13H (0x13)
Funzione 1C0CH (0x1C0C) --> Ottieni informazioni POS (disco fisso ESDI)
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:
Questa funzione viene utilizzata per ottenere le informazioni POS. Se la funzione ha esito positivo, il flag di riporto è azzerato e AH è 01H, se viene impostato il flag di riporto non riuscito e AH restituisce lo stato.
INT 13H (0x13)
Funzione 1C0EH (0x1C0E) --> Traduci RBA in ABA (disco fisso ESDI)
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:
Questa funzione converte l'RBA (Relative Block Address) in ABA (Absolute Block Address). Se la funzione ha esito positivo, il flag di riporto è azzerato e il registro AH è 01H, altrimenti il flag di riporto è impostato e AH restituisce lo stato.
INT 13H (0x13)
Funzione 20H (0x20 o 32) --> Ottieni il formato multimediale corrente (dispositivo per supporti rimovibili ATAPI Compaq)
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:
Questa funzione viene utilizzata per ottenere il formato multimediale corrente. I valori per il tipo di supporto per dischetti Compaq/ATAPI sono stati forniti nella tabella seguente:
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)
Funzione 21H (0x21 o 33) --> Leggi più settori di dischi (PS e PS/2, dischi rigidi)
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:
La funzione viene utilizzata per leggere più settori del disco utilizzando la modalità blocco multiplo, che genera un'interruzione solo al termine del trasferimento di un gruppo di settori anziché dopo ogni settore.
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:
La funzione viene utilizzata per scrivere più settori del disco utilizzando la modalità blocco multiplo, che genera un'interruzione solo al termine del trasferimento di un gruppo di settori anziché dopo ogni settore.
INT 13H (0x13)
Funzione 22 ore (0x22 o 34) --> Abilita/Disabilita 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:
Questa funzione abilita e/o disabilita la memorizzazione nella cache di tutte le unità. Se la funzione ha esito positivo il registro AX è 0000H altrimenti restituisce lo stato.
INT 13H (0x13)
Funzione 23H (0x23 o 35) --> Imposta il registro delle funzioni del controller (PS e PS/2, disco rigido)
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:
Questa funzione viene utilizzata per impostare il registro delle funzioni del controller. Se la funzione ha esito positivo, il flag di riporto è azzerato e se il flag di riporto non riuscito è impostato e il registro AH restituisce lo stato
INT 13H (0x13)
Funzione 24 ore (0x24 o 36) --> Imposta multiplo: modalità di trasferimento (disco rigido, PS e 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:
Questa funzione viene utilizzata per impostare la modalità di trasferimento multiplo. Se si desidera disabilitare la modalità di trasferimento multiplo, impostare il numero di settori su 0. Il valore massimo per la dimensione del blocco (come 2,4,6,8 e 16 ecc.) dipende dal tipo di unità disco fisso.
Il valore è memorizzato nel byte 15H della tabella dei parametri dell'unità disco fisso creata da POST (Power On Self-Test). Il byte all'indirizzo 0040H:0074H è impostato sullo stato di funzionamento. I valori per il numero della funzione del disco rigido PS/1 sono stati elencati nella tabella seguente:
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)
Funzione 24 ore (0x24 o 36) --> Imposta i settori (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:
Questa funzione viene utilizzata per impostare i settori. Se la funzione ha esito positivo, il registro AX è 0000H altrimenti AX restituisce lo stato.
INT 13H (0x13)
Funzione 25 ore (0x25 o 37) --> Identifica unità (disco rigido, PS e 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:
Questa funzione viene utilizzata per identificare l'azionamento. Il byte all'indirizzo 0040h:0074h è impostato sullo stato dell'operazione. IBM classifica ufficialmente questa funzione come facoltativa. I campi Bit per la configurazione generale dell'azionamento sono riportati nella tabella seguente:
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)
|
La descrizione del blocco delle informazioni sul formato dell'unità come fornita nella specifica ATA (AT Attachment) è stata fornita nella tabella seguente:
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)
Funzione 25 ore (0x25 o 37) --> Imposta l'intervallo di svuotamento (QuickCache II v4.20)
Call with: AH = 25H
BX = Interval of Flush
Return: If Function Successful,
AH = 0000H
If Function Unsuccessful,
AH = status
Comments:
Questa funzione viene utilizzata per impostare l'intervallo di lavaggio. Se la funzione ha esito positivo, AH è 0000H, altrimenti AH restituisce lo stato.
INT 13H (0x13)
Funzione 26 ore (0x26 o 38) --> Disinstallazione di QuickCache II v4.20
Call with: AH = 26H
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = status
Comments:
AX restituisce lo stato da 0001H a 00FFH per il vettore di interrupt che è stato agganciato da un altro TSR
INT 13H (0x13)
Funzione 27 ore (0x27 o 39) --> Verifica dell'installazione (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:
Se installato, AX Register è 0000H e BX restituisce un valore diverso da zero.
INT 13H (0x13)
Funzione 28 ore (0x28 o 40) --> Imposta lo smontaggio automatico (QuickCache II v4.20)
Call with: AH = 28H
AL = New State
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Funzione di chiamata con AL = 00H per Disattivare e con AL = 01H per Attivare.
INT 13H (0x13)
Funzione 29H (0x29 o 41) --> Nessuna operazione (QuickCache II v4.20)
Call with: AH = 29H
Return: AX = 0000H
INT 13H (0x13)
Funzione 2AH (0x2A o 42) --> Imposta la dimensione del buffer (QuickCache II v4.20)
Call with: AH = 2AH
AL = Buffer Size
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Questa funzione viene utilizzata per impostare la dimensione del buffer. Se la funzione ha esito positivo, AX è 0000H, se AX non ha esito positivo restituisce lo stato.
INT 13H (0x13)
Funzione 2BH (0x2B o 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:
Se la funzione ha esito positivo, AX è 0000H, se AX non ha esito positivo restituisce lo stato. Funzione di chiamata con AL = 00H per disattivare e AL = 01H per abilitare i suoni di accesso all'unità
INT 13H (0x13)
Funzione 2CH (0x2C o 44) --> Imposta la scrittura nel buffer (QuickCache II v4.20)
Call with: AH = 2CH
AL = new state
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Questa funzione abilita o disabilita le scritture ritardate per tutte le unità. Utilizzare AH=38H per modificare una singola unità. Usa AL = 00H per disabilitare e 01H per abilitare.
INT 13H (0x13)
Funzione 2DH (0x2D o 45) --> Imposta la lettura nel buffer (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:
Questa funzione abilita o disabilita il read-ahead per tutte le unità. Utilizzare AL = 00H per disabilitare e AL = 01H per abilitare. Usa AH=37H per cambiare una singola unità.
INT 13H (0x13)
Funzione 2EH (0x2E o 46) --> Imposta il conteggio degli scarichi (QuickCache II v4.20)
Call with: AH = 2EH
BX = Flush count
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Questa funzione viene utilizzata per impostare il conteggio dei risciacqui. Se la funzione ha esito positivo, AX è 0000H, se AX non ha esito positivo restituisce lo stato.
INT 13H (0x13)
Funzione 2FH (0x2F o 47) --> Forza lo svuotamento incrementale immediato (QuickCache II v4.20)
Call with: AH = 2FH
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Se la funzione ha esito positivo, AX è 0000H, se AX non ha esito positivo restituisce lo stato.
INT 13H (0x13)
Funzione 30H (0x30 o 48) --> Ottieni informazioni (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:
Questa funzione viene utilizzata per ottenere i diversi tipi di informazioni sul sistema, specificate da AL. Se la funzione ha esito positivo, AX è 0000H, se non ha esito positivo AX restituisce lo stato. AX = 8000H indica l'identificatore di informazioni non valido. I numeri informativi da specificare ad AL sono stati elencati nella tabella seguente:
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)
Funzione 31H (0x31 o 49) --> Riserva memoria (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:
Questa funzione viene utilizzata per riservare la memoria per le applicazioni. Se la funzione ha esito positivo, AX è 0000H, se AX non ha esito positivo restituisce lo stato.
INT 13H (0x13)
Funzione 32H (0x32 o 50) --> Abilita la memorizzazione nella cache per un'unità specifica (QuickCache II v4.20)
Call with: AH = 32H
AL = drive number
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Questa funzione viene utilizzata per abilitare la memorizzazione nella cache per un'unità specifica. Ad esempio, chiama Function con AL = 00H per A: e così via. Se la funzione ha esito positivo, AX è 0000H, se AX non ha esito positivo restituisce lo stato.
INT 13H (0x13)
Funzione 33H (0x33 o 51) --> Disabilita la memorizzazione nella cache per un'unità specifica (QuickCache II v4.20)
Call with: AH = 33H
AL = drive number
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Questa funzione viene utilizzata per disabilitare la memorizzazione nella cache per un'unità specifica. Ad esempio, chiama Function con AL = 00H per A: e così via. Se la funzione ha esito positivo, AX è 0000H, se AX non ha esito positivo restituisce lo stato.
INT 13H (0x13)
Funzione 34H (0x34 o 52) --> Blocca/Sblocca settore/i (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:
Questa funzione viene utilizzata per chiamare le funzioni di blocco/sblocco dei settori, specificate da AL. Se la funzione ha esito positivo, AX è 0000H, se non ha esito positivo AX restituisce lo stato. I diversi numeri di funzione da chiamare con AL sono riportati nella tabella seguente:
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)
Funzione 35H (0x35 o 53) --> Imposta la dimensione del pool di blocco (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:
Questa funzione viene utilizzata per impostare la dimensione del pool di blocco. Se la funzione ha esito positivo, AX è 0000H, se AX non ha esito positivo restituisce lo stato.
INT 13H (0x13)
Funzione 36H (0x36 o 54) --> Imposta la dimensione del buffer di traccia
Call with: AH = 36H
AL = New size of trace buffer
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Questa funzione viene utilizzata per impostare la dimensione del buffer di traccia. Se la funzione ha esito positivo, AX è 0000H, se non ha esito positivo AX restituisce lo stato. Questa funzione viene solitamente chiamata con la funzione 24H di INT 13H con AL=05H.
INT 13H (0x13)
Funzione 37H (0x37 o 55) --> Imposta letture bufferizzate per unità specifiche (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:
Questa funzione viene utilizzata per impostare letture bufferizzate per un'unità specifica. Se AL = 00H lo Stato è abilitato, altrimenti disabilita. Se la funzione ha esito positivo, AX è 0000H, se AX non ha esito positivo restituisce lo stato.
INT 13H (0x13)
Funzione 38H (0x38 o 56) --> Imposta scritture bufferizzate per unità specifiche (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:
Questa funzione viene utilizzata per impostare le scritture bufferizzate per un'unità specifica. Se AL = 00H lo Stato è abilitato, altrimenti disabilita. Se la funzione ha esito positivo, AX è 0000H, se AX non ha esito positivo restituisce lo stato.
INT 13H (0x13)
Funzione 39H (0x39 o 57) --> Imposta la dimensione del buffer di lettura per un'unità specifica (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:
Questa funzione viene utilizzata per impostare la dimensione del buffer di lettura per un'unità specifica come DL = 00H per A: e così via. Se la funzione ha esito positivo, AX è 0000H, se AX non ha esito positivo restituisce lo stato.
INT 13H (0x13)
Funzione 3AH (0x3A o 58) --> Imposta la dimensione del buffer di scrittura per un'unità specifica (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:
Questa funzione viene utilizzata per impostare la dimensione del buffer di scrittura per un'unità specifica come DL = 00H per A: e così via. Se la funzione ha esito positivo, AX è 0000H, se AX non ha esito positivo restituisce lo stato.
INT 13H (0x13)
Funzione 3DH (0x3D o 61) --> Abilita/Disabilita il lavaggio del cilindro per l'unità (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:
Questa funzione viene utilizzata per abilitare/disabilitare il lavaggio del cilindro per un'unità specifica come DL = 00H per A: e così via. Se la funzione ha esito positivo, AX è 0000H, se non ha esito positivo AX restituisce lo stato. Se il registro AL è impostato su 01H, lo stato è abilitato, altrimenti disabilita.
INT 13H (0x13)
Funzione 3EH (0x3E o 62) --> Imposta bonus per settore singolo (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:
Questa Funzione permette di impostare il Bonus Singolo Settore. Se la funzione ha esito positivo, AX è 0000H, se AX non ha esito positivo restituisce lo stato.
INT 13H (0x13)
Funzione 3FH (0x3F o 63) --> Imposta soglia bonus (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:
Questa funzione viene utilizzata per impostare la soglia del bonus. Se la funzione ha esito positivo, AX è 0000H, se AX non ha esito positivo restituisce lo stato
INT 13H (0x13)
Funzione 41H (0x41 o 65) --> Verifica dell'installazione (estensioni IBM/MS INT 13H)
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:
Questa funzione verifica se le estensioni IBM/MS INT 13H sono installate e supportate. I valori per le versioni principali delle estensioni sono stati forniti nella tabella seguente:
Value
|
Major Version of Extension
|
01H
|
1.x
|
20H
|
2.0 / EDD-1.0
|
21H
|
2.1 / EDD-1.1
|
30H
|
EDD-3.0
|
I campi Bit per la bitmap di supporto API IBM/MS INT 13H Extensions sono stati forniti nella tabella seguente:
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)
Funzione 42H (0x42 o 66) --> Lettura estesa (estensioni IBM/MS INT 13H)
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:
Questa funzione è l'estensione della funzione di lettura del disco. Se la funzione ha esito positivo, il flag di carry è azzerato e il registro AH è 00H, altrimenti il flag di Carry è impostato e AH restituisce il codice di errore. Il campo del conteggio dei blocchi del pacchetto dell'indirizzo del disco è impostato sul numero di blocchi trasferiti con successo. Il formato del pacchetto di indirizzi del disco è stato fornito di seguito:
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)
Funzione 43H (0x43 o 67) --> Scrittura estesa (estensioni IBM/MS INT 13H)
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:
Questa funzione è l'estensione della funzione di scrittura su disco. Se la funzione ha esito positivo, il flag di carry è azzerato e il registro AH è 00H, altrimenti il flag di Carry è impostato e AH restituisce il codice di errore. Il campo del conteggio dei blocchi del pacchetto dell'indirizzo del disco è impostato correttamente sul numero di blocchi. Le informazioni sui flag di scrittura per le diverse versioni sono state fornite nella tabella seguente:
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)
Funzione 44 ore (0x44 o 68) --> Verifica i settori (estensioni IBM/MS INT 13H)
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:
Questa funzione è l'estensione della funzione Verifica settori. Se la funzione ha esito positivo, il flag di carry è azzerato e il registro AH è 00H, altrimenti il flag di Carry è impostato e AH restituisce il codice di errore. Il campo del conteggio dei blocchi del pacchetto dell'indirizzo del disco è impostato sul numero di blocchi riusciti
INT 13H (0x13)
Funzione 45H (0x45 o 69) --> Blocca/sblocca unità (estensioni IBM/MS INT 13H)
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:
Questa funzione viene utilizzata per bloccare/sbloccare l'unità. Questa funzione deve essere supportata per qualsiasi unità rimovibile numerata 80H o superiore. È possibile posizionare fino a 255 blocchi su un'unità e il supporto non verrà sbloccato fisicamente finché tutti i blocchi non saranno stati rimossi.
Se la funzione ha esito positivo, il flag di carry è azzerato e il registro AH è 00H, altrimenti il flag di Carry è impostato e AH restituisce il codice di errore.
Nella tabella seguente sono riportati i numeri di operazione per diverse operazioni di blocco/sblocco dell'unità:
Value
|
Function
|
00H
|
Lock media in drive
|
01H
|
Unlock media
|
02H
|
Check lock status
|
INT 13H (0x13)
Funzione 46H (0x46 o 70) --> Espelli media (estensioni IBM/MS INT 13H)
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:
Questa funzione serve per espellere il supporto. Se la funzione ha esito positivo, il flag di carry è azzerato e il registro AH è 00H, altrimenti il flag di Carry è impostato e AH restituisce il codice di errore.
INT 13H (0x13)
Funzione 47H (0x47 o 71) --> Ricerca estesa (estensioni IBM/MS INT 13H)
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:
Questa funzione è l'estensione della funzione di ricerca. Se la funzione ha esito positivo, il flag di carry è azzerato e il registro AH è 00H, altrimenti il flag di Carry è impostato e AH restituisce il codice di errore. Il campo del conteggio dei blocchi del pacchetto dell'indirizzo del disco è impostato sul numero di blocchi riusciti.
INT 13H (0x13)
Funzione 48H (0x48 o 72) --> Ottieni parametri di azionamento (estensioni IBM/MS INT 13H)
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:
Questa funzione viene utilizzata per ottenere i parametri dell'azionamento. Se la funzione ha esito positivo, il flag di carry è azzerato e il registro AH è 00H con DS:SI del buffer riempito, altrimenti il flag di Carry è impostato e AH restituisce il codice di errore.
INT 13H (0x13)
Funzione 49H (0x49 o 73) --> Modifica multimediale estesa (estensioni IBM/MS INT 13H)
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:
Questa funzione è l'estensione della funzione di modifica del supporto. Se la funzione ha esito positivo, il flag di carry è azzerato e il registro AH è 00H, altrimenti il flag di Carry è impostato e AH restituisce il codice di errore.
La differenza principale tra questa funzione e la funzione AH = 16H di INT 13H è che possiamo specificare qualsiasi numero di unità, dove la funzione 16H consente solo il numero di unità da 00H a 7FH di floppy disk.
INT 13H (0x13)
Funzione 4AH (0x4A o 74) --> Avvia l'emulazione del disco (CD-ROM avviabile)
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:
Questa funzione viene utilizzata per avviare l'emulazione del disco. Se la funzione ha esito positivo, il flag di carry è azzerato, altrimenti viene impostato il flag di carry e il registro AX restituisce il codice di stato e l'unità non sarà in modalità di emulazione.
Il formato del pacchetto delle specifiche del CD-ROM di avvio è stato fornito nella tabella seguente:
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)
|
I campi Bit per il tipo di supporto di avvio da CD-ROM avviabile sono stati forniti nella tabella seguente:
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)
Funzione 4B00H (0x4B00) --> Termina l'emulazione del disco (CD-ROM avviabile)
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:
Questa funzione viene utilizzata per terminare l'emulazione del disco. Se si desidera terminare tutte le emulazioni, chiamare la funzione con DL = 7FH. Se la funzione ha esito positivo, il flag di riporto è azzerato, altrimenti viene impostato il flag di riporto e il registro AX restituisce il codice di stato e l'unità rimane in modalità di emulazione.
INT 13H (0x13)
Funzione 4B01H (0x4B01) --> Ottieni stato (CD-ROM avviabile)
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:
La funzione viene utilizzata per ottenere lo stato. Se la funzione ha esito positivo, il flag di riporto è azzerato, altrimenti è impostato il flag di riporto e il registro AX restituisce il codice di stato
INT 13H (0x13)
Funzione 4CH (0x4C o 76) --> Avvia l'emulazione del disco e avvia (CD-ROM avviabile)
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:
Questa funzione viene utilizzata per avviare l'emulazione del disco e avviare il sistema. Se la funzione ha esito positivo, non restituisce nient'altro, viene impostato il flag di riporto e il registro AX restituisce il codice di stato.
INT 13H (0x13)
Funzione 4D00H (0x4D00) --> Return Boot Catalog (CD-ROM avviabile)
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:
Questa funzione viene utilizzata per restituire il catalogo di avvio. Se la funzione ha esito positivo, il flag di riporto è azzerato, altrimenti viene impostato il flag di riporto e il registro AX restituisce il codice di stato. Il formato del CD-ROM di avvio di "Get Boot Catalog" il pacchetto di comandi è stato fornito nella tabella seguente:
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)
Funzione 4EH (0x4E o 78) --> Imposta configurazione hardware (Estensioni IBM/MS INT 13H 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:
Questa funzione viene utilizzata per impostare la configurazione hardware. I numeri di funzione per AL per chiamare questa funzione sono stati forniti nella tabella seguente:
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
|
Le modalità DMA e PIO si escludono a vicenda, quindi selezionando DMA disabilita PIO per il dispositivo specificato o tutti i dispositivi su quel controller e selezionando PIO disabilita DMA
INT 13H (0x13)
Funzione 5001H (0x5001) --> Invia comando pacchetto (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:
Questa funzione viene utilizzata per inviare i comandi a pacchetto. Se la funzione ha esito positivo, il flag di carry è azzerato e il registro AH è 00H, altrimenti il flag di Carry è impostato e AH restituisce il codice di errore. Il pacchetto di comandi Format of Enhanced Disk Drive Spec v3.0 è stato fornito nella tabella seguente:
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)
Funzione 5501H (0x5501) --> Richiesta (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:
Questa funzione viene utilizzata per inviare richieste. Il BIOS ST01/ST02 non restituisce alcuna indicazione di successo o errore per la funzione, pertanto tutti i comandi devono essere ritenuti riusciti.
Il BIOS ST01/ST02 mappa sempre le sue unità dopo le unità BIOS precedenti senza modificare il conteggio delle unità BIOS a 0040H:0075H. Questo comando è identico al comando di richiesta SCSI
INT 13H (0x13)
Funzione 5502H (0x5502) --> Riservato (Seagate ST01/ST02)
INT 13H (0x13)
Funzione 5503H (0x5503) --> Imposta 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:
Questa funzione viene utilizzata per impostare il DTQ (Device Type Qualifier). La funzione non restituisce nulla. I campi Bit per il byte DTQ sono stati mostrati nella tabella seguente:
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)
Funzione 5504H (0x5504) --> Identificazione del reso (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:
La funzione viene utilizzata per restituire l'identificazione delle unità.
INT 13H (0x13)
Funzione 5505H (0x5505) --> Park Heads (Seagate ST01/ST02)
Call with: AX = 5505H
DL = Drive Number
DH = Sub function (see the comments)
Return:
Nothing
Comments:
La funzione serve per parcheggiare le testine del disco. Era usato nei vecchi dischi rigidi, tuttavia i moderni dischi rigidi non hanno bisogno di alcun programma esterno per parcheggiare le loro testine.
La funzione secondaria 00H parcheggia le testine (comando SCSI Stop) e la funzione secondaria 01H un-park le testine (comando SCSI Start) del disco.
INT 13H (0x13)
Funzione 5506H (0x5506) --> Parità bus SCSI (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:
Chiama la funzione con il seguente numero di sottofunzione per DH:
Value
|
Description
|
00H
|
Disable parity check
|
01H
|
Enable parity check
|
02H
|
Return current parity setting
|
INT 13H (0x13)
Funzione 5507H (0x5507) Alla funzione 550DH (0x550D) --> Funzioni riservate (Seagate ST01/ST02)
Call with: AX = 5507H to AX = 550DH
Comments:
These Functions have been officially listed as "Reserved"
INT 13H (0x13)
Funzione A0H (0xA0 o 160) --> Ottieni il segmento del codice residente (Super PC-Kwik v3.20 e versioni successive)
Call with: AH = A0H
SI = 4358H
Return:
AX = Segment of Resident Code
Comments:
Questa funzione viene utilizzata per ottenere il segmento di codice residente. AX restituisce il segmento del codice residente.
INT 13H (0x13)
Funzione A1H (0xA1 o 161) --> Svuota cache (Super PC-Kwik v3.20 e versioni successive)
Call with: AH = A1H
SI = 4358H
Return:
Carry Flag = Clear
AH = 00H (v5.10)
Comments:
La funzione viene utilizzata per svuotare la cache.
INT 13H (0x13)
Funzione A3H (0xA3 o 163) --> Disattiva cache (Super PC- Kwik v3.20 e versioni successive)
Call with: AH = A3H
SI = 4358H
Return:
Carry Flag = Clear
Comments:
La funzione viene utilizzata per disabilitare la cache.
INT 13H (0x13)
Funzione A4H (0xA4 o 164) --> Abilita cache (Super PC-Kwik v3.20 e versioni successive)
Call with: AH = A4H
SI = 4358H
Return:
Carry Flag = Clear
Comments:
This function is used to enable cache.
INT 13H (0x13)
Funzione EEH (0xEE o 238) --> Imposta 1024-Cylinder Flag (SWBIOS)
Call with: AH = EEH
DL = Drive Number
Return:
Carry Flag = Clear
AH = 00H
Comments:
La funzione viene utilizzata per impostare 1024 – Flag cilindro. Il flag viene cancellato da tutte le chiamate INT 13H tranne AH=EEH e AH=EFH. Disk Manager supporta anche queste chiamate. Questa funzione equivale a chiamare la funzione AH=EFH con CX=0400H per il software che supporta quella chiamata.
Questa funzione è supportata anche da HyperDisk v4.01 e versioni successive e PC-Cache v5.5 e versioni successive, per consentire la memorizzazione nella cache delle unità che utilizzano SWBIOS per accedere a più di 1024 cilindri.
INT 13H (0x13)
Funzione EFH (0xEF o 239) --> Imposta l'offset del cilindro (Razzo di guida in pista)
Call with: AH = EFH
CX = Cylinder offset for next INT 13H call
DL = Drive Number
Return:
Carry Flag = Clear
AH = 00H
Comments:
La funzione viene utilizzata per impostare l'offset del cilindro. Per il software che supporta questa chiamata, la funzione AH=EEH equivale a chiamare questa funzione con CX=0400H. L'offset del cilindro viene reimpostato a 0 da tutti gli INT 13H chiamati eccetto AH=EEH e AH=EFH.
INT 13H (0x13)
Funzione F9H (0xF9 o 249) --> Verifica dell'installazione (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:
Questa funzione viene utilizzata per il controllo dell'installazione. Se la funzione ha esito positivo, il flag di riporto è azzerato e DX restituisce la parola di configurazione, altrimenti il flag di riporto è impostato.
Il bit 15 è impostato se sono disponibili altre estensioni SWBIOS. Disk Manager supporta anche queste chiamate.
INT 13H (0x13)
Funzione FEH (0xFE o 254) --> Ottieni il numero di cilindri esteso (SWBIOS)
Call with: AH = FEH
DL = Drive Number
Return:
Carry Flag = Clear
DX = Number of Cylinders beyond 1024
on drive
Comments:
Questa funzione viene utilizzata per ottenere il conteggio del cilindro esteso. La funzione AH = 08H di INT 13H restituirà un numero di cilindri troncato a 1024. Il BIOS senza questa estensione restituirebbe il modulo di conteggio 1024. Disk Manager supporta anche queste chiamate
INT 13H (0x13)
Funzione FFH (0xFF o 255) --> Funzione ufficialmente privata (IBM SurePath BIOS)
INT 13H (0x13)
Funzione FFFFH (0xFFFF) --> Imposta la modalità Turbo (UTILITÀ Turbo UX UNICA)
Call with: AX = FFFFH
BH = AAH
BL = Sub Function Number (See the table
in Comments)
Return: If installed,
AX = 1234H
Comments:
Questa funzione viene utilizzata per impostare la modalità Turbo. I numeri delle sottofunzioni per chiamare la funzione con BL sono stati indicati nella tabella seguente:
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
|
Come utilizzare le estensioni INT 13H nella programmazione C
Possiamo chiamare le funzioni di estensione di INT 13H con le stesse funzioni C (int86(), int86x() ecc.), che stavamo usando nei capitoli precedenti. Impariamolo con un esempio.
L'esempio seguente mette a fuoco le tre funzioni (Verifica estensioni presenti, lettura estesa e scrittura estesa). Tuttavia non useremo la funzione di scrittura estesa in questo capitolo.
Il programma prima verifica se le estensioni sono supportate o meno se le estensioni sono presenti per INT 13H, legge il settore assoluto 0 (quindi MBR) del disco. La codifica del programma procede nel modo seguente:
/* Programma per accedere a settori superiori a 8,46 GB utilizzando estensioni BIOS INT 13 */
#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]);
}
}
Commenti sulla codifica del programma
typedef Assegna l'identificatore al tipo di dati in modo tale che typedef unsigned char Byte; assegna identificatore Byte per il tipo di dati char. Allo stesso modo l'identificatore Word è assegnato a int e DWord è assegnato a long.
La struttura disk_packet viene caricata in DS:SI e il comando (come lettura estesa, scrittura estesa o verifica ecc.) viene eseguito. Vedere le funzioni delle estensioni IBM/MS INT 13H (dalla funzione 41H alla funzione 49H) fornite in precedenza.
La funzione check_ext_present() controlla se le estensioni sono disponibili/supportate o meno. La funzione viene chiamata con BX=55AAH (inregs.x.bx=0x55AA;) e se le estensioni sono supportate il registro BX è impostato su AA55H. (Vedi la funzione 41H fornita prima)
La funzione read_sectors viene utilizzata per leggere il settore assoluto del disco, specificato da disk_pack.lba1. In questo programma abbiamo dato disk_pack.lba1=0, quindi andremo a leggere il settore assoluto 0 (vedi nota sotto) andando quindi a leggere l'MBR del disco.
Anche la funzione write_sector è la stessa della funzione read_sector e verrà scritta allo stesso modo ma con diverse opzioni Function. Lo useremo nei prossimi capitoli.
Nota:
Leggiamo i settori del disco nei due modi seguenti:
- Lettura (o scrittura) del settore relativo
- Lettura (o scrittura) del settore assoluto
In Relative Sector Read leggiamo i settori del disco in base alla geometria CHS (Cylinder, Head and Sector) del disco. Nel relativo settore leggere l'MBR del disco (Primo Settore del disco) è sul Cilindro 0, Testa 0 e Settore 1.
Nella lettura Assoluta dei settori del disco, non è necessario specificare i numeri di Cilindro o Testa nel nostro programma. I settori assoluti vengono contati dal settore assoluto 0.
Quindi, se leggiamo l'MBR del disco (Primo settore del disco), leggeremo il settore assoluto 0. È compito del BIOS convertire il numero del settore assoluto nel suo corrispondente Cilindro, Testa e il numero del settore.
Come per la lettura (o scrittura) di settore assoluto, dobbiamo calcolare solo i settori assoluti all'interno del ciclo in operazioni come la lettura o la scrittura dell'intero disco, mentre in caso di lettura (o scrittura di settore relativo) dobbiamo eseguire tre cicli alla volta per calcolare CHS, quindi la lettura/scrittura del settore assoluto è molto più veloce della lettura/scrittura del settore relativo.
Ad esempio, se abbiamo un hard disk con le 16 testine (fianchi), 12 Cilindri e con 63 settori, la tabella seguente mostra la procedura e la differenza di entrambi i metodi di lettura e quindi mostra come l'approccio settoriale assoluto può far sì che i nostri programmi che richiedono tempo (come i programmi di lettura/scrittura dell'intero disco o di pulizia dell'intero disco, ecc.) vengano eseguiti molto più velocemente:
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
|
Le informazioni della tabella delle partizioni dell'MBR, visualizzate da qualsiasi strumento di analisi dell'MBR del disco, sono state fornite di seguito:
Nelle informazioni di cui sopra, i numeri di settore relativi all'avvio di entrambe le partizioni sono rispettivamente 63 e 11277630, che sono liberi da partizioni e conteggiati in base al numero di settori disponibili nel disco.
Pagina modificata il: 10/03/2022