Author: aandrejevic Date: Mon Apr 20 01:25:04 2015 New Revision: 67321
URL: http://svn.reactos.org/svn/reactos?rev=67321&view=rev Log: [FAST486] (Addendum to r67320) ... and that goes for POP too...
Modified: trunk/reactos/lib/fast486/common.inl
Modified: trunk/reactos/lib/fast486/common.inl URL: http://svn.reactos.org/svn/reactos/trunk/reactos/lib/fast486/common.inl?rev=... ============================================================================== --- trunk/reactos/lib/fast486/common.inl [iso-8859-1] (original) +++ trunk/reactos/lib/fast486/common.inl [iso-8859-1] Mon Apr 20 01:25:04 2015 @@ -408,7 +408,9 @@ /* Read the value from SS:ESP */ if (!Fast486ReadMemory(State, FAST486_REG_SS, - State->GeneralRegs[FAST486_REG_ESP].Long, + State->SegmentRegs[FAST486_REG_SS].Size + ? State->GeneralRegs[FAST486_REG_ESP].Long + : State->GeneralRegs[FAST486_REG_ESP].LowWord, FALSE, &LongValue, sizeof(LongValue))) @@ -417,8 +419,16 @@ return FALSE; }
- /* Increment ESP by 4 */ - State->GeneralRegs[FAST486_REG_ESP].Long += sizeof(ULONG); + if (State->SegmentRegs[FAST486_REG_SS].Size) + { + /* Increment ESP by 4 */ + State->GeneralRegs[FAST486_REG_ESP].Long += sizeof(ULONG); + } + else + { + /* Increment SP by 4 */ + State->GeneralRegs[FAST486_REG_ESP].LowWord += sizeof(ULONG); + }
/* Store the value in the result */ *Value = LongValue; @@ -438,7 +448,9 @@ /* Read the value from SS:SP */ if (!Fast486ReadMemory(State, FAST486_REG_SS, - State->GeneralRegs[FAST486_REG_ESP].LowWord, + State->SegmentRegs[FAST486_REG_SS].Size + ? State->GeneralRegs[FAST486_REG_ESP].Long + : State->GeneralRegs[FAST486_REG_ESP].LowWord, FALSE, &ShortValue, sizeof(ShortValue))) @@ -447,8 +459,16 @@ return FALSE; }
- /* Increment SP by 2 */ - State->GeneralRegs[FAST486_REG_ESP].LowWord += sizeof(USHORT); + if (State->SegmentRegs[FAST486_REG_SS].Size) + { + /* Increment ESP by 2 */ + State->GeneralRegs[FAST486_REG_ESP].Long += sizeof(USHORT); + } + else + { + /* Increment SP by 2 */ + State->GeneralRegs[FAST486_REG_ESP].LowWord += sizeof(USHORT); + }
/* Store the value in the result */ *Value = ShortValue;