[NTVDM]
authorAleksandar Andrejevic <aandrejevic@reactos.org>
Fri, 16 Aug 2013 19:33:04 +0000 (19:33 +0000)
committerAleksandar Andrejevic <aandrejevic@reactos.org>
Fri, 16 Aug 2013 19:33:04 +0000 (19:33 +0000)
Remove the "new emulator" started in emulator.c in favor of Soft386.

svn path=/branches/ntvdm/; revision=59753

subsystems/ntvdm/emulator.c
subsystems/ntvdm/emulator.h
subsystems/ntvdm/registers.c

index 18dc957..33441a3 100644 (file)
@@ -24,7 +24,7 @@
 softx86_ctx EmulatorContext;
 softx87_ctx FpuEmulatorContext;
 #else
-EMULATOR_CONTEXT EmulatorContext;
+SOFT386_STATE EmulatorContext;
 #endif
 
 static BOOLEAN A20Line = FALSE;
@@ -241,8 +241,8 @@ static VOID EmulatorBop(WORD Code)
     StackSegment = EmulatorContext.state->segment_reg[SX86_SREG_SS].val;
     StackPointer = EmulatorContext.state->general_reg[SX86_REG_SP].val;
 #else
-    StackSegment = EmulatorContext.Registers[EMULATOR_REG_SS].LowWord;
-    StackPointer = EmulatorContext.Registers[EMULATOR_REG_SP].LowWord;
+    StackSegment = EmulatorContext.SegmentRegs[SOFT386_REG_SS].LowWord;
+    StackPointer = EmulatorContext.SegmentRegs[SOFT386_REG_SP].LowWord;
 #endif
 
     /* Get the stack */
@@ -475,7 +475,14 @@ ULONG EmulatorGetRegister(ULONG Register)
         return EmulatorContext.state->segment_reg[Register - EMULATOR_REG_ES].val;
     }
 #else
-    return EmulatorContext.Registers[Register].Long;
+    if (Register < EMULATOR_REG_ES)
+    {
+        return EmulatorContext.GeneralRegs[Register].Long;
+    }
+    else
+    {
+        return EmulatorContext.SegmentRegs[Register - EMULATOR_REG_ES].Selector;
+    }
 #endif
 }
 
@@ -484,7 +491,7 @@ ULONG EmulatorGetProgramCounter(VOID)
 #ifndef NEW_EMULATOR
     return EmulatorContext.state->reg_ip;
 #else
-    return EmulatorContext.InstructionPointer.Long;
+    return EmulatorContext.InstPtr.Long;
 #endif
 }
 
index 8dd85f7..427c520 100644 (file)
 #include "ntvdm.h"
 
 #ifndef NEW_EMULATOR
-#include <softx86/softx86.h>
-#include <softx86/softx87.h>
+#include <softx86.h>
+#include <softx87.h>
+#else
+#include <soft386.h>
 #endif
 
 /* DEFINES ********************************************************************/
 #define EMULATOR_FLAG_VIP (1 << 20)
 #define EMULATOR_FLAG_ID (1 << 21)
 
-/* CR0 */
-#define EMULATOR_CR0_PE (1 << 0)
-#define EMULATOR_CR0_MP (1 << 1)
-#define EMULATOR_CR0_EM (1 << 2)
-#define EMULATOR_CR0_TS (1 << 3)
-#define EMULATOR_CR0_ET (1 << 4)
-#define EMULATOR_CR0_NE (1 << 5)
-#define EMULATOR_CR0_WP (1 << 16)
-#define EMULATOR_CR0_AM (1 << 18)
-#define EMULATOR_CR0_NW (1 << 29)
-#define EMULATOR_CR0_CD (1 << 30)
-#define EMULATOR_CR0_PG (1 << 31)
-
-/* GDT Access byte */
-#define GDT_SEG_ACCESSED (1 << 0)
-#define GDT_DATA_WRITEABLE (1 << 1)
-#define GDT_CODE_READABLE (1 << 1)
-#define GDT_CONFORMING (1 << 2)
-#define GDT_DIRECTION (1 << 2)
-#define GDT_CODE_SEGMENT (1 << 3)
-#define GDT_PRESENT (1 << 7)
-
-/* GDT flags */
-#define GDT_32BIT_SEGMENT (1 << 2)
-#define GDT_PAGE_GRANULARITY (1 << 3)
-
 /* Common definitions */
