Expose SA1 IRAM in old BSNES

This commit is contained in:
CasualPokePlayer 2024-09-30 22:16:26 -07:00
parent 444d8d5d10
commit f9d4737104
8 changed files with 21 additions and 5 deletions

Binary file not shown.

View File

@ -185,6 +185,7 @@
SGB_RTC = 7,
SGB_WRAM = 8,
SGB_HRAM = 9,
SA1_IRAM = 10,
WRAM = 100,
APURAM = 101,

View File

@ -37,6 +37,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES
MakeMemoryDomain("WRAM", LibsnesApi.SNES_MEMORY.WRAM, MemoryDomain.Endian.Little);
MakeMemoryDomain("CARTROM", LibsnesApi.SNES_MEMORY.CARTRIDGE_ROM, MemoryDomain.Endian.Little, byteSize: 2); //there are signs this doesnt work on SGB?
MakeMemoryDomain("CARTRAM", LibsnesApi.SNES_MEMORY.CARTRIDGE_RAM, MemoryDomain.Endian.Little, byteSize: 2);
MakeMemoryDomain("SA1 IRAM", LibsnesApi.SNES_MEMORY.SA1_IRAM, MemoryDomain.Endian.Little, byteSize: 2);
MakeMemoryDomain("VRAM", LibsnesApi.SNES_MEMORY.VRAM, MemoryDomain.Endian.Little, byteSize: 2);
MakeMemoryDomain("OAM", LibsnesApi.SNES_MEMORY.OAM, MemoryDomain.Endian.Little, byteSize: 2);
MakeMemoryDomain("CGRAM", LibsnesApi.SNES_MEMORY.CGRAM, MemoryDomain.Endian.Little, byteSize: 2);

View File

@ -323,7 +323,7 @@ void SA1::reset() {
mmio.overflow = false;
}
SA1::SA1() : iram(2048) {
SA1::SA1() : iram(2048, "SA1_IRAM") {
}
}

View File

@ -12,8 +12,11 @@ void StaticRAM::write(unsigned addr, uint8 n) { data_[addr] = n; }
uint8& StaticRAM::operator[](unsigned addr) { return data_[addr]; }
const uint8& StaticRAM::operator[](unsigned addr) const { return data_[addr]; }
StaticRAM::StaticRAM(unsigned n) : size_(n) { data_ = new uint8[size_]; }
StaticRAM::~StaticRAM() { delete[] data_; }
StaticRAM::StaticRAM(unsigned n, const char* name) : size_(n) {
if(name) data_ = (uint8*)interface()->allocSharedMemory(name, size_);
else data_ = new uint8[size_]();
}
StaticRAM::~StaticRAM() { abort(); }
//MappedRAM

View File

@ -13,7 +13,7 @@ struct StaticRAM : Memory {
inline uint8& operator[](unsigned addr);
inline const uint8& operator[](unsigned addr) const;
inline StaticRAM(unsigned size);
inline StaticRAM(unsigned size, const char* name = NULL);
inline ~StaticRAM();
private:

View File

@ -511,6 +511,9 @@ uint8_t* snes_get_memory_data(unsigned id) {
case SNES_MEMORY_GAME_BOY_HRAM:
if(SNES::cartridge.mode() != SNES::Cartridge::Mode::SuperGameBoy) break;
return GameBoy::cpu.hram;
case SNES_MEMORY_SA1_IRAM:
if(!SNES::cartridge.has_sa1()) break;
return SNES::sa1.iram.data();
case SNES_MEMORY_WRAM:
return SNES::cpu.wram;
@ -566,6 +569,9 @@ const char* snes_get_memory_id_name(unsigned id) {
case SNES_MEMORY_GAME_BOY_HRAM:
if(SNES::cartridge.mode() != SNES::Cartridge::Mode::SuperGameBoy) break;
return "SGB_HRAM";
case SNES_MEMORY_SA1_IRAM:
if(!SNES::cartridge.has_sa1()) break;
return "SA1_IRAM";
case SNES_MEMORY_WRAM:
//return SNES::cpu.wram;
@ -630,7 +636,11 @@ unsigned snes_get_memory_size(unsigned id) {
case SNES_MEMORY_GAME_BOY_HRAM:
if(SNES::cartridge.mode() != SNES::Cartridge::Mode::SuperGameBoy) break;
size = 128;
break;
break;
case SNES_MEMORY_SA1_IRAM:
if(!SNES::cartridge.has_sa1()) break;
size = SNES::sa1.iram.size();
break;
case SNES_MEMORY_WRAM:
size = 128 * 1024;

View File

@ -71,6 +71,7 @@ extern "C" {
#define SNES_MEMORY_GAME_BOY_RTC 7
#define SNES_MEMORY_GAME_BOY_WRAM 8
#define SNES_MEMORY_GAME_BOY_HRAM 9
#define SNES_MEMORY_SA1_IRAM 10
#define SNES_MEMORY_WRAM 100
#define SNES_MEMORY_APURAM 101