Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions bsnes/sfc/cartridge/cartridge.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -158,4 +158,12 @@ auto Cartridge::unload() -> void {
ram.reset();
}

auto Cartridge::getSaveRAM() -> uint8_t* {
return ram.data();
}

auto Cartridge::getSaveRAMSize() -> size_t {
return ram.size();
}

}
2 changes: 2 additions & 0 deletions bsnes/sfc/cartridge/cartridge.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ struct Cartridge {
auto load() -> bool;
auto save() -> void;
auto unload() -> void;
auto getSaveRAM() -> uint8_t*;
auto getSaveRAMSize() -> size_t;

auto serialize(serializer&) -> void;

Expand Down
2 changes: 2 additions & 0 deletions bsnes/sfc/interface/interface.hpp
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
#pragma once

namespace SuperFamicom {

struct ID {
Expand Down
21 changes: 19 additions & 2 deletions bsnes/target-libretro/libretro.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ static void audio_queue(int16_t left, int16_t right)
}

#include "program.cpp"
#include <sfc/sfc.hpp>

static string sgb_bios;
static vector<string> cheatList;
Expand Down Expand Up @@ -1129,10 +1130,26 @@ unsigned retro_get_region()
// Rely on higan to load and save SRAM until there is really compelling reason not to.
void *retro_get_memory_data(unsigned id)
{
return nullptr;
switch(id)
{
case RETRO_MEMORY_SAVE_RAM:
return SuperFamicom::cartridge.getSaveRAM();
case RETRO_MEMORY_SYSTEM_RAM:
return SuperFamicom::cpu.wram;
}

return nullptr;
}

size_t retro_get_memory_size(unsigned id)
{
return 0;
switch(id)
{
case RETRO_MEMORY_SAVE_RAM:
return SuperFamicom::cartridge.getSaveRAMSize();
case RETRO_MEMORY_SYSTEM_RAM:
return 128 * 1024;
}

return 0;
}