-#define EMULATOR_NUM_GENERAL_REGS 8
-#define EMULATOR_NUM_SEGMENT_REGS 6
-#define EMULATOR_NUM_CONTROL_REGS 8
-#define EMULATOR_NUM_DEBUG_REGS 8
-#define MAX_GDT_ENTRIES 8192
 #define EMULATOR_BOP 0xC4C4
 #define EMULATOR_INT_BOP 0xBEEF
 #define STACK_INT_NUM 0
@@ -114,65 +85,11 @@ enum
     EMULATOR_REG_GS
 };
 
-typedef union
-{
-    struct
-    {
-        BYTE LowByte;
-        BYTE HighByte;
-    };
-    WORD LowWord;
-    DWORD Long;
-} EMULATOR_REGISTER, *PEMULATOR_REGISTER;
-
-typedef struct
-{
-    ULONG Limit : 16;
-    ULONG Base : 24;
-    ULONG AccessByte : 8;
-    ULONG LimitHigh : 4;
-    ULONG Flags : 4;
-    ULONG BaseHigh : 8;
-} EMULATOR_GDT_ENTRY;
-
-typedef struct
-{
-    ULONG Offset : 16;
-    ULONG Selector : 16;
-    ULONG Zero : 8;
-    ULONG TypeAndAttributes : 8;
-    ULONG OffsetHigh : 16;
-} EMULATOR_IDT_ENTRY;
-
-typedef struct
-{
-    WORD Size;
-    DWORD Address;
-} EMULATOR_TABLE_REGISTER;
-
-typedef struct
-{
-    EMULATOR_REGISTER Registers[EMULATOR_NUM_GENERAL_REGS
-                                + EMULATOR_NUM_SEGMENT_REGS];
-    EMULATOR_REGISTER Flags;
-    EMULATOR_REGISTER InstructionPointer;
-    EMULATOR_REGISTER ControlRegisters[EMULATOR_NUM_CONTROL_REGS];
-    EMULATOR_REGISTER DebugRegisters[EMULATOR_NUM_DEBUG_REGS];
-    ULONGLONG TimeStampCounter;
-    BOOLEAN OperandSizeOverload;
-    BOOLEAN AddressSizeOverload;
-    EMULATOR_TABLE_REGISTER Gdtr, Idtr;
-    EMULATOR_GDT_ENTRY CachedDescriptors[EMULATOR_NUM_SEGMENT_REGS];
-    UINT ExceptionCount;
-} EMULATOR_CONTEXT, *PEMULATOR_CONTEXT;
-
-typedef VOID (*EMULATOR_OPCODE_HANDLER)(PEMULATOR_CONTEXT Context, BYTE Opcode);
-
 #ifndef NEW_EMULATOR
 extern softx86_ctx EmulatorContext;
 extern softx87_ctx FpuEmulatorContext;
 #else
-extern EMULATOR_CONTEXT EmulatorContext;
+extern SOFT386_STATE EmulatorContext;
 #endif
 
 /* FUNCTIONS ******************************************************************/
index c56a683..3eeb114 100644 (file)
@@ -21,7 +21,7 @@ getEAX(VOID)
 #ifndef NEW_EMULATOR
     return EmulatorContext.state->general_reg[EMULATOR_REG_AX].val;
 #else
-    return EmulatorContext.Registers[EMULATOR_REG_AX].Long;
+    return EmulatorContext.GeneralRegs[EMULATOR_REG_AX].Long;
 #endif
 }
 
@@ -32,7 +32,7 @@ setEAX(ULONG Value)
 #ifndef NEW_EMULATOR
     EmulatorContext.state->general_reg[EMULATOR_REG_AX].val = Value;
 #else
-    EmulatorContext.Registers[EMULATOR_REG_AX].Long = Value;
+    EmulatorContext.GeneralRegs[EMULATOR_REG_AX].Long = Value;
 #endif
 }
 
@@ -43,7 +43,7 @@ getAX(VOID)
 #ifndef NEW_EMULATOR
     return EmulatorContext.state->general_reg[EMULATOR_REG_AX].w.lo;
 #else
-    return EmulatorContext.Registers[EMULATOR_REG_AX].LowWord;
+    return EmulatorContext.GeneralRegs[EMULATOR_REG_AX].LowWord;
 #endif
 }
 
