diff --git a/reactos/subsystems/mvdm/ntvdm/cpu/cpu.c b/reactos/subsystems/mvdm/ntvdm/cpu/cpu.c index c1058da240b..fce911ef751 100644 --- a/reactos/subsystems/mvdm/ntvdm/cpu/cpu.c +++ b/reactos/subsystems/mvdm/ntvdm/cpu/cpu.c @@ -139,7 +139,7 @@ VOID CpuSimulate(VOID) EXCEPTION_EXECUTE_HANDLER) { BOOLEAN Writing = (LocalExceptionRecord.ExceptionInformation[0] == 1); - ULONG FaultAddress = (ULONG)LocalExceptionRecord.ExceptionInformation[1]; + ULONG FaultAddress = (ULONG)PHYS_TO_REAL(LocalExceptionRecord.ExceptionInformation[1]); /* Make sure this was an access violation */ ASSERT(LocalExceptionRecord.ExceptionCode == EXCEPTION_ACCESS_VIOLATION); diff --git a/reactos/subsystems/mvdm/ntvdm/ems.c b/reactos/subsystems/mvdm/ntvdm/ems.c index 6770a438204..f02c4c45324 100644 --- a/reactos/subsystems/mvdm/ntvdm/ems.c +++ b/reactos/subsystems/mvdm/ntvdm/ems.c @@ -23,7 +23,7 @@ static RTL_BITMAP AllocBitmap; static ULONG BitmapBuffer[(EMS_TOTAL_PAGES + sizeof(ULONG) - 1) / sizeof(ULONG)]; static EMS_PAGE PageTable[EMS_TOTAL_PAGES]; static EMS_HANDLE HandleTable[EMS_MAX_HANDLES]; -static PVOID Mapping[EMS_PHYSICAL_PAGES] = { NULL }; +static PVOID Mapping[EMS_PHYSICAL_PAGES] = {{NULL}}; /* PRIVATE FUNCTIONS **********************************************************/ @@ -42,7 +42,7 @@ static USHORT EmsFree(USHORT Handle) Entry = Entry->Flink) { PEMS_PAGE PageEntry = (PEMS_PAGE)CONTAINING_RECORD(Entry, EMS_PAGE, Entry); - ULONG PageNumber = (ULONG)(((ULONG_PTR)PageEntry - (ULONG_PTR)PageTable) / sizeof(EMS_PAGE)); + ULONG PageNumber = ARRAY_INDEX(PageEntry, PageTable); /* Free the page */ RtlClearBits(&AllocBitmap, PageNumber, 1); @@ -223,10 +223,10 @@ static VOID WINAPI EmsIntHandler(LPWORD Stack) break; } - SourcePtr = (PUCHAR)(EMS_ADDRESS - + ARRAY_INDEX(PageEntry, PageTable) - * EMS_PAGE_SIZE - + Data->SourceOffset); + SourcePtr = (PUCHAR)REAL_TO_PHYS(EMS_ADDRESS + + ARRAY_INDEX(PageEntry, PageTable) + * EMS_PAGE_SIZE + + Data->SourceOffset); } else { @@ -253,10 +253,10 @@ static VOID WINAPI EmsIntHandler(LPWORD Stack) break; } - DestPtr = (PUCHAR)(EMS_ADDRESS - + ARRAY_INDEX(PageEntry, PageTable) - * EMS_PAGE_SIZE - + Data->DestOffset); + DestPtr = (PUCHAR)REAL_TO_PHYS(EMS_ADDRESS + + ARRAY_INDEX(PageEntry, PageTable) + * EMS_PAGE_SIZE + + Data->DestOffset); } else { @@ -324,7 +324,7 @@ VOID EmsInitialize(VOID) InitializeListHead(&HandleTable[i].PageList); } - MemInstallFastMemoryHook(SEG_OFF_TO_PTR(EMS_SEGMENT, 0), + MemInstallFastMemoryHook((PVOID)TO_LINEAR(EMS_SEGMENT, 0), EMS_PHYSICAL_PAGES * EMS_PAGE_SIZE, EmsReadMemory, EmsWriteMemory); @@ -334,6 +334,6 @@ VOID EmsInitialize(VOID) VOID EmsCleanup(VOID) { - MemRemoveFastMemoryHook(SEG_OFF_TO_PTR(EMS_SEGMENT, 0), + MemRemoveFastMemoryHook((PVOID)TO_LINEAR(EMS_SEGMENT, 0), EMS_PHYSICAL_PAGES * EMS_PAGE_SIZE); } diff --git a/reactos/subsystems/mvdm/ntvdm/memory.c b/reactos/subsystems/mvdm/ntvdm/memory.c index c838299b5f6..54c2e950dc8 100644 --- a/reactos/subsystems/mvdm/ntvdm/memory.c +++ b/reactos/subsystems/mvdm/ntvdm/memory.c @@ -36,7 +36,7 @@ typedef struct _MEM_HOOK } MEM_HOOK, *PMEM_HOOK; static LIST_ENTRY HookList; -static PMEM_HOOK PageTable[TOTAL_PAGES]; +static PMEM_HOOK PageTable[TOTAL_PAGES] = {{NULL}}; /* PRIVATE FUNCTIONS **********************************************************/ @@ -145,8 +145,6 @@ MemRead(ULONG Address, PVOID Buffer, ULONG Size) ULONG FirstPage = Address >> 12; ULONG LastPage = (Address + Size - 1) >> 12; - MemFastMoveMemory(Buffer, REAL_TO_PHYS(Address), Size); - if (FirstPage == LastPage) { ReadPage(PageTable[FirstPage], Address, Buffer, Size); @@ -538,8 +536,7 @@ MemCleanup(VOID) SIZE_T MemorySize = MAX_ADDRESS; PLIST_ENTRY Pointer; - // while (!IsListEmpty(&HookList)) - while (HookList.Flink != &HookList) + while (!IsListEmpty(&HookList)) { Pointer = RemoveHeadList(&HookList); RtlFreeHeap(RtlGetProcessHeap(), 0, CONTAINING_RECORD(Pointer, MEM_HOOK, Entry));