mirror of
https://github.com/reactos/reactos.git
synced 2024-07-31 16:48:14 +00:00
[SOFT386]
Implement Soft386Interrupt. [NTVDM] Implement EmulatorInterrupt and EmulatorExternalInterrupt for NEW_EMULATOR. svn path=/branches/ntvdm/; revision=60628
This commit is contained in:
parent
a2e0e03ee6
commit
c425bbc689
|
@ -359,7 +359,7 @@ Soft386Reset(PSOFT386_STATE State);
|
|||
|
||||
VOID
|
||||
NTAPI
|
||||
Soft386Interrupt(PSOFT386_STATE State, UCHAR Number);
|
||||
Soft386Interrupt(PSOFT386_STATE State, UCHAR Number, BOOLEAN Hardware);
|
||||
|
||||
VOID
|
||||
NTAPI
|
||||
|
|
|
@ -273,10 +273,27 @@ Soft386Reset(PSOFT386_STATE State)
|
|||
|
||||
VOID
|
||||
NTAPI
|
||||
Soft386Interrupt(PSOFT386_STATE State, UCHAR Number)
|
||||
Soft386Interrupt(PSOFT386_STATE State, UCHAR Number, BOOLEAN Hardware)
|
||||
{
|
||||
// TODO: NOT IMPLEMENTED!!!
|
||||
UNIMPLEMENTED;
|
||||
SOFT386_IDT_ENTRY IdtEntry;
|
||||
|
||||
if (Hardware)
|
||||
{
|
||||
/* Set the hardware interrupt flag */
|
||||
State->HardwareInt = TRUE;
|
||||
}
|
||||
|
||||
if (!Soft386GetIntVector(State, Number, &IdtEntry))
|
||||
{
|
||||
/* An exception occurred, let the handler execute */
|
||||
return;
|
||||
}
|
||||
|
||||
/* Perform the interrupt */
|
||||
Soft386InterruptInternal(State,
|
||||
IdtEntry.Selector,
|
||||
MAKELONG(IdtEntry.Offset, IdtEntry.OffsetHigh),
|
||||
IdtEntry.Type);
|
||||
}
|
||||
|
||||
VOID
|
||||
|
|
|
@ -461,6 +461,7 @@ VOID EmulatorExecute(WORD Segment, WORD Offset)
|
|||
|
||||
VOID EmulatorInterrupt(BYTE Number)
|
||||
{
|
||||
#ifndef NEW_EMULATOR
|
||||
LPDWORD IntVecTable = (LPDWORD)((ULONG_PTR)BaseAddress);
|
||||
UINT Segment, Offset;
|
||||
|
||||
|
@ -468,13 +469,11 @@ VOID EmulatorInterrupt(BYTE Number)
|
|||
Segment = HIWORD(IntVecTable[Number]);
|
||||
Offset = LOWORD(IntVecTable[Number]);
|
||||
|
||||
#ifndef NEW_EMULATOR
|
||||
/* Call the softx86 API */
|
||||
softx86_make_simple_interrupt_call(&EmulatorContext, &Segment, &Offset);
|
||||
#else
|
||||
UNREFERENCED_PARAMETER(Segment);
|
||||
UNREFERENCED_PARAMETER(Offset);
|
||||
// TODO: NOT IMPLEMENTED
|
||||
/* Call the Soft386 API */
|
||||
Soft386Interrupt(&EmulatorContext, Number, FALSE);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -483,6 +482,9 @@ VOID EmulatorExternalInterrupt(BYTE Number)
|
|||
#ifndef NEW_EMULATOR
|
||||
/* Call the softx86 API */
|
||||
softx86_ext_hw_signal(&EmulatorContext, Number);
|
||||
#else
|
||||
/* Call the Soft386 API */
|
||||
Soft386Interrupt(&EmulatorContext, Number, TRUE);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue