OSを開発していて、PICタイマーを機能させようとしています。これは、保護モードで実行されている32ビットOSです。このコードはOSをハングさせます(理由はわかりませんが、それが私が見つけようとしていることです)。IRQ0マスクをクリアしています。このコードに何か問題がありますか、それともIDTまたはPICに問題がありますか?また、正常に動作するソフトウェア割り込みハンドラーがいくつかあるので、IDTでは機能しないと思います。
public static void IRQ_clear_mask(byte IRQline)
{
ushort port;
byte value;
if (IRQline < 8)
{
port = 0x21;
}
else
{
port = 0xA1;
IRQline -= 8;
}
value = (byte)(GruntyOS.IO.Ports.Inb(port) & ~(1 << IRQline));
GruntyOS.IO.Ports.Outb(port, value);
}
mov byte [_NATIVE_IDT_Contents + 254], AL
mov byte [_NATIVE_IDT_Contents + 255], AH
mov dword EAX, irq_common_stub
mov byte [_NATIVE_IDT_Contents + 0x100], AL
mov byte [_NATIVE_IDT_Contents + 0x101], AH
mov byte [_NATIVE_IDT_Contents + 0x102], 0x8
mov byte [_NATIVE_IDT_Contents + 0x105], 0x8E