From 32001136aed0b9465f1a85fa51e4e1e45314ec0e Mon Sep 17 00:00:00 2001 From: RadWolfie Date: Mon, 30 Mar 2020 06:29:48 -0500 Subject: [PATCH] replace hardcode addresses to macro for AddressRanges files --- src/common/AddressRanges.cpp | 40 +++++++++++------------ src/common/AddressRanges.h | 61 ++++++++++++++++++++++++++++++++++++ 2 files changed, 81 insertions(+), 20 deletions(-) diff --git a/src/common/AddressRanges.cpp b/src/common/AddressRanges.cpp index 3eb183413..2bd22e187 100644 --- a/src/common/AddressRanges.cpp +++ b/src/common/AddressRanges.cpp @@ -47,26 +47,26 @@ const _XboxAddressRanges XboxAddressRanges[] = { #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"), + // Entry : Start , End , Size , Protect , RangeFlags , Comment + RANGE_ENTRY(USER_ADDRESS1_BASE, USER_ADDRESS1_END, USER_ADDRESS1_SIZE, PROT_XRW, SYSTEM_ALL | MAY_FAIL, "MemLowVirtual (General Xbox type) lower 64 MB Optional (already reserved via virtual_memory_placeholder)"), + RANGE_ENTRY(USER_ADDRESS2_BASE, USER_ADDRESS2_END, USER_ADDRESS2_SIZE, PROT_XRW, SYSTEM_128MB | MAY_FAIL, "MemLowVirtual (Chihiro / DevKit) ^ + upper 64 MB"), + RANGE_ENTRY(PHYSICAL_MAP1_BASE, PHYSICAL_MAP1_END, PHYSICAL_MAP1_SIZE, PROT_UNH, SYSTEM_ALL , "MemPhysical (General Xbox type) lower 64 MB"), + RANGE_ENTRY(PHYSICAL_MAP2_BASE, PHYSICAL_MAP2_END, PHYSICAL_MAP2_SIZE, PROT_UNH, SYSTEM_128MB , "MemPhysical (Chihiro / DevKit) ^ + upper 64 MB"), + RANGE_ENTRY(DEVKIT_MEMORY_BASE, DEVKIT_MEMORY_END, DEVKIT_MEMORY_SIZE, PROT_NAC, SYSTEM_DEVKIT , "DevKitMemory"), // TODO : Check reserved range (might behave like MemTiled) + RANGE_ENTRY(PAGE_TABLES_BASE , PAGE_TABLES_END , PAGE_TABLES_SIZE , PROT_RW , SYSTEM_ALL , "MemPageTable"), // See PAGE_TABLES_SIZE, which contains one 4 byte entry per PAGE_SIZE + RANGE_ENTRY(SYSTEM_MEMORY_BASE, SYSTEM_MEMORY_END, SYSTEM_MEMORY_SIZE, PROT_RW , SYSTEM_ALL | MAY_FAIL, "SystemMemory Optional"), // TODO : Check reserved range (might behave like MemTiled) + RANGE_ENTRY(TILED_MEMORY_BASE , TILED_MEMORY_END , TILED_MEMORY_SIZE , PROT_UNH, SYSTEM_ALL , "MemTiled Optional (even though it can't be reserved, MapViewOfFileEx to this range still works!?)"), + RANGE_ENTRY(NV2A_DEVICE1_BASE , NV2A_DEVICE1_END , NV2A_DEVICE1_SIZE , PROT_NAC, SYSTEM_ALL , "DeviceNV2A_a (GPU)"), + RANGE_ENTRY(NV2A_PRAMIN_BASE , NV2A_PRAMIN_END , NV2A_PRAMIN_SIZE1 , PROT_RW , SYSTEM_ALL , "MemNV2APRAMIN"), + RANGE_ENTRY(NV2A_DEVICE2_BASE , NV2A_DEVICE2_END , NV2A_DEVICE2_SIZE , PROT_NAC, SYSTEM_ALL , "DeviceNV2A_b (GPU)"), + RANGE_ENTRY(APU_DEVICE_BASE , APU_DEVICE_END , APU_DEVICE_SIZE , PROT_NAC, SYSTEM_ALL , "DeviceAPU"), + RANGE_ENTRY(AC97_DEVICE_BASE , AC97_DEVICE_END , AC97_DEVICE_SIZE , PROT_NAC, SYSTEM_ALL , "DeviceAC97 (ACI)"), + RANGE_ENTRY(USB_DEVICE_BASE , USB_DEVICE_END , USB_DEVICE_SIZE , PROT_NAC, SYSTEM_ALL , "DeviceUSB"), + RANGE_ENTRY(NVNET_DEVICE_BASE , NVNET_DEVICE_END , NVNET_DEVICE_SIZE , PROT_NAC, SYSTEM_ALL , "DeviceNVNet"), + RANGE_ENTRY(FLASH_DEVICE1_BASE, FLASH_DEVICE1_END, FLASH_DEVICEN_SIZE, PROT_NAC, SYSTEM_ALL , "DeviceFlash_a (Flash mirror 1)"), + RANGE_ENTRY(FLASH_DEVICE2_BASE, FLASH_DEVICE2_END, FLASH_DEVICEN_SIZE, PROT_NAC, SYSTEM_ALL , "DeviceFlash_b (Flash mirror 2)"), + RANGE_ENTRY(FLASH_DEVICE3_BASE, FLASH_DEVICE3_END, FLASH_DEVICEN_SIZE, PROT_NAC, SYSTEM_ALL , "DeviceFlash_c (Flash mirror 3)"), + RANGE_ENTRY(FLASH_DEVICE4_BASE, FLASH_DEVICE4_END, FLASH_DEVICEN_SIZE, 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 }; diff --git a/src/common/AddressRanges.h b/src/common/AddressRanges.h index 781b2c224..7f025fd55 100644 --- a/src/common/AddressRanges.h +++ b/src/common/AddressRanges.h @@ -32,6 +32,14 @@ #define KB(x) ((x) * 1024 ) // = 0x00000400 #define MB(x) ((x) * KB(1024)) // = 0x00100000 +#define USER_ADDRESS1_BASE 0x00010000 +#define USER_ADDRESS1_SIZE (MB(64) - KB(64)) // = 0x03FF0000 +#define USER_ADDRESS1_END (USER_ADDRESS1_BASE + USER_ADDRESS1_SIZE - 1) // 0x03FFFFFF + +#define USER_ADDRESS2_BASE 0x04000000 +#define USER_ADDRESS2_SIZE (MB(64)) // = 0x04000000 +#define USER_ADDRESS2_END (USER_ADDRESS2_BASE + USER_ADDRESS2_SIZE - 1) // 0x07FFFFFF + // Base addresses of various components #define KSEG0_BASE 0x80000000 @@ -39,6 +47,14 @@ #define PHYSICAL_MAP_SIZE (MB(256)) // = 0x10000000 #define PHYSICAL_MAP_END (PHYSICAL_MAP_BASE + PHYSICAL_MAP_SIZE - 1) // 0x8FFFFFFF +#define PHYSICAL_MAP1_BASE 0x80000000 +#define PHYSICAL_MAP1_SIZE (MB(64)) // = 0x04000000 +#define PHYSICAL_MAP1_END (PHYSICAL_MAP1_BASE + PHYSICAL_MAP1_SIZE - 1) // 0x83FFFFFF + +#define PHYSICAL_MAP2_BASE 0x84000000 +#define PHYSICAL_MAP2_SIZE (MB(64)) // = 0x04000000 +#define PHYSICAL_MAP2_END (PHYSICAL_MAP2_BASE + PHYSICAL_MAP2_SIZE - 1) // 0x8FFFFFFF + #define CONTIGUOUS_MEMORY_BASE KSEG0_BASE // = 0x80000000 #define XBOX_CONTIGUOUS_MEMORY_SIZE (MB(64)) #define CHIHIRO_CONTIGUOUS_MEMORY_SIZE (MB(128)) @@ -55,6 +71,10 @@ #define SYSTEM_MEMORY_SIZE (MB(512)) // = 0x20000000 #define SYSTEM_MEMORY_END (SYSTEM_MEMORY_BASE + SYSTEM_MEMORY_SIZE - 1) // 0xEFFFFFFF +#define TILED_MEMORY_BASE 0xF0000000 +#define TILED_MEMORY_SIZE (MB(64)) // = 0x04000000 +#define TILED_MEMORY_END (TILED_MEMORY_BASE + TILED_MEMORY_SIZE - 1) // 0xF3FFFFFF + #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 @@ -63,10 +83,51 @@ #define XBOX_UNCACHED_SIZE (MB(128 - 4)) // = 0x07C00000 #define XBOX_UNCACHED_END (XBOX_UNCACHED_BASE + XBOX_UNCACHED_SIZE - 1) // - 0xFFBFFFFF +#define NV2A_DEVICE1_BASE 0xFD000000 +#define NV2A_DEVICE1_SIZE (MB(7)) // = 0x00700000 +#define NV2A_DEVICE1_END (NV2A_DEVICE1_BASE + NV2A_DEVICE1_SIZE - 1) // 0xFD6FFFFF + +#define NV2A_PRAMIN_BASE 0xFD700000 +#define NV2A_PRAMIN_SIZE1 (MB(1)) // = 0x00100000 // TODO: Might be best to merge PCIDevice.h's address ranges into this header file. +#define NV2A_PRAMIN_END (NV2A_PRAMIN_BASE + NV2A_PRAMIN_SIZE1 - 1) // 0xFD7FFFFF + +#define NV2A_DEVICE2_BASE 0xFD800000 +#define NV2A_DEVICE2_SIZE (MB(8)) // = 0x00800000 +#define NV2A_DEVICE2_END (NV2A_DEVICE2_BASE + NV2A_DEVICE2_SIZE - 1) // 0xFDFFFFFF + +#define APU_DEVICE_BASE 0xFE800000 +#define APU_DEVICE_SIZE (KB(512)) // = 0x00080000 +#define APU_DEVICE_END (APU_DEVICE_BASE + APU_DEVICE_SIZE - 1) // 0xFE87FFFF + +#define AC97_DEVICE_BASE 0xFEC00000 +#define AC97_DEVICE_SIZE (KB(4)) // = 0x0001000 +#define AC97_DEVICE_END (AC97_DEVICE_BASE + AC97_DEVICE_SIZE - 1) // 0xFEC00FFF + +#define USB_DEVICE_BASE 0xFED00000 +#define USB_DEVICE_SIZE (KB(4)) // = 0x0001000 +#define USB_DEVICE_END (USB_DEVICE_BASE + USB_DEVICE_SIZE - 1) // 0xFED00FFF + +#define NVNET_DEVICE_BASE 0xFEF00000 +#define NVNET_DEVICE_SIZE (KB(1)) // = 0x00000400 +#define NVNET_DEVICE_END (NVNET_DEVICE_BASE + NVNET_DEVICE_SIZE - 1) // 0xFEF003FF + #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 +#define FLASH_DEVICEN_SIZE (MB(4)) // = 0x00400000 +#define FLASH_DEVICE1_BASE 0xFF000000 +#define FLASH_DEVICE1_END (FLASH_DEVICE1_BASE + FLASH_DEVICEN_SIZE - 1) // 0xFF3FFFFF + +#define FLASH_DEVICE2_BASE 0xFF400000 +#define FLASH_DEVICE2_END (FLASH_DEVICE2_BASE + FLASH_DEVICEN_SIZE - 1) // 0xFF7FFFFF + +#define FLASH_DEVICE3_BASE 0xFF800000 +#define FLASH_DEVICE3_END (FLASH_DEVICE3_BASE + FLASH_DEVICEN_SIZE - 1) // 0xFFBFFFFF + +#define FLASH_DEVICE4_BASE 0xFFC00000 +#define FLASH_DEVICE4_END (FLASH_DEVICE4_BASE + FLASH_DEVICEN_SIZE - 1) // 0xFFFFFFFF + // Miscellaneous base addresses #define XBE_IMAGE_BASE 0x00010000 #define PAGE_DIRECTORY_BASE 0xC0300000