From 3a9b91f9d7ca5024ae6f02578235d8a06b9f49ea Mon Sep 17 00:00:00 2001 From: Aleksandar Andrejevic Date: Fri, 24 Apr 2015 01:05:50 +0000 Subject: [PATCH] [NTVDM] When the VGA memory map is A0000-BFFFF, mirror the bottom 64 KB into the top. This should take care of all VGA addressing problems. svn path=/trunk/; revision=67377 --- reactos/subsystems/mvdm/ntvdm/hardware/video/vga.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/reactos/subsystems/mvdm/ntvdm/hardware/video/vga.c b/reactos/subsystems/mvdm/ntvdm/hardware/video/vga.c index 3562d793d7a..5e322b5cc1e 100644 --- a/reactos/subsystems/mvdm/ntvdm/hardware/video/vga.c +++ b/reactos/subsystems/mvdm/ntvdm/hardware/video/vga.c @@ -22,7 +22,7 @@ /* PRIVATE VARIABLES **********************************************************/ static CONST DWORD MemoryBase[] = { 0xA0000, 0xA0000, 0xB0000, 0xB8000 }; -static CONST DWORD MemoryLimit[] = { 0xAFFFF, 0xAFFFF, 0xB7FFF, 0xBFFFF }; +static CONST DWORD MemoryLimit[] = { 0xBFFFF, 0xAFFFF, 0xB7FFF, 0xBFFFF }; /* * Activate this line if you want to use the real @@ -622,7 +622,7 @@ static inline DWORD VgaGetAddressSize(VOID) static inline DWORD VgaTranslateReadAddress(DWORD Address) { - DWORD Offset = Address - VgaGetVideoBaseAddress(); + DWORD Offset = LOWORD(Address - VgaGetVideoBaseAddress()); BYTE Plane; /* Check for chain-4 and odd-even mode */ @@ -649,7 +649,7 @@ static inline DWORD VgaTranslateReadAddress(DWORD Address) static inline DWORD VgaTranslateWriteAddress(DWORD Address) { - DWORD Offset = Address - VgaGetVideoBaseAddress(); + DWORD Offset = LOWORD(Address - VgaGetVideoBaseAddress()); /* Check for chain-4 and odd-even mode */ if (VgaSeqRegisters[VGA_SEQ_MEM_REG] & VGA_SEQ_MEM_C4) @@ -1905,8 +1905,6 @@ VOID NTAPI VgaReadMemory(ULONG Address, PVOID Buffer, ULONG Size) PUCHAR BufPtr = (PUCHAR)Buffer; DPRINT("VgaReadMemory: Address 0x%08X, Size %lu\n", Address, Size); - Address = min(max(Address, VgaGetVideoBaseAddress()), VgaGetVideoLimitAddress()); - Size = min(Size, VgaGetVideoLimitAddress() - Address + 1); /* Ignore if video RAM access is disabled */ if ((VgaMiscRegister & VGA_MISC_RAM_ENABLED) == 0) return; @@ -1934,8 +1932,6 @@ BOOLEAN NTAPI VgaWriteMemory(ULONG Address, PVOID Buffer, ULONG Size) PUCHAR BufPtr = (PUCHAR)Buffer; DPRINT("VgaWriteMemory: Address 0x%08X, Size %lu\n", Address, Size); - Address = min(max(Address, VgaGetVideoBaseAddress()), VgaGetVideoLimitAddress()); - Size = min(Size, VgaGetVideoLimitAddress() - Address + 1); /* Ignore if video RAM access is disabled */ if ((VgaMiscRegister & VGA_MISC_RAM_ENABLED) == 0) return TRUE; -- 2.17.1