#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
#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)
PFAST486_STATE State,
USHORT SegmentSelector,
ULONG Offset,
- BOOLEAN InterruptGate
+ ULONG GateType
);
VOID