Hallo,
Ich arbeite mit fasm und hab mal versucht auch damit ne IDT aufzustellen das hat damals nicht so ganz funktioniert, da hab ich's aufgegeben, heute habe ich den Code wieder rausgekramt und etwas herumprobiert, aber erfolglos, daher wollte ich mal hier fragen. Der Code sieht so aus:
macro IdtEntry Isr
{
dw Isr and 0xffff
dw 0x0008
db 00000000b
db 10001110b
dw Isr shr 16
}
macro Exception Message
{
pusha
push gs
push fs
push ds
push es
mov esi, Message
call PutString
cli
hlt
pop es
pop ds
pop fs
pop gs
popa
iret
}
InterruptDescriptorTable:
dw EndOfIdtEntries - IdtEntries -1
dd IdtEntries
IdtEntries:
IdtEntry Isr1
[...]
IdtEntry Isr33
EndOfIdtEntries:
Isr0: Exception Msg_Exception_1
[...]
Isr31: Exception Msg_Exception_32
Isr32:
pusha
push gs
push fs
push ds
push es
push String_Header
push 0x1f
call PutString
pop es
pop ds
pop fs
pop gs
popa
iret
Isr33:
pusha
push gs
push fs
push ds
push es
;xor eax, eax
;in al, 0x60
;call PutChar
push String_Header
call PutString
;mov al, 0x20
;out 0xA0, al
;out 0x20, al
pop es
pop ds
pop fs
pop gs
popa
iret
die IDT wird so geladen:
lidt [InterruptDescriptorTable]
sti
Nun beschwert sich Bochs aber, dass diese IDT ungültig ist, hat da jemand ne Idee?