собственно задумал я отказаться от PIC и перейти на более современный APIC. скопипастил у Руслана Аблязова код инициализации апика, все вроде сделал как по книге, только у меня вылетает #GP непонятно где. в борще я пошагово прошел весь код, включая отладил прерывания - все работает как надо. настраивал только таймер и клаву - таймер работает, клава тоже. а #GP есть. как пофиксить сию проблему - ума не приложу.
код инициализации
Код:
mov ecx, IA32_APIC_BASE
rdmsr
bts eax, 11
wrmsr
mov dword [APIC_LVT_Timer_REG_DEF], ((1 shl 17) or 20h)
mov dword [APIC_Timer_Divide_Configuration_REG_DEF], 1001b
mov dword [APIC_Timer_Initial_Count_REG_DEF], 1000000
mov eax, 1
cpuid
and ebx, 0FF000000h ; high byte = Local APIC ID
mov dword [IOAPIC_IOREGSEL_REG_DEF], IOAPIC_IOAPICID
mov dword [IOAPIC_IOWIN_REG_DEF], 2000000h
mov dword [IOAPIC_IOREGSEL_REG_DEF], IOAPIC_IOREDTBL1_hi
mov dword [IOAPIC_IOWIN_REG_DEF], ebx
mov dword [IOAPIC_IOREGSEL_REG_DEF], IOAPIC_IOREDTBL1_low
mov dword [IOAPIC_IOWIN_REG_DEF], 21h
странно, под виртуалбоксом тоже #GP, но там прерывания не обрабатываются. машина зависает и все. а в борще норм