// TODO This is internal, make it private as soon as possible. void retro_core_set_callbacks (RetroCore *self) { RetroModule *module; RetroCallbackSetter set_video_refresh; RetroCallbackSetter set_audio_sample; RetroCallbackSetter set_audio_sample_batch; RetroCallbackSetter set_input_poll; RetroCallbackSetter set_input_state; module = self->module; set_video_refresh = retro_module_get_set_video_refresh (module); set_audio_sample = retro_module_get_set_audio_sample (module); set_audio_sample_batch = retro_module_get_set_audio_sample_batch (module); set_input_poll = retro_module_get_set_input_poll (module); set_input_state = retro_module_get_set_input_state (module); retro_core_push_cb_data (self); set_video_refresh (on_video_refresh); set_audio_sample (on_audio_sample); set_audio_sample_batch (on_audio_sample_batch); set_input_poll (on_input_poll); set_input_state (on_input_state); retro_core_pop_cb_data (); }
// TODO This is internal, make it private as soon as possible. void retro_core_set_environment_interface (RetroCore *self) { RetroModule *module; RetroCallbackSetter set_environment; module = self->module; set_environment = retro_module_get_set_environment (module); retro_core_push_cb_data (self); set_environment (on_environment_interface); retro_core_pop_cb_data (); }
guint8* retro_core_get_memory (RetroCore* self, RetroMemoryType id, int* length) { g_return_val_if_fail (self != NULL, NULL); g_return_val_if_fail (length != NULL, NULL); retro_core_push_cb_data (self); RetroModule* module = self->module; RetroGetMemoryData get_mem_data = retro_module_get_get_memory_data (module); RetroGetMemorySize get_mem_size = retro_module_get_get_memory_size (module); guint8* data = get_mem_data (id); gsize size = get_mem_size (id); retro_core_pop_cb_data (); data = g_memdup (data, size); *length = (gint) (data ? size : 0); return data; }
void retro_core_set_memory (RetroCore* self, RetroMemoryType id, guint8* data, int length) { g_return_if_fail (self != NULL); g_return_if_fail (data != NULL); g_return_if_fail (length > 0); retro_core_push_cb_data (self); RetroModule* module = self->module; RetroGetMemoryData get_mem_region = retro_module_get_get_memory_data (module); RetroGetMemorySize get_mem_region_size = retro_module_get_get_memory_size (module); guint8* memory_region = get_mem_region (id); gsize memory_region_size = get_mem_region_size (id); retro_core_pop_cb_data (); g_return_if_fail (memory_region != NULL); g_return_if_fail (memory_region_size == length); memcpy (memory_region, data, length); }