Path: blob/master/libsnes/bsnes/snes/cartridge/cartridge.cpp
2 views
#include <snes/snes.hpp>12#include <nall/crc32.hpp>3#include <nall/sha256.hpp>45#define CARTRIDGE_CPP6namespace SNES {78#include "markup.cpp"9#include "serialization.cpp"1011Cartridge cartridge;1213void Cartridge::load(Mode cartridge_mode, const char *markup) {14mode = cartridge_mode;15region = Region::NTSC;16ram_size = 0;1718has_bsx_slot = false;19has_nss_dip = false;20has_superfx = false;21has_sa1 = false;22has_necdsp = false;23has_hitachidsp = false;24has_armdsp = false;25has_srtc = false;26has_sdd1 = false;27has_spc7110 = false;28has_spc7110rtc = false;29has_obc1 = false;30has_msu1 = false;31has_link = false;3233nvram.reset();3435parse_markup(markup);36//print(markup, "\n\n");3738if(ram_size > 0) {39uint8* buf = (uint8*)interface()->allocSharedMemory("CARTRIDGE_RAM",ram_size,0xff);40ram.map(buf, ram_size);41nvram.append({ "program.ram", ram.data(), ram.size() });42}4344rom.write_protect(true);45ram.write_protect(false);4647crc32 = crc32_calculate(rom.data(), rom.size());4849switch((Mode)mode) {50case Mode::Normal:51case Mode::BsxSlotted:52sha256 = nall::sha256(rom.data(), rom.size());53break;54case Mode::Bsx:55sha256 = nall::sha256(bsxflash.memory.data(), bsxflash.memory.size());56break;57case Mode::SufamiTurbo:58sha256 = nall::sha256(sufamiturbo.slotA.rom.data(), sufamiturbo.slotA.rom.size());59break;60case Mode::SuperGameBoy:61#if defined(GAMEBOY)62sha256 = GameBoy::cartridge.sha256();63#else64throw "Game Boy support not present";65#endif66break;67}6869system.load();70loaded = true;71}7273void Cartridge::unload() {74if(loaded == false) return;7576system.unload();77rom.reset();78ram.reset();7980loaded = false;81}8283Cartridge::Cartridge()84: rom("CARTRIDGE_ROM")85, ram("CARTRIDGE_RAM")86{87loaded = false;88unload();89}9091Cartridge::~Cartridge() {92unload();93}9495}969798