@@ -54,7 +54,7 @@ setAX(USHORT Value)
 #ifndef NEW_EMULATOR
     EmulatorContext.state->general_reg[EMULATOR_REG_AX].w.lo = Value;
 #else
-    EmulatorContext.Registers[EMULATOR_REG_AX].LowWord = Value;
+    EmulatorContext.GeneralRegs[EMULATOR_REG_AX].LowWord = Value;
 #endif
 }
 
@@ -65,7 +65,7 @@ getAH(VOID)
 #ifndef NEW_EMULATOR
     return EmulatorContext.state->general_reg[EMULATOR_REG_AX].b.hi;
 #else
-    return EmulatorContext.Registers[EMULATOR_REG_AX].HighByte;
+    return EmulatorContext.GeneralRegs[EMULATOR_REG_AX].HighByte;
 #endif
 }
 
@@ -76,7 +76,7 @@ setAH(UCHAR Value)
 #ifndef NEW_EMULATOR
     EmulatorContext.state->general_reg[EMULATOR_REG_AX].b.hi = Value;
 #else
-    EmulatorContext.Registers[EMULATOR_REG_AX].HighByte = Value;
+    EmulatorContext.GeneralRegs[EMULATOR_REG_AX].HighByte = Value;
 #endif
 }
 
@@ -87,7 +87,7 @@ getAL(VOID)
 #ifndef NEW_EMULATOR
     return EmulatorContext.state->general_reg[EMULATOR_REG_AX].b.lo;
 #else
-    return EmulatorContext.Registers[EMULATOR_REG_AX].LowByte;
+    return EmulatorContext.GeneralRegs[EMULATOR_REG_AX].LowByte;
 #endif
 }
 
@@ -98,7 +98,7 @@ setAL(UCHAR Value)
 #ifndef NEW_EMULATOR
     EmulatorContext.state->general_reg[EMULATOR_REG_AX].b.lo = Value;
 #else
-    EmulatorContext.Registers[EMULATOR_REG_AX].LowByte = Value;
+    EmulatorContext.GeneralRegs[EMULATOR_REG_AX].LowByte = Value;
 #endif
 }
 
@@ -109,7 +109,7 @@ getEBX(VOID)
 #ifndef NEW_EMULATOR
     return EmulatorContext.state->general_reg[EMULATOR_REG_BX].val;
 #else
-    return EmulatorContext.Registers[EMULATOR_REG_BX].Long;
+    return EmulatorContext.GeneralRegs[EMULATOR_REG_BX].Long;
 #endif
 }
 
@@ -120,7 +120,7 @@ setEBX(ULONG Value)
 #ifndef NEW_EMULATOR
     EmulatorContext.state->general_reg[EMULATOR_REG_BX].val = Value;
 #else
-    EmulatorContext.Registers[EMULATOR_REG_BX].Long = Value;
+    EmulatorContext.GeneralRegs[EMULATOR_REG_BX].Long = Value;
 #endif
 }
 
@@ -131,7 +131,7 @@ getBX(VOID)
 #ifndef NEW_EMULATOR
     return EmulatorContext.state->general_reg[EMULATOR_REG_BX].w.lo;
 #else
-    return EmulatorContext.Registers[EMULATOR_REG_BX].LowWord;
+    return EmulatorContext.GeneralRegs[EMULATOR_REG_BX].LowWord;
 #endif
 }
 
@@ -142,7 +142,7 @@ setBX(USHORT Value)
 #ifndef NEW_EMULATOR
     EmulatorContext.state->general_reg[EMULATOR_REG_BX].w.lo = Value;
 #else
-    EmulatorContext.Registers[EMULATOR_REG_BX].LowWord = Value;
+    EmulatorContext.GeneralRegs[EMULATOR_REG_BX].LowWord = Value;
 #endif
 }
 
@@ -153,7 +153,7 @@ getBH(VOID)
 #ifndef NEW_EMULATOR
     return EmulatorContext.state->general_reg[EMULATOR_REG_BX].b.hi;
 #else
-    return EmulatorContext.Registers[EMULATOR_REG_BX].HighByte;
+    return EmulatorContext.GeneralRegs[EMULATOR_REG_BX].HighByte;
 #endif
 }
 
