[NTVDM]
[reactos.git] / subsystems / ntvdm / registers.c
index 3eeb114..d3d5ce1 100644 (file)
 
 /* 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)
 {
-#ifndef NEW_EMULATOR
-    return EmulatorContext.state->general_reg[EMULATOR_REG_AX].val;
-#else
-    return EmulatorContext.GeneralRegs[EMULATOR_REG_AX].Long;
-#endif
+    return EmulatorContext.GeneralRegs[FAST486_REG_EAX].Long;
 }
 
 VOID
-CDECL
+WINAPI
 setEAX(ULONG Value)
 {
-#ifndef NEW_EMULATOR
-    EmulatorContext.state->general_reg[EMULATOR_REG_AX].val = Value;
-#else
-    EmulatorContext.GeneralRegs[EMULATOR_REG_AX].Long = Value;
-#endif
+    EmulatorContext.GeneralRegs[FAST486_REG_EAX].Long = Value;
 }
 
 USHORT
-CDECL
+WINAPI
 getAX(VOID)
 {
-#ifndef NEW_EMULATOR
-    return EmulatorContext.state->general_reg[EMULATOR_REG_AX].w.lo;
-#else
-    return EmulatorContext.GeneralRegs[EMULATOR_REG_AX].LowWord;
-#endif
+    return EmulatorContext.GeneralRegs[FAST486_REG_EAX].LowWord;
 }
 
 VOID
-CDECL
+WINAPI
 setAX(USHORT Value)
 {
-#ifndef NEW_EMULATOR
-    EmulatorContext.state->general_reg[EMULATOR_REG_AX].w.lo = Value;
-#else
-    EmulatorContext.GeneralRegs[EMULATOR_REG_AX].LowWord = Value;
-#endif
+    EmulatorContext.GeneralRegs[FAST486_REG_EAX].LowWord = Value;
 }
 
 UCHAR
-CDECL
+WINAPI
 getAH(VOID)
 {
-#ifndef NEW_EMULATOR
-    return EmulatorContext.state->general_reg[EMULATOR_REG_AX].b.hi;
-#else
-    return EmulatorContext.GeneralRegs[EMULATOR_REG_AX].HighByte;
-#endif
+    return EmulatorContext.GeneralRegs[FAST486_REG_EAX].HighByte;
 }
 
 VOID
-CDECL
+WINAPI
 setAH(UCHAR Value)
 {
-#ifndef NEW_EMULATOR
-    EmulatorContext.state->general_reg[EMULATOR_REG_AX].b.hi = Value;
-#else
-    EmulatorContext.GeneralRegs[EMULATOR_REG_AX].HighByte = Value;
-#endif
+    EmulatorContext.GeneralRegs[FAST486_REG_EAX].HighByte = Value;
 }
 
 UCHAR
-CDECL
+WINAPI
 getAL(VOID)
 {
-#ifndef NEW_EMULATOR
-    return EmulatorContext.state->general_reg[EMULATOR_REG_AX].b.lo;
-#else
-    return EmulatorContext.GeneralRegs[EMULATOR_REG_AX].LowByte;
-#endif
+    return EmulatorContext.GeneralRegs[FAST486_REG_EAX].LowByte;
 }
 
 VOID
-CDECL
+WINAPI
 setAL(UCHAR Value)
 {
-#ifndef NEW_EMULATOR
-    EmulatorContext.state->general_reg[EMULATOR_REG_AX].b.lo = Value;
-#else
-    EmulatorContext.GeneralRegs[EMULATOR_REG_AX].LowByte = Value;
-#endif
+    EmulatorContext.GeneralRegs[FAST486_REG_EAX].LowByte = Value;
 }
 
 ULONG
-CDECL
+WINAPI
 getEBX(VOID)
 {
-#ifndef NEW_EMULATOR
-    return EmulatorContext.state->general_reg[EMULATOR_REG_BX].val;
-#else
-    return EmulatorContext.GeneralRegs[EMULATOR_REG_BX].Long;
-#endif
+    return EmulatorContext.GeneralRegs[FAST486_REG_EBX].Long;
 }
 
 VOID
-CDECL
+WINAPI
 setEBX(ULONG Value)
 {
-#ifndef NEW_EMULATOR
-    EmulatorContext.state->general_reg[EMULATOR_REG_BX].val = Value;
-#else
-    EmulatorContext.GeneralRegs[EMULATOR_REG_BX].Long = Value;
-#endif
+    EmulatorContext.GeneralRegs[FAST486_REG_EBX].Long = Value;
 }
 
 USHORT
-CDECL
+WINAPI
 getBX(VOID)
 {
-#ifndef NEW_EMULATOR
-    return EmulatorContext.state->general_reg[EMULATOR_REG_BX].w.lo;
-#else
-    return EmulatorContext.GeneralRegs[EMULATOR_REG_BX].LowWord;
-#endif
+    return EmulatorContext.GeneralRegs[FAST486_REG_EBX].LowWord;
 }
 
 VOID
-CDECL
+WINAPI
 setBX(USHORT Value)
 {
-#ifndef NEW_EMULATOR
-    EmulatorContext.state->general_reg[EMULATOR_REG_BX].w.lo = Value;
-#else
-    EmulatorContext.GeneralRegs[EMULATOR_REG_BX].LowWord = Value;
-#endif
+    EmulatorContext.GeneralRegs[FAST486_REG_EBX].LowWord = Value;
 }
 
 UCHAR
-CDECL
+WINAPI
 getBH(VOID)
 {
-#ifndef NEW_EMULATOR
-    return EmulatorContext.state->general_reg[EMULATOR_REG_BX].b.hi;
-#else
-    return EmulatorContext.GeneralRegs[EMULATOR_REG_BX].HighByte;
-#endif
+    return EmulatorContext.GeneralRegs[FAST486_REG_EBX].HighByte;
 }
 
 VOID
-CDECL
+WINAPI
 setBH(UCHAR Value)
 {
-#ifndef NEW_EMULATOR
-    EmulatorContext.state->general_reg[EMULATOR_REG_BX].b.hi = Value;
-#else
-    EmulatorContext.GeneralRegs[EMULATOR_REG_BX].HighByte = Value;
-#endif
+    EmulatorContext.GeneralRegs[FAST486_REG_EBX].HighByte = Value;
 }
 
 UCHAR
-CDECL
+WINAPI
 getBL(VOID)
 {
-#ifndef NEW_EMULATOR
-    return EmulatorContext.state->general_reg[EMULATOR_REG_BX].b.lo;
-#else
-    return EmulatorContext.GeneralRegs[EMULATOR_REG_BX].LowByte;
-#endif
+    return EmulatorContext.GeneralRegs[FAST486_REG_EBX].LowByte;
 }
 
 VOID
-CDECL
+WINAPI
 setBL(UCHAR Value)
 {
-#ifndef NEW_EMULATOR
-    EmulatorContext.state->general_reg[EMULATOR_REG_BX].b.lo = Value;
-#else
-    EmulatorContext.GeneralRegs[EMULATOR_REG_BX].LowByte = Value;
-#endif
+    EmulatorContext.GeneralRegs[FAST486_REG_EBX].LowByte = Value;
 }
 
 
 
 ULONG
-CDECL
+WINAPI
 getECX(VOID)
 {
-#ifndef NEW_EMULATOR
-    return EmulatorContext.state->general_reg[EMULATOR_REG_CX].val;
-#else
-    return EmulatorContext.GeneralRegs[EMULATOR_REG_CX].Long;
-#endif
+    return EmulatorContext.GeneralRegs[FAST486_REG_ECX].Long;
 }
 
 VOID
-CDECL
+WINAPI
 setECX(ULONG Value)
 {
-#ifndef NEW_EMULATOR
-    EmulatorContext.state->general_reg[EMULATOR_REG_CX].val = Value;
-#else
-    EmulatorContext.GeneralRegs[EMULATOR_REG_CX].Long = Value;
-#endif
+    EmulatorContext.GeneralRegs[FAST486_REG_ECX].Long = Value;
 }
 
 USHORT
-CDECL
+WINAPI
 getCX(VOID)
 {
-#ifndef NEW_EMULATOR
-    return EmulatorContext.state->general_reg[EMULATOR_REG_CX].w.lo;
-#else
-    return EmulatorContext.GeneralRegs[EMULATOR_REG_CX].LowWord;
-#endif
+    return EmulatorContext.GeneralRegs[FAST486_REG_ECX].LowWord;
 }
 
 VOID
-CDECL
+WINAPI
 setCX(USHORT Value)
 {
-#ifndef NEW_EMULATOR
-    EmulatorContext.state->general_reg[EMULATOR_REG_CX].w.lo = Value;
-#else
-    EmulatorContext.GeneralRegs[EMULATOR_REG_CX].LowWord = Value;
-#endif
+    EmulatorContext.GeneralRegs[FAST486_REG_ECX].LowWord = Value;
 }
 
 UCHAR
-CDECL
+WINAPI
 getCH(VOID)
 {
-#ifndef NEW_EMULATOR
-    return EmulatorContext.state->general_reg[EMULATOR_REG_CX].b.hi;
-#else
-    return EmulatorContext.GeneralRegs[EMULATOR_REG_CX].HighByte;
-#endif
+    return EmulatorContext.GeneralRegs[FAST486_REG_ECX].HighByte;
 }
 
 VOID
-CDECL
+WINAPI
 setCH(UCHAR Value)
 {
-#ifndef NEW_EMULATOR
-    EmulatorContext.state->general_reg[EMULATOR_REG_CX].b.hi = Value;
-#else
-    EmulatorContext.GeneralRegs[EMULATOR_REG_CX].HighByte = Value;
-#endif
+    EmulatorContext.GeneralRegs[FAST486_REG_ECX].HighByte = Value;
 }
 
 UCHAR
-CDECL
+WINAPI
 getCL(VOID)
 {
-#ifndef NEW_EMULATOR
-    return EmulatorContext.state->general_reg[EMULATOR_REG_CX].b.lo;
-#else
-    return EmulatorContext.GeneralRegs[EMULATOR_REG_CX].LowByte;
-#endif
+    return EmulatorContext.GeneralRegs[FAST486_REG_ECX].LowByte;
 }
 
 VOID
-CDECL
+WINAPI
 setCL(UCHAR Value)
 {
-#ifndef NEW_EMULATOR
-    EmulatorContext.state->general_reg[EMULATOR_REG_CX].b.lo = Value;
-#else
-    EmulatorContext.GeneralRegs[EMULATOR_REG_CX].LowByte = Value;
-#endif
+    EmulatorContext.GeneralRegs[FAST486_REG_ECX].LowByte = Value;
 }
 
 
 
 ULONG
-CDECL
+WINAPI
 getEDX(VOID)
 {
-#ifndef NEW_EMULATOR
-    return EmulatorContext.state->general_reg[EMULATOR_REG_DX].val;
-#else
-    return EmulatorContext.GeneralRegs[EMULATOR_REG_DX].Long;
-#endif
+    return EmulatorContext.GeneralRegs[FAST486_REG_EDX].Long;
 }
 
 VOID
-CDECL
+WINAPI
 setEDX(ULONG Value)
 {
-#ifndef NEW_EMULATOR
-    EmulatorContext.state->general_reg[EMULATOR_REG_DX].val = Value;
-#else
-    EmulatorContext.GeneralRegs[EMULATOR_REG_DX].Long = Value;
-#endif
+    EmulatorContext.GeneralRegs[FAST486_REG_EDX].Long = Value;
 }
 
 USHORT
-CDECL
+WINAPI
 getDX(VOID)
 {
-#ifndef NEW_EMULATOR
-    return EmulatorContext.state->general_reg[EMULATOR_REG_DX].w.lo;
-#else
-    return EmulatorContext.GeneralRegs[EMULATOR_REG_DX].LowWord;
-#endif
+    return EmulatorContext.GeneralRegs[FAST486_REG_EDX].LowWord;
 }
 
 VOID
-CDECL
+WINAPI
 setDX(USHORT Value)
 {
-#ifndef NEW_EMULATOR
-    EmulatorContext.state->general_reg[EMULATOR_REG_DX].w.lo = Value;
-#else
-    EmulatorContext.GeneralRegs[EMULATOR_REG_DX].LowWord = Value;
-#endif
+    EmulatorContext.GeneralRegs[FAST486_REG_EDX].LowWord = Value;
 }
 
 UCHAR
-CDECL
+WINAPI
 getDH(VOID)
 {
-#ifndef NEW_EMULATOR
-    return EmulatorContext.state->general_reg[EMULATOR_REG_DX].b.hi;
-#else
-    return EmulatorContext.GeneralRegs[EMULATOR_REG_DX].HighByte;
-#endif
+    return EmulatorContext.GeneralRegs[FAST486_REG_EDX].HighByte;
 }
 
 VOID
-CDECL
+WINAPI
 setDH(UCHAR Value)
 {
-#ifndef NEW_EMULATOR
-    EmulatorContext.state->general_reg[EMULATOR_REG_DX].b.hi = Value;
-#else
-    EmulatorContext.GeneralRegs[EMULATOR_REG_DX].HighByte = Value;
-#endif
+    EmulatorContext.GeneralRegs[FAST486_REG_EDX].HighByte = Value;
 }
 
 UCHAR
-CDECL
+WINAPI
 getDL(VOID)
 {
-#ifndef NEW_EMULATOR
-    return EmulatorContext.state->general_reg[EMULATOR_REG_DX].b.lo;
-#else
-    return EmulatorContext.GeneralRegs[EMULATOR_REG_DX].LowByte;
-#endif
+    return EmulatorContext.GeneralRegs[FAST486_REG_EDX].LowByte;
 }
 
 VOID
-CDECL
+WINAPI
 setDL(UCHAR Value)
 {
-#ifndef NEW_EMULATOR
-    EmulatorContext.state->general_reg[EMULATOR_REG_DX].b.lo = Value;
-#else
-    EmulatorContext.GeneralRegs[EMULATOR_REG_DX].LowByte = Value;
-#endif
+    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)
 {
-#ifndef NEW_EMULATOR
-    return EmulatorContext.state->general_reg[EMULATOR_REG_BP].val;
-#else
-    return EmulatorContext.GeneralRegs[EMULATOR_REG_BP].Long;
-#endif
+    return EmulatorContext.GeneralRegs[FAST486_REG_EBP].Long;
 }
 
 VOID
-CDECL
+WINAPI
 setEBP(ULONG Value)
 {
-#ifndef NEW_EMULATOR
-    EmulatorContext.state->general_reg[EMULATOR_REG_BP].val = Value;
-#else
-    EmulatorContext.GeneralRegs[EMULATOR_REG_BP].Long = Value;
-#endif
+    EmulatorContext.GeneralRegs[FAST486_REG_EBP].Long = Value;
 }
 
 USHORT
-CDECL
+WINAPI
 getBP(VOID)
 {
-#ifndef NEW_EMULATOR
-    return EmulatorContext.state->general_reg[EMULATOR_REG_BP].w.lo;
-#else
-    return EmulatorContext.GeneralRegs[EMULATOR_REG_BP].LowWord;
-#endif
+    return EmulatorContext.GeneralRegs[FAST486_REG_EBP].LowWord;
 }
 
 VOID
-CDECL
+WINAPI
 setBP(USHORT Value)
 {
-#ifndef NEW_EMULATOR
-    EmulatorContext.state->general_reg[EMULATOR_REG_BP].w.lo = Value;
-#else
-    EmulatorContext.GeneralRegs[EMULATOR_REG_BP].LowWord = Value;
-#endif
+    EmulatorContext.GeneralRegs[FAST486_REG_EBP].LowWord = Value;
 }
 
 
 
 ULONG
-CDECL
+WINAPI
 getESI(VOID)
 {
-#ifndef NEW_EMULATOR
-    return EmulatorContext.state->general_reg[EMULATOR_REG_SI].val;
-#else
-    return EmulatorContext.GeneralRegs[EMULATOR_REG_SI].Long;
-#endif
+    return EmulatorContext.GeneralRegs[FAST486_REG_ESI].Long;
 }
 
 VOID
-CDECL
+WINAPI
 setESI(ULONG Value)
 {
-#ifndef NEW_EMULATOR
-    EmulatorContext.state->general_reg[EMULATOR_REG_SI].val = Value;
-#else
-    EmulatorContext.GeneralRegs[EMULATOR_REG_SI].Long = Value;
-#endif
+    EmulatorContext.GeneralRegs[FAST486_REG_ESI].Long = Value;
 }
 
 USHORT
-CDECL
+WINAPI
 getSI(VOID)
 {
-#ifndef NEW_EMULATOR
-    return EmulatorContext.state->general_reg[EMULATOR_REG_SI].w.lo;
-#else
-    return EmulatorContext.GeneralRegs[EMULATOR_REG_SI].LowWord;
-#endif
+    return EmulatorContext.GeneralRegs[FAST486_REG_ESI].LowWord;
 }
 
 VOID
-CDECL
+WINAPI
 setSI(USHORT Value)
 {
-#ifndef NEW_EMULATOR
-    EmulatorContext.state->general_reg[EMULATOR_REG_SI].w.lo = Value;
-#else
-    EmulatorContext.GeneralRegs[EMULATOR_REG_SI].LowWord = Value;
-#endif
+    EmulatorContext.GeneralRegs[FAST486_REG_ESI].LowWord = Value;
 }
 
 
 
 ULONG
-CDECL
+WINAPI
 getEDI(VOID)
 {
-#ifndef NEW_EMULATOR
-    return EmulatorContext.state->general_reg[EMULATOR_REG_DI].val;
-#else
-    return EmulatorContext.GeneralRegs[EMULATOR_REG_DI].Long;
-#endif
+    return EmulatorContext.GeneralRegs[FAST486_REG_EDI].Long;
 }
 
 VOID
-CDECL
+WINAPI
 setEDI(ULONG Value)
 {
-#ifndef NEW_EMULATOR
-    EmulatorContext.state->general_reg[EMULATOR_REG_DI].val = Value;
-#else
-    EmulatorContext.GeneralRegs[EMULATOR_REG_DI].Long = Value;
-#endif
+    EmulatorContext.GeneralRegs[FAST486_REG_EDI].Long = Value;
 }
 
 USHORT
-CDECL
+WINAPI
 getDI(VOID)
 {
-#ifndef NEW_EMULATOR
-    return EmulatorContext.state->general_reg[EMULATOR_REG_DI].w.lo;
-#else
-    return EmulatorContext.GeneralRegs[EMULATOR_REG_DI].LowWord;
-#endif
+    return EmulatorContext.GeneralRegs[FAST486_REG_EDI].LowWord;
 }
 
 VOID
-CDECL
+WINAPI
 setDI(USHORT Value)
 {
-#ifndef NEW_EMULATOR
-    EmulatorContext.state->general_reg[EMULATOR_REG_DI].w.lo = Value;
-#else
-    EmulatorContext.GeneralRegs[EMULATOR_REG_DI].LowWord = Value;
-#endif
+    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)
@@ -674,14 +528,14 @@ setCF(ULONG Flag)
 }
 
 ULONG
-CDECL
+WINAPI
 getPF(VOID)
 {
     return EmulatorGetFlag(EMULATOR_FLAG_PF);
 }
 
 VOID
-CDECL
+WINAPI
 setPF(ULONG Flag)
 {
     if (Flag & 1)
@@ -691,14 +545,14 @@ setPF(ULONG Flag)
 }
 
 ULONG
-CDECL
+WINAPI
 getAF(VOID)
 {
     return EmulatorGetFlag(EMULATOR_FLAG_AF);
 }
 
 VOID
-CDECL
+WINAPI
 setAF(ULONG Flag)
 {
     if (Flag & 1)
@@ -708,14 +562,14 @@ setAF(ULONG Flag)
 }
 
 ULONG
-CDECL
+WINAPI
 getZF(VOID)
 {
     return EmulatorGetFlag(EMULATOR_FLAG_ZF);
 }
 
 VOID
-CDECL
+WINAPI
 setZF(ULONG Flag)
 {
     if (Flag & 1)
@@ -725,14 +579,14 @@ setZF(ULONG Flag)
 }
 
 ULONG
-CDECL
+WINAPI
 getSF(VOID)
 {
     return EmulatorGetFlag(EMULATOR_FLAG_SF);
 }
 
 VOID
-CDECL
+WINAPI
 setSF(ULONG Flag)
 {
     if (Flag & 1)
@@ -742,14 +596,14 @@ setSF(ULONG Flag)
 }
 
 ULONG
-CDECL
+WINAPI
 getIF(VOID)
 {
     return EmulatorGetFlag(EMULATOR_FLAG_IF);
 }
 
 VOID
-CDECL
+WINAPI
 setIF(ULONG Flag)
 {
     if (Flag & 1)
@@ -759,14 +613,14 @@ setIF(ULONG Flag)
 }
 
 ULONG
-CDECL
+WINAPI
 getDF(VOID)
 {
     return EmulatorGetFlag(EMULATOR_FLAG_DF);
 }
 
 VOID
-CDECL
+WINAPI
 setDF(ULONG Flag)
 {
     if (Flag & 1)
@@ -776,14 +630,14 @@ setDF(ULONG Flag)
 }
 
 ULONG
-CDECL
+WINAPI
 getOF(VOID)
 {
     return EmulatorGetFlag(EMULATOR_FLAG_OF);
 }
 
 VOID
-CDECL
+WINAPI
 setOF(ULONG Flag)
 {
     if (Flag & 1)
@@ -794,18 +648,36 @@ setOF(ULONG Flag)
 
 
 
+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 */