2015-09-28 11:56:46 +00:00
|
|
|
Icarus::Icarus() {
|
2016-01-30 06:40:35 +00:00
|
|
|
database.famicom = BML::unserialize(string::read(locate("Database/Famicom.bml")));
|
|
|
|
database.superFamicom = BML::unserialize(string::read(locate("Database/Super Famicom.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.gameBoyAdvance = BML::unserialize(string::read(locate("Database/Game Boy Advance.bml")));
|
|
|
|
database.wonderSwan = BML::unserialize(string::read(locate("Database/WonderSwan.bml")));
|
|
|
|
database.wonderSwanColor = BML::unserialize(string::read(locate("Database/WonderSwan Color.bml")));
|
|
|
|
database.bsMemory = BML::unserialize(string::read(locate("Database/BS Memory.bml")));
|
|
|
|
database.sufamiTurbo = BML::unserialize(string::read(locate("Database/Sufami Turbo.bml")));
|
2015-09-28 11:56:46 +00:00
|
|
|
}
|
|
|
|
|
2015-08-21 11:29:53 +00:00
|
|
|
auto Icarus::error() const -> string {
|
|
|
|
return errorMessage;
|
|
|
|
}
|
|
|
|
|
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
|
|
|
auto Icarus::success(string location) -> string {
|
2015-08-21 11:29:53 +00:00
|
|
|
errorMessage = "";
|
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 location;
|
2015-08-21 11:29:53 +00:00
|
|
|
}
|
|
|
|
|
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
|
|
|
auto Icarus::failure(string message) -> string {
|
2015-08-21 11:29:53 +00:00
|
|
|
errorMessage = message;
|
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 {};
|
2015-08-21 11:29:53 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
auto Icarus::manifest(string location) -> string {
|
|
|
|
location.transform("\\", "/").rtrim("/").append("/");
|
|
|
|
if(!directory::exists(location)) return "";
|
|
|
|
|
2015-09-28 11:56:46 +00:00
|
|
|
auto type = suffixname(location).downcase();
|
2015-08-21 11:29:53 +00:00
|
|
|
if(type == ".fc") return famicomManifest(location);
|
|
|
|
if(type == ".sfc") return superFamicomManifest(location);
|
|
|
|
if(type == ".gb") return gameBoyManifest(location);
|
|
|
|
if(type == ".gbc") return gameBoyColorManifest(location);
|
|
|
|
if(type == ".gba") return gameBoyAdvanceManifest(location);
|
2016-01-30 06:40:35 +00:00
|
|
|
if(type == ".ws") return wonderSwanManifest(location);
|
|
|
|
if(type == ".wsc") return wonderSwanColorManifest(location);
|
2015-12-19 09:00:27 +00:00
|
|
|
if(type == ".bs") return bsMemoryManifest(location);
|
2015-08-21 11:29:53 +00:00
|
|
|
if(type == ".st") return sufamiTurboManifest(location);
|
|
|
|
|
|
|
|
return "";
|
|
|
|
}
|
|
|
|
|
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
|
|
|
auto Icarus::import(string location) -> string {
|
2015-08-21 11:29:53 +00:00
|
|
|
location.transform("\\", "/").rtrim("/");
|
|
|
|
if(!file::exists(location)) return failure("file does not exist");
|
|
|
|
if(!file::readable(location)) return failure("file is unreadable");
|
|
|
|
|
2015-09-28 11:56:46 +00:00
|
|
|
auto name = prefixname(location);
|
|
|
|
auto type = suffixname(location).downcase();
|
2015-08-21 11:29:53 +00:00
|
|
|
if(!name || !type) return failure("invalid file name");
|
|
|
|
|
|
|
|
auto buffer = file::read(location);
|
|
|
|
if(!buffer) return failure("file is empty");
|
|
|
|
|
|
|
|
if(type == ".zip") {
|
|
|
|
Decode::ZIP zip;
|
|
|
|
if(!zip.open(location)) return failure("ZIP archive is invalid");
|
|
|
|
if(!zip.file) return failure("ZIP archive is empty");
|
|
|
|
|
2015-09-28 11:56:46 +00:00
|
|
|
name = prefixname(zip.file[0].name);
|
|
|
|
type = suffixname(zip.file[0].name).downcase();
|
2015-08-21 11:29:53 +00:00
|
|
|
buffer = zip.extract(zip.file[0]);
|
|
|
|
}
|
|
|
|
|
|
|
|
if(type == ".fc" || type == ".nes") return famicomImport(buffer, location);
|
|
|
|
if(type == ".sfc" || type == ".smc") return superFamicomImport(buffer, location);
|
|
|
|
if(type == ".gb") return gameBoyImport(buffer, location);
|
|
|
|
if(type == ".gbc") return gameBoyColorImport(buffer, location);
|
|
|
|
if(type == ".gba") return gameBoyAdvanceImport(buffer, location);
|
2016-01-30 06:40:35 +00:00
|
|
|
if(type == ".ws") return wonderSwanImport(buffer, location);
|
|
|
|
if(type == ".wsc") return wonderSwanColorImport(buffer, location);
|
2015-12-19 09:00:27 +00:00
|
|
|
if(type == ".bs") return bsMemoryImport(buffer, location);
|
2015-08-21 11:29:53 +00:00
|
|
|
if(type == ".st") return sufamiTurboImport(buffer, location);
|
|
|
|
|
|
|
|
return failure("unrecognized file extension");
|
|
|
|
}
|
|
|
|
|
2015-12-19 09:00:27 +00:00
|
|
|
auto Icarus::concatenate(vector<uint8>& output, string location) -> void {
|
2015-08-21 11:29:53 +00:00
|
|
|
if(auto input = file::read(location)) {
|
|
|
|
auto size = output.size();
|
|
|
|
output.resize(size + input.size());
|
|
|
|
memory::copy(output.data() + size, input.data(), input.size());
|
|
|
|
}
|
|
|
|
}
|