[FAST486]

Don't mix up ADSIZE and OPSIZE (continued).


svn path=/branches/ntvdm/; revision=60927
This commit is contained in:
Aleksandar Andrejevic 2013-11-10 23:42:57 +00:00
parent a2f3c339f4
commit 9677ec13ad

View file

@ -5133,15 +5133,15 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeJmpAbs)
FAST486_OPCODE_HANDLER(Fast486OpcodeMovAlOffset) FAST486_OPCODE_HANDLER(Fast486OpcodeMovAlOffset)
{ {
BOOLEAN Size = State->SegmentRegs[FAST486_REG_CS].Size; BOOLEAN AddressSize = State->SegmentRegs[FAST486_REG_CS].Size;
ULONG Offset; ULONG Offset;
/* Make sure this is the right instruction */ /* Make sure this is the right instruction */
ASSERT(Opcode == 0xA0); ASSERT(Opcode == 0xA0);
TOGGLE_OPSIZE(Size); TOGGLE_ADSIZE(AddressSize);
if (Size) if (AddressSize)
{ {
if (!Fast486FetchDword(State, &Offset)) if (!Fast486FetchDword(State, &Offset))
{ {
@ -5174,14 +5174,17 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeMovAlOffset)
FAST486_OPCODE_HANDLER(Fast486OpcodeMovEaxOffset) FAST486_OPCODE_HANDLER(Fast486OpcodeMovEaxOffset)
{ {
BOOLEAN Size = State->SegmentRegs[FAST486_REG_CS].Size; BOOLEAN OperandSize, AddressSize;
OperandSize = AddressSize = State->SegmentRegs[FAST486_REG_CS].Size;
/* Make sure this is the right instruction */ /* Make sure this is the right instruction */
ASSERT(Opcode == 0xA1); ASSERT(Opcode == 0xA1);
TOGGLE_OPSIZE(Size); TOGGLE_OPSIZE(OperandSize);
TOGGLE_ADSIZE(AddressSize);
if (Size) if (AddressSize)
{ {
ULONG Offset; ULONG Offset;
@ -5192,13 +5195,26 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeMovEaxOffset)
} }
/* Read from memory */ /* Read from memory */
return Fast486ReadMemory(State, if (OperandSize)
(State->PrefixFlags & FAST486_PREFIX_SEG) ? {
State->SegmentOverride : FAST486_REG_DS, return Fast486ReadMemory(State,
Offset, (State->PrefixFlags & FAST486_PREFIX_SEG) ?
FALSE, State->SegmentOverride : FAST486_REG_DS,
&State->GeneralRegs[FAST486_REG_EAX].Long, Offset,
sizeof(ULONG)); FALSE,
&State->GeneralRegs[FAST486_REG_EAX].Long,
sizeof(ULONG));
}
else
{
return Fast486ReadMemory(State,
(State->PrefixFlags & FAST486_PREFIX_SEG) ?
State->SegmentOverride : FAST486_REG_DS,
Offset,
FALSE,
&State->GeneralRegs[FAST486_REG_EAX].LowWord,
sizeof(USHORT));
}
} }
else else
{ {
@ -5211,13 +5227,26 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeMovEaxOffset)
} }
/* Read from memory */ /* Read from memory */
return Fast486ReadMemory(State, if (OperandSize)
(State->PrefixFlags & FAST486_PREFIX_SEG) ? {
State->SegmentOverride : FAST486_REG_DS, return Fast486ReadMemory(State,
Offset, (State->PrefixFlags & FAST486_PREFIX_SEG) ?
FALSE, State->SegmentOverride : FAST486_REG_DS,
&State->GeneralRegs[FAST486_REG_EAX].LowWord, Offset,
sizeof(USHORT)); FALSE,
&State->GeneralRegs[FAST486_REG_EAX].Long,
sizeof(ULONG));
}
else
{
return Fast486ReadMemory(State,
(State->PrefixFlags & FAST486_PREFIX_SEG) ?
State->SegmentOverride : FAST486_REG_DS,
Offset,
FALSE,
&State->GeneralRegs[FAST486_REG_EAX].LowWord,
sizeof(USHORT));
}
} }
} }