Fix mupen rom mirroring

As reported on discord, this broke paper mario JP/US versions and potentially many more non-power-of-2 rom size games.

fixes d2fe532f6d
This commit is contained in:
Morilli 2025-01-16 10:05:36 +01:00
parent 0d05c1d263
commit 6c6986d79e
3 changed files with 2 additions and 12 deletions

Binary file not shown.

View File

@ -144,16 +144,6 @@ m64p_error open_rom(const unsigned char* romimage, unsigned int size)
/* allocate new buffer for ROM and copy into this buffer */
rom_size = size;
/* round rom size to the next power of 2 */
while (rom_size & (rom_size - 1))
{
rom_size |= rom_size >> 1;
rom_size++;
}
if (rom_size == 0)
return M64ERR_INPUT_INVALID;
rom = (unsigned char *) calloc(rom_size, sizeof(unsigned char));
if (rom == NULL)
return M64ERR_NO_MEMORY;

View File

@ -205,7 +205,7 @@ void dma_pi_write(void)
unsigned long rdram_address2 = pi_register.pi_dram_addr_reg+i+0xa0000000;
((unsigned char*)rdram)[MASK_ADDR_U8((pi_register.pi_dram_addr_reg+i)^S8, rdram)]=
rom[((((pi_register.pi_cart_addr_reg-0x10000000)&0x3FFFFFF)+i)^S8) & (rom_size - 1)];
rom[((((pi_register.pi_cart_addr_reg-0x10000000)&0x3FFFFFF)+i)^S8) % rom_size];
if (!invalid_code[rdram_address1>>12])
{
@ -235,7 +235,7 @@ void dma_pi_write(void)
for (i=0; i<(int)longueur; i++)
{
((unsigned char*)rdram)[MASK_ADDR_U8((pi_register.pi_dram_addr_reg+i)^S8, rdram)]=
rom[((((pi_register.pi_cart_addr_reg-0x10000000)&0x3FFFFFF)+i)^S8) & (rom_size - 1)];
rom[((((pi_register.pi_cart_addr_reg-0x10000000)&0x3FFFFFF)+i)^S8) % rom_size];
}
}