2015-08-21 11:29:53 +00:00
|
|
|
#include <nall/nall.hpp>
|
|
|
|
using namespace nall;
|
|
|
|
|
|
|
|
#include <hiro/hiro.hpp>
|
|
|
|
using namespace hiro;
|
|
|
|
|
2016-01-30 06:40:35 +00:00
|
|
|
auto locate(string name) -> string {
|
|
|
|
string location = {programpath(), name};
|
2015-11-19 09:27:56 +00:00
|
|
|
if(file_system_object::exists(location)) return location;
|
2016-01-30 06:40:35 +00:00
|
|
|
|
|
|
|
location = {configpath(), "icarus/", name};
|
|
|
|
if(file_system_object::exists(location)) return location;
|
|
|
|
|
|
|
|
directory::create({localpath(), "icarus/"});
|
|
|
|
return {localpath(), "icarus/", name};
|
2015-11-19 09:27:56 +00:00
|
|
|
}
|
|
|
|
|
2015-08-21 11:29:53 +00:00
|
|
|
#include "settings.cpp"
|
|
|
|
Settings settings;
|
|
|
|
|
2016-01-30 06:40:35 +00:00
|
|
|
#include "heuristics/famicom.cpp"
|
|
|
|
#include "heuristics/super-famicom.cpp"
|
|
|
|
#include "heuristics/game-boy.cpp"
|
|
|
|
#include "heuristics/game-boy-advance.cpp"
|
|
|
|
#include "heuristics/wonderswan.cpp"
|
|
|
|
#include "heuristics/wonderswan-color.cpp"
|
|
|
|
#include "heuristics/bs-memory.cpp"
|
|
|
|
#include "heuristics/sufami-turbo.cpp"
|
2015-08-21 11:29:53 +00:00
|
|
|
|
|
|
|
#include "core/core.hpp"
|
|
|
|
#include "core/core.cpp"
|
|
|
|
#include "core/famicom.cpp"
|
|
|
|
#include "core/super-famicom.cpp"
|
|
|
|
#include "core/game-boy.cpp"
|
|
|
|
#include "core/game-boy-color.cpp"
|
|
|
|
#include "core/game-boy-advance.cpp"
|
2016-01-30 06:40:35 +00:00
|
|
|
#include "core/wonderswan.cpp"
|
|
|
|
#include "core/wonderswan-color.cpp"
|
2015-12-19 09:00:27 +00:00
|
|
|
#include "core/bs-memory.cpp"
|
2015-08-21 11:29:53 +00:00
|
|
|
#include "core/sufami-turbo.cpp"
|
|
|
|
Icarus icarus;
|
|
|
|
|
|
|
|
#include "ui/ui.hpp"
|
|
|
|
#include "ui/scan-dialog.cpp"
|
2015-11-19 09:27:56 +00:00
|
|
|
#include "ui/settings-dialog.cpp"
|
2015-08-21 11:29:53 +00:00
|
|
|
#include "ui/import-dialog.cpp"
|
|
|
|
#include "ui/error-dialog.cpp"
|
|
|
|
|
|
|
|
#include <nall/main.hpp>
|
|
|
|
auto nall::main(lstring args) -> void {
|
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(args.size() == 2 && args[1] == "--name") {
|
|
|
|
return print("icarus");
|
|
|
|
}
|
|
|
|
|
|
|
|
if(args.size() == 3 && args[1] == "--manifest" && directory::exists(args[2])) {
|
2015-08-21 11:29:53 +00:00
|
|
|
return print(icarus.manifest(args[2]));
|
|
|
|
}
|
|
|
|
|
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(args.size() == 3 && args[1] == "--import" && file::exists(args[2])) {
|
|
|
|
if(string target = icarus.import(args[2])) {
|
|
|
|
return print(target, "\n");
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
if(args.size() == 2 && args[1] == "--import") {
|
|
|
|
if(string source = BrowserDialog()
|
|
|
|
.setTitle("Load ROM Image")
|
|
|
|
.setPath(settings["icarus/Path"].text())
|
2016-01-30 06:40:35 +00:00
|
|
|
.setFilters("ROM Files|*.fc:*.nes:*.sfc:*.smc:*.gb:*.gbc:*.gba:*.ws:*.wsc:*.bs:*.st:*.zip")
|
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
|
|
|
.openFile()) {
|
|
|
|
if(string target = icarus.import(source)) {
|
|
|
|
settings["icarus/Path"].setValue(pathname(source));
|
|
|
|
return print(target, "\n");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2015-08-21 11:29:53 +00:00
|
|
|
new ScanDialog;
|
2015-11-19 09:27:56 +00:00
|
|
|
new SettingsDialog;
|
2015-08-21 11:29:53 +00:00
|
|
|
new ImportDialog;
|
|
|
|
new ErrorDialog;
|
2016-01-15 10:28:51 +00:00
|
|
|
#if defined(PLATFORM_MACOSX)
|
|
|
|
Application::Cocoa::onAbout([&] {
|
|
|
|
MessageDialog().setTitle("About icarus").setText({
|
|
|
|
"icarus\n\n"
|
|
|
|
"Author: byuu\n"
|
|
|
|
"License: GPLv3\n"
|
|
|
|
"Website: http://byuu.org/\n"
|
|
|
|
}).information();
|
|
|
|
});
|
|
|
|
Application::Cocoa::onPreferences([&] {
|
|
|
|
scanDialog->settingsButton.doActivate();
|
|
|
|
});
|
Update to v097 release.
byuu says:
This release features improvements to all emulation cores, but most
substantially for the Game Boy core. All of blargg's test ROMs that pass
in gambatte now either pass in higan, or are off by 1-2 clocks (the
actual behaviors are fully emulated.) I consider the Game Boy core to
now be fairly accurate, but there's still more improvements to be had.
Also, what's sure to be a major feature for some: higan now has full
support for loading and playing ordinary ROM files, whether they have
copier headers, weird extensions, or are inside compressed archives. You
can load these games from the command-line, from the main Library menu
(via Load ROM Image), or via drag-and-drop on the main higan window. Of
course, fans of game folders and the library need not worry: that's
still there as well.
Also new, you can drop the (uncompressed) Game Boy Advance BIOS onto the
higan main window to install it into the correct location with the
correct file name.
Lastly, this release technically restores Mac OS X support. However,
it's still not very stable, so I have decided against releasing binaries
at this time. I'd rather not rush this and leave a bad first impression
for OS X users.
Changelog (since v096):
- higan: project source code hierarchy restructured; icarus directly
integrated
- higan: added software emulation of color-bleed, LCD-refresh,
scanlines, interlacing
- icarus: you can now load and import ROM files/archives from the main
higan menu
- NES: fixed manifest parsing for board mirroring and VRC pinouts
- SNES: fixed manifest for Star Ocean
- SNES: fixed manifest for Rockman X2,X3
- GB: enabling LCD restarts frame
- GB: emulated extra OAM STAT IRQ quirk required for GBVideoPlayer
(Shonumi)
- GB: VBK, BGPI, OBPI are readable
- GB: OAM DMA happens inside PPU core instead of CPU core
- GB: fixed APU length and sweep operations
- GB: emulated wave RAM quirks when accessing while channel is enabled
- GB: improved timings of several CPU opcodes (gekkio)
- GB: improved timings of OAM DMA refresh (gekkio)
- GB: CPU uses open collector logic; return 0xFF for unmapped memory
(gekkio)
- GBA: fixed sequencer enable flags; fixes audio in Zelda - Minish Cap
(Jonas Quinn)
- GBA: fixed disassembler masking error (Lioncash)
- hiro: Cocoa support added; higan can now be compiled on Mac OS X 10.7+
- nall: improved program path detection on Windows
- higan/Windows: moved configuration data from %appdata% to
%localappdata%
- higan/Linux,BSD: moved configuration data from ~/.config/higan to
~/.local/higan
2016-01-17 08:59:25 +00:00
|
|
|
Application::Cocoa::onQuit([&] {
|
2016-01-15 10:28:51 +00:00
|
|
|
Application::quit();
|
|
|
|
});
|
|
|
|
#endif
|
2015-08-21 11:29:53 +00:00
|
|
|
scanDialog->show();
|
|
|
|
Application::run();
|
|
|
|
}
|