From 2ead1e0fe02c9fda174ccd888b671ee2977d8f3d Mon Sep 17 00:00:00 2001 From: RadWolfie Date: Mon, 30 Mar 2020 04:04:38 -0500 Subject: [PATCH] move address ranges into AddressRanges header file --- src/common/AddressRanges.cpp | 44 +++++++ src/common/AddressRanges.h | 118 ++++++++++++------- src/common/ReserveAddressRanges.cpp | 9 +- src/common/xbe/Xbe.cpp | 1 + src/core/kernel/init/CxbxKrnl.h | 71 +---------- src/core/kernel/memory-manager/VMManager.cpp | 1 + src/core/kernel/memory-manager/VMManager.h | 10 -- src/loader/cxbxr-ldr.cpp | 3 + 8 files changed, 131 insertions(+), 126 deletions(-) diff --git a/src/common/AddressRanges.cpp b/src/common/AddressRanges.cpp index 103a35101..3eb183413 100644 --- a/src/common/AddressRanges.cpp +++ b/src/common/AddressRanges.cpp @@ -25,9 +25,53 @@ // * // ****************************************************************** +#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers +#include // For PAGE_READWRITE, PAGE_EXECUTE_READWRITE, and PAGE_NOACCESS + #include "util/std_extend.hpp" #include "AddressRanges.h" +// NOTE: Cannot be use in the header file. +// For InitialMemoryProtection field only. Memory page protection usage, for use by VirtualAlloc +// Shortend symbol aliasses for memory page protection +#define PROT_UNH 0 // UNHANDLED +#define PROT_RW PAGE_READWRITE +#define PROT_XRW PAGE_EXECUTE_READWRITE +#define PROT_NAC PAGE_NOACCESS + +const _XboxAddressRanges XboxAddressRanges[] = { +#ifdef DEBUG + #define RANGE_ENTRY(START, END, SIZE, PROT, FLAGS, COMMENT) { START, END, SIZE, PROT, FLAGS, COMMENT } +#else + #define RANGE_ENTRY(START, END, SIZE, PROT, FLAGS, COMMENT) { START, SIZE, PROT, FLAGS } +#endif + // See http://xboxdevwiki.net/Memory + // and http://xboxdevwiki.net/Boot_Process#Paging + // Entry : Start , End , Size , Protect , RangeFlags , Comment + RANGE_ENTRY(0x00010000, 0x03FFFFFF, MB( 64) - KB(64), PROT_XRW, SYSTEM_ALL | MAY_FAIL, "MemLowVirtual (General Xbox type) lower 64 MB Optional (already reserved via virtual_memory_placeholder)"), + RANGE_ENTRY(0x04000000, 0x07FFFFFF, MB( 64) , PROT_XRW, SYSTEM_128MB | MAY_FAIL, "MemLowVirtual (Chihiro / DevKit) ^ + upper 64 MB"), + RANGE_ENTRY(0x80000000, 0x83FFFFFF, MB( 64) , PROT_UNH, SYSTEM_ALL , "MemPhysical (General Xbox type) lower 64 MB"), + RANGE_ENTRY(0x84000000, 0x87FFFFFF, MB( 64) , PROT_UNH, SYSTEM_128MB , "MemPhysical (Chihiro / DevKit) ^ + upper 64 MB"), + RANGE_ENTRY(0xB0000000, 0xBFFFFFFF, MB(256) , PROT_NAC, SYSTEM_DEVKIT , "DevKitMemory"), // TODO : Check reserved range (might behave like MemTiled) + RANGE_ENTRY(0xC0000000, 0xC03FFFFF, MB( 4) , PROT_RW, SYSTEM_ALL , "MemPageTable"), // See PAGE_TABLES_SIZE, which contains one 4 byte entry per PAGE_SIZE + RANGE_ENTRY(0xD0000000, 0xEFFFFFFF, MB(512) , PROT_RW, SYSTEM_ALL | MAY_FAIL, "SystemMemory Optional"), // TODO : Check reserved range (might behave like MemTiled) + RANGE_ENTRY(0xF0000000, 0xF3FFFFFF, MB( 64) , PROT_UNH, SYSTEM_ALL , "MemTiled Optional (even though it can't be reserved, MapViewOfFileEx to this range still works!?)"), + RANGE_ENTRY(0xFD000000, 0xFD6FFFFF, MB( 7) , PROT_NAC, SYSTEM_ALL , "DeviceNV2A_a (GPU)"), + RANGE_ENTRY(0xFD700000, 0xFD7FFFFF, MB( 1) , PROT_RW, SYSTEM_ALL , "MemNV2APRAMIN"), + RANGE_ENTRY(0xFD800000, 0xFDFFFFFF, MB( 8) , PROT_NAC, SYSTEM_ALL , "DeviceNV2A_b (GPU)"), + RANGE_ENTRY(0xFE800000, 0xFE87FFFF, KB(512) , PROT_NAC, SYSTEM_ALL , "DeviceAPU"), + RANGE_ENTRY(0xFEC00000, 0xFEC00FFF, KB( 4) , PROT_NAC, SYSTEM_ALL , "DeviceAC97 (ACI)"), + RANGE_ENTRY(0xFED00000, 0xFED00FFF, KB( 4) , PROT_NAC, SYSTEM_ALL , "DeviceUSB"), + RANGE_ENTRY(0xFEF00000, 0xFEF003FF, KB( 1) , PROT_NAC, SYSTEM_ALL , "DeviceNVNet"), + RANGE_ENTRY(0xFF000000, 0xFF3FFFFF, MB( 4) , PROT_NAC, SYSTEM_ALL , "DeviceFlash_a (Flash mirror 1)"), + RANGE_ENTRY(0xFF400000, 0xFF7FFFFF, MB( 4) , PROT_NAC, SYSTEM_ALL , "DeviceFlash_b (Flash mirror 2)"), + RANGE_ENTRY(0xFF800000, 0xFFBFFFFF, MB( 4) , PROT_NAC, SYSTEM_ALL , "DeviceFlash_c (Flash mirror 3)"), + RANGE_ENTRY(0xFFC00000, 0xFFFFFFFF, MB( 4) , PROT_NAC, SYSTEM_ALL | MAY_FAIL, "DeviceFlash_d (Flash mirror 4) Optional (will probably fail reservation, which is acceptable - the 3 other mirrors work just fine"), + #undef RANGE_ENTRY +}; + +const size_t XboxAddressRanges_size = ARRAY_SIZE(XboxAddressRanges); + bool AddressRangeMatchesFlags(const int index, const unsigned int flags) { return XboxAddressRanges[index].RangeFlags & flags; diff --git a/src/common/AddressRanges.h b/src/common/AddressRanges.h index 1723cf2e0..781b2c224 100644 --- a/src/common/AddressRanges.h +++ b/src/common/AddressRanges.h @@ -29,31 +29,90 @@ #include // For uint32_t -#ifndef CXBXR_EMU_EXPORTS // Only trim Windows symbols in cxbxr-ldr.exe, not in cxbxr-emu.dll (TODO : What about cxbxr.exe and cxbx.exe?) -#include -#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers -#endif // CXBXR_EMU_EXPORTS - -#undef FIELD_OFFSET // prevent macro redefinition warnings -#include // For DWORD, CALLBACK, VirtualAlloc, LPVOID, SIZE_T, HMODULE - #define KB(x) ((x) * 1024 ) // = 0x00000400 #define MB(x) ((x) * KB(1024)) // = 0x00100000 +// Base addresses of various components +#define KSEG0_BASE 0x80000000 + +#define PHYSICAL_MAP_BASE 0x80000000 +#define PHYSICAL_MAP_SIZE (MB(256)) // = 0x10000000 +#define PHYSICAL_MAP_END (PHYSICAL_MAP_BASE + PHYSICAL_MAP_SIZE - 1) // 0x8FFFFFFF + +#define CONTIGUOUS_MEMORY_BASE KSEG0_BASE // = 0x80000000 +#define XBOX_CONTIGUOUS_MEMORY_SIZE (MB(64)) +#define CHIHIRO_CONTIGUOUS_MEMORY_SIZE (MB(128)) + +#define DEVKIT_MEMORY_BASE 0xB0000000 +#define DEVKIT_MEMORY_SIZE (MB(256)) // = 0x10000000 +#define DEVKIT_MEMORY_END (DEVKIT_MEMORY_BASE + DEVKIT_MEMORY_SIZE - 1) // 0xBFFFFFFF + +#define PAGE_TABLES_BASE 0xC0000000 +#define PAGE_TABLES_SIZE (MB(4)) // = 0x00400000 +#define PAGE_TABLES_END (PAGE_TABLES_BASE + PAGE_TABLES_SIZE - 1) // 0xC03FFFFF + +#define SYSTEM_MEMORY_BASE 0xD0000000 +#define SYSTEM_MEMORY_SIZE (MB(512)) // = 0x20000000 +#define SYSTEM_MEMORY_END (SYSTEM_MEMORY_BASE + SYSTEM_MEMORY_SIZE - 1) // 0xEFFFFFFF + +#define XBOX_WRITE_COMBINED_BASE 0xF0000000 // WC (The WC memory is another name of the tiled memory) +#define XBOX_WRITE_COMBINED_SIZE (MB(128)) // = 0x08000000 +#define XBOX_WRITE_COMBINED_END (XBOX_WRITE_COMBINED_BASE + XBOX_WRITE_COMBINED_SIZE - 1) // 0xF7FFFFFF + +#define XBOX_UNCACHED_BASE 0xF8000000 // UC +#define XBOX_UNCACHED_SIZE (MB(128 - 4)) // = 0x07C00000 +#define XBOX_UNCACHED_END (XBOX_UNCACHED_BASE + XBOX_UNCACHED_SIZE - 1) // - 0xFFBFFFFF + +#define XBOX_FLASH_ROM_BASE 0xFFF00000 +#define XBOX_FLASH_ROM_SIZE (MB(1)) // = 0x00100000 +#define XBOX_FLASH_ROM_END (XBOX_FLASH_ROM_BASE + XBOX_FLASH_ROM_SIZE - 1) // - 0xFFFFFFF + +// Miscellaneous base addresses +#define XBE_IMAGE_BASE 0x00010000 +#define PAGE_DIRECTORY_BASE 0xC0300000 +#define NV2A_INIT_VECTOR 0xFF000008 + +// Define virtual base and alternate virtual base of kernel +#define XBOX_KERNEL_BASE (PHYSICAL_MAP_BASE + XBE_IMAGE_BASE) +#define KERNEL_PHYSICAL_ADDRESS XBE_IMAGE_BASE // = 0x10000 +#define KERNEL_SIZE sizeof(DUMMY_KERNEL) +#define KERNEL_STACK_SIZE 12288 // 0x03000, needed by PsCreateSystemThreadEx, however the current implementation doesn't use it + +// Miscellaneous memory variables +// Xbox pages are (1 << 12) = 0x00001000 = 4096 bytes in size. Large pages are 4 MiB instead +// NOTE: PAGE_SIZE is also defined in xfile.h (oxdk) and linux_wrapper.h (oxdk) +#define PAGE_SHIFT 12 // 2^12 = 4 KiB +#define PAGE_SIZE (1 << PAGE_SHIFT) +#define PAGE_MASK (PAGE_SIZE - 1) + +#define LARGE_PAGE_SHIFT 22 // 2^22 = 4 MiB +#define LARGE_PAGE_SIZE (1 << LARGE_PAGE_SHIFT) // = 0x00400000 = 4 MiB +#define LARGE_PAGE_MASK (LARGE_PAGE_SIZE - 1) + +#define BYTES_IN_PHYSICAL_MAP (MB(256)) // this refers to the system RAM physical window 0x80000000 - 0x8FFFFFFF +#define MAXIMUM_ZERO_BITS 21 // for XbAllocateVirtualMemory +#define MAX_VIRTUAL_ADDRESS 0xFFFFFFFF + +#define LOWEST_USER_ADDRESS XBE_IMAGE_BASE // = 0x00010000 +#define HIGHEST_USER_ADDRESS 0x7FFEFFFF +#define HIGHEST_VMA_ADDRESS (HIGHEST_USER_ADDRESS - X64KB) // for NtAllocateVirtualMemory +#define USER_MEMORY_SIZE (HIGHEST_USER_ADDRESS - LOWEST_USER_ADDRESS + 1) // 0x7FFE0000 = 2 GiB - 128 KiB + +// Memory size per system +#define XBOX_MEMORY_SIZE (MB(64)) +#define CHIHIRO_MEMORY_SIZE (MB(128)) + // Windows' address space allocation granularity; // See https://blogs.msdn.microsoft.com/oldnewthing/20031008-00/?p=42223 const int BLOCK_SIZE = KB(64); -// One allocation block consists of 16 pages (since PAGE_SIZE is 4 kilobytes) -const int PAGE_SIZE = KB(4); - -const struct { +extern const struct _XboxAddressRanges { uint32_t Start; #ifdef DEBUG uint32_t End; // TODO : Add validation that this End corresponds to specified Size #endif uint32_t Size; - DWORD InitialMemoryProtection; // Memory page protection, for use by VirtualAlloc + unsigned long InitialMemoryProtection; // Memory page protection, for use by VirtualAlloc // Shortend symbol aliasses for memory page protection #define PROT_UNH 0 // UNHANDLED #define PROT_RW PAGE_READWRITE @@ -72,36 +131,9 @@ const struct { #ifdef DEBUG const char *Comment; #endif -} XboxAddressRanges[] = { -#ifdef DEBUG - #define RANGE_ENTRY(START, END, SIZE, PROT, FLAGS, COMMENT) { START, END, SIZE, PROT, FLAGS, COMMENT } -#else - #define RANGE_ENTRY(START, END, SIZE, PROT, FLAGS, COMMENT) { START, SIZE, PROT, FLAGS } -#endif - // See http://xboxdevwiki.net/Memory - // and http://xboxdevwiki.net/Boot_Process#Paging - // Entry : Start , End , Size , Protect , RangeFlags , Comment - RANGE_ENTRY(0x00010000, 0x03FFFFFF, MB( 64) - KB(64), PROT_XRW, SYSTEM_ALL | MAY_FAIL, "MemLowVirtual (General Xbox type) lower 64 MB Optional (already reserved via virtual_memory_placeholder)"), - RANGE_ENTRY(0x04000000, 0x07FFFFFF, MB( 64) , PROT_XRW, SYSTEM_128MB | MAY_FAIL, "MemLowVirtual (Chihiro / DevKit) ^ + upper 64 MB"), - RANGE_ENTRY(0x80000000, 0x83FFFFFF, MB( 64) , PROT_UNH, SYSTEM_ALL , "MemPhysical (General Xbox type) lower 64 MB"), - RANGE_ENTRY(0x84000000, 0x87FFFFFF, MB( 64) , PROT_UNH, SYSTEM_128MB , "MemPhysical (Chihiro / DevKit) ^ + upper 64 MB"), - RANGE_ENTRY(0xB0000000, 0xBFFFFFFF, MB(256) , PROT_NAC, SYSTEM_DEVKIT , "DevKitMemory"), // TODO : Check reserved range (might behave like MemTiled) - RANGE_ENTRY(0xC0000000, 0xC03FFFFF, MB( 4) , PROT_RW, SYSTEM_ALL , "MemPageTable"), // See PAGE_TABLES_SIZE, which contains one 4 byte entry per PAGE_SIZE - RANGE_ENTRY(0xD0000000, 0xEFFFFFFF, MB(512) , PROT_RW, SYSTEM_ALL | MAY_FAIL, "SystemMemory Optional"), // TODO : Check reserved range (might behave like MemTiled) - RANGE_ENTRY(0xF0000000, 0xF3FFFFFF, MB( 64) , PROT_UNH, SYSTEM_ALL , "MemTiled Optional (even though it can't be reserved, MapViewOfFileEx to this range still works!?)"), - RANGE_ENTRY(0xFD000000, 0xFD6FFFFF, MB( 7) , PROT_NAC, SYSTEM_ALL , "DeviceNV2A_a (GPU)"), - RANGE_ENTRY(0xFD700000, 0xFD7FFFFF, MB( 1) , PROT_RW, SYSTEM_ALL , "MemNV2APRAMIN"), - RANGE_ENTRY(0xFD800000, 0xFDFFFFFF, MB( 8) , PROT_NAC, SYSTEM_ALL , "DeviceNV2A_b (GPU)"), - RANGE_ENTRY(0xFE800000, 0xFE87FFFF, KB(512) , PROT_NAC, SYSTEM_ALL , "DeviceAPU"), - RANGE_ENTRY(0xFEC00000, 0xFEC00FFF, KB( 4) , PROT_NAC, SYSTEM_ALL , "DeviceAC97 (ACI)"), - RANGE_ENTRY(0xFED00000, 0xFED00FFF, KB( 4) , PROT_NAC, SYSTEM_ALL , "DeviceUSB"), - RANGE_ENTRY(0xFEF00000, 0xFEF003FF, KB( 1) , PROT_NAC, SYSTEM_ALL , "DeviceNVNet"), - RANGE_ENTRY(0xFF000000, 0xFF3FFFFF, MB( 4) , PROT_NAC, SYSTEM_ALL , "DeviceFlash_a (Flash mirror 1)"), - RANGE_ENTRY(0xFF400000, 0xFF7FFFFF, MB( 4) , PROT_NAC, SYSTEM_ALL , "DeviceFlash_b (Flash mirror 2)"), - RANGE_ENTRY(0xFF800000, 0xFFBFFFFF, MB( 4) , PROT_NAC, SYSTEM_ALL , "DeviceFlash_c (Flash mirror 3)"), - RANGE_ENTRY(0xFFC00000, 0xFFFFFFFF, MB( 4) , PROT_NAC, SYSTEM_ALL | MAY_FAIL, "DeviceFlash_d (Flash mirror 4) Optional (will probably fail reservation, which is acceptable - the 3 other mirrors work just fine"), - #undef RANGE_ENTRY -}; +} XboxAddressRanges[]; + +extern const size_t XboxAddressRanges_size; #define BLOCK_REGION_DEVKIT_INDEX_BEGIN 0 #define BLOCK_REGION_DEVKIT_INDEX_END 4096 diff --git a/src/common/ReserveAddressRanges.cpp b/src/common/ReserveAddressRanges.cpp index 1c7bd3837..e95f1e27d 100644 --- a/src/common/ReserveAddressRanges.cpp +++ b/src/common/ReserveAddressRanges.cpp @@ -26,6 +26,9 @@ // * // ****************************************************************** +#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers +#include // For DWORD, CALLBACK, VirtualAlloc, LPVOID, SIZE_T, HMODULE + // NOTE: Cannot be use in loader project due to force exclude std libraries. //#define DEBUG // Uncomment whenever need to verify memory leaks or bad configure. @@ -204,7 +207,7 @@ void FreeMemoryRange(int index, uint32_t blocks_reserved[384]) bool ReserveAddressRanges(const unsigned int system, uint32_t blocks_reserved[384]) { // Loop over all Xbox address ranges - for (size_t i = 0; i < ARRAY_SIZE(XboxAddressRanges); i++) { + for (size_t i = 0; i < XboxAddressRanges_size; i++) { // Skip address ranges that don't match the given flags if (!AddressRangeMatchesFlags(i, system)) continue; @@ -228,7 +231,7 @@ void FreeAddressRanges(const unsigned int system, unsigned int release_systems, return; } // Loop over all Xbox address ranges - for (size_t i = 0; i < ARRAY_SIZE(XboxAddressRanges); i++) { + for (size_t i = 0; i < XboxAddressRanges_size; i++) { // Skip address ranges that do match specific flag if (AddressRangeMatchesFlags(i, system)) continue; @@ -247,7 +250,7 @@ bool AttemptReserveAddressRanges(unsigned int* p_reserved_systems, uint32_t bloc size_t iLast = 0; unsigned int reserved_systems = *p_reserved_systems, clear_systems = 0; // Loop over all Xbox address ranges - for (size_t i = 0; i < ARRAY_SIZE(XboxAddressRanges); i++) { + for (size_t i = 0; i < XboxAddressRanges_size; i++) { // Once back to original spot, let's resume. if (i == iLast && clear_systems) { diff --git a/src/common/xbe/Xbe.cpp b/src/common/xbe/Xbe.cpp index d5c59c80e..4ac9a74c7 100644 --- a/src/common/xbe/Xbe.cpp +++ b/src/common/xbe/Xbe.cpp @@ -42,6 +42,7 @@ namespace xboxkrnl #include "common\crypto\EmuRsa.h" // For the RSA functions #include "core\hle\XAPI\Xapi.h" // For LDT_FROM_DASHBOARD #include "core\hle\D3D8\Direct3D9\Direct3D9.h" // For CxbxInitWindow +#include "common/AddressRanges.h" namespace fs = std::filesystem; diff --git a/src/core/kernel/init/CxbxKrnl.h b/src/core/kernel/init/CxbxKrnl.h index cc817ab97..b5fceadb5 100644 --- a/src/core/kernel/init/CxbxKrnl.h +++ b/src/core/kernel/init/CxbxKrnl.h @@ -26,6 +26,7 @@ #define CXBXKRNL_H #include "Cxbx.h" +#include "common\AddressRanges.h" #include "common\xbe\Xbe.h" #include "Logging.h" @@ -51,76 +52,6 @@ extern "C" { #define XBADDR_BITS 32 #define XBADDR_MAX UINT32_MAX -// Base addresses of various components -#define KSEG0_BASE 0x80000000 - -#define PHYSICAL_MAP_BASE 0x80000000 -#define PHYSICAL_MAP_SIZE (256 * ONE_MB) // = 0x10000000 -#define PHYSICAL_MAP_END (PHYSICAL_MAP_BASE + PHYSICAL_MAP_SIZE - 1) // 0x8FFFFFFF - -#define CONTIGUOUS_MEMORY_BASE KSEG0_BASE // = 0x80000000 -#define XBOX_CONTIGUOUS_MEMORY_SIZE (64 * ONE_MB) -#define CHIHIRO_CONTIGUOUS_MEMORY_SIZE (128 * ONE_MB) - -#define DEVKIT_MEMORY_BASE 0xB0000000 -#define DEVKIT_MEMORY_SIZE (256 * ONE_MB) // = 0x10000000 -#define DEVKIT_MEMORY_END (DEVKIT_MEMORY_BASE + DEVKIT_MEMORY_SIZE - 1) // 0xBFFFFFFF - -#define PAGE_TABLES_BASE 0xC0000000 -#define PAGE_TABLES_SIZE (4 * ONE_MB) // = 0x00400000 -#define PAGE_TABLES_END (PAGE_TABLES_BASE + PAGE_TABLES_SIZE - 1) - -#define SYSTEM_MEMORY_BASE 0xD0000000 -#define SYSTEM_MEMORY_SIZE (512 * ONE_MB) // = 0x20000000 -#define SYSTEM_MEMORY_END (SYSTEM_MEMORY_BASE + SYSTEM_MEMORY_SIZE - 1) // 0xEFFFFFFF - -#define XBOX_WRITE_COMBINED_BASE 0xF0000000 // WC (The WC memory is another name of the tiled memory) -#define XBOX_WRITE_COMBINED_SIZE (128 * ONE_MB) // = 0x08000000 -#define XBOX_WRITE_COMBINED_END (XBOX_WRITE_COMBINED_BASE + XBOX_WRITE_COMBINED_SIZE - 1) // - 0xF7FFFFFF - -#define XBOX_UNCACHED_BASE 0xF8000000 // UC -#define XBOX_UNCACHED_SIZE ((128 - 4) * ONE_MB) // = 0x07C00000 -#define XBOX_UNCACHED_END (XBOX_UNCACHED_BASE + XBOX_UNCACHED_SIZE - 1) // - 0xFFBFFFFF - -#define XBOX_FLASH_ROM_BASE 0xFFF00000 -#define XBOX_FLASH_ROM_SIZE (1 * ONE_MB) // = 0x00100000 -#define XBOX_FLASH_ROM_END (XBOX_FLASH_ROM_BASE + XBOX_FLASH_ROM_SIZE - 1) // - 0xFFFFFFF - -// Miscellaneous base addresses -#define XBE_IMAGE_BASE 0x00010000 -#define PAGE_DIRECTORY_BASE 0xC0300000 -#define NV2A_INIT_VECTOR 0xFF000008 - -// Define virtual base and alternate virtual base of kernel -#define XBOX_KERNEL_BASE (PHYSICAL_MAP_BASE + XBE_IMAGE_BASE) -#define KERNEL_PHYSICAL_ADDRESS XBE_IMAGE_BASE // = 0x10000 -#define KERNEL_SIZE sizeof(DUMMY_KERNEL) -#define KERNEL_STACK_SIZE 12288 // 0x03000, needed by PsCreateSystemThreadEx, however the current implementation doesn't use it - -// Miscellaneous memory variables -// Xbox pages are (1 << 12) = 0x00001000 = 4096 bytes in size. Large pages are 4 MiB instead -// NOTE: PAGE_SIZE is also defined in xfile.h (oxdk) and linux_wrapper.h (oxdk) -#define PAGE_SHIFT 12 // 2^12 = 4 KiB -#define PAGE_SIZE (1 << PAGE_SHIFT) -#define PAGE_MASK (PAGE_SIZE - 1) - -#define LARGE_PAGE_SHIFT 22 // 2^22 = 4 MiB -#define LARGE_PAGE_SIZE (1 << LARGE_PAGE_SHIFT) // = 0x00400000 = 4 MiB -#define LARGE_PAGE_MASK (LARGE_PAGE_SIZE - 1) - -#define BYTES_IN_PHYSICAL_MAP (256 * ONE_MB) // this refers to the system RAM physical window 0x80000000 - 0x8FFFFFFF -#define MAXIMUM_ZERO_BITS 21 // for XbAllocateVirtualMemory -#define MAX_VIRTUAL_ADDRESS 0xFFFFFFFF - -#define LOWEST_USER_ADDRESS XBE_IMAGE_BASE // = 0x00010000 -#define HIGHEST_USER_ADDRESS 0x7FFEFFFF -#define HIGHEST_VMA_ADDRESS (HIGHEST_USER_ADDRESS - X64KB) // for NtAllocateVirtualMemory -#define USER_MEMORY_SIZE (HIGHEST_USER_ADDRESS - LOWEST_USER_ADDRESS + 1) // 0x7FFE0000 = 2 GiB - 128 KiB - -// Memory size per system -#define XBOX_MEMORY_SIZE (64 * ONE_MB) -#define CHIHIRO_MEMORY_SIZE (128 * ONE_MB) - // Define virtual base addresses used by the system. #define XBOX_CONTIGUOUS_MEMORY_LIMIT 0x03FDF #define XBOX_INSTANCE_PHYSICAL_PAGE 0x03FE0 diff --git a/src/core/kernel/memory-manager/VMManager.cpp b/src/core/kernel/memory-manager/VMManager.cpp index ebf716a2a..3722c72cd 100644 --- a/src/core/kernel/memory-manager/VMManager.cpp +++ b/src/core/kernel/memory-manager/VMManager.cpp @@ -35,6 +35,7 @@ #define LOG_PREFIX CXBXR_MODULE::VMEM +#include "common/AddressRanges.h" #include "PoolManager.h" #include "Logging.h" #include "EmuShared.h" diff --git a/src/core/kernel/memory-manager/VMManager.h b/src/core/kernel/memory-manager/VMManager.h index 21e352622..5534ed635 100644 --- a/src/core/kernel/memory-manager/VMManager.h +++ b/src/core/kernel/memory-manager/VMManager.h @@ -28,16 +28,6 @@ #ifndef VMMANAGER_H #define VMMANAGER_H -// TODO: Need to move defines below into one header files. -#define SYSTEM_XBOX (1 << 1) -#define SYSTEM_DEVKIT (1 << 2) -#define SYSTEM_CHIHIRO (1 << 3) - -#define BLOCK_REGION_DEVKIT_INDEX_BEGIN 0 -#define BLOCK_REGION_DEVKIT_INDEX_END 4096 -#define BLOCK_REGION_SYSTEM_INDEX_BEGIN 4096 -#define BLOCK_REGION_SYSTEM_INDEX_END 12288 - #include "PhysicalMemory.h" diff --git a/src/loader/cxbxr-ldr.cpp b/src/loader/cxbxr-ldr.cpp index 8c1b8ef4e..f62ffa6b2 100644 --- a/src/loader/cxbxr-ldr.cpp +++ b/src/loader/cxbxr-ldr.cpp @@ -26,6 +26,9 @@ // * // ****************************************************************** +#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers +#include // For LPTSTR, FormatMessage, GetSystemInfo, etc + #include "..\Common\AddressRanges.h" #include "..\Common\ReserveAddressRanges.h"