Sync with trunk r63502.
[reactos.git] / lib / fast486 / common.h
index df05025..677bd19 100644 (file)
@@ -29,8 +29,8 @@
 #define SIGN_FLAG_BYTE  0x80
 #define SIGN_FLAG_WORD  0x8000
 #define SIGN_FLAG_LONG  0x80000000
-#define REAL_MODE_FLAGS_MASK 0x17FD5
-#define PROT_MODE_FLAGS_MASK 0x10DD5
+#define REAL_MODE_FLAGS_MASK 0x57FD5
+#define PROT_MODE_FLAGS_MASK 0x50DD5
 
 /* Block size for string operations */
 #define STRING_BLOCK_SIZE 4096
@@ -55,6 +55,15 @@ if (State->PrefixFlags & FAST486_PREFIX_LOCK)\
 
 #define SWAP(x, y) { (x) ^= (y); (y) ^= (x); (x) ^= (y); }
 
+#define ALIGNMENT_CHECK(x, a) if (State->Flags.Ac \
+                                  && (State->ControlRegisters[FAST486_REG_CR0] & FAST486_CR0_AM)\
+                                  && (State->Cpl == 3)\
+                                  && (((x) % (a)) != 0))\
+{\
+    Fast486Exception(State, FAST486_EXCEPTION_AC);\
+    return FALSE;\
+}
+
 #define PAGE_ALIGN(x)   ((x) & 0xFFFFF000)
 #define PAGE_OFFSET(x)  ((x) & 0x00000FFF)
 #define GET_ADDR_PDE(x) ((x) >> 22)
@@ -150,7 +159,7 @@ Fast486InterruptInternal
     PFAST486_STATE State,
     USHORT SegmentSelector,
     ULONG Offset,
-    BOOLEAN InterruptGate
+    ULONG GateType
 );
 
 VOID