@@ -164,7 +164,7 @@ setBH(UCHAR Value)
 #ifndef NEW_EMULATOR
     EmulatorContext.state->general_reg[EMULATOR_REG_BX].b.hi = Value;
 #else
-    EmulatorContext.Registers[EMULATOR_REG_BX].HighByte = Value;
+    EmulatorContext.GeneralRegs[EMULATOR_REG_BX].HighByte = Value;
 #endif
 }
 
@@ -175,7 +175,7 @@ getBL(VOID)
 #ifndef NEW_EMULATOR
     return EmulatorContext.state->general_reg[EMULATOR_REG_BX].b.lo;
 #else
-    return EmulatorContext.Registers[EMULATOR_REG_BX].LowByte;
+    return EmulatorContext.GeneralRegs[EMULATOR_REG_BX].LowByte;
 #endif
 }
 
@@ -186,7 +186,7 @@ setBL(UCHAR Value)
 #ifndef NEW_EMULATOR
     EmulatorContext.state->general_reg[EMULATOR_REG_BX].b.lo = Value;
 #else
-    EmulatorContext.Registers[EMULATOR_REG_BX].LowByte = Value;
+    EmulatorContext.GeneralRegs[EMULATOR_REG_BX].LowByte = Value;
 #endif
 }
 
@@ -199,7 +199,7 @@ getECX(VOID)
 #ifndef NEW_EMULATOR
     return EmulatorContext.state->general_reg[EMULATOR_REG_CX].val;
 #else
-    return EmulatorContext.Registers[EMULATOR_REG_CX].Long;
+    return EmulatorContext.GeneralRegs[EMULATOR_REG_CX].Long;
 #endif
 }
 
@@ -210,7 +210,7 @@ setECX(ULONG Value)
 #ifndef NEW_EMULATOR
     EmulatorContext.state->general_reg[EMULATOR_REG_CX].val = Value;
 #else
-    EmulatorContext.Registers[EMULATOR_REG_CX].Long = Value;
+    EmulatorContext.GeneralRegs[EMULATOR_REG_CX].Long = Value;
 #endif
 }
 
@@ -221,7 +221,7 @@ getCX(VOID)
 #ifndef NEW_EMULATOR
     return EmulatorContext.state->general_reg[EMULATOR_REG_CX].w.lo;
 #else
-    return EmulatorContext.Registers[EMULATOR_REG_CX].LowWord;
+    return EmulatorContext.GeneralRegs[EMULATOR_REG_CX].LowWord;
 #endif
 }
 
@@ -232,7 +232,7 @@ setCX(USHORT Value)
 #ifndef NEW_EMULATOR
     EmulatorContext.state->general_reg[EMULATOR_REG_CX].w.lo = Value;
 #else
-    EmulatorContext.Registers[EMULATOR_REG_CX].LowWord = Value;
+    EmulatorContext.GeneralRegs[EMULATOR_REG_CX].LowWord = Value;
 #endif
 }
 
@@ -243,7 +243,7 @@ getCH(VOID)
 #ifndef NEW_EMULATOR
     return EmulatorContext.state->general_reg[EMULATOR_REG_CX].b.hi;
 #else
-    return EmulatorContext.Registers[EMULATOR_REG_CX].HighByte;
+    return EmulatorContext.GeneralRegs[EMULATOR_REG_CX].HighByte;
 #endif
 }
 
@@ -254,7 +254,7 @@ setCH(UCHAR Value)
 #ifndef NEW_EMULATOR
     EmulatorContext.state->general_reg[EMULATOR_REG_CX].b.hi = Value;
 #else
-    EmulatorContext.Registers[EMULATOR_REG_CX].HighByte = Value;
+    EmulatorContext.GeneralRegs[EMULATOR_REG_CX].HighByte = Value;
 #endif
 }
 
@@ -265,7 +265,7 @@ getCL(VOID)
 #ifndef NEW_EMULATOR
     return EmulatorContext.state->general_reg[EMULATOR_REG_CX].b.lo;
 #else
-    return EmulatorContext.Registers[EMULATOR_REG_CX].LowByte;
+    return EmulatorContext.GeneralRegs[EMULATOR_REG_CX].LowByte;
 #endif
 }
 
@@ -276,7 +276,7 @@ setCL(UCHAR Value)
 #ifndef NEW_EMULATOR
     EmulatorContext.state->general_reg[EMULATOR_REG_CX].b.lo = Value;
 #else
