Author: aandrejevic
Date: Sun Dec 15 04:15:03 2013
New Revision: 61274
URL:
http://svn.reactos.org/svn/reactos?rev=61274&view=rev
Log:
[FAST486]
Fix linear memory access when paging is enabled.
Modified:
branches/ntvdm/lib/fast486/common.inl
Modified: branches/ntvdm/lib/fast486/common.inl
URL:
http://svn.reactos.org/svn/reactos/branches/ntvdm/lib/fast486/common.inl?re…
==============================================================================
--- branches/ntvdm/lib/fast486/common.inl [iso-8859-1] (original)
+++ branches/ntvdm/lib/fast486/common.inl [iso-8859-1] Sun Dec 15 04:15:03 2013
@@ -128,6 +128,7 @@
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 @@
{
/* 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 @@
/* Read the memory */
State->MemReadCallback(State,
(TableEntry.Address << 12) | PageOffset,
- Buffer,
+ (PVOID)((ULONG_PTR)Buffer + BufferOffset),
PageLength);
+
+ BufferOffset += PageLength;
}
}
else
@@ -190,6 +194,7 @@
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 @@
{
/* 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 @@
/* Write the memory */
State->MemWriteCallback(State,
(TableEntry.Address << 12) | PageOffset,
- Buffer,
+ (PVOID)((ULONG_PTR)Buffer + BufferOffset),
PageLength);
+
+ BufferOffset += PageLength;
}
}
else