Chamada de interrupção de BIOS 13 (hex)
Não deve ser confundido com o
Modo 13h .
INT 13h é uma abreviatura para BIOS interromper call 13 hex , o vigésimo vetor de interrupção em um sistema de computador baseado em x86 (IBM PC descendente). O BIOS normalmente configura um manipulador de interrupção de modo real neste vetor que fornece disco rígido baseado em setor e serviços de leitura e gravação de disquete usando endereçamento de setor de cabeça de cilindro (CHS). Os BIOSes de PC modernos também incluem funções de extensão INT 13h, originadas pela IBM e Microsoft em 1992, que fornecem os mesmos serviços de acesso a disco usando endereçamento LBA de 64 bits ; com pequenas adições, estes foram quase padronizados pela Phoenix Technologies e outros como extensões de BIOS EDD ( Enhanced Disk Drive ).
INT é uma instrução x86 que dispara uma interrupção de software e 13 hex é o número da interrupção (como um valor hexadecimal ) sendo chamado.
Os computadores modernos vêm com BIOS INT 13h e funcionalidade UEFI que fornece os mesmos serviços e muito mais, com exceção do UEFI Classe 3 que remove completamente o CSM, portanto, carece de INT 13h e outras interrupções. Normalmente, os drivers UEFI usam endereço LBA em vez de endereçamento CHS.
Visão geral
Em sistemas operacionais de modo real , como o DOS , chamar INT 13h saltaria para o código ROM-BIOS do computador para serviços de disco de baixo nível , que realizariam operações de leitura ou gravação de disco baseadas em setores físicos para o programa. No DOS, ele serve como interface de baixo nível para os drivers de dispositivo de bloco embutidos para discos rígidos e disquetes . Isso permite que o INT 25h e o INT 26h forneçam funções absolutas de leitura / gravação de disco para setores lógicos para o driver do sistema de arquivos FAT no kernel DOS, que lida com solicitações relacionadas a arquivos por meio de funções API DOS ( INT 21h ).
Em sistemas operacionais de modo protegido , como derivados do Microsoft Windows NT (por exemplo, NT4, 2000, XP e Server 2003) e Linux com DOSEMU , o SO intercepta a chamada e a passa para o mecanismo de I / O de disco nativo do sistema operacional. O Windows 9x e o Windows for Workgroups 3.11 também ignoram as rotinas do BIOS ao usar o Acesso ao disco de 32 bits . Além de realizar o acesso ao disco de baixo nível, chamadas INT 13h e estruturas de dados BIOS relacionadas também fornecem informações sobre os tipos e capacidades dos discos (ou outros dispositivos DASD ) anexados ao sistema; quando um sistema operacional de modo protegido é inicializado, ele pode usar essas informações do BIOS para enumerar o hardware do disco para que ele (o sistema operacional) possa carregar e configurar os drivers de E / S de disco apropriados.
A interface INT 13h de modo real do BIOS original oferece suporte a unidades de tamanhos de até 8 GB usando o que é comumente referido como endereçamento CHS físico . Esse limite se origina da interface de hardware do hardware de disco IBM PC / XT . O BIOS usou o endereço do setor da cabeça do cilindro (CHS) fornecido na chamada INT 13h e o transferiu diretamente para a interface de hardware. Um limite menor, cerca de 504 MB, foi imposto pela combinação dos limites de endereçamento CHS usados pelo BIOS e aqueles usados pelos discos rígidos ATA, que são diferentes. Quando os limites de endereçamento CHS de BIOS e ATA são combinados (ou seja, quando são aplicados simultaneamente), o número de setores de 512 bytes que podem ser endereçados representa um total de cerca de 504 MB.
O limite de 504 MB foi superado usando a tradução CHS , uma técnica pela qual o BIOS iria simular uma geometria CHS fictícia na interface INT 13h, enquanto se comunicava com o drive ATA usando sua geometria CHS lógica nativa. (No momento em que a barreira de 504 MB estava sendo abordada, os discos ATA muito antes haviam deixado de apresentar seus parâmetros geométricos físicos reais na interface ATA externa.) A tradução permite que o BIOS, ainda usando o endereçamento CHS, resolva efetivamente os discos ATA com tamanhos maiores para exatamente 8064 MB, a capacidade nativa da interface CHS do BIOS sozinha. (A interface ATA tem uma capacidade de endereçamento CHS nativo muito maior, então, uma vez que a "interferência" dos limites CHS do BIOS e ATA foi resolvida pelo endereçamento, apenas a limitação menor do BIOS foi significativa.) A tradução CHS às vezes é chamada de endereçamento CHS lógico , mas isso é realmente um nome impróprio, pois no momento do desenvolvimento do BIOS, os endereços CHS ATA já eram lógicos, não físicos. O limite de 8064 MB se origina de uma combinação da convenção de chamada baseada em valor de registro usada na interface INT 13h e o objetivo de manter a compatibilidade com versões anteriores - determinando que o formato ou tamanho dos endereços CHS passados para INT 13h não poderiam ser alterados para adicionar mais bits para um dos campos, por exemplo, o campo do número do cilindro. Este limite usa 1024 cilindros, 256 cabeças, 63 setores e blocos de 512 bytes, permitindo exatamente 7,875 GiB de endereçamento (1024 * 256 * 63 * 512 bytes). Houve brevemente um número de BIOS que ofereceu versões incompatíveis desta interface - por exemplo, AWARD AT BIOS e AMI 386sx BIOS foram estendidos para lidar com até 4096 cilindros, colocando os bits 10 e 11 do número do cilindro nos bits 6 e 7 de registrar DH.
Todas as versões do MS-DOS , (incluindo MS-DOS 7 e Windows 95 ) têm um bug que impede a inicialização de unidades de disco com 256 cabeças (valor de registro 0xFF), então muitos BIOS modernos fornecem mapeamentos de tradução CHS com no máximo 255 (0xFE) cabeças , reduzindo assim o espaço endereçável total para exatamente 8032,5 MiB (aproximadamente 7,844 GiB).
Para suportar o endereçamento de discos ainda maiores, uma interface conhecida como INT 13h Extensions foi introduzida pela IBM e pela Microsoft, posteriormente publicada novamente e ligeiramente ampliada pela Phoenix Technologies como parte do BIOS Enhanced Disk Drive Services (EDD). Define novas funções dentro do serviço INT 13h, todas com números de função maiores que 40h, que utilizam endereçamento de bloco lógico (LBA) de 64 bits , que permite endereçar até 8 ZiB . (Uma unidade ATA também pode suportar LBA de 28 ou 48 bits, que permite até 128 GiB ou 128 PiB respectivamente, assumindo um tamanho de setor / bloco de 512 bytes). Esta é uma interface de "pacote", porque usa um ponteiro para um pacote de informações em vez da convenção de chamada baseada em registro da interface 13h original do INT. Este pacote é uma estrutura de dados muito simples que contém uma versão de interface, tamanho de dados e LBAs. Para compatibilidade com versões anteriores do software, as funções estendidas são implementadas junto com as funções CHS originais e as chamadas para funções de ambos os conjuntos podem ser misturadas, mesmo para a mesma unidade, com a ressalva de que as funções CHS não podem ultrapassar os primeiros 8064 MB do disco.
Alguns drivers de cache esvaziam seus buffers ao detectar que o DOS foi ignorado, emitindo diretamente o INT 13h dos aplicativos. Uma leitura simulada via INT 13h pode ser usada como um dos vários métodos para forçar a liberação de cache para caches desconhecidos (por exemplo, antes de reinicializar).
AMI BIOSes de cerca de 1990–1991 eliminam os buffers desalinhados de palavras. Alguns programas DOS e TSR substituem a habilitação de interrupção e os registros, de modo que o PC DOS e o MS-DOS instalam seus próprios filtros para evitar isso.
Lista de serviços
INT 13h
Mesa do Drive
| DL = 00h |
1º disquete ("unidade A:")
|
| DL = 01h |
2º disquete ("unidade B:")
|
| DL = 02h |
3º disquete ("unidade B:")
|
| . . .
|
| DL = 7Fh |
128º disquete
|
| DL = 80h |
1º disco rígido
|
| DL = 81h |
2º disco rígido
|
| DL = 82h |
3º disco rígido
|
| . . .
|
| DL = E0h |
CD / DVD ou 97º disco rígido
|
| . . .
|
| DL = FFh |
128º disco rígido
|
Tabela de Função
| AH = 00h |
|
Reiniciar sistema de disco
|
| AH = 01h |
|
Obter status da última operação da unidade
|
| AH = 02h |
|
Ler Setores do Drive
|
| AH = 03h |
|
Grave Setores no Drive
|
| AH = 04h |
|
Verificar setores
|
| AH = 05h |
|
Formatar faixa
|
| AH = 06h |
|
Formato de faixa definir sinalizadores de setor inválidos
|
| AH = 07h |
|
Formatar o Drive começando na trilha
|
| AH = 08h |
|
Leia os parâmetros do drive
|
| AH = 09h |
HD |
Inicializar o controlador de disco
|
| AH = 0Ah |
HD |
Leia longos setores da unidade
|
| AH = 0Bh |
HD |
Escreva longos setores para a unidade
|
| AH = 0Ch |
HD |
Mova a cabeça de acionamento para o cilindro
|
| AH = 0Dh |
HD |
Reiniciar unidades de disco
|
| AH = 0Eh |
PS / 2 |
Teste de leitura do controlador
|
| AH = 0Fh |
PS / 2 |
Teste de gravação de controlador
|
| AH = 10h |
HD |
Teste se o Drive está pronto
|
| AH = 11h |
HD |
Recalibrar unidade
|
| AH = 12h |
PS / 2 |
Teste de RAM do controlador
|
| AH = 13h |
PS / 2 |
Teste de acionamento
|
| AH = 14h |
HD |
Diagnóstico de Controlador
|
| AH = 15h |
|
Ler tipo de unidade
|
| AH = 16h |
FD |
Detectar mudança de mídia
|
| AH = 17h |
FD
|
Definir tipo de mídia para formato (usado por versões DOS <= 3.1)
|
| AH = 18h |
FD
|
Definir tipo de mídia para formato (usado por versões DOS> = 3.2)
|
| AH = 19h |
|
Park Heads
|
| AH = 41h |
EXT
|
Teste se as extensões estão disponíveis
|
| AH = 42h |
EXT |
Ler Setores do Drive
|
| AH = 43h |
EXT |
Grave Setores no Drive
|
| AH = 44h |
EXT |
Verificar setores
|
| AH = 45h |
EXT |
Bloquear / desbloquear unidade
|
| AH = 46h |
EXT |
Ejetar unidade
|
| AH = 47h |
EXT |
Mova o cabeçote da unidade para o setor
|
| AH = 48h |
EXT |
Leia os parâmetros do drive
|
| AH = 49h |
EXT |
Detectar mudança de mídia
|
|
AH = 4Bh
|
EXT
|
Obter tipo de emulação de unidade
|
Se a segunda coluna estiver vazia, a função pode ser usada tanto para disquete quanto para disco rígido.
- FD: apenas para disquete.
- HD: apenas para disco rígido.
- PS / 2: para disco rígido no sistema PS / 2 apenas.
- EXT: parte das extensões INT 13h que foram escritas na década de 1990 para oferecer suporte a discos rígidos com mais de 8 GB .
INT 13h AH = 00h : Reiniciar sistema de disco
Parâmetros
| AH
|
00h
|
| DL
|
Unidade (bit 7 definido significa redefinir os discos rígidos e flexíveis)
|
Resultados
| CF
|
Definido com erro
|
| AH
|
Código de retorno
|
INT 13h AH = 01h : Obter Status da Última Operação do Drive
Parâmetros
| AH
|
01h
|
| DL
|
Dirigir
|
Bit 7 = 0 para unidade de disquete, bit 7 = 1 para unidade fixa
Resultados
| AH
|
Código de retorno
| 00h
|
Sucesso
|
| 01h
|
Comando inválido
|
| 02h
|
Não é possível encontrar a marca de endereço
|
| 03h
|
Tentativa de gravação em disco protegido contra gravação
|
| 04h
|
Setor não encontrado
|
| 05h
|
Falha na redefinição
|
| 06h
|
Linha de mudança de disco 'ativa'
|
| 07h
|
Falha na atividade do parâmetro da unidade
|
| 08h
|
DMA overrun
|
| 09h
|
Tentativa de DMA acima do limite de 64kb
|
| 0 ah
|
Setor defeituoso detectado
|
| 0Bh
|
Cilindro (trilha) defeituoso detectado
|
| 0Ch
|
Tipo de mídia não encontrado
|
| 0Dh
|
Número inválido de setores
|
| 0Eh
|
Marca de endereço de dados de controle detectada
|
| 0Fh
|
DMA fora de alcance
|
| 10h
|
Erro de dados CRC / ECC
|
| 11h
|
Erro de dados corrigido ECC
|
| 20h
|
Falha do controlador
|
| 40h
|
Procure o fracasso
|
| 80h
|
A unidade atingiu o tempo limite, presumido que não está pronto
|
| AAh
|
A unidade não está pronta
|
| BBh
|
Erro indefinido
|
| CCh
|
Falha de escrita
|
| E0h
|
Erro de status
|
| FFh
|
Falha na operação de detecção
|
|
| CF
|
Definir no erro, limpar se não houver erro
|
INT 13h AH = 02h : Ler Setores do Drive
Parâmetros
| AH
|
02h
|
| AL
|
Setores para ler a contagem
|
| CH
|
Cilindro
|
| CL
|
Setor
|
| DH
|
Cabeça
|
| DL
|
Dirigir
|
| ES: BX
|
Ponteiro de endereço de buffer
|
Resultados
| CF
|
Definir no erro, limpar se não houver erro
|
| AH
|
Código de retorno
|
| AL
|
Contagem de leituras de setores reais
|
O registro CX contém o número do cilindro (10 bits , os valores possíveis são de 0 a 1023) e o número do setor (6 bits, os valores possíveis são de 1 a 63). Os bits de cilindro e setor são numerados abaixo:
CX = ---CH--- ---CL---
cylinder : 76543210 98
sector : 543210
Exemplos de tradução:
CX := ( ( cylinder and 255 ) shl 8 ) or ( ( cylinder and 768 ) shr 2 ) or sector;
cylinder := ( (CX and 0xFF00) shr 8 ) or ( (CX and 0xC0) shl 2)
sector := CX and 63;
O endereçamento do buffer deve garantir que o buffer completo esteja dentro de um determinado segmento , ou seja ( BX + size_of_buffer ) <= 10000h. Caso contrário, a interrupção pode falhar com algumas versões de BIOS ou hardware.
Exemplo
Suponha que você queira ler 16 setores (= 2000h bytes ) e seu buffer comece no endereço de memória 4FF00h. Utilizando a segmentação de memória , existem diferentes maneiras de calcular os valores de registro, por exemplo:
ES = segment = 4F00h
BX = offset = 0F00h
sum = memory address = 4FF00h
would be a good choice because 0F00h + 2000h = 2F00h <= 10000h
ES = segment = 4000h
BX = offset = FF00h
sum = memory address = 4FF00h
would not be a good choice because FF00h + 2000h = 11F00h > 10000h
A função 02h da interrupção 13h só pode ler setores dos primeiros 16.450.560 setores do seu disco rígido, para ler setores além do limite de 8 GB você deve usar a função 42h das Extensões INT 13h . Outra alternativa pode ser a interrupção 25h do DOS, que lê setores
dentro de uma partição.
Exemplo de Código
[ORG 7c00h] ; code starts at 7c00h
xor ax, ax ; make sure ds is set to 0
mov ds, ax
cld
; start putting in values:
mov ah, 2h ; int13h function 2
mov al, 63 ; we want to read 63 sectors
mov ch, 0 ; from cylinder number 0
mov cl, 2 ; the sector number 2 - second sector (starts from 1, not 0)
mov dh, 0 ; head number 0
xor bx, bx
mov es, bx ; es should be 0
mov bx, 7e00h ; 512bytes from origin address 7c00h
int 13h
jmp 7e00h ; jump to the next sector
; to fill this sector and make it bootable:
times 510-($-$$) db 0
dw 0AA55h
após esta seção de código (com a qual o arquivo asm deve começar), você pode escrever o código e ele será carregado na memória e executado.
observe como não alteramos dl (a unidade). Isso ocorre porque quando o computador é carregado pela primeira vez, dl é definido como o número da unidade que foi inicializada, portanto, supondo que queremos ler a unidade de onde inicializamos, não há necessidade de alterar dl.
INT 13h AH = 03h : Gravar Setores no Drive
Parâmetros
| AH
|
03h
|
| AL
|
Setores para escrever contagem
|
| CH
|
Acompanhar
|
| CL
|
Setor
|
| DH
|
Cabeça
|
| DL
|
Dirigir
|
| ES: BX
|
Ponteiro de endereço de buffer
|
Resultados
| CF
|
Definir no erro, limpar se não houver erro
|
| AH
|
Código de retorno
|
| AL
|
Contagem escrita dos setores reais
|
INT 13h AH = 04h : Verificar setores do inversor
Parâmetros
| AH
|
04h
|
| AL
|
Setores para verificar a contagem
|
| CH
|
Acompanhar
|
| CL
|
Setor
|
| DH
|
Cabeça
|
| DL
|
Dirigir
|
| ES: BX
|
Ponteiro de endereço de buffer
|
Resultados
| CF
|
Definir no erro, limpar se não houver erro
|
| AH
|
Código de retorno
|
| AL
|
Contagem verificada de setores reais
|
INT 13h AH = 05h : Formatar faixa
Parâmetros
| AH
|
05h
|
| AL
|
Setores para formatar a contagem
|
| CH
|
Acompanhar
|
| CL
|
Setor
|
| DH
|
Cabeça
|
| DL
|
Dirigir
|
| ES: BX
|
Ponteiro de endereço de buffer
|
Campo de endereço de 4 bytes
(aplica-se a PC / XT 286, AT, PS / 1 e PS / 2)
| Byte
|
Significado
|
Valores Permitidos
|
| 1
|
Acompanhar
|
|
| 2
|
Cabeça
|
|
| 3
|
Setor
|
|
| 4
|
Bytes / Setor
|
0 = 128, 1-256, 2-512, 3-1024
|
Resultados
| CF
|
Definir no erro, limpar se não houver erro
|
| AH
|
Código de retorno
|
INT 13h AH = 06h : Formato Faixa Definir Sinalizadores de Setor Ruim
Parâmetros
| AH
|
06h
|
| AL
|
Intercalar
|
| CH
|
Acompanhar
|
| CL
|
Setor
|
| DH
|
Cabeça
|
| DL
|
Dirigir
|
Resultados
| CF
|
Definir no erro, limpar se não houver erro
|
| AH
|
Código de retorno
|
INT 13h AH = 07h : Formatar a unidade começando na pista
Parâmetros
| AH
|
07h
|
| AL
|
Intercalar
|
| CH
|
Acompanhar
|
| CL
|
Setor
|
| DH
|
Cabeça
|
| DL
|
Dirigir
|
Resultados
| CF
|
Definir no erro, limpar se não houver erro
|
| AH
|
Código de retorno
|
INT 13h AH = 08h : Ler Parâmetros do Drive
Parâmetros
| Registros
|
| AH
|
08h = número da função para read_drive_parameters
|
| DL
|
índice de unidade (por exemplo, 1º HDD = 80h)
|
| ES: DI
|
definido como 0000h: 0000h para contornar alguns BIOS com bugs
|
Resultados
| CF
|
Definir no erro, limpar se não houver erro
|
| AH |
Código de retorno
|
| DL
|
número de unidades de disco rígido
|
| DH
|
último índice lógico de cabeças = numero_de - 1 (porque o índice começa com 0)
|
| CX
|
[7: 6] [15: 8] último índice lógico de cilindros = número_de - 1 (porque o índice começa com 0 )
[5: 0] último índice lógico de setores por trilha = numero_de (porque o índice começa com 1)
|
| BL
|
tipo de unidade (apenas disquetes AT / PS2)
|
| ES: DI
|
ponteiro para a tabela de parâmetros do drive (apenas para disquetes)
|
- Os valores lógicos da função 08h podem / devem diferir dos valores físicos CHS da função 48h.
- O registro de resultado CX contém os cilindros e os valores de setor / trilha, consulte a observação da função 02h.
INT 13h AH = 09h : Características do par de acionamento inicial
Parâmetros
| AH
|
09h
|
| DL
|
Dirigir
|
Resultados
| CF
|
Definir no erro, limpar se não houver erro
|
| AH
|
Código de retorno
|
INT 13h AH = 0Ah: Ler Setores Longos do Drive
A única diferença entre esta função e a função 02h (veja acima) é que a função 0Ah lê 516 bytes por setor em vez de apenas 512. Os últimos 4 bytes contêm o Código de Correção de Erro (ECC), uma soma de verificação dos dados do setor.
INT 13h AH = 41h : Verificar extensões presentes
Parâmetros
| Registros
|
Descrição
|
| AH
|
41h = número da função para verificação de extensões
|
| DL
|
índice de unidade (por exemplo, 1º HDD = 80h)
|
| BX |
55AAh
|
Resultados
| Registros
|
Descrição
|
| CF
|
Definido como não presente, claro se houver
|
| AH
|
Código de erro ou número da versão principal
|
| BX |
AA55h
|
| CX
|
Interface com suporte a bitmask:
- 1 - Acesso ao dispositivo usando a estrutura do pacote
- 2 - Travamento e ejeção da unidade
- 4 - Suporte aprimorado para unidade de disco (EDD)
|
INT 13h AH = 42h : Setores de leitura estendida da unidade
Parâmetros
| Registros
|
Descrição
|
| AH
|
42h = número da função para leitura estendida
|
| DL
|
índice de unidade (por exemplo, 1º HDD = 80h)
|
| DS: SI
|
segmento: ponteiro de deslocamento para o DAP, veja abaixo
DAP: Pacote de Endereço de Disco
| intervalo de deslocamento |
Tamanho
|
Descrição
|
| 00h |
1 byte |
tamanho do DAP (defina para 10h)
|
| 01h |
1 byte |
não utilizado, deve ser zero
|
| 02h..03h |
2 bytes
|
número de setores a serem lidos, (alguns Phoenix BIOSes são limitados a um máximo de 127 setores)
|
| 04h..07h |
4 bytes
|
segmento: ponteiro de deslocamento para o buffer de memória para o qual os setores serão transferidos (observe que x86 é little-endian : se declarar o segmento e deslocamento separadamente, o deslocamento deve ser declarado antes do segmento)
|
| 08h..0Fh |
8 bytes
|
número absoluto do início dos setores a serem lidos (o primeiro setor da unidade tem o número 0) usando o endereçamento de bloco lógico (observe que a metade inferior vem antes da metade superior)
|
|
Resultados
| Registros
|
Descrição
|
| CF
|
Definir no erro, limpar se não houver erro
|
| AH |
Código de retorno
|
Como já declarado com int 13h AH = 02h, deve-se tomar cuidado para garantir que o buffer completo esteja dentro do segmento dado , ou seja , (BX + size_of_buffer) <= 10000h
INT 13h AH = 43h : Setores de Gravação Estendida para Drive
Parâmetros
| Registros
|
Descrição
|
| AH
|
43h = número da função para gravação estendida
|
| AL
|
- bit 0 = 0: fechar verificação de gravação,
- bit 0 = 1: abrir verificação de gravação,
- bit 1-7: reservado, definido como 0
|
| DL
|
índice de unidade (por exemplo, 1º HDD = 80h)
|
| DS: SI
|
segmento: ponteiro de deslocamento para o DAP
|
Resultados
| Registros
|
Descrição
|
| CF
|
Definir no erro, limpar se não houver erro
|
| AH |
Código de retorno
|
INT 13h AH = 48h : Parâmetros de leitura estendidos da unidade
Parâmetros
| Registros
|
Descrição
|
| AH
|
48h = número da função para extended_read_drive_parameters
|
| DL
|
índice de unidade (por exemplo, 1º HDD = 80h)
|
| DS: SI
|
segmento: ponteiro de deslocamento para o buffer de resultado, veja abaixo
Buffer de resultado
| intervalo de deslocamento |
Tamanho
|
Descrição
|
| 00h..01h |
2 bytes |
tamanho do buffer de resultado (defina para 1Eh)
|
| 02h..03h |
2 bytes |
bandeiras de informação
|
| 04h..07h |
4 bytes
|
número físico de cilindros = último índice + 1 (porque o índice começa com 0)
|
| 08h..0Bh |
4 bytes
|
número físico de cabeças = último índice + 1 (porque o índice começa com 0)
|
| 0Ch..0Fh |
4 bytes
|
número físico de setores por trilha = último índice (porque o índice começa com 1)
|
| 10h..17h |
8 bytes
|
número absoluto de setores = último índice + 1 (porque o índice começa com 0)
|
| 18h..19h |
2 bytes |
bytes por setor
|
| 1Ah..1Dh |
4 bytes
|
ponteiro opcional para parâmetros de configuração do Enhanced Disk Drive (EDD) que podem ser usados para chamadas de extensão 13h de interrupção subsequentes (se houver suporte)
|
|
Resultados
| Registros
|
Descrição
|
| CF
|
Definir no erro, limpar se não houver erro
|
| AH |
Código de retorno
|
Os valores físicos de CHS da função 48h podem / devem diferir dos valores lógicos da função 08h.
INT 13h AH = 4Bh: Obter tipo de emulação de unidade
Parâmetros
| Regsiters
|
Descrição
|
| AH
|
4Bh = obter tipo de emulação de unidade
|
| AL
|
01
|
| DL
|
índice de unidade (por exemplo, 1º HDD = 80h)
|
| DS: SI
|
aponta para uma estrutura vazia para o resultado. deve ter 13h de tamanho
|
Resultados
| Registros
|
Descrição
|
| CF
|
Definir no erro, limpar se não houver erro
|
| MACHADO
|
Código de retorno
|
| DS: SI
|
Aponta para uma estrutura de especificação
Estrutura de Especificação
| Desvio
|
Tamanho (byte)
|
Descrição
|
| 00h
|
1
|
Tamanho dos pacotes em byte (13h)
|
| 01h
|
1
|
Tipo de mídia de inicialização:
| Bits
|
|
| 0 - 3
|
0000b: sem emulação
0001b: disquete de 1,2M
0010b: disquete de 1,44M
0011b: disquete de 2,88M
0100b: Disco Rígido
|
| 4-5
|
Reservado
|
| 6
|
Imagem contém driver ATAPI
|
| 7
|
Imagem contém driver SCSI
|
|
| 02h
|
1
|
Número da unidade (índice da unidade)
|
| 03h
|
1
|
Número do controlador de CD-ROM
|
| 04h
|
4
|
Endereço de bloco lógico (LBA) da imagem de disco para emular
|
| 08h
|
2
|
Especificação do dispositivo:
bit 0: o drive é escravo em vez de mestre
bits 7-0: LUN e PUN
|
| 0 ah
|
2
|
Segmento de buffer de 3K para leituras de CD-ROMs em cache
|
| 0Ch
|
2
|
Segmento de imagem de inicialização inicial começando no segmento 7c0h
|
| 0Eh
|
2
|
Número de setores (512 bytes) para carregar
|
| 10h
|
1
|
Byte baixo de contagem de cilindros (de int 8h)
|
| 11h
|
1
|
Contagem do setor (de 8h int)
|
| 12h
|
1
|
Contagem de funcionários (a partir de 8h int)
|
|
Veja também
Referências
links externos