Compatibility Issues with Athlon Protected Mode IDTs?
Posted: Tue Mar 19, 2002 12:00 am
I truly hope that who ever this reaches can answer my question or can atleast point me to the answer. And thanks in advance
Anyway my question is this does the AMD Athlon XP or lower handel protected mode in Assembly differently than an Intel x86(PIII in this case)?
My problem is this. I have implemented into my Kernel for my OS Protected mode. What I have done for the time being is written a simple IDT/Handeler that re-routes all interrrupts to a Real Mode segment which in turn calls the true Bios interrupt and then returns to the Protected Mode Code. The code is simple(only 30lines) and works well on my Aptiva 550(Pentium III 500mhz), I have tested it throughly.
Note that both the code segments and interrupts are given Ring0 preivlegives but I have tried all different combinations with no success.
Here is how it Works on the Pentium III(Correctly):
Protected Mode Interrupt(say int 13h)->IDT->Handel->Real Mode Segment of Code->Calls Corresponding Bios Interrupt(Calls the real int 13h)->Returns to PMode code that called.
Here is how it works on my AMD Athlon4(Incorrectly):
Protected Mode Interrrupt->Skips to the next line of code
I littered my whole code with Debugging so I know that it is skipping only the interrrupts and going everywhere else. Also I Do have interrupts enable via Sti. I have made extensive checking and Sti doesn't seem to have an effect on the transfer to the interrupts. In the IDT I have tried both Interrupt Gates and Trap Gates.
Please help in anyway that you can. If I don't fix this one silly bug then I wont be able to continue. I have looked every where on the web for answers and usually no one knows or just gives false information. I had one guy tell me that cli enables interrupts and sti disables them :p, which I tried anyway just because I had nothing else :p.
One last note on the Intel I seem to still be able to call software interrupts even with them disabled.... maybe this could point to one difference I have found.
P.S Please Email me if you can in anyway help.
#include<ThanksForAnyThingYouCanDo.h>
~`DarkEyes`~
Anyway my question is this does the AMD Athlon XP or lower handel protected mode in Assembly differently than an Intel x86(PIII in this case)?
My problem is this. I have implemented into my Kernel for my OS Protected mode. What I have done for the time being is written a simple IDT/Handeler that re-routes all interrrupts to a Real Mode segment which in turn calls the true Bios interrupt and then returns to the Protected Mode Code. The code is simple(only 30lines) and works well on my Aptiva 550(Pentium III 500mhz), I have tested it throughly.
Note that both the code segments and interrupts are given Ring0 preivlegives but I have tried all different combinations with no success.
Here is how it Works on the Pentium III(Correctly):
Protected Mode Interrupt(say int 13h)->IDT->Handel->Real Mode Segment of Code->Calls Corresponding Bios Interrupt(Calls the real int 13h)->Returns to PMode code that called.
Here is how it works on my AMD Athlon4(Incorrectly):
Protected Mode Interrrupt->Skips to the next line of code
I littered my whole code with Debugging so I know that it is skipping only the interrrupts and going everywhere else. Also I Do have interrupts enable via Sti. I have made extensive checking and Sti doesn't seem to have an effect on the transfer to the interrupts. In the IDT I have tried both Interrupt Gates and Trap Gates.
Please help in anyway that you can. If I don't fix this one silly bug then I wont be able to continue. I have looked every where on the web for answers and usually no one knows or just gives false information. I had one guy tell me that cli enables interrupts and sti disables them :p, which I tried anyway just because I had nothing else :p.
One last note on the Intel I seem to still be able to call software interrupts even with them disabled.... maybe this could point to one difference I have found.
P.S Please Email me if you can in anyway help.
#include<ThanksForAnyThingYouCanDo.h>
~`DarkEyes`~