mirror of https://github.com/LIJI32/SameBoy.git
Improved cheats API, fixed incorrect GameShark imports
This commit is contained in:
parent
38a130714f
commit
f79f18704d
|
@ -59,7 +59,7 @@ void GB_set_cheats_enabled(GB_gameboy_t *gb, bool enabled)
|
|||
gb->cheat_enabled = enabled;
|
||||
}
|
||||
|
||||
void GB_add_cheat(GB_gameboy_t *gb, const char *description, uint16_t address, uint16_t bank, uint8_t value, uint8_t old_value, bool use_old_value, bool enabled)
|
||||
const GB_cheat_t *GB_add_cheat(GB_gameboy_t *gb, const char *description, uint16_t address, uint16_t bank, uint8_t value, uint8_t old_value, bool use_old_value, bool enabled)
|
||||
{
|
||||
GB_ASSERT_NOT_RUNNING_OTHER_THREAD(gb)
|
||||
|
||||
|
@ -86,11 +86,15 @@ void GB_add_cheat(GB_gameboy_t *gb, const char *description, uint16_t address, u
|
|||
*hash = realloc(*hash, sizeof(GB_cheat_hash_t) + sizeof(cheat) * (*hash)->size);
|
||||
(*hash)->cheats[(*hash)->size - 1] = cheat;
|
||||
}
|
||||
|
||||
return cheat;
|
||||
}
|
||||
|
||||
const GB_cheat_t *const *GB_get_cheats(GB_gameboy_t *gb, size_t *size)
|
||||
{
|
||||
*size = gb->cheat_count;
|
||||
if (size) {
|
||||
*size = gb->cheat_count;
|
||||
}
|
||||
return (void *)gb->cheats;
|
||||
}
|
||||
|
||||
|
@ -130,7 +134,7 @@ void GB_remove_cheat(GB_gameboy_t *gb, const GB_cheat_t *cheat)
|
|||
free((void *)cheat);
|
||||
}
|
||||
|
||||
bool GB_import_cheat(GB_gameboy_t *gb, const char *cheat, const char *description, bool enabled)
|
||||
const GB_cheat_t *GB_import_cheat(GB_gameboy_t *gb, const char *cheat, const char *description, bool enabled)
|
||||
{
|
||||
GB_ASSERT_NOT_RUNNING_OTHER_THREAD(gb)
|
||||
|
||||
|
@ -144,8 +148,8 @@ bool GB_import_cheat(GB_gameboy_t *gb, const char *cheat, const char *descriptio
|
|||
if (bank >= 0x80) {
|
||||
bank &= 0xF;
|
||||
}
|
||||
GB_add_cheat(gb, description, address, bank, value, 0, false, enabled);
|
||||
return true;
|
||||
address = __builtin_bswap16(address);
|
||||
return GB_add_cheat(gb, description, address, bank, value, 0, false, enabled);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -174,8 +178,7 @@ bool GB_import_cheat(GB_gameboy_t *gb, const char *cheat, const char *descriptio
|
|||
}
|
||||
old_value = (uint8_t)(old_value >> 2) | (uint8_t)(old_value << 6);
|
||||
old_value ^= 0xBA;
|
||||
GB_add_cheat(gb, description, address, GB_CHEAT_ANY_BANK, value, old_value, true, enabled);
|
||||
return true;
|
||||
return GB_add_cheat(gb, description, address, GB_CHEAT_ANY_BANK, value, old_value, true, enabled);
|
||||
}
|
||||
|
||||
if (sscanf(stripped_cheat, "%02hhx%04hx%c", &value, &address, &dummy) == 2) {
|
||||
|
@ -184,11 +187,10 @@ bool GB_import_cheat(GB_gameboy_t *gb, const char *cheat, const char *descriptio
|
|||
if (address > 0x7FFF) {
|
||||
return false;
|
||||
}
|
||||
GB_add_cheat(gb, description, address, GB_CHEAT_ANY_BANK, value, false, true, enabled);
|
||||
return true;
|
||||
return GB_add_cheat(gb, description, address, GB_CHEAT_ANY_BANK, value, false, true, enabled);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void GB_update_cheat(GB_gameboy_t *gb, const GB_cheat_t *_cheat, const char *description, uint16_t address, uint16_t bank, uint8_t value, uint8_t old_value, bool use_old_value, bool enabled)
|
||||
|
|
|
@ -6,9 +6,9 @@
|
|||
|
||||
typedef struct GB_cheat_s GB_cheat_t;
|
||||
|
||||
void GB_add_cheat(GB_gameboy_t *gb, const char *description, uint16_t address, uint16_t bank, uint8_t value, uint8_t old_value, bool use_old_value, bool enabled);
|
||||
const GB_cheat_t *GB_add_cheat(GB_gameboy_t *gb, const char *description, uint16_t address, uint16_t bank, uint8_t value, uint8_t old_value, bool use_old_value, bool enabled);
|
||||
void GB_update_cheat(GB_gameboy_t *gb, const GB_cheat_t *cheat, const char *description, uint16_t address, uint16_t bank, uint8_t value, uint8_t old_value, bool use_old_value, bool enabled);
|
||||
bool GB_import_cheat(GB_gameboy_t *gb, const char *cheat, const char *description, bool enabled);
|
||||
const GB_cheat_t *GB_import_cheat(GB_gameboy_t *gb, const char *cheat, const char *description, bool enabled);
|
||||
const GB_cheat_t *const *GB_get_cheats(GB_gameboy_t *gb, size_t *size);
|
||||
void GB_remove_cheat(GB_gameboy_t *gb, const GB_cheat_t *cheat);
|
||||
bool GB_cheats_enabled(GB_gameboy_t *gb);
|
||||
|
|
Loading…
Reference in New Issue