Primeiro, entenda que o hardware x86 tem uma Tabela do Descritor de Interrupções que reside na RAM. Na CPU 8086 original isso foi corrigido no local de memória 0, o primeiro local da RAM, mas pode ser movido em CPUs posteriores e modernas. Inicialmente, o BIOS configura isso no local de memória 0.
O IDT é uma lista de ponteiros de 32 bits para rotinas em outro lugar na memória (que pode ser ROM ou RAM), numeradas de 0x00 a 0xFF.
Atualmente, os primeiros 32 deles são reservados para uso da própria CPU. Uma falha de proteção geral, por exemplo, fará com que a rotina apontada pelo vetor 0x0D seja chamada.
Qualquer rotina apontada em um desses vetores pode ser "chamada" com a instrução de interrupção de software INT
. Portanto, INT 0x0D
chamará a mesma rotina que seria chamada se uma falha de proteção geral fosse chamada.
O BIOS da era DOS usa muitos deles para apresentar uma interface padrão para chamadas de BIOS . Alguns dos que a BIOS usa tradicionalmente se sobrepõem ao que a CPU usa.
O próprio DOS também fez uso de uma única interrupção, 0x21
, para permitir aos programas uma forma padrão de chamar Funções do DOS .
Agora, uma interrupção bem conhecida da BIOS é 0x13
, que permite ler ou gravar um setor em um dispositivo de disco .
Durante o processo de inicialização, a área ROM da memória é escaneada e o código de inicialização de qualquer ROM é chamado. Os dispositivos ISA e PCI podem ter uma ROM que apareça e que será chamada durante a inicialização. A ROM de dispositivos pode modificar vetores, estendendo ou substituindo a funcionalidade do BIOS. As placas RAID projetadas para trabalhar com o DOS e versões 9x do Windows podem fazer isso.
Uma rotina da BIOS inicializa a exibição de vídeo e permite a configuração do modo de exibição. É muito comum que as placas de vídeo tenham uma ROM que substitua essa interrupção para permitir que a placa gráfica seja usada durante o processo de inicialização da BIOS (e no DOS, se você realmente quiser).
Não há nada que pare um programa depois de tudo que é inicializado a partir da modificação desses vetores para aumentar ou substituir a funcionalidade do BIOS. No passado, quando certos BIOS não conseguiam acessar os setores do disco rígido em uma barreira de 8 GB, alguns fornecedores forneciam um disco de inicialização que fornecia um utilitário que conectava o Int 0x13, ignorando a limitação do BIOS.
Então tudo isso era muito comum quando o DOS era o sistema operacional predominante. Atualmente, o BIOS, se ainda estiver disponível (UEFI é seu sucessor), é muito usado apenas para inicialização e sua tela de inicialização, e o sistema operacional acessa o hardware diretamente - a exceção é relacionado ao gerenciamento de energia.