Update to v106r12 release.

byuu says:

Changelog:

  - Emulator: update to final manifest syntax
  - Super Famicom: new board syntax (still experimental)
  - Super Famicom: match (manufacturer.)category.type instead of
    (model.)category.type

Errata:

  - Markup::Node::find() needs to be extended to support multiple
    subtype matches
  - Sufami Turbo ROM/RAM nodes are part of separate gamepaks; need to
    refactor this
This commit is contained in:
Tim Allen 2018-04-03 17:40:03 +10:00
parent 72b824cf1a
commit 985610c167
5 changed files with 148 additions and 134 deletions

View File

@ -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.11"; static const string Version = "106.12";
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/";

View File

@ -7,7 +7,7 @@ struct Game {
struct Oscillator; struct Oscillator;
inline auto load(string_view) -> void; inline auto load(string_view) -> void;
inline auto memory(string_view) -> maybe<Memory>; inline auto memory(Markup::Node) -> maybe<Memory>;
inline auto oscillator(natural = 0) -> maybe<Oscillator>; inline auto oscillator(natural = 0) -> maybe<Oscillator>;
struct Memory { struct Memory {
@ -19,7 +19,8 @@ struct Game {
natural size; natural size;
string category; string category;
string manufacturer; string manufacturer;
string part; string model;
string identity;
}; };
struct Oscillator { struct Oscillator {
@ -56,7 +57,8 @@ auto Game::load(string_view text) -> void {
memory.size = node["size"].natural(); memory.size = node["size"].natural();
memory.category = node["category"].text(); memory.category = node["category"].text();
memory.manufacturer = node["manufacturer"].text(); memory.manufacturer = node["manufacturer"].text();
memory.part = node["part"].text(); memory.model = node["model"].text();
memory.identity = node["identity"].text();
memoryList.append(memory); memoryList.append(memory);
} }
@ -67,9 +69,22 @@ auto Game::load(string_view text) -> void {
} }
} }
auto Game::memory(string_view name) -> maybe<Memory> { auto Game::memory(Markup::Node node) -> maybe<Memory> {
if(!node) return nothing;
for(auto& memory : memoryList) { for(auto& memory : memoryList) {
if(memory.name() == name) return memory; auto type = node["type"].text();
auto size = node["size"].natural();
auto category = node["category"].text();
auto manufacturer = node["manufacturer"].text();
auto model = node["model"].text();
auto identity = node["identity"].text();
if(type && type != memory.type) continue;
if(size && size != memory.size) continue;
if(category && category != memory.category) continue;
if(manufacturer && manufacturer != memory.manufacturer) continue;
if(model && model != memory.model) continue;
if(identity && identity != memory.identity) continue;
return memory;
} }
return nothing; return nothing;
} }
@ -80,7 +95,7 @@ auto Game::oscillator(natural index) -> maybe<Oscillator> {
} }
auto Game::Memory::name() const -> string { auto Game::Memory::name() const -> string {
if(part) return string{part, ".", category, ".", type}.downcase(); if(manufacturer) return string{manufacturer, ".", category, ".", type}.downcase();
return string{category, ".", type}.downcase(); return string{category, ".", type}.downcase();
} }

View File

