More gracious error handling for state tracker.
This commit is contained in:
parent
97f937ec6d
commit
fad89f9d2d
|
@ -490,8 +490,8 @@ static bool load_imports(const char *dir_path, config_file_t *conf)
|
||||||
unsigned addr = 0;
|
unsigned addr = 0;
|
||||||
#ifdef HAVE_PYTHON
|
#ifdef HAVE_PYTHON
|
||||||
if (tracker_type != SSNES_STATE_PYTHON)
|
if (tracker_type != SSNES_STATE_PYTHON)
|
||||||
{
|
|
||||||
#endif
|
#endif
|
||||||
|
{
|
||||||
unsigned input_slot = 0;
|
unsigned input_slot = 0;
|
||||||
if (config_get_hex(conf, input_slot_buf, &input_slot))
|
if (config_get_hex(conf, input_slot_buf, &input_slot))
|
||||||
{
|
{
|
||||||
|
@ -525,11 +525,9 @@ static bool load_imports(const char *dir_path, config_file_t *conf)
|
||||||
SSNES_ERR("No address assigned to semantic.\n");
|
SSNES_ERR("No address assigned to semantic.\n");
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
#ifdef HAVE_PYTHON
|
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
int memtype = 0;
|
unsigned memtype;
|
||||||
switch (ram_type)
|
switch (ram_type)
|
||||||
{
|
{
|
||||||
case SSNES_STATE_WRAM:
|
case SSNES_STATE_WRAM:
|
||||||
|
@ -549,10 +547,10 @@ static bool load_imports(const char *dir_path, config_file_t *conf)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
memtype = SNES_MEMORY_WRAM;
|
memtype = -1u;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (addr >= psnes_get_memory_size(memtype))
|
if ((memtype != -1u) && (addr >= psnes_get_memory_size(memtype)))
|
||||||
{
|
{
|
||||||
SSNES_ERR("Address out of bounds.\n");
|
SSNES_ERR("Address out of bounds.\n");
|
||||||
goto error;
|
goto error;
|
||||||
|
@ -581,7 +579,7 @@ static bool load_imports(const char *dir_path, config_file_t *conf)
|
||||||
.oam = psnes_get_memory_data(SNES_MEMORY_OAM),
|
.oam = psnes_get_memory_data(SNES_MEMORY_OAM),
|
||||||
.apuram = psnes_get_memory_data(SNES_MEMORY_APURAM),
|
.apuram = psnes_get_memory_data(SNES_MEMORY_APURAM),
|
||||||
.info = info,
|
.info = info,
|
||||||
.info_elem = info_cnt
|
.info_elem = info_cnt,
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef HAVE_PYTHON
|
#ifdef HAVE_PYTHON
|
||||||
|
@ -613,7 +611,6 @@ static bool load_imports(const char *dir_path, config_file_t *conf)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
free(imports);
|
free(imports);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
error:
|
error:
|
||||||
|
|
|
@ -483,13 +483,13 @@ static bool get_import_value(xmlNodePtr ptr)
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
enum snes_ram_type ram_type = SSNES_STATE_WRAM;
|
enum snes_ram_type ram_type = SSNES_STATE_NONE;
|
||||||
uint32_t addr = 0;
|
uint32_t addr = 0;
|
||||||
|
|
||||||
#ifdef HAVE_PYTHON
|
#ifdef HAVE_PYTHON
|
||||||
if (tracker_type != SSNES_STATE_PYTHON)
|
if (tracker_type != SSNES_STATE_PYTHON)
|
||||||
{
|
|
||||||
#endif
|
#endif
|
||||||
|
{
|
||||||
if (input)
|
if (input)
|
||||||
{
|
{
|
||||||
unsigned slot = strtoul((const char*)input, NULL, 0);
|
unsigned slot = strtoul((const char*)input, NULL, 0);
|
||||||
|
@ -517,11 +517,9 @@ static bool get_import_value(xmlNodePtr ptr)
|
||||||
SSNES_ERR("No RAM address specificed for import value.\n");
|
SSNES_ERR("No RAM address specificed for import value.\n");
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
#ifdef HAVE_PYTHON
|
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
int memtype = 0;
|
unsigned memtype;
|
||||||
switch (ram_type)
|
switch (ram_type)
|
||||||
{
|
{
|
||||||
case SSNES_STATE_WRAM:
|
case SSNES_STATE_WRAM:
|
||||||
|
@ -541,10 +539,10 @@ static bool get_import_value(xmlNodePtr ptr)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
memtype = SNES_MEMORY_WRAM;
|
memtype = -1u;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (addr >= psnes_get_memory_size(memtype))
|
if ((memtype != -1u) && (addr >= psnes_get_memory_size(memtype)))
|
||||||
{
|
{
|
||||||
SSNES_ERR("Address out of bounds.\n");
|
SSNES_ERR("Address out of bounds.\n");
|
||||||
goto error;
|
goto error;
|
||||||
|
|
|
@ -88,32 +88,32 @@ snes_tracker_t* snes_tracker_init(const struct snes_tracker_info *info)
|
||||||
strlcpy(tracker->info[i].id, info->info[i].id, sizeof(tracker->info[i].id));
|
strlcpy(tracker->info[i].id, info->info[i].id, sizeof(tracker->info[i].id));
|
||||||
tracker->info[i].addr = info->info[i].addr;
|
tracker->info[i].addr = info->info[i].addr;
|
||||||
tracker->info[i].type = info->info[i].type;
|
tracker->info[i].type = info->info[i].type;
|
||||||
tracker->info[i].mask = (info->info[i].mask == 0) ? 0xffffffffu : info->info[i].mask;
|
tracker->info[i].mask = (info->info[i].mask == 0) ? -1u : info->info[i].mask;
|
||||||
|
|
||||||
#ifdef HAVE_PYTHON
|
#ifdef HAVE_PYTHON
|
||||||
if (info->info[i].type == SSNES_STATE_PYTHON)
|
if (info->info[i].type == SSNES_STATE_PYTHON)
|
||||||
tracker->info[i].py = tracker->py;
|
tracker->info[i].py = tracker->py;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
assert(info->wram && info->vram && info->cgram &&
|
// If we don't have a valid pointer.
|
||||||
info->oam && info->apuram);
|
static const uint8_t empty = 0;
|
||||||
|
|
||||||
switch (info->info[i].ram_type)
|
switch (info->info[i].ram_type)
|
||||||
{
|
{
|
||||||
case SSNES_STATE_WRAM:
|
case SSNES_STATE_WRAM:
|
||||||
tracker->info[i].ptr = info->wram;
|
tracker->info[i].ptr = info->wram ? info->wram : ∅
|
||||||
break;
|
break;
|
||||||
case SSNES_STATE_APURAM:
|
case SSNES_STATE_APURAM:
|
||||||
tracker->info[i].ptr = info->apuram;
|
tracker->info[i].ptr = info->apuram ? info->apuram : ∅
|
||||||
break;
|
break;
|
||||||
case SSNES_STATE_OAM:
|
case SSNES_STATE_OAM:
|
||||||
tracker->info[i].ptr = info->oam;
|
tracker->info[i].ptr = info->oam ? info->oam : ∅
|
||||||
break;
|
break;
|
||||||
case SSNES_STATE_CGRAM:
|
case SSNES_STATE_CGRAM:
|
||||||
tracker->info[i].ptr = info->cgram;
|
tracker->info[i].ptr = info->cgram ? info->cgram : ∅
|
||||||
break;
|
break;
|
||||||
case SSNES_STATE_VRAM:
|
case SSNES_STATE_VRAM:
|
||||||
tracker->info[i].ptr = info->vram;
|
tracker->info[i].ptr = info->vram ? info->vram : ∅
|
||||||
break;
|
break;
|
||||||
case SSNES_STATE_INPUT_SLOT1:
|
case SSNES_STATE_INPUT_SLOT1:
|
||||||
tracker->info[i].input_ptr = &tracker->input_state[0];
|
tracker->info[i].input_ptr = &tracker->input_state[0];
|
||||||
|
@ -125,7 +125,7 @@ snes_tracker_t* snes_tracker_init(const struct snes_tracker_info *info)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
tracker->info[i].ptr = NULL;
|
tracker->info[i].ptr = ∅
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -39,6 +39,7 @@ enum snes_tracker_type
|
||||||
|
|
||||||
enum snes_ram_type
|
enum snes_ram_type
|
||||||
{
|
{
|
||||||
|
SSNES_STATE_NONE,
|
||||||
SSNES_STATE_WRAM,
|
SSNES_STATE_WRAM,
|
||||||
SSNES_STATE_APURAM,
|
SSNES_STATE_APURAM,
|
||||||
SSNES_STATE_OAM,
|
SSNES_STATE_OAM,
|
||||||
|
|
Loading…
Reference in New Issue