mirror of
https://github.com/libretro/bsnes-libretro-cplusplus98.git
synced 2025-04-12 07:07:02 +00:00
It compiles? :o
This commit is contained in:
parent
ab8c387f13
commit
94aa6b3e82
@ -55,7 +55,7 @@ void APU::power() {
|
||||
create(Main, 4194304);
|
||||
for(unsigned n = 0xff10; n <= 0xff3f; n++) bus.mmio[n] = this;
|
||||
|
||||
for(auto &n : mmio_data) n = 0x00;
|
||||
foreach(n, mmio_data) n = 0x00;
|
||||
sequencer_base = 0;
|
||||
sequencer_step = 0;
|
||||
|
||||
|
@ -71,7 +71,7 @@ void APU::Wave::power() {
|
||||
counter = 0;
|
||||
|
||||
random_lfsr r;
|
||||
for(auto &n : pattern) n = r() & 15;
|
||||
foreach(n, pattern) n = r() & 15;
|
||||
|
||||
output = 0;
|
||||
length = 0;
|
||||
|
@ -36,14 +36,14 @@ void Cartridge::load(const string &markup, const uint8_t *data, unsigned size) {
|
||||
BML::Document document(markup);
|
||||
|
||||
const string &mapperid = document["cartridge"]["mapper"].value;
|
||||
if(mapperid == "none" ) info.mapper = Mapper::MBC0;
|
||||
if(mapperid == "MBC1" ) info.mapper = Mapper::MBC1;
|
||||
if(mapperid == "MBC2" ) info.mapper = Mapper::MBC2;
|
||||
if(mapperid == "MBC3" ) info.mapper = Mapper::MBC3;
|
||||
if(mapperid == "MBC5" ) info.mapper = Mapper::MBC5;
|
||||
if(mapperid == "MMM01") info.mapper = Mapper::MMM01;
|
||||
if(mapperid == "HuC1" ) info.mapper = Mapper::HuC1;
|
||||
if(mapperid == "HuC3" ) info.mapper = Mapper::HuC3;
|
||||
if(mapperid == "none" ) info.mapper.i = Mapper::MBC0;
|
||||
if(mapperid == "MBC1" ) info.mapper.i = Mapper::MBC1;
|
||||
if(mapperid == "MBC2" ) info.mapper.i = Mapper::MBC2;
|
||||
if(mapperid == "MBC3" ) info.mapper.i = Mapper::MBC3;
|
||||
if(mapperid == "MBC5" ) info.mapper.i = Mapper::MBC5;
|
||||
if(mapperid == "MMM01") info.mapper.i = Mapper::MMM01;
|
||||
if(mapperid == "HuC1" ) info.mapper.i = Mapper::HuC1;
|
||||
if(mapperid == "HuC3" ) info.mapper.i = Mapper::HuC3;
|
||||
|
||||
info.rtc = document["cartridge"]["rtc"].exists();
|
||||
info.rumble = document["cartridge"]["rumble"].exists();
|
||||
|
@ -11,13 +11,13 @@ bool Cheat::decode(const string &code_, unsigned &addr, unsigned &data, unsigned
|
||||
if(initialize == false) {
|
||||
initialize = true;
|
||||
|
||||
for(auto &n : mapProActionReplay) n = ~0;
|
||||
foreach(n, mapProActionReplay) n = ~0;
|
||||
mapProActionReplay['0'] = 0; mapProActionReplay['1'] = 1; mapProActionReplay['2'] = 2; mapProActionReplay['3'] = 3;
|
||||
mapProActionReplay['4'] = 4; mapProActionReplay['5'] = 5; mapProActionReplay['6'] = 6; mapProActionReplay['7'] = 7;
|
||||
mapProActionReplay['8'] = 8; mapProActionReplay['9'] = 9; mapProActionReplay['A'] = 10; mapProActionReplay['B'] = 11;
|
||||
mapProActionReplay['C'] = 12; mapProActionReplay['D'] = 13; mapProActionReplay['E'] = 14; mapProActionReplay['F'] = 15;
|
||||
|
||||
for(auto &n : mapGameGenie) n = ~0;
|
||||
foreach(n, mapGameGenie) n = ~0;
|
||||
mapGameGenie['0'] = 0; mapGameGenie['1'] = 1; mapGameGenie['2'] = 2; mapGameGenie['3'] = 3;
|
||||
mapGameGenie['4'] = 4; mapGameGenie['5'] = 5; mapGameGenie['6'] = 6; mapGameGenie['7'] = 7;
|
||||
mapGameGenie['8'] = 8; mapGameGenie['9'] = 9; mapGameGenie['A'] = 10; mapGameGenie['B'] = 11;
|
||||
@ -29,7 +29,7 @@ bool Cheat::decode(const string &code_, unsigned &addr, unsigned &data, unsigned
|
||||
unsigned length = code.length(), bits = 0;
|
||||
|
||||
if(code.wildcard("????:??")) {
|
||||
code = { substr(code, 0, 4), substr(code, 5, 2) };
|
||||
code = string( substr(code, 0, 4), substr(code, 5, 2) );
|
||||
for(unsigned n = 0; n < 6; n++) if(mapProActionReplay[code[n]] > 15) return false;
|
||||
bits = hex(code);
|
||||
addr = (bits >> 8) & 0xffff;
|
||||
@ -39,7 +39,7 @@ bool Cheat::decode(const string &code_, unsigned &addr, unsigned &data, unsigned
|
||||
}
|
||||
|
||||
if(code.wildcard("????:??:??")) {
|
||||
code = { substr(code, 0, 4), substr(code, 5, 2), substr(code, 8, 2) };
|
||||
code = string( substr(code, 0, 4), substr(code, 5, 2), substr(code, 8, 2) );
|
||||
for(unsigned n = 0; n < 8; n++) if(mapProActionReplay[code[n]] > 15) return false;
|
||||
bits = hex(code);
|
||||
addr = (bits >> 16) & 0xffff;
|
||||
@ -49,7 +49,7 @@ bool Cheat::decode(const string &code_, unsigned &addr, unsigned &data, unsigned
|
||||
}
|
||||
|
||||
if(code.wildcard("???" "-" "???")) {
|
||||
code = { substr(code, 0, 3), substr(code, 4, 3) };
|
||||
code = string( substr(code, 0, 3), substr(code, 4, 3) );
|
||||
for(unsigned n = 0; n < 6; n++) if(mapGameGenie[code[n]] > 15) return false;
|
||||
for(unsigned n = 0; n < 6; n++) bits |= mapGameGenie[code[n]] << (20 - n * 4);
|
||||
|
||||
@ -63,7 +63,7 @@ bool Cheat::decode(const string &code_, unsigned &addr, unsigned &data, unsigned
|
||||
}
|
||||
|
||||
if(code.wildcard("???" "-" "???" "-" "???")) {
|
||||
code = { substr(code, 0, 3), substr(code, 4, 3), substr(code, 8, 1), substr(code, 10, 1) };
|
||||
code = string( substr(code, 0, 3), substr(code, 4, 3), substr(code, 8, 1), substr(code, 10, 1) );
|
||||
for(unsigned n = 0; n < 8; n++) if(mapGameGenie[code[n]] > 15) return false;
|
||||
for(unsigned n = 0; n < 8; n++) bits |= mapGameGenie[code[n]] << (28 - n * 4);
|
||||
|
||||
@ -81,7 +81,7 @@ bool Cheat::decode(const string &code_, unsigned &addr, unsigned &data, unsigned
|
||||
}
|
||||
|
||||
void Cheat::synchronize() {
|
||||
for(auto &n : override) n = false;
|
||||
foreach(n, override) n = false;
|
||||
|
||||
for(unsigned n = 0; n < size(); n++) {
|
||||
override[operator[](n).addr] = true;
|
||||
|
@ -39,12 +39,12 @@ void Interface::unloadCartridge() {
|
||||
}
|
||||
|
||||
unsigned Interface::memorySize(Memory memory) {
|
||||
if(memory == Memory::RAM) return cartridge.ramsize;
|
||||
if(memory.i == Memory::RAM) return cartridge.ramsize;
|
||||
return 0u;
|
||||
}
|
||||
|
||||
uint8_t* Interface::memoryData(Memory memory) {
|
||||
if(memory == Memory::RAM) return cartridge.ramdata;
|
||||
if(memory.i == Memory::RAM) return cartridge.ramdata;
|
||||
return 0u;
|
||||
}
|
||||
|
||||
@ -55,7 +55,7 @@ void Interface::power() {
|
||||
void Interface::run() {
|
||||
do {
|
||||
system.run();
|
||||
} while(scheduler.exit_reason() != Scheduler::ExitReason::FrameEvent);
|
||||
} while(scheduler.exit_reason.i != Scheduler::ExitReason::FrameEvent);
|
||||
}
|
||||
|
||||
serializer Interface::serialize() {
|
||||
@ -69,13 +69,14 @@ bool Interface::unserialize(serializer &s) {
|
||||
|
||||
void Interface::setCheats(const lstring &list) {
|
||||
cheat.reset();
|
||||
for(auto &code : list) {
|
||||
foreach(code, list) {
|
||||
lstring codelist;
|
||||
codelist.split("+", code);
|
||||
for(auto &part : codelist) {
|
||||
foreach(part, codelist) {
|
||||
unsigned addr, data, comp;
|
||||
if(Cheat::decode(part, addr, data, comp)) {
|
||||
cheat.append({ addr, data, comp });
|
||||
CheatCode code = { addr, data, comp };
|
||||
cheat.append(code);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -5,7 +5,7 @@ namespace nall {
|
||||
|
||||
class GameBoyCartridge {
|
||||
public:
|
||||
string xml;
|
||||
string markup;
|
||||
inline GameBoyCartridge(uint8_t *data, unsigned size);
|
||||
|
||||
//private:
|
||||
@ -22,7 +22,7 @@ public:
|
||||
};
|
||||
|
||||
GameBoyCartridge::GameBoyCartridge(uint8_t *romdata, unsigned romsize) {
|
||||
xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
|
||||
markup = "";
|
||||
if(romsize < 0x4000) return;
|
||||
|
||||
info.mapper = "unknown";
|
||||
@ -100,18 +100,15 @@ GameBoyCartridge::GameBoyCartridge(uint8_t *romdata, unsigned romsize) {
|
||||
|
||||
if(info.mapper == "MBC2") info.ramsize = 512; //512 x 4-bit
|
||||
|
||||
xml.append("<cartridge mapper='", info.mapper, "'");
|
||||
if(info.rtc) xml.append(" rtc='true'");
|
||||
if(info.rumble) xml.append(" rumble='true'");
|
||||
xml.append(">\n");
|
||||
markup.append("cartridge mapper=", info.mapper);
|
||||
if(info.rtc) markup.append(" rtc");
|
||||
if(info.rumble) markup.append(" rumble");
|
||||
markup.append("\n");
|
||||
|
||||
xml.append(" <rom size='", hex(romsize), "'/>\n"); //TODO: trust/check info.romsize?
|
||||
markup.append("\t" "rom size=", hex(romsize), "\n"); //TODO: trust/check info.romsize?
|
||||
|
||||
if(info.ramsize > 0)
|
||||
xml.append(" <ram size='", hex(info.ramsize), "' battery='", info.battery, "'/>\n");
|
||||
|
||||
xml.append("</cartridge>\n");
|
||||
xml.transform("'", "\"");
|
||||
markup.append("\t" "ram size=", hex(info.ramsize), info.battery ? " non-volatile\n" : "\n");
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -3,10 +3,10 @@
|
||||
|
||||
namespace nall {
|
||||
|
||||
class SNESCartridge {
|
||||
class SnesCartridge {
|
||||
public:
|
||||
string xmlMemoryMap;
|
||||
inline SNESCartridge(const uint8_t *data, unsigned size);
|
||||
string markup;
|
||||
inline SnesCartridge(const uint8_t *data, unsigned size);
|
||||
|
||||
//private:
|
||||
inline void read_header(const uint8_t *data, unsigned size);
|
||||
@ -105,436 +105,346 @@ public:
|
||||
bool has_st018;
|
||||
};
|
||||
|
||||
SNESCartridge::SNESCartridge(const uint8_t *data, unsigned size) {
|
||||
#define T "\t"
|
||||
|
||||
SnesCartridge::SnesCartridge(const uint8_t *data, unsigned size) {
|
||||
read_header(data, size);
|
||||
|
||||
string xml = "<?xml version='1.0' encoding='UTF-8'?>\n";
|
||||
string xml;
|
||||
markup = "";
|
||||
|
||||
if(type == TypeBsx) {
|
||||
xml.append("<cartridge/>");
|
||||
xmlMemoryMap = xml.transform("'", "\"");
|
||||
markup.append("cartridge");
|
||||
return;
|
||||
}
|
||||
|
||||
if(type == TypeSufamiTurbo) {
|
||||
xml.append("<cartridge/>");
|
||||
xmlMemoryMap = xml.transform("'", "\"");
|
||||
markup.append("cartridge");
|
||||
return;
|
||||
}
|
||||
|
||||
if(type == TypeGameBoy) {
|
||||
xml.append("<cartridge rtc='", gameboy_has_rtc(data, size), "'>\n");
|
||||
markup.append("cartridge rtc=", gameboy_has_rtc(data, size), "\n");
|
||||
if(gameboy_ram_size(data, size) > 0) {
|
||||
xml.append(" <ram size='0x", hex(gameboy_ram_size(data, size)), "'/>\n");
|
||||
markup.append(T "ram size=0x", hex(gameboy_ram_size(data, size)), "\n");
|
||||
}
|
||||
xml.append("</cartridge>\n");
|
||||
xmlMemoryMap = xml.transform("'", "\"");
|
||||
return;
|
||||
}
|
||||
|
||||
xml.append("<cartridge");
|
||||
if(region == NTSC) {
|
||||
xml.append(" region='NTSC'");
|
||||
} else {
|
||||
xml.append(" region='PAL'");
|
||||
}
|
||||
xml.append(">\n");
|
||||
markup.append("cartridge region=", region == NTSC ? "NTSC\n" : "PAL\n");
|
||||
|
||||
if(type == TypeSuperGameBoy1Bios) {
|
||||
xml.append(" <rom>\n");
|
||||
xml.append(" <map mode='linear' address='00-7f:8000-ffff'/>\n");
|
||||
xml.append(" <map mode='linear' address='80-ff:8000-ffff'/>\n");
|
||||
xml.append(" </rom>\n");
|
||||
xml.append(" <icd2 revision='1'>\n");
|
||||
xml.append(" <map address='00-3f:6000-7fff'/>\n");
|
||||
xml.append(" <map address='80-bf:6000-7fff'/>\n");
|
||||
xml.append(" </icd2>\n");
|
||||
markup.append(T "rom\n");
|
||||
markup.append(T T "map mode=linear address=00-7f:8000-ffff\n");
|
||||
markup.append(T T "map mode=linear address=80-ff:8000-ffff\n");
|
||||
markup.append(T "icd2 revision=1\n");
|
||||
markup.append(T T "map address=00-3f:6000-7fff\n");
|
||||
markup.append(T T "map address=80-bf:6000-7fff\n");
|
||||
} else if(type == TypeSuperGameBoy2Bios) {
|
||||
xml.append(" <rom>\n");
|
||||
xml.append(" <map mode='linear' address='00-7f:8000-ffff'/>\n");
|
||||
xml.append(" <map mode='linear' address='80-ff:8000-ffff'/>\n");
|
||||
xml.append(" </rom>\n");
|
||||
xml.append(" <icd2 revision='2'>\n");
|
||||
xml.append(" <map address='00-3f:6000-7fff'/>\n");
|
||||
xml.append(" <map address='80-bf:6000-7fff'/>\n");
|
||||
xml.append(" </icd2>\n");
|
||||
markup.append(T "rom\n");
|
||||
markup.append(T T "map mode=linear address=00-7f:8000-ffff\n");
|
||||
markup.append(T T "map mode=linear address=80-ff:8000-ffff\n");
|
||||
markup.append(T "icd2 revision=1\n");
|
||||
markup.append(T T "map address=00-3f:6000-7fff\n");
|
||||
markup.append(T T "map address=80-bf:6000-7fff\n");
|
||||
} else if(has_cx4) {
|
||||
xml.append(" <hitachidsp model='HG51B169' frequency='20000000' firmware='cx4.bin' sha256='ae8d4d1961b93421ff00b3caa1d0f0ce7783e749772a3369c36b3dbf0d37ef18'>\n");
|
||||
xml.append(" <rom>\n");
|
||||
xml.append(" <map mode='linear' address='00-7f:8000-ffff'/>\n");
|
||||
xml.append(" <map mode='linear' address='80-ff:8000-ffff'/>\n");
|
||||
xml.append(" </rom>\n");
|
||||
xml.append(" <mmio>\n");
|
||||
xml.append(" <map address='00-3f:6000-7fff'/>\n");
|
||||
xml.append(" <map address='80-bf:6000-7fff'/>\n");
|
||||
xml.append(" </mmio>\n");
|
||||
xml.append(" </hitachidsp>\n");
|
||||
markup.append(T "hitachidsp model=HG51B169 frequency=20000000 firmware=cx4.bin sha256=ae8d4d1961b93421ff00b3caa1d0f0ce7783e749772a3369c36b3dbf0d37ef18\n");
|
||||
markup.append(T T "rom\n");
|
||||
markup.append(T T T "map mode=linear address=00-7f:8000-ffff\n");
|
||||
markup.append(T T T "map mode=linear address=80-ff:8000-ffff\n");
|
||||
markup.append(T T "mmio\n");
|
||||
markup.append(T T T "map address=00-3f:6000-7fff\n");
|
||||
markup.append(T T T "map address=80-bf:6000-7fff\n");
|
||||
} else if(has_spc7110) {
|
||||
xml.append(" <rom>\n");
|
||||
xml.append(" <map mode='shadow' address='00-0f:8000-ffff'/>\n");
|
||||
xml.append(" <map mode='shadow' address='80-bf:8000-ffff'/>\n");
|
||||
xml.append(" <map mode='linear' address='c0-cf:0000-ffff'/>\n");
|
||||
xml.append(" </rom>\n");
|
||||
markup.append(T "rom\n");
|
||||
markup.append(T T "map mode=shadow address=00-0f:8000-ffff\n");
|
||||
markup.append(T T "map mode=shadow address=80-bf:8000-ffff\n");
|
||||
markup.append(T T "map mode=linear address=c0-cf:0000-ffff\n");
|
||||
|
||||
xml.append(" <spc7110>\n");
|
||||
xml.append(" <mcu>\n");
|
||||
xml.append(" <map address='d0-ff:0000-ffff' offset='0x100000' size='0x", hex(size - 0x100000), "'/>\n");
|
||||
xml.append(" </mcu>\n");
|
||||
xml.append(" <ram size='0x", hex(ram_size), "'>\n");
|
||||
xml.append(" <map mode='linear' address='00:6000-7fff'/>\n");
|
||||
xml.append(" <map mode='linear' address='30:6000-7fff'/>\n");
|
||||
xml.append(" </ram>\n");
|
||||
xml.append(" <mmio>\n");
|
||||
xml.append(" <map address='00-3f:4800-483f'/>\n");
|
||||
xml.append(" <map address='80-bf:4800-483f'/>\n");
|
||||
xml.append(" </mmio>\n");
|
||||
markup.append(T "spc7110\n");
|
||||
markup.append(T T "mcu\n");
|
||||
markup.append(T T T "map address=d0-ff:0000-ffff offset=0x100000 size=0x", hex(size - 0x100000), "\n");
|
||||
markup.append(T T "ram size=0x", hex(ram_size), "\n");
|
||||
markup.append(T T T "map mode=linear address=00:6000-7fff\n");
|
||||
markup.append(T T T "map mode=linear address=30:6000-7fff\n");
|
||||
markup.append(T T "mmio\n");
|
||||
markup.append(T T T "map address=00-3f:4800-483f\n");
|
||||
markup.append(T T T "map address=80-bf:4800-483f\n");
|
||||
if(has_spc7110rtc) {
|
||||
xml.append(" <rtc>\n");
|
||||
xml.append(" <map address='00-3f:4840-4842'/>\n");
|
||||
xml.append(" <map address='80-bf:4840-4842'/>\n");
|
||||
xml.append(" </rtc>\n");
|
||||
markup.append(T T "rtc\n");
|
||||
markup.append(T T T "map address=00-3f:4840-4842\n");
|
||||
markup.append(T T T "map address=80-bf:4840-4842\n");
|
||||
}
|
||||
xml.append(" <dcu>\n");
|
||||
xml.append(" <map address='50:0000-ffff'/>\n");
|
||||
xml.append(" </dcu>\n");
|
||||
xml.append(" </spc7110>\n");
|
||||
markup.append(T T "dcu\n");
|
||||
markup.append(T T T "map address=50:0000-ffff\n");
|
||||
} else if(mapper == LoROM) {
|
||||
xml.append(" <rom>\n");
|
||||
xml.append(" <map mode='linear' address='00-7f:8000-ffff'/>\n");
|
||||
xml.append(" <map mode='linear' address='80-ff:8000-ffff'/>\n");
|
||||
xml.append(" </rom>\n");
|
||||
markup.append(T "rom\n");
|
||||
markup.append(T T "map mode=linear address=00-7f:8000-ffff\n");
|
||||
markup.append(T T "map mode=linear address=80-ff:8000-ffff\n");
|
||||
|
||||
if(ram_size > 0) {
|
||||
xml.append(" <ram size='0x", hex(ram_size), "'>\n");
|
||||
xml.append(" <map mode='linear' address='20-3f:6000-7fff'/>\n");
|
||||
xml.append(" <map mode='linear' address='a0-bf:6000-7fff'/>\n");
|
||||
markup.append(T "ram size=0x", hex(ram_size), "\n");
|
||||
markup.append(T T "map mode=linear address=20-3f:6000-7fff\n");
|
||||
markup.append(T T "map mode=linear address=a0-bf:6000-7fff\n");
|
||||
if((rom_size > 0x200000) || (ram_size > 32 * 1024)) {
|
||||
xml.append(" <map mode='linear' address='70-7f:0000-7fff'/>\n");
|
||||
xml.append(" <map mode='linear' address='f0-ff:0000-7fff'/>\n");
|
||||
markup.append(T T "map mode=linear address=70-7f:0000-7fff\n");
|
||||
markup.append(T T "map mode=linear address=f0-ff:0000-7fff\n");
|
||||
} else {
|
||||
xml.append(" <map mode='linear' address='70-7f:0000-ffff'/>\n");
|
||||
xml.append(" <map mode='linear' address='f0-ff:0000-ffff'/>\n");
|
||||
markup.append(T T "map mode=linear address=70-7f:0000-ffff\n");
|
||||
markup.append(T T "map mode=linear address=f0-ff:0000-ffff\n");
|
||||
}
|
||||
xml.append(" </ram>\n");
|
||||
}
|
||||
} else if(mapper == HiROM) {
|
||||
xml.append(" <rom>\n");
|
||||
xml.append(" <map mode='shadow' address='00-3f:8000-ffff'/>\n");
|
||||
xml.append(" <map mode='linear' address='40-7f:0000-ffff'/>\n");
|
||||
xml.append(" <map mode='shadow' address='80-bf:8000-ffff'/>\n");
|
||||
xml.append(" <map mode='linear' address='c0-ff:0000-ffff'/>\n");
|
||||
xml.append(" </rom>\n");
|
||||
markup.append(T "rom\n");
|
||||
markup.append(T T "map mode=shadow address=00-3f:8000-ffff\n");
|
||||
markup.append(T T "map mode=linear address=40-7f:0000-ffff\n");
|
||||
markup.append(T T "map mode=shadow address=80-bf:8000-ffff\n");
|
||||
markup.append(T T "map mode=linear address=c0-ff:0000-ffff\n");
|
||||
|
||||
if(ram_size > 0) {
|
||||
xml.append(" <ram size='0x", hex(ram_size), "'>\n");
|
||||
xml.append(" <map mode='linear' address='20-3f:6000-7fff'/>\n");
|
||||
xml.append(" <map mode='linear' address='a0-bf:6000-7fff'/>\n");
|
||||
markup.append(T "ram size=0x", hex(ram_size), "\n");
|
||||
markup.append(T T "map mode=linear address=20-3f:6000-7fff\n");
|
||||
markup.append(T T "map mode=linear address=a0-bf:6000-7fff\n");
|
||||
if((rom_size > 0x200000) || (ram_size > 32 * 1024)) {
|
||||
xml.append(" <map mode='linear' address='70-7f:0000-7fff'/>\n");
|
||||
markup.append(T T "map mode=linear address=70-7f:0000-7fff\n");
|
||||
} else {
|
||||
xml.append(" <map mode='linear' address='70-7f:0000-ffff'/>\n");
|
||||
markup.append(T T "map mode=linear address=70-7f:0000-ffff\n");
|
||||
}
|
||||
xml.append(" </ram>\n");
|
||||
}
|
||||
} else if(mapper == ExLoROM) {
|
||||
xml.append(" <rom>\n");
|
||||
xml.append(" <map mode='linear' address='00-3f:8000-ffff'/>\n");
|
||||
xml.append(" <map mode='linear' address='40-7f:0000-ffff'/>\n");
|
||||
xml.append(" <map mode='linear' address='80-bf:8000-ffff'/>\n");
|
||||
xml.append(" </rom>\n");
|
||||
markup.append(T "rom\n");
|
||||
markup.append(T T "map mode=linear address=00-3f:8000-ffff\n");
|
||||
markup.append(T T "map mode=linear address=40-7f:0000-ffff\n");
|
||||
markup.append(T T "map mode=linear address=80-bf:8000-ffff\n");
|
||||
|
||||
if(ram_size > 0) {
|
||||
xml.append(" <ram size='0x", hex(ram_size), "'>\n");
|
||||
xml.append(" <map mode='linear' address='20-3f:6000-7fff'/>\n");
|
||||
xml.append(" <map mode='linear' address='a0-bf:6000-7fff'/>\n");
|
||||
xml.append(" <map mode='linear' address='70-7f:0000-7fff'/>\n");
|
||||
xml.append(" </ram>\n");
|
||||
markup.append(T "ram size=0x", hex(ram_size), "\n");
|
||||
markup.append(T T "map mode=linear address=20-3f:6000-7fff\n");
|
||||
markup.append(T T "map mode=linear address=a0-bf:6000-7fff\n");
|
||||
markup.append(T T "map mode=linear address=70-7f:0000-7fff\n");
|
||||
}
|
||||
} else if(mapper == ExHiROM) {
|
||||
xml.append(" <rom>\n");
|
||||
xml.append(" <map mode='shadow' address='00-3f:8000-ffff' offset='0x400000'/>\n");
|
||||
xml.append(" <map mode='linear' address='40-7f:0000-ffff' offset='0x400000'/>\n");
|
||||
xml.append(" <map mode='shadow' address='80-bf:8000-ffff' offset='0x000000'/>\n");
|
||||
xml.append(" <map mode='linear' address='c0-ff:0000-ffff' offset='0x000000'/>\n");
|
||||
xml.append(" </rom>\n");
|
||||
markup.append(T "rom\n");
|
||||
markup.append(T T "map mode=shadow address=00-3f:8000-ffff offset=0x400000\n");
|
||||
markup.append(T T "map mode=linear address=40-7f:0000-ffff offset=0x400000\n");
|
||||
markup.append(T T "map mode=shadow address=80-bf:8000-ffff offset=0x000000\n");
|
||||
markup.append(T T "map mode=linear address=c0-ff:0000-ffff offset=0x000000\n");
|
||||
|
||||
if(ram_size > 0) {
|
||||
xml.append(" <ram size='0x", hex(ram_size), "'>\n");
|
||||
xml.append(" <map mode='linear' address='20-3f:6000-7fff'/>\n");
|
||||
xml.append(" <map mode='linear' address='a0-bf:6000-7fff'/>\n");
|
||||
markup.append(T "ram size=0x", hex(ram_size), "\n");
|
||||
markup.append(T T "map mode=linear address=20-3f:6000-7fff\n");
|
||||
markup.append(T T "map mode=linear address=a0-bf:6000-7fff\n");
|
||||
if((rom_size > 0x200000) || (ram_size > 32 * 1024)) {
|
||||
xml.append(" <map mode='linear' address='70-7f:0000-7fff'/>\n");
|
||||
markup.append(T T "map mode=linear address=70-7f:0000-7fff\n");
|
||||
} else {
|
||||
xml.append(" <map mode='linear' address='70-7f:0000-ffff'/>\n");
|
||||
markup.append(T T "map mode=linear address=70-7f:0000-ffff\n");
|
||||
}
|
||||
xml.append(" </ram>\n");
|
||||
}
|
||||
} else if(mapper == SuperFXROM) {
|
||||
xml.append(" <superfx revision='2'>\n");
|
||||
xml.append(" <rom>\n");
|
||||
xml.append(" <map mode='linear' address='00-3f:8000-ffff'/>\n");
|
||||
xml.append(" <map mode='linear' address='40-5f:0000-ffff'/>\n");
|
||||
xml.append(" <map mode='linear' address='80-bf:8000-ffff'/>\n");
|
||||
xml.append(" <map mode='linear' address='c0-df:0000-ffff'/>\n");
|
||||
xml.append(" </rom>\n");
|
||||
xml.append(" <ram size='0x", hex(ram_size), "'>\n");
|
||||
xml.append(" <map mode='linear' address='00-3f:6000-7fff' size='0x2000'/>\n");
|
||||
xml.append(" <map mode='linear' address='60-7f:0000-ffff'/>\n");
|
||||
xml.append(" <map mode='linear' address='80-bf:6000-7fff' size='0x2000'/>\n");
|
||||
xml.append(" <map mode='linear' address='e0-ff:0000-ffff'/>\n");
|
||||
xml.append(" </ram>\n");
|
||||
xml.append(" <mmio>\n");
|
||||
xml.append(" <map address='00-3f:3000-32ff'/>\n");
|
||||
xml.append(" <map address='80-bf:3000-32ff'/>\n");
|
||||
xml.append(" </mmio>\n");
|
||||
xml.append(" </superfx>\n");
|
||||
markup.append(T "superfx revision=2\n");
|
||||
markup.append(T T "rom\n");
|
||||
markup.append(T T T "map mode=linear address=00-3f:8000-ffff\n");
|
||||
markup.append(T T T "map mode=linear address=40-5f:0000-ffff\n");
|
||||
markup.append(T T T "map mode=linear address=80-bf:8000-ffff\n");
|
||||
markup.append(T T T "map mode=linear address=c0-df:0000-ffff\n");
|
||||
markup.append(T T "ram size=0x", hex(ram_size), "\n");
|
||||
markup.append(T T T "map mode=linear address=00-3f:6000-7fff size=0x2000\n");
|
||||
markup.append(T T T "map mode=linear address=60-7f:0000-ffff\n");
|
||||
markup.append(T T T "map mode=linear address=80-bf:6000-7fff size=0x2000\n");
|
||||
markup.append(T T T "map mode=linear address=e0-ff:0000-ffff\n");
|
||||
markup.append(T T "mmio\n");
|
||||
markup.append(T T T "map address=00-3f:3000-32ff\n");
|
||||
markup.append(T T T "map address=80-bf:3000-32ff\n");
|
||||
} else if(mapper == SA1ROM) {
|
||||
xml.append(" <sa1>\n");
|
||||
xml.append(" <mcu>\n");
|
||||
xml.append(" <rom>\n");
|
||||
xml.append(" <map mode='direct' address='00-3f:8000-ffff'/>\n");
|
||||
xml.append(" <map mode='direct' address='80-bf:8000-ffff'/>\n");
|
||||
xml.append(" <map mode='direct' address='c0-ff:0000-ffff'/>\n");
|
||||
xml.append(" </rom>\n");
|
||||
xml.append(" <ram>\n");
|
||||
xml.append(" <map mode='direct' address='00-3f:6000-7fff'/>\n");
|
||||
xml.append(" <map mode='direct' address='80-bf:6000-7fff'/>\n");
|
||||
xml.append(" </ram>\n");
|
||||
xml.append(" </mcu>\n");
|
||||
xml.append(" <iram size='0x800'>\n");
|
||||
xml.append(" <map mode='linear' address='00-3f:3000-37ff'/>\n");
|
||||
xml.append(" <map mode='linear' address='80-bf:3000-37ff'/>\n");
|
||||
xml.append(" </iram>\n");
|
||||
xml.append(" <bwram size='0x", hex(ram_size), "'>\n");
|
||||
xml.append(" <map mode='linear' address='40-4f:0000-ffff'/>\n");
|
||||
xml.append(" </bwram>\n");
|
||||
xml.append(" <mmio>\n");
|
||||
xml.append(" <map address='00-3f:2200-23ff'/>\n");
|
||||
xml.append(" <map address='80-bf:2200-23ff'/>\n");
|
||||
xml.append(" </mmio>\n");
|
||||
xml.append(" </sa1>\n");
|
||||
markup.append(T "sa1\n");
|
||||
markup.append(T T "mcu\n");
|
||||
markup.append(T T T "rom\n");
|
||||
markup.append(T T T T "map mode=direct address=00-3f:8000-ffff\n");
|
||||
markup.append(T T T T "map mode=direct address=80-bf:8000-ffff\n");
|
||||
markup.append(T T T T "map mode=direct address=c0-ff:0000-ffff\n");
|
||||
markup.append(T T T "ram\n");
|
||||
markup.append(T T T T "map mode=direct address=00-3f:6000-7fff\n");
|
||||
markup.append(T T T T "map mode=direct address=80-bf:6000-7fff\n");
|
||||
markup.append(T T "iram size=0x800\n");
|
||||
markup.append(T T T "map mode=linear address=00-3f:3000-37ff\n");
|
||||
markup.append(T T T "map mode=linear address=80-bf:3000-37ff\n");
|
||||
markup.append(T T "bwram size=0x", hex(ram_size), "\n");
|
||||
markup.append(T T T "map mode=linear address=40-4f:0000-ffff\n");
|
||||
markup.append(T T "mmio\n");
|
||||
markup.append(T T T "map address=00-3f:2200-23ff\n");
|
||||
markup.append(T T T "map address=80-bf:2200-23ff\n");
|
||||
} else if(mapper == BSCLoROM) {
|
||||
xml.append(" <rom>\n");
|
||||
xml.append(" <map mode='linear' address='00-1f:8000-ffff' offset='0x000000'/>\n");
|
||||
xml.append(" <map mode='linear' address='20-3f:8000-ffff' offset='0x100000'/>\n");
|
||||
xml.append(" <map mode='linear' address='80-9f:8000-ffff' offset='0x200000'/>\n");
|
||||
xml.append(" <map mode='linear' address='a0-bf:8000-ffff' offset='0x100000'/>\n");
|
||||
xml.append(" </rom>\n");
|
||||
xml.append(" <ram size='0x", hex(ram_size), "'>\n");
|
||||
xml.append(" <map mode='linear' address='70-7f:0000-7fff'/>\n");
|
||||
xml.append(" <map mode='linear' address='f0-ff:0000-7fff'/>\n");
|
||||
xml.append(" </ram>\n");
|
||||
xml.append(" <bsx>\n");
|
||||
xml.append(" <slot>\n");
|
||||
xml.append(" <map mode='linear' address='c0-ef:0000-ffff'/>\n");
|
||||
xml.append(" </slot>\n");
|
||||
xml.append(" </bsx>\n");
|
||||
markup.append(T "rom\n");
|
||||
markup.append(T T "map mode=linear address=00-1f:8000-ffff offset=0x000000\n");
|
||||
markup.append(T T "map mode=linear address=20-3f:8000-ffff offset=0x100000\n");
|
||||
markup.append(T T "map mode=linear address=80-9f:8000-ffff offset=0x200000\n");
|
||||
markup.append(T T "map mode=linear address=a0-bf:8000-ffff offset=0x100000\n");
|
||||
markup.append(T "ram size=0x", hex(ram_size), "\n");
|
||||
markup.append(T T "map mode=linear address=70-7f:0000-7fff\n");
|
||||
markup.append(T T "map mode=linear address=f0-ff:0000-7fff\n");
|
||||
markup.append(T "bsx\n");
|
||||
markup.append(T T "slot\n");
|
||||
markup.append(T T T "map mode=linear address=c0-ef:0000-ffff\n");
|
||||
} else if(mapper == BSCHiROM) {
|
||||
xml.append(" <rom>\n");
|
||||
xml.append(" <map mode='shadow' address='00-1f:8000-ffff'/>\n");
|
||||
xml.append(" <map mode='linear' address='40-5f:0000-ffff'/>\n");
|
||||
xml.append(" <map mode='shadow' address='80-9f:8000-ffff'/>\n");
|
||||
xml.append(" <map mode='linear' address='c0-df:0000-ffff'/>\n");
|
||||
xml.append(" </rom>\n");
|
||||
xml.append(" <ram size='0x", hex(ram_size), "'>\n");
|
||||
xml.append(" <map mode='linear' address='20-3f:6000-7fff'/>\n");
|
||||
xml.append(" <map mode='linear' address='a0-bf:6000-7fff'/>\n");
|
||||
xml.append(" </ram>\n");
|
||||
xml.append(" <bsx>\n");
|
||||
xml.append(" <slot>\n");
|
||||
xml.append(" <map mode='shadow' address='20-3f:8000-ffff'/>\n");
|
||||
xml.append(" <map mode='linear' address='60-7f:0000-ffff'/>\n");
|
||||
xml.append(" <map mode='shadow' address='a0-bf:8000-ffff'/>\n");
|
||||
xml.append(" <map mode='linear' address='e0-ff:0000-ffff'/>\n");
|
||||
xml.append(" </slot>\n");
|
||||
xml.append(" </bsx>\n");
|
||||
markup.append(T "rom\n");
|
||||
markup.append(T T "map mode=shadow address=00-1f:8000-ffff\n");
|
||||
markup.append(T T "map mode=linear address=40-5f:0000-ffff\n");
|
||||
markup.append(T T "map mode=shadow address=80-9f:8000-ffff\n");
|
||||
markup.append(T T "map mode=linear address=c0-df:0000-ffff\n");
|
||||
markup.append(T "ram size=0x", hex(ram_size), "\n");
|
||||
markup.append(T T "map mode=linear address=20-3f:6000-7fff\n");
|
||||
markup.append(T T "map mode=linear address=a0-bf:6000-7fff\n");
|
||||
markup.append(T "bsx\n");
|
||||
markup.append(T T "slot\n");
|
||||
markup.append(T T T "map mode=shadow address=20-3f:8000-ffff\n");
|
||||
markup.append(T T T "map mode=linear address=60-7f:0000-ffff\n");
|
||||
markup.append(T T T "map mode=shadow address=a0-bf:8000-ffff\n");
|
||||
markup.append(T T T "map mode=linear address=e0-ff:0000-ffff\n");
|
||||
} else if(mapper == BSXROM) {
|
||||
xml.append(" <bsx>\n");
|
||||
xml.append(" <mcu>\n");
|
||||
xml.append(" <map address='00-3f:8000-ffff'/>\n");
|
||||
xml.append(" <map address='80-bf:8000-ffff'/>\n");
|
||||
xml.append(" <map address='40-7f:0000-ffff'/>\n");
|
||||
xml.append(" <map address='c0-ff:0000-ffff'/>\n");
|
||||
xml.append(" <map address='20-3f:6000-7fff'/>\n");
|
||||
xml.append(" </mcu>\n");
|
||||
xml.append(" <mmio>\n");
|
||||
xml.append(" <map address='00-3f:5000-5fff'/>\n");
|
||||
xml.append(" <map address='80-bf:5000-5fff'/>\n");
|
||||
xml.append(" </mmio>\n");
|
||||
xml.append(" </bsx>\n");
|
||||
markup.append(T "bsx\n");
|
||||
markup.append(T T "mcu\n");
|
||||
markup.append(T T T "map address=00-3f:8000-ffff\n");
|
||||
markup.append(T T T "map address=80-bf:8000-ffff\n");
|
||||
markup.append(T T T "map address=40-7f:0000-ffff\n");
|
||||
markup.append(T T T "map address=c0-ff:0000-ffff\n");
|
||||
markup.append(T T T "map address=20-3f:6000-7fff\n");
|
||||
markup.append(T T "mmio\n");
|
||||
markup.append(T T T "map address=00-3f:5000-5fff\n");
|
||||
markup.append(T T T "map address=80-bf:5000-5fff\n");
|
||||
} else if(mapper == STROM) {
|
||||
xml.append(" <rom>\n");
|
||||
xml.append(" <map mode='linear' address='00-1f:8000-ffff'/>\n");
|
||||
xml.append(" <map mode='linear' address='80-9f:8000-ffff'/>\n");
|
||||
xml.append(" </rom>\n");
|
||||
xml.append(" <sufamiturbo>\n");
|
||||
xml.append(" <slot id='A'>\n");
|
||||
xml.append(" <rom>\n");
|
||||
xml.append(" <map mode='linear' address='20-3f:8000-ffff'/>\n");
|
||||
xml.append(" <map mode='linear' address='a0-bf:8000-ffff'/>\n");
|
||||
xml.append(" </rom>\n");
|
||||
xml.append(" <ram size='0x20000'>\n");
|
||||
xml.append(" <map mode='linear' address='60-63:8000-ffff'/>\n");
|
||||
xml.append(" <map mode='linear' address='e0-e3:8000-ffff'/>\n");
|
||||
xml.append(" </ram>\n");
|
||||
xml.append(" </slot>\n");
|
||||
xml.append(" <slot id='B'>\n");
|
||||
xml.append(" <rom>\n");
|
||||
xml.append(" <map mode='linear' address='40-5f:8000-ffff'/>\n");
|
||||
xml.append(" <map mode='linear' address='c0-df:8000-ffff'/>\n");
|
||||
xml.append(" </rom>\n");
|
||||
xml.append(" <ram size='0x20000'>\n");
|
||||
xml.append(" <map mode='linear' address='70-73:8000-ffff'/>\n");
|
||||
xml.append(" <map mode='linear' address='f0-f3:8000-ffff'/>\n");
|
||||
xml.append(" </ram>\n");
|
||||
xml.append(" </slot>\n");
|
||||
xml.append(" </sufamiturbo>\n");
|
||||
markup.append(T "rom\n");
|
||||
markup.append(T T "map mode=linear address=00-1f:8000-ffff\n");
|
||||
markup.append(T T "map mode=linear address=80-9f:8000-ffff\n");
|
||||
markup.append(T "sufamiturbo\n");
|
||||
markup.append(T T "slot id=A\n");
|
||||
markup.append(T T T "rom\n");
|
||||
markup.append(T T T T "map mode=linear address=20-3f:8000-ffff\n");
|
||||
markup.append(T T T T "map mode=linear address=a0-bf:8000-ffff\n");
|
||||
markup.append(T T T "ram size=0x20000\n");
|
||||
markup.append(T T T T "map mode=linear address=60-63:8000-ffff\n");
|
||||
markup.append(T T T T "map mode=linear address=e0-e3:8000-ffff\n");
|
||||
markup.append(T T "slot id=B\n");
|
||||
markup.append(T T T "rom\n");
|
||||
markup.append(T T T T "map mode=linear address=40-5f:8000-ffff\n");
|
||||
markup.append(T T T T "map mode=linear address=c0-df:8000-ffff\n");
|
||||
markup.append(T T T "ram size=0x20000\n");
|
||||
markup.append(T T T T "map mode=linear address=70-73:8000-ffff\n");
|
||||
markup.append(T T T T "map mode=linear address=f0-f3:8000-ffff\n");
|
||||
}
|
||||
|
||||
if(has_srtc) {
|
||||
xml.append(" <srtc>\n");
|
||||
xml.append(" <map address='00-3f:2800-2801'/>\n");
|
||||
xml.append(" <map address='80-bf:2800-2801'/>\n");
|
||||
xml.append(" </srtc>\n");
|
||||
markup.append(T "srtc\n");
|
||||
markup.append(T T "map address=00-3f:2800-2801\n");
|
||||
markup.append(T T "map address=80-bf:2800-2801\n");
|
||||
}
|
||||
|
||||
if(has_sdd1) {
|
||||
xml.append(" <sdd1>\n");
|
||||
xml.append(" <mcu>\n");
|
||||
xml.append(" <map address='c0-ff:0000-ffff'/>\n");
|
||||
xml.append(" </mcu>\n");
|
||||
xml.append(" <mmio>\n");
|
||||
xml.append(" <map address='00-3f:4800-4807'/>\n");
|
||||
xml.append(" <map address='80-bf:4800-4807'/>\n");
|
||||
xml.append(" </mmio>\n");
|
||||
xml.append(" </sdd1>\n");
|
||||
markup.append(T "sdd1\n");
|
||||
markup.append(T T "mcu\n");
|
||||
markup.append(T T T "map address=c0-ff:0000-ffff\n");
|
||||
markup.append(T T "mmio\n");
|
||||
markup.append(T T T "map address=00-3f:4800-4807\n");
|
||||
markup.append(T T T "map address=80-bf:4800-4807\n");
|
||||
}
|
||||
|
||||
if(has_dsp1) {
|
||||
xml.append(" <necdsp model='uPD7725' frequency='8000000' firmware='dsp1b.bin' sha256='4d42db0f36faef263d6b93f508e8c1c4ae8fc2605fd35e3390ecc02905cd420c'>\n");
|
||||
markup.append(T "necdsp model=uPD7725 frequency=8000000 firmware=dsp1b.bin sha256=4d42db0f36faef263d6b93f508e8c1c4ae8fc2605fd35e3390ecc02905cd420c\n");
|
||||
if(dsp1_mapper == DSP1LoROM1MB) {
|
||||
xml.append(" <dr>\n");
|
||||
xml.append(" <map address='20-3f:8000-bfff'/>\n");
|
||||
xml.append(" <map address='a0-bf:8000-bfff'/>\n");
|
||||
xml.append(" </dr>\n");
|
||||
xml.append(" <sr>\n");
|
||||
xml.append(" <map address='20-3f:c000-ffff'/>\n");
|
||||
xml.append(" <map address='a0-bf:c000-ffff'/>\n");
|
||||
xml.append(" </sr>\n");
|
||||
markup.append(T T "dr\n");
|
||||
markup.append(T T T "map address=20-3f:8000-bfff\n");
|
||||
markup.append(T T T "map address=a0-bf:8000-bfff\n");
|
||||
markup.append(T T "sr\n");
|
||||
markup.append(T T T "map address=20-3f:c000-ffff\n");
|
||||
markup.append(T T T "map address=a0-bf:c000-ffff\n");
|
||||
} else if(dsp1_mapper == DSP1LoROM2MB) {
|
||||
xml.append(" <dr>\n");
|
||||
xml.append(" <map address='60-6f:0000-3fff'/>\n");
|
||||
xml.append(" <map address='e0-ef:0000-3fff'/>\n");
|
||||
xml.append(" </dr>\n");
|
||||
xml.append(" <sr>\n");
|
||||
xml.append(" <map address='60-6f:4000-7fff'/>\n");
|
||||
xml.append(" <map address='e0-ef:4000-7fff'/>\n");
|
||||
xml.append(" </sr>\n");
|
||||
markup.append(T T "dr\n");
|
||||
markup.append(T T T "map address=60-6f:0000-3fff\n");
|
||||
markup.append(T T T "map address=e0-ef:0000-3fff\n");
|
||||
markup.append(T T "sr\n");
|
||||
markup.append(T T T "map address=60-6f:4000-7fff\n");
|
||||
markup.append(T T T "map address=e0-ef:4000-7fff\n");
|
||||
} else if(dsp1_mapper == DSP1HiROM) {
|
||||
xml.append(" <dr>\n");
|
||||
xml.append(" <map address='00-1f:6000-6fff'/>\n");
|
||||
xml.append(" <map address='80-9f:6000-6fff'/>\n");
|
||||
xml.append(" </dr>\n");
|
||||
xml.append(" <sr>\n");
|
||||
xml.append(" <map address='00-1f:7000-7fff'/>\n");
|
||||
xml.append(" <map address='80-9f:7000-7fff'/>\n");
|
||||
xml.append(" </sr>\n");
|
||||
markup.append(T T "dr\n");
|
||||
markup.append(T T T "map address=00-1f:6000-6fff\n");
|
||||
markup.append(T T T "map address=80-9f:6000-6fff\n");
|
||||
markup.append(T T "sr\n");
|
||||
markup.append(T T T "map address=00-1f:7000-7fff\n");
|
||||
markup.append(T T T "map address=80-9f:7000-7fff\n");
|
||||
}
|
||||
xml.append(" </necdsp>\n");
|
||||
}
|
||||
|
||||
if(has_dsp2) {
|
||||
xml.append(" <necdsp model='uPD7725' frequency='8000000' firmware='dsp2.bin' sha256='5efbdf96ed0652790855225964f3e90e6a4d466cfa64df25b110933c6cf94ea1'>\n");
|
||||
xml.append(" <dr>\n");
|
||||
xml.append(" <map address='20-3f:8000-bfff'/>\n");
|
||||
xml.append(" <map address='a0-bf:8000-bfff'/>\n");
|
||||
xml.append(" </dr>\n");
|
||||
xml.append(" <sr>\n");
|
||||
xml.append(" <map address='20-3f:c000-ffff'/>\n");
|
||||
xml.append(" <map address='a0-bf:c000-ffff'/>\n");
|
||||
xml.append(" </sr>\n");
|
||||
xml.append(" </necdsp>\n");
|
||||
markup.append(T "necdsp model=uPD7725 frequency=8000000 firmware=dsp2.bin sha256=5efbdf96ed0652790855225964f3e90e6a4d466cfa64df25b110933c6cf94ea1\n");
|
||||
markup.append(T T "dr\n");
|
||||
markup.append(T T T "map address=20-3f:8000-bfff\n");
|
||||
markup.append(T T T "map address=a0-bf:8000-bfff\n");
|
||||
markup.append(T T "sr\n");
|
||||
markup.append(T T T "map address=20-3f:c000-ffff\n");
|
||||
markup.append(T T T "map address=a0-bf:c000-ffff\n");
|
||||
}
|
||||
|
||||
if(has_dsp3) {
|
||||
xml.append(" <necdsp model='uPD7725' frequency='8000000' firmware='dsp3.bin' sha256='2e635f72e4d4681148bc35429421c9b946e4f407590e74e31b93b8987b63ba90'>\n");
|
||||
xml.append(" <dr>\n");
|
||||
xml.append(" <map address='20-3f:8000-bfff'/>\n");
|
||||
xml.append(" <map address='a0-bf:8000-bfff'/>\n");
|
||||
xml.append(" </dr>\n");
|
||||
xml.append(" <sr>\n");
|
||||
xml.append(" <map address='20-3f:c000-ffff'/>\n");
|
||||
xml.append(" <map address='a0-bf:c000-ffff'/>\n");
|
||||
xml.append(" </sr>\n");
|
||||
xml.append(" </necdsp>\n");
|
||||
markup.append(T "necdsp model=uPD7725 frequency=8000000 firmware=dsp3.bin sha256=2e635f72e4d4681148bc35429421c9b946e4f407590e74e31b93b8987b63ba90\n");
|
||||
markup.append(T T "dr\n");
|
||||
markup.append(T T T "map address=20-3f:8000-bfff\n");
|
||||
markup.append(T T T "map address=a0-bf:8000-bfff\n");
|
||||
markup.append(T T "sr\n");
|
||||
markup.append(T T T "map address=20-3f:c000-ffff\n");
|
||||
markup.append(T T T "map address=a0-bf:c000-ffff\n");
|
||||
}
|
||||
|
||||
if(has_dsp4) {
|
||||
xml.append(" <necdsp model='uPD7725' frequency='8000000' firmware='dsp4.bin' sha256='63ede17322541c191ed1fdf683872554a0a57306496afc43c59de7c01a6e764a'>\n");
|
||||
xml.append(" <dr>\n");
|
||||
xml.append(" <map address='30-3f:8000-bfff'/>\n");
|
||||
xml.append(" <map address='b0-bf:8000-bfff'/>\n");
|
||||
xml.append(" </dr>\n");
|
||||
xml.append(" <sr>\n");
|
||||
xml.append(" <map address='30-3f:c000-ffff'/>\n");
|
||||
xml.append(" <map address='b0-bf:c000-ffff'/>\n");
|
||||
xml.append(" </sr>\n");
|
||||
xml.append(" </necdsp>\n");
|
||||
markup.append(T "necdsp model=uPD7725 frequency=8000000 firmware=dsp4.bin sha256=63ede17322541c191ed1fdf683872554a0a57306496afc43c59de7c01a6e764a\n");
|
||||
markup.append(T T "dr\n");
|
||||
markup.append(T T T "map address=30-3f:8000-bfff\n");
|
||||
markup.append(T T T "map address=b0-bf:8000-bfff\n");
|
||||
markup.append(T T "sr\n");
|
||||
markup.append(T T T "map address=30-3f:c000-ffff\n");
|
||||
markup.append(T T T "map address=b0-bf:c000-ffff\n");
|
||||
}
|
||||
|
||||
if(has_obc1) {
|
||||
xml.append(" <obc1>\n");
|
||||
xml.append(" <map address='00-3f:6000-7fff'/>\n");
|
||||
xml.append(" <map address='80-bf:6000-7fff'/>\n");
|
||||
xml.append(" </obc1>\n");
|
||||
markup.append(T "obc1\n");
|
||||
markup.append(T T "map address=00-3f:6000-7fff\n");
|
||||
markup.append(T T "map address=80-bf:6000-7fff\n");
|
||||
}
|
||||
|
||||
if(has_st010) {
|
||||
xml.append(" <necdsp model='uPD96050' frequency='10000000' firmware='st0010.bin' sha256='55c697e864562445621cdf8a7bf6e84ae91361e393d382a3704e9aa55559041e'>\n");
|
||||
xml.append(" <dr>\n");
|
||||
xml.append(" <map address='60:0000'/>\n");
|
||||
xml.append(" <map address='e0:0000'/>\n");
|
||||
xml.append(" </dr>\n");
|
||||
xml.append(" <sr>\n");
|
||||
xml.append(" <map address='60:0001'/>\n");
|
||||
xml.append(" <map address='e0:0001'/>\n");
|
||||
xml.append(" </sr>\n");
|
||||
xml.append(" <dp>\n");
|
||||
xml.append(" <map address='68-6f:0000-0fff'/>\n");
|
||||
xml.append(" <map address='e8-ef:0000-0fff'/>\n");
|
||||
xml.append(" </dp>\n");
|
||||
xml.append(" </necdsp>\n");
|
||||
markup.append(T "necdsp model=uPD96050 frequency=10000000 firmware=st0010.bin sha256=55c697e864562445621cdf8a7bf6e84ae91361e393d382a3704e9aa55559041e\n");
|
||||
markup.append(T T "dr\n");
|
||||
markup.append(T T T "map address=60:0000\n");
|
||||
markup.append(T T T "map address=e0:0000\n");
|
||||
markup.append(T T "sr\n");
|
||||
markup.append(T T T "map address=60:0001\n");
|
||||
markup.append(T T T "map address=e0:0001\n");
|
||||
markup.append(T T "dp\n");
|
||||
markup.append(T T T "map address=68-6f:0000-0fff\n");
|
||||
markup.append(T T T "map address=e8-ef:0000-0fff\n");
|
||||
}
|
||||
|
||||
if(has_st011) {
|
||||
xml.append(" <necdsp model='uPD96050' frequency='15000000' firmware='st0011.bin' sha256='651b82a1e26c4fa8dd549e91e7f923012ed2ca54c1d9fd858655ab30679c2f0e'>\n");
|
||||
xml.append(" <dr>\n");
|
||||
xml.append(" <map address='60:0000'/>\n");
|
||||
xml.append(" <map address='e0:0000'/>\n");
|
||||
xml.append(" </dr>\n");
|
||||
xml.append(" <sr>\n");
|
||||
xml.append(" <map address='60:0001'/>\n");
|
||||
xml.append(" <map address='e0:0001'/>\n");
|
||||
xml.append(" </sr>\n");
|
||||
xml.append(" <dp>\n");
|
||||
xml.append(" <map address='68-6f:0000-0fff'/>\n");
|
||||
xml.append(" <map address='e8-ef:0000-0fff'/>\n");
|
||||
xml.append(" </dp>\n");
|
||||
xml.append(" </necdsp>\n");
|
||||
markup.append(T "necdsp model=uPD96050 frequency=15000000 firmware=st0011.bin sha256=651b82a1e26c4fa8dd549e91e7f923012ed2ca54c1d9fd858655ab30679c2f0e\n");
|
||||
markup.append(T T "dr\n");
|
||||
markup.append(T T T "map address=60:0000\n");
|
||||
markup.append(T T T "map address=e0:0000\n");
|
||||
markup.append(T T "sr\n");
|
||||
markup.append(T T T "map address=60:0001\n");
|
||||
markup.append(T T T "map address=e0:0001\n");
|
||||
markup.append(T T "dp\n");
|
||||
markup.append(T T T "map address=68-6f:0000-0fff\n");
|
||||
markup.append(T T T "map address=e8-ef:0000-0fff\n");
|
||||
}
|
||||
|
||||
if(has_st018) {
|
||||
xml.append(" <setarisc firmware='ST-0018'>\n");
|
||||
xml.append(" <map address='00-3f:3800-38ff'/>\n");
|
||||
xml.append(" <map address='80-bf:3800-38ff'/>\n");
|
||||
xml.append(" </setarisc>\n");
|
||||
markup.append(T "setarisc firmware=ST-0018\n");
|
||||
markup.append(T T "map address=00-3f:3800-38ff\n");
|
||||
markup.append(T T "map address=80-bf:3800-38ff\n");
|
||||
}
|
||||
|
||||
xml.append("</cartridge>\n");
|
||||
xmlMemoryMap = xml.transform("'", "\"");
|
||||
}
|
||||
|
||||
void SNESCartridge::read_header(const uint8_t *data, unsigned size) {
|
||||
#undef T
|
||||
|
||||
void SnesCartridge::read_header(const uint8_t *data, unsigned size) {
|
||||
type = TypeUnknown;
|
||||
mapper = LoROM;
|
||||
dsp1_mapper = DSP1Unmapped;
|
||||
@ -762,7 +672,7 @@ void SNESCartridge::read_header(const uint8_t *data, unsigned size) {
|
||||
}
|
||||
}
|
||||
|
||||
unsigned SNESCartridge::find_header(const uint8_t *data, unsigned size) {
|
||||
unsigned SnesCartridge::find_header(const uint8_t *data, unsigned size) {
|
||||
unsigned score_lo = score_header(data, size, 0x007fc0);
|
||||
unsigned score_hi = score_header(data, size, 0x00ffc0);
|
||||
unsigned score_ex = score_header(data, size, 0x40ffc0);
|
||||
@ -777,7 +687,7 @@ unsigned SNESCartridge::find_header(const uint8_t *data, unsigned size) {
|
||||
}
|
||||
}
|
||||
|
||||
unsigned SNESCartridge::score_header(const uint8_t *data, unsigned size, unsigned addr) {
|
||||
unsigned SnesCartridge::score_header(const uint8_t *data, unsigned size, unsigned addr) {
|
||||
if(size < addr + 64) return 0; //image too small to contain header at this location?
|
||||
int score = 0;
|
||||
|
||||
@ -858,7 +768,7 @@ unsigned SNESCartridge::score_header(const uint8_t *data, unsigned size, unsigne
|
||||
return score;
|
||||
}
|
||||
|
||||
unsigned SNESCartridge::gameboy_ram_size(const uint8_t *data, unsigned size) {
|
||||
unsigned SnesCartridge::gameboy_ram_size(const uint8_t *data, unsigned size) {
|
||||
if(size < 512) return 0;
|
||||
switch(data[0x0149]) {
|
||||
case 0x00: return 0 * 1024;
|
||||
@ -871,7 +781,7 @@ unsigned SNESCartridge::gameboy_ram_size(const uint8_t *data, unsigned size) {
|
||||
}
|
||||
}
|
||||
|
||||
bool SNESCartridge::gameboy_has_rtc(const uint8_t *data, unsigned size) {
|
||||
bool SnesCartridge::gameboy_has_rtc(const uint8_t *data, unsigned size) {
|
||||
if(size < 512) return false;
|
||||
if(data[0x0147] == 0x0f ||data[0x0147] == 0x10) return true;
|
||||
return false;
|
||||
|
@ -21,6 +21,7 @@
|
||||
#include <nall/string/split.hpp>
|
||||
#include <nall/string/utility.hpp>
|
||||
#include <nall/string/variadic.hpp>
|
||||
#include <nall/string/wrapper.hpp>
|
||||
#include <nall/string/xml.hpp>
|
||||
|
||||
#include <nall/string/bml.hpp>
|
||||
|
@ -120,6 +120,9 @@ namespace nall {
|
||||
inline string& rtrim_once(const char *key = " ");
|
||||
inline string& trim_once (const char *key = " ");
|
||||
|
||||
inline bool wildcard(const char*) const;
|
||||
inline bool iwildcard(const char*) const;
|
||||
|
||||
protected:
|
||||
char *data;
|
||||
unsigned size;
|
||||
@ -168,6 +171,8 @@ namespace nall {
|
||||
inline bool stribegin(const char *str, const char *key);
|
||||
inline bool strend (const char *str, const char *key);
|
||||
inline bool striend(const char *str, const char *key);
|
||||
inline bool wildcard(const char *str, const char *pattern);
|
||||
inline bool iwildcard(const char *str, const char *pattern);
|
||||
|
||||
//convert.hpp
|
||||
inline char* strlower(char *str);
|
||||
|
@ -67,6 +67,46 @@ inline bool striend(const char *str, const char *key) {
|
||||
return true;
|
||||
}
|
||||
|
||||
bool wildcard(const char *s, const char *p) {
|
||||
const char *cp = 0, *mp = 0;
|
||||
while(*s && *p != '*') {
|
||||
if(*p != '?' && *s != *p) return false;
|
||||
p++, s++;
|
||||
}
|
||||
while(*s) {
|
||||
if(*p == '*') {
|
||||
if(!*++p) return true;
|
||||
mp = p, cp = s + 1;
|
||||
} else if(*p == '?' || *p == *s) {
|
||||
p++, s++;
|
||||
} else {
|
||||
p = mp, s = cp++;
|
||||
}
|
||||
}
|
||||
while(*p == '*') p++;
|
||||
return !*p;
|
||||
}
|
||||
|
||||
bool iwildcard(const char *s, const char *p) {
|
||||
const char *cp = 0, *mp = 0;
|
||||
while(*s && *p != '*') {
|
||||
if(*p != '?' && chrlower(*s) != chrlower(*p)) return false;
|
||||
p++, s++;
|
||||
}
|
||||
while(*s) {
|
||||
if(*p == '*') {
|
||||
if(!*++p) return true;
|
||||
mp = p, cp = s + 1;
|
||||
} else if(*p == '?' || chrlower(*p) == chrlower(*s)) {
|
||||
p++, s++;
|
||||
} else {
|
||||
p = mp, s = cp++;
|
||||
}
|
||||
}
|
||||
while(*p == '*') p++;
|
||||
return !*p;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
43
nall/string/wrapper.hpp
Normal file
43
nall/string/wrapper.hpp
Normal file
@ -0,0 +1,43 @@
|
||||
#ifndef NALL_STRING_WRAPPER_HPP
|
||||
#define NALL_STRING_WRAPPER_HPP
|
||||
|
||||
namespace nall {
|
||||
|
||||
/*
|
||||
unsigned string::length() const { return strlen(data); }
|
||||
|
||||
bool string::equals(const char *str) const { return !strcmp(data, str); }
|
||||
bool string::iequals(const char *str) const { return !istrcmp(data, str); }
|
||||
|
||||
bool string::wildcard(const char *str) const { return nall::wildcard(data, str); }
|
||||
bool string::iwildcard(const char *str) const { return nall::iwildcard(data, str); }
|
||||
|
||||
bool string::beginswith(const char *str) const { return strbegin(data, str); }
|
||||
bool string::ibeginswith(const char *str) const { return istrbegin(data, str); }
|
||||
|
||||
bool string::endswith(const char *str) const { return strend(data, str); }
|
||||
bool string::iendswith(const char *str) const { return istrend(data, str); }
|
||||
|
||||
string& string::lower() { nall::strlower(data); return *this; }
|
||||
string& string::upper() { nall::strupper(data); return *this; }
|
||||
string& string::qlower() { nall::qstrlower(data); return *this; }
|
||||
string& string::qupper() { nall::qstrupper(data); return *this; }
|
||||
string& string::transform(const char *before, const char *after) { nall::strtr(data, before, after); return *this; }
|
||||
|
||||
template<unsigned limit> string& string::ltrim(const char *key) { nall::ltrim<limit>(data, key); return *this; }
|
||||
template<unsigned limit> string& string::rtrim(const char *key) { nall::rtrim<limit>(data, key); return *this; }
|
||||
template<unsigned limit> string& string::trim(const char *key, const char *rkey) { nall::trim <limit>(data, key, rkey); return *this; }
|
||||
|
||||
optional<unsigned> string::position(const char *key) const { return strpos(data, key); }
|
||||
optional<unsigned> string::iposition(const char *key) const { return istrpos(data, key); }
|
||||
optional<unsigned> string::qposition(const char *key) const { return qstrpos(data, key); }
|
||||
optional<unsigned> string::iqposition(const char *key) const { return iqstrpos(data, key); }
|
||||
*/
|
||||
|
||||
bool string::wildcard(const char *str) const { return nall::wildcard(data, str); }
|
||||
bool string::iwildcard(const char *str) const { return nall::iwildcard(data, str); }
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@ -115,7 +115,7 @@ uint16 PPU::Screen::get_pixel_sub(unsigned x) {
|
||||
}
|
||||
|
||||
void PPU::Screen::render() {
|
||||
uint16 *data = self.output + self.vcounter() * 1024;
|
||||
uint32 *data = self.output + self.vcounter() * 1024;
|
||||
if(self.interlace() && self.field()) data += 512;
|
||||
|
||||
if(!self.regs.pseudo_hires && self.regs.bgmode != 5 && self.regs.bgmode != 6) {
|
||||
|
@ -65,51 +65,33 @@ Cheat::~Cheat() {
|
||||
delete[] override;
|
||||
}
|
||||
|
||||
//===============
|
||||
//encode / decode
|
||||
//===============
|
||||
|
||||
bool Cheat::decode(const char *s, unsigned &addr, uint8 &data, Type &type) {
|
||||
string t = s;
|
||||
bool Cheat::decode(const string &code, unsigned &addr, unsigned &data) {
|
||||
string t = code;
|
||||
t.lower();
|
||||
|
||||
#define ischr(n) ((n >= '0' && n <= '9') || (n >= 'a' && n <= 'f'))
|
||||
|
||||
if(strlen(t) == 8 || (strlen(t) == 9 && t[6] == ':')) {
|
||||
//strip ':'
|
||||
if(strlen(t) == 9 && t[6] == ':') t = string( substr(t, 0, 6), substr(t, 7) );
|
||||
//validate input
|
||||
for(unsigned i = 0; i < 8; i++) if(!ischr(t[i])) return false;
|
||||
if(t.wildcard("??????:??")) {
|
||||
//Direct
|
||||
t = string( substr(t, 0, 6), substr(t, 7, 2) );
|
||||
for(unsigned n = 0; n < 8; n++) if(!ischr(t[n])) return false; //validate input
|
||||
unsigned r = hex(t);
|
||||
|
||||
type.i = Type::ProActionReplay;
|
||||
unsigned r = hex((const char*)t);
|
||||
addr = r >> 8;
|
||||
data = r & 0xff;
|
||||
return true;
|
||||
} else if(strlen(t) == 9 && t[4] == '-') {
|
||||
//strip '-'
|
||||
t = string( substr(t, 0, 4), substr(t, 5) );
|
||||
//validate input
|
||||
for(unsigned i = 0; i < 8; i++) if(!ischr(t[i])) return false;
|
||||
}
|
||||
|
||||
type.i = Type::GameGenie;
|
||||
if(t.wildcard("????" "-" "????")) {
|
||||
//Game Genie
|
||||
t = string( substr(t, 0, 4), substr(t, 5, 4) );
|
||||
for(unsigned n = 0; n < 8; n++) if(!ischr(t[n])) return false; //validate input
|
||||
t.transform("df4709156bc8a23e", "0123456789abcdef");
|
||||
unsigned r = hex((const char*)t);
|
||||
//8421 8421 8421 8421 8421 8421
|
||||
//abcd efgh ijkl mnop qrst uvwx
|
||||
//ijkl qrst opab cduv wxef ghmn
|
||||
addr = (!!(r & 0x002000) << 23) | (!!(r & 0x001000) << 22)
|
||||
| (!!(r & 0x000800) << 21) | (!!(r & 0x000400) << 20)
|
||||
| (!!(r & 0x000020) << 19) | (!!(r & 0x000010) << 18)
|
||||
| (!!(r & 0x000008) << 17) | (!!(r & 0x000004) << 16)
|
||||
| (!!(r & 0x800000) << 15) | (!!(r & 0x400000) << 14)
|
||||
| (!!(r & 0x200000) << 13) | (!!(r & 0x100000) << 12)
|
||||
| (!!(r & 0x000002) << 11) | (!!(r & 0x000001) << 10)
|
||||
| (!!(r & 0x008000) << 9) | (!!(r & 0x004000) << 8)
|
||||
| (!!(r & 0x080000) << 7) | (!!(r & 0x040000) << 6)
|
||||
| (!!(r & 0x020000) << 5) | (!!(r & 0x010000) << 4)
|
||||
| (!!(r & 0x000200) << 3) | (!!(r & 0x000100) << 2)
|
||||
| (!!(r & 0x000080) << 1) | (!!(r & 0x000040) << 0);
|
||||
unsigned r = hex(t);
|
||||
static unsigned bits[] = { 13, 12, 11, 10, 5, 4, 3, 2, 23, 22, 21, 20, 1, 0, 15, 14, 19, 18, 17, 16, 9, 8, 7, 6 };
|
||||
|
||||
addr = 0;
|
||||
for(unsigned n = 0; n < 24; n++) addr |= r & (1 << bits[n]) ? 0x800000 >> n : 0;
|
||||
data = r >> 24;
|
||||
return true;
|
||||
} else {
|
||||
@ -119,74 +101,10 @@ bool Cheat::decode(const char *s, unsigned &addr, uint8 &data, Type &type) {
|
||||
#undef ischr
|
||||
}
|
||||
|
||||
bool Cheat::encode(string &s, unsigned addr, uint8 data, Type type) {
|
||||
char t[16];
|
||||
|
||||
if(type.i == Type::ProActionReplay) {
|
||||
s = string(hex<6>(addr), hex<2>(data));
|
||||
return true;
|
||||
} else if(type.i == Type::GameGenie) {
|
||||
unsigned r = addr;
|
||||
addr = (!!(r & 0x008000) << 23) | (!!(r & 0x004000) << 22)
|
||||
| (!!(r & 0x002000) << 21) | (!!(r & 0x001000) << 20)
|
||||
| (!!(r & 0x000080) << 19) | (!!(r & 0x000040) << 18)
|
||||
| (!!(r & 0x000020) << 17) | (!!(r & 0x000010) << 16)
|
||||
| (!!(r & 0x000200) << 15) | (!!(r & 0x000100) << 14)
|
||||
| (!!(r & 0x800000) << 13) | (!!(r & 0x400000) << 12)
|
||||
| (!!(r & 0x200000) << 11) | (!!(r & 0x100000) << 10)
|
||||
| (!!(r & 0x000008) << 9) | (!!(r & 0x000004) << 8)
|
||||
| (!!(r & 0x000002) << 7) | (!!(r & 0x000001) << 6)
|
||||
| (!!(r & 0x080000) << 5) | (!!(r & 0x040000) << 4)
|
||||
| (!!(r & 0x020000) << 3) | (!!(r & 0x010000) << 2)
|
||||
| (!!(r & 0x000800) << 1) | (!!(r & 0x000400) << 0);
|
||||
s = string(hex<2>(data), hex<2>(addr >> 16), "-", hex<4>(addr & 0xffff));
|
||||
s.transform("0123456789abcdef", "df4709156bc8a23e");
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
//========
|
||||
//internal
|
||||
//========
|
||||
|
||||
unsigned Cheat::mirror(unsigned addr) const {
|
||||
//$00-3f|80-bf:0000-1fff -> $7e:0000-1fff
|
||||
if((addr & 0x40e000) == 0x000000) return (0x7e0000 + (addr & 0x1fff));
|
||||
return addr;
|
||||
}
|
||||
|
||||
//=========
|
||||
//CheatCode
|
||||
//=========
|
||||
|
||||
bool CheatCode::operator=(string s) {
|
||||
addr.reset();
|
||||
data.reset();
|
||||
|
||||
lstring list;
|
||||
list.split("+", s.replace(" ", ""));
|
||||
|
||||
for(unsigned i = 0; i < list.size(); i++) {
|
||||
unsigned addr_;
|
||||
uint8 data_;
|
||||
Cheat::Type type_;
|
||||
if(Cheat::decode(list[i], addr_, data_, type_) == false) {
|
||||
addr.reset();
|
||||
data.reset();
|
||||
return false;
|
||||
}
|
||||
|
||||
addr.append(addr_);
|
||||
data.append(data_);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
CheatCode::CheatCode() {
|
||||
enabled = false;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -4,7 +4,7 @@ void HitachiDSP::serialize(serializer &s) {
|
||||
Processor::serialize(s);
|
||||
|
||||
s.array(dataRAM);
|
||||
for(auto &n : stack) s.integer(n);
|
||||
foreach(n, stack) s.integer(n);
|
||||
s.integer(opcode);
|
||||
|
||||
unsigned state_ = (unsigned)state.i;
|
||||
@ -25,7 +25,7 @@ void HitachiDSP::serialize(serializer &s) {
|
||||
s.integer(regs.ramdata);
|
||||
s.integer(regs.busaddr);
|
||||
s.integer(regs.ramaddr);
|
||||
for(auto &n : regs.gpr) s.integer(n);
|
||||
foreach(n, regs.gpr) s.integer(n);
|
||||
|
||||
s.integer(regs.dma_source);
|
||||
s.integer(regs.dma_length);
|
||||
|
@ -59,8 +59,8 @@ void ICD2::reset() {
|
||||
r7800 = 0x0000;
|
||||
mlt_req = 0;
|
||||
|
||||
for(auto &byte : lcd.buffer) byte = 0;
|
||||
for(auto &byte : lcd.output) byte = 0;
|
||||
foreach(byte, lcd.buffer) byte = 0;
|
||||
foreach(byte, lcd.output) byte = 0;
|
||||
lcd.row = 0;
|
||||
|
||||
packetsize = 0;
|
||||
|
@ -37,7 +37,7 @@ struct Interface : public SNES::Interface {
|
||||
if(paudio_sample) return paudio_sample(left, right);
|
||||
}
|
||||
|
||||
int16_t inputPoll(bool port, SNES::Input::Device device, unsigned index, unsigned id) {
|
||||
int16_t inputPoll(bool port, SNES::Input::Device::e device, unsigned index, unsigned id) {
|
||||
if(pinput_state) return pinput_state(port, (unsigned)device, index, id);
|
||||
return 0;
|
||||
}
|
||||
@ -46,8 +46,8 @@ struct Interface : public SNES::Interface {
|
||||
print(text, "\n");
|
||||
}
|
||||
|
||||
string path(SNES::Cartridge::Slot slot, const string &hint) {
|
||||
return { basename, hint };
|
||||
string path(SNES::Cartridge::Slot::e slot, const string &hint) {
|
||||
return string( basename, hint );
|
||||
}
|
||||
|
||||
Interface() : pvideo_refresh(0), paudio_sample(0), pinput_poll(0), pinput_state(0) {
|
||||
@ -107,7 +107,7 @@ void snes_set_input_state(snes_input_state_t input_state) {
|
||||
}
|
||||
|
||||
void snes_set_controller_port_device(bool port, unsigned device) {
|
||||
SNES::input.connect(port, (SNES::Input::Device)device);
|
||||
SNES::input.connect(port, (SNES::Input::Device::e)device);
|
||||
}
|
||||
|
||||
void snes_set_cartridge_basename(const char *basename) {
|
||||
@ -137,7 +137,7 @@ void snes_run(void) {
|
||||
}
|
||||
|
||||
unsigned snes_serialize_size(void) {
|
||||
return SNES::system.serialize_size();
|
||||
return SNES::system.serialize_size;
|
||||
}
|
||||
|
||||
bool snes_serialize(uint8_t *data, unsigned size) {
|
||||
@ -182,7 +182,7 @@ bool snes_load_cartridge_normal(
|
||||
snes_cheat_reset();
|
||||
if(rom_data) SNES::cartridge.rom.copy(rom_data, rom_size);
|
||||
string xmlrom = (rom_xml && *rom_xml) ? string(rom_xml) : SnesCartridge(rom_data, rom_size).markup;
|
||||
SNES::cartridge.load(SNES::Cartridge::Mode::Normal, { xmlrom });
|
||||
SNES::cartridge.load(SNES::Cartridge::Mode::Normal, xmlrom);
|
||||
SNES::system.power();
|
||||
return true;
|
||||
}
|
||||
@ -257,7 +257,7 @@ void snes_unload_cartridge(void) {
|
||||
}
|
||||
|
||||
bool snes_get_region(void) {
|
||||
return SNES::system.region() == SNES::System::Region::NTSC ? 0 : 1;
|
||||
return SNES::system.region.i == SNES::System::Region::NTSC ? 0 : 1;
|
||||
}
|
||||
|
||||
uint8_t* snes_get_memory_data(unsigned id) {
|
||||
@ -271,22 +271,22 @@ uint8_t* snes_get_memory_data(unsigned id) {
|
||||
if(SNES::cartridge.has_spc7110rtc()) return SNES::spc7110.rtc;
|
||||
return 0;
|
||||
case SNES_MEMORY_BSX_RAM:
|
||||
if(SNES::cartridge.mode() != SNES::Cartridge::Mode::Bsx) break;
|
||||
if(SNES::cartridge.mode.i != SNES::Cartridge::Mode::Bsx) break;
|
||||
return SNES::bsxcartridge.sram.data();
|
||||
case SNES_MEMORY_BSX_PRAM:
|
||||
if(SNES::cartridge.mode() != SNES::Cartridge::Mode::Bsx) break;
|
||||
if(SNES::cartridge.mode.i != SNES::Cartridge::Mode::Bsx) break;
|
||||
return SNES::bsxcartridge.psram.data();
|
||||
case SNES_MEMORY_SUFAMI_TURBO_A_RAM:
|
||||
if(SNES::cartridge.mode() != SNES::Cartridge::Mode::SufamiTurbo) break;
|
||||
if(SNES::cartridge.mode.i != SNES::Cartridge::Mode::SufamiTurbo) break;
|
||||
return SNES::sufamiturbo.slotA.ram.data();
|
||||
case SNES_MEMORY_SUFAMI_TURBO_B_RAM:
|
||||
if(SNES::cartridge.mode() != SNES::Cartridge::Mode::SufamiTurbo) break;
|
||||
if(SNES::cartridge.mode.i != SNES::Cartridge::Mode::SufamiTurbo) break;
|
||||
return SNES::sufamiturbo.slotB.ram.data();
|
||||
case SNES_MEMORY_GAME_BOY_RAM:
|
||||
if(SNES::cartridge.mode() != SNES::Cartridge::Mode::SuperGameBoy) break;
|
||||
if(SNES::cartridge.mode.i != SNES::Cartridge::Mode::SuperGameBoy) break;
|
||||
return GameBoy::cartridge.ramdata;
|
||||
//case SNES_MEMORY_GAME_BOY_RTC:
|
||||
// if(SNES::cartridge.mode() != SNES::Cartridge::Mode::SuperGameBoy) break;
|
||||
// if(SNES::cartridge.mode.i != SNES::Cartridge::Mode::SuperGameBoy) break;
|
||||
// return GameBoy::cartridge.rtcdata;
|
||||
|
||||
case SNES_MEMORY_WRAM:
|
||||
@ -316,27 +316,27 @@ unsigned snes_get_memory_size(unsigned id) {
|
||||
if(SNES::cartridge.has_srtc() || SNES::cartridge.has_spc7110rtc()) size = 20;
|
||||
break;
|
||||
case SNES_MEMORY_BSX_RAM:
|
||||
if(SNES::cartridge.mode() != SNES::Cartridge::Mode::Bsx) break;
|
||||
if(SNES::cartridge.mode.i != SNES::Cartridge::Mode::Bsx) break;
|
||||
size = SNES::bsxcartridge.sram.size();
|
||||
break;
|
||||
case SNES_MEMORY_BSX_PRAM:
|
||||
if(SNES::cartridge.mode() != SNES::Cartridge::Mode::Bsx) break;
|
||||
if(SNES::cartridge.mode.i != SNES::Cartridge::Mode::Bsx) break;
|
||||
size = SNES::bsxcartridge.psram.size();
|
||||
break;
|
||||
case SNES_MEMORY_SUFAMI_TURBO_A_RAM:
|
||||
if(SNES::cartridge.mode() != SNES::Cartridge::Mode::SufamiTurbo) break;
|
||||
if(SNES::cartridge.mode.i != SNES::Cartridge::Mode::SufamiTurbo) break;
|
||||
size = SNES::sufamiturbo.slotA.ram.size();
|
||||
break;
|
||||
case SNES_MEMORY_SUFAMI_TURBO_B_RAM:
|
||||
if(SNES::cartridge.mode() != SNES::Cartridge::Mode::SufamiTurbo) break;
|
||||
if(SNES::cartridge.mode.i != SNES::Cartridge::Mode::SufamiTurbo) break;
|
||||
size = SNES::sufamiturbo.slotB.ram.size();
|
||||
break;
|
||||
case SNES_MEMORY_GAME_BOY_RAM:
|
||||
if(SNES::cartridge.mode() != SNES::Cartridge::Mode::SuperGameBoy) break;
|
||||
if(SNES::cartridge.mode.i != SNES::Cartridge::Mode::SuperGameBoy) break;
|
||||
size = GameBoy::cartridge.ramsize;
|
||||
break;
|
||||
//case SNES_MEMORY_GAME_BOY_RTC:
|
||||
// if(SNES::cartridge.mode() != SNES::Cartridge::Mode::SuperGameBoy) break;
|
||||
// if(SNES::cartridge.mode.i != SNES::Cartridge::Mode::SuperGameBoy) break;
|
||||
// size = GameBoy::cartridge.rtcsize;
|
||||
// break;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user