mirror of https://github.com/bsnes-emu/bsnes.git
Update to v106r18 release.
byuu says: Changelog: - major restructuring of board manifests - cleanup of generic board names - Super Famicom: updates to SA1, SuperFX, Cx4, SPC7110, EpsonRTC, SharpRTC load/save code - Super Famicom: added experimental SuperFX plot dithering fix [qwertymodo] - higan, icarus: rename shared folders to lowercase names; put .sys folders into new subfolder - Video Shaders/ → shaders/ - Database/ → database/ - Firmware/ → firmware/ - \*.sys/ → systems/\*.sys/ So right now, only standard SNES games, SA-1, SuperFX, and Cx4 games load. I have not tested SPC7110 or RTC support, because icarus import seems to be completely broken? It's creating blank folders when I try it now. I'll have to fix that ... Since we are now up to thirteen systems, I've put the .sys folders into a subfolder. This should declutter the main higan-windows release folder a good deal. Linux users will need to re-run make install, or manually move things into a new systems/ subfolder. Same goes for icarus: lowercase the database/ and firmware/ folders or re-run make install. I don't know if qwertymodo's SuperFX fix is exactly correct or not. Hopefully it is, but I didn't write a test ROM or anything to be certain. Since SuperFX games should run, if people could please play through some of them and look for any regressions, that'd be very much appreciated.
This commit is contained in:
parent
8617711ea2
commit
b69909be8d
|
@ -12,7 +12,7 @@ using namespace nall;
|
||||||
|
|
||||||
namespace Emulator {
|
namespace Emulator {
|
||||||
static const string Name = "higan";
|
static const string Name = "higan";
|
||||||
static const string Version = "106.17";
|
static const string Version = "106.18";
|
||||||
static const string Author = "byuu";
|
static const string Author = "byuu";
|
||||||
static const string License = "GPLv3";
|
static const string License = "GPLv3";
|
||||||
static const string Website = "https://byuu.org/";
|
static const string Website = "https://byuu.org/";
|
||||||
|
|
|
@ -59,8 +59,8 @@ auto Cartridge::loadCartridge(Markup::Node node) -> void {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(auto node = board["memory(type=ROM)"]) loadROM(node);
|
if(auto node = board["memory(type=ROM,content=Program)"]) loadROM(node);
|
||||||
if(auto node = board["memory(type=RAM)"]) loadRAM(node);
|
if(auto node = board["memory(type=RAM,content=Save)"]) loadRAM(node);
|
||||||
if(auto node = board["icd"]) loadICD(node);
|
if(auto node = board["icd"]) loadICD(node);
|
||||||
if(auto node = board["mcc"]) loadMCC(node);
|
if(auto node = board["mcc"]) loadMCC(node);
|
||||||
if(auto node = board["bsmemory"]) loadBSMemoryPack(node);
|
if(auto node = board["bsmemory"]) loadBSMemoryPack(node);
|
||||||
|
@ -68,14 +68,14 @@ auto Cartridge::loadCartridge(Markup::Node node) -> void {
|
||||||
if(auto node = board.find("sufamiturbo")) if(node(1)) loadSufamiTurbo(node(1), 1);
|
if(auto node = board.find("sufamiturbo")) if(node(1)) loadSufamiTurbo(node(1), 1);
|
||||||
if(auto node = board["nss"]) loadNSS(node);
|
if(auto node = board["nss"]) loadNSS(node);
|
||||||
if(auto node = board["event"]) loadEvent(node);
|
if(auto node = board["event"]) loadEvent(node);
|
||||||
if(auto node = board["sa1"]) loadSA1(node);
|
if(auto node = board["processor(architecture=W65C816S)"]) loadSA1(node);
|
||||||
if(auto node = board["superfx"]) loadSuperFX(node);
|
if(auto node = board["processor(architecture=GSU)"]) loadSuperFX(node);
|
||||||
if(auto node = board["armdsp"]) loadARMDSP(node);
|
if(auto node = board["armdsp"]) loadARMDSP(node);
|
||||||
if(auto node = board["hitachidsp"]) loadHitachiDSP(node, node["information/board"].text().match("2DC*") ? 2 : 1);
|
if(auto node = board["processor(architecture=HG51BS169)"]) loadHitachiDSP(node, game.board.match("2DC*") ? 2 : 1);
|
||||||
if(auto node = board["necdsp"]) loadNECDSP(node);
|
if(auto node = board["necdsp"]) loadNECDSP(node);
|
||||||
if(auto node = board["epsonrtc"]) loadEpsonRTC(node);
|
if(auto node = board["rtc(manufacturer=Epson)"]) loadEpsonRTC(node);
|
||||||
if(auto node = board["sharprtc"]) loadSharpRTC(node);
|
if(auto node = board["rtc(manufacturer=Sharp)"]) loadSharpRTC(node);
|
||||||
if(auto node = board["spc7110"]) loadSPC7110(node);
|
if(auto node = board["processor(identifier=SPC7110)"]) loadSPC7110(node);
|
||||||
if(auto node = board["sdd1"]) loadSDD1(node);
|
if(auto node = board["sdd1"]) loadSDD1(node);
|
||||||
if(auto node = board["obc1"]) loadOBC1(node);
|
if(auto node = board["obc1"]) loadOBC1(node);
|
||||||
if(auto node = board["msu1"]) loadMSU1(node);
|
if(auto node = board["msu1"]) loadMSU1(node);
|
||||||
|
@ -196,28 +196,59 @@ auto Cartridge::loadEvent(Markup::Node node) -> void {
|
||||||
for(auto leaf : node["ram"].find("map")) loadMap(leaf, event.ram);
|
for(auto leaf : node["ram"].find("map")) loadMap(leaf, event.ram);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//processor(architecture=W65C816S)
|
||||||
auto Cartridge::loadSA1(Markup::Node node) -> void {
|
auto Cartridge::loadSA1(Markup::Node node) -> void {
|
||||||
has.SA1 = true;
|
has.SA1 = true;
|
||||||
|
|
||||||
loadMemory(sa1.rom, node["rom"], File::Required);
|
for(auto map : node.find("map")) {
|
||||||
loadMemory(sa1.bwram, node["bwram"], File::Optional);
|
loadMap(map, {&SA1::readIO, &sa1}, {&SA1::writeIO, &sa1});
|
||||||
loadMemory(sa1.iram, node["iram"], File::Optional);
|
}
|
||||||
|
|
||||||
for(auto leaf : node.find("map")) loadMap(leaf, {&SA1::readIO, &sa1}, {&SA1::writeIO, &sa1});
|
if(auto mcu = node["mcu"]) {
|
||||||
for(auto leaf : node["rom"].find("map")) loadMap(leaf, {&SA1::mmcromRead, &sa1}, {&SA1::mmcromWrite, &sa1});
|
for(auto map : mcu.find("map")) {
|
||||||
for(auto leaf : node["bwram"].find("map")) loadMap(leaf, {&SA1::mmcbwramRead, &sa1}, {&SA1::mmcbwramWrite, &sa1});
|
loadMap(map, {&SA1::mmcromRead, &sa1}, {&SA1::mmcromWrite, &sa1});
|
||||||
for(auto leaf : node["iram"].find("map")) loadMap(leaf, sa1.cpuiram);
|
}
|
||||||
|
if(auto memory = mcu["memory(type=ROM,content=Program)"]) {
|
||||||
|
loadMemory(sa1.rom, memory, File::Required);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(auto memory = node["memory(type=RAM,content=Save)"]) {
|
||||||
|
loadMemory(sa1.bwram, memory, File::Optional);
|
||||||
|
for(auto map : memory.find("map")) {
|
||||||
|
loadMap(map, {&SA1::mmcbwramRead, &sa1}, {&SA1::mmcbwramWrite, &sa1});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(auto memory = node["memory(type=RAM,content=Internal)"]) {
|
||||||
|
loadMemory(sa1.iram, memory, File::Optional);
|
||||||
|
for(auto map : memory.find("map")) {
|
||||||
|
loadMap(map, sa1.cpuiram);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//processor(architecture=GSU)
|
||||||
auto Cartridge::loadSuperFX(Markup::Node node) -> void {
|
auto Cartridge::loadSuperFX(Markup::Node node) -> void {
|
||||||
has.SuperFX = true;
|
has.SuperFX = true;
|
||||||
|
|
||||||
loadMemory(superfx.rom, node["rom"], File::Required);
|
for(auto map : node.find("map")) {
|
||||||
loadMemory(superfx.ram, node["ram"], File::Optional);
|
loadMap(map, {&SuperFX::readIO, &superfx}, {&SuperFX::writeIO, &superfx});
|
||||||
|
}
|
||||||
|
|
||||||
for(auto leaf : node.find("map")) loadMap(leaf, {&SuperFX::readIO, &superfx}, {&SuperFX::writeIO, &superfx});
|
if(auto memory = node["memory(type=ROM,content=Program)"]) {
|
||||||
for(auto leaf : node["rom"].find("map")) loadMap(leaf, superfx.cpurom);
|
loadMemory(superfx.rom, memory, File::Required);
|
||||||
for(auto leaf : node["ram"].find("map")) loadMap(leaf, superfx.cpuram);
|
for(auto map : memory.find("map")) {
|
||||||
|
loadMap(map, superfx.cpurom);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(auto memory = node["memory(type=RAM,content=Save)"]) {
|
||||||
|
loadMemory(superfx.ram, memory, File::Optional);
|
||||||
|
for(auto map : memory.find("map")) {
|
||||||
|
loadMap(map, superfx.cpuram);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
auto Cartridge::loadARMDSP(Markup::Node node) -> void {
|
auto Cartridge::loadARMDSP(Markup::Node node) -> void {
|
||||||
|
@ -248,9 +279,13 @@ auto Cartridge::loadARMDSP(Markup::Node node) -> void {
|
||||||
for(auto leaf : node.find("map")) loadMap(leaf, {&ArmDSP::read, &armdsp}, {&ArmDSP::write, &armdsp});
|
for(auto leaf : node.find("map")) loadMap(leaf, {&ArmDSP::read, &armdsp}, {&ArmDSP::write, &armdsp});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//processor(architecture=HG51BS169)
|
||||||
auto Cartridge::loadHitachiDSP(Markup::Node node, uint roms) -> void {
|
auto Cartridge::loadHitachiDSP(Markup::Node node, uint roms) -> void {
|
||||||
has.HitachiDSP = true;
|
has.HitachiDSP = true;
|
||||||
|
|
||||||
|
for(auto& word : hitachidsp.dataROM) word = 0x000000;
|
||||||
|
for(auto& word : hitachidsp.dataRAM) word = 0x00;
|
||||||
|
|
||||||
if(auto oscillator = game.oscillator()) {
|
if(auto oscillator = game.oscillator()) {
|
||||||
hitachidsp.Frequency = oscillator->frequency;
|
hitachidsp.Frequency = oscillator->frequency;
|
||||||
} else {
|
} else {
|
||||||
|
@ -258,27 +293,42 @@ auto Cartridge::loadHitachiDSP(Markup::Node node, uint roms) -> void {
|
||||||
}
|
}
|
||||||
hitachidsp.Roms = roms; //1 or 2
|
hitachidsp.Roms = roms; //1 or 2
|
||||||
|
|
||||||
loadMemory(hitachidsp.rom, node["rom"], File::Required);
|
for(auto map : node.find("map")) {
|
||||||
loadMemory(hitachidsp.ram, node["ram"], File::Optional);
|
loadMap(map, {&HitachiDSP::dspRead, &hitachidsp}, {&HitachiDSP::dspWrite, &hitachidsp});
|
||||||
|
}
|
||||||
|
|
||||||
for(auto& word : hitachidsp.dataROM) word = 0x000000;
|
if(auto memory = node["memory(type=ROM,content=Program)"]) {
|
||||||
for(auto& word : hitachidsp.dataRAM) word = 0x00;
|
loadMemory(hitachidsp.rom, memory, File::Required);
|
||||||
|
for(auto map : memory.find("map")) {
|
||||||
|
loadMap(map, {&HitachiDSP::romRead, &hitachidsp}, {&HitachiDSP::romWrite, &hitachidsp});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(auto memory = game.memory(node["memory(type=ROM,content=Data)"])) {
|
if(auto memory = node["memory(type=RAM,content=Save)"]) {
|
||||||
if(auto fp = platform->open(ID::SuperFamicom, memory->name(), File::Read, File::Required)) {
|
loadMemory(hitachidsp.ram, memory, File::Optional);
|
||||||
|
for(auto map : memory.find("map")) {
|
||||||
|
loadMap(map, {&HitachiDSP::ramRead, &hitachidsp}, {&HitachiDSP::ramWrite, &hitachidsp});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(auto memory = node["memory(type=ROM,content=Data,architecture=HG51BS169)"]) {
|
||||||
|
if(auto file = game.memory(memory)) {
|
||||||
|
if(auto fp = platform->open(ID::SuperFamicom, file->name(), File::Read, File::Required)) {
|
||||||
for(auto n : range(1 * 1024)) hitachidsp.dataROM[n] = fp->readl(3);
|
for(auto n : range(1 * 1024)) hitachidsp.dataROM[n] = fp->readl(3);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(auto memory = game.memory(node["memory(type=RAM,content=Data)"])) {
|
}
|
||||||
if(auto fp = platform->open(ID::SuperFamicom, memory->name(), File::Read)) {
|
|
||||||
|
if(auto memory = node["memory(type=RAM,content=Data,architecture=HG51BS169)"]) {
|
||||||
|
if(auto file = game.memory(memory)) {
|
||||||
|
if(auto fp = platform->open(ID::SuperFamicom, file->name(), File::Read)) {
|
||||||
for(auto n : range(3 * 1024)) hitachidsp.dataRAM[n] = fp->readl(1);
|
for(auto n : range(3 * 1024)) hitachidsp.dataRAM[n] = fp->readl(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
for(auto map : memory.find("map")) {
|
||||||
for(auto leaf : node.find("map")) loadMap(leaf, {&HitachiDSP::dspRead, &hitachidsp}, {&HitachiDSP::dspWrite, &hitachidsp});
|
loadMap(map, {&HitachiDSP::dramRead, &hitachidsp}, {&HitachiDSP::dramWrite, &hitachidsp});
|
||||||
for(auto leaf : node["rom"].find("map")) loadMap(leaf, {&HitachiDSP::romRead, &hitachidsp}, {&HitachiDSP::romWrite, &hitachidsp});
|
}
|
||||||
for(auto leaf : node["ram"].find("map")) loadMap(leaf, {&HitachiDSP::ramRead, &hitachidsp}, {&HitachiDSP::ramWrite, &hitachidsp});
|
}
|
||||||
for(auto leaf : node["dram"].find("map")) loadMap(leaf, {&HitachiDSP::dramRead, &hitachidsp}, {&HitachiDSP::dramWrite, &hitachidsp});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
auto Cartridge::loadNECDSP(Markup::Node node) -> void {
|
auto Cartridge::loadNECDSP(Markup::Node node) -> void {
|
||||||
|
@ -323,47 +373,74 @@ auto Cartridge::loadNECDSP(Markup::Node node) -> void {
|
||||||
for(auto leaf : node["dram"].find("map")) loadMap(leaf, {&NECDSP::readRAM, &necdsp}, {&NECDSP::writeRAM, &necdsp});
|
for(auto leaf : node["dram"].find("map")) loadMap(leaf, {&NECDSP::readRAM, &necdsp}, {&NECDSP::writeRAM, &necdsp});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//rtc(manufacturer=Epson)
|
||||||
auto Cartridge::loadEpsonRTC(Markup::Node node) -> void {
|
auto Cartridge::loadEpsonRTC(Markup::Node node) -> void {
|
||||||
has.EpsonRTC = true;
|
has.EpsonRTC = true;
|
||||||
|
|
||||||
epsonrtc.initialize();
|
epsonrtc.initialize();
|
||||||
if(auto memory = game.memory(node["memory(type=RTC,content=Time)"])) {
|
|
||||||
if(auto fp = platform->open(ID::SuperFamicom, memory->name(), File::Read)) {
|
for(auto map : node.find("map")) {
|
||||||
|
loadMap(map, {&EpsonRTC::read, &epsonrtc}, {&EpsonRTC::write, &epsonrtc});
|
||||||
|
}
|
||||||
|
|
||||||
|
if(auto memory = node["memory(type=RTC,content=Time,manufacturer=Epson)"]) {
|
||||||
|
if(auto file = game.memory(memory)) {
|
||||||
|
if(auto fp = platform->open(ID::SuperFamicom, file->name(), File::Read)) {
|
||||||
uint8 data[16] = {0};
|
uint8 data[16] = {0};
|
||||||
for(auto& byte : data) byte = fp->read();
|
for(auto& byte : data) byte = fp->read();
|
||||||
epsonrtc.load(data);
|
epsonrtc.load(data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
for(auto leaf : node.find("map")) loadMap(leaf, {&EpsonRTC::read, &epsonrtc}, {&EpsonRTC::write, &epsonrtc});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//rtc(manufacturer=Sharp)
|
||||||
auto Cartridge::loadSharpRTC(Markup::Node node) -> void {
|
auto Cartridge::loadSharpRTC(Markup::Node node) -> void {
|
||||||
has.SharpRTC = true;
|
has.SharpRTC = true;
|
||||||
|
|
||||||
sharprtc.initialize();
|
sharprtc.initialize();
|
||||||
if(auto memory = game.memory(node["memory(type=RTC,content=Time)"])) {
|
|
||||||
if(auto fp = platform->open(ID::SuperFamicom, memory->name(), File::Read)) {
|
for(auto map : node.find("map")) {
|
||||||
|
loadMap(map, {&SharpRTC::read, &sharprtc}, {&SharpRTC::write, &sharprtc});
|
||||||
|
}
|
||||||
|
|
||||||
|
if(auto memory = node["memory(type=RTC,content=Time,manufacturer=Sharp)"]) {
|
||||||
|
if(auto file = game.memory(memory)) {
|
||||||
|
if(auto fp = platform->open(ID::SuperFamicom, file->name(), File::Read)) {
|
||||||
uint8 data[16] = {0};
|
uint8 data[16] = {0};
|
||||||
for(auto& byte : data) byte = fp->read();
|
for(auto& byte : data) byte = fp->read();
|
||||||
sharprtc.load(data);
|
sharprtc.load(data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
for(auto leaf : node.find("map")) loadMap(leaf, {&SharpRTC::read, &sharprtc}, {&SharpRTC::write, &sharprtc});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//processor(identifier=SPC7110)
|
||||||
auto Cartridge::loadSPC7110(Markup::Node node) -> void {
|
auto Cartridge::loadSPC7110(Markup::Node node) -> void {
|
||||||
has.SPC7110 = true;
|
has.SPC7110 = true;
|
||||||
|
|
||||||
loadMemory(spc7110.prom, node["prom"], File::Required);
|
for(auto map : node.find("map")) {
|
||||||
loadMemory(spc7110.drom, node["drom"], File::Required);
|
loadMap(map, {&SPC7110::read, &spc7110}, {&SPC7110::write, &spc7110});
|
||||||
loadMemory(spc7110.ram, node["ram"], File::Optional);
|
}
|
||||||
|
|
||||||
for(auto leaf : node.find("map")) leaf.text() == "mcu"
|
if(auto mcu = node["mcu"]) {
|
||||||
? loadMap(leaf, {&SPC7110::mcuromRead, &spc7110}, {&SPC7110::mcuromWrite, &spc7110})
|
for(auto map : mcu.find("map")) {
|
||||||
: loadMap(leaf, {&SPC7110::read, &spc7110}, {&SPC7110::write, &spc7110});
|
loadMap(map, {&SPC7110::mcuromRead, &spc7110}, {&SPC7110::mcuromWrite, &spc7110});
|
||||||
for(auto leaf : node["ram"].find("map")) loadMap(leaf, {&SPC7110::mcuramRead, &spc7110}, {&SPC7110::mcuramWrite, &spc7110});
|
}
|
||||||
|
if(auto memory = mcu["memory(type=ROM,content=Program)"]) {
|
||||||
|
loadMemory(spc7110.prom, memory, File::Required);
|
||||||
|
}
|
||||||
|
if(auto memory = mcu["memory(type=ROM,content=Data)"]) {
|
||||||
|
loadMemory(spc7110.drom, memory, File::Required);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(auto memory = node["memory(type=RAM,content=Save)"]) {
|
||||||
|
loadMemory(spc7110.ram, memory, File::Optional);
|
||||||
|
for(auto map : memory.find("map")) {
|
||||||
|
loadMap(map, {&SPC7110::mcuramRead, &spc7110}, {&SPC7110::mcuramWrite, &spc7110});
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
auto Cartridge::loadSDD1(Markup::Node node) -> void {
|
auto Cartridge::loadSDD1(Markup::Node node) -> void {
|
||||||
|
|
|
@ -1,15 +1,15 @@
|
||||||
auto Cartridge::saveCartridge(Markup::Node node) -> void {
|
auto Cartridge::saveCartridge(Markup::Node node) -> void {
|
||||||
if(auto node = board["memory(type=RAM)"]) saveRAM(node);
|
if(auto node = board["memory(type=RAM,content=Save)"]) saveRAM(node);
|
||||||
if(auto node = board["mcc"]) saveMCC(node);
|
if(auto node = board["mcc"]) saveMCC(node);
|
||||||
if(auto node = board["event"]) saveEvent(node);
|
if(auto node = board["event"]) saveEvent(node);
|
||||||
if(auto node = board["sa1"]) saveSA1(node);
|
if(auto node = board["processor(architecture=W65C816S)"]) saveSA1(node);
|
||||||
if(auto node = board["superfx"]) saveSuperFX(node);
|
if(auto node = board["processor(architecture=GSU)"]) saveSuperFX(node);
|
||||||
if(auto node = board["armdsp"]) saveARMDSP(node);
|
if(auto node = board["armdsp"]) saveARMDSP(node);
|
||||||
if(auto node = board["hitachidsp"]) saveHitachiDSP(node);
|
if(auto node = board["processor(architecture=HG51BS169)"]) saveHitachiDSP(node);
|
||||||
if(auto node = board["necdsp"]) saveNECDSP(node);
|
if(auto node = board["necdsp"]) saveNECDSP(node);
|
||||||
if(auto node = board["epsonrtc"]) saveEpsonRTC(node);
|
if(auto node = board["rtc(manufacturer=Epson)"]) saveEpsonRTC(node);
|
||||||
if(auto node = board["sharprtc"]) saveSharpRTC(node);
|
if(auto node = board["rtc(manufacturer=Sharp)"]) saveSharpRTC(node);
|
||||||
if(auto node = board["spc7110"]) saveSPC7110(node);
|
if(auto node = board["processor(identifier=SPC7110)"]) saveSPC7110(node);
|
||||||
if(auto node = board["sdd1"]) saveSDD1(node);
|
if(auto node = board["sdd1"]) saveSDD1(node);
|
||||||
if(auto node = board["obc1"]) saveOBC1(node);
|
if(auto node = board["obc1"]) saveOBC1(node);
|
||||||
}
|
}
|
||||||
|
@ -42,13 +42,22 @@ auto Cartridge::saveEvent(Markup::Node node) -> void {
|
||||||
saveMemory(event.ram, node["ram"]);
|
saveMemory(event.ram, node["ram"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//processor(architecture=W65C816S)
|
||||||
auto Cartridge::saveSA1(Markup::Node node) -> void {
|
auto Cartridge::saveSA1(Markup::Node node) -> void {
|
||||||
saveMemory(sa1.bwram, node["bwram"]);
|
if(auto memory = node["memory(type=RAM,content=Save)"]) {
|
||||||
saveMemory(sa1.iram, node["iram"]);
|
saveMemory(sa1.bwram, memory);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(auto memory = node["memory(type=RAM,content=Internal)"]) {
|
||||||
|
saveMemory(sa1.iram, memory);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//processor(architecture=GSU)
|
||||||
auto Cartridge::saveSuperFX(Markup::Node node) -> void {
|
auto Cartridge::saveSuperFX(Markup::Node node) -> void {
|
||||||
saveMemory(superfx.ram, node["ram"]);
|
if(auto memory = node["memory(type=RAM,content=Save)"]) {
|
||||||
|
saveMemory(superfx.ram, memory);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
auto Cartridge::saveARMDSP(Markup::Node node) -> void {
|
auto Cartridge::saveARMDSP(Markup::Node node) -> void {
|
||||||
|
@ -61,16 +70,23 @@ auto Cartridge::saveARMDSP(Markup::Node node) -> void {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//processor(architecture=HG51BS169)
|
||||||
auto Cartridge::saveHitachiDSP(Markup::Node node) -> void {
|
auto Cartridge::saveHitachiDSP(Markup::Node node) -> void {
|
||||||
saveMemory(hitachidsp.ram, node["ram"]);
|
saveMemory(hitachidsp.ram, node["ram"]);
|
||||||
|
|
||||||
if(auto memory = game.memory(node["memory(type=RAM,content=Data)"])) {
|
if(auto memory = node["memory(type=RAM,content=Save)"]) {
|
||||||
if(memory->nonVolatile) {
|
saveMemory(hitachidsp.ram, memory);
|
||||||
if(auto fp = platform->open(ID::SuperFamicom, memory->name(), File::Write)) {
|
}
|
||||||
|
|
||||||
|
if(auto memory = node["memory(type=RAM,content=Data,architecture=HG51BS169)"]) {
|
||||||
|
if(auto file = game.memory(memory)) {
|
||||||
|
if(file->nonVolatile) {
|
||||||
|
if(auto fp = platform->open(ID::SuperFamicom, file->name(), File::Write)) {
|
||||||
for(auto n : range(3 * 1024)) fp->write(hitachidsp.dataRAM[n]);
|
for(auto n : range(3 * 1024)) fp->write(hitachidsp.dataRAM[n]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
auto Cartridge::saveNECDSP(Markup::Node node) -> void {
|
auto Cartridge::saveNECDSP(Markup::Node node) -> void {
|
||||||
|
@ -84,32 +100,41 @@ auto Cartridge::saveNECDSP(Markup::Node node) -> void {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//rtc(manufacturer=Epson)
|
||||||
auto Cartridge::saveEpsonRTC(Markup::Node node) -> void {
|
auto Cartridge::saveEpsonRTC(Markup::Node node) -> void {
|
||||||
if(auto memory = game.memory(node["memory(type=RTC,content=Time)"])) {
|
if(auto memory = node["memory(type=RTC,content=Time,manufacturer=Epson)"]) {
|
||||||
if(memory->nonVolatile) {
|
if(auto file = game.memory(memory)) {
|
||||||
if(auto fp = platform->open(ID::SuperFamicom, memory->name(), File::Write)) {
|
if(file->nonVolatile) {
|
||||||
|
if(auto fp = platform->open(ID::SuperFamicom, file->name(), File::Write)) {
|
||||||
uint8 data[16] = {0};
|
uint8 data[16] = {0};
|
||||||
epsonrtc.save(data);
|
epsonrtc.save(data);
|
||||||
fp->write(data, 16);
|
fp->write(data, 16);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//rtc(manufacturer=Sharp)
|
||||||
auto Cartridge::saveSharpRTC(Markup::Node node) -> void {
|
auto Cartridge::saveSharpRTC(Markup::Node node) -> void {
|
||||||
if(auto memory = game.memory(node["memory(type=RTC,content=Time)"])) {
|
if(auto memory = node["memory(type=RTC,content=Time,manufacturer=Sharp)"]) {
|
||||||
if(memory->nonVolatile) {
|
if(auto file = game.memory(memory)) {
|
||||||
if(auto fp = platform->open(ID::SuperFamicom, memory->name(), File::Write)) {
|
if(file->nonVolatile) {
|
||||||
|
if(auto fp = platform->open(ID::SuperFamicom, file->name(), File::Write)) {
|
||||||
uint8 data[16] = {0};
|
uint8 data[16] = {0};
|
||||||
sharprtc.save(data);
|
sharprtc.save(data);
|
||||||
fp->write(data, 16);
|
fp->write(data, 16);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//processor(identifier=SPC7110)
|
||||||
auto Cartridge::saveSPC7110(Markup::Node node) -> void {
|
auto Cartridge::saveSPC7110(Markup::Node node) -> void {
|
||||||
saveMemory(spc7110.ram, node["ram"]);
|
if(auto memory = node["memory(type=RAM,content=Save)"]) {
|
||||||
|
saveMemory(spc7110.ram, memory);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
auto Cartridge::saveSDD1(Markup::Node node) -> void {
|
auto Cartridge::saveSDD1(Markup::Node node) -> void {
|
||||||
|
|
|
@ -9,25 +9,24 @@ auto SuperFX::color(uint8 source) -> uint8 {
|
||||||
}
|
}
|
||||||
|
|
||||||
auto SuperFX::plot(uint8 x, uint8 y) -> void {
|
auto SuperFX::plot(uint8 x, uint8 y) -> void {
|
||||||
uint8 color = regs.colr;
|
|
||||||
|
|
||||||
if(regs.por.dither && regs.scmr.md != 3) {
|
|
||||||
if((x ^ y) & 1) color >>= 4;
|
|
||||||
color &= 0x0f;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!regs.por.transparent) {
|
if(!regs.por.transparent) {
|
||||||
if(regs.scmr.md == 3) {
|
if(regs.scmr.md == 3) {
|
||||||
if(regs.por.freezehigh) {
|
if(regs.por.freezehigh) {
|
||||||
if((color & 0x0f) == 0) return;
|
if((regs.colr & 0x0f) == 0) return;
|
||||||
} else {
|
} else {
|
||||||
if(color == 0) return;
|
if(regs.colr == 0) return;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if((color & 0x0f) == 0) return;
|
if((regs.colr & 0x0f) == 0) return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint8 color = regs.colr;
|
||||||
|
if(regs.por.dither && regs.scmr.md != 3) {
|
||||||
|
if((x ^ y) & 1) color >>= 4;
|
||||||
|
color &= 0x0f;
|
||||||
|
}
|
||||||
|
|
||||||
uint16 offset = (y << 5) + (x >> 3);
|
uint16 offset = (y << 5) + (x >> 3);
|
||||||
if(offset != pixelcache[0].offset) {
|
if(offset != pixelcache[0].offset) {
|
||||||
flushPixelCache(pixelcache[1]);
|
flushPixelCache(pixelcache[1]);
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
database
|
database
|
||||||
revision: 2018-04-15
|
revision: 2018-05-08
|
||||||
|
|
||||||
//Boards (Production)
|
//Boards (Production)
|
||||||
|
|
||||||
database
|
database
|
||||||
revision: 2018-04-10
|
revision: 2018-05-08
|
||||||
|
|
||||||
board: BANDAI-PT-923
|
board: BANDAI-PT-923
|
||||||
memory type=ROM content=Program
|
memory type=ROM content=Program
|
||||||
|
@ -63,36 +63,38 @@ board: BSC-1J5M-01
|
||||||
map address=60-7d,e0-ff:0000-ffff
|
map address=60-7d,e0-ff:0000-ffff
|
||||||
|
|
||||||
board: BSC-1L3B-01
|
board: BSC-1L3B-01
|
||||||
sa1
|
processor architecture=W65C816S
|
||||||
map address=00-3f,80-bf:2200-23ff
|
map address=00-3f,80-bf:2200-23ff
|
||||||
memory type=ROM content=Program
|
mcu
|
||||||
map address=00-3f,80-bf:8000-ffff mask=0x408000
|
map address=00-3f,80-bf:8000-ffff mask=0x408000
|
||||||
map address=c0-ff:0000-ffff
|
map address=c0-ff:0000-ffff
|
||||||
|
memory type=ROM content=Program
|
||||||
|
slot type=BSMemory
|
||||||
memory type=RAM content=Save
|
memory type=RAM content=Save
|
||||||
map address=00-3f,80-bf:6000-7fff size=0x2000
|
map address=00-3f,80-bf:6000-7fff size=0x2000
|
||||||
map address=40-4f:0000-ffff
|
map address=40-4f:0000-ffff
|
||||||
memory type=RAM content=Internal
|
memory type=RAM content=Internal
|
||||||
map address=00-3f,80-bf:3000-37ff size=0x800
|
map address=00-3f,80-bf:3000-37ff size=0x800
|
||||||
slot type=BSMemory
|
|
||||||
|
|
||||||
board: BSC-1L5B-01
|
board: BSC-1L5B-01
|
||||||
sa1
|
processor architecture=W65C816S
|
||||||
map address=00-3f,80-bf:2200-23ff
|
map address=00-3f,80-bf:2200-23ff
|
||||||
memory type=ROM content=Program
|
mcu
|
||||||
map address=00-3f,80-bf:8000-ffff mask=0x408000
|
map address=00-3f,80-bf:8000-ffff mask=0x408000
|
||||||
map address=c0-ff:0000-ffff
|
map address=c0-ff:0000-ffff
|
||||||
|
memory type=ROM content=Program
|
||||||
|
slot type=BSMemory
|
||||||
memory type=RAM content=Save
|
memory type=RAM content=Save
|
||||||
map address=00-3f,80-bf:6000-7fff size=0x2000
|
map address=00-3f,80-bf:6000-7fff size=0x2000
|
||||||
map address=40-4f:0000-ffff
|
map address=40-4f:0000-ffff
|
||||||
memory type=RAM content=Internal
|
memory type=RAM content=Internal
|
||||||
map address=00-3f,80-bf:3000-37ff size=0x800
|
map address=00-3f,80-bf:3000-37ff size=0x800
|
||||||
slot type=BSMemory
|
|
||||||
|
|
||||||
board: SGB-R-10
|
board: SGB-R-10
|
||||||
memory type=ROM content=Program
|
memory type=ROM content=Program
|
||||||
map address=00-7d,80-ff:8000-ffff mask=0x8000
|
map address=00-7d,80-ff:8000-ffff mask=0x8000
|
||||||
map address=40-7d,c0-ff:0000-7fff mask=0x8000
|
map address=40-7d,c0-ff:0000-7fff mask=0x8000
|
||||||
icd revision=2
|
processor identifier=ICD revision=2
|
||||||
map address=00-3f,80-bf:6000-67ff,7000-7fff
|
map address=00-3f,80-bf:6000-67ff,7000-7fff
|
||||||
memory type=ROM content=Boot architecture=LR35902
|
memory type=ROM content=Boot architecture=LR35902
|
||||||
slot type=GameBoy
|
slot type=GameBoy
|
||||||
|
@ -147,7 +149,7 @@ board: SHVC-1A5M-(01,11,20)
|
||||||
board: SHVC-1B0N-(02,03,10)
|
board: SHVC-1B0N-(02,03,10)
|
||||||
memory type=ROM content=Program
|
memory type=ROM content=Program
|
||||||
map address=00-1f,80-9f:8000-ffff mask=0x8000
|
map address=00-1f,80-9f:8000-ffff mask=0x8000
|
||||||
necdsp model=uPD7725
|
processor architecture=uPD7725
|
||||||
map address=30-3f,b0-bf:8000-ffff mask=0x3fff
|
map address=30-3f,b0-bf:8000-ffff mask=0x3fff
|
||||||
memory type=ROM content=Program architecture=uPD7725
|
memory type=ROM content=Program architecture=uPD7725
|
||||||
memory type=ROM content=Data architecture=uPD7725
|
memory type=ROM content=Data architecture=uPD7725
|
||||||
|
@ -159,7 +161,7 @@ board: SHVC-1B5B-02
|
||||||
map address=00-1f,80-9f:8000-ffff mask=0x8000
|
map address=00-1f,80-9f:8000-ffff mask=0x8000
|
||||||
memory type=RAM content=Save
|
memory type=RAM content=Save
|
||||||
map address=70-7d,f0-ff:0000-ffff
|
map address=70-7d,f0-ff:0000-ffff
|
||||||
necdsp model=uPD7725
|
processor architecture=uPD7725
|
||||||
map address=20-3f,a0-bf:8000-ffff mask=0x3fff
|
map address=20-3f,a0-bf:8000-ffff mask=0x3fff
|
||||||
memory type=ROM content=Program architecture=uPD7725
|
memory type=ROM content=Program architecture=uPD7725
|
||||||
memory type=ROM content=Data architecture=uPD7725
|
memory type=ROM content=Data architecture=uPD7725
|
||||||
|
@ -167,7 +169,7 @@ board: SHVC-1B5B-02
|
||||||
oscillator
|
oscillator
|
||||||
|
|
||||||
board: SHVC-1C0N
|
board: SHVC-1C0N
|
||||||
superfx
|
processor architecture=GSU
|
||||||
map address=00-3f,80-bf:3000-34ff
|
map address=00-3f,80-bf:3000-34ff
|
||||||
memory type=ROM content=Program
|
memory type=ROM content=Program
|
||||||
map address=00-1f,80-9f:8000-ffff mask=0x8000
|
map address=00-1f,80-9f:8000-ffff mask=0x8000
|
||||||
|
@ -175,7 +177,7 @@ board: SHVC-1C0N
|
||||||
map address=60-7d,e0-ff:0000-ffff
|
map address=60-7d,e0-ff:0000-ffff
|
||||||
|
|
||||||
board: SHVC-1C0N5S-01
|
board: SHVC-1C0N5S-01
|
||||||
superfx
|
processor architecture=GSU
|
||||||
map address=00-3f,80-bf:3000-34ff
|
map address=00-3f,80-bf:3000-34ff
|
||||||
memory type=ROM content=Program
|
memory type=ROM content=Program
|
||||||
map address=00-1f,80-9f:8000-ffff mask=0x8000
|
map address=00-1f,80-9f:8000-ffff mask=0x8000
|
||||||
|
@ -183,7 +185,7 @@ board: SHVC-1C0N5S-01
|
||||||
map address=60-7d,e0-ff:0000-ffff
|
map address=60-7d,e0-ff:0000-ffff
|
||||||
|
|
||||||
board: SHVC-1CA0N5S-01
|
board: SHVC-1CA0N5S-01
|
||||||
superfx
|
processor architecture=GSU
|
||||||
map address=00-3f,80-bf:3000-34ff
|
map address=00-3f,80-bf:3000-34ff
|
||||||
memory type=ROM content=Program
|
memory type=ROM content=Program
|
||||||
map address=00-3f,80-bf:8000-ffff mask=0x8000
|
map address=00-3f,80-bf:8000-ffff mask=0x8000
|
||||||
|
@ -193,7 +195,7 @@ board: SHVC-1CA0N5S-01
|
||||||
map address=70-71,f0-f1:0000-ffff
|
map address=70-71,f0-f1:0000-ffff
|
||||||
|
|
||||||
board: SHVC-1CA0N6S-01
|
board: SHVC-1CA0N6S-01
|
||||||
superfx
|
processor architecture=GSU
|
||||||
map address=00-3f,80-bf:3000-34ff
|
map address=00-3f,80-bf:3000-34ff
|
||||||
memory type=ROM content=Program
|
memory type=ROM content=Program
|
||||||
map address=00-3f,80-bf:8000-ffff mask=0x8000
|
map address=00-3f,80-bf:8000-ffff mask=0x8000
|
||||||
|
@ -203,7 +205,7 @@ board: SHVC-1CA0N6S-01
|
||||||
map address=70-71,f0-f1:0000-ffff
|
map address=70-71,f0-f1:0000-ffff
|
||||||
|
|
||||||
board: SHVC-1CA6B-01
|
board: SHVC-1CA6B-01
|
||||||
superfx
|
processor architecture=GSU
|
||||||
map address=00-3f,80-bf:3000-34ff
|
map address=00-3f,80-bf:3000-34ff
|
||||||
memory type=ROM content=Program
|
memory type=ROM content=Program
|
||||||
map address=00-3f,80-bf:8000-ffff mask=0x8000
|
map address=00-3f,80-bf:8000-ffff mask=0x8000
|
||||||
|
@ -213,7 +215,7 @@ board: SHVC-1CA6B-01
|
||||||
map address=70-71,f0-f1:0000-ffff
|
map address=70-71,f0-f1:0000-ffff
|
||||||
|
|
||||||
board: SHVC-1CB0N7S-01
|
board: SHVC-1CB0N7S-01
|
||||||
superfx
|
processor architecture=GSU
|
||||||
map address=00-3f,80-bf:3000-34ff
|
map address=00-3f,80-bf:3000-34ff
|
||||||
memory type=ROM content=Program
|
memory type=ROM content=Program
|
||||||
map address=00-3f:8000-ffff mask=0x8000
|
map address=00-3f:8000-ffff mask=0x8000
|
||||||
|
@ -223,7 +225,7 @@ board: SHVC-1CB0N7S-01
|
||||||
map address=70-71:0000-ffff
|
map address=70-71:0000-ffff
|
||||||
|
|
||||||
board: SHVC-1CB5B-20
|
board: SHVC-1CB5B-20
|
||||||
superfx
|
processor architecture=GSU
|
||||||
map address=00-3f,80-bf:3000-34ff
|
map address=00-3f,80-bf:3000-34ff
|
||||||
memory type=ROM content=Program
|
memory type=ROM content=Program
|
||||||
map address=00-3f:8000-ffff mask=0x8000
|
map address=00-3f:8000-ffff mask=0x8000
|
||||||
|
@ -233,7 +235,7 @@ board: SHVC-1CB5B-20
|
||||||
map address=70-71:0000-ffff
|
map address=70-71:0000-ffff
|
||||||
|
|
||||||
board: SHVC-1CB7B-01
|
board: SHVC-1CB7B-01
|
||||||
superfx
|
processor architecture=GSU
|
||||||
map address=00-3f,80-bf:3000-34ff
|
map address=00-3f,80-bf:3000-34ff
|
||||||
memory type=ROM content=Program
|
memory type=ROM content=Program
|
||||||
map address=00-3f:8000-ffff mask=0x8000
|
map address=00-3f:8000-ffff mask=0x8000
|
||||||
|
@ -243,11 +245,12 @@ board: SHVC-1CB7B-01
|
||||||
map address=70-71:0000-ffff
|
map address=70-71:0000-ffff
|
||||||
|
|
||||||
board: SHVC-1DC0N-01
|
board: SHVC-1DC0N-01
|
||||||
hitachidsp model=HG51BS169
|
processor architecture=HG51BS169
|
||||||
map address=00-3f,80-bf:6c00-6fff,7c00-7fff
|
map address=00-3f,80-bf:6c00-6fff,7c00-7fff
|
||||||
map address=70-77:0000-7fff
|
|
||||||
memory type=ROM content=Program
|
memory type=ROM content=Program
|
||||||
map address=00-3f,80-bf:8000-ffff mask=0x8000
|
map address=00-3f,80-bf:8000-ffff mask=0x8000
|
||||||
|
memory type=RAM content=Save
|
||||||
|
map address=70-77:0000-7fff
|
||||||
memory type=ROM content=Data architecture=HG51BS169
|
memory type=ROM content=Data architecture=HG51BS169
|
||||||
memory type=RAM content=Data architecture=HG51BS169
|
memory type=RAM content=Data architecture=HG51BS169
|
||||||
map address=00-3f,80-bf:6000-6bff,7000-7bff mask=0xf000
|
map address=00-3f,80-bf:6000-6bff,7000-7bff mask=0xf000
|
||||||
|
@ -256,7 +259,7 @@ board: SHVC-1DC0N-01
|
||||||
board: SHVC-1DS0B-20
|
board: SHVC-1DS0B-20
|
||||||
memory type=ROM content=Program
|
memory type=ROM content=Program
|
||||||
map address=00-7d,80-ff:8000-ffff mask=0x8000
|
map address=00-7d,80-ff:8000-ffff mask=0x8000
|
||||||
necdsp model=uPD96050
|
processor architecture=uPD96050
|
||||||
map address=60-67,e0-e7:0000-3fff
|
map address=60-67,e0-e7:0000-3fff
|
||||||
memory type=ROM content=Program architecture=uPD96050
|
memory type=ROM content=Program architecture=uPD96050
|
||||||
memory type=ROM content=Data architecture=uPD96050
|
memory type=ROM content=Data architecture=uPD96050
|
||||||
|
@ -301,7 +304,7 @@ board: SHVC-1K0N-01
|
||||||
memory type=ROM content=Program
|
memory type=ROM content=Program
|
||||||
map address=00-3f,80-bf:8000-ffff
|
map address=00-3f,80-bf:8000-ffff
|
||||||
map address=40-7d,c0-ff:0000-ffff
|
map address=40-7d,c0-ff:0000-ffff
|
||||||
necdsp model=uPD7725
|
processor architecture=uPD7725
|
||||||
map address=00-1f,80-9f:6000-7fff mask=0xfff
|
map address=00-1f,80-9f:6000-7fff mask=0xfff
|
||||||
memory type=ROM content=Program architecture=uPD7725
|
memory type=ROM content=Program architecture=uPD7725
|
||||||
memory type=ROM content=Data architecture=uPD7725
|
memory type=ROM content=Data architecture=uPD7725
|
||||||
|
@ -314,7 +317,7 @@ board: SHVC-1K1B-01
|
||||||
map address=40-7d,c0-ff:0000-ffff
|
map address=40-7d,c0-ff:0000-ffff
|
||||||
memory type=RAM content=Save
|
memory type=RAM content=Save
|
||||||
map address=20-3f,a0-bf:6000-7fff mask=0xe000
|
map address=20-3f,a0-bf:6000-7fff mask=0xe000
|
||||||
necdsp model=uPD7725
|
processor architecture=uPD7725
|
||||||
map address=00-1f,80-9f:6000-7fff mask=0xfff
|
map address=00-1f,80-9f:6000-7fff mask=0xfff
|
||||||
memory type=ROM content=Program architecture=uPD7725
|
memory type=ROM content=Program architecture=uPD7725
|
||||||
memory type=ROM content=Data architecture=uPD7725
|
memory type=ROM content=Data architecture=uPD7725
|
||||||
|
@ -322,11 +325,12 @@ board: SHVC-1K1B-01
|
||||||
oscillator
|
oscillator
|
||||||
|
|
||||||
board: SHVC-1L0N3S-01
|
board: SHVC-1L0N3S-01
|
||||||
sa1
|
processor architecture=W65C816S
|
||||||
map address=00-3f,80-bf:2200-23ff
|
map address=00-3f,80-bf:2200-23ff
|
||||||
memory type=ROM content=Program
|
mcu
|
||||||
map address=00-3f,80-bf:8000-ffff mask=0x408000
|
map address=00-3f,80-bf:8000-ffff mask=0x408000
|
||||||
map address=c0-ff:0000-ffff
|
map address=c0-ff:0000-ffff
|
||||||
|
memory type=ROM content=Program
|
||||||
memory type=RAM content=Save
|
memory type=RAM content=Save
|
||||||
map address=00-3f,80-bf:6000-7fff size=0x2000
|
map address=00-3f,80-bf:6000-7fff size=0x2000
|
||||||
map address=40-4f:0000-ffff
|
map address=40-4f:0000-ffff
|
||||||
|
@ -334,11 +338,12 @@ board: SHVC-1L0N3S-01
|
||||||
map address=00-3f,80-bf:3000-37ff size=0x800
|
map address=00-3f,80-bf:3000-37ff size=0x800
|
||||||
|
|
||||||
board: SHVC-1L3B-(02,11)
|
board: SHVC-1L3B-(02,11)
|
||||||
sa1
|
processor architecture=W65C816S
|
||||||
map address=00-3f,80-bf:2200-23ff
|
map address=00-3f,80-bf:2200-23ff
|
||||||
memory type=ROM content=Program
|
mcu
|
||||||
map address=00-3f,80-bf:8000-ffff mask=0x408000
|
map address=00-3f,80-bf:8000-ffff mask=0x408000
|
||||||
map address=c0-ff:0000-ffff
|
map address=c0-ff:0000-ffff
|
||||||
|
memory type=ROM content=Program
|
||||||
memory type=RAM content=Save
|
memory type=RAM content=Save
|
||||||
map address=00-3f,80-bf:6000-7fff size=0x2000
|
map address=00-3f,80-bf:6000-7fff size=0x2000
|
||||||
map address=40-4f:0000-ffff
|
map address=40-4f:0000-ffff
|
||||||
|
@ -346,11 +351,12 @@ board: SHVC-1L3B-(02,11)
|
||||||
map address=00-3f,80-bf:3000-37ff size=0x800
|
map address=00-3f,80-bf:3000-37ff size=0x800
|
||||||
|
|
||||||
board: SHVC-1L5B-(11,20)
|
board: SHVC-1L5B-(11,20)
|
||||||
sa1
|
processor architecture=W65C816S
|
||||||
map address=00-3f,80-bf:2200-23ff
|
map address=00-3f,80-bf:2200-23ff
|
||||||
memory type=ROM content=Program
|
mcu
|
||||||
map address=00-3f,80-bf:8000-ffff mask=0x408000
|
map address=00-3f,80-bf:8000-ffff mask=0x408000
|
||||||
map address=c0-ff:0000-ffff
|
map address=c0-ff:0000-ffff
|
||||||
|
memory type=ROM content=Program
|
||||||
memory type=RAM content=Save
|
memory type=RAM content=Save
|
||||||
map address=00-3f,80-bf:6000-7fff size=0x2000
|
map address=00-3f,80-bf:6000-7fff size=0x2000
|
||||||
map address=40-4f:0000-ffff
|
map address=40-4f:0000-ffff
|
||||||
|
@ -358,11 +364,12 @@ board: SHVC-1L5B-(11,20)
|
||||||
map address=00-3f,80-bf:3000-37ff size=0x800
|
map address=00-3f,80-bf:3000-37ff size=0x800
|
||||||
|
|
||||||
board: SHVC-1N0N-(01,10)
|
board: SHVC-1N0N-(01,10)
|
||||||
sdd1
|
processor identifier=SDD1
|
||||||
map address=00-3f,80-bf:4800-480f
|
map address=00-3f,80-bf:4800-480f
|
||||||
memory type=ROM content=Program
|
mcu
|
||||||
map address=00-3f,80-bf:8000-ffff
|
map address=00-3f,80-bf:8000-ffff
|
||||||
map address=c0-ff:0000-ffff
|
map address=c0-ff:0000-ffff
|
||||||
|
memory type=ROM content=Program
|
||||||
|
|
||||||
board: SHVC-2A0N-01#A
|
board: SHVC-2A0N-01#A
|
||||||
memory type=ROM content=Program
|
memory type=ROM content=Program
|
||||||
|
@ -409,7 +416,7 @@ board: SHVC-2B3B-01
|
||||||
map address=00-3f,80-bf:8000-ffff mask=0x8000
|
map address=00-3f,80-bf:8000-ffff mask=0x8000
|
||||||
memory type=RAM content=Save
|
memory type=RAM content=Save
|
||||||
map address=70-7d,f0-ff:0000-7fff mask=0x8000
|
map address=70-7d,f0-ff:0000-7fff mask=0x8000
|
||||||
necdsp model=uPD7725
|
processor architecture=uPD7725
|
||||||
map address=60-6f,e0-ef:0000-7fff mask=0x3fff
|
map address=60-6f,e0-ef:0000-7fff mask=0x3fff
|
||||||
memory type=ROM content=Program architecture=uPD7725
|
memory type=ROM content=Program architecture=uPD7725
|
||||||
memory type=ROM content=Data architecture=uPD7725
|
memory type=ROM content=Data architecture=uPD7725
|
||||||
|
@ -417,11 +424,12 @@ board: SHVC-2B3B-01
|
||||||
oscillator
|
oscillator
|
||||||
|
|
||||||
board: SHVC-2DC0N-01
|
board: SHVC-2DC0N-01
|
||||||
hitachidsp model=HG51BS169
|
processor architecture=HG51BS169
|
||||||
map address=00-3f,80-bf:6c00-6fff,7c00-7fff
|
map address=00-3f,80-bf:6c00-6fff,7c00-7fff
|
||||||
map address=70-77:0000-7fff
|
|
||||||
memory type=ROM content=Program
|
memory type=ROM content=Program
|
||||||
map address=00-3f,80-bf:8000-ffff mask=0x8000
|
map address=00-3f,80-bf:8000-ffff mask=0x8000
|
||||||
|
memory type=RAM content=Save
|
||||||
|
map address=70-77:0000-7fff
|
||||||
memory type=ROM content=Data architecture=HG51BS169
|
memory type=ROM content=Data architecture=HG51BS169
|
||||||
memory type=RAM content=Data architecture=HG51BS169
|
memory type=RAM content=Data architecture=HG51BS169
|
||||||
map address=00-3f,80-bf:6000-6bff,7000-7bff mask=0xf000
|
map address=00-3f,80-bf:6000-6bff,7000-7bff mask=0xf000
|
||||||
|
@ -430,7 +438,7 @@ board: SHVC-2DC0N-01
|
||||||
board: SHVC-2E3M-01
|
board: SHVC-2E3M-01
|
||||||
memory type=ROM content=Program
|
memory type=ROM content=Program
|
||||||
map address=00-3f,80-bf:8000-ffff mask=0x8000
|
map address=00-3f,80-bf:8000-ffff mask=0x8000
|
||||||
obc1
|
processor identifier=OBC1
|
||||||
map address=00-3f,80-bf:6000-7fff mask=0xe000
|
map address=00-3f,80-bf:6000-7fff mask=0xe000
|
||||||
map address=70-71,f0-f1:6000-7fff,e000-ffff mask=0xe000
|
map address=70-71,f0-f1:6000-7fff,e000-ffff mask=0xe000
|
||||||
memory type=RAM content=Save
|
memory type=RAM content=Save
|
||||||
|
@ -488,7 +496,7 @@ board: SHVC-BJ1M-(10,20)
|
||||||
memory type=RAM content=Save
|
memory type=RAM content=Save
|
||||||
map address=20-3f,a0-bf:6000-7fff mask=0xe000
|
map address=20-3f,a0-bf:6000-7fff mask=0xe000
|
||||||
|
|
||||||
board: SHVC-BJ3M-10
|
board: SHVC-BJ3M-(10,20)
|
||||||
memory type=ROM content=Program
|
memory type=ROM content=Program
|
||||||
map address=00-3f,80-bf:8000-ffff
|
map address=00-3f,80-bf:8000-ffff
|
||||||
map address=40-7d,c0-ff:0000-ffff
|
map address=40-7d,c0-ff:0000-ffff
|
||||||
|
@ -496,25 +504,27 @@ board: SHVC-BJ3M-10
|
||||||
map address=20-3f,a0-bf:6000-7fff mask=0xe000
|
map address=20-3f,a0-bf:6000-7fff mask=0xe000
|
||||||
|
|
||||||
board: SHVC-LDH3C-01
|
board: SHVC-LDH3C-01
|
||||||
spc7110
|
processor identifier=SPC7110
|
||||||
map address=00-3f,80-bf:4800-483f
|
map address=00-3f,80-bf:4800-483f
|
||||||
map address=50,58:0000-ffff
|
map address=50,58:0000-ffff
|
||||||
map=mcu address=00-3f,80-bf:8000-ffff mask=0x800000
|
mcu
|
||||||
map=mcu address=c0-ff:0000-ffff mask=0xc00000
|
map address=00-3f,80-bf:8000-ffff mask=0x800000
|
||||||
|
map address=c0-ff:0000-ffff mask=0xc00000
|
||||||
memory type=ROM content=Program
|
memory type=ROM content=Program
|
||||||
memory type=ROM content=Data
|
memory type=ROM content=Data
|
||||||
memory type=RAM content=Save
|
memory type=RAM content=Save
|
||||||
map address=00-3f,80-bf:6000-7fff mask=0xe000
|
map address=00-3f,80-bf:6000-7fff mask=0xe000
|
||||||
epsonrtc
|
rtc manufacturer=Epson
|
||||||
map address=00-3f,80-bf:4840-4842
|
map address=00-3f,80-bf:4840-4842
|
||||||
memory type=RTC content=Time manufacturer=Epson
|
memory type=RTC content=Time manufacturer=Epson
|
||||||
|
|
||||||
board: SHVC-LN3B-01
|
board: SHVC-LN3B-01
|
||||||
sdd1
|
processor identifier=SDD1
|
||||||
map address=00-3f,80-bf:4800-480f
|
map address=00-3f,80-bf:4800-480f
|
||||||
memory type=ROM content=Program
|
mcu
|
||||||
map address=00-3f,80-bf:8000-ffff
|
map address=00-3f,80-bf:8000-ffff
|
||||||
map address=c0-ff:0000-ffff
|
map address=c0-ff:0000-ffff
|
||||||
|
memory type=ROM content=Program
|
||||||
memory type=RAM content=Save
|
memory type=RAM content=Save
|
||||||
map address=00-3f,80-bf:6000-7fff mask=0xe000
|
map address=00-3f,80-bf:6000-7fff mask=0xe000
|
||||||
map address=70-73:0000-ffff
|
map address=70-73:0000-ffff
|
||||||
|
@ -523,7 +533,7 @@ board: SHVC-SGB2-01
|
||||||
memory type=ROM content=Program
|
memory type=ROM content=Program
|
||||||
map address=00-7d,80-ff:8000-ffff mask=0x8000
|
map address=00-7d,80-ff:8000-ffff mask=0x8000
|
||||||
map address=40-7d,c0-ff:0000-7fff mask=0x8000
|
map address=40-7d,c0-ff:0000-7fff mask=0x8000
|
||||||
icd revision=2
|
processor identifier=ICD revision=2
|
||||||
map address=00-3f,80-bf:6000-67ff,7000-7fff
|
map address=00-3f,80-bf:6000-67ff,7000-7fff
|
||||||
memory type=ROM content=Boot architecture=LR35902
|
memory type=ROM content=Boot architecture=LR35902
|
||||||
oscillator
|
oscillator
|
||||||
|
@ -542,7 +552,7 @@ board: SHVC-YJ0N-01
|
||||||
//Boards (Generic)
|
//Boards (Generic)
|
||||||
|
|
||||||
database
|
database
|
||||||
revision: 2018-04-08
|
revision: 2018-05-08
|
||||||
|
|
||||||
board: ARM-LOROM-RAM
|
board: ARM-LOROM-RAM
|
||||||
memory type=ROM content=Program
|
memory type=ROM content=Program
|
||||||
|
@ -550,11 +560,11 @@ board: ARM-LOROM-RAM
|
||||||
map address=40-6f,c0-ef:0000-7fff mask=0x8000
|
map address=40-6f,c0-ef:0000-7fff mask=0x8000
|
||||||
memory type=RAM content=Save
|
memory type=RAM content=Save
|
||||||
map address=70-7d,f0-ff:0000-ffff
|
map address=70-7d,f0-ff:0000-ffff
|
||||||
armdsp
|
processor architecture=ARM6
|
||||||
map address=00-3f,80-bf:3800-38ff
|
map address=00-3f,80-bf:3800-38ff
|
||||||
memory type=ROM content=Program manufacturer=SETA
|
memory type=ROM content=Program architecture=ARM6
|
||||||
memory type=ROM content=Data manufacturer=SETA
|
memory type=ROM content=Data architecture=ARM6
|
||||||
memory type=RAM content=Data manufacturer=SETA
|
memory type=RAM content=Data architecture=ARM6
|
||||||
oscillator
|
oscillator
|
||||||
|
|
||||||
board: BS-HIROM-RAM
|
board: BS-HIROM-RAM
|
||||||
|
@ -563,7 +573,7 @@ board: BS-HIROM-RAM
|
||||||
map address=40-5f,c0-df:0000-ffff
|
map address=40-5f,c0-df:0000-ffff
|
||||||
memory type=RAM content=Save
|
memory type=RAM content=Save
|
||||||
map address=20-3f,a0-bf:6000-7fff mask=0xe000
|
map address=20-3f,a0-bf:6000-7fff mask=0xe000
|
||||||
bsmemory
|
slot type=BSMemory
|
||||||
map address=20-3f,a0-bf:8000-ffff
|
map address=20-3f,a0-bf:8000-ffff
|
||||||
map address=60-7d,e0-ff:0000-ffff
|
map address=60-7d,e0-ff:0000-ffff
|
||||||
|
|
||||||
|
@ -575,33 +585,89 @@ board: BS-LOROM-RAM
|
||||||
map address=a0-bf:8000-ffff base=0x100000 mask=0x8000
|
map address=a0-bf:8000-ffff base=0x100000 mask=0x8000
|
||||||
memory type=RAM content=Save
|
memory type=RAM content=Save
|
||||||
map address=70-7d,f0-ff:0000-7fff mask=0x8000
|
map address=70-7d,f0-ff:0000-7fff mask=0x8000
|
||||||
bsmemory
|
slot type=BSMemory
|
||||||
map address=c0-ef:0000-ffff
|
map address=c0-ef:0000-ffff
|
||||||
|
|
||||||
board: BS-MCC-RAM
|
board: BS-MCC-RAM
|
||||||
memory type=RAM content=Save
|
memory type=RAM content=Save
|
||||||
map address=10-1f:5000-5fff mask=0xf000
|
map address=10-1f:5000-5fff mask=0xf000
|
||||||
mcc
|
processor identifier=MCC
|
||||||
map address=00-0f:5000
|
map address=00-0f:5000
|
||||||
map=mcu address=00-3f,80-bf:8000-ffff mask=0x408000
|
mcu
|
||||||
map=mcu address=40-7d,c0-ff:0000-ffff
|
map address=00-3f,80-bf:8000-ffff mask=0x408000
|
||||||
|
map address=40-7d,c0-ff:0000-ffff
|
||||||
memory type=ROM content=Program
|
memory type=ROM content=Program
|
||||||
|
slot type=BSMemory
|
||||||
memory type=RAM content=Download
|
memory type=RAM content=Download
|
||||||
map address=00-3f,80-bf:6000-7fff mask=0xe000
|
map address=00-3f,80-bf:6000-7fff mask=0xe000
|
||||||
bsmemory
|
|
||||||
|
|
||||||
board: BS-SA1-RAM
|
board: BS-SA1-RAM
|
||||||
sa1
|
processor architecture=W65C816S
|
||||||
map address=00-3f,80-bf:2200-23ff
|
map address=00-3f,80-bf:2200-23ff
|
||||||
memory type=ROM content=Program
|
mcu
|
||||||
map address=00-3f,80-bf:8000-ffff mask=0x408000
|
map address=00-3f,80-bf:8000-ffff mask=0x408000
|
||||||
map address=c0-ff:0000-ffff
|
map address=c0-ff:0000-ffff
|
||||||
|
memory type=ROM content=Program
|
||||||
|
slot type=BSMemory
|
||||||
memory type=RAM content=Save
|
memory type=RAM content=Save
|
||||||
map address=00-3f,80-bf:6000-7fff size=0x2000
|
map address=00-3f,80-bf:6000-7fff size=0x2000
|
||||||
map address=40-4f:0000-ffff
|
map address=40-4f:0000-ffff
|
||||||
memory type=RAM content=Internal
|
memory type=RAM content=Internal
|
||||||
map address=00-3f,80-bf:3000-37ff size=0x800
|
map address=00-3f,80-bf:3000-37ff size=0x800
|
||||||
bsmemory
|
|
||||||
|
board: EXHIROM-RAM
|
||||||
|
memory type=ROM content=Program
|
||||||
|
map address=00-3f:8000-ffff base=0x400000
|
||||||
|
map address=40-7d:0000-ffff base=0x400000
|
||||||
|
map address=80-bf:8000-ffff mask=0xc00000
|
||||||
|
map address=c0-ff:0000-ffff mask=0xc00000
|
||||||
|
memory type=RAM content=Save
|
||||||
|
map address=20-3f,a0-bf:6000-7fff mask=0xe000
|
||||||
|
map address=70-7d:0000-7fff
|
||||||
|
|
||||||
|
board: EXHIROM-RAM-SHARPRTC
|
||||||
|
memory type=ROM content=Program
|
||||||
|
map address=00-3f:8000-ffff base=0x400000
|
||||||
|
map address=40-7d:0000-ffff base=0x400000
|
||||||
|
map address=80-bf:8000-ffff mask=0xc00000
|
||||||
|
map address=c0-ff:0000-ffff mask=0xc00000
|
||||||
|
memory type=RAM content=Save
|
||||||
|
map address=20-3f,a0-bf:6000-7fff mask=0xe000
|
||||||
|
map address=70-7d:0000-7fff
|
||||||
|
rtc manufacturer=Sharp
|
||||||
|
map address=00-3f,80-bf:2800-2801
|
||||||
|
memory type=RTC content=Time manufacturer=Sharp
|
||||||
|
|
||||||
|
board: EXNEC-LOROM
|
||||||
|
memory type=ROM content=Program
|
||||||
|
map address=00-7d,80-ff:8000-ffff mask=0x8000
|
||||||
|
processor architecture=uPD96050
|
||||||
|
map address=60-67,e0-e7:0000-3fff
|
||||||
|
memory type=ROM content=Program architecture=uPD96050
|
||||||
|
memory type=ROM content=Data architecture=uPD96050
|
||||||
|
memory type=RAM content=Data architecture=uPD96050
|
||||||
|
map address=68-6f,e8-ef:0000-7fff mask=0x8000
|
||||||
|
oscillator
|
||||||
|
|
||||||
|
board: GB-LOROM
|
||||||
|
memory type=ROM content=Program
|
||||||
|
map address=00-7d,80-ff:8000-ffff mask=0x8000
|
||||||
|
map address=40-7d,c0-ff:0000-7fff mask=0x8000
|
||||||
|
processor identifier=ICD revision=2
|
||||||
|
map address=00-3f,80-bf:6000-67ff,7000-7fff
|
||||||
|
memory type=ROM content=Boot architecture=LR35902
|
||||||
|
oscillator
|
||||||
|
slot type=GameBoy
|
||||||
|
|
||||||
|
board: GSU-RAM
|
||||||
|
processor architecture=GSU
|
||||||
|
map address=00-3f,80-bf:3000-34ff
|
||||||
|
memory type=ROM content=Program
|
||||||
|
map address=00-3f,80-bf:8000-ffff mask=0x8000
|
||||||
|
map address=40-5f,c0-df:0000-ffff
|
||||||
|
memory type=RAM content=Save
|
||||||
|
map address=00-3f,80-bf:6000-7fff size=0x2000
|
||||||
|
map address=70-71,f0-f1:0000-ffff
|
||||||
|
|
||||||
board: HIROM
|
board: HIROM
|
||||||
memory type=ROM content=Program
|
memory type=ROM content=Program
|
||||||
|
@ -615,24 +681,15 @@ board: HIROM-RAM
|
||||||
memory type=RAM content=Save
|
memory type=RAM content=Save
|
||||||
map address=20-3f,a0-bf:6000-7fff mask=0xe000
|
map address=20-3f,a0-bf:6000-7fff mask=0xe000
|
||||||
|
|
||||||
board: HIROMEX-RAM
|
|
||||||
memory type=ROM content=Program
|
|
||||||
map address=00-3f:8000-ffff base=0x400000
|
|
||||||
map address=40-7d:0000-ffff base=0x400000
|
|
||||||
map address=80-bf:8000-ffff mask=0xc00000
|
|
||||||
map address=c0-ff:0000-ffff mask=0xc00000
|
|
||||||
memory type=RAM content=Save
|
|
||||||
map address=20-3f,a0-bf:6000-7fff mask=0xe000
|
|
||||||
map address=70-7d:0000-7fff
|
|
||||||
|
|
||||||
board: HITACHI-LOROM
|
board: HITACHI-LOROM
|
||||||
hitachidsp model=HG51BS169
|
processor architecture=HG51BS169
|
||||||
map address=00-3f,80-bf:6c00-6fff,7c00-7fff
|
map address=00-3f,80-bf:6c00-6fff,7c00-7fff
|
||||||
map address=70-77:0000-7fff
|
|
||||||
memory type=ROM content=Program
|
memory type=ROM content=Program
|
||||||
map address=00-3f,80-bf:8000-ffff mask=0x8000
|
map address=00-3f,80-bf:8000-ffff mask=0x8000
|
||||||
memory type=ROM content=Data manufacturer=Hitachi
|
memory type=RAM content=Save
|
||||||
memory type=RAM content=Data manufacturer=Hitachi
|
map address=70-77:0000-7fff
|
||||||
|
memory type=ROM content=Data architecture=HG51BS169
|
||||||
|
memory type=RAM content=Data architecture=HG51BS169
|
||||||
map address=00-3f,80-bf:6000-6bff,7000-7bff mask=0xf000
|
map address=00-3f,80-bf:6000-6bff,7000-7bff mask=0xf000
|
||||||
oscillator
|
oscillator
|
||||||
|
|
||||||
|
@ -640,13 +697,13 @@ board: LOROM
|
||||||
memory type=ROM content=Program
|
memory type=ROM content=Program
|
||||||
map address=00-7d,80-ff:8000-ffff mask=0x8000
|
map address=00-7d,80-ff:8000-ffff mask=0x8000
|
||||||
|
|
||||||
board: LOROM-RAM
|
board: LOROM-RAM#A
|
||||||
memory type=ROM content=Program
|
memory type=ROM content=Program
|
||||||
map address=00-3f,80-bf:8000-ffff mask=0x8000
|
map address=00-3f,80-bf:8000-ffff mask=0x8000
|
||||||
memory type=RAM content=Save
|
memory type=RAM content=Save
|
||||||
map address=70-7d,f0-ff:0000-ffff mask=0x8000
|
map address=70-7d,f0-ff:0000-ffff mask=0x8000
|
||||||
|
|
||||||
board: LOROMEX-RAM
|
board: LOROM-RAM#B
|
||||||
memory type=ROM content=Program
|
memory type=ROM content=Program
|
||||||
map address=00-7d,80-ff:8000-ffff mask=0x8000
|
map address=00-7d,80-ff:8000-ffff mask=0x8000
|
||||||
memory type=RAM content=Save
|
memory type=RAM content=Save
|
||||||
|
@ -656,11 +713,11 @@ board: NEC-HIROM
|
||||||
memory type=ROM content=Program
|
memory type=ROM content=Program
|
||||||
map address=00-3f,80-bf:8000-ffff
|
map address=00-3f,80-bf:8000-ffff
|
||||||
map address=40-7d,c0-ff:0000-ffff
|
map address=40-7d,c0-ff:0000-ffff
|
||||||
necdsp model=uPD7725
|
processor architecture=uPD7725
|
||||||
map address=00-1f,80-9f:6000-7fff mask=0xfff
|
map address=00-1f,80-9f:6000-7fff mask=0xfff
|
||||||
memory type=ROM content=Program manufacturer=NEC
|
memory type=ROM content=Program architecture=uPD7725
|
||||||
memory type=ROM content=Data manufacturer=NEC
|
memory type=ROM content=Data architecture=uPD7725
|
||||||
memory type=RAM content=Data manufacturer=NEC
|
memory type=RAM content=Data architecture=uPD7725
|
||||||
oscillator
|
oscillator
|
||||||
|
|
||||||
board: NEC-HIROM-RAM
|
board: NEC-HIROM-RAM
|
||||||
|
@ -669,85 +726,62 @@ board: NEC-HIROM-RAM
|
||||||
map address=40-7d,c0-ff:0000-ffff
|
map address=40-7d,c0-ff:0000-ffff
|
||||||
memory type=RAM content=Save
|
memory type=RAM content=Save
|
||||||
map address=20-3f,a0-bf:6000-7fff mask=0xe000
|
map address=20-3f,a0-bf:6000-7fff mask=0xe000
|
||||||
necdsp model=uPD7725
|
processor architecture=uPD7725
|
||||||
map address=00-1f,80-9f:6000-7fff mask=0xfff
|
map address=00-1f,80-9f:6000-7fff mask=0xfff
|
||||||
memory type=ROM content=Program manufacturer=NEC
|
memory type=ROM content=Program architecture=uPD7725
|
||||||
memory type=ROM content=Data manufacturer=NEC
|
memory type=ROM content=Data architecture=uPD7725
|
||||||
memory type=RAM content=Data manufacturer=NEC
|
memory type=RAM content=Data architecture=uPD7725
|
||||||
oscillator
|
oscillator
|
||||||
|
|
||||||
board: NEC-LOROM
|
board: NEC-LOROM
|
||||||
memory type=ROM content=Program
|
memory type=ROM content=Program
|
||||||
map address=00-1f,80-9f:8000-ffff mask=0x8000
|
map address=00-1f,80-9f:8000-ffff mask=0x8000
|
||||||
necdsp model=uPD7725
|
processor architecture=uPD7725
|
||||||
map address=30-3f,b0-bf:8000-ffff mask=0x3fff
|
map address=30-3f,b0-bf:8000-ffff mask=0x3fff
|
||||||
memory type=ROM content=Program manufacturer=NEC
|
memory type=ROM content=Program architecture=uPD7725
|
||||||
memory type=ROM content=Data manufacturer=NEC
|
memory type=ROM content=Data architecture=uPD7725
|
||||||
memory type=RAM content=Data manufacturer=NEC
|
memory type=RAM content=Data architecture=uPD7725
|
||||||
oscillator
|
oscillator
|
||||||
|
|
||||||
board: NEC-LOROM-RAM
|
board: NEC-LOROM-RAM#A
|
||||||
memory type=ROM content=Program
|
memory type=ROM content=Program
|
||||||
map address=00-1f,80-9f:8000-ffff mask=0x8000
|
map address=00-1f,80-9f:8000-ffff mask=0x8000
|
||||||
memory type=RAM content=Save
|
memory type=RAM content=Save
|
||||||
map address=70-7d,f0-ff:0000-ffff
|
map address=70-7d,f0-ff:0000-ffff
|
||||||
necdsp model=uPD7725
|
processor architecture=uPD7725
|
||||||
map address=20-3f,a0-bf:8000-ffff mask=0x3fff
|
map address=20-3f,a0-bf:8000-ffff mask=0x3fff
|
||||||
memory type=ROM content=Program manufacturer=NEC
|
memory type=ROM content=Program architecture=uPD7725
|
||||||
memory type=ROM content=Data manufacturer=NEC
|
memory type=ROM content=Data architecture=uPD7725
|
||||||
memory type=RAM content=Data manufacturer=NEC
|
memory type=RAM content=Data architecture=uPD7725
|
||||||
oscillator
|
oscillator
|
||||||
|
|
||||||
board: NEC-LOROMEX-RAM
|
board: NEC-LOROM-RAM#B
|
||||||
memory type=ROM content=Program
|
memory type=ROM content=Program
|
||||||
map address=00-3f,80-bf:8000-ffff mask=0x8000
|
map address=00-3f,80-bf:8000-ffff mask=0x8000
|
||||||
memory type=RAM content=Save
|
memory type=RAM content=Save
|
||||||
map address=70-7d,f0-ff:0000-7fff mask=0x8000
|
map address=70-7d,f0-ff:0000-7fff mask=0x8000
|
||||||
necdsp model=uPD7725
|
processor architecture=uPD7725
|
||||||
map address=60-6f,e0-ef:0000-7fff mask=0x3fff
|
map address=60-6f,e0-ef:0000-7fff mask=0x3fff
|
||||||
memory type=ROM content=Program manufacturer=NEC
|
memory type=ROM content=Program architecture=uPD7725
|
||||||
memory type=ROM content=Data manufacturer=NEC
|
memory type=ROM content=Data architecture=uPD7725
|
||||||
memory type=RAM content=Data manufacturer=NEC
|
memory type=RAM content=Data architecture=uPD7725
|
||||||
oscillator
|
|
||||||
|
|
||||||
board: NECEX-LOROM-BATTERY
|
|
||||||
memory type=ROM content=Program
|
|
||||||
map address=00-7d,80-ff:8000-ffff mask=0x8000
|
|
||||||
necdsp model=uPD96050
|
|
||||||
map address=60-67,e0-e7:0000-3fff
|
|
||||||
memory type=ROM content=Program manufacturer=NEC
|
|
||||||
memory type=ROM content=Data manufacturer=NEC
|
|
||||||
memory type=RAM content=Data manufacturer=NEC
|
|
||||||
map address=68-6f,e8-ef:0000-7fff mask=0x8000
|
|
||||||
oscillator
|
oscillator
|
||||||
|
|
||||||
board: OBC1-LOROM-RAM
|
board: OBC1-LOROM-RAM
|
||||||
memory type=ROM content=Program
|
memory type=ROM content=Program
|
||||||
map address=00-3f,80-bf:8000-ffff mask=0x8000
|
map address=00-3f,80-bf:8000-ffff mask=0x8000
|
||||||
obc1
|
processor identifier=OBC1
|
||||||
map address=00-3f,80-bf:6000-7fff mask=0xe000
|
map address=00-3f,80-bf:6000-7fff mask=0xe000
|
||||||
map address=70-71,f0-f1:6000-7fff,e000-ffff mask=0xe000
|
map address=70-71,f0-f1:6000-7fff,e000-ffff mask=0xe000
|
||||||
memory type=RAM content=Save
|
memory type=RAM content=Save
|
||||||
|
|
||||||
board: RTC-HIROMEX-RAM
|
|
||||||
memory type=ROM content=Program
|
|
||||||
map address=00-3f:8000-ffff base=0x400000
|
|
||||||
map address=40-7d:0000-ffff base=0x400000
|
|
||||||
map address=80-bf:8000-ffff mask=0xc00000
|
|
||||||
map address=c0-ff:0000-ffff mask=0xc00000
|
|
||||||
memory type=RAM content=Save
|
|
||||||
map address=20-3f,a0-bf:6000-7fff mask=0xe000
|
|
||||||
map address=70-7d:0000-7fff
|
|
||||||
sharprtc
|
|
||||||
map address=00-3f,80-bf:2800-2801
|
|
||||||
memory type=RTC manufacturer=Sharp
|
|
||||||
|
|
||||||
board: SA1-RAM
|
board: SA1-RAM
|
||||||
sa1
|
processor architecture=W65C816S
|
||||||
map address=00-3f,80-bf:2200-23ff
|
map address=00-3f,80-bf:2200-23ff
|
||||||
memory type=ROM content=Program
|
mcu
|
||||||
map address=00-3f,80-bf:8000-ffff mask=0x408000
|
map address=00-3f,80-bf:8000-ffff mask=0x408000
|
||||||
map address=c0-ff:0000-ffff
|
map address=c0-ff:0000-ffff
|
||||||
|
memory type=ROM content=Program
|
||||||
memory type=RAM content=Save
|
memory type=RAM content=Save
|
||||||
map address=00-3f,80-bf:6000-7fff size=0x2000
|
map address=00-3f,80-bf:6000-7fff size=0x2000
|
||||||
map address=40-4f:0000-ffff
|
map address=40-4f:0000-ffff
|
||||||
|
@ -755,78 +789,62 @@ board: SA1-RAM
|
||||||
map address=00-3f,80-bf:3000-37ff size=0x800
|
map address=00-3f,80-bf:3000-37ff size=0x800
|
||||||
|
|
||||||
board: SDD1
|
board: SDD1
|
||||||
sdd1
|
processor identifier=SDD1
|
||||||
map address=00-3f,80-bf:4800-480f
|
map address=00-3f,80-bf:4800-480f
|
||||||
memory type=ROM content=Program
|
mcu
|
||||||
map address=00-3f,80-bf:8000-ffff
|
map address=00-3f,80-bf:8000-ffff
|
||||||
map address=c0-ff:0000-ffff
|
map address=c0-ff:0000-ffff
|
||||||
|
memory type=ROM content=Program
|
||||||
|
|
||||||
board: SDD1-RAM
|
board: SDD1-RAM
|
||||||
sdd1
|
processor identifier=SDD1
|
||||||
map address=00-3f,80-bf:4800-480f
|
map address=00-3f,80-bf:4800-480f
|
||||||
memory type=ROM content=Program
|
mcu
|
||||||
map address=00-3f,80-bf:8000-ffff
|
map address=00-3f,80-bf:8000-ffff
|
||||||
map address=c0-ff:0000-ffff
|
map address=c0-ff:0000-ffff
|
||||||
|
memory type=ROM content=Program
|
||||||
memory type=RAM content=Save
|
memory type=RAM content=Save
|
||||||
map address=00-3f,80-bf:6000-7fff mask=0xe000
|
map address=00-3f,80-bf:6000-7fff mask=0xe000
|
||||||
map address=70-73:0000-ffff mask=0x8000
|
map address=70-73:0000-ffff mask=0x8000
|
||||||
|
|
||||||
board: SGB-LOROM
|
|
||||||
memory type=ROM content=Program
|
|
||||||
map address=00-7d,80-ff:8000-ffff mask=0x8000
|
|
||||||
map address=40-7d,c0-ff:0000-7fff mask=0x8000
|
|
||||||
icd revision=2
|
|
||||||
map address=00-3f,80-bf:6000-67ff,7000-7fff
|
|
||||||
memory type=ROM content=Boot manufacturer=Nintendo
|
|
||||||
oscillator
|
|
||||||
gameboy
|
|
||||||
|
|
||||||
board: SPC7110-RAM
|
board: SPC7110-RAM
|
||||||
spc7110
|
processor identifier=SPC7110
|
||||||
map address=00-3f,80-bf:4800-483f
|
map address=00-3f,80-bf:4800-483f
|
||||||
map address=50,58:0000-ffff
|
map address=50,58:0000-ffff
|
||||||
map type=MCU address=00-3f,80-bf:8000-ffff mask=0x800000
|
mcu
|
||||||
map type=MCU address=c0-ff:0000-ffff mask=0xc00000
|
map address=00-3f,80-bf:8000-ffff mask=0x800000
|
||||||
|
map address=c0-ff:0000-ffff mask=0xc00000
|
||||||
memory type=ROM content=Program
|
memory type=ROM content=Program
|
||||||
memory type=ROM content=Data
|
memory type=ROM content=Data
|
||||||
memory type=RAM content=Save
|
memory type=RAM content=Save
|
||||||
map address=00-3f,80-bf:6000-7fff mask=0xe000
|
map address=00-3f,80-bf:6000-7fff mask=0xe000
|
||||||
|
|
||||||
board: SPC7110-RTC-RAM
|
board: SPC7110-RAM-EPSONRTC
|
||||||
spc7110
|
processor identifier=SPC7110
|
||||||
map address=00-3f,80-bf:4800-483f
|
map address=00-3f,80-bf:4800-483f
|
||||||
map address=50,58:0000-ffff
|
map address=50,58:0000-ffff
|
||||||
map type=MCU address=00-3f,80-bf:8000-ffff mask=0x800000
|
mcu
|
||||||
map type=MCU address=c0-ff:0000-ffff mask=0xc00000
|
map address=00-3f,80-bf:8000-ffff mask=0x800000
|
||||||
|
map address=c0-ff:0000-ffff mask=0xc00000
|
||||||
memory type=ROM content=Program
|
memory type=ROM content=Program
|
||||||
memory type=ROM content=Data
|
memory type=ROM content=Data
|
||||||
memory type=RAM content=Save
|
memory type=RAM content=Save
|
||||||
map address=00-3f,80-bf:6000-7fff mask=0xe000
|
map address=00-3f,80-bf:6000-7fff mask=0xe000
|
||||||
epsonrtc
|
rtc manufacturer=Epson
|
||||||
map address=00-3f,80-bf:4800-4842
|
map address=00-3f,80-bf:4800-4842
|
||||||
memory type=RTC manufacturer=Epson
|
memory type=RTC content=Time manufacturer=Epson
|
||||||
|
|
||||||
board: ST-LOROM
|
board: ST-LOROM
|
||||||
memory type=ROM content=Program
|
memory type=ROM content=Program
|
||||||
map address=00-1f,80-9f:8000-ffff mask=0x8000
|
map address=00-1f,80-9f:8000-ffff mask=0x8000
|
||||||
sufamiturbo
|
slot type=SufamiTurbo
|
||||||
rom
|
rom
|
||||||
map address=20-3f,a0-bf:8000-ffff mask=0x8000
|
map address=20-3f,a0-bf:8000-ffff mask=0x8000
|
||||||
ram
|
ram
|
||||||
map address=60-6f,e0-ef:0000-ffff
|
map address=60-6f,e0-ef:0000-ffff
|
||||||
sufamiturbo
|
slot type=SufamiTurbo
|
||||||
rom
|
rom
|
||||||
map address=40-5f,c0-df:0000-ffff mask=0x8000
|
map address=40-5f,c0-df:0000-ffff mask=0x8000
|
||||||
ram
|
ram
|
||||||
map address=70-7d,f0-ff:0000-ffff
|
map address=70-7d,f0-ff:0000-ffff
|
||||||
|
|
||||||
board: SUPERFX-RAM
|
|
||||||
superfx
|
|
||||||
map address=00-3f,80-bf:3000-34ff
|
|
||||||
memory type=ROM content=Program
|
|
||||||
map address=00-3f,80-bf:8000-ffff mask=0x8000
|
|
||||||
map address=40-5f,c0-df:0000-ffff
|
|
||||||
memory type=RAM content=Save
|
|
||||||
map address=00-3f,80-bf:6000-7fff size=0x2000
|
|
||||||
map address=70-71,f0-f1:0000-ffff
|
|
||||||
|
|
||||||
|
|
|
@ -91,8 +91,9 @@ else ifneq ($(filter $(platform),linux bsd),)
|
||||||
mkdir -p $(prefix)/share/applications/
|
mkdir -p $(prefix)/share/applications/
|
||||||
mkdir -p $(prefix)/share/icons/
|
mkdir -p $(prefix)/share/icons/
|
||||||
mkdir -p $(prefix)/share/$(name)/
|
mkdir -p $(prefix)/share/$(name)/
|
||||||
|
mkdir -p $(prefix)/share/$(name)/systems/
|
||||||
cp out/$(name) $(prefix)/bin/$(name)
|
cp out/$(name) $(prefix)/bin/$(name)
|
||||||
cp -R systems/* $(prefix)/share/$(name)/
|
cp -R systems/* $(prefix)/share/$(name)/systems/
|
||||||
cp data/$(name).desktop $(prefix)/share/applications/$(name).desktop
|
cp data/$(name).desktop $(prefix)/share/applications/$(name).desktop
|
||||||
cp data/$(name).png $(prefix)/share/icons/$(name).png
|
cp data/$(name).png $(prefix)/share/icons/$(name).png
|
||||||
endif
|
endif
|
||||||
|
|
|
@ -342,7 +342,7 @@ auto Presentation::loadSystems() -> void {
|
||||||
}
|
}
|
||||||
|
|
||||||
auto Presentation::loadShaders() -> void {
|
auto Presentation::loadShaders() -> void {
|
||||||
auto pathname = locate("Video Shaders/");
|
auto pathname = locate("shaders/");
|
||||||
|
|
||||||
if(settings["Video/Driver"].text() == "OpenGL") {
|
if(settings["Video/Driver"].text() == "OpenGL") {
|
||||||
for(auto shader : directory::folders(pathname, "*.shader")) {
|
for(auto shader : directory::folders(pathname, "*.shader")) {
|
||||||
|
|
|
@ -17,7 +17,7 @@ auto Program::loadMedium() -> void {
|
||||||
auto Program::loadMedium(Emulator::Interface& interface, const Emulator::Interface::Medium& medium) -> void {
|
auto Program::loadMedium(Emulator::Interface& interface, const Emulator::Interface::Medium& medium) -> void {
|
||||||
unloadMedium();
|
unloadMedium();
|
||||||
|
|
||||||
mediumPaths.append(locate({medium.name, ".sys/"}));
|
mediumPaths.append(locate({"systems/", medium.name, ".sys/"}));
|
||||||
|
|
||||||
Emulator::audio.reset(2, audio->frequency());
|
Emulator::audio.reset(2, audio->frequency());
|
||||||
inputManager->bind(emulator = &interface);
|
inputManager->bind(emulator = &interface);
|
||||||
|
|
|
@ -43,13 +43,14 @@ else ifneq ($(filter $(platform),linux bsd),)
|
||||||
mkdir -p $(prefix)/bin/
|
mkdir -p $(prefix)/bin/
|
||||||
mkdir -p $(prefix)/share/applications/
|
mkdir -p $(prefix)/share/applications/
|
||||||
mkdir -p $(prefix)/share/icons/
|
mkdir -p $(prefix)/share/icons/
|
||||||
mkdir -p $(prefix)/share/$(name)/Database/
|
mkdir -p $(prefix)/share/$(name)/
|
||||||
mkdir -p $(prefix)/share/$(name)/Firmware/
|
mkdir -p $(prefix)/share/$(name)/database/
|
||||||
|
mkdir -p $(prefix)/share/$(name)/firmware/
|
||||||
cp out/$(name) $(prefix)/bin/$(name)
|
cp out/$(name) $(prefix)/bin/$(name)
|
||||||
cp data/$(name).desktop $(prefix)/share/applications/$(name).desktop
|
cp data/$(name).desktop $(prefix)/share/applications/$(name).desktop
|
||||||
cp data/$(name).png $(prefix)/share/icons/$(name).png
|
cp data/$(name).png $(prefix)/share/icons/$(name).png
|
||||||
cp -R Database/* $(prefix)/share/$(name)/Database/
|
cp -R database/* $(prefix)/share/$(name)/database/
|
||||||
cp -R Firmware/* $(prefix)/share/$(name)/Firmware/
|
cp -R firmware/* $(prefix)/share/$(name)/firmware/
|
||||||
endif
|
endif
|
||||||
|
|
||||||
uninstall:
|
uninstall:
|
||||||
|
|
|
@ -1,19 +1,19 @@
|
||||||
Icarus::Icarus() {
|
Icarus::Icarus() {
|
||||||
Database::Famicom = BML::unserialize(string::read(locate("Database/Famicom.bml")));
|
Database::Famicom = BML::unserialize(string::read(locate("database/Famicom.bml")));
|
||||||
Database::SuperFamicom = BML::unserialize(string::read(locate("Database/Super Famicom.bml")));
|
Database::SuperFamicom = BML::unserialize(string::read(locate("database/Super Famicom.bml")));
|
||||||
Database::MasterSystem = BML::unserialize(string::read(locate("Database/Master System.bml")));
|
Database::MasterSystem = BML::unserialize(string::read(locate("database/Master System.bml")));
|
||||||
Database::MegaDrive = BML::unserialize(string::read(locate("Database/Mega Drive.bml")));
|
Database::MegaDrive = BML::unserialize(string::read(locate("database/Mega Drive.bml")));
|
||||||
Database::PCEngine = BML::unserialize(string::read(locate("Database/PC Engine.bml")));
|
Database::PCEngine = BML::unserialize(string::read(locate("database/PC Engine.bml")));
|
||||||
Database::SuperGrafx = BML::unserialize(string::read(locate("Database/SuperGrafx.bml")));
|
Database::SuperGrafx = BML::unserialize(string::read(locate("database/SuperGrafx.bml")));
|
||||||
Database::GameBoy = BML::unserialize(string::read(locate("Database/Game Boy.bml")));
|
Database::GameBoy = BML::unserialize(string::read(locate("database/Game Boy.bml")));
|
||||||
Database::GameBoyColor = BML::unserialize(string::read(locate("Database/Game Boy Color.bml")));
|
Database::GameBoyColor = BML::unserialize(string::read(locate("database/Game Boy Color.bml")));
|
||||||
Database::GameBoyAdvance = BML::unserialize(string::read(locate("Database/Game Boy Advance.bml")));
|
Database::GameBoyAdvance = BML::unserialize(string::read(locate("database/Game Boy Advance.bml")));
|
||||||
Database::GameGear = BML::unserialize(string::read(locate("Database/Game Gear.bml")));
|
Database::GameGear = BML::unserialize(string::read(locate("database/Game Gear.bml")));
|
||||||
Database::WonderSwan = BML::unserialize(string::read(locate("Database/WonderSwan.bml")));
|
Database::WonderSwan = BML::unserialize(string::read(locate("database/WonderSwan.bml")));
|
||||||
Database::WonderSwanColor = BML::unserialize(string::read(locate("Database/WonderSwan Color.bml")));
|
Database::WonderSwanColor = BML::unserialize(string::read(locate("database/WonderSwan Color.bml")));
|
||||||
Database::PocketChallengeV2 = BML::unserialize(string::read(locate("Database/Pocket Challenge V2.bml")));
|
Database::PocketChallengeV2 = BML::unserialize(string::read(locate("database/Pocket Challenge V2.bml")));
|
||||||
Database::BSMemory = BML::unserialize(string::read(locate("Database/BS Memory.bml")));
|
Database::BSMemory = BML::unserialize(string::read(locate("database/BS Memory.bml")));
|
||||||
Database::SufamiTurbo = BML::unserialize(string::read(locate("Database/Sufami Turbo.bml")));
|
Database::SufamiTurbo = BML::unserialize(string::read(locate("database/Sufami Turbo.bml")));
|
||||||
}
|
}
|
||||||
|
|
||||||
auto Icarus::error() const -> string {
|
auto Icarus::error() const -> string {
|
||||||
|
|
|
@ -47,7 +47,7 @@ auto Icarus::superFamicomImport(vector<uint8_t>& buffer, string location) -> str
|
||||||
auto size = rom["size"].natural();
|
auto size = rom["size"].natural();
|
||||||
if(size > buffer.size() - offset) {
|
if(size > buffer.size() - offset) {
|
||||||
auto name = string{rom["note"].text(), ".", rom["category"].text(), ".rom"}.trimLeft(".", 1L).downcase();
|
auto name = string{rom["note"].text(), ".", rom["category"].text(), ".rom"}.trimLeft(".", 1L).downcase();
|
||||||
auto location = locate({"Firmware/", name});
|
auto location = locate({"firmware/", name});
|
||||||
if(location && file::size(location) == size) {
|
if(location && file::size(location) == size) {
|
||||||
write({target, name}, file::read(location));
|
write({target, name}, file::read(location));
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
database
|
database
|
||||||
revision: 2018-04-15
|
revision: 2018-05-06
|
||||||
|
|
||||||
//BS Memory (JPN)
|
//BS Memory (JPN)
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
database
|
database
|
||||||
revision: 2018-04-15
|
revision: 2018-05-06
|
||||||
|
|
||||||
//Sufami Turbo (JPN)
|
//Sufami Turbo (JPN)
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
database
|
database
|
||||||
revision: 2018-04-15
|
revision: 2018-05-06
|
||||||
|
|
||||||
//Prototypes (JPN)
|
//Prototypes (JPN)
|
||||||
|
|
||||||
|
@ -1818,7 +1818,7 @@ game
|
||||||
//Super Nintendo (EUR)
|
//Super Nintendo (EUR)
|
||||||
|
|
||||||
database
|
database
|
||||||
revision: 2018-04-14
|
revision: 2018-05-06
|
||||||
|
|
||||||
game
|
game
|
||||||
sha256: ec3e81d628a293514e303b44e3b1ac03461ddd1da32764b10b7fab1e507602df
|
sha256: ec3e81d628a293514e303b44e3b1ac03461ddd1da32764b10b7fab1e507602df
|
||||||
|
@ -2513,7 +2513,7 @@ game
|
||||||
size: 0xc00
|
size: 0xc00
|
||||||
content: Data
|
content: Data
|
||||||
manufacturer: Hitachi
|
manufacturer: Hitachi
|
||||||
architecture: HS51BS169
|
architecture: HG51BS169
|
||||||
identifier: Cx4
|
identifier: Cx4
|
||||||
volatile
|
volatile
|
||||||
oscillator
|
oscillator
|
||||||
|
@ -2542,7 +2542,7 @@ game
|
||||||
size: 0xc00
|
size: 0xc00
|
||||||
content: Data
|
content: Data
|
||||||
manufacturer: Hitachi
|
manufacturer: Hitachi
|
||||||
architecture: HS51BS169
|
architecture: HG51BS169
|
||||||
identifier: Cx4
|
identifier: Cx4
|
||||||
volatile
|
volatile
|
||||||
oscillator
|
oscillator
|
||||||
|
@ -5733,7 +5733,7 @@ game
|
||||||
//Super Nintendo (USA)
|
//Super Nintendo (USA)
|
||||||
|
|
||||||
database
|
database
|
||||||
revision: 2018-04-14
|
revision: 2018-05-06
|
||||||
|
|
||||||
game
|
game
|
||||||
sha256: 2ffe8828480f943056fb1ab5c3c84d48a0bf8cbe3ed7c9960b349b59adb07f3b
|
sha256: 2ffe8828480f943056fb1ab5c3c84d48a0bf8cbe3ed7c9960b349b59adb07f3b
|
||||||
|
@ -10293,7 +10293,7 @@ game
|
||||||
size: 0xc00
|
size: 0xc00
|
||||||
content: Data
|
content: Data
|
||||||
manufacturer: Hitachi
|
manufacturer: Hitachi
|
||||||
architecture: HS51BS169
|
architecture: HG51BS169
|
||||||
identifier: Cx4
|
identifier: Cx4
|
||||||
volatile
|
volatile
|
||||||
oscillator
|
oscillator
|
||||||
|
@ -10322,7 +10322,7 @@ game
|
||||||
size: 0xc00
|
size: 0xc00
|
||||||
content: Data
|
content: Data
|
||||||
manufacturer: Hitachi
|
manufacturer: Hitachi
|
||||||
architecture: HS51BS169
|
architecture: HG51BS169
|
||||||
identifier: Cx4
|
identifier: Cx4
|
||||||
volatile
|
volatile
|
||||||
oscillator
|
oscillator
|
|
@ -19,10 +19,10 @@ private:
|
||||||
auto size() const -> uint { return data.size(); }
|
auto size() const -> uint { return data.size(); }
|
||||||
auto scoreHeader(uint address) -> uint;
|
auto scoreHeader(uint address) -> uint;
|
||||||
auto firmwareARM() const -> string;
|
auto firmwareARM() const -> string;
|
||||||
|
auto firmwareEXNEC() const -> string;
|
||||||
|
auto firmwareGB() const -> string;
|
||||||
auto firmwareHITACHI() const -> string;
|
auto firmwareHITACHI() const -> string;
|
||||||
auto firmwareNEC() const -> string;
|
auto firmwareNEC() const -> string;
|
||||||
auto firmwareNECEX() const -> string;
|
|
||||||
auto firmwareSGB() const -> string;
|
|
||||||
|
|
||||||
vector<uint8_t>& data;
|
vector<uint8_t>& data;
|
||||||
string location;
|
string location;
|
||||||
|
@ -38,13 +38,16 @@ SuperFamicom::SuperFamicom(vector<uint8_t>& data, string location) : data(data),
|
||||||
|
|
||||||
if(size() < 0x8000) return; //ignore images too small to be valid
|
if(size() < 0x8000) return; //ignore images too small to be valid
|
||||||
|
|
||||||
uint scoreLo = scoreHeader( 0x7fb0);
|
uint LoROM = scoreHeader( 0x7fb0);
|
||||||
uint scoreHi = scoreHeader( 0xffb0);
|
uint HiROM = scoreHeader( 0xffb0);
|
||||||
uint scoreEx = scoreHeader(0x40ffb0);
|
uint ExLoROM = scoreHeader(0x407fb0);
|
||||||
if(scoreEx) scoreEx += 4;
|
uint ExHiROM = scoreHeader(0x40ffb0);
|
||||||
|
if(ExLoROM) ExLoROM += 4;
|
||||||
|
if(ExHiROM) ExHiROM += 4;
|
||||||
|
|
||||||
if(scoreLo >= scoreHi && scoreLo >= scoreEx) headerAddress = 0x7fb0;
|
if(LoROM >= HiROM && LoROM >= ExLoROM && LoROM >= ExHiROM) headerAddress = 0x7fb0;
|
||||||
else if(scoreHi >= scoreEx) headerAddress = 0xffb0;
|
else if(HiROM >= ExLoROM && HiROM >= ExHiROM) headerAddress = 0xffb0;
|
||||||
|
else if(ExLoROM >= ExHiROM) headerAddress = 0x407fb0;
|
||||||
else headerAddress = 0x40ffb0;
|
else headerAddress = 0x40ffb0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -64,7 +67,7 @@ auto SuperFamicom::manifest() const -> string {
|
||||||
output.append(" revision: ", revision(), "\n");
|
output.append(" revision: ", revision(), "\n");
|
||||||
output.append(" board: ", board(), "\n");
|
output.append(" board: ", board(), "\n");
|
||||||
|
|
||||||
auto board = this->board().split("-");
|
auto board = this->board().trimRight("#A", 1L).trimRight("#B", 1L).split("-");
|
||||||
|
|
||||||
if(auto size = romSize()) {
|
if(auto size = romSize()) {
|
||||||
if(board(0) == "SPC7110") size = 0x100000;
|
if(board(0) == "SPC7110") size = 0x100000;
|
||||||
|
@ -87,6 +90,18 @@ auto SuperFamicom::manifest() const -> string {
|
||||||
output.append(Oscillator{}.frequency(21'440'000).text());
|
output.append(Oscillator{}.frequency(21'440'000).text());
|
||||||
} else if(board(0) == "BS" && board(1) == "MCC") {
|
} else if(board(0) == "BS" && board(1) == "MCC") {
|
||||||
output.append(Memory{}.type("RAM").size(0x80000).content("Download").text());
|
output.append(Memory{}.type("RAM").size(0x80000).content("Download").text());
|
||||||
|
} else if(board(0) == "EXNEC") {
|
||||||
|
output.append(Memory{}.type("ROM").size(0xc000).content("Program").manufacturer("NEC").architecture("uPD96050").identifier(firmwareEXNEC()).text());
|
||||||
|
output.append(Memory{}.type("ROM").size(0x1000).content("Data" ).manufacturer("NEC").architecture("uPD96050").identifier(firmwareEXNEC()).text());
|
||||||
|
output.append(Memory{}.type("RAM").size(0x1000).content("Data" ).manufacturer("NEC").architecture("uPD96050").identifier(firmwareEXNEC()).text());
|
||||||
|
output.append(Oscillator{}.frequency(firmwareEXNEC() == "ST010" ? 11'000'000 : 15'000'000).text());
|
||||||
|
} else if(board(0) == "GB") {
|
||||||
|
output.append(Memory{}.type("ROM").size(0x100).content("Boot").manufacturer("Nintendo").architecture("LR35902").identifier(firmwareGB()).text());
|
||||||
|
if(firmwareGB() == "SGB2")
|
||||||
|
output.append(Oscillator{}.frequency(20'971'520).text());
|
||||||
|
} else if(board(0) == "GSU") {
|
||||||
|
//todo: MARIO CHIP 1 uses CPU oscillator
|
||||||
|
output.append(Oscillator{}.frequency(21'440'000).text());
|
||||||
} else if(board(0) == "HITACHI") {
|
} else if(board(0) == "HITACHI") {
|
||||||
output.append(Memory{}.type("ROM").size(0xc00).content("Data").manufacturer("Hitachi").architecture("HG51BS169").identifier(firmwareHITACHI()).text());
|
output.append(Memory{}.type("ROM").size(0xc00).content("Data").manufacturer("Hitachi").architecture("HG51BS169").identifier(firmwareHITACHI()).text());
|
||||||
output.append(Memory{}.type("RAM").size(0xc00).content("Data").manufacturer("Hitachi").architecture("HG51BS169").identifier(firmwareHITACHI()).isVolatile().text());
|
output.append(Memory{}.type("RAM").size(0xc00).content("Data").manufacturer("Hitachi").architecture("HG51BS169").identifier(firmwareHITACHI()).isVolatile().text());
|
||||||
|
@ -96,26 +111,14 @@ auto SuperFamicom::manifest() const -> string {
|
||||||
output.append(Memory{}.type("ROM").size( 0x800).content("Data" ).manufacturer("NEC").architecture("uPD7725").identifier(firmwareNEC()).text());
|
output.append(Memory{}.type("ROM").size( 0x800).content("Data" ).manufacturer("NEC").architecture("uPD7725").identifier(firmwareNEC()).text());
|
||||||
output.append(Memory{}.type("RAM").size( 0x200).content("Data" ).manufacturer("NEC").architecture("uPD7725").identifier(firmwareNEC()).isVolatile().text());
|
output.append(Memory{}.type("RAM").size( 0x200).content("Data" ).manufacturer("NEC").architecture("uPD7725").identifier(firmwareNEC()).isVolatile().text());
|
||||||
output.append(Oscillator{}.frequency(7'600'000).text());
|
output.append(Oscillator{}.frequency(7'600'000).text());
|
||||||
} else if(board(0) == "NECEX") {
|
|
||||||
output.append(Memory{}.type("ROM").size(0xc000).content("Program").manufacturer("NEC").architecture("uPD96050").identifier(firmwareNECEX()).text());
|
|
||||||
output.append(Memory{}.type("ROM").size(0x1000).content("Data" ).manufacturer("NEC").architecture("uPD96050").identifier(firmwareNECEX()).text());
|
|
||||||
output.append(Memory{}.type("RAM").size(0x1000).content("Data" ).manufacturer("NEC").architecture("uPD96050").identifier(firmwareNECEX()).text());
|
|
||||||
output.append(Oscillator{}.frequency(firmwareNECEX() == "ST010" ? 11'000'000 : 15'000'000).text());
|
|
||||||
} else if(board(0) == "RTC") {
|
|
||||||
output.append(Memory{}.type("RTC").size(0x10).content("Time").text());
|
|
||||||
} else if(board(0) == "SA1") {
|
} else if(board(0) == "SA1") {
|
||||||
output.append(Memory{}.type("RAM").size(0x800).content("Internal").isVolatile().text());
|
output.append(Memory{}.type("RAM").size(0x800).content("Internal").isVolatile().text());
|
||||||
} else if(board(0) == "SGB") {
|
|
||||||
output.append(Memory{}.type("ROM").size(0x100).content("Boot").manufacturer("Nintendo").architecture("LR35902").identifier(firmwareSGB()).text());
|
|
||||||
if(firmwareSGB() == "SGB2")
|
|
||||||
output.append(Oscillator{}.frequency(20'971'520).text());
|
|
||||||
} else if(board(0) == "SPC7110") {
|
} else if(board(0) == "SPC7110") {
|
||||||
output.append(Memory{}.type("ROM").size(romSize() - 0x100000).content("Data").text());
|
output.append(Memory{}.type("ROM").size(romSize() - 0x100000).content("Data").text());
|
||||||
if(board(1) == "RTC")
|
}
|
||||||
|
|
||||||
|
if(board.right() == "EPSONRTC" || board.right() == "SHARPRTC") {
|
||||||
output.append(Memory{}.type("RTC").size(0x10).content("Time").text());
|
output.append(Memory{}.type("RTC").size(0x10).content("Time").text());
|
||||||
} else if(board(0) == "SUPERFX") {
|
|
||||||
//todo: MARIO CHIP 1 uses CPU oscillator
|
|
||||||
output.append(Oscillator{}.frequency(21'440'000).text());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return output;
|
return output;
|
||||||
|
@ -205,30 +208,35 @@ auto SuperFamicom::revision() const -> string {
|
||||||
return revision ? revision : string{"1.", F};
|
return revision ? revision : string{"1.", F};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//format: [slot]-[coprocessor]-[mapper]-[ram]-[rtc]
|
||||||
auto SuperFamicom::board() const -> string {
|
auto SuperFamicom::board() const -> string {
|
||||||
auto mapMode = data[headerAddress + 0x25];
|
|
||||||
auto cartridgeType = data[headerAddress + 0x26];
|
|
||||||
auto cartridgeTypeLo = cartridgeType & 15;
|
|
||||||
auto cartridgeTypeHi = cartridgeType >> 4;
|
|
||||||
auto cartridgeSubType = data[headerAddress + 0x0f];
|
|
||||||
|
|
||||||
string board;
|
string board;
|
||||||
|
|
||||||
|
auto mapMode = data[headerAddress + 0x25];
|
||||||
|
auto cartridgeTypeLo = data[headerAddress + 0x26] & 15;
|
||||||
|
auto cartridgeTypeHi = data[headerAddress + 0x26] >> 4;
|
||||||
|
auto cartridgeSubType = data[headerAddress + 0x0f];
|
||||||
|
|
||||||
string mode;
|
string mode;
|
||||||
if(mapMode == 0x20 || mapMode == 0x30) mode = "LOROM-";
|
if(mapMode == 0x20 || mapMode == 0x30) mode = "LOROM-";
|
||||||
if(mapMode == 0x21 || mapMode == 0x31) mode = "HIROM-";
|
if(mapMode == 0x21 || mapMode == 0x31) mode = "HIROM-";
|
||||||
if(mapMode == 0x22 || mapMode == 0x32) mode = "SDD1-";
|
if(mapMode == 0x22 || mapMode == 0x32) mode = "SDD1-";
|
||||||
if(mapMode == 0x23 || mapMode == 0x33) mode = "SA1-";
|
if(mapMode == 0x23 || mapMode == 0x33) mode = "SA1-";
|
||||||
if(mapMode == 0x25 || mapMode == 0x35) mode = "HIROMEX-";
|
if(mapMode == 0x25 || mapMode == 0x35) mode = "EXHIROM-";
|
||||||
if(mapMode == 0x2a || mapMode == 0x3a) mode = "SPC7110-";
|
if(mapMode == 0x2a || mapMode == 0x3a) mode = "SPC7110-";
|
||||||
|
|
||||||
//many games will store an extra title character, overwriting the map mode
|
//many games will store an extra title character, overwriting the map mode
|
||||||
|
//further, ExLoROM mode is unofficial, and lacks a mapping mode value
|
||||||
if(!mode) {
|
if(!mode) {
|
||||||
if(headerAddress == 0x7fb0) mode = "LOROM-";
|
if(headerAddress == 0x7fb0) mode = "LOROM-";
|
||||||
if(headerAddress == 0xffb0) mode = "HIROM-";
|
if(headerAddress == 0xffb0) mode = "HIROM-";
|
||||||
if(headerAddress == 0x40ffb0) mode = "HIROMEX-";
|
if(headerAddress == 0x407fb0) mode = "EXLOROM-";
|
||||||
|
if(headerAddress == 0x40ffb0) mode = "EXHIROM-";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool epsonRTC = false;
|
||||||
|
bool sharpRTC = false;
|
||||||
|
|
||||||
if(serial() == "A9PJ") {
|
if(serial() == "A9PJ") {
|
||||||
//Sufami Turbo (JPN)
|
//Sufami Turbo (JPN)
|
||||||
board.append("ST-", mode);
|
board.append("ST-", mode);
|
||||||
|
@ -237,37 +245,36 @@ auto SuperFamicom::board() const -> string {
|
||||||
board.append("BS-MCC-");
|
board.append("BS-MCC-");
|
||||||
} else if(serial() == "042J") {
|
} else if(serial() == "042J") {
|
||||||
//Super Game Boy 2
|
//Super Game Boy 2
|
||||||
board.append("SGB-", mode);
|
board.append("GB-", mode);
|
||||||
} else if(serial().match("Z\?\?J")) {
|
} else if(serial().match("Z??J")) {
|
||||||
board.append("BS-", mode);
|
board.append("BS-", mode);
|
||||||
} else if(cartridgeTypeLo >= 0x3) {
|
} else if(cartridgeTypeLo >= 0x3) {
|
||||||
if(cartridgeTypeHi == 0x0) board.append("NEC-", mode);
|
if(cartridgeTypeHi == 0x0) board.append("NEC-", mode);
|
||||||
if(cartridgeTypeHi == 0x1) board.append("SUPERFX-");
|
if(cartridgeTypeHi == 0x1) board.append("GSU-");
|
||||||
if(cartridgeTypeHi == 0x2) board.append("OBC1-", mode);
|
if(cartridgeTypeHi == 0x2) board.append("OBC1-", mode);
|
||||||
if(cartridgeTypeHi == 0x3) board.append("SA1-");
|
if(cartridgeTypeHi == 0x3) board.append("SA1-");
|
||||||
if(cartridgeTypeHi == 0x4) board.append("SDD1-");
|
if(cartridgeTypeHi == 0x4) board.append("SDD1-");
|
||||||
if(cartridgeTypeHi == 0x5) board.append("RTC-", mode);
|
if(cartridgeTypeHi == 0x5) board.append(mode), sharpRTC = true;
|
||||||
if(cartridgeTypeHi == 0xe && cartridgeTypeLo == 0x3) board.append("SGB-", mode);
|
if(cartridgeTypeHi == 0xe && cartridgeTypeLo == 0x3) board.append("GB-", mode);
|
||||||
if(cartridgeTypeHi == 0xf && cartridgeSubType == 0x00 && cartridgeTypeLo == 0x5) board.append("SPC7110-");
|
if(cartridgeTypeHi == 0xf && cartridgeTypeLo == 0x5 && cartridgeSubType == 0x00) board.append("SPC7110-");
|
||||||
if(cartridgeTypeHi == 0xf && cartridgeSubType == 0x00 && cartridgeTypeLo == 0x9) board.append("SPC7110-RTC-");
|
if(cartridgeTypeHi == 0xf && cartridgeTypeLo == 0x9 && cartridgeSubType == 0x00) board.append("SPC7110-"), epsonRTC = true;
|
||||||
if(cartridgeTypeHi == 0xf && cartridgeSubType == 0x01) board.append("NECEX-", mode);
|
if(cartridgeTypeHi == 0xf && cartridgeSubType == 0x01) board.append("EXNEC-", mode);
|
||||||
if(cartridgeTypeHi == 0xf && cartridgeSubType == 0x02) board.append("ARM-", mode);
|
if(cartridgeTypeHi == 0xf && cartridgeSubType == 0x02) board.append("ARM-", mode);
|
||||||
if(cartridgeTypeHi == 0xf && cartridgeSubType == 0x10) board.append("HITACHI-", mode);
|
if(cartridgeTypeHi == 0xf && cartridgeSubType == 0x10) board.append("HITACHI-", mode);
|
||||||
}
|
}
|
||||||
if(!board) board.append(mode);
|
if(!board) board.append(mode);
|
||||||
|
|
||||||
if(board.beginsWith("LOROM-") && romSize() > 0x200000 && ramSize()) board.replace("LOROM-", "LOROMEX-");
|
if(cartridgeTypeLo == 0x1 || cartridgeTypeLo == 0x4) board.append("RAM-"); //RAM without battery
|
||||||
if(board.beginsWith("NEC-LOROM-") && romSize() > 0x100000) board.replace("NEC-LOROM-", "NEC-LOROMEX-");
|
if(cartridgeTypeLo == 0x2 || cartridgeTypeLo == 0x5) board.append("RAM-"); //RAM with battery
|
||||||
|
if(cartridgeTypeLo == 0x6); //battery without RAM
|
||||||
|
|
||||||
if(cartridgeTypeLo == 0x1 || cartridgeTypeLo == 0x4) board.append("RAM-"); //without battery
|
if(epsonRTC) board.append("EPSONRTC-");
|
||||||
if(cartridgeTypeLo == 0x2 || cartridgeTypeLo == 0x5) board.append("RAM-"); //with battery
|
if(sharpRTC) board.append("SHARPRTC-");
|
||||||
if(cartridgeTypeLo == 0x6) board.append("BATTERY-"); //without RAM
|
|
||||||
|
|
||||||
board.trimRight("-", 1L);
|
board.trimRight("-", 1L);
|
||||||
|
|
||||||
//NEC uPD96050 frequency
|
if(board.beginsWith( "LOROM-RAM")) board.append(romSize() <= 0x200000 ? "#A" : "#B");
|
||||||
if(board.beginsWith("NECEX-") && firmwareNECEX() == "st010") board.append("#11"); //11MHz (22MHz / 2)
|
if(board.beginsWith("NEC-LOROM-RAM")) board.append(romSize() <= 0x100000 ? "#A" : "#B");
|
||||||
if(board.beginsWith("NECEX-") && firmwareNECEX() == "st011") board.append("#15"); //15MHz
|
|
||||||
|
|
||||||
return board;
|
return board;
|
||||||
}
|
}
|
||||||
|
@ -480,6 +487,19 @@ auto SuperFamicom::firmwareARM() const -> string {
|
||||||
return "ST018";
|
return "ST018";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
auto SuperFamicom::firmwareEXNEC() const -> string {
|
||||||
|
if(label() == "EXHAUST HEAT2") return "ST010";
|
||||||
|
if(label() == "F1 ROC II") return "ST010";
|
||||||
|
if(label() == "2DAN MORITA SHOUGI") return "ST011";
|
||||||
|
return "ST010";
|
||||||
|
}
|
||||||
|
|
||||||
|
auto SuperFamicom::firmwareGB() const -> string {
|
||||||
|
if(label() == "Super GAMEBOY") return "SGB1";
|
||||||
|
if(label() == "Super GAMEBOY2") return "SGB2";
|
||||||
|
return "SGB1";
|
||||||
|
}
|
||||||
|
|
||||||
auto SuperFamicom::firmwareHITACHI() const -> string {
|
auto SuperFamicom::firmwareHITACHI() const -> string {
|
||||||
return "Cx4";
|
return "Cx4";
|
||||||
}
|
}
|
||||||
|
@ -493,17 +513,4 @@ auto SuperFamicom::firmwareNEC() const -> string {
|
||||||
return "DSP1B";
|
return "DSP1B";
|
||||||
}
|
}
|
||||||
|
|
||||||
auto SuperFamicom::firmwareNECEX() const -> string {
|
|
||||||
if(label() == "EXHAUST HEAT2") return "ST010";
|
|
||||||
if(label() == "F1 ROC II") return "ST010";
|
|
||||||
if(label() == "2DAN MORITA SHOUGI") return "ST011";
|
|
||||||
return "ST010";
|
|
||||||
}
|
|
||||||
|
|
||||||
auto SuperFamicom::firmwareSGB() const -> string {
|
|
||||||
if(label() == "Super GAMEBOY") return "SGB1";
|
|
||||||
if(label() == "Super GAMEBOY2") return "SGB2";
|
|
||||||
return "SGB1";
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue