From 4641b640c44e72dc0f490cfe2fb7c6d82d063ea3 Mon Sep 17 00:00:00 2001 From: Ilari Liusvaara Date: Sat, 5 Jan 2013 16:28:09 +0200 Subject: [PATCH] Make the SNES rate specials methods --- include/core/emucore.hpp | 4 ---- include/interface/romtype.hpp | 3 +++ src/core/bsnes-legacy.cpp | 29 ++++++++++++----------------- src/core/gambatte.cpp | 11 ++++++----- src/core/rom.cpp | 2 +- src/interface/romtype.cpp | 9 +++++++++ src/video/sdmp.cpp | 6 ++++-- 7 files changed, 35 insertions(+), 29 deletions(-) diff --git a/include/core/emucore.hpp b/include/core/emucore.hpp index dd2a6edf..5135d373 100644 --- a/include/core/emucore.hpp +++ b/include/core/emucore.hpp @@ -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). diff --git a/include/interface/romtype.hpp b/include/interface/romtype.hpp index 1ec70432..96d59087 100644 --- a/include/interface/romtype.hpp +++ b/include/interface/romtype.hpp @@ -52,6 +52,7 @@ struct core_type_params bool (*set_region)(core_region& region); std::pair (*video_rate)(); std::pair (*audio_rate)(); + std::pair (*snes_rate)(); }; struct core_region @@ -120,6 +121,7 @@ public: bool set_region(core_region& region); std::pair get_video_rate(); std::pair get_audio_rate(); + std::pair 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 (*_video_rate)(); std::pair (*_audio_rate)(); + std::pair (*_snes_rate)(); unsigned id; unsigned reset_support; std::string iname; diff --git a/src/core/bsnes-legacy.cpp b/src/core/bsnes-legacy.cpp index db8b81d9..ee664bdc 100644 --- a/src/core/bsnes-legacy.cpp +++ b/src/core/bsnes-legacy.cpp @@ -81,6 +81,11 @@ namespace const char* justifier_name = "justifier"; const char* gamepad16_name = "gamepad16"; + std::pair 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(768)); + return std::make_pair(SNES::system.apu_frequency(), static_cast(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; diff --git a/src/core/gambatte.cpp b/src/core/gambatte.cpp index a5923426..3e881b97 100644 --- a/src/core/gambatte.cpp +++ b/src/core/gambatte.cpp @@ -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(); diff --git a/src/core/rom.cpp b/src/core/rom.cpp index 53e1d6c0..26b32e5d 100644 --- a/src/core/rom.cpp +++ b/src/core/rom.cpp @@ -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); diff --git a/src/interface/romtype.cpp b/src/interface/romtype.cpp index f7cfa0f4..aa0fba7e 100644 --- a/src/interface/romtype.cpp +++ b/src/interface/romtype.cpp @@ -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 core_type::get_audio_rate() return _audio_rate(); } +std::pair 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) diff --git a/src/video/sdmp.cpp b/src/video/sdmp.cpp index cc38e257..455238c6 100644 --- a/src/video/sdmp.cpp +++ b/src/video/sdmp.cpp @@ -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(tbuffer), 12); if(!*out) throw std::runtime_error("Failed to write header to '" + str2 + "'"); -- 2.11.4.GIT