Backport changes to generic stuff from gambatte core bindings work

This commit is contained in:
Ilari Liusvaara 2012-07-14 09:17:26 +03:00
parent 51cdf24f87
commit 9328dfb070
11 changed files with 30 additions and 32 deletions

View file

@ -63,6 +63,8 @@ void core_reset();
void core_runtosave();
//Button symbols.
extern const char* button_symbols;
//Get the scale factors.
std::pair<uint32_t, uint32_t> get_scale_factors(uint32_t width, uint32_t height);
/**
* Get name of logical button.

View file

@ -196,7 +196,7 @@ struct loaded_rom
* throws std::bad_alloc: Not enough memory
* throws std::runtime_error: Switching cartridges failed.
*/
void load() throw(std::bad_alloc, std::runtime_error);
void load(uint64_t rtc_sec, uint64_t rtc_subsec) throw(std::bad_alloc, std::runtime_error);
};

View file

@ -55,7 +55,8 @@ struct core_romimage
struct core_type
{
public:
core_type(const std::string& iname, const std::string& hname, int (*_load)(core_romimage* images));
core_type(const std::string& iname, const std::string& hname, int (*_load)(core_romimage* images,
uint64_t rtc_sec, uint64_t rtc_subsec));
static std::set<core_type*> get_core_types();
void add_region(core_region& reg);
void add_romimage(core_romimage_info& info, unsigned index);
@ -66,9 +67,9 @@ public:
const std::string& get_hname();
unsigned get_image_count();
core_romimage_info get_image_info(unsigned index);
bool load(core_romimage* images);
bool load(core_romimage* images, uint64_t rtc_sec, uint64_t rtc_subsec);
private:
int (*loadimg)(core_romimage* images);
int (*loadimg)(core_romimage* images, uint64_t rtc_sec, uint64_t rtc_subsec);
core_type(const core_type&);
core_type& operator=(const core_type&);
std::string iname;

View file

@ -75,7 +75,7 @@ namespace
extern core_type type_sufamiturbo;
extern core_type type_sgb;
int load_rom_snes(core_romimage* img)
int load_rom_snes(core_romimage* img, uint64_t secs, uint64_t subsecs)
{
bool r = snes_load_cartridge_normal(img[0].markup, img[0].data, img[0].size);
if(r)
@ -83,7 +83,7 @@ namespace
return r ? 0 : -1;
}
int load_rom_bsx(core_romimage* img)
int load_rom_bsx(core_romimage* img, uint64_t secs, uint64_t subsecs)
{
bool r = snes_load_cartridge_bsx(img[0].markup, img[0].data, img[0].size,
img[1].markup, img[1].data, img[1].size);
@ -92,7 +92,7 @@ namespace
return r ? 0 : -1;
}
int load_rom_bsxslotted(core_romimage* img)
int load_rom_bsxslotted(core_romimage* img, uint64_t secs, uint64_t subsecs)
{
bool r = snes_load_cartridge_bsx_slotted(img[0].markup, img[0].data, img[0].size,
img[1].markup, img[1].data, img[1].size);
@ -101,7 +101,7 @@ namespace
return r ? 0 : -1;
}
int load_rom_sgb(core_romimage* img)
int load_rom_sgb(core_romimage* img, uint64_t secs, uint64_t subsecs)
{
bool r = snes_load_cartridge_super_game_boy(img[0].markup, img[0].data, img[0].size,
img[1].markup, img[1].data, img[1].size);
@ -110,7 +110,7 @@ namespace
return r ? 0 : -1;
}
int load_rom_sufamiturbo(core_romimage* img)
int load_rom_sufamiturbo(core_romimage* img, uint64_t secs, uint64_t subsecs)
{
bool r = snes_load_cartridge_sufami_turbo(img[0].markup, img[0].data, img[0].size,
img[1].markup, img[1].data, img[1].size, img[2].markup, img[2].data, img[2].size);
@ -924,6 +924,11 @@ std::list<vma_info> get_vma_list()
return ret;
}
std::pair<uint32_t, uint32_t> get_scale_factors(uint32_t width, uint32_t height)
{
return std::make_pair(last_hires ? 1 : 2, last_interlace ? 1 : 2);
}
emucore_callbacks::~emucore_callbacks() throw()
{
}

View file

@ -271,17 +271,6 @@ framebuffer_raw get_framebuffer() throw(std::bad_alloc)
}
std::pair<uint32_t, uint32_t> get_scale_factors(uint32_t width, uint32_t height)
{
uint32_t v = 1;
uint32_t h = 1;
if(width < 512)
h = 2;
if(height < 400)
v = 2;
return std::make_pair(h, v);
}
triplebuffer_logic::triplebuffer_logic() throw(std::bad_alloc)
{
mut = &mutex::aquire();

View file

@ -277,7 +277,7 @@ void do_load_beginning() throw(std::bad_alloc, std::runtime_error)
try {
movb.get_movie().reset_state();
random_seed_value = our_movie.movie_rtc_second;
our_rom->load();
our_rom->load(our_movie.movie_rtc_second, our_movie.movie_rtc_subsecond);
load_sram(our_movie.movie_sram);
our_movie.rtc_second = our_movie.movie_rtc_second;
@ -349,8 +349,8 @@ void do_load_state(struct moviefile& _movie, int lmode)
rrdata::add_internal();
try {
our_rom->region = &(_movie.gametype->get_region());
random_seed_value = _movie.rtc_second;
our_rom->load();
random_seed_value = _movie.movie_rtc_second;
our_rom->load(_movie.movie_rtc_second, _movie.movie_rtc_subsecond);
if(will_load_state) {
//Load the savestate and movie state.

View file

@ -266,7 +266,7 @@ loaded_rom::loaded_rom(const rom_files& files) throw(std::bad_alloc, std::runtim
msu1_base = resolve_file_relative(cromimg[0], files.base_file);
}
void loaded_rom::load() throw(std::bad_alloc, std::runtime_error)
void loaded_rom::load(uint64_t rtc_sec, uint64_t rtc_subsec) throw(std::bad_alloc, std::runtime_error)
{
if(!rtype)
throw std::runtime_error("Can't insert cartridge of type NONE!");
@ -286,7 +286,7 @@ void loaded_rom::load() throw(std::bad_alloc, std::runtime_error)
images[i].data = (const unsigned char*)romimg[i];
images[i].size = (size_t)romimg[i];
}
if(!rtype->load(images))
if(!rtype->load(images, rtc_sec, rtc_subsec))
throw std::runtime_error("Can't load cartridge ROM");
region = &core_get_region();

View file

@ -226,9 +226,9 @@ core_region& core_type::get_preferred_region()
return *p;
}
bool core_type::load(core_romimage* images)
bool core_type::load(core_romimage* images, uint64_t rtc_sec, uint64_t rtc_subsec)
{
return (loadimg(images) >= 0);
return (loadimg(images, rtc_sec, rtc_subsec) >= 0);
}
core_sysregion& core_type::combine_region(core_region& reg)
@ -239,7 +239,8 @@ core_sysregion& core_type::combine_region(core_region& reg)
throw std::runtime_error("Invalid region for system type");
}
core_type::core_type(const std::string& _iname, const std::string& _hname, int (*_load)(core_romimage* images))
core_type::core_type(const std::string& _iname, const std::string& _hname, int (*_load)(core_romimage* images,
uint64_t rtc_sec, uint64_t rtc_subsec))
: iname(_iname), hname(_hname), loadimg(_load)
{
types()[iname] = this;

View file

@ -170,7 +170,7 @@ int main(int argc, char** argv)
struct loaded_rom r;
try {
r = load_rom_from_commandline(cmdline);
r.load();
r.load(1000000000, 0);
} catch(std::bad_alloc& e) {
OOM_panic();
} catch(std::exception& e) {

View file

@ -705,7 +705,7 @@ void patching_done(struct loaded_rom& rom, wxWindow* modwin)
our_rom_name = our_rom->romimg[i].sha256;
if(our_rom_name == "")
our_rom_name = our_rom->romimg[0].sha256;
our_rom->load();
our_rom->load(1000000000, 0);
} catch(std::exception& e) {
show_message_ok(modwin, "Error loading ROM", e.what(), wxICON_EXCLAMATION);
return;

View file

@ -249,7 +249,7 @@ int main(int argc, char** argv)
struct loaded_rom r;
try {
r = load_rom_from_commandline(cmdline);
r.load();
r.load(1000000000, 0);
} catch(std::bad_alloc& e) {
OOM_panic();
} catch(std::exception& e) {
@ -288,7 +288,7 @@ int main(int argc, char** argv)
//Load ROM before starting the dumper.
our_rom = &r;
our_rom->region = &movie.gametype->get_region();
our_rom->load();
our_rom->load(movie.movie_rtc_second, movie.movie_rtc_subsecond);
startup_lua_scripts(cmdline);
dumper_startup(dumper, mode, prefix, length);
main_loop(r, movie, true);