Capítulo – 9
Manipulação de discos rígidos grandes
Manuseando discos rígidos grandes
No capítulo anterior, discutimos as funções do BIOS-Disk e o uso de interrupções para acessar a mídia física dos discos rígidos. Usamos as funções INT 13H para acessar os discos rígidos.
A interface INT 13H suporta muitos comandos diferentes, como leitura, gravação, formatação e verificação, etc., que podem ser fornecidos ao BIOS, que os passa para o disco rígido. Como é usado pelo DOS há muito tempo, o INT13H tem sido o padrão por muitos anos.
O INT 13H aloca 24 bits para a especificação da geometria do drive e requer que o programa chamador conheça os parâmetros específicos do disco rígido, e forneça endereçamento exato de cabeçote, cilindro e setor para as rotinas para permitir o acesso ao disco.
O BIOS usa a geometria do disco rígido conforme configurado no programa de configuração do BIOS. Os 24 bits, alocados pela interface INT 13H para a especificação da geometria do drive são divididos da seguinte forma:
- 10 bits para o número do cilindro. Assim, o limite máximo de cilindros totais pode ser de até 1.024 cilindros.
- 8 bits para o número principal. Assim, o limite máximo de caras totais é de até 256.
- 6 bits para o número do setor. Assim, um total máximo de setores pode ser de até 63 setores.
Assim, o máximo de setores suportados por essa abordagem pode ser de até 1024 * 256 * 63 = 16515072.
Isso significa que a interface INT13H pode suportar discos contendo até aproximadamente 16,5 milhões de setores, que em 512 bytes por setor leva a um máximo de 8,46 GB. É exatamente isso que quero explicar. Assim, usando todas essas funções ou INT 13H, podemos acessar os discos de até 8,46 GB apenas.
É por isso que, nos últimos anos, as limitações dessa interface antiga fizeram com que ela fosse abandonada em favor de uma nova forma de endereçar os discos rígidos, conforme descrito a seguir neste capítulo.
Antes de mais nada, deixe-me contar uma história!
Onze anos atrás, quando eu estava no sétimo padrão, na minha escola, ouvi falar do disco rígido com capacidade de 42 MB, talvez fosse o WDA-L42 da IBM. Foi muito difícil para mim e meus amigos imaginar uma capacidade tão grande de disco rígido naquela época.
A metodologia INT 13H foi desenvolvida há cerca de vinte anos a partir de hoje. Agora você pode entender que um disco rígido de 8 GB era muito maior para caber até em sonhos naquela época. Mas hoje, se falarmos de um disco rígido de 8 GB para qualquer usuário de computador pessoal, ele pode não gostar de usá-lo dizendo que é pequeno em capacidade de armazenamento.
Esta é a razão pela qual a interface INT 13H finalmente chegou ao fim de sua utilidade em sistemas modernos. O INT 13H usava 24 bits para alocar a geometria do disco e infelizmente não foi possível expandir a interface do BIOS do INT 13H existente porque se isso fosse feito, muitos hardwares e softwares antigos deixariam de funcionar, e você pode entender que o mercado de computadores atual nunca pode suportar uma mudança tão grande com milhões de produtos de software e hardware mais antigos parando de funcionar.
Mantendo essa condição em mente, INT 13H foi substituído por uma interface mais nova chamada extensões INT 13H. No entanto, o INT 13H ainda pode ser usado pelo DOS e alguns outros sistemas operacionais mais antigos e para outros fins de compatibilidade.
A nova interface INT 13H usa 64 bits em vez de 24 bits para endereçamento e permite um tamanho máximo de disco rígido de 9,4 * 1021 bytes, que é de fato 9,4 trilhões de gigabytes ou 9400000000000 Gigabytes. Espero que agora estejamos relaxados por algum tempo até que esse limite seja quebrado.
Algumas funções importantes da Extensão para Interrupção 13H foram descritas a seguir. Você pode usar essas funções na programação da mesma forma que estava usando as funções de INT 13H. Esta é também uma razão pela qual essas funções são chamadas de extensões de INT 13H.
Extensões INT 13H:
INT 13H (0x13)
Função 1BH (0x1B ou 27) --> Obter cabeçalho de fabricação (disco fixo 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:
Esta função é usada para obter o cabeçalho de fabricação do disco fixo. A primeira leitura do setor contém o cabeçalho de fabricação com o número de entradas de defeitos e o início do mapa de defeitos; os setores restantes contêm o restante do mapa de defeitos. O formato do cabeçalho de fabricação (formato de registro de mapa de defeitos) pode ser encontrado em IBM 70MB, 115MB Fixed Disk Drives Technical Reference.
INT 13H (0x13)
Função 1BH (0x1B ou 27) --> Obter ponteiro para bloco de informações de disco SCSI (controlador SCSI de domínio 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:
Esta função é usada para obter o ponteiro para o Bloco de Informações do Disco SCSI. Isso também define um sinalizador não reinicializável que impede que algumas mensagens do controlador sejam exibidas.
INT 13H (0x13)
Função 1CH (0x1C ou 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:
Esta função é usada para obter o controlador Ram livre. ES:BX aponta para o primeiro byte de RAM livre no controlador, disponível para outros usos. ES contém o segmento no qual o controlador reside. As duas portas de E/S mapeadas na memória do controlador estão nos deslocamentos 1C00H e 1E00H.
INT 13H (0x13)
Função 1C08H (0x1C08) --> Obter status de conclusão do comando (disco fixo 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:
Esta função é usada para obter o status de conclusão do comando. Se a função for bem-sucedida, o sinalizador de transporte é limpo e, se o sinalizador de transporte malsucedido, é definido.
INT 13H (0x13)
Função 1C09H (0x1C09) --> Obter status do dispositivo (disco fixo 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:
Esta função é usada para obter o status do dispositivo. Se a função for bem-sucedida, o sinalizador de transporte é limpo e, se o sinalizador de transporte malsucedido, é definido.
INT 13H (0x13)
Função 1C0AH (0x1C0A) --> Obter configuração do dispositivo (disco fixo 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:
Esta função é usada para obter a configuração do dispositivo para o disco. Se a função for bem sucedida, o sinalizador de transporte é limpo e o registrador AH é 01H, caso contrário, o sinalizador de transporte é definido e o registrador AH Retorna o Status. A tabela a seguir mostra o Formato do Bloco de Status de Configuração da Unidade 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)
Função 1C0BH (0x1C0B) --> Obter configuração do adaptador (disco fixo 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:
Esta Função é usada para obter a Configuração do Adaptador. Se a função for bem-sucedida, o sinalizador de transporte é limpo e AH é 01H, se o sinalizador de transporte malsucedido é definido e AH retorna o status.
INT 13H (0x13)
Função 1C0CH (0x1C0C) --> Obter informações de PDV (disco fixo 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:
Esta função é usada para obter as informações do POS. Se a função for bem-sucedida, o sinalizador de transporte é limpo e AH é 01H, se o sinalizador de transporte malsucedido é definido e AH retorna o status.
INT 13H (0x13)
Função 1C0EH (0x1C0E) --> Traduzir RBA para ABA (disco fixo 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:
Esta função traduz o RBA (Relative Block Address) para ABA (Absolute Block Address). Se a função for bem-sucedida, o carry flag é limpo e o registrador AH é 01H, caso contrário, o Carry Flag é definido e o AH retorna o status.
INT 13H (0x13)
Função 20H (0x20 ou 32) --> Obtenha o formato de mídia atual (dispositivo de mídia removível Compaq ATAPI)
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:
Esta função é usada para obter o formato de mídia atual. Os valores para o tipo de mídia de disquete Compaq/ATAPI foram fornecidos na tabela a seguir:
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)
Função 21H (0x21 ou 33) --> Leia vários setores de disco (PS e PS/2, discos rígidos)
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:
A função é usada para ler os vários setores do disco usando o modo de bloco múltiplo, que gera uma interrupção somente após o término da transferência de um grupo de setores e não após cada setor.
INT 13H (0x13)
Função 22H (0x22 ou 34) --> Gravar vários setores de disco (PS e PS/2, discos rígidos)
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:
A função é usada para escrever os vários setores do disco usando o modo de bloco múltiplo, que gera uma interrupção somente após o término da transferência de um grupo de setores e não após cada setor.
INT 13H (0x13)
Função 22H (0x22 ou 34) --> Habilitar/Desabilitar 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:
Esta função habilita e/ou desabilita o cache de todas as unidades. Se a função for bem sucedida o registro AX é 0000H senão retorna o status.
INT 13H (0x13)
Função 23H (0x23 ou 35) --> Definir registro de recursos do controlador (PS e PS/2, disco rígido)
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:
Esta função é usada para definir o registro de recurso do controlador. Se a função for bem-sucedida, o sinalizador de transporte é apagado e, se o sinalizador de transporte não for bem-sucedido, é definido e o registrador AH retorna o status
INT 13H (0x13)
Função 24H (0x24 ou 36) --> Definir Múltiplo – Modo de Transferência (Disco Rígido, 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:
Esta função é usada para definir o modo de transferência múltipla. Se você deseja desabilitar o modo de transferência múltipla, defina o número de setores para 0. O valor máximo para o tamanho do bloco (como 2,4,6,8 e 16 etc.) depende do tipo de unidade de disco fixo.
O valor é armazenado no byte 15H da tabela de parâmetros da unidade de disco fixo criada pelo POST (Power On Self-Test). O byte no endereço 0040H:0074H é ajustado para o status de operação. Os valores para o número de recurso do disco rígido PS/1 foram listados na tabela a seguir:
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)
Função 24H (0x24 ou 36) --> Definir setores (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:
Esta função é usada para definir os setores. Se a função for bem sucedida, o registro AX será 0000H, caso contrário, o AX retornará o Status.
INT 13H (0x13)
Função 25H (0x25 ou 37) --> Identificar unidade (disco rígido, 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:
Esta Função é usada para identificar o Drive. O byte no endereço 0040h:0074h é configurado para o status da operação. A IBM classifica oficialmente esta função como opcional. Os campos Bit para configuração geral do inversor foram fornecidos na tabela a seguir:
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)
|
A descrição do bloco de informações do formato da unidade conforme fornecido na especificação ATA (AT Attachment) foi fornecida na tabela a seguir:
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)
Função 25H (0x25 ou 37) --> Definir intervalo de liberação (QuickCache II v4.20)
Call with: AH = 25H
BX = Interval of Flush
Return: If Function Successful,
AH = 0000H
If Function Unsuccessful,
AH = status
Comments:
Esta função é usada para definir o intervalo de descarga. Se a função for bem-sucedida, o AH será 0000H, caso contrário, o AH retornará o status.
INT 13H (0x13)
Função 26H (0x26 ou 38) --> Desinstalação do QuickCache II v4.20
Call with: AH = 26H
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = status
Comments:
AX retorna o status de 0001H a 00FFH para vetor de interrupção que foi enganchado por outro TSR
INT 13H (0x13)
Função 27H (0x27 ou 39) --> Verificação de instalação (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 instalado, AX Register é 0000H e BX retorna valor diferente de zero.
INT 13H (0x13)
Função 28H (0x28 ou 40) --> Definir Desmontagem Automática (QuickCache II v4.20)
Call with: AH = 28H
AL = New State
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Chame a função com AL = 00H para Desativar e com AL = 01H para Ativar.
INT 13H (0x13)
Função 29H (0x29 ou 41) --> Sem operação (QuickCache II v4.20)
Call with: AH = 29H
Return: AX = 0000H
INT 13H (0x13)
Função 2AH (0x2A ou 42) --> Definir o tamanho do buffer (QuickCache II v4.20)
Call with: AH = 2AH
AL = Buffer Size
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Esta função é usada para definir o tamanho do buffer. Se a função for bem-sucedida, o AX será 0000H, se não houver êxito, o AX retornará o status.
INT 13H (0x13)
Função 2BH (0x2B ou 43) --> Sons de acesso à unidade (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 a função for bem-sucedida, o AX será 0000H, se for malsucedida, o AX retornará o status. Chame a função com AL = 00H para Desabilitar e AL = 01H para Habilitar Sons de Acesso ao Drive
INT 13H (0x13)
Função 2CH (0x2C ou 44) --> Definir gravação em buffer (QuickCache II v4.20)
Call with: AH = 2CH
AL = new state
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Esta função habilita ou desabilita gravações atrasadas para todas as unidades. Use AH=38H para alterar uma única unidade. Use AL = 00H para desativar e 01H para ativar.
INT 13H (0x13)
Função 2DH (0x2D ou 45) --> Definir leitura em 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:
Esta função habilita ou desabilita a leitura antecipada para todas as unidades. Use AL = 00H para Desabilitar e AL = 01H para Habilitar. Use AH=37H para alterar uma única unidade.
INT 13H (0x13)
Função 2EH (0x2E ou 46) --> Definir contagem de liberação (QuickCache II v4.20)
Call with: AH = 2EH
BX = Flush count
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Esta função é usada para definir a contagem de descarga. Se a função for bem-sucedida, o AX será 0000H, se não houver êxito, o AX retornará o status.
INT 13H (0x13)
Função 2FH (0x2F ou 47) --> Forçar liberação incremental imediata (QuickCache II v4.20)
Call with: AH = 2FH
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Se a função for bem-sucedida, o AX será 0000H, se não houver êxito, o AX retornará o status.
INT 13H (0x13)
Função 30H (0x30 ou 48) --> Obter informações (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:
Esta Função é usada para obter os diferentes tipos de informações sobre o sistema, especificadas por AL. Se a função for bem-sucedida, o AX será 0000H, se for malsucedida, o AX retornará o status. AX = 8000H indica o especificador de informações inválido. Os números de informação a serem especificados para AL foram listados na tabela a seguir:
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)
Função 31H (0x31 ou 49) --> Memória de reserva (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:
Esta função é usada para reservar a memória para aplicativos. Se a função for bem-sucedida, o AX será 0000H, se não houver êxito, o AX retornará o status.
INT 13H (0x13)
Função 32H (0x32 ou 50) --> Ativar cache para unidade específica (QuickCache II v4.20)
Call with: AH = 32H
AL = drive number
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Esta função é usada para habilitar o cache para uma unidade específica. Por exemplo, chame Function com AL = 00H para A: e assim por diante. Se a função for bem-sucedida, o AX será 0000H, se não houver êxito, o AX retornará o status.
INT 13H (0x13)
Função 33H (0x33 ou 51) --> Desativar cache para unidade específica (QuickCache II v4.20)
Call with: AH = 33H
AL = drive number
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Esta função é usada para desabilitar o cache para uma unidade específica. Por exemplo, chame Function com AL = 00H para A: e assim por diante. Se a função for bem-sucedida, o AX será 0000H, se não houver êxito, o AX retornará o status.
INT 13H (0x13)
Função 34H (0x34 ou 52) --> Bloquear/desbloquear setor(es) (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:
Esta Função é utilizada para chamar as funções de bloqueio/desbloqueio de setores, especificadas por AL. Se a função for bem-sucedida, o AX será 0000H, se for malsucedida, o AX retornará o status. Os diferentes números de função a serem chamados com AL foram dados na tabela a seguir:
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)
Função 35H (0x35 ou 53) --> Definir tamanho do pool de bloqueio (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:
Esta função é usada para definir o tamanho do pool de bloqueio. Se a função for bem-sucedida, o AX será 0000H, se não houver êxito, o AX retornará o status.
INT 13H (0x13)
Função 36H (0x36 ou 54) --> Definir tamanho do buffer de rastreamento
Call with: AH = 36H
AL = New size of trace buffer
Return: If Function Successful,
AX = 0000H
If Function Unsuccessful,
AX = Status
Comments:
Esta função é usada para definir o tamanho do buffer de rastreamento. Se a função for bem-sucedida, o AX será 0000H, se for malsucedida, o AX retornará o status. Esta função geralmente é chamada com a função 24H de INT 13H com AL=05H.
INT 13H (0x13)
Função 37H (0x37 ou 55) --> Definir leituras em buffer para unidade específica (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:
Esta função é usada para definir leituras em buffer para um Drive específico. Se AL = 00H o estado é habilitado, senão desabilitado. Se a função for bem-sucedida, o AX será 0000H, se não houver êxito, o AX retornará o status.
INT 13H (0x13)
Função 38H (0x38 ou 56) --> Definir gravações em buffer para unidade específica (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:
Esta função é usada para definir gravações em buffer para um Drive específico. Se AL = 00H o estado é habilitado, senão desabilitado. Se a função for bem-sucedida, o AX será 0000H, se não houver êxito, o AX retornará o status.
INT 13H (0x13)
Função 39H (0x39 ou 57) --> Definir tamanho do buffer de leitura para unidade específica (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:
Esta função é usada para definir o tamanho do buffer de leitura para a unidade específica, como DL = 00H para A: e assim por diante. Se a função for bem-sucedida, o AX será 0000H, se não houver êxito, o AX retornará o status.
INT 13H (0x13)
Função 3AH (0x3A ou 58) --> Definir tamanho do buffer de gravação para unidade específica (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:
Esta função é usada para definir o tamanho do buffer de gravação para a unidade específica, como DL = 00H para A: e assim por diante. Se a função for bem-sucedida, o AX será 0000H, se não houver êxito, o AX retornará o status.
INT 13H (0x13)
Função 3DH (0x3D ou 61) --> Ativar/desativar a descarga do cilindro para unidade (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:
Esta função é usada para habilitar/desabilitar a descarga do cilindro para acionamento específico, como DL = 00H para A: e assim por diante. Se a função for bem-sucedida, o AX será 0000H, se for malsucedida, o AX retornará o status. Se o registro AL estiver definido como 01H, o estado é habilitado, caso contrário, desabilita.
INT 13H (0x13)
Função 3EH (0x3E ou 62) --> Definir bônus de setor único (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:
Esta função é usada para definir o bônus de setor único. Se a função for bem-sucedida, o AX será 0000H, se não houver êxito, o AX retornará o status.
INT 13H (0x13)
Função 3FH (0x3F ou 63) --> Definir limite de bônus (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:
Esta função é usada para definir o limite de bônus. Se a função for bem sucedida o AX é 0000H, se não for bem sucedida AX retorna o status
INT 13H (0x13)
Função 41H (0x41 ou 65) --> Verificação da Instalação (Extensões 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:
Esta função verifica se as extensões IBM/MS INT 13H estão instaladas e são suportadas. Os valores para as principais versões de extensões foram fornecidos na tabela a seguir:
Value
|
Major Version of Extension
|
01H
|
1.x
|
20H
|
2.0 / EDD-1.0
|
21H
|
2.1 / EDD-1.1
|
30H
|
EDD-3.0
|
Os campos de bits para o bitmap de suporte da API do IBM/MS INT 13H Extensions foram fornecidos na tabela a seguir:
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)
Função 42H (0x42 ou 66) --> Leitura Estendida (Extensões 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:
Esta função é a extensão para a função de leitura de disco. Se a função for bem sucedida, o sinalizador de transporte é limpo e o registrador AH é 00H, caso contrário, o sinalizador de transporte é definido e AH retorna o código de erro. O campo de contagem de blocos do pacote de endereços de disco é definido para o número de blocos transferidos com sucesso. O formato do pacote de endereço de disco foi dado abaixo:
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)
Função 43H (0x43 ou 67) --> Gravação Estendida (Extensões 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:
Esta função é a extensão para a função de gravação de disco. Se a função for bem sucedida, o sinalizador de transporte é limpo e o registrador AH é 00H, caso contrário, o sinalizador de transporte é definido e AH retorna o código de erro. O campo de contagem de blocos do pacote de endereços de disco é definido para o número de blocos com êxito. As informações dos sinalizadores de gravação para diferentes versões foram fornecidas na tabela a seguir:
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)
Função 44H (0x44 ou 68) --> Verificar Setores (Extensões 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:
Esta função é a extensão da função Verificar Setores. Se a função for bem sucedida, o sinalizador de transporte é limpo e o registrador AH é 00H, caso contrário, o sinalizador de transporte é definido e AH retorna o código de erro. O campo de contagem de blocos do pacote de endereços de disco é definido para o número de blocos com sucesso
INT 13H (0x13)
Função 45H (0x45 ou 69) --> Bloquear/Desbloquear Unidade (Extensões 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:
Esta função é usada para bloquear/desbloquear a unidade. Esta função deve ser suportada por qualquer unidade removível numerada 80H ou superior. Até 255 bloqueios podem ser colocados em uma unidade, e a mídia não será desbloqueada fisicamente até que todos os bloqueios sejam removidos.
Se a função for bem-sucedida, o sinalizador de transporte é limpo e o registrador AH é 00H, caso contrário, o sinalizador de transporte é definido e AH retorna o código de erro.
Os números de operação para diferentes operações de bloqueio/desbloqueio do inversor foram fornecidos na tabela a seguir:
Value
|
Function
|
00H
|
Lock media in drive
|
01H
|
Unlock media
|
02H
|
Check lock status
|
INT 13H (0x13)
Função 46H (0x46 ou 70) --> Ejetar Mídia (Extensões 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:
Esta função é para ejetar a mídia. Se a função for bem-sucedida, o sinalizador de transporte é limpo e o registrador AH é 00H, caso contrário, o sinalizador de transporte é definido e AH retorna o código de erro.
INT 13H (0x13)
Função 47H (0x47 ou 71) --> Busca Estendida (Extensões 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:
Esta função é a extensão da função de busca. Se a função for bem sucedida, o sinalizador de transporte é limpo e o registrador AH é 00H, caso contrário, o sinalizador de transporte é definido e AH retorna o código de erro. O campo de contagem de blocos do pacote de endereço de disco é definido para o número de blocos com sucesso.
INT 13H (0x13)
Função 48H (0x48 ou 72) --> Obter Parâmetros do Drive (Extensões 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:
Esta função é usada para obter os parâmetros do drive. Se a função for bem-sucedida, o sinalizador de transporte é limpo e o registrador AH é 00H com DS:SI de buffer preenchido, caso contrário, o sinalizador de transporte é definido e AH retorna o código de erro.
INT 13H (0x13)
Função 49H (0x49 ou 73) --> Alteração de mídia estendida (Extensões 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:
Esta função é a extensão para a função de mudança de mídia. Se a função for bem-sucedida, o sinalizador de transporte é limpo e o registrador AH é 00H, caso contrário, o sinalizador de transporte é definido e AH retorna o código de erro.
A principal diferença entre esta função e a função AH = 16H de INT 13H é que podemos especificar qualquer número de unidade, onde a Função 16H permite apenas o número de unidade 00H a 7FH de disquetes.
INT 13H (0x13)
Função 4AH (0x4A ou 74) --> Iniciar emulação de disco (CD-ROM inicializável)
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:
Esta função é usada para iniciar a emulação do disco. Se a função for bem-sucedida, o sinalizador de transporte é apagado, caso contrário, o sinalizador de transporte é definido e o registrador AX retorna o código de status e o inversor não estará no modo de emulação.
O formato do pacote de especificações do CD-ROM inicializável foi fornecido na tabela a seguir:
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)
|
Os campos Bit para o tipo de mídia de inicialização do CD-ROM inicializável foram fornecidos na tabela a seguir:
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)
Função 4B00H (0x4B00) --> Terminar a emulação de disco (CD-ROM inicializável)
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:
Esta função é usada para encerrar a emulação de disco. Se você deseja encerrar todas as emulações, chame a função com DL = 7FH. Se a função for bem-sucedida, o sinalizador de transporte é apagado, caso contrário, o sinalizador de transporte é definido e o registrador AX retorna o código de status e o inversor permanece no modo de emulação.
INT 13H (0x13)
Função 4B01H (0x4B01) --> Obter status (CD-ROM inicializável)
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:
A função é usada para obter o status. Se a função for bem-sucedida, o sinalizador de transporte é limpo, caso contrário, o sinalizador de transporte é definido e o registrador AX retorna o código de status
INT 13H (0x13)
Função 4CH (0x4C ou 76) --> Iniciar emulação de disco e inicialização (CD-ROM inicializável)
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:
Esta função é usada para iniciar a emulação de disco e inicializar o sistema. Se a função for bem-sucedida, não retornará mais nada, o sinalizador de transporte é definido e o registrador AX retornará o código de status.
INT 13H (0x13)
Função 4D00H (0x4D00) --> Retornar catálogo de inicialização (CD-ROM inicializável)
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:
Esta função é usada para retornar o catálogo de inicialização. Se a função for bem sucedida, o sinalizador de transporte é limpo, caso contrário, o sinalizador de transporte é definido e o registrador AX retorna o código de status. O formato do CD-ROM inicializável de "Get Boot Catalog" pacote de comando foi dado na tabela a seguir:
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)
Função 4EH (0x4E ou 78) --> Definir configuração de hardware (Extensões 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:
Esta função é usada para definir a configuração do hardware. Os números de função para AL chamar esta função foram fornecidos na tabela a seguir:
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
|
Os modos DMA e PIO são mutuamente exclusivos, portanto, selecionar DMA desativa o PIO para o dispositivo especificado ou para todos os dispositivos nesse controlador e selecionar PIO desativa o DMA
INT 13H (0x13)
Função 5001H (0x5001) --> Comando de envio de pacote (especificação de unidade de disco aprimorada 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:
Esta função é usada para enviar os comandos de pacote. Se a função for bem sucedida, o sinalizador de transporte é limpo e o registrador AH é 00H, caso contrário, o sinalizador de transporte é definido e AH retorna o código de erro. O pacote de comando Format of Enhanced Disk Drive Spec v3.0 foi fornecido na tabela a seguir:
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)
Função 5501H (0x5501) --> Consulta (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:
Esta função é usada para enviar inquérito. O BIOS ST01/ST02 não retorna nenhuma indicação de sucesso ou falha para a função, portanto, todos os comandos devem ser considerados como bem-sucedidos.
O BIOS ST01/ST02 sempre mapeia suas unidades após as unidades BIOS anteriores sem alterar a contagem de unidades BIOS em 0040H:0075H. Este comando é idêntico ao comando de consulta SCSI
INT 13H (0x13)
Função 5502H (0x5502) --> Reservado (Seagate ST01/ST02)
INT 13H (0x13)
Função 5503H (0x5503) --> Definir DTQ (qualificador de tipo de dispositivo) (Seagate ST01/ST02)
Call with: AX = 5503H
DH = DTQ byte (See the table in
comments)
DL = Drive Number
Return: Nothing
Comments:
Esta função é usada para definir o DTQ (Device Type Qualifier). A função não retorna nada. Os campos Bit para byte DTQ foram mostrados na tabela a seguir:
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)
Função 5504H (0x5504) --> Identificação de devolução (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:
A função é usada para retornar a identificação da(s) unidade(s).
INT 13H (0x13)
Função 5505H (0x5505) --> Cabeças de estacionamento (Seagate ST01/ST02)
Call with: AX = 5505H
DL = Drive Number
DH = Sub function (see the comments)
Return:
Nothing
Comments:
A função é usada para estacionar as cabeças do disco. Era usado nos discos rígidos antigos, porém os discos rígidos modernos não precisam de nenhum programa externo para estacionar suas cabeças.
A Subfunção 00H estaciona os cabeçotes (comando SCSI Stop) e a Subfunção 01H desestaciona os cabeçotes (comando SCSI Start) do disco.
INT 13H (0x13)
Função 5506H (0x5506) --> Paridade de barramento 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:
Chame a função com o seguinte número de subfunção para DH:
Value
|
Description
|
00H
|
Disable parity check
|
01H
|
Enable parity check
|
02H
|
Return current parity setting
|
INT 13H (0x13)
Função 5507H (0x5507) Para função 550DH (0x550D) --> Funções reservadas (Seagate ST01/ST02)
Call with: AX = 5507H to AX = 550DH
Comments:
Essas funções foram oficialmente listadas como "Reservadas"
INT 13H (0x13)
Função A0H (0xA0 ou 160) --> Obter segmento de código residente (Super PC-Kwik v3.20 e posterior)
Call with: AH = A0H
SI = 4358H
Return:
AX = Segment of Resident Code
Comments:
Esta função é usada para obter o segmento de código residente. AX retorna o segmento do código residente.
INT 13H (0x13)
Função A1H (0xA1 ou 161) --> Flush Cache (Super PC-Kwik v3.20 e posterior)
Call with: AH = A1H
SI = 4358H
Return:
Carry Flag = Clear
AH = 00H (v5.10)
Comments:
A função é usada para liberar o cache.
INT 13H (0x13)
Função A3H (0xA3 ou 163) --> Desativar cache (Super PC- Kwik v3.20 e posterior)
Call with: AH = A3H
SI = 4358H
Return:
Carry Flag = Clear
Comments:
A função é usada para desabilitar o cache.
INT 13H (0x13)
Função A4H (0xA4 ou 164) --> Ativar cache (Super PC-Kwik v3.20 e posterior)
Call with: AH = A4H
SI = 4358H
Return:
Carry Flag = Clear
Comments:
Esta função é usada para habilitar o cache.
INT 13H (0x13)
Função EEH (0xEE ou 238) --> Definir sinalizador de 1024 cilindros (SWBIOS)
Call with: AH = EEH
DL = Drive Number
Return:
Carry Flag = Clear
AH = 00H
Comments:
A função é usada para definir 1024 – flag Cilindro. O sinalizador é apagado por todas as chamadas INT 13H, exceto AH=EEH e AH=EFH. O Disk Manager também oferece suporte a essas chamadas. Esta função é equivalente a chamar a Função AH=EFH com CX=0400H para o software que suporta essa chamada.
Esta função também é suportada pelo HyperDisk v4.01 e posterior, e PC-Cache v5.5 e posterior, para permitir o armazenamento em cache de unidades usando SWBIOS para acessar mais de 1.024 cilindros.
INT 13H (0x13)
Função EFH (0xEF ou 239) --> Definir deslocamento do cilindro (Foguete de acionamento na pista)
Call with: AH = EFH
CX = Cylinder offset for next INT 13H call
DL = Drive Number
Return:
Carry Flag = Clear
AH = 00H
Comments:
A função é usada para definir o deslocamento do cilindro. Para software que suporta esta chamada, a Função AH=EEH é equivalente a chamar esta função com CX=0400H. O deslocamento do cilindro é redefinido para 0 por todos os INT 13H chamados, exceto AH=EEH e AH=EFH.
INT 13H (0x13)
Função F9H (0xF9 ou 249) --> Verificação de instalação (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:
Esta função é usada para verificação de instalação. Se a função for bem-sucedida, o sinalizador de transporte é apagado e o DX retorna a palavra de configuração, caso contrário, o sinalizador de transporte é definido.
O bit 15 é definido se outras extensões SWBIOS estiverem disponíveis. O Disk Manager também oferece suporte a essas chamadas.
INT 13H (0x13)
Função FEH (0xFE ou 254) --> Obter contagem estendida de cilindros (SWBIOS)
Call with: AH = FEH
DL = Drive Number
Return:
Carry Flag = Clear
DX = Number of Cylinders beyond 1024
on drive
Comments:
Esta função é usada para obter a contagem estendida de cilindros. A função AH = 08H de INT 13H retornará uma contagem de cilindros truncada para 1024. O BIOS sem essa extensão retornaria o módulo de contagem 1024. O Disk Manager também suporta essas chamadas
INT 13H (0x13)
Função FFH (0xFF ou 255) --> Função oficialmente privada (IBM SurePath BIOS)
INT 13H (0x13)
Função FFFFH (0xFFFF) --> Definir Modo Turbo (Utilitário UX Turbo UNIQUE)
Call with: AX = FFFFH
BH = AAH
BL = Sub Function Number (See the table
in Comments)
Return: If installed,
AX = 1234H
Comments:
Esta função é usada para definir o Modo Turbo. Os números da Subfunção para chamar a função com BL foram fornecidos na tabela a seguir:
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
|
Como usar extensões INT 13H na programação C
Podemos chamar as Funções de Extensão de INT 13H com as mesmas funções C (int86(), int86x() etc.) , que estávamos usando nos capítulos anteriores. Vamos aprender com um exemplo.
O exemplo a seguir dá o foco para as três funções (Check Extensions present, Extended Read e Extended Write). No entanto, não vamos usar a função de escrita estendida neste capítulo.
O programa primeiro verifica se as extensões são suportadas ou não se as extensões estão presentes para INT 13H, ele lê o setor absoluto 0 (portanto MBR) do disco. A codificação do programa procede da seguinte maneira:
/* Programa para acessar setores além de 8,46 GB usando extensões 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()
{
/* 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]);
}
}
Comentários sobre a codificação do programa
typedef Atribui o identificador ao tipo de dados de forma que typedef unsigned char Byte; atribui o identificador Byte para o tipo de dado char. Da mesma forma, o identificador Word é atribuído a int e DWord é atribuído a long.
A estrutura disk_packet é carregada em DS:SI e o comando (como leitura estendida, gravação estendida ou verificação etc.) é executado. Consulte as funções das Extensões IBM/MS INT 13H (Função 41H a Função 49H) fornecidas anteriormente.
A função check_ext_present() verifica se as extensões estão disponíveis/suportadas ou não. A função é chamada com BX=55AAH (inregs.x.bx=0x55AA;) e se as extensões são suportadas, o registro BX é definido como AA55H. (Veja a Função 41H dada antes)
A função read_sectors é usada para ler o setor absoluto do disco, especificado por disk_pack.lba1. Neste programa demos disk_pack.lba1=0, assim vamos ler o setor absoluto 0 (veja a nota abaixo) assim vamos ler o MBR do disco.
A função write_sector também é igual à função read_sectors e será escrita da mesma forma, mas com as diferentes opções de função. Vamos usá-lo nos próximos capítulos.
Observação:
Lemos os setores do disco das duas maneiras a seguir:
- Leitura (ou gravação) do setor relativo
- Leitura (ou Gravação) do Setor Absoluto
Em Relative Sector Read lemos os setores do disco de acordo com a geometria CHS (Cylinder, Head and Sector) do disco. No setor relativo leia o MBR do disco (Primeiro Setor do disco) está no Cilindro 0, cabeçote 0 e Setor 1.
Na leitura Absoluta dos setores do disco, não precisamos especificar os números de Cilindro ou Cabeça em nosso programa. Os setores absolutos são contados a partir do setor absoluto 0.
Assim, se vamos ler o MBR do disco (primeiro setor do disco), vamos ler o setor absoluto 0. É o trabalho do BIOS converter o número absoluto do setor para seu correspondente Cilindro, Cabeça e número do setor.
Assim como na leitura (ou escrita) absoluta do setor, temos que calcular apenas os setores absolutos dentro do loop nas operações como leitura ou escrita do disco inteiro, enquanto no caso da leitura (ou escrita relativa) do setor, precisamos execute três loops de cada vez para calcular CHS, portanto, a leitura/gravação absoluta do setor é muito mais rápida do que a leitura/gravação relativa do setor.
Por exemplo, se tivermos algum disco rígido com as 16 cabeças (lados), 12 cilindros e com 63 setores, a tabela a seguir mostra o procedimento e a diferença de ambos os métodos de leitura e, portanto, mostra como o setor absoluto se aproxima pode fazer com que nossos programas demorados (como leitura / gravação de disco inteiro ou programas de limpeza de disco inteiro etc.)
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
|
As informações da tabela de partição do MBR, que é exibida por qualquer ferramenta de análise do disco MBR, foram fornecidas abaixo:
Nas informações acima, os números de setor relativos para o início de ambas as partições são 63 e 11277630 respectivamente, que são livres de partições e contados de acordo com o número de setores, disponíveis no disco.
Página modificada em: 13/01/2022