-    EmulatorContext.Registers[EMULATOR_REG_CX].LowByte = Value;
+    EmulatorContext.GeneralRegs[EMULATOR_REG_CX].LowByte = Value;
 #endif
 }
 
@@ -289,7 +289,7 @@ getEDX(VOID)
 #ifndef NEW_EMULATOR
     return EmulatorContext.state->general_reg[EMULATOR_REG_DX].val;
 #else
-    return EmulatorContext.Registers[EMULATOR_REG_DX].Long;
+    return EmulatorContext.GeneralRegs[EMULATOR_REG_DX].Long;
 #endif
 }
 
@@ -300,7 +300,7 @@ setEDX(ULONG Value)
 #ifndef NEW_EMULATOR
     EmulatorContext.state->general_reg[EMULATOR_REG_DX].val = Value;
 #else
-    EmulatorContext.Registers[EMULATOR_REG_DX].Long = Value;
+    EmulatorContext.GeneralRegs[EMULATOR_REG_DX].Long = Value;
 #endif
 }
 
@@ -311,7 +311,7 @@ getDX(VOID)
 #ifndef NEW_EMULATOR
     return EmulatorContext.state->general_reg[EMULATOR_REG_DX].w.lo;
 #else
-    return EmulatorContext.Registers[EMULATOR_REG_DX].LowWord;
+    return EmulatorContext.GeneralRegs[EMULATOR_REG_DX].LowWord;
 #endif
 }
 
@@ -322,7 +322,7 @@ setDX(USHORT Value)
 #ifndef NEW_EMULATOR
     EmulatorContext.state->general_reg[EMULATOR_REG_DX].w.lo = Value;
 #else
-    EmulatorContext.Registers[EMULATOR_REG_DX].LowWord = Value;
+    EmulatorContext.GeneralRegs[EMULATOR_REG_DX].LowWord = Value;
 #endif
 }
 
@@ -333,7 +333,7 @@ getDH(VOID)
 #ifndef NEW_EMULATOR
     return EmulatorContext.state->general_reg[EMULATOR_REG_DX].b.hi;
 #else
-    return EmulatorContext.Registers[EMULATOR_REG_DX].HighByte;
+    return EmulatorContext.GeneralRegs[EMULATOR_REG_DX].HighByte;
 #endif
 }
 
@@ -344,7 +344,7 @@ setDH(UCHAR Value)
 #ifndef NEW_EMULATOR
     EmulatorContext.state->general_reg[EMULATOR_REG_DX].b.hi = Value;
 #else
-    EmulatorContext.Registers[EMULATOR_REG_DX].HighByte = Value;
+    EmulatorContext.GeneralRegs[EMULATOR_REG_DX].HighByte = Value;
 #endif
 }
 
@@ -355,7 +355,7 @@ getDL(VOID)
 #ifndef NEW_EMULATOR
     return EmulatorContext.state->general_reg[EMULATOR_REG_DX].b.lo;
 #else
-    return EmulatorContext.Registers[EMULATOR_REG_DX].LowByte;
+    return EmulatorContext.GeneralRegs[EMULATOR_REG_DX].LowByte;
 #endif
 }
 
@@ -366,7 +366,7 @@ setDL(UCHAR Value)
 #ifndef NEW_EMULATOR
     EmulatorContext.state->general_reg[EMULATOR_REG_DX].b.lo = Value;
 #else
-    EmulatorContext.Registers[EMULATOR_REG_DX].LowByte = Value;
+    EmulatorContext.GeneralRegs[EMULATOR_REG_DX].LowByte = Value;
 #endif
 }
 
@@ -409,7 +409,7 @@ getEBP(VOID)
 #ifndef NEW_EMULATOR
     return EmulatorContext.state->general_reg[EMULATOR_REG_BP].val;
 #else
-    return EmulatorContext.Registers[EMULATOR_REG_BP].Long;
+    return EmulatorContext.GeneralRegs[EMULATOR_REG_BP].Long;
 #endif
 }
 
@@ -420,7 +420,7 @@ setEBP(ULONG Value)
 #ifndef NEW_EMULATOR
     EmulatorContext.state->general_reg[EMULATOR_REG_BP].val = Value;
 #else
