/* PUBLIC FUNCTIONS ***********************************************************/
+static inline BOOLEAN EmulatorGetFlag(ULONG Flag)
+{
+ return (EmulatorContext.Flags.Long & Flag) ? TRUE : FALSE;
+}
+
+static inline VOID EmulatorSetFlag(ULONG Flag)
+{
+ EmulatorContext.Flags.Long |= Flag;
+}
+
+static inline VOID EmulatorClearFlag(ULONG Flag)
+{
+ EmulatorContext.Flags.Long &= ~Flag;
+}
+
+VOID EmulatorSetStack(WORD Segment, DWORD Offset)
+{
+ Fast486SetStack(&EmulatorContext, Segment, Offset);
+}
+
+
+
+PVOID
+WINAPI
+getIntelRegistersPointer(VOID)
+{
+ UNIMPLEMENTED;
+ return NULL;
+}
+
ULONG
-CDECL
+WINAPI
getEAX(VOID)
{
- return EmulatorContext.GeneralRegs[EMULATOR_REG_AX].Long;
+ return EmulatorContext.GeneralRegs[FAST486_REG_EAX].Long;
}
VOID
-CDECL
+WINAPI
setEAX(ULONG Value)
{
- EmulatorContext.GeneralRegs[EMULATOR_REG_AX].Long = Value;
+ EmulatorContext.GeneralRegs[FAST486_REG_EAX].Long = Value;
}
USHORT
-CDECL
+WINAPI
getAX(VOID)
{
- return EmulatorContext.GeneralRegs[EMULATOR_REG_AX].LowWord;
+ return EmulatorContext.GeneralRegs[FAST486_REG_EAX].LowWord;
}
VOID
-CDECL
+WINAPI
setAX(USHORT Value)
{
- EmulatorContext.GeneralRegs[EMULATOR_REG_AX].LowWord = Value;
+ EmulatorContext.GeneralRegs[FAST486_REG_EAX].LowWord = Value;
}
UCHAR
-CDECL
+WINAPI
getAH(VOID)
{
- return EmulatorContext.GeneralRegs[EMULATOR_REG_AX].HighByte;
+ return EmulatorContext.GeneralRegs[FAST486_REG_EAX].HighByte;
}
VOID
-CDECL
+WINAPI
setAH(UCHAR Value)
{
- EmulatorContext.GeneralRegs[EMULATOR_REG_AX].HighByte = Value;
+ EmulatorContext.GeneralRegs[FAST486_REG_EAX].HighByte = Value;
}
UCHAR
-CDECL
+WINAPI
getAL(VOID)
{
- return EmulatorContext.GeneralRegs[EMULATOR_REG_AX].LowByte;
+ return EmulatorContext.GeneralRegs[FAST486_REG_EAX].LowByte;
}
VOID
-CDECL
+WINAPI
setAL(UCHAR Value)
{
- EmulatorContext.GeneralRegs[EMULATOR_REG_AX].LowByte = Value;
+ EmulatorContext.GeneralRegs[FAST486_REG_EAX].LowByte = Value;
}
ULONG
-CDECL
+WINAPI
getEBX(VOID)
{
- return EmulatorContext.GeneralRegs[EMULATOR_REG_BX].Long;
+ return EmulatorContext.GeneralRegs[FAST486_REG_EBX].Long;
}
VOID
-CDECL
+WINAPI
setEBX(ULONG Value)
{
- EmulatorContext.GeneralRegs[EMULATOR_REG_BX].Long = Value;
+ EmulatorContext.GeneralRegs[FAST486_REG_EBX].Long = Value;
}
USHORT
-CDECL
+WINAPI
getBX(VOID)
{
- return EmulatorContext.GeneralRegs[EMULATOR_REG_BX].LowWord;
+ return EmulatorContext.GeneralRegs[FAST486_REG_EBX].LowWord;
}
VOID
-CDECL
+WINAPI
setBX(USHORT Value)
{
- EmulatorContext.GeneralRegs[EMULATOR_REG_BX].LowWord = Value;
+ EmulatorContext.GeneralRegs[FAST486_REG_EBX].LowWord = Value;
}
UCHAR
-CDECL
+WINAPI
getBH(VOID)
{
- return EmulatorContext.GeneralRegs[EMULATOR_REG_BX].HighByte;
+ return EmulatorContext.GeneralRegs[FAST486_REG_EBX].HighByte;
}
VOID
-CDECL
+WINAPI
setBH(UCHAR Value)
{
- EmulatorContext.GeneralRegs[EMULATOR_REG_BX].HighByte = Value;
+ EmulatorContext.GeneralRegs[FAST486_REG_EBX].HighByte = Value;
}
UCHAR
-CDECL
+WINAPI
getBL(VOID)
{
- return EmulatorContext.GeneralRegs[EMULATOR_REG_BX].LowByte;
+ return EmulatorContext.GeneralRegs[FAST486_REG_EBX].LowByte;
}
VOID
-CDECL
+WINAPI
setBL(UCHAR Value)
{
- EmulatorContext.GeneralRegs[EMULATOR_REG_BX].LowByte = Value;
+ EmulatorContext.GeneralRegs[FAST486_REG_EBX].LowByte = Value;
}
ULONG
-CDECL
+WINAPI
getECX(VOID)
{
- return EmulatorContext.GeneralRegs[EMULATOR_REG_CX].Long;
+ return EmulatorContext.GeneralRegs[FAST486_REG_ECX].Long;
}
VOID
-CDECL
+WINAPI
setECX(ULONG Value)
{
- EmulatorContext.GeneralRegs[EMULATOR_REG_CX].Long = Value;
+ EmulatorContext.GeneralRegs[FAST486_REG_ECX].Long = Value;
}
USHORT
-CDECL
+WINAPI
getCX(VOID)
{
- return EmulatorContext.GeneralRegs[EMULATOR_REG_CX].LowWord;
+ return EmulatorContext.GeneralRegs[FAST486_REG_ECX].LowWord;
}
VOID
-CDECL
+WINAPI
setCX(USHORT Value)
{
- EmulatorContext.GeneralRegs[EMULATOR_REG_CX].LowWord = Value;
+ EmulatorContext.GeneralRegs[FAST486_REG_ECX].LowWord = Value;
}
UCHAR
-CDECL
+WINAPI
getCH(VOID)
{
- return EmulatorContext.GeneralRegs[EMULATOR_REG_CX].HighByte;
+ return EmulatorContext.GeneralRegs[FAST486_REG_ECX].HighByte;
}
VOID
-CDECL
+WINAPI
setCH(UCHAR Value)
{
- EmulatorContext.GeneralRegs[EMULATOR_REG_CX].HighByte = Value;
+ EmulatorContext.GeneralRegs[FAST486_REG_ECX].HighByte = Value;
}
UCHAR
-CDECL
+WINAPI
getCL(VOID)
{
- return EmulatorContext.GeneralRegs[EMULATOR_REG_CX].LowByte;
+ return EmulatorContext.GeneralRegs[FAST486_REG_ECX].LowByte;
}
VOID
-CDECL
+WINAPI
setCL(UCHAR Value)
{
- EmulatorContext.GeneralRegs[EMULATOR_REG_CX].LowByte = Value;
+ EmulatorContext.GeneralRegs[FAST486_REG_ECX].LowByte = Value;
}
ULONG
-CDECL
+WINAPI
getEDX(VOID)
{
- return EmulatorContext.GeneralRegs[EMULATOR_REG_DX].Long;
+ return EmulatorContext.GeneralRegs[FAST486_REG_EDX].Long;
}
VOID
-CDECL
+WINAPI
setEDX(ULONG Value)
{
- EmulatorContext.GeneralRegs[EMULATOR_REG_DX].Long = Value;
+ EmulatorContext.GeneralRegs[FAST486_REG_EDX].Long = Value;
}
USHORT
-CDECL
+WINAPI
getDX(VOID)
{
- return EmulatorContext.GeneralRegs[EMULATOR_REG_DX].LowWord;
+ return EmulatorContext.GeneralRegs[FAST486_REG_EDX].LowWord;
}
VOID
-CDECL
+WINAPI
setDX(USHORT Value)
{
- EmulatorContext.GeneralRegs[EMULATOR_REG_DX].LowWord = Value;
+ EmulatorContext.GeneralRegs[FAST486_REG_EDX].LowWord = Value;
}
UCHAR
-CDECL
+WINAPI
getDH(VOID)
{
- return EmulatorContext.GeneralRegs[EMULATOR_REG_DX].HighByte;
+ return EmulatorContext.GeneralRegs[FAST486_REG_EDX].HighByte;
}
VOID
-CDECL
+WINAPI
setDH(UCHAR Value)
{
- EmulatorContext.GeneralRegs[EMULATOR_REG_DX].HighByte = Value;
+ EmulatorContext.GeneralRegs[FAST486_REG_EDX].HighByte = Value;
}
UCHAR
-CDECL
+WINAPI
getDL(VOID)
{
- return EmulatorContext.GeneralRegs[EMULATOR_REG_DX].LowByte;
+ return EmulatorContext.GeneralRegs[FAST486_REG_EDX].LowByte;
}
VOID
-CDECL
+WINAPI
setDL(UCHAR Value)
{
- EmulatorContext.GeneralRegs[EMULATOR_REG_DX].LowByte = Value;
+ EmulatorContext.GeneralRegs[FAST486_REG_EDX].LowByte = Value;
}
ULONG
-CDECL
+WINAPI
getESP(VOID)
{
- return EmulatorGetRegister(EMULATOR_REG_SP);
+ return EmulatorContext.GeneralRegs[FAST486_REG_ESP].Long;
}
VOID
-CDECL
+WINAPI
setESP(ULONG Value)
{
- EmulatorSetStack(EmulatorGetRegister(EMULATOR_REG_SS), Value);
+ EmulatorSetStack(getSS(), Value);
}
USHORT
-CDECL
+WINAPI
getSP(VOID)
{
- return LOWORD(EmulatorGetRegister(EMULATOR_REG_SP));
+ return EmulatorContext.GeneralRegs[FAST486_REG_ESP].LowWord;
}
VOID
-CDECL
+WINAPI
setSP(USHORT Value)
{
- EmulatorSetStack(EmulatorGetRegister(EMULATOR_REG_SS), Value);
+ EmulatorSetStack(getSS(), Value);
}
ULONG
-CDECL
+WINAPI
getEBP(VOID)
{
- return EmulatorContext.GeneralRegs[EMULATOR_REG_BP].Long;
+ return EmulatorContext.GeneralRegs[FAST486_REG_EBP].Long;
}
VOID
-CDECL
+WINAPI
setEBP(ULONG Value)
{
- EmulatorContext.GeneralRegs[EMULATOR_REG_BP].Long = Value;
+ EmulatorContext.GeneralRegs[FAST486_REG_EBP].Long = Value;
}
USHORT
-CDECL
+WINAPI
getBP(VOID)
{
- return EmulatorContext.GeneralRegs[EMULATOR_REG_BP].LowWord;
+ return EmulatorContext.GeneralRegs[FAST486_REG_EBP].LowWord;
}
VOID
-CDECL
+WINAPI
setBP(USHORT Value)
{
- EmulatorContext.GeneralRegs[EMULATOR_REG_BP].LowWord = Value;
+ EmulatorContext.GeneralRegs[FAST486_REG_EBP].LowWord = Value;
}
ULONG
-CDECL
+WINAPI
getESI(VOID)
{
- return EmulatorContext.GeneralRegs[EMULATOR_REG_SI].Long;
+ return EmulatorContext.GeneralRegs[FAST486_REG_ESI].Long;
}
VOID
-CDECL
+WINAPI
setESI(ULONG Value)
{
- EmulatorContext.GeneralRegs[EMULATOR_REG_SI].Long = Value;
+ EmulatorContext.GeneralRegs[FAST486_REG_ESI].Long = Value;
}
USHORT
-CDECL
+WINAPI
getSI(VOID)
{
- return EmulatorContext.GeneralRegs[EMULATOR_REG_SI].LowWord;
+ return EmulatorContext.GeneralRegs[FAST486_REG_ESI].LowWord;
}
VOID
-CDECL
+WINAPI
setSI(USHORT Value)
{
- EmulatorContext.GeneralRegs[EMULATOR_REG_SI].LowWord = Value;
+ EmulatorContext.GeneralRegs[FAST486_REG_ESI].LowWord = Value;
}
ULONG
-CDECL
+WINAPI
getEDI(VOID)
{
- return EmulatorContext.GeneralRegs[EMULATOR_REG_DI].Long;
+ return EmulatorContext.GeneralRegs[FAST486_REG_EDI].Long;
}
VOID
-CDECL
+WINAPI
setEDI(ULONG Value)
{
- EmulatorContext.GeneralRegs[EMULATOR_REG_DI].Long = Value;
+ EmulatorContext.GeneralRegs[FAST486_REG_EDI].Long = Value;
}
USHORT
-CDECL
+WINAPI
getDI(VOID)
{
- return EmulatorContext.GeneralRegs[EMULATOR_REG_DI].LowWord;
+ return EmulatorContext.GeneralRegs[FAST486_REG_EDI].LowWord;
}
VOID
-CDECL
+WINAPI
setDI(USHORT Value)
{
- EmulatorContext.GeneralRegs[EMULATOR_REG_DI].LowWord = Value;
+ EmulatorContext.GeneralRegs[FAST486_REG_EDI].LowWord = Value;
}
ULONG
-CDECL
+WINAPI
getEIP(VOID)
{
- return EmulatorGetProgramCounter();
+ return EmulatorContext.InstPtr.Long;
}
VOID
-CDECL
+WINAPI
setEIP(ULONG Value)
{
- EmulatorExecute(EmulatorGetRegister(EMULATOR_REG_CS), Value);
+ EmulatorExecute(getCS(), Value);
}
USHORT
-CDECL
+WINAPI
getIP(VOID)
{
- return LOWORD(EmulatorGetProgramCounter());
+ return EmulatorContext.InstPtr.LowWord;
}
VOID
-CDECL
+WINAPI
setIP(USHORT Value)
{
- EmulatorExecute(EmulatorGetRegister(EMULATOR_REG_CS), Value);
+ EmulatorExecute(getCS(), Value);
}
USHORT
-CDECL
+WINAPI
getCS(VOID)
{
- return EmulatorGetRegister(EMULATOR_REG_CS);
+ return EmulatorContext.SegmentRegs[FAST486_REG_CS].Selector;
}
VOID
-CDECL
+WINAPI
setCS(USHORT Value)
{
- EmulatorSetRegister(EMULATOR_REG_CS, Value);
+ Fast486SetSegment(&EmulatorContext, FAST486_REG_CS, Value);
}
USHORT
-CDECL
+WINAPI
getSS(VOID)
{
- return EmulatorGetRegister(EMULATOR_REG_SS);
+ return EmulatorContext.SegmentRegs[FAST486_REG_SS].Selector;
}
VOID
-CDECL
+WINAPI
setSS(USHORT Value)
{
- EmulatorSetRegister(EMULATOR_REG_SS, Value);
+ Fast486SetSegment(&EmulatorContext, FAST486_REG_SS, Value);
}
USHORT
-CDECL
+WINAPI
getDS(VOID)
{
- return EmulatorGetRegister(EMULATOR_REG_DS);
+ return EmulatorContext.SegmentRegs[FAST486_REG_DS].Selector;
}
VOID
-CDECL
+WINAPI
setDS(USHORT Value)
{
- EmulatorSetRegister(EMULATOR_REG_DS, Value);
+ Fast486SetSegment(&EmulatorContext, FAST486_REG_DS, Value);
}
USHORT
-CDECL
+WINAPI
getES(VOID)
{
- return EmulatorGetRegister(EMULATOR_REG_ES);
+ return EmulatorContext.SegmentRegs[FAST486_REG_ES].Selector;
}
VOID
-CDECL
+WINAPI
setES(USHORT Value)
{
- EmulatorSetRegister(EMULATOR_REG_ES, Value);
+ Fast486SetSegment(&EmulatorContext, FAST486_REG_ES, Value);
}
USHORT
-CDECL
+WINAPI
getFS(VOID)
{
- return EmulatorGetRegister(EMULATOR_REG_FS);
+ return EmulatorContext.SegmentRegs[FAST486_REG_FS].Selector;
}
VOID
-CDECL
+WINAPI
setFS(USHORT Value)
{
- EmulatorSetRegister(EMULATOR_REG_FS, Value);
+ Fast486SetSegment(&EmulatorContext, FAST486_REG_FS, Value);
}
USHORT
-CDECL
+WINAPI
getGS(VOID)
{
- return EmulatorGetRegister(EMULATOR_REG_GS);
+ return EmulatorContext.SegmentRegs[FAST486_REG_GS].Selector;
}
VOID
-CDECL
+WINAPI
setGS(USHORT Value)
{
- EmulatorSetRegister(EMULATOR_REG_GS, Value);
+ Fast486SetSegment(&EmulatorContext, FAST486_REG_GS, Value);
}
ULONG
-CDECL
+WINAPI
getCF(VOID)
{
return EmulatorGetFlag(EMULATOR_FLAG_CF);
}
VOID
-CDECL
+WINAPI
setCF(ULONG Flag)
{
if (Flag & 1)
}
ULONG
-CDECL
+WINAPI
getPF(VOID)
{
return EmulatorGetFlag(EMULATOR_FLAG_PF);
}
VOID
-CDECL
+WINAPI
setPF(ULONG Flag)
{
if (Flag & 1)
}
ULONG
-CDECL
+WINAPI
getAF(VOID)
{
return EmulatorGetFlag(EMULATOR_FLAG_AF);
}
VOID
-CDECL
+WINAPI
setAF(ULONG Flag)
{
if (Flag & 1)
}
ULONG
-CDECL
+WINAPI
getZF(VOID)
{
return EmulatorGetFlag(EMULATOR_FLAG_ZF);
}
VOID
-CDECL
+WINAPI
setZF(ULONG Flag)
{
if (Flag & 1)
}
ULONG
-CDECL
+WINAPI
getSF(VOID)
{
return EmulatorGetFlag(EMULATOR_FLAG_SF);
}
VOID
-CDECL
+WINAPI
setSF(ULONG Flag)
{
if (Flag & 1)
}
ULONG
-CDECL
+WINAPI
getIF(VOID)
{
return EmulatorGetFlag(EMULATOR_FLAG_IF);
}
VOID
-CDECL
+WINAPI
setIF(ULONG Flag)
{
if (Flag & 1)
}
ULONG
-CDECL
+WINAPI
getDF(VOID)
{
return EmulatorGetFlag(EMULATOR_FLAG_DF);
}
VOID
-CDECL
+WINAPI
setDF(ULONG Flag)
{
if (Flag & 1)
}
ULONG
-CDECL
+WINAPI
getOF(VOID)
{
return EmulatorGetFlag(EMULATOR_FLAG_OF);
}
VOID
-CDECL
+WINAPI
setOF(ULONG Flag)
{
if (Flag & 1)
+ULONG
+WINAPI
+getEFLAGS(VOID)
+{
+ return EmulatorContext.Flags.Long;
+}
+
+VOID
+WINAPI
+setEFLAGS(ULONG Flags)
+{
+ EmulatorContext.Flags.Long = Flags;
+}
+
+
+
USHORT
-CDECL
+WINAPI
getMSW(VOID)
{
- return 0; // UNIMPLEMENTED
+ return LOWORD(EmulatorContext.ControlRegisters[FAST486_REG_CR0]);
}
VOID
-CDECL
+WINAPI
setMSW(USHORT Value)
{
- // UNIMPLEMENTED
+ /* Set the lower 16 bits (Machine Status Word) of CR0 */
+ EmulatorContext.ControlRegisters[FAST486_REG_CR0] &= 0xFFFF0000;
+ EmulatorContext.ControlRegisters[FAST486_REG_CR0] |= Value & 0xFFFF;
}
/* EOF */