blargg_err_t Gme_File::load_file( const char* path ) { pre_load(); GME_FILE_READER in; RETURN_ERR( in.open( path ) ); return post_load( load_( in ) ); }
static void load_segment64(unsigned long *file_addr, struct phdr64 *phdr, signed long offset, int (*pre_load)(void*, long), void (*post_load)(void*, long)) { unsigned long src = phdr->p_offset + (unsigned long) file_addr; unsigned long destaddr; destaddr = phdr->p_paddr + offset; /* check if we're allowed to copy */ if (pre_load != NULL) { if (pre_load((void*)destaddr, phdr->p_memsz) != 0) return; } /* copy into storage */ memmove((void*)destaddr, (void*)src, phdr->p_filesz); /* clear bss */ memset((void*)(destaddr + phdr->p_filesz), 0, phdr->p_memsz - phdr->p_filesz); if (phdr->p_memsz && post_load != NULL) { post_load((void*)destaddr, phdr->p_memsz); } }
void IEngine::initialize(const string& json_str) { // init reader / writer / logger first init(); // record its status WRITE_ENGINE_STATUS(WC_ENGINE_STATUS_IDLE); // prepare config information json j_config = json::parse(json_str); for (json::const_iterator iter = j_config.begin(); iter != j_config.end(); ++iter) { KF_LOG_INFO(logger, "IEngine::init " << iter.key() << "->" << iter.value().dump()); } // pre_load process is mainly for IMDEngine or ITDEngine, // engine-wise control information loading, sometimes needs to be loaded before. pre_load(j_config); // load config information load(j_config); }
blargg_err_t Gme_File::load( Data_Reader& in ) { pre_load(); return post_load( load_( in ) ); }
blargg_err_t Gme_File::load_mem( void const* in, long size ) { pre_load(); return post_load( load_mem_( (byte const*) in, size ) ); }
blargg_err_t Gme_Loader::load_mem( void const* in, long size ) { pre_load(); return post_load_( load_mem_wrapper( (byte const*) in, (int) size ) ); }