implemented the RETRO_ENVIRONMENT_SET_MEMORY_MAPS callback

This commit is contained in:
Andre Leiradella 2016-05-10 08:04:41 -03:00
parent 16894e5a5a
commit 723463149e
3 changed files with 50 additions and 5 deletions

View File

@ -1213,6 +1213,42 @@ bool rarch_environment_cb(unsigned cmd, void *data)
system->ports.size = i;
break;
}
case RETRO_ENVIRONMENT_SET_MEMORY_MAPS:
{
unsigned i;
const struct retro_memory_map *mmaps =
(const struct retro_memory_map*)data;
RARCH_LOG("Environ SET_MEMORY_MAPS.\n");
RARCH_LOG(" flags ptr offset start select disconn len addrspace\n");
for (i = 0; i < mmaps->num_descriptors; i++)
{
const struct retro_memory_descriptor *desc =
&mmaps->descriptors[i];
RARCH_LOG("Memory map: %u\n", i + 1);
RARCH_LOG(" %08X %p %08X %08X %08X %08X %08X %s\n",
desc->flags, desc->ptr, desc->offset, desc->start,
desc->select, desc->disconnect, desc->len,
desc->addrspace ? desc->addrspace : "");
}
free((void*)system->mmaps.descriptors);
system->mmaps.num_descriptors = 0;
system->mmaps.descriptors = (struct retro_memory_descriptor*)
calloc(mmaps->num_descriptors, sizeof(*system->mmaps.descriptors));
if (!system->mmaps.descriptors)
return false;
memcpy((void*)system->mmaps.descriptors, mmaps->descriptors,
mmaps->num_descriptors * sizeof(*system->mmaps.descriptors));
system->mmaps.num_descriptors = mmaps->num_descriptors;
break;
}
case RETRO_ENVIRONMENT_SET_GEOMETRY:
{

View File

@ -717,13 +717,20 @@ bool runloop_ctl(enum runloop_ctl_state state, void *data)
if (runloop_system.subsystem.data)
free(runloop_system.subsystem.data);
runloop_system.subsystem.data = NULL;
runloop_system.subsystem.size = 0;
if (runloop_system.ports.data)
free(runloop_system.ports.data);
runloop_system.subsystem.size = 0;
runloop_system.ports.data = NULL;
runloop_system.ports.size = 0;
runloop_key_event = NULL;
runloop_frontend_key_event = NULL;
runloop_system.ports.data = NULL;
runloop_system.ports.size = 0;
if (runloop_system.mmaps.descriptors)
free((void *)runloop_system.mmaps.descriptors);
runloop_system.mmaps.descriptors = NULL;
runloop_system.mmaps.num_descriptors = 0;
runloop_key_event = NULL;
runloop_frontend_key_event = NULL;
audio_driver_unset_callback();
memset(&runloop_system, 0, sizeof(rarch_system_info_t));

View File

@ -54,6 +54,8 @@ typedef struct rarch_system_info
struct retro_controller_info *data;
unsigned size;
} ports;
struct retro_memory_map mmaps;
} rarch_system_info_t;
#ifdef __cplusplus