@ -59,8 +59,8 @@ auto Cartridge::loadCartridge(Markup::Node node) -> void {
} }
} }
if(auto node = board["rom"]) loadROM(node); if(auto node = board["memory(type=ROM)"]) loadROM(node);
if(auto node = board["ram"]) loadRAM(node); if(auto node = board["memory(type=RAM)"]) 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);
@ -223,17 +223,17 @@ auto Cartridge::loadSuperFX(Markup::Node node) -> void {
auto Cartridge::loadARMDSP(Markup::Node node) -> void { auto Cartridge::loadARMDSP(Markup::Node node) -> void {
has.ARMDSP = true; has.ARMDSP = true;
if(auto memory = game.memory(node["prom/name"].text())) { if(auto memory = game.memory(node["memory(type=ROM,category=Program)"])) {
if(auto fp = platform->open(ID::SuperFamicom, memory->name(), File::Read, File::Required)) { if(auto fp = platform->open(ID::SuperFamicom, memory->name(), File::Read, File::Required)) {
for(auto n : range(128 * 1024)) armdsp.programROM[n] = fp->read(); for(auto n : range(128 * 1024)) armdsp.programROM[n] = fp->read();
} }
} }
if(auto memory = game.memory(node["drom/name"].text())) { if(auto memory = game.memory(node["memory(type=ROM,category=Data)"])) {
if(auto fp = platform->open(ID::SuperFamicom, memory->name(), File::Read, File::Required)) { if(auto fp = platform->open(ID::SuperFamicom, memory->name(), File::Read, File::Required)) {
for(auto n : range( 32 * 1024)) armdsp.dataROM[n] = fp->read(); for(auto n : range( 32 * 1024)) armdsp.dataROM[n] = fp->read();
} }
} }
if(auto memory = game.memory(node["ram/name"].text())) { if(auto memory = game.memory(node["memory(type=RAM,category=Data)"])) {
if(auto fp = platform->open(ID::SuperFamicom, memory->name(), File::Read)) { if(auto fp = platform->open(ID::SuperFamicom, memory->name(), File::Read)) {
for(auto n : range( 16 * 1024)) armdsp.programRAM[n] = fp->read(); for(auto n : range( 16 * 1024)) armdsp.programRAM[n] = fp->read();
} }
@ -255,12 +255,12 @@ auto Cartridge::loadHitachiDSP(Markup::Node node, uint roms) -> void {
for(auto& word : hitachidsp.dataROM) word = 0x000000; for(auto& word : hitachidsp.dataROM) word = 0x000000;
for(auto& word : hitachidsp.dataRAM) word = 0x00; for(auto& word : hitachidsp.dataRAM) word = 0x00;
if(auto memory = game.memory(node["drom/name"].text())) { if(auto memory = game.memory(node["memory(type=ROM,category=Data)"])) {
if(auto fp = platform->open(ID::SuperFamicom, memory->name(), File::Read, File::Required)) { if(auto fp = platform->open(ID::SuperFamicom, memory->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["dram/name"].text())) { if(auto memory = game.memory(node["memory(type=RAM,category=Data)"])) {
if(auto fp = platform->open(ID::SuperFamicom, memory->name(), File::Read)) { if(auto fp = platform->open(ID::SuperFamicom, memory->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);
} }
@ -290,17 +290,17 @@ auto Cartridge::loadNECDSP(Markup::Node node) -> void {
if(necdsp.revision == NECDSP::Revision::uPD7725 ) memory::assign(size, 2048, 1024, 256); if(necdsp.revision == NECDSP::Revision::uPD7725 ) memory::assign(size, 2048, 1024, 256);
if(necdsp.revision == NECDSP::Revision::uPD96050) memory::assign(size, 16384, 2048, 2048); if(necdsp.revision == NECDSP::Revision::uPD96050) memory::assign(size, 16384, 2048, 2048);
if(auto memory = game.memory(node["prom/name"].text())) { if(auto memory = game.memory(node["memory(type=ROM,category=Program)"])) {
if(auto fp = platform->open(ID::SuperFamicom, memory->name(), File::Read, File::Required)) { if(auto fp = platform->open(ID::SuperFamicom, memory->name(), File::Read, File::Required)) {
for(auto n : range(size[0])) necdsp.programROM[n] = fp->readl(3); for(auto n : range(size[0])) necdsp.programROM[n] = fp->readl(3);
} }
} }
if(auto memory = game.memory(node["drom/name"].text())) { if(auto memory = game.memory(node["memory(type=ROM,category=Data)"])) {
if(auto fp = platform->open(ID::SuperFamicom, memory->name(), File::Read, File::Required)) { if(auto fp = platform->open(ID::SuperFamicom, memory->name(), File::Read, File::Required)) {
for(auto n : range(size[1])) necdsp.dataROM[n] = fp->readl(2); for(auto n : range(size[1])) necdsp.dataROM[n] = fp->readl(2);
} }
} }
if(auto memory = game.memory(node["dram/name"].text())) { if(auto memory = game.memory(node["memory(type=RAM,category=Data"])) {
if(auto fp = platform->open(ID::SuperFamicom, memory->name(), File::Read)) { if(auto fp = platform->open(ID::SuperFamicom, memory->name(), File::Read)) {
for(auto n : range(size[2])) necdsp.dataRAM[n] = fp->readl(2); for(auto n : range(size[2])) necdsp.dataRAM[n] = fp->readl(2);
} }
@ -314,7 +314,7 @@ auto Cartridge::loadEpsonRTC(Markup::Node node) -> void {
has.EpsonRTC = true; has.EpsonRTC = true;
epsonrtc.initialize(); epsonrtc.initialize();
if(auto memory = game.memory(node["ram/name"].text())) { if(auto memory = game.memory(node["memory(type=RTC)"])) {
if(auto fp = platform->open(ID::SuperFamicom, memory->name(), File::Read)) { if(auto fp = platform->open(ID::SuperFamicom, memory->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();
@ -329,7 +329,7 @@ auto Cartridge::loadSharpRTC(Markup::Node node) -> void {
has.SharpRTC = true; has.SharpRTC = true;
sharprtc.initialize(); sharprtc.initialize();
if(auto memory = game.memory(node["ram/name"].text())) { if(auto memory = game.memory(node["memory(type=RTC)"])) {
if(auto fp = platform->open(ID::SuperFamicom, memory->name(), File::Read)) { if(auto fp = platform->open(ID::SuperFamicom, memory->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();
@ -382,7 +382,7 @@ auto Cartridge::loadMSU1(Markup::Node node) -> void {
auto Cartridge::loadMemory(MappedRAM& ram, Markup::Node node, bool required, maybe<uint> id) -> void { auto Cartridge::loadMemory(MappedRAM& ram, Markup::Node node, bool required, maybe<uint> id) -> void {
if(!id) id = pathID(); if(!id) id = pathID();
if(auto memory = game.memory(node["name"].text())) { if(auto memory = game.memory(node)) {
ram.allocate(memory->size); ram.allocate(memory->size);
if(memory->type == "RAM" && !memory->battery) return; if(memory->type == "RAM" && !memory->battery) return;
if(memory->type == "RTC" && !memory->battery) return; if(memory->type == "RTC" && !memory->battery) return;

View File

@ -1,5 +1,5 @@
auto Cartridge::saveCartridge(Markup::Node node) -> void { auto Cartridge::saveCartridge(Markup::Node node) -> void {
if(auto node = board["ram"]) saveRAM(node); if(auto node = board["memory(type=RAM)"]) 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["sa1"]) saveSA1(node);
@ -52,7 +52,7 @@ auto Cartridge::saveSuperFX(Markup::Node node) -> void {
} }
auto Cartridge::saveARMDSP(Markup::Node node) -> void { auto Cartridge::saveARMDSP(Markup::Node node) -> void {
if(auto memory = game.memory(node["ram/name"].text())) { if(auto memory = game.memory(node["memory(type=RAM,category=Data)"])) {
if(memory->battery) { if(memory->battery) {
if(auto fp = platform->open(ID::SuperFamicom, memory->name(), File::Write)) { if(auto fp = platform->open(ID::SuperFamicom, memory->name(), File::Write)) {
for(auto n : range(16 * 1024)) fp->write(armdsp.programRAM[n]); for(auto n : range(16 * 1024)) fp->write(armdsp.programRAM[n]);
@ -64,7 +64,7 @@ auto Cartridge::saveARMDSP(Markup::Node node) -> void {
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["dram/name"].text())) { if(auto memory = game.memory(node["memory(type=RAM,category=Data)"])) {
if(memory->battery) { if(memory->battery) {
if(auto fp = platform->open(ID::SuperFamicom, memory->name(), File::Write)) { if(auto fp = platform->open(ID::SuperFamicom, memory->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]);
@ -75,7 +75,7 @@ auto Cartridge::saveHitachiDSP(Markup::Node node) -> void {
auto Cartridge::saveNECDSP(Markup::Node node) -> void { auto Cartridge::saveNECDSP(Markup::Node node) -> void {
uint size = necdsp.revision == NECDSP::Revision::uPD7725 ? 256 : 2048; uint size = necdsp.revision == NECDSP::Revision::uPD7725 ? 256 : 2048;
if(auto memory = game.memory(node["dram/name"].text())) { if(auto memory = game.memory(node["memory(type=RAM,category=Data)"])) {
if(memory->battery) { if(memory->battery) {
if(auto fp = platform->open(ID::SuperFamicom, memory->name(), File::Write)) { if(auto fp = platform->open(ID::SuperFamicom, memory->name(), File::Write)) {
for(auto n : range(size)) fp->writel(necdsp.dataRAM[n], 2); for(auto n : range(size)) fp->writel(necdsp.dataRAM[n], 2);
@ -85,7 +85,7 @@ auto Cartridge::saveNECDSP(Markup::Node node) -> void {
} }
auto Cartridge::saveEpsonRTC(Markup::Node node) -> void { auto Cartridge::saveEpsonRTC(Markup::Node node) -> void {
if(auto memory = game.memory(node["ram/name"].text())) { if(auto memory = game.memory(node["memory(type=RTC)"])) {
if(memory->battery) { if(memory->battery) {
if(auto fp = platform->open(ID::SuperFamicom, memory->name(), File::Write)) { if(auto fp = platform->open(ID::SuperFamicom, memory->name(), File::Write)) {
uint8 data[16] = {0}; uint8 data[16] = {0};
@ -97,7 +97,7 @@ auto Cartridge::saveEpsonRTC(Markup::Node node) -> void {
} }
auto Cartridge::saveSharpRTC(Markup::Node node) -> void { auto Cartridge::saveSharpRTC(Markup::Node node) -> void {
if(auto memory = game.memory(node["ram/name"].text())) { if(auto memory = game.memory(node["memory(type=RTC)"])) {
if(memory->battery) { if(memory->battery) {
if(auto fp = platform->open(ID::SuperFamicom, memory->name(), File::Write)) { if(auto fp = platform->open(ID::SuperFamicom, memory->name(), File::Write)) {
uint8 data[16] = {0}; uint8 data[16] = {0};
@ -124,7 +124,7 @@ auto Cartridge::saveOBC1(Markup::Node node) -> void {
auto Cartridge::saveMemory(MappedRAM& ram, Markup::Node node, maybe<uint> id) -> void { auto Cartridge::saveMemory(MappedRAM& ram, Markup::Node node, maybe<uint> id) -> void {
if(!id) id = pathID(); if(!id) id = pathID();
if(auto memory = game.memory(node["name"].text())) { if(auto memory = game.memory(node)) {
if(memory->type == "RAM" && !memory->battery) return; if(memory->type == "RAM" && !memory->battery) return;
if(memory->type == "RTC" && !memory->battery) return; if(memory->type == "RTC" && !memory->battery) return;
if(auto fp = platform->open(id(), memory->name(), File::Write)) { if(auto fp = platform->open(id(), memory->name(), File::Write)) {

View File

@ -1,5 +1,5 @@
database database
revision: 2018-03-13 revision: 2018-04-03
//Boards (Production) //Boards (Production)
@ -533,292 +533,291 @@ board: SHVC-YJ0N-01
//Boards (Generic) //Boards (Generic)
database database
revision: 2018-03-04 revision: 2018-04-03
board: ARM-LOROM-RAM board: ARM-LOROM-RAM
rom memory type=ROM category=Program
map address=00-7d,80-ff:8000-ffff mask=0x8000 map address=00-7d,80-ff:8000-ffff mask=0x8000
map address=40-6f,c0-ef:0000-7fff mask=0x8000 map address=40-6f,c0-ef:0000-7fff mask=0x8000
ram memory type=RAM category=Save
map address=70-7d,f0-ff:0000-ffff map address=70-7d,f0-ff:0000-ffff
armdsp frequency=21477272 armdsp
map address=00-3f,80-bf:3800-38ff map address=00-3f,80-bf:3800-38ff
prom memory type=ROM category=Program manufacturer=ARM
drom memory type=ROM category=Data manufacturer=ARM
ram memory type=RAM category=Data manufacturer=ARM
oscillator
board: BS-HIROM-RAM board: BS-HIROM-RAM
rom memory type=ROM category=Program
map address=00-1f,80-9f:8000-ffff map address=00-1f,80-9f:8000-ffff
map address=40-5f,c0-df:0000-ffff map address=40-5f,c0-df:0000-ffff
ram memory type=RAM category=Save
map address=20-3f,a0-bf:6000-7fff mask=0xe000 map address=20-3f,a0-bf:6000-7fff mask=0xe000
bsmemory 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
board: BS-LOROM-RAM board: BS-LOROM-RAM
rom memory type=ROM category=Program
map address=00-1f:8000-ffff base=0x000000 mask=0x8000 map address=00-1f:8000-ffff base=0x000000 mask=0x8000
map address=20-3f:8000-ffff base=0x100000 mask=0x8000 map address=20-3f:8000-ffff base=0x100000 mask=0x8000
map address=80-9f:8000-ffff base=0x200000 mask=0x8000 map address=80-9f:8000-ffff base=0x200000 mask=0x8000
map address=a0-bf:8000-ffff base=0x100000 mask=0x8000 map address=a0-bf:8000-ffff base=0x100000 mask=0x8000
ram memory type=RAM category=Save
map address=70-7d,f0-ff:0000-7fff mask=0x8000 map address=70-7d,f0-ff:0000-7fff mask=0x8000
bsmemory bsmemory
map address=c0-ef:0000-ffff map address=c0-ef:0000-ffff
board: BS-MCC-RAM board: BS-MCC-RAM
ram memory type=RAM category=Save
map address=10-1f:5000-5fff mask=0xf000 map address=10-1f:5000-5fff mask=0xf000
mcc mcc
map address=00-0f:5000 map address=00-0f:5000
map=mcu address=00-3f,80-bf:8000-ffff mask=0x408000 map=mcu address=00-3f,80-bf:8000-ffff mask=0x408000
map=mcu address=40-7d,c0-ff:0000-ffff map=mcu address=40-7d,c0-ff:0000-ffff
rom memory type=ROM category=Program
ram memory type=RAM category=Download
map address=00-3f,80-bf:6000-7fff mask=0xe000 map address=00-3f,80-bf:6000-7fff mask=0xe000
bsmemory bsmemory
board: BS-SA1-RAM board: BS-SA1-RAM
sa1 sa1
map address=00-3f,80-bf:2200-23ff map address=00-3f,80-bf:2200-23ff
rom memory type=ROM category=Program
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
bwram memory type=RAM category=Bitmap
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
iram memory type=RAM category=Internal
map address=00-3f,80-bf:3000-37ff size=0x800 map address=00-3f,80-bf:3000-37ff size=0x800
bsmemory bsmemory
board: HIROM board: HIROM
rom name=program.rom memory type=ROM category=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
board: HIROM-RAM board: HIROM-RAM
rom name=program.rom memory type=ROM category=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
ram name=save.ram memory type=RAM category=Save
map address=20-3f,a0-bf:6000-7fff mask=0xe000 map address=20-3f,a0-bf:6000-7fff mask=0xe000
board: HIROMEX-RAM board: HIROMEX-RAM
rom memory type=ROM category=Program
map address=00-3f:8000-ffff base=0x400000 map address=00-3f:8000-ffff base=0x400000
map address=40-7d:0000-ffff base=0x400000 map address=40-7d:0000-ffff base=0x400000
map address=80-bf:8000-ffff mask=0xc00000 map address=80-bf:8000-ffff mask=0xc00000
map address=c0-ff:0000-ffff mask=0xc00000 map address=c0-ff:0000-ffff mask=0xc00000
ram memory type=RAM category=Save
map address=20-3f,a0-bf:6000-7fff mask=0xe000 map address=20-3f,a0-bf:6000-7fff mask=0xe000
map address=70-7d:0000-7fff map address=70-7d:0000-7fff
board: HITACHI-LOROM board: HITACHI-LOROM
hitachidsp model=HG51B169 frequency=20000000 hitachidsp model=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 map address=70-77:0000-7fff
rom memory type=ROM category=Program
map address=00-3f,80-bf:8000-ffff mask=0x8000 map address=00-3f,80-bf:8000-ffff mask=0x8000
drom memory type=ROM category=Data manufacturer=Hitachi
dram memory type=RAM category=Data manufacturer=Hitachi
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
board: LOROM board: LOROM
rom name=program.rom memory type=ROM category=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
rom name=program.rom memory type=ROM category=Program
map address=00-3f,80-bf:8000-ffff mask=0x8000 map address=00-3f,80-bf:8000-ffff mask=0x8000
ram name=save.ram memory type=RAM category=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: LOROMEX-RAM
rom memory type=ROM category=Program
map address=00-7d,80-ff:8000-ffff mask=0x8000 map address=00-7d,80-ff:8000-ffff mask=0x8000
ram memory type=RAM category=Save
map address=70-7d,f0-ff:0000-7fff mask=0x8000 map address=70-7d,f0-ff:0000-7fff mask=0x8000
board: NEC-HIROM board: NEC-HIROM
rom memory type=ROM category=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 frequency=8000000 necdsp model=uPD7725
map address=00-1f,80-9f:6000-7fff mask=0xfff map address=00-1f,80-9f:6000-7fff mask=0xfff
prom memory type=ROM category=Program manufacturer=NEC
drom memory type=ROM category=Data manufacturer=NEC
dram memory type=RAM category=Data manufacturer=NEC
oscillator
board: NEC-HIROM-RAM board: NEC-HIROM-RAM
rom memory type=ROM category=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
ram memory type=RAM category=Save
map address=20-3f,a0-bf:6000-7fff mask=0xe000 map address=20-3f,a0-bf:6000-7fff mask=0xe000
necdsp model=uPD7725 frequency=8000000 necdsp model=uPD7725
map address=00-1f,80-9f:6000-7fff mask=0xfff map address=00-1f,80-9f:6000-7fff mask=0xfff
prom memory type=ROM category=Program manufacturer=NEC
drom memory type=ROM category=Data manufacturer=NEC
dram memory type=RAM category=Data manufacturer=NEC
oscillator
board: NEC-LOROM board: NEC-LOROM
rom memory type=ROM category=Program
map address=00-1f,80-9f:8000-ffff mask=0x8000 map address=00-1f,80-9f:8000-ffff mask=0x8000
necdsp model=uPD7725 frequency=8000000 necdsp model=uPD7725
map address=30-3f,b0-bf:8000-ffff mask=0x3fff map address=30-3f,b0-bf:8000-ffff mask=0x3fff
prom memory type=ROM category=Program manufacturer=NEC
drom memory type=ROM category=Data manufacturer=NEC
dram memory type=RAM category=Data manufacturer=NEC
oscillator
board: NEC-LOROM-RAM board: NEC-LOROM-RAM
rom memory type=ROM category=Program
map address=00-1f,80-9f:8000-ffff mask=0x8000 map address=00-1f,80-9f:8000-ffff mask=0x8000
ram memory type=RAM category=Save
map address=70-7d,f0-ff:0000-ffff map address=70-7d,f0-ff:0000-ffff
necdsp model=uPD7725 frequency=8000000 necdsp model=uPD7725
map address=20-3f,a0-bf:8000-ffff mask=0x3fff map address=20-3f,a0-bf:8000-ffff mask=0x3fff
prom memory type=ROM category=Program manufacturer=NEC
drom memory type=ROM category=Data manufacturer=NEC
dram memory type=RAM category=Data manufacturer=NEC
oscillator
board: NEC-LOROMEX-RAM board: NEC-LOROMEX-RAM
rom memory type=ROM category=Program
map address=00-3f,80-bf:8000-ffff mask=0x8000 map address=00-3f,80-bf:8000-ffff mask=0x8000
ram memory type=RAM category=Save
map address=70-7d,f0-ff:0000-7fff mask=0x8000 map address=70-7d,f0-ff:0000-7fff mask=0x8000
necdsp model=uPD7725 frequency=8000000 necdsp model=uPD7725
map address=60-6f,e0-ef:0000-7fff mask=0x3fff map address=60-6f,e0-ef:0000-7fff mask=0x3fff
prom memory type=ROM category=Program manufacturer=NEC
drom memory type=ROM category=Data manufacturer=NEC
dram memory type=RAM category=Data manufacturer=NEC
oscillator
board: NECEX-LOROM-BATTERY#11 board: NECEX-LOROM-BATTERY
rom memory type=ROM category=Program
map address=00-7d,80-ff:8000-ffff mask=0x8000 map address=00-7d,80-ff:8000-ffff mask=0x8000
necdsp model=uPD96050 frequency=11000000 necdsp model=uPD96050
map address=60-67,e0-e7:0000-3fff map address=60-67,e0-e7:0000-3fff
prom memory type=ROM category=Program manufacturer=NEC
drom memory type=ROM category=Data manufacturer=NEC
dram memory type=RAM category=Data manufacturer=NEC
map address=68-6f,e8-ef:0000-7fff mask=0x8000
board: NECEX-LOROM-BATTERY#15
rom
map address=00-7d,80-ff:8000-ffff mask=0x8000
necdsp model=uPD96050 frequency=15000000
map address=60-67,e0-e7:0000-3fff
prom
drom
dram
map address=68-6f,e8-ef:0000-7fff mask=0x8000 map address=68-6f,e8-ef:0000-7fff mask=0x8000
oscillator
board: OBC1-LOROM-RAM board: OBC1-LOROM-RAM
rom memory type=ROM category=Program
map address=00-3f,80-bf:8000-ffff mask=0x8000 map address=00-3f,80-bf:8000-ffff mask=0x8000
obc1 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
ram memory type=RAM category=Save
board: RTC-HIROMEX-RAM board: RTC-HIROMEX-RAM
rom memory type=ROM category=Program
map address=00-3f:8000-ffff base=0x400000 map address=00-3f:8000-ffff base=0x400000
map address=40-7d:0000-ffff base=0x400000 map address=40-7d:0000-ffff base=0x400000
map address=80-bf:8000-ffff mask=0xc00000 map address=80-bf:8000-ffff mask=0xc00000
map address=c0-ff:0000-ffff mask=0xc00000 map address=c0-ff:0000-ffff mask=0xc00000
ram memory type=RAM category=Save
map address=20-3f,a0-bf:6000-7fff mask=0xe000 map address=20-3f,a0-bf:6000-7fff mask=0xe000
map address=70-7d:0000-7fff map address=70-7d:0000-7fff
sharprtc sharprtc
map address=00-3f,80-bf:2800-2801 map address=00-3f,80-bf:2800-2801
ram memory type=RTC manufacturer=Sharp
board: SA1-RAM board: SA1-RAM
sa1 sa1
map address=00-3f,80-bf:2200-23ff map address=00-3f,80-bf:2200-23ff
rom memory type=ROM category=Program
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
bwram memory type=RAM category=Bitmap
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
iram memory type=RAM category=Internal
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 sdd1
map address=00-3f,80-bf:4800-480f map address=00-3f,80-bf:4800-480f
rom memory type=ROM category=Program
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
board: SDD1-RAM board: SDD1-RAM
sdd1 sdd1
map address=00-3f,80-bf:4800-480f map address=00-3f,80-bf:4800-480f
rom memory type=ROM category=Program
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
ram memory type=RAM category=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 board: SGB-LOROM
rom memory type=ROM category=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 icd revision=2
map address=00-3f,80-bf:6000-67ff,7000-7fff map address=00-3f,80-bf:6000-67ff,7000-7fff
rom memory type=ROM category=Boot manufacturer=Nintendo
oscillator
gameboy gameboy
board: SPC7110-RAM board: SPC7110-RAM
spc7110 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 map type=MCU address=00-3f,80-bf:8000-ffff mask=0x800000
map=mcu address=c0-ff:0000-ffff mask=0xc00000 map type=MCU address=c0-ff:0000-ffff mask=0xc00000
prom memory type=ROM category=Program
drom memory type=ROM category=Data
ram memory type=RAM category=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-RTC-RAM
spc7110 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 map type=MCU address=00-3f,80-bf:8000-ffff mask=0x800000
map=mcu address=c0-ff:0000-ffff mask=0xc00000 map type=MCU address=c0-ff:0000-ffff mask=0xc00000
prom memory type=ROM category=Program
drom memory type=ROM category=Data
ram memory type=RAM category=Save
map address=00-3f,80-bf:6000-7fff mask=0xe000 map address=00-3f,80-bf:6000-7fff mask=0xe000
epsonrtc epsonrtc
map address=00-3f,80-bf:4800-4842 map address=00-3f,80-bf:4800-4842
ram memory type=RTC manufacturer=Epson
board: ST-LOROM board: ST-LOROM
rom memory type=ROM category=Program
map address=00-1f,80-9f:8000-ffff mask=0x8000 map address=00-1f,80-9f:8000-ffff mask=0x8000
sufamiturbo sufamiturbo
rom memory type=ROM category=Program
map address=20-3f,a0-bf:8000-ffff mask=0x8000 map address=20-3f,a0-bf:8000-ffff mask=0x8000
ram memory type=RAM category=Save
map address=60-6f,e0-ef:0000-ffff map address=60-6f,e0-ef:0000-ffff
sufamiturbo sufamiturbo
rom memory type=ROM category=Program
map address=40-5f,c0-df:0000-ffff mask=0x8000 map address=40-5f,c0-df:0000-ffff mask=0x8000
ram memory type=RAM category=Save
map address=70-7d,f0-ff:0000-ffff map address=70-7d,f0-ff:0000-ffff
board: SUPERFX-RAM board: SUPERFX-RAM
superfx superfx
map address=00-3f,80-bf:3000-34ff map address=00-3f,80-bf:3000-34ff
rom memory type=ROM category=Program
map address=00-3f,80-bf:8000-ffff mask=0x8000 map address=00-3f,80-bf:8000-ffff mask=0x8000
map address=40-5f,c0-df:0000-ffff map address=40-5f,c0-df:0000-ffff
ram memory type=RAM category=Save
map address=00-3f,80-bf:6000-7fff size=0x2000 map address=00-3f,80-bf:6000-7fff size=0x2000
map address=70-71,f0-f1:0000-ffff map address=70-71,f0-f1:0000-ffff