diff --git a/reactos/subsystems/mvdm/ntvdm/dos/dos32krnl/himem.h b/reactos/subsystems/mvdm/ntvdm/dos/dos32krnl/himem.h index eadd7d45bd0..0976ce35556 100644 --- a/reactos/subsystems/mvdm/ntvdm/dos/dos32krnl/himem.h +++ b/reactos/subsystems/mvdm/ntvdm/dos/dos32krnl/himem.h @@ -13,8 +13,8 @@ /* DEFINITIONS ****************************************************************/ #define XMS_ADDRESS 0x110000 // Just above HMA -#define XMS_BLOCKS 0x3BC0 // XMS_ADDRESS + (XMS_BLOCKS * XMS_BLOCK_SIZE) == 16 MB #define XMS_BLOCK_SIZE 1024 +#define XMS_BLOCKS ((MAX_ADDRESS - XMS_ADDRESS) / XMS_BLOCK_SIZE) #define XMS_MAX_HANDLES 16 // Specification: min 1, max 128, default 32 #define XMS_STATUS_SUCCESS 0x00 diff --git a/reactos/subsystems/mvdm/ntvdm/emulator.h b/reactos/subsystems/mvdm/ntvdm/emulator.h index 56ee6975110..2b2a56c79c4 100644 --- a/reactos/subsystems/mvdm/ntvdm/emulator.h +++ b/reactos/subsystems/mvdm/ntvdm/emulator.h @@ -23,6 +23,7 @@ #define MAX_SEGMENT 0xFFFF #define MAX_OFFSET 0xFFFF #define MAX_ADDRESS 0x1000000 // 16 MB of RAM; see also: kernel32/client/vdm.c!BaseGetVdmConfigInfo +C_ASSERT(0x100000 <= MAX_ADDRESS); // A minimum of 1 MB is required for PC emulation. #define SEG_OFF_TO_PTR(seg, off) \ (PVOID)((ULONG_PTR)BaseAddress + TO_LINEAR((seg), (off)))