Author: aandrejevic Date: Sun Sep 28 19:07:27 2014 New Revision: 64374
URL: http://svn.reactos.org/svn/reactos?rev=64374&view=rev Log: [FAST486] Fix XLAT and OUTS.
Modified: trunk/reactos/lib/fast486/opcodes.c
Modified: trunk/reactos/lib/fast486/opcodes.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/lib/fast486/opcodes.c?rev=6... ============================================================================== --- trunk/reactos/lib/fast486/opcodes.c [iso-8859-1] (original) +++ trunk/reactos/lib/fast486/opcodes.c [iso-8859-1] Sun Sep 28 19:07:27 2014 @@ -4956,7 +4956,8 @@
/* Read a byte from DS:[(E)BX + AL] */ if (!Fast486ReadMemory(State, - FAST486_REG_DS, + (State->PrefixFlags & FAST486_PREFIX_SEG) + ? State->SegmentOverride : FAST486_REG_DS, (AddressSize ? State->GeneralRegs[FAST486_REG_EBX].Long : State->GeneralRegs[FAST486_REG_EBX].LowWord) + State->GeneralRegs[FAST486_REG_EAX].LowByte, @@ -6214,8 +6215,8 @@ if (!AddressSize) { ULONG MaxBytes = State->Flags.Df - ? (ULONG)State->GeneralRegs[FAST486_REG_EDI].LowWord - : (0x10000 - (ULONG)State->GeneralRegs[FAST486_REG_EDI].LowWord); + ? (ULONG)State->GeneralRegs[FAST486_REG_ESI].LowWord + : (0x10000 - (ULONG)State->GeneralRegs[FAST486_REG_ESI].LowWord);
Processed = min(Processed, MaxBytes / DataSize); if (Processed == 0) Processed = 1; @@ -6223,9 +6224,10 @@
/* Read from memory */ if (!Fast486ReadMemory(State, - FAST486_REG_ES, - AddressSize ? State->GeneralRegs[FAST486_REG_EDI].Long - : State->GeneralRegs[FAST486_REG_EDI].LowWord, + (State->PrefixFlags & FAST486_PREFIX_SEG) + ? State->SegmentOverride : FAST486_REG_DS, + AddressSize ? State->GeneralRegs[FAST486_REG_ESI].Long + : State->GeneralRegs[FAST486_REG_ESI].LowWord, FALSE, Block, Processed * DataSize)) @@ -6242,9 +6244,9 @@ { ULONG i, j;
- /* Reduce EDI by the number of bytes to transfer */ - if (AddressSize) State->GeneralRegs[FAST486_REG_EDI].Long -= Processed * DataSize; - else State->GeneralRegs[FAST486_REG_EDI].LowWord -= Processed * DataSize; + /* Reduce ESI by the number of bytes to transfer */ + if (AddressSize) State->GeneralRegs[FAST486_REG_ESI].Long -= Processed * DataSize; + else State->GeneralRegs[FAST486_REG_ESI].LowWord -= Processed * DataSize;
/* Reverse the block data */ for (i = 0; i < Processed / 2; i++) @@ -6268,9 +6270,9 @@
if (!State->Flags.Df) { - /* Increase EDI by the number of bytes transfered */ - if (AddressSize) State->GeneralRegs[FAST486_REG_EDI].Long += Processed * DataSize; - else State->GeneralRegs[FAST486_REG_EDI].LowWord += Processed * DataSize; + /* Increase ESI by the number of bytes transfered */ + if (AddressSize) State->GeneralRegs[FAST486_REG_ESI].Long += Processed * DataSize; + else State->GeneralRegs[FAST486_REG_ESI].LowWord += Processed * DataSize; }
/* Reduce the total count by the number processed in this run */ @@ -6287,7 +6289,8 @@
/* Read from the source operand */ if (!Fast486ReadMemory(State, - FAST486_REG_DS, + (State->PrefixFlags & FAST486_PREFIX_SEG) + ? State->SegmentOverride : FAST486_REG_DS, AddressSize ? State->GeneralRegs[FAST486_REG_ESI].Long : State->GeneralRegs[FAST486_REG_ESI].LowWord, FALSE,