reactos/boot/freeldr/freeldr/arch/i386/i386idt.c

44 lines
1.3 KiB
C

#include <freeldr.h>
KIDTENTRY DECLSPEC_ALIGN(4) i386Idt[32];
KDESCRIPTOR i386IdtDescriptor = {0, 255, (ULONG)i386Idt};
static
void
InitIdtVector(
UCHAR Vector,
PVOID ServiceHandler,
USHORT Access)
{
i386Idt[Vector].Offset = (ULONG)ServiceHandler & 0xffff;
i386Idt[Vector].ExtendedOffset = (ULONG)ServiceHandler >> 16;
i386Idt[Vector].Selector = PMODE_CS;
i386Idt[Vector].Access = Access;
}
void
__cdecl
InitIdt(void)
{
InitIdtVector(0, i386DivideByZero, 0x8e00);
InitIdtVector(1, i386DebugException, 0x8e00);
InitIdtVector(2, i386NMIException, 0x8e00);
InitIdtVector(3, i386Breakpoint, 0x8e00);
InitIdtVector(4, i386Overflow, 0x8e00);
InitIdtVector(5, i386BoundException, 0x8e00);
InitIdtVector(6, i386InvalidOpcode, 0x8e00);
InitIdtVector(7, i386FPUNotAvailable, 0x8e00);
InitIdtVector(8, i386DoubleFault, 0x8e00);
InitIdtVector(9, i386CoprocessorSegment, 0x8e00);
InitIdtVector(10, i386InvalidTSS, 0x8e00);
InitIdtVector(11, i386SegmentNotPresent, 0x8e00);
InitIdtVector(12, i386StackException, 0x8e00);
InitIdtVector(13, i386GeneralProtectionFault, 0x8e00);
InitIdtVector(14, i386PageFault, 0x8e00);
InitIdtVector(16, i386CoprocessorError, 0x8e00);
InitIdtVector(17, i386AlignmentCheck, 0x8e00);
InitIdtVector(18, i386MachineCheck, 0x8e00);
}