From 4c80791d476c2bae7ce4e08f1c56525e2cbd364f Mon Sep 17 00:00:00 2001 From: Aleksandar Andrejevic Date: Sun, 15 Dec 2013 04:15:03 +0000 Subject: [PATCH] [FAST486] Fix linear memory access when paging is enabled. svn path=/branches/ntvdm/; revision=61274 --- lib/fast486/common.inl | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/lib/fast486/common.inl b/lib/fast486/common.inl index 61e69a6ebaf..b9ef5872247 100644 --- a/lib/fast486/common.inl +++ b/lib/fast486/common.inl @@ -128,6 +128,7 @@ Fast486ReadLinearMemory(PFAST486_STATE State, ULONG Page; FAST486_PAGE_TABLE TableEntry; INT Cpl = Fast486GetCurrentPrivLevel(State); + ULONG BufferOffset = 0; for (Page = PAGE_ALIGN(LinearAddress); Page <= PAGE_ALIGN(LinearAddress + Size - 1); @@ -152,6 +153,7 @@ Fast486ReadLinearMemory(PFAST486_STATE State, { /* Start reading from the offset from the beginning of the page */ PageOffset = PAGE_OFFSET(LinearAddress); + PageLength -= PageOffset; } /* Check if this is the last page */ @@ -164,8 +166,10 @@ Fast486ReadLinearMemory(PFAST486_STATE State, /* Read the memory */ State->MemReadCallback(State, (TableEntry.Address << 12) | PageOffset, - Buffer, + (PVOID)((ULONG_PTR)Buffer + BufferOffset), PageLength); + + BufferOffset += PageLength; } } else @@ -190,6 +194,7 @@ Fast486WriteLinearMemory(PFAST486_STATE State, ULONG Page; FAST486_PAGE_TABLE TableEntry; INT Cpl = Fast486GetCurrentPrivLevel(State); + ULONG BufferOffset = 0; for (Page = PAGE_ALIGN(LinearAddress); Page <= PAGE_ALIGN(LinearAddress + Size - 1); @@ -216,6 +221,7 @@ Fast486WriteLinearMemory(PFAST486_STATE State, { /* Start writing from the offset from the beginning of the page */ PageOffset = PAGE_OFFSET(LinearAddress); + PageLength -= PageOffset; } /* Check if this is the last page */ @@ -228,8 +234,10 @@ Fast486WriteLinearMemory(PFAST486_STATE State, /* Write the memory */ State->MemWriteCallback(State, (TableEntry.Address << 12) | PageOffset, - Buffer, + (PVOID)((ULONG_PTR)Buffer + BufferOffset), PageLength); + + BufferOffset += PageLength; } } else