update to rcheevos 10.3.2 (#13621)
This commit is contained in:
parent
19a1dbbc85
commit
600a3365ea
|
@ -477,7 +477,7 @@ int rc_api_process_submit_lboard_entry_response(rc_api_submit_lboard_entry_respo
|
|||
rc_buf_init(&response->response.buffer);
|
||||
|
||||
result = rc_json_parse_response(&response->response, server_response, fields, sizeof(fields) / sizeof(fields[0]));
|
||||
if (result != RC_OK)
|
||||
if (result != RC_OK || !response->response.succeeded)
|
||||
return result;
|
||||
|
||||
if (!rc_json_get_required_object(response_fields, sizeof(response_fields) / sizeof(response_fields[0]), &response->response, &fields[2], "Response"))
|
||||
|
|
|
@ -239,6 +239,20 @@ static const rc_memory_region_t _rc_memory_regions_3do[] = {
|
|||
};
|
||||
static const rc_memory_regions_t rc_memory_regions_3do = { _rc_memory_regions_3do, 1 };
|
||||
|
||||
/* ===== Amstrad CPC ===== */
|
||||
/* http://www.cpcalive.com/docs/amstrad_cpc_6128_memory_map.html */
|
||||
/* https://www.cpcwiki.eu/index.php/File:AWMG_page151.jpg */
|
||||
/* The original CPC only had 64KB of memory, but the newer model has 128KB (expandable to 576KB) */
|
||||
/* https://www.grimware.org/doku.php/documentations/devices/gatearraydo=export_xhtml#mmr */
|
||||
static const rc_memory_region_t _rc_memory_regions_amstrad_pc[] = {
|
||||
{ 0x000000U, 0x00003FU, 0x000000U, RC_MEMORY_TYPE_SYSTEM_RAM, "Firmware" },
|
||||
{ 0x000040U, 0x00B0FFU, 0x000040U, RC_MEMORY_TYPE_SYSTEM_RAM, "System RAM" },
|
||||
{ 0x00B100U, 0x00BFFFU, 0x00B100U, RC_MEMORY_TYPE_SYSTEM_RAM, "Stack and Firmware Data" },
|
||||
{ 0x00C000U, 0x00FFFFU, 0x00C000U, RC_MEMORY_TYPE_SYSTEM_RAM, "Screen Memory" },
|
||||
{ 0x010000U, 0x08FFFFU, 0x010000U, RC_MEMORY_TYPE_SYSTEM_RAM, "Extended RAM" },
|
||||
};
|
||||
static const rc_memory_regions_t rc_memory_regions_amstrad_pc = { _rc_memory_regions_amstrad_pc, 5 };
|
||||
|
||||
/* ===== Apple II ===== */
|
||||
static const rc_memory_region_t _rc_memory_regions_appleii[] = {
|
||||
{ 0x000000U, 0x00FFFFU, 0x000000U, RC_MEMORY_TYPE_SYSTEM_RAM, "Main RAM" },
|
||||
|
@ -665,6 +679,9 @@ const rc_memory_regions_t* rc_console_memory_regions(int console_id)
|
|||
case RC_CONSOLE_3DO:
|
||||
return &rc_memory_regions_3do;
|
||||
|
||||
case RC_CONSOLE_AMSTRAD_PC:
|
||||
return &rc_memory_regions_amstrad_pc;
|
||||
|
||||
case RC_CONSOLE_APPLE_II:
|
||||
return &rc_memory_regions_appleii;
|
||||
|
||||
|
@ -686,6 +703,7 @@ const rc_memory_regions_t* rc_console_memory_regions(int console_id)
|
|||
case RC_CONSOLE_DREAMCAST:
|
||||
return &rc_memory_regions_dreamcast;
|
||||
|
||||
case RC_CONSOLE_MEGADUCK:
|
||||
case RC_CONSOLE_GAMEBOY:
|
||||
return &rc_memory_regions_gameboy;
|
||||
|
||||
|
|
|
@ -361,37 +361,34 @@ char rc_memref_shared_size(char size) {
|
|||
}
|
||||
|
||||
static unsigned rc_peek_value(unsigned address, char size, rc_peek_t peek, void* ud) {
|
||||
rc_typed_value_t value;
|
||||
char shared_size;
|
||||
|
||||
if (!peek)
|
||||
return 0;
|
||||
|
||||
shared_size = rc_memref_shared_size(size);
|
||||
switch (shared_size)
|
||||
switch (size)
|
||||
{
|
||||
case RC_MEMSIZE_8_BITS:
|
||||
value.value.u32 = peek(address, 1, ud);
|
||||
break;
|
||||
return peek(address, 1, ud);
|
||||
|
||||
case RC_MEMSIZE_16_BITS:
|
||||
value.value.u32 = peek(address, 2, ud);
|
||||
break;
|
||||
return peek(address, 2, ud);
|
||||
|
||||
case RC_MEMSIZE_32_BITS:
|
||||
value.value.u32 = peek(address, 4, ud);
|
||||
break;
|
||||
return peek(address, 4, ud);
|
||||
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
{
|
||||
unsigned value;
|
||||
const size_t index = (size_t)size;
|
||||
if (index >= sizeof(rc_memref_shared_sizes) / sizeof(rc_memref_shared_sizes[0]))
|
||||
return 0;
|
||||
|
||||
if (shared_size != size) {
|
||||
value.type = RC_VALUE_TYPE_UNSIGNED;
|
||||
rc_transform_memref_value(&value, size);
|
||||
/* fetch the larger value and mask off the bits associated to the specified size
|
||||
* for correct deduction of prior value. non-prior memrefs should already be using
|
||||
* shared size memrefs to minimize the total number of memory reads required. */
|
||||
value = rc_peek_value(address, rc_memref_shared_sizes[index], peek, ud);
|
||||
return value & rc_memref_masks[index];
|
||||
}
|
||||
}
|
||||
|
||||
return value.value.u32;
|
||||
}
|
||||
|
||||
void rc_update_memref_value(rc_memref_value_t* memref, unsigned new_value) {
|
||||
|
|
|
@ -31,6 +31,11 @@ static const rc_disallowed_setting_t _rc_disallowed_bsnes_settings[] = {
|
|||
{ NULL, NULL }
|
||||
};
|
||||
|
||||
static const rc_disallowed_setting_t _rc_disallowed_cap32_settings[] = {
|
||||
{ "cap32_autorun", "disabled" },
|
||||
{ NULL, NULL }
|
||||
};
|
||||
|
||||
static const rc_disallowed_setting_t _rc_disallowed_dolphin_settings[] = {
|
||||
{ "dolphin_cheats_enabled", "enabled" },
|
||||
{ NULL, NULL }
|
||||
|
@ -116,6 +121,7 @@ static const rc_disallowed_setting_t _rc_disallowed_virtual_jaguar_settings[] =
|
|||
|
||||
static const rc_disallowed_core_settings_t rc_disallowed_core_settings[] = {
|
||||
{ "bsnes-mercury", _rc_disallowed_bsnes_settings },
|
||||
{ "cap32", _rc_disallowed_cap32_settings },
|
||||
{ "dolphin-emu", _rc_disallowed_dolphin_settings },
|
||||
{ "DuckStation", _rc_disallowed_duckstation_settings },
|
||||
{ "ecwolf", _rc_disallowed_ecwolf_settings },
|
||||
|
|
|
@ -83,6 +83,12 @@ static void filereader_close(void* file_handle)
|
|||
fclose((FILE*)file_handle);
|
||||
}
|
||||
|
||||
/* for unit tests - normally would call rc_hash_init_custom_filereader(NULL) */
|
||||
void rc_hash_reset_filereader()
|
||||
{
|
||||
filereader = NULL;
|
||||
}
|
||||
|
||||
void rc_hash_init_custom_filereader(struct rc_hash_filereader* reader)
|
||||
{
|
||||
/* initialize with defaults first */
|
||||
|
@ -1535,23 +1541,24 @@ void rc_file_close_buffered_file(void* file_handle)
|
|||
|
||||
static int rc_hash_file_from_buffer(char hash[33], int console_id, const uint8_t* buffer, size_t buffer_size)
|
||||
{
|
||||
struct rc_hash_filereader filereader_funcs_old;
|
||||
struct rc_hash_filereader buffered_filereader_funcs;
|
||||
struct rc_hash_filereader* old_filereader = filereader;
|
||||
int result;
|
||||
|
||||
memcpy(&filereader_funcs_old, &filereader_funcs, sizeof(filereader_funcs));
|
||||
|
||||
filereader_funcs.open = rc_file_open_buffered_file;
|
||||
filereader_funcs.close = rc_file_close_buffered_file;
|
||||
filereader_funcs.read = rc_file_read_buffered_file;
|
||||
filereader_funcs.seek = rc_file_seek_buffered_file;
|
||||
filereader_funcs.tell = rc_file_tell_buffered_file;
|
||||
memset(&buffered_filereader_funcs, 0, sizeof(buffered_filereader_funcs));
|
||||
buffered_filereader_funcs.open = rc_file_open_buffered_file;
|
||||
buffered_filereader_funcs.close = rc_file_close_buffered_file;
|
||||
buffered_filereader_funcs.read = rc_file_read_buffered_file;
|
||||
buffered_filereader_funcs.seek = rc_file_seek_buffered_file;
|
||||
buffered_filereader_funcs.tell = rc_file_tell_buffered_file;
|
||||
filereader = &buffered_filereader_funcs;
|
||||
|
||||
rc_buffered_file.data = rc_buffered_file.read_ptr = buffer;
|
||||
rc_buffered_file.data_size = buffer_size;
|
||||
|
||||
result = rc_hash_generate_from_file(hash, console_id, "[buffered file]");
|
||||
|
||||
memcpy(&filereader_funcs, &filereader_funcs_old, sizeof(filereader_funcs));
|
||||
filereader = old_filereader;
|
||||
return result;
|
||||
}
|
||||
|
||||
|
@ -1566,6 +1573,7 @@ int rc_hash_generate_from_buffer(char hash[33], int console_id, const uint8_t* b
|
|||
return rc_hash_error(message);
|
||||
}
|
||||
|
||||
case RC_CONSOLE_AMSTRAD_PC:
|
||||
case RC_CONSOLE_APPLE_II:
|
||||
case RC_CONSOLE_ATARI_2600:
|
||||
case RC_CONSOLE_ATARI_JAGUAR:
|
||||
|
@ -1578,6 +1586,7 @@ int rc_hash_generate_from_buffer(char hash[33], int console_id, const uint8_t* b
|
|||
case RC_CONSOLE_MAGNAVOX_ODYSSEY2:
|
||||
case RC_CONSOLE_MASTER_SYSTEM:
|
||||
case RC_CONSOLE_MEGA_DRIVE:
|
||||
case RC_CONSOLE_MEGADUCK:
|
||||
case RC_CONSOLE_MSX:
|
||||
case RC_CONSOLE_NEOGEO_POCKET:
|
||||
case RC_CONSOLE_ORIC:
|
||||
|
@ -1851,7 +1860,6 @@ int rc_hash_generate_from_file(char hash[33], int console_id, const char* path)
|
|||
return rc_hash_error(buffer);
|
||||
}
|
||||
|
||||
case RC_CONSOLE_APPLE_II:
|
||||
case RC_CONSOLE_ATARI_2600:
|
||||
case RC_CONSOLE_ATARI_JAGUAR:
|
||||
case RC_CONSOLE_COLECOVISION:
|
||||
|
@ -1863,6 +1871,7 @@ int rc_hash_generate_from_file(char hash[33], int console_id, const char* path)
|
|||
case RC_CONSOLE_MAGNAVOX_ODYSSEY2:
|
||||
case RC_CONSOLE_MASTER_SYSTEM:
|
||||
case RC_CONSOLE_MEGA_DRIVE:
|
||||
case RC_CONSOLE_MEGADUCK:
|
||||
case RC_CONSOLE_NEOGEO_POCKET:
|
||||
case RC_CONSOLE_ORIC:
|
||||
case RC_CONSOLE_POKEMON_MINI:
|
||||
|
@ -1876,6 +1885,8 @@ int rc_hash_generate_from_file(char hash[33], int console_id, const char* path)
|
|||
/* generic whole-file hash - don't buffer */
|
||||
return rc_hash_whole_file(hash, path);
|
||||
|
||||
case RC_CONSOLE_AMSTRAD_PC:
|
||||
case RC_CONSOLE_APPLE_II:
|
||||
case RC_CONSOLE_MSX:
|
||||
case RC_CONSOLE_PC8800:
|
||||
/* generic whole-file hash with m3u support - don't buffer */
|
||||
|
@ -1995,6 +2006,9 @@ static void rc_hash_initialize_dsk_iterator(struct rc_hash_iterator* iterator, c
|
|||
{
|
||||
/* FAT-12 5.25" DD (512 byte sectors, 9 sectors per track, 40 tracks per side */
|
||||
iterator->consoles[0] = RC_CONSOLE_MSX;
|
||||
|
||||
/* AMSDOS 3" - 40 tracks */
|
||||
iterator->consoles[1] = RC_CONSOLE_AMSTRAD_PC;
|
||||
}
|
||||
else if (size == 256 * 16 * 35) /* 140KB */
|
||||
{
|
||||
|
@ -2011,6 +2025,7 @@ static void rc_hash_initialize_dsk_iterator(struct rc_hash_iterator* iterator, c
|
|||
|
||||
/* check MSX first, as Apple II isn't supported by RetroArch, and RAppleWin won't use the iterator */
|
||||
rc_hash_iterator_append_console(iterator, RC_CONSOLE_MSX);
|
||||
rc_hash_iterator_append_console(iterator, RC_CONSOLE_AMSTRAD_PC);
|
||||
rc_hash_iterator_append_console(iterator, RC_CONSOLE_APPLE_II);
|
||||
}
|
||||
|
||||
|
@ -2081,7 +2096,7 @@ void rc_hash_initialize_iterator(struct rc_hash_iterator* iterator, const char*
|
|||
}
|
||||
}
|
||||
|
||||
/* bin is associated with MegaDrive, Sega32X, Atari 2600, and Watara Supervision.
|
||||
/* bin is associated with MegaDrive, Sega32X, Atari 2600, Watara Supervision, and MegaDuck.
|
||||
* Since they all use the same hashing algorithm, only specify one of them */
|
||||
iterator->consoles[0] = RC_CONSOLE_MEGA_DRIVE;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue