[NTVDM]
[reactos.git] / subsystems / ntvdm / emulator.h
index 8a24d3a..427c520 100644 (file)
 /* INCLUDES *******************************************************************/
 
 #include "ntvdm.h"
-#include <softx86/softx86.h>
-#include <softx86/softx87.h>
+
+#ifndef NEW_EMULATOR
+#include <softx86.h>
+#include <softx87.h>
+#else
+#include <soft386.h>
+#endif
 
 /* DEFINES ********************************************************************/
 
+/* FLAGS */
 #define EMULATOR_FLAG_CF (1 << 0)
 #define EMULATOR_FLAG_PF (1 << 2)
 #define EMULATOR_FLAG_AF (1 << 4)
 #define EMULATOR_FLAG_VIF (1 << 19)
 #define EMULATOR_FLAG_VIP (1 << 20)
 #define EMULATOR_FLAG_ID (1 << 21)
-#define SPECIAL_INT_NUM 0xFF
+
+/* Common definitions */
+#define EMULATOR_BOP 0xC4C4
+#define EMULATOR_INT_BOP 0xBEEF
+#define STACK_INT_NUM 0
+#define STACK_IP 1
+#define STACK_CS 2
+#define STACK_FLAGS 3
 
 enum
 {
@@ -44,7 +57,14 @@ enum
     EMULATOR_EXCEPTION_OVERFLOW,
     EMULATOR_EXCEPTION_BOUND,
     EMULATOR_EXCEPTION_INVALID_OPCODE,
-    EMULATOR_EXCEPTION_NO_FPU
+    EMULATOR_EXCEPTION_NO_FPU,
+    EMULATOR_EXCEPTION_DOUBLE_FAULT,
+    EMULATOR_EXCEPTION_FPU_SEGMENT,
+    EMULATOR_EXCEPTION_INVALID_TSS,
+    EMULATOR_EXCEPTION_NO_SEGMENT,
+    EMULATOR_EXCEPTION_STACK_SEGMENT,
+    EMULATOR_EXCEPTION_GPF,
+    EMULATOR_EXCEPTION_PAGE_FAULT
 };
 
 enum
@@ -61,16 +81,26 @@ enum
     EMULATOR_REG_CS,
     EMULATOR_REG_SS,
     EMULATOR_REG_DS,
+    EMULATOR_REG_FS,
+    EMULATOR_REG_GS
 };
 
+#ifndef NEW_EMULATOR
+extern softx86_ctx EmulatorContext;
+extern softx87_ctx FpuEmulatorContext;
+#else
+extern SOFT386_STATE EmulatorContext;
+#endif
+
 /* FUNCTIONS ******************************************************************/
 
 BOOLEAN EmulatorInitialize();
-VOID EmulatorSetStack(WORD Segment, WORD Offset);
+VOID EmulatorSetStack(WORD Segment, DWORD Offset);
 VOID EmulatorExecute(WORD Segment, WORD Offset);
 VOID EmulatorInterrupt(BYTE Number);
 VOID EmulatorExternalInterrupt(BYTE Number);
 ULONG EmulatorGetRegister(ULONG Register);
+ULONG EmulatorGetProgramCounter(VOID);
 VOID EmulatorSetRegister(ULONG Register, ULONG Value);
 BOOLEAN EmulatorGetFlag(ULONG Flag);
 VOID EmulatorSetFlag(ULONG Flag);
@@ -79,7 +109,6 @@ VOID EmulatorStep();
 VOID EmulatorCleanup();
 VOID EmulatorSetA20(BOOLEAN Enabled);
 
-#endif
+#endif // _EMULATOR_H_
 
 /* EOF */
-