-    EmulatorContext.Registers[EMULATOR_REG_BP].Long = Value;
+    EmulatorContext.GeneralRegs[EMULATOR_REG_BP].Long = Value;
 #endif
 }
 
@@ -431,7 +431,7 @@ getBP(VOID)
 #ifndef NEW_EMULATOR
     return EmulatorContext.state->general_reg[EMULATOR_REG_BP].w.lo;
 #else
-    return EmulatorContext.Registers[EMULATOR_REG_BP].LowWord;
+    return EmulatorContext.GeneralRegs[EMULATOR_REG_BP].LowWord;
 #endif
 }
 
@@ -442,7 +442,7 @@ setBP(USHORT Value)
 #ifndef NEW_EMULATOR
     EmulatorContext.state->general_reg[EMULATOR_REG_BP].w.lo = Value;
 #else
-    EmulatorContext.Registers[EMULATOR_REG_BP].LowWord = Value;
+    EmulatorContext.GeneralRegs[EMULATOR_REG_BP].LowWord = Value;
 #endif
 }
 
@@ -455,7 +455,7 @@ getESI(VOID)
 #ifndef NEW_EMULATOR
     return EmulatorContext.state->general_reg[EMULATOR_REG_SI].val;
 #else
-    return EmulatorContext.Registers[EMULATOR_REG_SI].Long;
+    return EmulatorContext.GeneralRegs[EMULATOR_REG_SI].Long;
 #endif
 }
 
@@ -466,7 +466,7 @@ setESI(ULONG Value)
 #ifndef NEW_EMULATOR
     EmulatorContext.state->general_reg[EMULATOR_REG_SI].val = Value;
 #else
-    EmulatorContext.Registers[EMULATOR_REG_SI].Long = Value;
+    EmulatorContext.GeneralRegs[EMULATOR_REG_SI].Long = Value;
 #endif
 }
 
@@ -477,7 +477,7 @@ getSI(VOID)
 #ifndef NEW_EMULATOR
     return EmulatorContext.state->general_reg[EMULATOR_REG_SI].w.lo;
 #else
-    return EmulatorContext.Registers[EMULATOR_REG_SI].LowWord;
+    return EmulatorContext.GeneralRegs[EMULATOR_REG_SI].LowWord;
 #endif
 }
 
@@ -488,7 +488,7 @@ setSI(USHORT Value)
 #ifndef NEW_EMULATOR
     EmulatorContext.state->general_reg[EMULATOR_REG_SI].w.lo = Value;
 #else
-    EmulatorContext.Registers[EMULATOR_REG_SI].LowWord = Value;
+    EmulatorContext.GeneralRegs[EMULATOR_REG_SI].LowWord = Value;
 #endif
 }
 
@@ -501,7 +501,7 @@ getEDI(VOID)
 #ifndef NEW_EMULATOR
     return EmulatorContext.state->general_reg[EMULATOR_REG_DI].val;
 #else
-    return EmulatorContext.Registers[EMULATOR_REG_DI].Long;
+    return EmulatorContext.GeneralRegs[EMULATOR_REG_DI].Long;
 #endif
 }
 
@@ -512,7 +512,7 @@ setEDI(ULONG Value)
 #ifndef NEW_EMULATOR
     EmulatorContext.state->general_reg[EMULATOR_REG_DI].val = Value;
 #else
-    EmulatorContext.Registers[EMULATOR_REG_DI].Long = Value;
+    EmulatorContext.GeneralRegs[EMULATOR_REG_DI].Long = Value;
 #endif
 }
 
@@ -523,7 +523,7 @@ getDI(VOID)
 #ifndef NEW_EMULATOR
     return EmulatorContext.state->general_reg[EMULATOR_REG_DI].w.lo;
 #else
-    return EmulatorContext.Registers[EMULATOR_REG_DI].LowWord;
+    return EmulatorContext.GeneralRegs[EMULATOR_REG_DI].LowWord;
 #endif
 }
 
@@ -534,7 +534,7 @@ setDI(USHORT Value)
 #ifndef NEW_EMULATOR
     EmulatorContext.state->general_reg[EMULATOR_REG_DI].w.lo = Value;
 #else
-    EmulatorContext.Registers[EMULATOR_REG_DI].LowWord = Value;
+    EmulatorContext.GeneralRegs[EMULATOR_REG_DI].LowWord = Value;
 #endif
 }