[SOFT386]

Fix incorrect (reverse) handling of the DF flag.


svn path=/branches/ntvdm/; revision=60617
This commit is contained in:
Aleksandar Andrejevic 2013-10-11 19:02:06 +00:00
parent caf9a0a671
commit 37059f6dfc

View file

@ -5960,7 +5960,7 @@ SOFT386_OPCODE_HANDLER(Soft386OpcodeMovs)
/* Increment/decrement ESI and EDI */ /* Increment/decrement ESI and EDI */
if (OperandSize) if (OperandSize)
{ {
if (State->Flags.Df) if (!State->Flags.Df)
{ {
State->GeneralRegs[SOFT386_REG_ESI].Long += DataSize; State->GeneralRegs[SOFT386_REG_ESI].Long += DataSize;
State->GeneralRegs[SOFT386_REG_EDI].Long += DataSize; State->GeneralRegs[SOFT386_REG_EDI].Long += DataSize;
@ -5973,7 +5973,7 @@ SOFT386_OPCODE_HANDLER(Soft386OpcodeMovs)
} }
else else
{ {
if (State->Flags.Df) if (!State->Flags.Df)
{ {
State->GeneralRegs[SOFT386_REG_ESI].LowWord += DataSize; State->GeneralRegs[SOFT386_REG_ESI].LowWord += DataSize;
State->GeneralRegs[SOFT386_REG_EDI].LowWord += DataSize; State->GeneralRegs[SOFT386_REG_EDI].LowWord += DataSize;
@ -6071,7 +6071,7 @@ SOFT386_OPCODE_HANDLER(Soft386OpcodeCmps)
/* Increment/decrement ESI and EDI */ /* Increment/decrement ESI and EDI */
if (OperandSize) if (OperandSize)
{ {
if (State->Flags.Df) if (!State->Flags.Df)
{ {
State->GeneralRegs[SOFT386_REG_ESI].Long += DataSize; State->GeneralRegs[SOFT386_REG_ESI].Long += DataSize;
State->GeneralRegs[SOFT386_REG_EDI].Long += DataSize; State->GeneralRegs[SOFT386_REG_EDI].Long += DataSize;
@ -6084,7 +6084,7 @@ SOFT386_OPCODE_HANDLER(Soft386OpcodeCmps)
} }
else else
{ {
if (State->Flags.Df) if (!State->Flags.Df)
{ {
State->GeneralRegs[SOFT386_REG_ESI].LowWord += DataSize; State->GeneralRegs[SOFT386_REG_ESI].LowWord += DataSize;
State->GeneralRegs[SOFT386_REG_EDI].LowWord += DataSize; State->GeneralRegs[SOFT386_REG_EDI].LowWord += DataSize;
@ -6214,12 +6214,12 @@ SOFT386_OPCODE_HANDLER(Soft386OpcodeStos)
/* Increment/decrement EDI */ /* Increment/decrement EDI */
if (OperandSize) if (OperandSize)
{ {
if (State->Flags.Df) State->GeneralRegs[SOFT386_REG_EDI].Long += DataSize; if (!State->Flags.Df) State->GeneralRegs[SOFT386_REG_EDI].Long += DataSize;
else State->GeneralRegs[SOFT386_REG_EDI].Long -= DataSize; else State->GeneralRegs[SOFT386_REG_EDI].Long -= DataSize;
} }
else else
{ {
if (State->Flags.Df) State->GeneralRegs[SOFT386_REG_EDI].LowWord += DataSize; if (!State->Flags.Df) State->GeneralRegs[SOFT386_REG_EDI].LowWord += DataSize;
else State->GeneralRegs[SOFT386_REG_EDI].LowWord -= DataSize; else State->GeneralRegs[SOFT386_REG_EDI].LowWord -= DataSize;
} }
} }
@ -6291,12 +6291,12 @@ SOFT386_OPCODE_HANDLER(Soft386OpcodeLods)
/* Increment/decrement ESI */ /* Increment/decrement ESI */
if (OperandSize) if (OperandSize)
{ {
if (State->Flags.Df) State->GeneralRegs[SOFT386_REG_ESI].Long += DataSize; if (!State->Flags.Df) State->GeneralRegs[SOFT386_REG_ESI].Long += DataSize;
else State->GeneralRegs[SOFT386_REG_ESI].Long -= DataSize; else State->GeneralRegs[SOFT386_REG_ESI].Long -= DataSize;
} }
else else
{ {
if (State->Flags.Df) State->GeneralRegs[SOFT386_REG_ESI].LowWord += DataSize; if (!State->Flags.Df) State->GeneralRegs[SOFT386_REG_ESI].LowWord += DataSize;
else State->GeneralRegs[SOFT386_REG_ESI].LowWord -= DataSize; else State->GeneralRegs[SOFT386_REG_ESI].LowWord -= DataSize;
} }
@ -6375,12 +6375,12 @@ SOFT386_OPCODE_HANDLER(Soft386OpcodeScas)
/* Increment/decrement EDI */ /* Increment/decrement EDI */
if (OperandSize) if (OperandSize)
{ {
if (State->Flags.Df) State->GeneralRegs[SOFT386_REG_EDI].Long += DataSize; if (!State->Flags.Df) State->GeneralRegs[SOFT386_REG_EDI].Long += DataSize;
else State->GeneralRegs[SOFT386_REG_EDI].Long -= DataSize; else State->GeneralRegs[SOFT386_REG_EDI].Long -= DataSize;
} }
else else
{ {
if (State->Flags.Df) State->GeneralRegs[SOFT386_REG_EDI].LowWord += DataSize; if (!State->Flags.Df) State->GeneralRegs[SOFT386_REG_EDI].LowWord += DataSize;
else State->GeneralRegs[SOFT386_REG_EDI].LowWord -= DataSize; else State->GeneralRegs[SOFT386_REG_EDI].LowWord -= DataSize;
} }
@ -6511,12 +6511,12 @@ SOFT386_OPCODE_HANDLER(Soft386OpcodeIns)
/* Increment/decrement EDI */ /* Increment/decrement EDI */
if (OperandSize) if (OperandSize)
{ {
if (State->Flags.Df) State->GeneralRegs[SOFT386_REG_EDI].Long += DataSize; if (!State->Flags.Df) State->GeneralRegs[SOFT386_REG_EDI].Long += DataSize;
else State->GeneralRegs[SOFT386_REG_EDI].Long -= DataSize; else State->GeneralRegs[SOFT386_REG_EDI].Long -= DataSize;
} }
else else
{ {
if (State->Flags.Df) State->GeneralRegs[SOFT386_REG_EDI].LowWord += DataSize; if (!State->Flags.Df) State->GeneralRegs[SOFT386_REG_EDI].LowWord += DataSize;
else State->GeneralRegs[SOFT386_REG_EDI].LowWord -= DataSize; else State->GeneralRegs[SOFT386_REG_EDI].LowWord -= DataSize;
} }
} }
@ -6650,12 +6650,12 @@ SOFT386_OPCODE_HANDLER(Soft386OpcodeOuts)
/* Increment/decrement ESI */ /* Increment/decrement ESI */
if (OperandSize) if (OperandSize)
{ {
if (State->Flags.Df) State->GeneralRegs[SOFT386_REG_ESI].Long += DataSize; if (!State->Flags.Df) State->GeneralRegs[SOFT386_REG_ESI].Long += DataSize;
else State->GeneralRegs[SOFT386_REG_ESI].Long -= DataSize; else State->GeneralRegs[SOFT386_REG_ESI].Long -= DataSize;
} }
else else
{ {
if (State->Flags.Df) State->GeneralRegs[SOFT386_REG_ESI].LowWord += DataSize; if (!State->Flags.Df) State->GeneralRegs[SOFT386_REG_ESI].LowWord += DataSize;
else State->GeneralRegs[SOFT386_REG_ESI].LowWord -= DataSize; else State->GeneralRegs[SOFT386_REG_ESI].LowWord -= DataSize;
} }
} }