gpgx: fix invalid system checks

- closes #4324
This commit is contained in:
Morilli 2025-05-19 21:42:18 +02:00
parent eade36456c
commit 2e539b3c47
2 changed files with 16 additions and 29 deletions

Binary file not shown.

View File

@ -294,7 +294,7 @@ GPGX_EX void gpgx_clear_sram(void)
if (sram.on) if (sram.on)
memset(sram.sram, 0xff, 0x10000); memset(sram.sram, 0xff, 0x10000);
if (cdd.loaded) if (system_hw == SYSTEM_MCD)
{ {
// clear and format bram // clear and format bram
memset(scd.bram, 0, 0x2000); memset(scd.bram, 0, 0x2000);
@ -331,7 +331,7 @@ GPGX_EX void* gpgx_get_sram(int *size)
*size = saveramsize(); *size = saveramsize();
return sram.sram; return sram.sram;
} }
else if (cdd.loaded && scd.cartridge.id) else if (system_hw == SYSTEM_MCD && scd.cartridge.id)
{ {
int sz = scd.cartridge.mask + 1; int sz = scd.cartridge.mask + 1;
memcpy(tempsram, scd.cartridge.area, sz); memcpy(tempsram, scd.cartridge.area, sz);
@ -339,16 +339,11 @@ GPGX_EX void* gpgx_get_sram(int *size)
*size = sz + 0x2000; *size = sz + 0x2000;
return tempsram; return tempsram;
} }
else if (cdd.loaded) else if (system_hw == SYSTEM_MCD)
{ {
*size = 0x2000; *size = 0x2000;
return scd.bram; return scd.bram;
} }
else if (scd.cartridge.id)
{
*size = scd.cartridge.mask + 1;
return scd.cartridge.area;
}
else else
{ {
*size = 0; *size = 0;
@ -365,7 +360,7 @@ GPGX_EX int gpgx_put_sram(const uint8 *data, int size)
memcpy(sram.sram, data, size); memcpy(sram.sram, data, size);
return 1; return 1;
} }
else if (cdd.loaded && scd.cartridge.id) else if (system_hw == SYSTEM_MCD && scd.cartridge.id)
{ {
int sz = scd.cartridge.mask + 1; int sz = scd.cartridge.mask + 1;
if (size != sz + 0x2000) if (size != sz + 0x2000)
@ -374,21 +369,13 @@ GPGX_EX int gpgx_put_sram(const uint8 *data, int size)
memcpy(scd.bram, data + sz, 0x2000); memcpy(scd.bram, data + sz, 0x2000);
return 1; return 1;
} }
else if (cdd.loaded) else if (system_hw == SYSTEM_MCD)
{ {
if (size != 0x2000) if (size != 0x2000)
return 0; return 0;
memcpy(scd.bram, data, size); memcpy(scd.bram, data, size);
return 1; return 1;
} }
else if (scd.cartridge.id)
{
int sz = scd.cartridge.mask + 1;
if (size != sz)
return 0;
memcpy(scd.cartridge.area, data, size);
return 1;
}
else else
{ {
if (size != 0) if (size != 0)
@ -512,10 +499,10 @@ GPGX_EX const char* gpgx_get_memdom(int which, void **area, int *size)
} }
else return NULL; else return NULL;
case 2: case 2:
if (!cdd.loaded) if (system_hw != SYSTEM_MCD)
{ {
*area = ext.md_cart.rom; *area = cart.rom;
*size = ext.md_cart.romsize; *size = cart.romsize;
if ((system_hw & SYSTEM_PBC) == SYSTEM_MD) if ((system_hw & SYSTEM_PBC) == SYSTEM_MD)
{ {
return "MD CART"; return "MD CART";
@ -533,7 +520,7 @@ GPGX_EX const char* gpgx_get_memdom(int which, void **area, int *size)
} }
else return NULL; else return NULL;
case 3: case 3:
if (cdd.loaded) if (system_hw == SYSTEM_MCD)
{ {
*area = scd.bootrom; *area = scd.bootrom;
*size = 0x20000; *size = 0x20000;
@ -541,7 +528,7 @@ GPGX_EX const char* gpgx_get_memdom(int which, void **area, int *size)
} }
else return NULL; else return NULL;
case 4: case 4:
if (cdd.loaded) if (system_hw == SYSTEM_MCD)
{ {
*area = scd.prg_ram; *area = scd.prg_ram;
*size = 0x80000; *size = 0x80000;
@ -549,7 +536,7 @@ GPGX_EX const char* gpgx_get_memdom(int which, void **area, int *size)
} }
else return NULL; else return NULL;
case 5: case 5:
if (cdd.loaded) if (system_hw == SYSTEM_MCD)
{ {
*area = scd.word_ram[0]; *area = scd.word_ram[0];
*size = 0x20000; *size = 0x20000;
@ -557,7 +544,7 @@ GPGX_EX const char* gpgx_get_memdom(int which, void **area, int *size)
} }
else return NULL; else return NULL;
case 6: case 6:
if (cdd.loaded) if (system_hw == SYSTEM_MCD)
{ {
*area = scd.word_ram[1]; *area = scd.word_ram[1];
*size = 0x20000; *size = 0x20000;
@ -565,7 +552,7 @@ GPGX_EX const char* gpgx_get_memdom(int which, void **area, int *size)
} }
else return NULL; else return NULL;
case 7: case 7:
if (cdd.loaded) if (system_hw == SYSTEM_MCD)
{ {
*area = scd.word_ram_2M; *area = scd.word_ram_2M;
*size = 0x40000; *size = 0x40000;
@ -573,7 +560,7 @@ GPGX_EX const char* gpgx_get_memdom(int which, void **area, int *size)
} }
else return NULL; else return NULL;
case 8: case 8:
if (cdd.loaded) if (system_hw == SYSTEM_MCD)
{ {
*area = scd.bram; *area = scd.bram;
*size = 0x2000; *size = 0x2000;
@ -589,7 +576,7 @@ GPGX_EX const char* gpgx_get_memdom(int which, void **area, int *size)
} }
else if (system_bios & (SYSTEM_SMS | SYSTEM_GG)) else if (system_bios & (SYSTEM_SMS | SYSTEM_GG))
{ {
*area = &ext.md_cart.rom[0x400000]; *area = &cart.rom[0x400000];
*size = sms_cart_bootrom_size(); *size = sms_cart_bootrom_size();
return "BOOT ROM"; return "BOOT ROM";
} }
@ -759,7 +746,7 @@ void CDLog68k(uint addr, uint flags)
//apply memory map to process rom address //apply memory map to process rom address
unsigned char* block64k = m68k.memory_map[((addr)>>16)&0xff].base; unsigned char* block64k = m68k.memory_map[((addr)>>16)&0xff].base;
//outside the ROM range. complex mapping logic/accessories; not sure how to handle any of this //outside the ROM range. complex mapping logic/accessories; not sure how to handle any of this
if(block64k < cart.rom || block64k >= cart.rom + cart.romsize) if(block64k < cart.rom || block64k >= cart.rom + cart.romsize)
return; return;