Make the SNES rate specials methods
This commit is contained in:
parent
315d1620b3
commit
4641b640c4
7 changed files with 35 additions and 29 deletions
|
@ -12,10 +12,6 @@
|
|||
#include "interface/romtype.hpp"
|
||||
|
||||
|
||||
//Get the CPU rate.
|
||||
uint32_t get_snes_cpu_rate();
|
||||
//Get the APU rate.
|
||||
uint32_t get_snes_apu_rate();
|
||||
//Get the core identifier.
|
||||
std::string get_core_identifier();
|
||||
//Do basic core initialization (to get it to stable state).
|
||||
|
|
|
@ -52,6 +52,7 @@ struct core_type_params
|
|||
bool (*set_region)(core_region& region);
|
||||
std::pair<uint32_t, uint32_t> (*video_rate)();
|
||||
std::pair<uint32_t, uint32_t> (*audio_rate)();
|
||||
std::pair<uint32_t, uint32_t> (*snes_rate)();
|
||||
};
|
||||
|
||||
struct core_region
|
||||
|
@ -120,6 +121,7 @@ public:
|
|||
bool set_region(core_region& region);
|
||||
std::pair<uint32_t, uint32_t> get_video_rate();
|
||||
std::pair<uint32_t, uint32_t> get_audio_rate();
|
||||
std::pair<uint32_t, uint32_t> get_snes_rate(); //(0,0) for non-SNES.
|
||||
private:
|
||||
core_type(const core_type&);
|
||||
core_type& operator=(const core_type&);
|
||||
|
@ -129,6 +131,7 @@ private:
|
|||
bool (*_set_region)(core_region& region);
|
||||
std::pair<uint32_t, uint32_t> (*_video_rate)();
|
||||
std::pair<uint32_t, uint32_t> (*_audio_rate)();
|
||||
std::pair<uint32_t, uint32_t> (*_snes_rate)();
|
||||
unsigned id;
|
||||
unsigned reset_support;
|
||||
std::string iname;
|
||||
|
|
|
@ -81,6 +81,11 @@ namespace
|
|||
const char* justifier_name = "justifier";
|
||||
const char* gamepad16_name = "gamepad16";
|
||||
|
||||
std::pair<uint32_t, uint32_t> snes_rate()
|
||||
{
|
||||
return std::make_pair(SNES::system.cpu_frequency(), SNES::system.apu_frequency());
|
||||
}
|
||||
|
||||
port_controller_button gamepad_btn_B = {port_controller_button::TYPE_BUTTON, "B"};
|
||||
port_controller_button gamepad_btn_Y = {port_controller_button::TYPE_BUTTON, "Y"};
|
||||
port_controller_button gamepad_btn_s = {port_controller_button::TYPE_BUTTON, "select"};
|
||||
|
@ -661,7 +666,7 @@ namespace
|
|||
div = last_interlace ? DURATION_PAL_FIELD : DURATION_PAL_FRAME;
|
||||
else
|
||||
div = last_interlace ? DURATION_NTSC_FIELD : DURATION_NTSC_FRAME;
|
||||
return std::make_pair(get_snes_cpu_rate(), div);
|
||||
return std::make_pair(SNES::system.cpu_frequency(), div);
|
||||
}
|
||||
|
||||
//Get the current audio rate.
|
||||
|
@ -669,33 +674,33 @@ namespace
|
|||
{
|
||||
if(!internal_rom)
|
||||
return std::make_pair(64081, 2);
|
||||
return std::make_pair(get_snes_apu_rate(), static_cast<uint32_t>(768));
|
||||
return std::make_pair(SNES::system.apu_frequency(), static_cast<uint32_t>(768));
|
||||
}
|
||||
|
||||
core_type_params _type_snes = {
|
||||
"snes", "SNES", 0, BSNES_RESET_LEVEL , load_rom_snes, _controllerconfig,
|
||||
"sfc;smc;swc;fig;ufo;sf2;gd3;gd7;dx2;mgd;mgh", NULL, _all_regions, snes_images, &bsnes_settings,
|
||||
core_set_region, get_video_rate, get_audio_rate
|
||||
core_set_region, get_video_rate, get_audio_rate, snes_rate
|
||||
};
|
||||
core_type_params _type_bsx = {
|
||||
"bsx", "BS-X (non-slotted)", 1, BSNES_RESET_LEVEL , load_rom_bsx, _controllerconfig,
|
||||
"bs", "bsx.sfc", _ntsconly, bsx_images, &bsnes_settings, core_set_region, get_video_rate,
|
||||
get_audio_rate
|
||||
get_audio_rate, snes_rate
|
||||
};
|
||||
core_type_params _type_bsxslotted = {
|
||||
"bsxslotted", "BS-X (slotted)", 2, BSNES_RESET_LEVEL , load_rom_bsxslotted, _controllerconfig,
|
||||
"bss", "bsxslotted.sfc", _ntsconly, bsxs_images, &bsnes_settings, core_set_region, get_video_rate,
|
||||
get_audio_rate
|
||||
get_audio_rate, snes_rate
|
||||
};
|
||||
core_type_params _type_sufamiturbo = {
|
||||
"sufamiturbo", "Sufami Turbo", 3, BSNES_RESET_LEVEL , load_rom_sufamiturbo, _controllerconfig,
|
||||
"st", "sufamiturbo.sfc", _ntsconly, bsxs_images, &bsnes_settings, core_set_region, get_video_rate,
|
||||
get_audio_rate
|
||||
get_audio_rate, snes_rate
|
||||
};
|
||||
core_type_params _type_sgb = {
|
||||
"sgb", "Super Game Boy", 4, BSNES_RESET_LEVEL , load_rom_sgb, _controllerconfig,
|
||||
"gb;dmg;sgb", "sgb.sfc", _all_regions, sgb_images, &bsnes_settings, core_set_region, get_video_rate,
|
||||
get_audio_rate
|
||||
get_audio_rate, snes_rate
|
||||
};
|
||||
|
||||
core_type type_snes(_type_snes);
|
||||
|
@ -995,16 +1000,6 @@ void core_uninstall_handler()
|
|||
SNES::interface = old;
|
||||
}
|
||||
|
||||
uint32_t get_snes_cpu_rate()
|
||||
{
|
||||
return SNES::system.cpu_frequency();
|
||||
}
|
||||
|
||||
uint32_t get_snes_apu_rate()
|
||||
{
|
||||
return SNES::system.apu_frequency();
|
||||
}
|
||||
|
||||
std::string get_core_identifier()
|
||||
{
|
||||
std::ostringstream x;
|
||||
|
|
|
@ -307,15 +307,18 @@ namespace
|
|||
|
||||
core_type_params _type_dmg = {
|
||||
"dmg", "Game Boy", 1, 1, load_rom_dmg, _controllerconfig, "gb;dmg", NULL,
|
||||
regions_gambatte, dmg_images, &gambatte_settings, core_set_region, get_video_rate, get_audio_rate
|
||||
regions_gambatte, dmg_images, &gambatte_settings, core_set_region, get_video_rate, get_audio_rate,
|
||||
NULL
|
||||
};
|
||||
core_type_params _type_gbc = {
|
||||
"gbc", "Game Boy Color", 0, 1, load_rom_gbc, _controllerconfig, "gbc;cgb", NULL,
|
||||
regions_gambatte, gbc_images, &gambatte_settings, core_set_region, get_video_rate, get_audio_rate
|
||||
regions_gambatte, gbc_images, &gambatte_settings, core_set_region, get_video_rate, get_audio_rate,
|
||||
NULL
|
||||
};
|
||||
core_type_params _type_gbc_gba = {
|
||||
"gbc_gba", "Game Boy Color (GBA)", 2, 1, load_rom_gbc_gba, _controllerconfig, "", NULL,
|
||||
regions_gambatte, gbca_images, &gambatte_settings, core_set_region, get_video_rate, get_audio_rate
|
||||
regions_gambatte, gbca_images, &gambatte_settings, core_set_region, get_video_rate, get_audio_rate,
|
||||
NULL
|
||||
};
|
||||
core_type type_dmg(_type_dmg);
|
||||
core_type type_gbc(_type_gbc);
|
||||
|
@ -336,8 +339,6 @@ std::string get_logical_button_name(unsigned lbid) throw(std::bad_alloc)
|
|||
return buttonnames[lbid];
|
||||
}
|
||||
|
||||
uint32_t get_snes_cpu_rate() { return 0; }
|
||||
uint32_t get_snes_apu_rate() { return 0; }
|
||||
std::string get_core_identifier()
|
||||
{
|
||||
return "libgambatte "+gambatte::GB::version();
|
||||
|
|
|
@ -98,7 +98,7 @@ namespace
|
|||
core_type_params _type_null = {
|
||||
"null", "(null)", 9999, 0, load_rom_null, null_controllerconfig,
|
||||
"", NULL, null_regions, null_images, &null_settings, set_region_null,
|
||||
videorate_null, audiorate_null
|
||||
videorate_null, audiorate_null, NULL
|
||||
};
|
||||
core_type type_null(_type_null);
|
||||
core_sysregion sysregion_null("null", type_null, null_region);
|
||||
|
|
|
@ -127,6 +127,7 @@ core_type::core_type(core_type_params& params)
|
|||
_set_region = params.set_region;
|
||||
_audio_rate = params.audio_rate;
|
||||
_video_rate = params.video_rate;
|
||||
_snes_rate = params.snes_rate;
|
||||
settings = params.settings;
|
||||
if(params.bios)
|
||||
biosname = params.bios;
|
||||
|
@ -266,6 +267,14 @@ std::pair<uint32_t, uint32_t> core_type::get_audio_rate()
|
|||
return _audio_rate();
|
||||
}
|
||||
|
||||
std::pair<uint32_t, uint32_t> core_type::get_snes_rate()
|
||||
{
|
||||
if(_snes_rate)
|
||||
return _snes_rate();
|
||||
else
|
||||
return std::make_pair(0, 0);
|
||||
}
|
||||
|
||||
|
||||
core_sysregion::core_sysregion(const std::string& _name, core_type& _type, core_region& _region)
|
||||
: name(_name), type(_type), region(_region)
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
#include "core/advdumper.hpp"
|
||||
#include "core/dispatch.hpp"
|
||||
#include "core/emucore.hpp"
|
||||
#include "core/moviedata.hpp"
|
||||
#include "library/serialization.hpp"
|
||||
#include "video/tcp.hpp"
|
||||
|
||||
|
@ -83,8 +84,9 @@ namespace
|
|||
if(!*out)
|
||||
throw std::runtime_error("Failed to open '" + str2 + "'");
|
||||
write32ube(tbuffer, 0x53444D50U);
|
||||
write32ube(tbuffer + 4, get_snes_cpu_rate());
|
||||
write32ube(tbuffer + 8, get_snes_apu_rate());
|
||||
auto rates = our_rom->rtype->get_snes_rate();
|
||||
write32ube(tbuffer + 4, rates.first);
|
||||
write32ube(tbuffer + 8, rates.second);
|
||||
out->write(reinterpret_cast<char*>(tbuffer), 12);
|
||||
if(!*out)
|
||||
throw std::runtime_error("Failed to write header to '" + str2 + "'");
|
||||
|
|
Loading…
Add table
Reference in a new issue