BSNESv115+: ram and rom memory domain fixes
- saveram was not working at all on certain roms, as the "CARTRIDGE_RAM" memory domain was returning a null pointer (similar thing for "CARTRIDGE_ROM"; changed it to correctly return the current rom) - add sa1_bwram domain for clarity and an SGB_ROM domain
This commit is contained in:
parent
47a81e7b20
commit
d24629f3ad
Binary file not shown.
|
@ -5,19 +5,21 @@
|
|||
public enum SNES_MEMORY
|
||||
{
|
||||
CARTRIDGE_RAM,
|
||||
CARTRIDGE_ROM,
|
||||
SGB_ROM,
|
||||
|
||||
BSX_RAM,
|
||||
BSX_PRAM,
|
||||
SUFAMI_TURBO_A_RAM,
|
||||
SUFAMI_TURBO_B_RAM,
|
||||
SA1_IRAM,
|
||||
SA1_BWRAM,
|
||||
|
||||
WRAM,
|
||||
APURAM,
|
||||
VRAM,
|
||||
// OAM, // needs some work in the core probably? or we return an objects pointer
|
||||
CGRAM,
|
||||
|
||||
CARTRIDGE_ROM
|
||||
CGRAM
|
||||
}
|
||||
|
||||
public enum BSNES_INPUT_DEVICE
|
||||
|
|
|
@ -274,6 +274,30 @@ EXPORT void snes_set_hooks_enabled(bool read_hook_enabled, bool write_hook_enabl
|
|||
}
|
||||
|
||||
|
||||
uint8_t* snes_get_effective_saveram(int* ram_size) {
|
||||
if (cartridge.has.SA1) {
|
||||
*ram_size = sa1.bwram.size();
|
||||
return sa1.bwram.data();
|
||||
} else if (cartridge.has.SuperFX) {
|
||||
*ram_size = superfx.ram.size();
|
||||
return superfx.ram.data();
|
||||
} else if (cartridge.has.HitachiDSP) {
|
||||
*ram_size = hitachidsp.ram.size();
|
||||
return hitachidsp.ram.data();
|
||||
} else if (cartridge.has.SPC7110) {
|
||||
*ram_size = spc7110.ram.size();
|
||||
return spc7110.ram.data();
|
||||
} else if (cartridge.has.OBC1) {
|
||||
*ram_size = obc1.ram.size();
|
||||
return obc1.ram.data();
|
||||
}
|
||||
|
||||
// note: if sufamiturbo is ever implemented frontend, this will need some additional consideration
|
||||
// because sufamiturbo can have up to 2 cartridges (and respective save rams)
|
||||
*ram_size = cartridge.ram.size();
|
||||
return cartridge.ram.data();
|
||||
}
|
||||
|
||||
EXPORT int snes_get_region(void) {
|
||||
return Region::PAL();
|
||||
}
|
||||
|
@ -303,10 +327,21 @@ EXPORT void* snes_get_memory_region(int id, int* size, int* word_size)
|
|||
|
||||
switch(id)
|
||||
{
|
||||
// this cartridge ram is a generalized memory region that can be anything that is considered
|
||||
// cartridge or save ram for any coprocessor like SA-1, or just the basic cartridge ram
|
||||
case SNES_MEMORY::CARTRIDGE_RAM:
|
||||
*size = cartridge.ram.size();
|
||||
*word_size = 1;
|
||||
return cartridge.ram.data();
|
||||
return snes_get_effective_saveram(size);
|
||||
case SNES_MEMORY::CARTRIDGE_ROM:
|
||||
*size = program->superFamicom.program.size();
|
||||
*word_size = 1;
|
||||
return program->superFamicom.program.data();
|
||||
case SNES_MEMORY::SGB_ROM:
|
||||
*size = program->gameBoy.program.size();
|
||||
*word_size = 1;
|
||||
return program->gameBoy.program.data();
|
||||
|
||||
// unused
|
||||
case SNES_MEMORY::BSX_RAM:
|
||||
if (!cartridge.has.BSMemorySlot) break;
|
||||
*size = mcc.rom.size();
|
||||
|
@ -327,11 +362,19 @@ EXPORT void* snes_get_memory_region(int id, int* size, int* word_size)
|
|||
*size = sufamiturboB.ram.size();
|
||||
*word_size = 1;
|
||||
return sufamiturboB.ram.data();
|
||||
|
||||
case SNES_MEMORY::SA1_IRAM:
|
||||
if (!cartridge.has.SA1) break;
|
||||
*size = sa1.iram.size();
|
||||
*word_size = 1;
|
||||
return sa1.iram.data();
|
||||
case SNES_MEMORY::SA1_BWRAM:
|
||||
// effectively the cartridge ram, listed here to allow direct BWRAM access
|
||||
// instead of relying on the CARTRIDGE_RAM domain
|
||||
if (!cartridge.has.SA1) break;
|
||||
*size = sa1.bwram.size();
|
||||
*word_size = 1;
|
||||
return sa1.bwram.data();
|
||||
|
||||
case SNES_MEMORY::WRAM:
|
||||
*size = sizeof(cpu.wram);
|
||||
|
@ -353,11 +396,6 @@ EXPORT void* snes_get_memory_region(int id, int* size, int* word_size)
|
|||
*size = sizeof(ppufast.cgram);
|
||||
*word_size = sizeof(*ppufast.cgram);
|
||||
return ppufast.cgram;
|
||||
|
||||
case SNES_MEMORY::CARTRIDGE_ROM:
|
||||
*size = cartridge.rom.size();
|
||||
*word_size = 1;
|
||||
return cartridge.rom.data();
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
|
|
|
@ -10,18 +10,21 @@
|
|||
|
||||
enum SNES_MEMORY {
|
||||
CARTRIDGE_RAM,
|
||||
CARTRIDGE_ROM,
|
||||
SGB_ROM,
|
||||
|
||||
// bsx and sufamiturbo unused cause unsupported by frontend
|
||||
BSX_RAM,
|
||||
BSX_PRAM,
|
||||
SUFAMI_TURBO_A_RAM,
|
||||
SUFAMI_TURBO_B_RAM,
|
||||
SA1_IRAM,
|
||||
SA1_BWRAM,
|
||||
|
||||
WRAM,
|
||||
APURAM,
|
||||
VRAM,
|
||||
CGRAM,
|
||||
|
||||
CARTRIDGE_ROM
|
||||
CGRAM
|
||||
};
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue