Move get_{audio,video}_rate() to rom type methods
This commit is contained in:
parent
c0eb4d83d2
commit
315d1620b3
6 changed files with 72 additions and 48 deletions
|
@ -24,10 +24,6 @@ void do_basic_core_init();
|
|||
std::set<std::string> get_sram_set();
|
||||
//Get region.
|
||||
core_region& core_get_region();
|
||||
//Get the current video rate.
|
||||
std::pair<uint32_t, uint32_t> get_video_rate();
|
||||
//Get the current audio rate.
|
||||
std::pair<uint32_t, uint32_t> get_audio_rate();
|
||||
//Set preload settings.
|
||||
void set_preload_settings();
|
||||
//Power the core.
|
||||
|
|
|
@ -50,6 +50,8 @@ struct core_type_params
|
|||
core_romimage_info** images; //Terminate with NULL.
|
||||
core_setting_group* settings;
|
||||
bool (*set_region)(core_region& region);
|
||||
std::pair<uint32_t, uint32_t> (*video_rate)();
|
||||
std::pair<uint32_t, uint32_t> (*audio_rate)();
|
||||
};
|
||||
|
||||
struct core_region
|
||||
|
@ -116,6 +118,8 @@ public:
|
|||
unsigned get_reset_support();
|
||||
core_setting_group& get_settings();
|
||||
bool set_region(core_region& region);
|
||||
std::pair<uint32_t, uint32_t> get_video_rate();
|
||||
std::pair<uint32_t, uint32_t> get_audio_rate();
|
||||
private:
|
||||
core_type(const core_type&);
|
||||
core_type& operator=(const core_type&);
|
||||
|
@ -123,6 +127,8 @@ private:
|
|||
uint64_t rtc_subsec);
|
||||
controller_set (*_controllerconfig)(std::map<std::string, std::string>& settings);
|
||||
bool (*_set_region)(core_region& region);
|
||||
std::pair<uint32_t, uint32_t> (*_video_rate)();
|
||||
std::pair<uint32_t, uint32_t> (*_audio_rate)();
|
||||
unsigned id;
|
||||
unsigned reset_support;
|
||||
std::string iname;
|
||||
|
|
|
@ -63,6 +63,8 @@ namespace
|
|||
int16_t blanksound[1070] = {0};
|
||||
int16_t soundbuf[8192] = {0};
|
||||
size_t soundbuf_fill = 0;
|
||||
bool last_hires = false;
|
||||
bool last_interlace = false;
|
||||
uint64_t trace_counter;
|
||||
std::ofstream trace_output;
|
||||
bool trace_output_enable;
|
||||
|
@ -649,27 +651,51 @@ namespace
|
|||
return true;
|
||||
}
|
||||
|
||||
|
||||
//Get the current video rate.
|
||||
std::pair<uint32_t, uint32_t> get_video_rate()
|
||||
{
|
||||
if(!internal_rom)
|
||||
return std::make_pair(60, 1);
|
||||
uint32_t div;
|
||||
if(snes_get_region())
|
||||
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);
|
||||
}
|
||||
|
||||
//Get the current audio rate.
|
||||
std::pair<uint32_t, uint32_t> get_audio_rate()
|
||||
{
|
||||
if(!internal_rom)
|
||||
return std::make_pair(64081, 2);
|
||||
return std::make_pair(get_snes_apu_rate(), 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
|
||||
core_set_region, get_video_rate, get_audio_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
|
||||
"bs", "bsx.sfc", _ntsconly, bsx_images, &bsnes_settings, core_set_region, get_video_rate,
|
||||
get_audio_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
|
||||
"bss", "bsxslotted.sfc", _ntsconly, bsxs_images, &bsnes_settings, core_set_region, get_video_rate,
|
||||
get_audio_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
|
||||
"st", "sufamiturbo.sfc", _ntsconly, bsxs_images, &bsnes_settings, core_set_region, get_video_rate,
|
||||
get_audio_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
|
||||
"gb;dmg;sgb", "sgb.sfc", _all_regions, sgb_images, &bsnes_settings, core_set_region, get_video_rate,
|
||||
get_audio_rate
|
||||
};
|
||||
|
||||
core_type type_snes(_type_snes);
|
||||
|
@ -685,8 +711,6 @@ namespace
|
|||
core_sysregion sr6("sgb_ntsc", type_sgb, region_ntsc);
|
||||
core_sysregion sr7("sgb_pal", type_sgb, region_pal);
|
||||
|
||||
bool last_hires = false;
|
||||
bool last_interlace = false;
|
||||
bool stepping_into_save;
|
||||
bool video_refresh_done;
|
||||
//Delay reset.
|
||||
|
@ -1035,26 +1059,6 @@ void core_unload_cartridge()
|
|||
internal_rom = NULL;
|
||||
}
|
||||
|
||||
//Get the current video rate.
|
||||
std::pair<uint32_t, uint32_t> get_video_rate()
|
||||
{
|
||||
if(!internal_rom)
|
||||
return std::make_pair(60, 1);
|
||||
uint32_t div;
|
||||
if(snes_get_region())
|
||||
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);
|
||||
}
|
||||
|
||||
//Get the current audio rate.
|
||||
std::pair<uint32_t, uint32_t> get_audio_rate()
|
||||
{
|
||||
if(!internal_rom)
|
||||
return std::make_pair(64081, 2);
|
||||
return std::make_pair(get_snes_apu_rate(), static_cast<uint32_t>(768));
|
||||
}
|
||||
|
||||
std::map<std::string, std::vector<char>> save_sram() throw(std::bad_alloc)
|
||||
{
|
||||
|
|
|
@ -97,6 +97,17 @@ namespace
|
|||
};
|
||||
} getinput;
|
||||
|
||||
std::pair<uint32_t, uint32_t> get_video_rate()
|
||||
{
|
||||
return std::make_pair(262144, 4389);
|
||||
}
|
||||
|
||||
std::pair<uint32_t, uint32_t> get_audio_rate()
|
||||
{
|
||||
return std::make_pair(32768, 1);
|
||||
}
|
||||
|
||||
|
||||
const char* buttonnames[] = {"left", "right", "up", "down", "A", "B", "select", "start"};
|
||||
|
||||
void system_write(unsigned char* buffer, unsigned idx, unsigned ctrl, short x) throw()
|
||||
|
@ -296,15 +307,15 @@ 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
|
||||
regions_gambatte, dmg_images, &gambatte_settings, core_set_region, get_video_rate, get_audio_rate
|
||||
};
|
||||
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
|
||||
regions_gambatte, gbc_images, &gambatte_settings, core_set_region, get_video_rate, get_audio_rate
|
||||
};
|
||||
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
|
||||
regions_gambatte, gbca_images, &gambatte_settings, core_set_region, get_video_rate, get_audio_rate
|
||||
};
|
||||
core_type type_dmg(_type_dmg);
|
||||
core_type type_gbc(_type_gbc);
|
||||
|
@ -337,16 +348,6 @@ core_region& core_get_region()
|
|||
return region_world;
|
||||
}
|
||||
|
||||
std::pair<uint32_t, uint32_t> get_video_rate()
|
||||
{
|
||||
return std::make_pair(262144, 4389);
|
||||
}
|
||||
|
||||
std::pair<uint32_t, uint32_t> get_audio_rate()
|
||||
{
|
||||
return std::make_pair(32768, 1);
|
||||
}
|
||||
|
||||
void core_runtosave()
|
||||
{
|
||||
}
|
||||
|
|
|
@ -72,6 +72,9 @@ namespace
|
|||
return x;
|
||||
}
|
||||
|
||||
std::pair<unsigned, unsigned> videorate_null() { return std::make_pair(60, 1); }
|
||||
std::pair<unsigned, unsigned> audiorate_null() { return std::make_pair(48000, 1); }
|
||||
|
||||
bool set_region_null(core_region& reg)
|
||||
{
|
||||
return true;
|
||||
|
@ -94,7 +97,8 @@ namespace
|
|||
core_romimage_info* null_images[] = {NULL};
|
||||
core_type_params _type_null = {
|
||||
"null", "(null)", 9999, 0, load_rom_null, null_controllerconfig,
|
||||
"", NULL, null_regions, null_images, &null_settings, set_region_null
|
||||
"", NULL, null_regions, null_images, &null_settings, set_region_null,
|
||||
videorate_null, audiorate_null
|
||||
};
|
||||
core_type type_null(_type_null);
|
||||
core_sysregion sysregion_null("null", type_null, null_region);
|
||||
|
@ -363,8 +367,8 @@ void loaded_rom::load(std::map<std::string, std::string>& settings, uint64_t rtc
|
|||
region = &core_get_region();
|
||||
core_power();
|
||||
}
|
||||
auto nominal_fps = get_video_rate();
|
||||
auto nominal_hz = get_audio_rate();
|
||||
auto nominal_fps = rtype->get_video_rate();
|
||||
auto nominal_hz = rtype->get_audio_rate();
|
||||
set_nominal_framerate(1.0 * nominal_fps.first / nominal_fps.second);
|
||||
information_dispatch::do_sound_rate(nominal_hz.first, nominal_hz.second);
|
||||
current_rom_type = rtype;
|
||||
|
|
|
@ -125,6 +125,8 @@ core_type::core_type(core_type_params& params)
|
|||
loadimg = params.load_rom;
|
||||
_controllerconfig = params.controllerconfig;
|
||||
_set_region = params.set_region;
|
||||
_audio_rate = params.audio_rate;
|
||||
_video_rate = params.video_rate;
|
||||
settings = params.settings;
|
||||
if(params.bios)
|
||||
biosname = params.bios;
|
||||
|
@ -254,6 +256,17 @@ bool core_type::set_region(core_region& region)
|
|||
return _set_region(region);
|
||||
}
|
||||
|
||||
std::pair<uint32_t, uint32_t> core_type::get_video_rate()
|
||||
{
|
||||
return _video_rate();
|
||||
}
|
||||
|
||||
std::pair<uint32_t, uint32_t> core_type::get_audio_rate()
|
||||
{
|
||||
return _audio_rate();
|
||||
}
|
||||
|
||||
|
||||
core_sysregion::core_sysregion(const std::string& _name, core_type& _type, core_region& _region)
|
||||
: name(_name), type(_type), region(_region)
|
||||
{
|
||||
|
|
Loading…
Add table
Reference in a new issue