2015-12-19 09:00:27 +00:00
|
|
|
auto Icarus::famicomManifest(string location) -> string {
|
Update to v097r14 release.
byuu says:
This is a few days old, but oh well.
This WIP changes nall,hiro,ruby,icarus back to (u)int(8,16,32,64)_t.
I'm slowly pushing for (u)int(8,16,32,64) to use my custom
Integer<Size>/Natural<Size> classes instead. But it's going to be one
hell of a struggle to get that into higan.
2016-02-16 09:11:58 +00:00
|
|
|
vector<uint8_t> buffer;
|
2015-08-21 11:29:53 +00:00
|
|
|
concatenate(buffer, {location, "ines.rom"});
|
|
|
|
concatenate(buffer, {location, "program.rom"});
|
|
|
|
concatenate(buffer, {location, "character.rom"});
|
|
|
|
return famicomManifest(buffer, location);
|
|
|
|
}
|
|
|
|
|
Update to v097r14 release.
byuu says:
This is a few days old, but oh well.
This WIP changes nall,hiro,ruby,icarus back to (u)int(8,16,32,64)_t.
I'm slowly pushing for (u)int(8,16,32,64) to use my custom
Integer<Size>/Natural<Size> classes instead. But it's going to be one
hell of a struggle to get that into higan.
2016-02-16 09:11:58 +00:00
|
|
|
auto Icarus::famicomManifest(vector<uint8_t>& buffer, string location, uint* prgrom, uint* chrrom) -> string {
|
2015-09-28 11:56:46 +00:00
|
|
|
string markup;
|
2015-12-19 09:00:27 +00:00
|
|
|
string digest = Hash::SHA256(buffer.data(), buffer.size()).digest();
|
|
|
|
|
|
|
|
if(settings["icarus/UseDatabase"].boolean() && !markup) {
|
|
|
|
for(auto node : database.famicom) {
|
|
|
|
if(node["sha256"].text() == digest) {
|
|
|
|
markup.append(node.text(), "\n sha256: ", digest, "\n");
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2015-08-21 11:29:53 +00:00
|
|
|
|
2015-12-19 09:00:27 +00:00
|
|
|
if(settings["icarus/UseHeuristics"].boolean() && !markup) {
|
2015-09-28 11:56:46 +00:00
|
|
|
FamicomCartridge cartridge{buffer.data(), buffer.size()};
|
|
|
|
if(markup = cartridge.markup) {
|
|
|
|
markup.append("\n");
|
|
|
|
markup.append("information\n");
|
Update to v099r16 release (public beta).
byuu says:
Changelog:
- hiro: BrowserDialog can navigate up to drive selection on Windows
- nall: (file,path,dir,base,prefix,suffix)name =>
Location::(file,path,dir,base,prefix,suffix)
- higan/tomoko: rename audio filter label from "Sinc" to "IIR - Biquad"
- higan/tomoko: allow loading files via icarus on the command-line
once again
- higan/tomoko: (begrudging) quick hack to fix presentation window focus
on startup
- higan/audio: don't divide output audio volume by number of streams
- processor/r65816: fix a regression in (read,write)DB; fixes Taz-Mania
- fixed compilation regressions on Windows and Linux
I'm happy with where we are at with code cleanups and stability, so I'd
like to release v100. But even though I'm not assigning any special
significance to this version, we should probably test it more thoroughly
first.
2016-07-04 11:53:24 +00:00
|
|
|
markup.append(" title: ", Location::prefix(location), "\n");
|
2015-12-19 09:00:27 +00:00
|
|
|
markup.append(" sha256: ", digest, "\n");
|
|
|
|
markup.append(" note: ", "heuristically generated by icarus\n");
|
2015-09-28 11:56:46 +00:00
|
|
|
}
|
2015-12-19 09:00:27 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
auto document = BML::unserialize(markup);
|
|
|
|
if(prgrom) *prgrom = document["board/prg/rom/size"].natural(); //0 if node does not exist
|
|
|
|
if(chrrom) *chrrom = document["board/chr/rom/size"].natural(); //0 if node does not exist
|
|
|
|
|
|
|
|
return markup;
|
|
|
|
}
|
|
|
|
|
Update to v097r14 release.
byuu says:
This is a few days old, but oh well.
This WIP changes nall,hiro,ruby,icarus back to (u)int(8,16,32,64)_t.
I'm slowly pushing for (u)int(8,16,32,64) to use my custom
Integer<Size>/Natural<Size> classes instead. But it's going to be one
hell of a struggle to get that into higan.
2016-02-16 09:11:58 +00:00
|
|
|
auto Icarus::famicomImport(vector<uint8_t>& buffer, string location) -> string {
|
Update to v099r16 release (public beta).
byuu says:
Changelog:
- hiro: BrowserDialog can navigate up to drive selection on Windows
- nall: (file,path,dir,base,prefix,suffix)name =>
Location::(file,path,dir,base,prefix,suffix)
- higan/tomoko: rename audio filter label from "Sinc" to "IIR - Biquad"
- higan/tomoko: allow loading files via icarus on the command-line
once again
- higan/tomoko: (begrudging) quick hack to fix presentation window focus
on startup
- higan/audio: don't divide output audio volume by number of streams
- processor/r65816: fix a regression in (read,write)DB; fixes Taz-Mania
- fixed compilation regressions on Windows and Linux
I'm happy with where we are at with code cleanups and stability, so I'd
like to release v100. But even though I'm not assigning any special
significance to this version, we should probably test it more thoroughly
first.
2016-07-04 11:53:24 +00:00
|
|
|
auto name = Location::prefix(location);
|
|
|
|
auto source = Location::path(location);
|
2015-12-19 09:00:27 +00:00
|
|
|
string target{settings["Library/Location"].text(), "Famicom/", name, ".fc/"};
|
|
|
|
//if(directory::exists(target)) return failure("game already exists");
|
2015-08-21 11:29:53 +00:00
|
|
|
|
2015-12-19 09:00:27 +00:00
|
|
|
uint prgrom = 0;
|
|
|
|
uint chrrom = 0;
|
|
|
|
auto markup = famicomManifest(buffer, location, &prgrom, &chrrom);
|
2015-09-28 11:56:46 +00:00
|
|
|
if(!markup) return failure("failed to parse ROM image");
|
2016-01-23 07:29:34 +00:00
|
|
|
|
2015-08-21 11:29:53 +00:00
|
|
|
if(!directory::create(target)) return failure("library path unwritable");
|
2016-01-23 07:29:34 +00:00
|
|
|
if(file::exists({source, name, ".sav"}) && !file::exists({target, "save.ram"})) {
|
|
|
|
file::copy({source, name, ".sav"}, {target, "save.ram"});
|
|
|
|
}
|
2015-08-21 11:29:53 +00:00
|
|
|
|
2015-11-19 09:27:56 +00:00
|
|
|
if(settings["icarus/CreateManifests"].boolean()) file::write({target, "manifest.bml"}, markup);
|
2015-08-21 11:29:53 +00:00
|
|
|
file::write({target, "ines.rom"}, buffer.data(), 16);
|
2015-12-19 09:00:27 +00:00
|
|
|
file::write({target, "program.rom"}, buffer.data() + 16, prgrom);
|
Update to v096r06 release.
byuu says:
This WIP finally achieves the vision I've had for icarus.
I also fixed a mapping issue with Cx4 that, oddly enough, only caused
the "2" from the Mega Man X2 title screen to disappear.
[Editor's note - "the vision for icarus" was described in a separate,
public forum post: http://board.byuu.org/phpbb3/viewtopic.php?p=20584
Quoting for posterity:
icarus is now a full-fledged part of higan, and will be bundled with
each higan WIP as well. This will ensure that in the future, the
exact version of icarus you need to run higan will be included right
along with it. As of this WIP, physical manifest files are now truly
and entirely optional.
From now on, you can associate your ROM image files with higan's
main binary, or drop them directly on top of it, to load and play
your games.
Furthermore, there are two new menu options that appear under the
library menu when icarus is present:
- "Load ROM File ..." => gives you a single-file selection dialog to
import (and if possible) run the game
- "Import ROM Files ..." => gives you a multi-file import dialog
with checkboxes to pull in multiple games at once
Finally, as before, icarus can generate manifest.bml files for
folders that lack them.
For people who like the game folder and library system, nothing's
changed. Keep using higan as you have been.
For people who hate it, you can now use higan like your classic
emulators. Treat the "Library->{System Name}" entries as your
"favorites" list: the games you actually play. Treat the
"Library->Load ROM" as your standard open file dialog in other
emulators. And finally, treat "Advanced->Game Library" as your save
data path for cheat codes, save states, save RAM, etc.
]
2016-01-13 10:47:45 +00:00
|
|
|
if(!chrrom) return success(target);
|
2015-12-19 09:00:27 +00:00
|
|
|
file::write({target, "character.rom"}, buffer.data() + 16 + prgrom, chrrom);
|
Update to v096r06 release.
byuu says:
This WIP finally achieves the vision I've had for icarus.
I also fixed a mapping issue with Cx4 that, oddly enough, only caused
the "2" from the Mega Man X2 title screen to disappear.
[Editor's note - "the vision for icarus" was described in a separate,
public forum post: http://board.byuu.org/phpbb3/viewtopic.php?p=20584
Quoting for posterity:
icarus is now a full-fledged part of higan, and will be bundled with
each higan WIP as well. This will ensure that in the future, the
exact version of icarus you need to run higan will be included right
along with it. As of this WIP, physical manifest files are now truly
and entirely optional.
From now on, you can associate your ROM image files with higan's
main binary, or drop them directly on top of it, to load and play
your games.
Furthermore, there are two new menu options that appear under the
library menu when icarus is present:
- "Load ROM File ..." => gives you a single-file selection dialog to
import (and if possible) run the game
- "Import ROM Files ..." => gives you a multi-file import dialog
with checkboxes to pull in multiple games at once
Finally, as before, icarus can generate manifest.bml files for
folders that lack them.
For people who like the game folder and library system, nothing's
changed. Keep using higan as you have been.
For people who hate it, you can now use higan like your classic
emulators. Treat the "Library->{System Name}" entries as your
"favorites" list: the games you actually play. Treat the
"Library->Load ROM" as your standard open file dialog in other
emulators. And finally, treat "Advanced->Game Library" as your save
data path for cheat codes, save states, save RAM, etc.
]
2016-01-13 10:47:45 +00:00
|
|
|
return success(target);
|
2015-08-21 11:29:53 +00:00
|
|
|
}
|