É acho que deve ser o bochs. Ele é bem básico, não é tão completo quanto o VMware, muito menos um PC real. A versão do bochs que eu uso é a 2.3.7, que por sinal é a mais recente. Não sei se o problema está sendo eu desenvolver tudo em C++, mas funciona legal no WM e no PC.
Outro problema do bochs é a falta de suporte a teclado ABNT2. Estou escrevendo um driver de teclado também, e para minha supresa, as teclas que ele não reconhece, ele coloca o mesmo valor da tecla CTRL (29).
Apesar de tudo, mesmo o PC real não fica disparando IRQ toda vez que alguma coisa aconteceu no FDC (recalibragem, seek, reset, motor ON e OFF). E eu precisava criar um driver de disquetes pra carregar o Kernel. Alguém conhece um "esquema", tipo por timeout ou pooling (esperar até que o FDC esteja pronto) para se criar um driver para disquetes?
Aqui está o meu Handler de IRQ's:
void irq_handler(REGISTERS regs)
{
Handler * ih = Interrupt::getEventHandler((Interrupt::IH_TYPE) regs.int_no);
if (ih)
{
ih->setRegisters(& regs);
ih->onInterrupt();
}
if (regs.int_no >= 40)
System::outportb(Interrupt::PIC_CMD_SLAVE, 0x20);
System::outportb(Interrupt::PIC_CMD_MASTER, 0x20);
}