lsnes/include/core/rom.hpp

125 lines
3.2 KiB
C++
Raw Normal View History

#ifndef _rom__hpp__included__
#define _rom__hpp__included__
#include <string>
#include <map>
#include <vector>
#include <stdexcept>
#include "core/misc.hpp"
2013-01-05 09:19:09 +02:00
#include "interface/romtype.hpp"
#include "library/fileimage.hpp"
/**
2011-09-16 21:09:22 +03:00
* ROM loaded into memory.
*/
struct loaded_rom
{
/**
2011-09-16 21:09:22 +03:00
* Create blank ROM
*/
loaded_rom() throw();
/**
2012-08-24 20:24:18 +03:00
* Take in ROM filename (or a bundle) and load it to memory.
*
2012-08-24 20:24:18 +03:00
* parameter file: The file to load
2013-05-08 15:42:44 +03:00
* parameter tmpprefer: The core name to prefer.
2011-09-16 21:09:22 +03:00
* throws std::bad_alloc: Not enough memory.
2012-08-24 20:24:18 +03:00
* throws std::runtime_error: Loading ROM file failed.
*/
2013-05-08 15:42:44 +03:00
loaded_rom(const std::string& file, const std::string& tmpprefer = "") throw(std::bad_alloc,
std::runtime_error);
/**
* Take in ROM filename and load it to memory with specified type.
*
* parameter file: The file to load
* parameter ctype: The core type to use.
* throws std::bad_alloc: Not enough memory.
* throws std::runtime_error: Loading ROM file failed.
*/
loaded_rom(const std::string& file, core_type& ctype) throw(std::bad_alloc, std::runtime_error);
/**
2011-09-16 21:09:22 +03:00
* ROM type
*/
core_type* rtype;
/**
2011-09-16 21:09:22 +03:00
* ROM region (this is the currently active region).
*/
core_region* region;
/**
2011-09-16 21:09:22 +03:00
* ROM original region (this is the region ROM is loaded as).
*/
core_region* orig_region;
/**
2011-09-16 21:09:22 +03:00
* Loaded main ROM
*/
loaded_image romimg[27];
/**
2011-09-16 21:09:22 +03:00
* Loaded main ROM XML
*/
loaded_image romxml[27];
/**
* MSU-1 base.
*/
std::string msu1_base;
/**
2012-08-24 20:24:18 +03:00
* Load filename.
*/
2012-08-24 20:24:18 +03:00
std::string load_filename;
/**
* Switches the active cartridge to this cartridge. The compatiblity between selected region and original region
* is checked. Region is updated after cartridge has been loaded.
*
2011-09-16 21:09:22 +03:00
* throws std::bad_alloc: Not enough memory
* throws std::runtime_error: Switching cartridges failed.
*/
2013-01-05 09:19:09 +02:00
void load(std::map<std::string, std::string>& settings, uint64_t rtc_sec, uint64_t rtc_subsec)
throw(std::bad_alloc, std::runtime_error);
/**
* Saves core state into buffer. WARNING: This takes emulated time.
2011-09-16 21:09:22 +03:00
*
* returns: The saved state.
* throws std::bad_alloc: Not enough memory.
*/
std::vector<char> save_core_state(bool nochecksum = false) throw(std::bad_alloc);
/**
* Loads core state from buffer.
*
* parameter buf: The buffer containing the state.
* throws std::runtime_error: Loading state failed.
*/
void load_core_state(const std::vector<char>& buf, bool nochecksum = false) throw(std::runtime_error);
};
/**
* Get major type and region of loaded ROM.
*
* returns: Tuple (ROM type, ROM region) of currently loaded ROM.
*/
std::pair<core_type*, core_region*> get_current_rom_info() throw();
/**
* Read SRAMs from command-line and and load the files.
*
2011-09-16 21:09:22 +03:00
* parameter cmdline: Command line
* returns: The loaded SRAM contents.
* throws std::bad_alloc: Out of memory.
* throws std::runtime_error: Failed to load.
*/
std::map<std::string, std::vector<char>> load_sram_commandline(const std::vector<std::string>& cmdline)
throw(std::bad_alloc, std::runtime_error);
/**
* Set the hasher callback.
*/
void set_hasher_callback(std::function<void(uint64_t)> cb);
//Map of preferred cores for each extension and type.
extern std::map<std::string, core_type*> preferred_core;
//Preferred overall core.
extern std::string preferred_core_default;
2013-05-08 15:42:44 +03:00
//Currently active ROM.
extern std::string current_romfile;
#endif