Update to v106r13 release.

byuu says:

Changelog:

  - game/memory/category → game/memory/content
  - game/memory/model → game/memory/architecture
  - game/memory/identity → game/memory/identifier
  - Super Famicom: memory/content=Bitmap → memory/content=Save
  - Super Famicom: memory/architecture=DMG,MGB →
    memory/architecture=LR35902

The game manifest field names are now officially set in stone. I won't
change them again, I'll only add new fields if required.

As for the values in the field, I'm still undecided on the manufacturer
of the ST018, and I could be talked into different identifiers for the
Super Game Boy (SGB1/SGB2, DMG/MGB, or just ICD(2)?)

The board manifest format is still in flux, as is the choice of what to
name firmware files (it's between manufacturer and architecture, where
I'm leaning toward the latter currently.)

Board memory to Game memory mappings will require both the manufacturer
and architecture fields to match.

I'll be updating doc.byuu.org soon with the finalized game manifest
format.
This commit is contained in:
Tim Allen 2018-04-09 09:50:42 +10:00
parent 985610c167
commit eaa2c1f6c0
19 changed files with 202 additions and 203 deletions

View File

@ -129,10 +129,10 @@ auto ListWindow::loadDatabase(string location) -> void {
component.memory.type = object["type"].text(); component.memory.type = object["type"].text();
component.memory.battery = (bool)object["type/battery"]; component.memory.battery = (bool)object["type/battery"];
component.memory.size = object["size"].text(); component.memory.size = object["size"].text();
component.memory.category = object["category"].text(); component.memory.content = object["content"].text();
component.memory.manufacturer = object["manufacturer"].text(); component.memory.manufacturer = object["manufacturer"].text();
component.memory.model = object["model"].text(); component.memory.architecture = object["architecture"].text();
component.memory.identity = object["identity"].text(); component.memory.identifier = object["identifier"].text();
} }
if(object.name() == "oscillator") { if(object.name() == "oscillator") {
component.type = Component::Type::Oscillator; component.type = Component::Type::Oscillator;
@ -187,13 +187,13 @@ auto ListWindow::saveDatabase(string location) -> void {
if(component.memory.battery) if(component.memory.battery)
fp.print(" battery\n"); fp.print(" battery\n");
fp.print(" size: ", component.memory.size, "\n"); fp.print(" size: ", component.memory.size, "\n");
fp.print(" category: ", component.memory.category, "\n"); fp.print(" content: ", component.memory.content, "\n");
if(component.memory.manufacturer) if(component.memory.manufacturer)
fp.print(" manufacturer: ", component.memory.manufacturer, "\n"); fp.print(" manufacturer: ", component.memory.manufacturer, "\n");
if(component.memory.model) if(component.memory.architecture)
fp.print(" model: ", component.memory.model, "\n"); fp.print(" architecture: ", component.memory.architecture, "\n");
if(component.memory.identity) if(component.memory.identifier)
fp.print(" identity: ", component.memory.identity, "\n"); fp.print(" identifier: ", component.memory.identifier, "\n");
} }
if(component.type == Component::Type::Oscillator) { if(component.type == Component::Type::Oscillator) {
@ -369,13 +369,13 @@ auto GameWindow::reloadList() -> void {
item.setText({index, "Memory"}); item.setText({index, "Memory"});
item.append(TreeViewItem().setText({"Type: ", component.memory.type, component.memory.battery ? " + Battery" : ""})); item.append(TreeViewItem().setText({"Type: ", component.memory.type, component.memory.battery ? " + Battery" : ""}));
item.append(TreeViewItem().setText({"Size: ", component.memory.size})); item.append(TreeViewItem().setText({"Size: ", component.memory.size}));
item.append(TreeViewItem().setText({"Category: ", component.memory.category})); item.append(TreeViewItem().setText({"Content: ", component.memory.content}));
if(component.memory.manufacturer) if(component.memory.manufacturer)
item.append(TreeViewItem().setText({"Manufacturer: ", component.memory.manufacturer})); item.append(TreeViewItem().setText({"Manufacturer: ", component.memory.manufacturer}));
if(component.memory.model) if(component.memory.architecture)
item.append(TreeViewItem().setText({"Model: ", component.memory.model})); item.append(TreeViewItem().setText({"Architecture: ", component.memory.architecture}));
if(component.memory.identity) if(component.memory.identifier)
item.append(TreeViewItem().setText({"Identity: ", component.memory.identity})); item.append(TreeViewItem().setText({"Identifier: ", component.memory.identifier}));
} }
if(component.type == Component::Type::Oscillator) { if(component.type == Component::Type::Oscillator) {
@ -460,19 +460,19 @@ MemoryWindow::MemoryWindow() {
typeEdit.onChange([&] { modified = true, updateWindow(); }); typeEdit.onChange([&] { modified = true, updateWindow(); });
sizeLabel.setText("Size:").setAlignment(1.0); sizeLabel.setText("Size:").setAlignment(1.0);
sizeEdit.onChange([&] { modified = true, updateWindow(); }); sizeEdit.onChange([&] { modified = true, updateWindow(); });
categoryLabel.setText("Category:").setAlignment(1.0); contentLabel.setText("Content:").setAlignment(1.0);
categoryEdit.append(ComboEditItem().setText("Program")); contentEdit.append(ComboEditItem().setText("Program"));
categoryEdit.append(ComboEditItem().setText("Data")); contentEdit.append(ComboEditItem().setText("Data"));
categoryEdit.append(ComboEditItem().setText("Character")); contentEdit.append(ComboEditItem().setText("Character"));
categoryEdit.append(ComboEditItem().setText("Save")); contentEdit.append(ComboEditItem().setText("Save"));
categoryEdit.append(ComboEditItem().setText("Time")); contentEdit.append(ComboEditItem().setText("Time"));
categoryEdit.onChange([&] { modified = true, updateWindow(); }); contentEdit.onChange([&] { modified = true, updateWindow(); });
manufacturerLabel.setText("Manufacturer:").setAlignment(1.0); manufacturerLabel.setText("Manufacturer:").setAlignment(1.0);
manufacturerEdit.onChange([&] { modified = true, updateWindow(); }); manufacturerEdit.onChange([&] { modified = true, updateWindow(); });
modelLabel.setText("Model:").setAlignment(1.0); architectureLabel.setText("Architecture:").setAlignment(1.0);
modelEdit.onChange([&] { modified = true, updateWindow(); }); architectureEdit.onChange([&] { modified = true, updateWindow(); });
identityLabel.setText("Identity:").setAlignment(1.0); identifierLabel.setText("Identifier:").setAlignment(1.0);
identityEdit.onChange([&] { modified = true, updateWindow(); }); identifierEdit.onChange([&] { modified = true, updateWindow(); });
batteryOption.setText("Battery").onToggle([&] { modified = true, updateWindow(); }); batteryOption.setText("Battery").onToggle([&] { modified = true, updateWindow(); });
acceptButton.setText("Accept").onActivate([&] { accept(); }); acceptButton.setText("Accept").onActivate([&] { accept(); });
cancelButton.setText("Cancel").onActivate([&] { cancel(); }); cancelButton.setText("Cancel").onActivate([&] { cancel(); });
@ -490,10 +490,10 @@ auto MemoryWindow::show(Memory memory) -> void {
typeEdit.setText(memory.type); typeEdit.setText(memory.type);
sizeEdit.setText(memory.size); sizeEdit.setText(memory.size);
categoryEdit.setText(memory.category); contentEdit.setText(memory.content);
manufacturerEdit.setText(memory.manufacturer); manufacturerEdit.setText(memory.manufacturer);
modelEdit.setText(memory.model); architectureEdit.setText(memory.architecture);
identityEdit.setText(memory.identity); identifierEdit.setText(memory.identifier);
batteryOption.setChecked(memory.battery); batteryOption.setChecked(memory.battery);
updateWindow(); updateWindow();
@ -506,10 +506,10 @@ auto MemoryWindow::show(Memory memory) -> void {
auto MemoryWindow::accept() -> void { auto MemoryWindow::accept() -> void {
memory.type = typeEdit.text().strip(); memory.type = typeEdit.text().strip();
memory.size = sizeEdit.text().strip(); memory.size = sizeEdit.text().strip();
memory.category = categoryEdit.text().strip(); memory.content = contentEdit.text().strip();
memory.manufacturer = manufacturerEdit.text().strip(); memory.manufacturer = manufacturerEdit.text().strip();
memory.model = modelEdit.text().strip(); memory.architecture = architectureEdit.text().strip();
memory.identity = identityEdit.text().strip(); memory.identifier = identifierEdit.text().strip();
memory.battery = batteryOption.checked() && (memory.type == "RAM" || memory.type == "RTC"); memory.battery = batteryOption.checked() && (memory.type == "RAM" || memory.type == "RTC");
Component component{Component::Type::Memory}; Component component{Component::Type::Memory};
@ -539,10 +539,10 @@ auto MemoryWindow::updateWindow() -> void {
bool valid = true; bool valid = true;
typeEdit.setBackgroundColor(typeEdit.text().strip() ? Color{} : (valid = false, Color{255, 224, 224})); typeEdit.setBackgroundColor(typeEdit.text().strip() ? Color{} : (valid = false, Color{255, 224, 224}));
sizeEdit.setBackgroundColor(sizeEdit.text().strip() ? Color{} : (valid = false, Color{255, 224, 224})); sizeEdit.setBackgroundColor(sizeEdit.text().strip() ? Color{} : (valid = false, Color{255, 224, 224}));
categoryEdit.setBackgroundColor(categoryEdit.text().strip() ? Color{} : (valid = false, Color{255, 224, 224})); contentEdit.setBackgroundColor(contentEdit.text().strip() ? Color{} : (valid = false, Color{255, 224, 224}));
manufacturerEdit.setBackgroundColor(manufacturerEdit.text().strip() ? Color{} : (Color{255, 255, 240})); manufacturerEdit.setBackgroundColor(manufacturerEdit.text().strip() ? Color{} : (Color{255, 255, 240}));
modelEdit.setBackgroundColor(modelEdit.text().strip() ? Color{} : (Color{255, 255, 240})); architectureEdit.setBackgroundColor(architectureEdit.text().strip() ? Color{} : (Color{255, 255, 240}));
identityEdit.setBackgroundColor(identityEdit.text().strip() ? Color{} : (Color{255, 255, 240})); identifierEdit.setBackgroundColor(identifierEdit.text().strip() ? Color{} : (Color{255, 255, 240}));
batteryOption.setEnabled(typeEdit.text().strip() == "RAM" || typeEdit.text().strip() == "RTC"); batteryOption.setEnabled(typeEdit.text().strip() == "RAM" || typeEdit.text().strip() == "RTC");
acceptButton.setEnabled(valid); acceptButton.setEnabled(valid);
setTitle({modified ? "*" : "", create ? "Add New Memory" : "Modify Memory Details"}); setTitle({modified ? "*" : "", create ? "Add New Memory" : "Modify Memory Details"});

View File

@ -2,10 +2,10 @@ struct Memory {
string type; string type;
boolean battery; boolean battery;
string size; string size;
string category; string content;
string manufacturer; string manufacturer;
string model; string architecture;
string identity; string identifier;
}; };
struct Oscillator { struct Oscillator {
@ -136,18 +136,18 @@ private:
ComboEdit typeEdit{&infoLayout, Size{~0, 0}}; ComboEdit typeEdit{&infoLayout, Size{~0, 0}};
Label sizeLabel{&infoLayout, Size{0, 0}}; Label sizeLabel{&infoLayout, Size{0, 0}};
LineEdit sizeEdit{&infoLayout, Size{~0, 0}}; LineEdit sizeEdit{&infoLayout, Size{~0, 0}};
HorizontalLayout categoryLayout{&layout, Size{~0, 0}}; HorizontalLayout contentLayout{&layout, Size{~0, 0}};
Label categoryLabel{&categoryLayout, Size{80, 0}}; Label contentLabel{&contentLayout, Size{80, 0}};
ComboEdit categoryEdit{&categoryLayout, Size{~0, 0}}; ComboEdit contentEdit{&contentLayout, Size{~0, 0}};
HorizontalLayout manufacturerLayout{&layout, Size{~0, 0}}; HorizontalLayout manufacturerLayout{&layout, Size{~0, 0}};
Label manufacturerLabel{&manufacturerLayout, Size{80, 0}}; Label manufacturerLabel{&manufacturerLayout, Size{80, 0}};
LineEdit manufacturerEdit{&manufacturerLayout, Size{~0, 0}}; LineEdit manufacturerEdit{&manufacturerLayout, Size{~0, 0}};
HorizontalLayout modelLayout{&layout, Size{~0, 0}}; HorizontalLayout architectureLayout{&layout, Size{~0, 0}};
Label modelLabel{&modelLayout, Size{80, 0}}; Label architectureLabel{&architectureLayout, Size{80, 0}};
LineEdit modelEdit{&modelLayout, Size{~0, 0}}; LineEdit architectureEdit{&architectureLayout, Size{~0, 0}};
HorizontalLayout identityLayout{&layout, Size{~0, 0}}; HorizontalLayout identifierLayout{&layout, Size{~0, 0}};
Label identityLabel{&identityLayout, Size{80, 0}}; Label identifierLabel{&identifierLayout, Size{80, 0}};
LineEdit identityEdit{&identityLayout, Size{~0, 0}}; LineEdit identifierEdit{&identifierLayout, Size{~0, 0}};
HorizontalLayout controlLayout{&layout, Size{~0, 0}}; HorizontalLayout controlLayout{&layout, Size{~0, 0}};
Widget controlSpacer{&controlLayout, Size{~0, 0}}; Widget controlSpacer{&controlLayout, Size{~0, 0}};
CheckLabel batteryOption{&controlLayout, Size{0, 0}}; CheckLabel batteryOption{&controlLayout, Size{0, 0}};

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.12"; static const string Version = "106.13";
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

@ -17,10 +17,10 @@ struct Game {
string type; string type;
boolean battery; boolean battery;
natural size; natural size;
string category; string content;
string manufacturer; string manufacturer;
string model; string architecture;
string identity; string identifier;
}; };
struct Oscillator { struct Oscillator {
@ -55,10 +55,10 @@ auto Game::load(string_view text) -> void {
memory.type = node["type"].text(); memory.type = node["type"].text();
memory.battery = (bool)node["type/battery"]; memory.battery = (bool)node["type/battery"];
memory.size = node["size"].natural(); memory.size = node["size"].natural();
memory.category = node["category"].text(); memory.content = node["content"].text();
memory.manufacturer = node["manufacturer"].text(); memory.manufacturer = node["manufacturer"].text();
memory.model = node["model"].text(); memory.architecture = node["architecture"].text();
memory.identity = node["identity"].text(); memory.identifier = node["identifier"].text();
memoryList.append(memory); memoryList.append(memory);
} }
@ -74,16 +74,16 @@ auto Game::memory(Markup::Node node) -> maybe<Memory> {
for(auto& memory : memoryList) { for(auto& memory : memoryList) {
auto type = node["type"].text(); auto type = node["type"].text();
auto size = node["size"].natural(); auto size = node["size"].natural();
auto category = node["category"].text(); auto content = node["content"].text();
auto manufacturer = node["manufacturer"].text(); auto manufacturer = node["manufacturer"].text();
auto model = node["model"].text(); auto architecture = node["architecture"].text();
auto identity = node["identity"].text(); auto identifier = node["identifier"].text();
if(type && type != memory.type) continue; if(type && type != memory.type) continue;
if(size && size != memory.size) continue; if(size && size != memory.size) continue;
if(category && category != memory.category) continue; if(content && content != memory.content) continue;
if(manufacturer && manufacturer != memory.manufacturer) continue; if(manufacturer && manufacturer != memory.manufacturer) continue;
if(model && model != memory.model) continue; if(architecture && architecture != memory.architecture) continue;
if(identity && identity != memory.identity) continue; if(identifier && identifier != memory.identifier) continue;
return memory; return memory;
} }
return nothing; return nothing;
@ -95,8 +95,8 @@ auto Game::oscillator(natural index) -> maybe<Oscillator> {
} }
auto Game::Memory::name() const -> string { auto Game::Memory::name() const -> string {
if(manufacturer) return string{manufacturer, ".", category, ".", type}.downcase(); if(manufacturer) return string{manufacturer, ".", content, ".", type}.downcase();
return string{category, ".", type}.downcase(); return string{content, ".", type}.downcase();
} }
} }

View File

@ -1,5 +1,5 @@
database database
revision: 2018-04-03 revision: 2018-04-08
//Boards (Production) //Boards (Production)
@ -533,86 +533,86 @@ board: SHVC-YJ0N-01
//Boards (Generic) //Boards (Generic)
database database
revision: 2018-04-03 revision: 2018-04-08
board: ARM-LOROM-RAM board: ARM-LOROM-RAM
memory type=ROM category=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-6f,c0-ef:0000-7fff mask=0x8000 map address=40-6f,c0-ef:0000-7fff mask=0x8000
memory type=RAM category=Save memory type=RAM content=Save
map address=70-7d,f0-ff:0000-ffff map address=70-7d,f0-ff:0000-ffff
armdsp armdsp
map address=00-3f,80-bf:3800-38ff map address=00-3f,80-bf:3800-38ff
memory type=ROM category=Program manufacturer=ARM memory type=ROM content=Program manufacturer=SETA
memory type=ROM category=Data manufacturer=ARM memory type=ROM content=Data manufacturer=SETA
memory type=RAM category=Data manufacturer=ARM memory type=RAM content=Data manufacturer=SETA
oscillator oscillator
board: BS-HIROM-RAM board: BS-HIROM-RAM
memory type=ROM category=Program memory type=ROM content=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
memory type=RAM category=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 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
memory type=ROM category=Program memory type=ROM content=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
memory type=RAM category=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 bsmemory
map address=c0-ef:0000-ffff map address=c0-ef:0000-ffff
board: BS-MCC-RAM board: BS-MCC-RAM
memory type=RAM category=Save memory type=RAM content=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
memory type=ROM category=Program memory type=ROM content=Program
memory type=RAM category=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 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
memory type=ROM category=Program memory type=ROM content=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
memory type=RAM category=Bitmap 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 category=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 bsmemory
board: HIROM board: HIROM
memory type=ROM category=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
board: HIROM-RAM board: HIROM-RAM
memory type=ROM category=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
memory type=RAM category=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 board: HIROMEX-RAM
memory type=ROM category=Program memory type=ROM content=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
memory type=RAM category=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
map address=70-7d:0000-7fff map address=70-7d:0000-7fff
@ -620,113 +620,113 @@ board: HITACHI-LOROM
hitachidsp model=HG51BS169 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
memory type=ROM category=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 category=Data manufacturer=Hitachi memory type=ROM content=Data manufacturer=Hitachi
memory type=RAM category=Data manufacturer=Hitachi memory type=RAM content=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 oscillator
board: LOROM board: LOROM
memory type=ROM category=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
memory type=ROM category=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 category=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: LOROMEX-RAM
memory type=ROM category=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 category=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
board: NEC-HIROM board: NEC-HIROM
memory type=ROM category=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 necdsp model=uPD7725
map address=00-1f,80-9f:6000-7fff mask=0xfff map address=00-1f,80-9f:6000-7fff mask=0xfff
memory type=ROM category=Program manufacturer=NEC memory type=ROM content=Program manufacturer=NEC
memory type=ROM category=Data manufacturer=NEC memory type=ROM content=Data manufacturer=NEC
memory type=RAM category=Data manufacturer=NEC memory type=RAM content=Data manufacturer=NEC
oscillator oscillator
board: NEC-HIROM-RAM board: NEC-HIROM-RAM
memory type=ROM category=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
memory type=RAM category=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 necdsp model=uPD7725
map address=00-1f,80-9f:6000-7fff mask=0xfff map address=00-1f,80-9f:6000-7fff mask=0xfff
memory type=ROM category=Program manufacturer=NEC memory type=ROM content=Program manufacturer=NEC
memory type=ROM category=Data manufacturer=NEC memory type=ROM content=Data manufacturer=NEC
memory type=RAM category=Data manufacturer=NEC memory type=RAM content=Data manufacturer=NEC
oscillator oscillator
board: NEC-LOROM board: NEC-LOROM
memory type=ROM category=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 necdsp model=uPD7725
map address=30-3f,b0-bf:8000-ffff mask=0x3fff map address=30-3f,b0-bf:8000-ffff mask=0x3fff
memory type=ROM category=Program manufacturer=NEC memory type=ROM content=Program manufacturer=NEC
memory type=ROM category=Data manufacturer=NEC memory type=ROM content=Data manufacturer=NEC
memory type=RAM category=Data manufacturer=NEC memory type=RAM content=Data manufacturer=NEC
oscillator oscillator
board: NEC-LOROM-RAM board: NEC-LOROM-RAM
memory type=ROM category=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 category=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 necdsp model=uPD7725
map address=20-3f,a0-bf:8000-ffff mask=0x3fff map address=20-3f,a0-bf:8000-ffff mask=0x3fff
memory type=ROM category=Program manufacturer=NEC memory type=ROM content=Program manufacturer=NEC
memory type=ROM category=Data manufacturer=NEC memory type=ROM content=Data manufacturer=NEC
memory type=RAM category=Data manufacturer=NEC memory type=RAM content=Data manufacturer=NEC
oscillator oscillator
board: NEC-LOROMEX-RAM board: NEC-LOROMEX-RAM
memory type=ROM category=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 category=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 necdsp model=uPD7725
map address=60-6f,e0-ef:0000-7fff mask=0x3fff map address=60-6f,e0-ef:0000-7fff mask=0x3fff
memory type=ROM category=Program manufacturer=NEC memory type=ROM content=Program manufacturer=NEC
memory type=ROM category=Data manufacturer=NEC memory type=ROM content=Data manufacturer=NEC
memory type=RAM category=Data manufacturer=NEC memory type=RAM content=Data manufacturer=NEC
oscillator oscillator
board: NECEX-LOROM-BATTERY board: NECEX-LOROM-BATTERY
memory type=ROM category=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 necdsp model=uPD96050
map address=60-67,e0-e7:0000-3fff map address=60-67,e0-e7:0000-3fff
memory type=ROM category=Program manufacturer=NEC memory type=ROM content=Program manufacturer=NEC
memory type=ROM category=Data manufacturer=NEC memory type=ROM content=Data manufacturer=NEC
memory type=RAM category=Data manufacturer=NEC memory type=RAM content=Data manufacturer=NEC
map address=68-6f,e8-ef:0000-7fff mask=0x8000 map address=68-6f,e8-ef:0000-7fff mask=0x8000
oscillator oscillator
board: OBC1-LOROM-RAM board: OBC1-LOROM-RAM
memory type=ROM category=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 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 category=Save memory type=RAM content=Save
board: RTC-HIROMEX-RAM board: RTC-HIROMEX-RAM
memory type=ROM category=Program memory type=ROM content=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
memory type=RAM category=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
map address=70-7d:0000-7fff map address=70-7d:0000-7fff
sharprtc sharprtc
@ -736,39 +736,39 @@ board: RTC-HIROMEX-RAM
board: SA1-RAM board: SA1-RAM
sa1 sa1
map address=00-3f,80-bf:2200-23ff map address=00-3f,80-bf:2200-23ff
memory type=ROM category=Program memory type=ROM content=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
memory type=RAM category=Bitmap 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 category=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
board: SDD1 board: SDD1
sdd1 sdd1
map address=00-3f,80-bf:4800-480f map address=00-3f,80-bf:4800-480f
memory type=ROM category=Program memory type=ROM content=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
memory type=ROM category=Program memory type=ROM content=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
memory type=RAM category=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 board: SGB-LOROM
memory type=ROM category=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 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 category=Boot manufacturer=Nintendo memory type=ROM content=Boot manufacturer=Nintendo
oscillator oscillator
gameboy gameboy
@ -778,9 +778,9 @@ board: SPC7110-RAM
map address=50,58:0000-ffff map address=50,58:0000-ffff
map type=MCU address=00-3f,80-bf:8000-ffff mask=0x800000 map type=MCU address=00-3f,80-bf:8000-ffff mask=0x800000
map type=MCU address=c0-ff:0000-ffff mask=0xc00000 map type=MCU address=c0-ff:0000-ffff mask=0xc00000
memory type=ROM category=Program memory type=ROM content=Program
memory type=ROM category=Data memory type=ROM content=Data
memory type=RAM category=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-RTC-RAM
@ -789,35 +789,35 @@ board: SPC7110-RTC-RAM
map address=50,58:0000-ffff map address=50,58:0000-ffff
map type=MCU address=00-3f,80-bf:8000-ffff mask=0x800000 map type=MCU address=00-3f,80-bf:8000-ffff mask=0x800000
map type=MCU address=c0-ff:0000-ffff mask=0xc00000 map type=MCU address=c0-ff:0000-ffff mask=0xc00000
memory type=ROM category=Program memory type=ROM content=Program
memory type=ROM category=Data memory type=ROM content=Data
memory type=RAM category=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 epsonrtc
map address=00-3f,80-bf:4800-4842 map address=00-3f,80-bf:4800-4842
memory type=RTC manufacturer=Epson memory type=RTC manufacturer=Epson
board: ST-LOROM board: ST-LOROM
memory type=ROM category=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 sufamiturbo
memory type=ROM category=Program rom
map address=20-3f,a0-bf:8000-ffff mask=0x8000 map address=20-3f,a0-bf:8000-ffff mask=0x8000
memory type=RAM category=Save ram
map address=60-6f,e0-ef:0000-ffff map address=60-6f,e0-ef:0000-ffff
sufamiturbo sufamiturbo
memory type=ROM category=Program rom
map address=40-5f,c0-df:0000-ffff mask=0x8000 map address=40-5f,c0-df:0000-ffff mask=0x8000
memory type=RAM category=Save ram
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
memory type=ROM category=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
map address=40-5f,c0-df:0000-ffff map address=40-5f,c0-df:0000-ffff
memory type=RAM category=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=70-71,f0-f1:0000-ffff map address=70-71,f0-f1:0000-ffff

View File

@ -26,7 +26,7 @@ auto BSMemory::manifest() const -> string {
output.append(" label: ", Location::prefix(location), "\n"); output.append(" label: ", Location::prefix(location), "\n");
output.append(" name: ", Location::prefix(location), "\n"); output.append(" name: ", Location::prefix(location), "\n");
output.append(" board\n"); output.append(" board\n");
output.append(Memory{}.type("Flash").size(data.size()).category("Program").text()); output.append(Memory{}.type("Flash").size(data.size()).content("Program").text());
return output; return output;
} }

View File

@ -161,11 +161,11 @@ auto Famicom::manifest() const -> string {
break; break;
} }
if(prgrom) output.append(Memory{}.type("ROM").size(prgrom).category("Program").text()); if(prgrom) output.append(Memory{}.type("ROM").size(prgrom).content("Program").text());
if(prgram) output.append(Memory{}.type("RAM").size(prgram).category("Save").battery().text()); if(prgram) output.append(Memory{}.type("RAM").size(prgram).content("Save").battery().text());
if(chrrom) output.append(Memory{}.type("ROM").size(chrrom).category("Character").text()); if(chrrom) output.append(Memory{}.type("ROM").size(chrrom).content("Character").text());
if(chrram) output.append(Memory{}.type("RAM").size(chrram).category("Character").text()); if(chrram) output.append(Memory{}.type("RAM").size(chrram).content("Character").text());
return output; return output;
} }

View File

@ -53,14 +53,14 @@ auto GameBoyAdvance::manifest() const -> string {
output.append(" label: ", Location::prefix(location), "\n"); output.append(" label: ", Location::prefix(location), "\n");
output.append(" name: ", Location::prefix(location), "\n"); output.append(" name: ", Location::prefix(location), "\n");
output.append(" board\n"); output.append(" board\n");
output.append(Memory{}.type("ROM").size(data.size()).category("Program").text()); output.append(Memory{}.type("ROM").size(data.size()).content("Program").text());
if(!list); if(!list);
else if(list.left().beginsWith("SRAM_V" )) output.append(Memory{}.type("RAM" ).size( 0x8000).category("Save").text()); else if(list.left().beginsWith("SRAM_V" )) output.append(Memory{}.type("RAM" ).size( 0x8000).content("Save").text());
else if(list.left().beginsWith("SRAM_F_V" )) output.append(Memory{}.type("RAM" ).size( 0x8000).category("Save").text()); else if(list.left().beginsWith("SRAM_F_V" )) output.append(Memory{}.type("RAM" ).size( 0x8000).content("Save").text());
else if(list.left().beginsWith("EEPROM_V" )) output.append(Memory{}.type("EEPROM").size( 0x0).category("Save").text()); else if(list.left().beginsWith("EEPROM_V" )) output.append(Memory{}.type("EEPROM").size( 0x0).content("Save").text());
else if(list.left().beginsWith("FLASH_V" )) output.append(Memory{}.type("Flash" ).size(0x10000).category("Save").text()); else if(list.left().beginsWith("FLASH_V" )) output.append(Memory{}.type("Flash" ).size(0x10000).content("Save").text());
else if(list.left().beginsWith("FLASH512_V")) output.append(Memory{}.type("Flash" ).size(0x10000).category("Save").text()); else if(list.left().beginsWith("FLASH512_V")) output.append(Memory{}.type("Flash" ).size(0x10000).content("Save").text());
else if(list.left().beginsWith("FLASH1M_V" )) output.append(Memory{}.type("Flash" ).size(0x20000).category("Save").text()); else if(list.left().beginsWith("FLASH1M_V" )) output.append(Memory{}.type("Flash" ).size(0x20000).content("Save").text());
return output; return output;
} }

View File

@ -241,13 +241,13 @@ auto GameBoy::manifest() const -> string {
output.append(" label: ", Location::prefix(location), "\n"); output.append(" label: ", Location::prefix(location), "\n");
output.append(" name: ", Location::prefix(location), "\n"); output.append(" name: ", Location::prefix(location), "\n");
output.append(" board: ", mapper, "\n"); output.append(" board: ", mapper, "\n");
output.append(Memory{}.type("ROM").size(data.size()).category("Program").text()); output.append(Memory{}.type("ROM").size(data.size()).content("Program").text());
if(ram && ramSize) if(ram && ramSize)
output.append(Memory{}.type("RAM").size(ramSize).category("Save").battery(battery).text()); output.append(Memory{}.type("RAM").size(ramSize).content("Save").battery(battery).text());
if(flash && flashSize) if(flash && flashSize)
output.append(Memory{}.type("Flash").size(flashSize).category("Download").text()); output.append(Memory{}.type("Flash").size(flashSize).content("Download").text());
if(rtc && rtcSize) if(rtc && rtcSize)
output.append(Memory{}.type("RTC").size(rtcSize).category("Time").battery().text()); output.append(Memory{}.type("RTC").size(rtcSize).content("Time").battery().text());
if(accelerometer) if(accelerometer)
output.append(" accelerometer\n"); output.append(" accelerometer\n");
if(rumble) if(rumble)

View File

@ -24,8 +24,8 @@ auto GameGear::manifest() const -> string {
output.append(" label: ", Location::prefix(location), "\n"); output.append(" label: ", Location::prefix(location), "\n");
output.append(" name: ", Location::prefix(location), "\n"); output.append(" name: ", Location::prefix(location), "\n");
output.append(" board\n"); output.append(" board\n");
output.append(Memory{}.type("ROM").size(data.size()).category("Program").text()); output.append(Memory{}.type("ROM").size(data.size()).content("Program").text());
output.append(Memory{}.type("RAM").size(0x8000).category("Save").battery().text()); output.append(Memory{}.type("RAM").size(0x8000).content("Save").battery().text());
return output; return output;
} }

View File

@ -7,13 +7,13 @@ auto Memory::text() const -> string {
if(_battery) if(_battery)
output.append(" battery\n"); output.append(" battery\n");
output.append(" size: 0x", hex(_size), "\n"); output.append(" size: 0x", hex(_size), "\n");
output.append(" category: ", _category, "\n"); output.append(" content: ", _content, "\n");
if(_manufacturer) if(_manufacturer)
output.append(" manufacturer: ", _manufacturer, "\n"); output.append(" manufacturer: ", _manufacturer, "\n");
if(_model) if(_architecture)
output.append(" model: ", _model, "\n"); output.append(" architecture: ", _architecture, "\n");
if(_identity) if(_identifier)
output.append(" identity: ", _identity, "\n"); output.append(" identifier: ", _identifier, "\n");
return output; return output;
} }

View File

@ -4,19 +4,19 @@ struct Memory {
auto& type(string type) { _type = type; return *this; } auto& type(string type) { _type = type; return *this; }
auto& battery(boolean battery = true) { _battery = battery; return *this; } auto& battery(boolean battery = true) { _battery = battery; return *this; }
auto& size(natural size) { _size = size; return *this; } auto& size(natural size) { _size = size; return *this; }
auto& category(string category) { _category = category; return *this; } auto& content(string content) { _content = content; return *this; }
auto& manufacturer(string manufacturer) { _manufacturer = manufacturer; return *this; } auto& manufacturer(string manufacturer) { _manufacturer = manufacturer; return *this; }
auto& model(string model) { _model = model; return *this; } auto& architecture(string architecture) { _architecture = architecture; return *this; }
auto& identity(string identity) { _identity = identity; return *this; } auto& identifier(string identifier) { _identifier = identifier; return *this; }
auto text() const -> string; auto text() const -> string;
string _type; string _type;
boolean _battery; boolean _battery;
natural _size; natural _size;
string _category; string _content;
string _manufacturer; string _manufacturer;
string _model; string _architecture;
string _identity; string _identifier;
}; };
struct Oscillator { struct Oscillator {

View File

@ -24,8 +24,8 @@ auto MasterSystem::manifest() const -> string {
output.append(" label: ", Location::prefix(location), "\n"); output.append(" label: ", Location::prefix(location), "\n");
output.append(" name: ", Location::prefix(location), "\n"); output.append(" name: ", Location::prefix(location), "\n");
output.append(" board\n"); output.append(" board\n");
output.append(Memory{}.type("ROM").size(data.size()).category("Program").text()); output.append(Memory{}.type("ROM").size(data.size()).content("Program").text());
output.append(Memory{}.type("RAM").size(0x8000).category("Save").battery().text()); output.append(Memory{}.type("RAM").size(0x8000).content("Save").battery().text());
return output; return output;
} }

View File

@ -75,9 +75,9 @@ auto MegaDrive::manifest() const -> string {
output.append(" name: ", Location::prefix(location), "\n"); output.append(" name: ", Location::prefix(location), "\n");
output.append(" region: ", regions.left(), "\n"); output.append(" region: ", regions.left(), "\n");
output.append(" board\n"); output.append(" board\n");
output.append(Memory{}.type("ROM").size(data.size()).category("Program").text()); output.append(Memory{}.type("ROM").size(data.size()).content("Program").text());
if(ramSize && ramMode != "none") { if(ramSize && ramMode != "none") {
output.append(Memory{}.type("RAM").size(ramSize).category("Save").text()); output.append(Memory{}.type("RAM").size(ramSize).content("Save").text());
output.append(" mode: ", ramMode, "\n"); output.append(" mode: ", ramMode, "\n");
output.append(" offset: 0x", hex(ramFrom), "\n"); output.append(" offset: 0x", hex(ramFrom), "\n");
} }

View File

@ -29,7 +29,7 @@ auto PCEngine::manifest() const -> string {
output.append(" label: ", Location::prefix(location), "\n"); output.append(" label: ", Location::prefix(location), "\n");
output.append(" name: ", Location::prefix(location), "\n"); output.append(" name: ", Location::prefix(location), "\n");
output.append(" board\n"); output.append(" board\n");
output.append(Memory{}.type("ROM").size(data.size()).category("Program").text()); output.append(Memory{}.type("ROM").size(data.size()).content("Program").text());
return output; return output;
} }

View File

@ -30,9 +30,9 @@ auto SufamiTurbo::manifest() const -> string {
output.append(" label: ", Location::prefix(location), "\n"); output.append(" label: ", Location::prefix(location), "\n");
output.append(" name: ", Location::prefix(location), "\n"); output.append(" name: ", Location::prefix(location), "\n");
output.append(" board\n"); output.append(" board\n");
output.append(Memory{}.type("ROM").size(data.size()).category("Program").text()); output.append(Memory{}.type("ROM").size(data.size()).content("Program").text());
if(ramSize) if(ramSize)
output.append(Memory{}.type("RAM").size(ramSize).category("Save").battery().text()); output.append(Memory{}.type("RAM").size(ramSize).content("Save").battery().text());
return output; return output;
} }

View File

@ -68,52 +68,51 @@ auto SuperFamicom::manifest() const -> string {
if(auto size = romSize()) { if(auto size = romSize()) {
if(board(0) == "SPC7110") size = 0x100000; if(board(0) == "SPC7110") size = 0x100000;
output.append(Memory{}.type("ROM").size(size).category("Program").text()); output.append(Memory{}.type("ROM").size(size).content("Program").text());
} }
if(auto size = ramSize()) { if(auto size = ramSize()) {
output.append(Memory{}.type("RAM").size(size).category("Save").battery(battery()).text()); output.append(Memory{}.type("RAM").size(size).content("Save").battery(battery()).text());
} }
if(auto size = expansionRamSize()) { if(auto size = expansionRamSize()) {
output.append(Memory{}.type("RAM").size(size).category("Save").battery(battery()).text()); output.append(Memory{}.type("RAM").size(size).content("Save").battery(battery()).text());
} }
if(0) { if(0) {
} else if(board(0) == "ARM") { } else if(board(0) == "ARM") {
output.append(Memory{}.type("ROM").size(0x20000).category("Program").manufacturer("SETA").model("ARM6").identity(firmwareARM()).text()); output.append(Memory{}.type("ROM").size(0x20000).content("Program").manufacturer("SETA").architecture("ARM6").identifier(firmwareARM()).text());
output.append(Memory{}.type("ROM").size( 0x8000).category("Data" ).manufacturer("SETA").model("ARM6").identity(firmwareARM()).text()); output.append(Memory{}.type("ROM").size( 0x8000).content("Data" ).manufacturer("SETA").architecture("ARM6").identifier(firmwareARM()).text());
output.append(Memory{}.type("RAM").size( 0x4000).category("Data" ).manufacturer("SETA").model("ARM6").identity(firmwareARM()).text()); output.append(Memory{}.type("RAM").size( 0x4000).content("Data" ).manufacturer("SETA").architecture("ARM6").identifier(firmwareARM()).text());
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).category("Download").battery().text()); output.append(Memory{}.type("RAM").size(0x80000).content("Download").battery().text());
} else if(board(0) == "HITACHI") { } else if(board(0) == "HITACHI") {
output.append(Memory{}.type("ROM").size(0xc00).category("Data").manufacturer("Hitachi").model("HG51BS169").identity(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).category("Data").manufacturer("Hitachi").model("HG51BS169").identity(firmwareHITACHI()).text()); output.append(Memory{}.type("RAM").size(0xc00).content("Data").manufacturer("Hitachi").architecture("HG51BS169").identifier(firmwareHITACHI()).text());
output.append(Oscillator{}.frequency(20'000'000).text()); output.append(Oscillator{}.frequency(20'000'000).text());
} else if(board(0) == "NEC") { } else if(board(0) == "NEC") {
output.append(Memory{}.type("ROM").size(0x1800).category("Program").manufacturer("NEC").model("uPD7725").identity(firmwareNEC()).text()); output.append(Memory{}.type("ROM").size(0x1800).content("Program").manufacturer("NEC").architecture("uPD7725").identifier(firmwareNEC()).text());
output.append(Memory{}.type("ROM").size( 0x800).category("Data" ).manufacturer("NEC").model("uPD7725").identity(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).category("Data" ).manufacturer("NEC").model("uPD7725").identity(firmwareNEC()).text()); output.append(Memory{}.type("RAM").size( 0x200).content("Data" ).manufacturer("NEC").architecture("uPD7725").identifier(firmwareNEC()).text());
output.append(Oscillator{}.frequency(7'600'000).text()); output.append(Oscillator{}.frequency(7'600'000).text());
} else if(board(0) == "NECEX") { } else if(board(0) == "NECEX") {
output.append(Memory{}.type("ROM").size(0xc000).category("Program").manufacturer("NEC").model("uPD96050").identity(firmwareNECEX()).text()); output.append(Memory{}.type("ROM").size(0xc000).content("Program").manufacturer("NEC").architecture("uPD96050").identifier(firmwareNECEX()).text());
output.append(Memory{}.type("ROM").size(0x1000).category("Data" ).manufacturer("NEC").model("uPD96050").identity(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).category("Data" ).manufacturer("NEC").model("uPD96050").identity(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()); output.append(Oscillator{}.frequency(firmwareNECEX() == "ST010" ? 11'000'000 : 15'000'000).text());
} else if(board(0) == "RTC") { } else if(board(0) == "RTC") {
output.append(Memory{}.type("RTC").size(0x10).category("Time").battery().text()); output.append(Memory{}.type("RTC").size(0x10).content("Time").battery().text());
} else if(board(0) == "SA1") { } else if(board(0) == "SA1") {
output.append(Memory{}.type("RAM").size(0x800).category("Internal").text()); output.append(Memory{}.type("RAM").size(0x800).content("Internal").text());
} else if(board(0) == "SGB") { } else if(board(0) == "SGB") {
string model = firmwareSGB() == "SGB1" ? "DMG" : "MGB"; output.append(Memory{}.type("ROM").size(0x100).content("Boot").manufacturer("Nintendo").architecture("LR35902").identifier(firmwareSGB()).text());
output.append(Memory{}.type("ROM").size(0x100).category("Boot").manufacturer("Nintendo").model(model).identity(firmwareSGB()).text());
if(firmwareSGB() == "SGB2") if(firmwareSGB() == "SGB2")
output.append(Oscillator{}.frequency(20'971'520).text()); 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).category("Data").text()); output.append(Memory{}.type("ROM").size(romSize() - 0x100000).content("Data").text());
if(board(1) == "RTC") if(board(1) == "RTC")
output.append(Memory{}.type("RTC").size(0x10).category("Time").battery().text()); output.append(Memory{}.type("RTC").size(0x10).content("Time").battery().text());
} else if(board(0) == "SUPERFX") { } else if(board(0) == "SUPERFX") {
//todo: MARIO CHIP 1 uses CPU oscillator //todo: MARIO CHIP 1 uses CPU oscillator
output.append(Oscillator{}.frequency(21'440'000).text()); output.append(Oscillator{}.frequency(21'440'000).text());

View File

@ -24,7 +24,7 @@ auto SuperGrafx::manifest() const -> string {
output.append(" label: ", Location::prefix(location), "\n"); output.append(" label: ", Location::prefix(location), "\n");
output.append(" name: ", Location::prefix(location), "\n"); output.append(" name: ", Location::prefix(location), "\n");
output.append(" board\n"); output.append(" board\n");
output.append(Memory{}.type("ROM").size(data.size()).category("Program").text()); output.append(Memory{}.type("ROM").size(data.size()).content("Program").text());
return output; return output;
} }

View File

@ -47,11 +47,11 @@ auto WonderSwan::manifest() const -> string {
output.append(" name: ", Location::prefix(location), "\n"); output.append(" name: ", Location::prefix(location), "\n");
output.append(" orientation: ", !orientation ? "horizontal" : "vertical", "\n"); output.append(" orientation: ", !orientation ? "horizontal" : "vertical", "\n");
output.append(" board\n"); output.append(" board\n");
output.append(Memory{}.type("ROM").size(data.size()).category("Program").text()); output.append(Memory{}.type("ROM").size(data.size()).content("Program").text());
if(ramType && ramSize) if(ramType && ramSize)
output.append(Memory{}.type(ramType).size(ramSize).category("Save").battery(ramType == "RAM").text()); output.append(Memory{}.type(ramType).size(ramSize).content("Save").battery(ramType == "RAM").text());
if(hasRTC) if(hasRTC)
output.append(Memory{}.type("RTC").size(0x10).category("Time").text()); output.append(Memory{}.type("RTC").size(0x10).content("Time").text());
return output; return output;
} }