if (Jump)
{
- /* Move the instruction pointer */
+ /* Move the instruction pointer */
State->InstPtr.Long += Offset;
}
/* Read the value from AL */
Data = State->GeneralRegs[FAST486_REG_EAX].LowByte;
-
+
/* Write the byte to the I/O port */
State->IoWriteCallback(State, Port, &Data, 1, sizeof(UCHAR));
return FALSE;
}
- /* Move the instruction pointer */
+ /* Move the instruction pointer */
State->InstPtr.Long += Offset;
return TRUE;
/* Exception occurred */
return FALSE;
}
-
+
/* Calculate the result */
Result = FirstValue + SecondValue;
/* Exception occurred */
return FALSE;
}
-
+
/* Calculate the result */
Result = FirstValue + SecondValue;
/* Exception occurred */
return FALSE;
}
-
+
/* Calculate the result */
Result = FirstValue | SecondValue;
/* Exception occurred */
return FALSE;
}
-
+
/* Calculate the result */
Result = FirstValue | SecondValue;
/* Exception occurred */
return FALSE;
}
-
+
/* Calculate the result */
Result = FirstValue & SecondValue;
/* Exception occurred */
return FALSE;
}
-
+
/* Calculate the result */
Result = FirstValue & SecondValue;
/* Exception occurred */
return FALSE;
}
-
+
/* Calculate the result */
Result = FirstValue ^ SecondValue;
/* Exception occurred */
return FALSE;
}
-
+
/* Calculate the result */
Result = FirstValue ^ SecondValue;
/* Exception occurred */
return FALSE;
}
-
+
/* Calculate the result */
Result = FirstValue & SecondValue;
/* Exception occurred */
return FALSE;
}
-
+
/* Calculate the result */
Result = FirstValue & SecondValue;
/* Exception occurred */
return FALSE;
}
-
+
/* Write the value from the register to the R/M */
if (!Fast486WriteModrmWordOperands(State,
&ModRegRm,
/* Exception occurred */
return FALSE;
}
-
+
/* Calculate the result */
Result = FirstValue + SecondValue + State->Flags.Cf;
/* Exception occurred */
return FALSE;
}
-
+
/* Calculate the result */
Result = FirstValue + SecondValue + State->Flags.Cf;
/* Swap the order */
SWAP(FirstValue, SecondValue);
}
-
+
/* Calculate the result */
Result = FirstValue - SecondValue - Carry;
/* Exception occurred */
return FALSE;
}
-
+
/* Check if this is the instruction that writes to R/M */
if (!(Opcode & FAST486_OPCODE_WRITE_REG))
{
/* Swap the order */
SWAP(FirstValue, SecondValue);
}
-
+
/* Calculate the result */
Result = FirstValue - SecondValue - Carry;
/* Swap the order */
SWAP(FirstValue, SecondValue);
}
-
+
/* Calculate the result */
Result = FirstValue - SecondValue;
/* Exception occurred */
return FALSE;
}
-
+
/* Check if this is the instruction that writes to R/M */
if (!(Opcode & FAST486_OPCODE_WRITE_REG))
{
/* Swap the order */
SWAP(FirstValue, SecondValue);
}
-
+
/* Calculate the result */
Result = FirstValue - SecondValue;
if (Opcode & FAST486_OPCODE_WRITE_REG) Result = SecondValue;
else Result = FirstValue;
-
+
/* Write back the result */
return Fast486WriteModrmDwordOperands(State,
&ModRegRm,
/* Exception occurred */
return FALSE;
}
-
+
if (Opcode & FAST486_OPCODE_WRITE_REG) Result = SecondValue;
else Result = FirstValue;
/* Call the VM86 monitor */
Fast486ExceptionWithErrorCode(State, FAST486_EXCEPTION_GP, 0);
}
-
+
}
return TRUE;
if (Condition)
{
- /* Move the instruction pointer */
+ /* Move the instruction pointer */
State->InstPtr.Long += Offset;
}
return FALSE;
}
- /* Move the instruction pointer */
+ /* Move the instruction pointer */
State->InstPtr.Long += Offset;
}
else
return FALSE;
}
- /* Move the instruction pointer */
+ /* Move the instruction pointer */
State->InstPtr.LowWord += Offset;
}
return FALSE;
}
- /* Move the instruction pointer */
+ /* Move the instruction pointer */
State->InstPtr.Long += Offset;
}
else
return FALSE;
}
- /* Move the instruction pointer */
+ /* Move the instruction pointer */
State->InstPtr.LowWord += Offset;
}
|| (State->PrefixFlags & FAST486_PREFIX_REPNZ))
{
BOOLEAN Repeat = TRUE;
-
+
if (OperandSize)
{
if ((--State->GeneralRegs[FAST486_REG_ECX].Long) == 0)
|| (State->PrefixFlags & FAST486_PREFIX_REPNZ))
{
BOOLEAN Repeat = TRUE;
-
+
if (OperandSize)
{
if ((--State->GeneralRegs[FAST486_REG_ECX].Long) == 0)
{
return Fast486WriteModrmByteOperands(State, &ModRegRm, FALSE, Value);
}
-
+
return TRUE;
}
{
FAST486_MOD_REG_RM ModRegRm;
BOOLEAN OperandSize, AddressSize;
-
+
OperandSize = AddressSize = State->SegmentRegs[FAST486_REG_CS].Size;
TOGGLE_OPSIZE(OperandSize);
CHAR ImmByte;
FAST486_MOD_REG_RM ModRegRm;
BOOLEAN OperandSize, AddressSize;
-
+
OperandSize = AddressSize = State->SegmentRegs[FAST486_REG_CS].Size;
TOGGLE_OPSIZE(OperandSize);
ULONG Value;
FAST486_MOD_REG_RM ModRegRm;
BOOLEAN OperandSize, AddressSize;
-
+
OperandSize = AddressSize = State->SegmentRegs[FAST486_REG_CS].Size;
TOGGLE_OPSIZE(OperandSize);
UCHAR Count;
FAST486_MOD_REG_RM ModRegRm;
BOOLEAN OperandSize, AddressSize;
-
+
OperandSize = AddressSize = State->SegmentRegs[FAST486_REG_CS].Size;
TOGGLE_OPSIZE(OperandSize);
{
FAST486_MOD_REG_RM ModRegRm;
BOOLEAN OperandSize, AddressSize;
-
+
OperandSize = AddressSize = State->SegmentRegs[FAST486_REG_CS].Size;
TOGGLE_OPSIZE(OperandSize);
{
FAST486_MOD_REG_RM ModRegRm;
BOOLEAN OperandSize, AddressSize;
-
+
OperandSize = AddressSize = State->SegmentRegs[FAST486_REG_CS].Size;
TOGGLE_OPSIZE(OperandSize);
ULONG Dummy, Value = 0, SignFlag;
FAST486_MOD_REG_RM ModRegRm;
BOOLEAN OperandSize, AddressSize;
-
+
OperandSize = AddressSize = State->SegmentRegs[FAST486_REG_CS].Size;
TOGGLE_OPSIZE(OperandSize);
{
FAST486_MOD_REG_RM ModRegRm;
BOOLEAN OperandSize, AddressSize;
-
+
OperandSize = AddressSize = State->SegmentRegs[FAST486_REG_CS].Size;
TOGGLE_OPSIZE(OperandSize);
BOOLEAN OperandSize, AddressSize;
UINT DataSize;
UCHAR BitNumber;
-
+
OperandSize = AddressSize = State->SegmentRegs[FAST486_REG_CS].Size;
TOGGLE_OPSIZE(OperandSize);