2012-04-29 06:16:44 +00:00
|
|
|
#include <sfc/sfc.hpp>
|
2011-09-15 12:41:49 +00:00
|
|
|
|
2012-04-26 10:51:13 +00:00
|
|
|
namespace SuperFamicom {
|
2011-09-15 12:41:49 +00:00
|
|
|
|
Update to v083r08 release.
byuu says:
Fixed SA-1 IRQ regression for Super Mario RPG
Added turbo B,A to NES+GB; B,A,X,Y to SNES (please don't ask for turbo
L,R; you never use those keys rapidly.)
Re-added video color adjustments, which are now done in full 8-bit
colorspace for more precision
Gamma ramp option is gone. It's now the gamma option, which now only
affects the lower-half of the colors.
A value of 1.0 gives you the original, washed out colors. 1.75 is what
the gamma ramp checkbox used to do (roughly).
The new default is 1.5, which still prevents color washout, but isn't as
overly dark as before.
I wanted to make the core/interface stuff abstract the complexity of
setting up a new C++ class, but it really didn't make anything easier.
It was all one-line stubs to internal functions, and there was just too
many platform-specific things that needed to be captured, so I did away
with that. Made a base class for the ui/interface stuff to get rid of
a lot of switch(mode()) stuff, still a work in progress.
2011-10-29 07:32:20 +00:00
|
|
|
Interface *interface = nullptr;
|
2011-09-15 12:41:49 +00:00
|
|
|
|
Update to v088r10 release.
byuu says:
ethos is going to be absolutely amazing. You guys are in for a treat :D
I'm impressing the hell out of myself with how well-structured this code
is, it's allowing me to do amazing new things.
Just a small sampling of what's in store (and already implemented):
The file browser will display folders as "[ folder name ]", and
cartridge folders as "Game Name" (no extension, no /) [icons would be
nicer, but well ... phoenix.]
Folders are sorted above cartridge folders.
Cartridge folders for other systems do not show up in the list.
Not only are unique paths stored for each image type, your position in
the list is saved across runs.
Some voodoo was added to GTK+ so that all targets even scroll directly
to that item when you open the list. Load->System->Enter restarts your
last game.
That sounds really simple and obvious, but it makes an -incredible-
difference. Didn't realize it until I tried an implementation of it,
wow.
The input mapping list now lets you bind as many hotkeys as you want to
any given input.
So SFC::Port1::Joypad::B = Keyboard::Z or Joypad::Button1 ... no need to
remap everything to switch between keyboard and joypad. Either one
activates the key.
There is a separate Hotkeys tab now. This should hopefully end the
confusion about how to remap hotkeys that users experience.
Hotkeys are different, too. Instead of OR logic, they use AND logic.
So Fullscreen = Keyboard::Alt and Keyboard::Enter. Both must be pressed
to enter the key. This lets you easily implement "super" modifier keys.
The actual codebase has new features the old UI never had, and has about
~50% of the old functionality (so far, of course), yet is only ~25% as
much code.
The entire GUI no longer needs to pull in all the headers for each
emulated system. It just needs a small interface header file.
Then bind the entire system with exactly **two** lines of code.
Everything is dynamically generated for you after that.
2012-04-30 23:43:23 +00:00
|
|
|
bool Interface::loaded() {
|
|
|
|
return cartridge.loaded();
|
|
|
|
}
|
|
|
|
|
|
|
|
void Interface::load(unsigned id, const stream &stream, const string &markup) {
|
Update to v088r11 release.
byuu says:
Changelog:
- phoenix has added Window::setModal(bool modal = true);
- file dialog is now modal. This allows emulation cores to request data
and get it immediately before continuing the loading process
- save data is hooked up for most systems, still need to handle
subsystem slot saves (Sufami Turbo, basically.)
- toggle fullscreen key binding added (Alt+Enter for now. I think F11 is
probably better though, Enter is often mapped to game start button.)
- video scaling is in (center, scale, stretch), works the same in
windowed and fullscreen mode (stretch hides resize window option), all
in the settings menu now
- enough structure to map all saved paths for the browser and to load
BS-X slotted carts, BS-X carts, single Sufami Turbo carts
Caveats / Missing:
- Super Game Boy input doesn't work yet (due to change in callback
binding)
- doesn't load secondary Sufami Turbo slot yet
- BS-X BIOS isn't show the data pack games to load for some reason (ugh,
I hate the shit out of debugging BS-X stuff ...)
- need mute audio, sync audio+video toggle, save/load state menu and
quick keys, XML mapping information window
- need cheat editor and cheat database
- need state manager
- need to sort subsystems below main systems in load menu (basically
just see if media.slot.size() > 0)
- need video shaders (will probably leave off filters for the time being
... due to that 24/30-bit thing)
- need video adjustments (contrast etc, overscan masks)
- need audio adjustments (frequency, latency, resampler, volume,
per-system frequency)
- need driver selection and input focus policy (driver crash detection
would be nice too)
- need NSS DIP switch settings (that one will be really fun)
- need to save and load window geometry settings
- need to hook up controller selection (won't be fun), create a map to
hide controllers with no inputs to reassign
2012-05-03 12:36:47 +00:00
|
|
|
if(id == ID::IPLROM) {
|
Update to v088r10 release.
byuu says:
ethos is going to be absolutely amazing. You guys are in for a treat :D
I'm impressing the hell out of myself with how well-structured this code
is, it's allowing me to do amazing new things.
Just a small sampling of what's in store (and already implemented):
The file browser will display folders as "[ folder name ]", and
cartridge folders as "Game Name" (no extension, no /) [icons would be
nicer, but well ... phoenix.]
Folders are sorted above cartridge folders.
Cartridge folders for other systems do not show up in the list.
Not only are unique paths stored for each image type, your position in
the list is saved across runs.
Some voodoo was added to GTK+ so that all targets even scroll directly
to that item when you open the list. Load->System->Enter restarts your
last game.
That sounds really simple and obvious, but it makes an -incredible-
difference. Didn't realize it until I tried an implementation of it,
wow.
The input mapping list now lets you bind as many hotkeys as you want to
any given input.
So SFC::Port1::Joypad::B = Keyboard::Z or Joypad::Button1 ... no need to
remap everything to switch between keyboard and joypad. Either one
activates the key.
There is a separate Hotkeys tab now. This should hopefully end the
confusion about how to remap hotkeys that users experience.
Hotkeys are different, too. Instead of OR logic, they use AND logic.
So Fullscreen = Keyboard::Alt and Keyboard::Enter. Both must be pressed
to enter the key. This lets you easily implement "super" modifier keys.
The actual codebase has new features the old UI never had, and has about
~50% of the old functionality (so far, of course), yet is only ~25% as
much code.
The entire GUI no longer needs to pull in all the headers for each
emulated system. It just needs a small interface header file.
Then bind the entire system with exactly **two** lines of code.
Everything is dynamically generated for you after that.
2012-04-30 23:43:23 +00:00
|
|
|
stream.read(smp.iplrom, min(64u, stream.size()));
|
|
|
|
}
|
|
|
|
|
Update to v088r11 release.
byuu says:
Changelog:
- phoenix has added Window::setModal(bool modal = true);
- file dialog is now modal. This allows emulation cores to request data
and get it immediately before continuing the loading process
- save data is hooked up for most systems, still need to handle
subsystem slot saves (Sufami Turbo, basically.)
- toggle fullscreen key binding added (Alt+Enter for now. I think F11 is
probably better though, Enter is often mapped to game start button.)
- video scaling is in (center, scale, stretch), works the same in
windowed and fullscreen mode (stretch hides resize window option), all
in the settings menu now
- enough structure to map all saved paths for the browser and to load
BS-X slotted carts, BS-X carts, single Sufami Turbo carts
Caveats / Missing:
- Super Game Boy input doesn't work yet (due to change in callback
binding)
- doesn't load secondary Sufami Turbo slot yet
- BS-X BIOS isn't show the data pack games to load for some reason (ugh,
I hate the shit out of debugging BS-X stuff ...)
- need mute audio, sync audio+video toggle, save/load state menu and
quick keys, XML mapping information window
- need cheat editor and cheat database
- need state manager
- need to sort subsystems below main systems in load menu (basically
just see if media.slot.size() > 0)
- need video shaders (will probably leave off filters for the time being
... due to that 24/30-bit thing)
- need video adjustments (contrast etc, overscan masks)
- need audio adjustments (frequency, latency, resampler, volume,
per-system frequency)
- need driver selection and input focus policy (driver crash detection
would be nice too)
- need NSS DIP switch settings (that one will be really fun)
- need to save and load window geometry settings
- need to hook up controller selection (won't be fun), create a map to
hide controllers with no inputs to reassign
2012-05-03 12:36:47 +00:00
|
|
|
if(id == ID::ROM) {
|
|
|
|
cartridge.load(markup, stream);
|
Update to v088r10 release.
byuu says:
ethos is going to be absolutely amazing. You guys are in for a treat :D
I'm impressing the hell out of myself with how well-structured this code
is, it's allowing me to do amazing new things.
Just a small sampling of what's in store (and already implemented):
The file browser will display folders as "[ folder name ]", and
cartridge folders as "Game Name" (no extension, no /) [icons would be
nicer, but well ... phoenix.]
Folders are sorted above cartridge folders.
Cartridge folders for other systems do not show up in the list.
Not only are unique paths stored for each image type, your position in
the list is saved across runs.
Some voodoo was added to GTK+ so that all targets even scroll directly
to that item when you open the list. Load->System->Enter restarts your
last game.
That sounds really simple and obvious, but it makes an -incredible-
difference. Didn't realize it until I tried an implementation of it,
wow.
The input mapping list now lets you bind as many hotkeys as you want to
any given input.
So SFC::Port1::Joypad::B = Keyboard::Z or Joypad::Button1 ... no need to
remap everything to switch between keyboard and joypad. Either one
activates the key.
There is a separate Hotkeys tab now. This should hopefully end the
confusion about how to remap hotkeys that users experience.
Hotkeys are different, too. Instead of OR logic, they use AND logic.
So Fullscreen = Keyboard::Alt and Keyboard::Enter. Both must be pressed
to enter the key. This lets you easily implement "super" modifier keys.
The actual codebase has new features the old UI never had, and has about
~50% of the old functionality (so far, of course), yet is only ~25% as
much code.
The entire GUI no longer needs to pull in all the headers for each
emulated system. It just needs a small interface header file.
Then bind the entire system with exactly **two** lines of code.
Everything is dynamically generated for you after that.
2012-04-30 23:43:23 +00:00
|
|
|
system.power();
|
|
|
|
input.connect(0, Input::Device::Joypad);
|
|
|
|
input.connect(1, Input::Device::Joypad);
|
|
|
|
}
|
Update to v088r11 release.
byuu says:
Changelog:
- phoenix has added Window::setModal(bool modal = true);
- file dialog is now modal. This allows emulation cores to request data
and get it immediately before continuing the loading process
- save data is hooked up for most systems, still need to handle
subsystem slot saves (Sufami Turbo, basically.)
- toggle fullscreen key binding added (Alt+Enter for now. I think F11 is
probably better though, Enter is often mapped to game start button.)
- video scaling is in (center, scale, stretch), works the same in
windowed and fullscreen mode (stretch hides resize window option), all
in the settings menu now
- enough structure to map all saved paths for the browser and to load
BS-X slotted carts, BS-X carts, single Sufami Turbo carts
Caveats / Missing:
- Super Game Boy input doesn't work yet (due to change in callback
binding)
- doesn't load secondary Sufami Turbo slot yet
- BS-X BIOS isn't show the data pack games to load for some reason (ugh,
I hate the shit out of debugging BS-X stuff ...)
- need mute audio, sync audio+video toggle, save/load state menu and
quick keys, XML mapping information window
- need cheat editor and cheat database
- need state manager
- need to sort subsystems below main systems in load menu (basically
just see if media.slot.size() > 0)
- need video shaders (will probably leave off filters for the time being
... due to that 24/30-bit thing)
- need video adjustments (contrast etc, overscan masks)
- need audio adjustments (frequency, latency, resampler, volume,
per-system frequency)
- need driver selection and input focus policy (driver crash detection
would be nice too)
- need NSS DIP switch settings (that one will be really fun)
- need to save and load window geometry settings
- need to hook up controller selection (won't be fun), create a map to
hide controllers with no inputs to reassign
2012-05-03 12:36:47 +00:00
|
|
|
|
|
|
|
if(id == ID::SuperGameBoyROM) {
|
|
|
|
GameBoy::cartridge.load(GameBoy::System::Revision::SuperGameBoy, markup, stream);
|
|
|
|
}
|
|
|
|
|
|
|
|
if(id == ID::BsxFlashROM) {
|
|
|
|
bsxflash.memory.copy(stream);
|
|
|
|
}
|
|
|
|
|
|
|
|
if(id == ID::SufamiTurboSlotAROM) {
|
|
|
|
sufamiturbo.slotA.rom.copy(stream);
|
|
|
|
}
|
|
|
|
|
|
|
|
if(id == ID::SufamiTurboSlotBROM) {
|
|
|
|
sufamiturbo.slotB.rom.copy(stream);
|
|
|
|
}
|
|
|
|
|
|
|
|
if(id == ID::RAM) {
|
|
|
|
stream.read(cartridge.ram.data(), min(cartridge.ram.size(), stream.size()));
|
|
|
|
}
|
|
|
|
|
|
|
|
if(id == ID::RTC) {
|
|
|
|
stream.read(srtc.rtc, min(stream.size(), sizeof srtc.rtc));
|
|
|
|
}
|
|
|
|
|
|
|
|
if(id == ID::SPC7110RTC) {
|
|
|
|
stream.read(spc7110.rtc, min(stream.size(), sizeof srtc.rtc));
|
|
|
|
}
|
|
|
|
|
|
|
|
if(id == ID::BsxRAM) {
|
|
|
|
stream.read(bsxcartridge.sram.data(), min(stream.size(), bsxcartridge.sram.size()));
|
|
|
|
}
|
|
|
|
|
|
|
|
if(id == ID::BsxPSRAM) {
|
|
|
|
stream.read(bsxcartridge.psram.data(), min(stream.size(), bsxcartridge.psram.size()));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void Interface::save(unsigned id, const stream &stream) {
|
|
|
|
if(id == ID::RAM) {
|
|
|
|
stream.write(cartridge.ram.data(), cartridge.ram.size());
|
|
|
|
}
|
|
|
|
|
|
|
|
if(id == ID::RTC) {
|
|
|
|
stream.write(srtc.rtc, sizeof srtc.rtc);
|
|
|
|
}
|
|
|
|
|
|
|
|
if(id == ID::SPC7110RTC) {
|
|
|
|
stream.write(spc7110.rtc, sizeof srtc.rtc);
|
|
|
|
}
|
|
|
|
|
|
|
|
if(id == ID::BsxRAM) {
|
|
|
|
stream.write(bsxcartridge.sram.data(), bsxcartridge.sram.size());
|
|
|
|
}
|
|
|
|
|
|
|
|
if(id == ID::BsxPSRAM) {
|
|
|
|
stream.write(bsxcartridge.psram.data(), bsxcartridge.psram.size());
|
|
|
|
}
|
Update to v088r10 release.
byuu says:
ethos is going to be absolutely amazing. You guys are in for a treat :D
I'm impressing the hell out of myself with how well-structured this code
is, it's allowing me to do amazing new things.
Just a small sampling of what's in store (and already implemented):
The file browser will display folders as "[ folder name ]", and
cartridge folders as "Game Name" (no extension, no /) [icons would be
nicer, but well ... phoenix.]
Folders are sorted above cartridge folders.
Cartridge folders for other systems do not show up in the list.
Not only are unique paths stored for each image type, your position in
the list is saved across runs.
Some voodoo was added to GTK+ so that all targets even scroll directly
to that item when you open the list. Load->System->Enter restarts your
last game.
That sounds really simple and obvious, but it makes an -incredible-
difference. Didn't realize it until I tried an implementation of it,
wow.
The input mapping list now lets you bind as many hotkeys as you want to
any given input.
So SFC::Port1::Joypad::B = Keyboard::Z or Joypad::Button1 ... no need to
remap everything to switch between keyboard and joypad. Either one
activates the key.
There is a separate Hotkeys tab now. This should hopefully end the
confusion about how to remap hotkeys that users experience.
Hotkeys are different, too. Instead of OR logic, they use AND logic.
So Fullscreen = Keyboard::Alt and Keyboard::Enter. Both must be pressed
to enter the key. This lets you easily implement "super" modifier keys.
The actual codebase has new features the old UI never had, and has about
~50% of the old functionality (so far, of course), yet is only ~25% as
much code.
The entire GUI no longer needs to pull in all the headers for each
emulated system. It just needs a small interface header file.
Then bind the entire system with exactly **two** lines of code.
Everything is dynamically generated for you after that.
2012-04-30 23:43:23 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void Interface::unload() {
|
|
|
|
cartridge.unload();
|
|
|
|
}
|
|
|
|
|
|
|
|
void Interface::power() {
|
|
|
|
system.power();
|
|
|
|
}
|
|
|
|
|
|
|
|
void Interface::reset() {
|
|
|
|
system.reset();
|
|
|
|
}
|
|
|
|
|
|
|
|
void Interface::run() {
|
|
|
|
system.run();
|
|
|
|
}
|
|
|
|
|
|
|
|
void Interface::updatePalette() {
|
|
|
|
video.generate_palette();
|
|
|
|
}
|
|
|
|
|
|
|
|
Interface::Interface() {
|
|
|
|
interface = this;
|
|
|
|
|
Update to v088r11 release.
byuu says:
Changelog:
- phoenix has added Window::setModal(bool modal = true);
- file dialog is now modal. This allows emulation cores to request data
and get it immediately before continuing the loading process
- save data is hooked up for most systems, still need to handle
subsystem slot saves (Sufami Turbo, basically.)
- toggle fullscreen key binding added (Alt+Enter for now. I think F11 is
probably better though, Enter is often mapped to game start button.)
- video scaling is in (center, scale, stretch), works the same in
windowed and fullscreen mode (stretch hides resize window option), all
in the settings menu now
- enough structure to map all saved paths for the browser and to load
BS-X slotted carts, BS-X carts, single Sufami Turbo carts
Caveats / Missing:
- Super Game Boy input doesn't work yet (due to change in callback
binding)
- doesn't load secondary Sufami Turbo slot yet
- BS-X BIOS isn't show the data pack games to load for some reason (ugh,
I hate the shit out of debugging BS-X stuff ...)
- need mute audio, sync audio+video toggle, save/load state menu and
quick keys, XML mapping information window
- need cheat editor and cheat database
- need state manager
- need to sort subsystems below main systems in load menu (basically
just see if media.slot.size() > 0)
- need video shaders (will probably leave off filters for the time being
... due to that 24/30-bit thing)
- need video adjustments (contrast etc, overscan masks)
- need audio adjustments (frequency, latency, resampler, volume,
per-system frequency)
- need driver selection and input focus policy (driver crash detection
would be nice too)
- need NSS DIP switch settings (that one will be really fun)
- need to save and load window geometry settings
- need to hook up controller selection (won't be fun), create a map to
hide controllers with no inputs to reassign
2012-05-03 12:36:47 +00:00
|
|
|
information.name = "Super Famicom";
|
|
|
|
information.width = 256;
|
|
|
|
information.height = 240;
|
|
|
|
information.aspectRatio = 8.0 / 7.0;
|
|
|
|
information.frequency = 32040;
|
|
|
|
information.resettable = true;
|
|
|
|
|
|
|
|
information.media.append({"Super Famicom", "*.sfc"});
|
|
|
|
information.media.append({"BS-X Satellaview", "*.bs"});
|
|
|
|
information.media.append({"Sufami Turbo", "*.st"});
|
|
|
|
information.media.append({"Super Game Boy", "*.gb"});
|
Update to v088r10 release.
byuu says:
ethos is going to be absolutely amazing. You guys are in for a treat :D
I'm impressing the hell out of myself with how well-structured this code
is, it's allowing me to do amazing new things.
Just a small sampling of what's in store (and already implemented):
The file browser will display folders as "[ folder name ]", and
cartridge folders as "Game Name" (no extension, no /) [icons would be
nicer, but well ... phoenix.]
Folders are sorted above cartridge folders.
Cartridge folders for other systems do not show up in the list.
Not only are unique paths stored for each image type, your position in
the list is saved across runs.
Some voodoo was added to GTK+ so that all targets even scroll directly
to that item when you open the list. Load->System->Enter restarts your
last game.
That sounds really simple and obvious, but it makes an -incredible-
difference. Didn't realize it until I tried an implementation of it,
wow.
The input mapping list now lets you bind as many hotkeys as you want to
any given input.
So SFC::Port1::Joypad::B = Keyboard::Z or Joypad::Button1 ... no need to
remap everything to switch between keyboard and joypad. Either one
activates the key.
There is a separate Hotkeys tab now. This should hopefully end the
confusion about how to remap hotkeys that users experience.
Hotkeys are different, too. Instead of OR logic, they use AND logic.
So Fullscreen = Keyboard::Alt and Keyboard::Enter. Both must be pressed
to enter the key. This lets you easily implement "super" modifier keys.
The actual codebase has new features the old UI never had, and has about
~50% of the old functionality (so far, of course), yet is only ~25% as
much code.
The entire GUI no longer needs to pull in all the headers for each
emulated system. It just needs a small interface header file.
Then bind the entire system with exactly **two** lines of code.
Everything is dynamically generated for you after that.
2012-04-30 23:43:23 +00:00
|
|
|
|
|
|
|
{
|
|
|
|
Firmware firmware;
|
|
|
|
firmware.displayname = "Super Famicom";
|
|
|
|
firmware.name = "Super Famicom.sys/spc700.rom";
|
Update to v088r11 release.
byuu says:
Changelog:
- phoenix has added Window::setModal(bool modal = true);
- file dialog is now modal. This allows emulation cores to request data
and get it immediately before continuing the loading process
- save data is hooked up for most systems, still need to handle
subsystem slot saves (Sufami Turbo, basically.)
- toggle fullscreen key binding added (Alt+Enter for now. I think F11 is
probably better though, Enter is often mapped to game start button.)
- video scaling is in (center, scale, stretch), works the same in
windowed and fullscreen mode (stretch hides resize window option), all
in the settings menu now
- enough structure to map all saved paths for the browser and to load
BS-X slotted carts, BS-X carts, single Sufami Turbo carts
Caveats / Missing:
- Super Game Boy input doesn't work yet (due to change in callback
binding)
- doesn't load secondary Sufami Turbo slot yet
- BS-X BIOS isn't show the data pack games to load for some reason (ugh,
I hate the shit out of debugging BS-X stuff ...)
- need mute audio, sync audio+video toggle, save/load state menu and
quick keys, XML mapping information window
- need cheat editor and cheat database
- need state manager
- need to sort subsystems below main systems in load menu (basically
just see if media.slot.size() > 0)
- need video shaders (will probably leave off filters for the time being
... due to that 24/30-bit thing)
- need video adjustments (contrast etc, overscan masks)
- need audio adjustments (frequency, latency, resampler, volume,
per-system frequency)
- need driver selection and input focus policy (driver crash detection
would be nice too)
- need NSS DIP switch settings (that one will be really fun)
- need to save and load window geometry settings
- need to hook up controller selection (won't be fun), create a map to
hide controllers with no inputs to reassign
2012-05-03 12:36:47 +00:00
|
|
|
firmware.id = ID::IPLROM;
|
Update to v088r10 release.
byuu says:
ethos is going to be absolutely amazing. You guys are in for a treat :D
I'm impressing the hell out of myself with how well-structured this code
is, it's allowing me to do amazing new things.
Just a small sampling of what's in store (and already implemented):
The file browser will display folders as "[ folder name ]", and
cartridge folders as "Game Name" (no extension, no /) [icons would be
nicer, but well ... phoenix.]
Folders are sorted above cartridge folders.
Cartridge folders for other systems do not show up in the list.
Not only are unique paths stored for each image type, your position in
the list is saved across runs.
Some voodoo was added to GTK+ so that all targets even scroll directly
to that item when you open the list. Load->System->Enter restarts your
last game.
That sounds really simple and obvious, but it makes an -incredible-
difference. Didn't realize it until I tried an implementation of it,
wow.
The input mapping list now lets you bind as many hotkeys as you want to
any given input.
So SFC::Port1::Joypad::B = Keyboard::Z or Joypad::Button1 ... no need to
remap everything to switch between keyboard and joypad. Either one
activates the key.
There is a separate Hotkeys tab now. This should hopefully end the
confusion about how to remap hotkeys that users experience.
Hotkeys are different, too. Instead of OR logic, they use AND logic.
So Fullscreen = Keyboard::Alt and Keyboard::Enter. Both must be pressed
to enter the key. This lets you easily implement "super" modifier keys.
The actual codebase has new features the old UI never had, and has about
~50% of the old functionality (so far, of course), yet is only ~25% as
much code.
The entire GUI no longer needs to pull in all the headers for each
emulated system. It just needs a small interface header file.
Then bind the entire system with exactly **two** lines of code.
Everything is dynamically generated for you after that.
2012-04-30 23:43:23 +00:00
|
|
|
this->firmware.append(firmware);
|
|
|
|
}
|
|
|
|
|
|
|
|
{
|
Update to v088r11 release.
byuu says:
Changelog:
- phoenix has added Window::setModal(bool modal = true);
- file dialog is now modal. This allows emulation cores to request data
and get it immediately before continuing the loading process
- save data is hooked up for most systems, still need to handle
subsystem slot saves (Sufami Turbo, basically.)
- toggle fullscreen key binding added (Alt+Enter for now. I think F11 is
probably better though, Enter is often mapped to game start button.)
- video scaling is in (center, scale, stretch), works the same in
windowed and fullscreen mode (stretch hides resize window option), all
in the settings menu now
- enough structure to map all saved paths for the browser and to load
BS-X slotted carts, BS-X carts, single Sufami Turbo carts
Caveats / Missing:
- Super Game Boy input doesn't work yet (due to change in callback
binding)
- doesn't load secondary Sufami Turbo slot yet
- BS-X BIOS isn't show the data pack games to load for some reason (ugh,
I hate the shit out of debugging BS-X stuff ...)
- need mute audio, sync audio+video toggle, save/load state menu and
quick keys, XML mapping information window
- need cheat editor and cheat database
- need state manager
- need to sort subsystems below main systems in load menu (basically
just see if media.slot.size() > 0)
- need video shaders (will probably leave off filters for the time being
... due to that 24/30-bit thing)
- need video adjustments (contrast etc, overscan masks)
- need audio adjustments (frequency, latency, resampler, volume,
per-system frequency)
- need driver selection and input focus policy (driver crash detection
would be nice too)
- need NSS DIP switch settings (that one will be really fun)
- need to save and load window geometry settings
- need to hook up controller selection (won't be fun), create a map to
hide controllers with no inputs to reassign
2012-05-03 12:36:47 +00:00
|
|
|
Schema schema;
|
|
|
|
schema.displayname = "Super Famicom";
|
|
|
|
schema.name = "program.rom";
|
|
|
|
schema.filter = "*.sfc";
|
|
|
|
schema.id = ID::ROM;
|
|
|
|
this->schema.append(schema);
|
|
|
|
}
|
|
|
|
|
|
|
|
{
|
|
|
|
Schema schema;
|
|
|
|
schema.displayname = "Super Game Boy";
|
|
|
|
schema.path = "Super Game Boy.sfc/";
|
|
|
|
schema.name = "program.rom";
|
|
|
|
schema.filter = "*.sfc";
|
|
|
|
schema.id = ID::ROM;
|
|
|
|
{
|
|
|
|
Media slot;
|
|
|
|
slot.displayname = "Game Boy";
|
|
|
|
slot.name = "program.rom";
|
|
|
|
slot.filter = "*.gb";
|
|
|
|
slot.id = ID::SuperGameBoyROM;
|
|
|
|
schema.slot.append(schema);
|
|
|
|
}
|
|
|
|
this->schema.append(schema);
|
|
|
|
}
|
|
|
|
|
|
|
|
{
|
|
|
|
Schema schema;
|
|
|
|
schema.displayname = "BS-X Satellaview";
|
|
|
|
schema.path = "BS-X Satellaview.sfc/";
|
|
|
|
schema.name = "program.rom";
|
|
|
|
schema.filter = "*.sfc";
|
|
|
|
schema.id = ID::ROM;
|
|
|
|
{
|
|
|
|
Media slot;
|
|
|
|
slot.displayname = "BS-X Satellaview";
|
|
|
|
slot.name = "program.rom";
|
|
|
|
slot.filter = "*.bs";
|
|
|
|
slot.id = ID::BsxFlashROM;
|
|
|
|
schema.slot.append(slot);
|
|
|
|
}
|
|
|
|
this->schema.append(schema);
|
|
|
|
}
|
|
|
|
|
|
|
|
{
|
|
|
|
Schema schema;
|
|
|
|
schema.displayname = "Sufami Turbo";
|
|
|
|
schema.path = "Sufami Turbo.sfc/";
|
|
|
|
schema.name = "program.rom";
|
|
|
|
schema.filter = "*.sfc";
|
|
|
|
schema.id = ID::ROM;
|
|
|
|
{
|
|
|
|
Media slot;
|
|
|
|
slot.displayname = "Sufami Turbo - Slot A";
|
|
|
|
slot.name = "program.rom";
|
|
|
|
slot.filter = "*.st";
|
|
|
|
slot.id = ID::SufamiTurboSlotAROM;
|
|
|
|
schema.slot.append(slot);
|
|
|
|
}
|
|
|
|
{
|
|
|
|
Media slot;
|
|
|
|
slot.displayname = "Sufami Turbo - Slot B";
|
|
|
|
slot.name = "program.rom";
|
|
|
|
slot.filter = "*.st";
|
|
|
|
slot.id = ID::SufamiTurboSlotBROM;
|
|
|
|
schema.slot.append(slot);
|
|
|
|
}
|
|
|
|
this->schema.append(schema);
|
Update to v088r10 release.
byuu says:
ethos is going to be absolutely amazing. You guys are in for a treat :D
I'm impressing the hell out of myself with how well-structured this code
is, it's allowing me to do amazing new things.
Just a small sampling of what's in store (and already implemented):
The file browser will display folders as "[ folder name ]", and
cartridge folders as "Game Name" (no extension, no /) [icons would be
nicer, but well ... phoenix.]
Folders are sorted above cartridge folders.
Cartridge folders for other systems do not show up in the list.
Not only are unique paths stored for each image type, your position in
the list is saved across runs.
Some voodoo was added to GTK+ so that all targets even scroll directly
to that item when you open the list. Load->System->Enter restarts your
last game.
That sounds really simple and obvious, but it makes an -incredible-
difference. Didn't realize it until I tried an implementation of it,
wow.
The input mapping list now lets you bind as many hotkeys as you want to
any given input.
So SFC::Port1::Joypad::B = Keyboard::Z or Joypad::Button1 ... no need to
remap everything to switch between keyboard and joypad. Either one
activates the key.
There is a separate Hotkeys tab now. This should hopefully end the
confusion about how to remap hotkeys that users experience.
Hotkeys are different, too. Instead of OR logic, they use AND logic.
So Fullscreen = Keyboard::Alt and Keyboard::Enter. Both must be pressed
to enter the key. This lets you easily implement "super" modifier keys.
The actual codebase has new features the old UI never had, and has about
~50% of the old functionality (so far, of course), yet is only ~25% as
much code.
The entire GUI no longer needs to pull in all the headers for each
emulated system. It just needs a small interface header file.
Then bind the entire system with exactly **two** lines of code.
Everything is dynamically generated for you after that.
2012-04-30 23:43:23 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
{
|
|
|
|
Port port;
|
|
|
|
port.name = "Port 1";
|
|
|
|
port.id = 0;
|
|
|
|
{
|
|
|
|
Port::Device device;
|
|
|
|
device.name = "None";
|
|
|
|
device.id = 0;
|
|
|
|
port.device.append(device);
|
|
|
|
}
|
|
|
|
{
|
|
|
|
Port::Device device;
|
|
|
|
device.name = "Controller";
|
|
|
|
device.id = 1;
|
|
|
|
device.input.append({"B", 0, 0});
|
|
|
|
device.input.append({"Y", 0, 1});
|
|
|
|
device.input.append({"Select", 0, 2});
|
|
|
|
device.input.append({"Start", 0, 3});
|
|
|
|
device.input.append({"Up", 0, 4});
|
|
|
|
device.input.append({"Down", 0, 5});
|
|
|
|
device.input.append({"Left", 0, 6});
|
|
|
|
device.input.append({"Right", 0, 7});
|
|
|
|
device.input.append({"A", 0, 8});
|
|
|
|
device.input.append({"X", 0, 9});
|
|
|
|
device.input.append({"L", 0, 10});
|
|
|
|
device.input.append({"R", 0, 11});
|
|
|
|
device.displayinput = {4, 5, 6, 7, 0, 8, 1, 9, 10, 11, 2, 3};
|
|
|
|
port.device.append(device);
|
|
|
|
}
|
|
|
|
this->port.append(port);
|
|
|
|
}
|
|
|
|
|
|
|
|
{
|
|
|
|
Port port;
|
|
|
|
port.name = "Port 2";
|
|
|
|
port.id = 1;
|
|
|
|
{
|
|
|
|
Port::Device device;
|
|
|
|
device.name = "None";
|
|
|
|
device.id = 0;
|
|
|
|
port.device.append(device);
|
|
|
|
}
|
|
|
|
{
|
|
|
|
Port::Device device;
|
|
|
|
device.name = "Controller";
|
|
|
|
device.id = 1;
|
|
|
|
device.input.append({"B", 0, 0});
|
|
|
|
device.input.append({"Y", 0, 1});
|
|
|
|
device.input.append({"Select", 0, 2});
|
|
|
|
device.input.append({"Start", 0, 3});
|
|
|
|
device.input.append({"Up", 0, 4});
|
|
|
|
device.input.append({"Down", 0, 5});
|
|
|
|
device.input.append({"Left", 0, 6});
|
|
|
|
device.input.append({"Right", 0, 7});
|
|
|
|
device.input.append({"A", 0, 8});
|
|
|
|
device.input.append({"X", 0, 9});
|
|
|
|
device.input.append({"L", 0, 10});
|
|
|
|
device.input.append({"R", 0, 11});
|
|
|
|
device.displayinput = {4, 5, 6, 7, 0, 8, 1, 9, 10, 11, 2, 3};
|
|
|
|
port.device.append(device);
|
|
|
|
}
|
|
|
|
this->port.append(port);
|
|
|
|
}
|
2011-09-15 12:41:49 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
}
|