mirror of
https://github.com/Rosalie241/RMG.git
synced 2026-07-11 01:24:01 +02:00
3rdParty: update rom size patch for mupen64plus-core
This commit is contained in:
@@ -131,6 +131,9 @@ EXPORT m64p_error CALL CoreShutdown(void)
|
||||
release_mem_base(g_mem_base);
|
||||
g_mem_base = NULL;
|
||||
|
||||
/* deallocate rom memory */
|
||||
release_mem_rom();
|
||||
|
||||
l_CoreInit = 0;
|
||||
return M64ERR_SUCCESS;
|
||||
}
|
||||
|
||||
+1
-1
@@ -58,7 +58,7 @@ static void get_pi_dma_handler(struct cart* cart, struct dd_controller* dd, uint
|
||||
|
||||
if (address >= MM_CART_ROM) {
|
||||
if (address >= MM_CART_DOM3) {
|
||||
/* 0x1fd00000 - 0xffffffff : dom3 addr2, cart rom */
|
||||
/* 0x1fd00000 - 0x7fffffff : dom3 addr2, cart rom */
|
||||
RW(cart, cart_dom3);
|
||||
}
|
||||
else {
|
||||
|
||||
+38
-7
@@ -222,12 +222,11 @@ enum { MB_RDRAM_DRAM_ALIGNMENT_REQUIREMENT = 64 * 1024 };
|
||||
|
||||
enum {
|
||||
MB_RDRAM_DRAM = 0,
|
||||
MB_CART_ROM = MB_RDRAM_DRAM + RDRAM_MAX_SIZE,
|
||||
MB_RSP_MEM = MB_CART_ROM + CART_ROM_MAX_SIZE,
|
||||
MB_RSP_MEM = MB_RDRAM_DRAM + RDRAM_MAX_SIZE,
|
||||
MB_DD_ROM = MB_RSP_MEM + SP_MEM_SIZE,
|
||||
MB_PIF_MEM = MB_DD_ROM + DD_ROM_MAX_SIZE,
|
||||
MB_MAX_SIZE = MB_PIF_MEM + PIF_ROM_SIZE + PIF_RAM_SIZE,
|
||||
MB_MAX_SIZE_FULL = 0x120000000,
|
||||
MB_MAX_SIZE_FULL = 0x20000000
|
||||
};
|
||||
|
||||
/* Use LSB of mem_base pointer to encode mem_base mode
|
||||
@@ -237,6 +236,9 @@ enum {
|
||||
#define MEM_BASE_PTR(mem_base) ((void*)((uintptr_t)(mem_base) & ~0x1))
|
||||
#define SET_MEM_BASE_MODE(mem_base) (mem_base = (void*)((uintptr_t)(mem_base) | 0x1))
|
||||
|
||||
static void* mem_rom = NULL;
|
||||
static uint32_t mem_rom_size = 0;
|
||||
|
||||
void* init_mem_base(void)
|
||||
{
|
||||
void* mem_base;
|
||||
@@ -277,13 +279,42 @@ void release_mem_base(void* mem_base)
|
||||
free(MEM_BASE_PTR(mem_base));
|
||||
}
|
||||
|
||||
void* init_mem_rom(uint32_t size)
|
||||
{
|
||||
if (size > mem_rom_size) {
|
||||
mem_rom = realloc(mem_rom, size);
|
||||
if (mem_rom == NULL)
|
||||
mem_rom_size = 0;
|
||||
else
|
||||
mem_rom_size = size;
|
||||
}
|
||||
|
||||
return mem_rom;
|
||||
}
|
||||
|
||||
void release_mem_rom(void)
|
||||
{
|
||||
if (mem_rom != NULL) {
|
||||
free(mem_rom);
|
||||
mem_rom = NULL;
|
||||
}
|
||||
|
||||
mem_rom_size = 0;
|
||||
}
|
||||
|
||||
uint32_t* mem_base_u32(void* mem_base, uint32_t address)
|
||||
{
|
||||
uint32_t* mem;
|
||||
|
||||
if (MEM_BASE_MODE(mem_base) == 0) {
|
||||
/* In full mem base mode, use simple pointer arithmetic */
|
||||
mem = (uint32_t*)((uint8_t*)mem_base + address);
|
||||
/* In full mem base mode, use simple pointer arithmetic
|
||||
* except for the rom, which is dynamically allocated
|
||||
*/
|
||||
if (address >= MM_CART_ROM && (address & UINT32_C(0xfff00000)) != MM_PIF_MEM) {
|
||||
mem = (uint32_t*)((uint8_t*)mem_rom + (address - MM_CART_ROM));
|
||||
} else {
|
||||
mem = (uint32_t*)((uint8_t*)mem_base + address);
|
||||
}
|
||||
}
|
||||
else {
|
||||
/* In compressed mem base mode, select appropriate mem_base offset */
|
||||
@@ -296,10 +327,10 @@ uint32_t* mem_base_u32(void* mem_base, uint32_t address)
|
||||
if ((address & UINT32_C(0xfff00000)) == MM_PIF_MEM) {
|
||||
mem = (uint32_t*)((uint8_t*)mem_base + (address - MM_PIF_MEM + MB_PIF_MEM));
|
||||
} else {
|
||||
mem = (uint32_t*)((uint8_t*)mem_base + (address - MM_CART_ROM + MB_CART_ROM));
|
||||
mem = (uint32_t*)((uint8_t*)mem_rom + (address - MM_CART_ROM));
|
||||
}
|
||||
}
|
||||
else if ((address & UINT32_C(0xfe000000)) == MM_DD_ROM) {
|
||||
else if ((address & UINT32_C(0xfe000000)) == MM_DD_ROM) {
|
||||
mem = (uint32_t*)((uint8_t*)mem_base + (address - MM_DD_ROM + MB_DD_ROM));
|
||||
}
|
||||
else if ((address & UINT32_C(0xffffe000)) == MM_RSP_MEM) {
|
||||
|
||||
@@ -91,6 +91,8 @@ void apply_mem_mapping(struct memory* mem, const struct mem_mapping* mapping);
|
||||
|
||||
void* init_mem_base(void);
|
||||
void release_mem_base(void* mem_base);
|
||||
void* init_mem_rom(uint32_t size);
|
||||
void release_mem_rom(void);
|
||||
uint32_t* mem_base_u32(void* mem_base, uint32_t address);
|
||||
|
||||
void read_with_bp_checks(void* opaque, uint32_t address, uint32_t* value);
|
||||
|
||||
@@ -152,6 +152,10 @@ m64p_error open_rom(const unsigned char* romimage, unsigned int size)
|
||||
return M64ERR_INPUT_INVALID;
|
||||
}
|
||||
|
||||
/* ensure mem_base has enough memory allocated */
|
||||
if (init_mem_rom(size) == NULL)
|
||||
return M64ERR_NO_MEMORY;
|
||||
|
||||
/* Clear Byte-swapped flag, since ROM is now deleted. */
|
||||
g_RomWordsLittleEndian = 0;
|
||||
/* allocate new buffer for ROM and copy into this buffer */
|
||||
|
||||
Reference in New Issue
Block a user