diff --git a/deps/rcheevos/include/rconsoles.h b/deps/rcheevos/include/rc_consoles.h similarity index 80% rename from deps/rcheevos/include/rconsoles.h rename to deps/rcheevos/include/rc_consoles.h index d57c924791..2c2c647457 100644 --- a/deps/rcheevos/include/rconsoles.h +++ b/deps/rcheevos/include/rc_consoles.h @@ -1,5 +1,5 @@ -#ifndef RCONSOLES_H -#define RCONSOLES_H +#ifndef RC_CONSOLES_H +#define RC_CONSOLES_H #ifdef __cplusplus extern "C" { @@ -32,7 +32,7 @@ enum { RC_CONSOLE_WII_U = 20, RC_CONSOLE_PLAYSTATION_2 = 21, RC_CONSOLE_XBOX = 22, - /* 23 used to be EVENTS */ + RC_CONSOLE_MAGNAVOX_ODYSSEY2 = 23, RC_CONSOLE_POKEMON_MINI = 24, RC_CONSOLE_ATARI_2600 = 25, RC_CONSOLE_MS_DOS = 26, @@ -45,7 +45,7 @@ enum { RC_CONSOLE_SG1000 = 33, RC_CONSOLE_VIC20 = 34, RC_CONSOLE_AMIGA = 35, - RC_CONSOLE_AMIGA_ST = 36, + RC_CONSOLE_ATARI_ST = 36, RC_CONSOLE_AMSTRAD_PC = 37, RC_CONSOLE_APPLE_II = 38, RC_CONSOLE_SATURN = 39, @@ -65,6 +65,17 @@ enum { RC_CONSOLE_WONDERSWAN = 53, RC_CONSOLE_CASSETTEVISION = 54, RC_CONSOLE_SUPER_CASSETTEVISION = 55, + RC_CONSOLE_NEO_GEO_CD = 56, + RC_CONSOLE_FAIRCHILD_CHANNEL_F = 57, + RC_CONSOLE_FM_TOWNS = 58, + RC_CONSOLE_ZX_SPECTRUM = 59, + RC_CONSOLE_GAME_AND_WATCH = 60, + RC_CONSOLE_NOKIA_NGAGE = 61, + RC_CONSOLE_NINTENDO_3DS = 62, + RC_CONSOLE_SUPERVISION = 63, + RC_CONSOLE_SHARPX1 = 64, + RC_CONSOLE_TIC80 = 65, + RC_CONSOLE_THOMSONTO8 = 66, RC_CONSOLE_HUBS = 100, RC_CONSOLE_EVENTS = 101 @@ -76,4 +87,4 @@ const char* rc_console_name(int console_id); } #endif -#endif /* RCONSOLES_H */ +#endif /* RC_CONSOLES_H */ diff --git a/deps/rcheevos/include/rc_hash.h b/deps/rcheevos/include/rc_hash.h index 9ed86f86d3..10077824b4 100644 --- a/deps/rcheevos/include/rc_hash.h +++ b/deps/rcheevos/include/rc_hash.h @@ -5,7 +5,7 @@ #include #include -#include "rconsoles.h" +#include "rc_consoles.h" #ifdef __cplusplus extern "C" { diff --git a/deps/rcheevos/src/rcheevos/consoleinfo.c b/deps/rcheevos/src/rcheevos/consoleinfo.c index 75879f9cbe..a451fe339d 100644 --- a/deps/rcheevos/src/rcheevos/consoleinfo.c +++ b/deps/rcheevos/src/rcheevos/consoleinfo.c @@ -1,5 +1,5 @@ #include "rcheevos.h" -#include "rconsoles.h" +#include "rc_consoles.h" #include @@ -13,9 +13,6 @@ const char* rc_console_name(int console_id) case RC_CONSOLE_AMIGA: return "Amiga"; - case RC_CONSOLE_AMIGA_ST: - return "Amiga ST"; - case RC_CONSOLE_AMSTRAD_PC: return "Amstrad CPC"; @@ -40,6 +37,9 @@ const char* rc_console_name(int console_id) case RC_CONSOLE_ATARI_LYNX: return "Atari Lynx"; + case RC_CONSOLE_ATARI_ST: + return "Atari ST"; + case RC_CONSOLE_CASSETTEVISION: return "CassetteVision"; @@ -58,6 +58,15 @@ const char* rc_console_name(int console_id) case RC_CONSOLE_EVENTS: return "Events"; + case RC_CONSOLE_FAIRCHILD_CHANNEL_F: + return "Fairchild Channel F"; + + case RC_CONSOLE_FM_TOWNS: + return "FM Towns"; + + case RC_CONSOLE_GAME_AND_WATCH: + return "Game & Watch"; + case RC_CONSOLE_GAMEBOY: return "GameBoy"; @@ -79,6 +88,9 @@ const char* rc_console_name(int console_id) case RC_CONSOLE_INTELLIVISION: return "Intellivision"; + case RC_CONSOLE_MAGNAVOX_ODYSSEY2: + return "Magnavox Odyssey 2"; + case RC_CONSOLE_MASTER_SYSTEM: return "Master System"; @@ -91,6 +103,12 @@ const char* rc_console_name(int console_id) case RC_CONSOLE_MSX: return "MSX"; + case RC_CONSOLE_NEO_GEO_CD: + return "Neo Geo CD"; + + case RC_CONSOLE_NEOGEO_POCKET: + return "Neo Geo Pocket"; + case RC_CONSOLE_NINTENDO: return "Nintendo Entertainment System"; @@ -100,8 +118,11 @@ const char* rc_console_name(int console_id) case RC_CONSOLE_NINTENDO_DS: return "Nintendo DS"; - case RC_CONSOLE_NEOGEO_POCKET: - return "Neo Geo Pocket"; + case RC_CONSOLE_NINTENDO_3DS: + return "Nintendo 3DS"; + + case RC_CONSOLE_NOKIA_NGAGE: + return "Nokia N-Gage"; case RC_CONSOLE_ORIC: return "Oric"; @@ -142,14 +163,23 @@ const char* rc_console_name(int console_id) case RC_CONSOLE_SG1000: return "SG-1000"; + case RC_CONSOLE_SHARPX1: + return "Sharp X1"; + case RC_CONSOLE_SUPER_NINTENDO: return "Super Nintendo Entertainment System"; case RC_CONSOLE_SUPER_CASSETTEVISION: return "Super CassetteVision"; - case RC_CONSOLE_WONDERSWAN: - return "WonderSwan"; + case RC_CONSOLE_SUPERVISION: + return "Watara Supervision"; + + case RC_CONSOLE_THOMSONTO8: + return "Thomson TO8"; + + case RC_CONSOLE_TIC80: + return "TIC-80"; case RC_CONSOLE_VECTREX: return "Vectrex"; @@ -166,6 +196,9 @@ const char* rc_console_name(int console_id) case RC_CONSOLE_WII_U: return "Wii-U"; + case RC_CONSOLE_WONDERSWAN: + return "WonderSwan"; + case RC_CONSOLE_X68K: return "X68K"; @@ -175,6 +208,9 @@ const char* rc_console_name(int console_id) case RC_CONSOLE_ZX81: return "ZX-81"; + case RC_CONSOLE_ZX_SPECTRUM: + return "ZX Spectrum"; + default: return "Unknown"; } @@ -302,6 +338,12 @@ static const rc_memory_region_t _rc_memory_regions_intellivision[] = { }; static const rc_memory_regions_t rc_memory_regions_intellivision = { _rc_memory_regions_intellivision, 9 }; +/* ===== Magnavox Odyssey 2 ===== */ +static const rc_memory_region_t _rc_memory_regions_magnavox_odyssey_2[] = { + { 0x000000U, 0x00003FU, 0x000040U, RC_MEMORY_TYPE_SYSTEM_RAM, "System RAM" } +}; +static const rc_memory_regions_t rc_memory_regions_magnavox_odyssey_2 = { _rc_memory_regions_magnavox_odyssey_2, 1 }; + /* ===== Master System ===== */ /* http://www.smspower.org/Development/MemoryMap */ static const rc_memory_region_t _rc_memory_regions_master_system[] = { @@ -349,9 +391,23 @@ static const rc_memory_region_t _rc_memory_regions_nes[] = { { 0x2008U, 0x3FFFU, 0x2008U, RC_MEMORY_TYPE_VIRTUAL_RAM, "Mirrored PPU Register" }, /* repeats every 8 bytes */ { 0x4000U, 0x4017U, 0x4000U, RC_MEMORY_TYPE_HARDWARE_CONTROLLER, "APU and I/O register" }, { 0x4018U, 0x401FU, 0x4018U, RC_MEMORY_TYPE_HARDWARE_CONTROLLER, "APU and I/O test register" }, + + /* NOTE: these are for the original NES/Famicom */ { 0x4020U, 0x5FFFU, 0x4020U, RC_MEMORY_TYPE_READONLY, "Cartridge data"}, /* varies by mapper */ { 0x6000U, 0x7FFFU, 0x6000U, RC_MEMORY_TYPE_SAVE_RAM, "Cartridge RAM"}, { 0x8000U, 0xFFFFU, 0x8000U, RC_MEMORY_TYPE_READONLY, "Cartridge ROM"}, + + /* NOTE: these are the correct mappings for FDS: https://fms.komkon.org/EMUL8/NES.html + * 0x6000-0xDFFF is RAM on the FDS system and 0xE000-0xFFFF is FDS BIOS. + * If the core implements a memory map, we should still be able to translate the addresses + * correctly as we only use the classifications when a memory map is not provided + + { 0x4020U, 0x40FFU, 0x4020U, RC_MEMORY_TYPE_HARDWARE_CONTROLLER, "FDS I/O registers"}, + { 0x4100U, 0x5FFFU, 0x4100U, RC_MEMORY_TYPE_READONLY, "Cartridge data"}, // varies by mapper + { 0x6000U, 0xDFFFU, 0x6000U, RC_MEMORY_TYPE_SYSTEM_RAM, "FDS RAM"}, + { 0xE000U, 0xFFFFU, 0xE000U, RC_MEMORY_TYPE_READONLY, "FDS BIOS ROM"}, + + */ }; static const rc_memory_regions_t rc_memory_regions_nes = { _rc_memory_regions_nes, 11 }; @@ -359,7 +415,7 @@ static const rc_memory_regions_t rc_memory_regions_nes = { _rc_memory_regions_ne /* https://raw.githubusercontent.com/mikeryan/n64dev/master/docs/n64ops/n64ops%23h.txt */ static const rc_memory_region_t _rc_memory_regions_n64[] = { { 0x000000U, 0x1FFFFFU, 0x00000000U, RC_MEMORY_TYPE_SYSTEM_RAM, "System RAM" }, /* RDRAM 1 */ - { 0x200000U, 0x3FFFFFU, 0x00020000U, RC_MEMORY_TYPE_SYSTEM_RAM, "System RAM" }, /* RDRAM 2 */ + { 0x200000U, 0x3FFFFFU, 0x00200000U, RC_MEMORY_TYPE_SYSTEM_RAM, "System RAM" }, /* RDRAM 2 */ { 0x400000U, 0x7FFFFFU, 0x80000000U, RC_MEMORY_TYPE_SYSTEM_RAM, "System RAM" } /* expansion pak - cannot find any details for real address */ }; static const rc_memory_regions_t rc_memory_regions_n64 = { _rc_memory_regions_n64, 3 }; @@ -386,6 +442,7 @@ static const rc_memory_region_t _rc_memory_regions_pc8800[] = { static const rc_memory_regions_t rc_memory_regions_pc8800 = { _rc_memory_regions_pc8800, 2 }; /* ===== PC Engine ===== */ +/* http://www.archaicpixels.com/Memory_Map */ static const rc_memory_region_t _rc_memory_regions_pcengine[] = { { 0x000000U, 0x001FFFU, 0x1F0000U, RC_MEMORY_TYPE_SYSTEM_RAM, "System RAM" }, { 0x002000U, 0x011FFFU, 0x100000U, RC_MEMORY_TYPE_SYSTEM_RAM, "CD RAM" }, @@ -411,6 +468,14 @@ static const rc_memory_region_t _rc_memory_regions_playstation[] = { }; static const rc_memory_regions_t rc_memory_regions_playstation = { _rc_memory_regions_playstation, 2 }; +/* ===== PlayStation 2 ===== */ +/* https://psi-rockin.github.io/ps2tek/ */ +static const rc_memory_region_t _rc_memory_regions_playstation2[] = { + { 0x00000000U, 0x000FFFFFU, 0x00000000U, RC_MEMORY_TYPE_SYSTEM_RAM, "Kernel RAM" }, + { 0x00100000U, 0x01FFFFFFU, 0x00100000U, RC_MEMORY_TYPE_SYSTEM_RAM, "System RAM" } +}; +static const rc_memory_regions_t rc_memory_regions_playstation2 = { _rc_memory_regions_playstation2, 2 }; + /* ===== Pokemon Mini ===== */ /* https://www.pokemon-mini.net/documentation/memory-map/ */ static const rc_memory_region_t _rc_memory_regions_pokemini[] = { @@ -420,6 +485,7 @@ static const rc_memory_region_t _rc_memory_regions_pokemini[] = { static const rc_memory_regions_t rc_memory_regions_pokemini = { _rc_memory_regions_pokemini, 2 }; /* ===== Sega CD ===== */ +/* https://en.wikibooks.org/wiki/Genesis_Programming#MegaCD_Changes */ static const rc_memory_region_t _rc_memory_regions_segacd[] = { { 0x000000U, 0x00FFFFU, 0x00FF0000U, RC_MEMORY_TYPE_SYSTEM_RAM, "68000 RAM" }, { 0x010000U, 0x08FFFFU, 0x80020000U, RC_MEMORY_TYPE_SAVE_RAM, "CD PRG RAM" } /* normally banked into $020000-$03FFFF */ @@ -437,12 +503,17 @@ static const rc_memory_regions_t rc_memory_regions_saturn = { _rc_memory_regions /* ===== SG-1000 ===== */ /* http://www.smspower.org/Development/MemoryMap */ static const rc_memory_region_t _rc_memory_regions_sg1000[] = { - { 0x000000U, 0x0003FFU, 0xC000U, RC_MEMORY_TYPE_SYSTEM_RAM, "System RAM" } - /* TODO: should cartridge memory be exposed ($0000-$BFFF)? it's usually just ROM data, but may contain on-cartridge RAM - * This not is also concerning: http://www.smspower.org/Development/MemoryMap - * Cartridges may disable the system RAM and thus take over the full 64KB address space. */ + { 0x000000U, 0x0003FFU, 0xC000U, RC_MEMORY_TYPE_SYSTEM_RAM, "System RAM" }, + /* https://github.com/libretro/FBNeo/blob/697801c6262be6ca91615cf905444d3e039bc06f/src/burn/drv/sg1000/d_sg1000.cpp#L210-L237 */ + /* Expansion mode B exposes 8KB at $C000. The first 2KB hides the System RAM, but since the address matches, + we'll leverage that definition and expand it another 6KB */ + { 0x000400U, 0x001FFFU, 0xC400U, RC_MEMORY_TYPE_SYSTEM_RAM, "Extended RAM" }, + /* Expansion mode A exposes 8KB at $2000 */ + { 0x002000U, 0x003FFFU, 0x2000U, RC_MEMORY_TYPE_SYSTEM_RAM, "Extended RAM" }, + /* Othello exposes 2KB at $8000, and The Castle exposes 8KB at $8000 */ + { 0x004000U, 0x005FFFU, 0x8000U, RC_MEMORY_TYPE_SYSTEM_RAM, "Extended RAM" } }; -static const rc_memory_regions_t rc_memory_regions_sg1000 = { _rc_memory_regions_sg1000, 1 }; +static const rc_memory_regions_t rc_memory_regions_sg1000 = { _rc_memory_regions_sg1000, 4 }; /* ===== Super Cassette Vision ===== */ static const rc_memory_region_t _rc_memory_regions_scv[] = { @@ -457,13 +528,36 @@ static const rc_memory_region_t _rc_memory_regions_scv[] = { static const rc_memory_regions_t rc_memory_regions_scv = { _rc_memory_regions_scv, 7 }; /* ===== Super Nintendo ===== */ -/* https://segaretro.org/Sega_Saturn_hardware_notes_(2004-04-27) */ +/* https://en.wikibooks.org/wiki/Super_NES_Programming/SNES_memory_map#LoROM */ static const rc_memory_region_t _rc_memory_regions_snes[] = { { 0x000000U, 0x01FFFFU, 0x7E0000U, RC_MEMORY_TYPE_SYSTEM_RAM, "System RAM" }, { 0x020000U, 0x03FFFFU, 0xFE0000U, RC_MEMORY_TYPE_SAVE_RAM, "Cartridge RAM" } }; static const rc_memory_regions_t rc_memory_regions_snes = { _rc_memory_regions_snes, 2 }; +/* ===== Thomson TO8 ===== */ +/* https://github.com/mamedev/mame/blob/master/src/mame/drivers/thomson.cpp#L1617 */ +static const rc_memory_region_t _rc_memory_regions_thomson_to8[] = { + { 0x000000U, 0x07FFFFU, 0x000000U, RC_MEMORY_TYPE_SYSTEM_RAM, "System RAM" } +}; +static const rc_memory_regions_t rc_memory_regions_thomson_to8 = { _rc_memory_regions_thomson_to8, 1 }; + +/* ===== TIC-80 ===== */ +/* https://github.com/nesbox/TIC-80/wiki/RAM */ +static const rc_memory_region_t _rc_memory_regions_tic80[] = { + { 0x000000U, 0x003FFFU, 0x000000U, RC_MEMORY_TYPE_SYSTEM_RAM, "Video RAM" }, /* have to classify this as system RAM because the core exposes it as part of the RETRO_MEMORY_SYSTEM_RAM */ + { 0x004000U, 0x005FFFU, 0x004000U, RC_MEMORY_TYPE_SYSTEM_RAM, "Tile RAM" }, + { 0x006000U, 0x007FFFU, 0x006000U, RC_MEMORY_TYPE_SYSTEM_RAM, "Sprite RAM" }, + { 0x008000U, 0x00FF7FU, 0x008000U, RC_MEMORY_TYPE_SYSTEM_RAM, "MAP RAM" }, + { 0x00FF80U, 0x00FF8BU, 0x00FF80U, RC_MEMORY_TYPE_SYSTEM_RAM, "Input State" }, + { 0x00FF8CU, 0x014003U, 0x00FF8CU, RC_MEMORY_TYPE_SYSTEM_RAM, "Sound RAM" }, + { 0x014004U, 0x014403U, 0x014004U, RC_MEMORY_TYPE_SAVE_RAM, "Persistent Memory" }, /* this is also returned as part of RETRO_MEMORY_SYSTEM_RAM, but can be extrapolated correctly because the pointer starts at the first SYSTEM_RAM region */ + { 0x014404U, 0x014603U, 0x014404U, RC_MEMORY_TYPE_SYSTEM_RAM, "Sprite Flags" }, + { 0x014604U, 0x014E03U, 0x014604U, RC_MEMORY_TYPE_SYSTEM_RAM, "System Font" }, + { 0x014E04U, 0x017FFFU, 0x014E04U, RC_MEMORY_TYPE_SYSTEM_RAM, "System RAM"} +}; +static const rc_memory_regions_t rc_memory_regions_tic80 = { _rc_memory_regions_tic80, 10 }; + /* ===== Vectrex ===== */ /* https://roadsidethoughts.com/vectrex/vectrex-memory-map.htm */ static const rc_memory_region_t _rc_memory_regions_vectrex[] = { @@ -478,6 +572,15 @@ static const rc_memory_region_t _rc_memory_regions_virtualboy[] = { }; static const rc_memory_regions_t rc_memory_regions_virtualboy = { _rc_memory_regions_virtualboy, 2 }; +/* ===== Watara Supervision ===== */ +/* https://github.com/libretro/potator/blob/b5e5ba02914fcdf4a8128072dbc709da28e08832/common/memorymap.c#L231-L259 */ +static const rc_memory_region_t _rc_memory_regions_watara_supervision[] = { + { 0x0000U, 0x001FFFU, 0x0000U, RC_MEMORY_TYPE_SYSTEM_RAM, "System RAM" }, + { 0x2000U, 0x003FFFU, 0x2000U, RC_MEMORY_TYPE_HARDWARE_CONTROLLER, "Registers" }, + { 0x4000U, 0x005FFFU, 0x4000U, RC_MEMORY_TYPE_VIDEO_RAM, "Video RAM" } +}; +static const rc_memory_regions_t rc_memory_regions_watara_supervision = { _rc_memory_regions_watara_supervision, 3 }; + /* ===== WonderSwan ===== */ /* http://daifukkat.su/docs/wsman/#ovr_memmap */ static const rc_memory_region_t _rc_memory_regions_wonderswan[] = { @@ -538,6 +641,9 @@ const rc_memory_regions_t* rc_console_memory_regions(int console_id) case RC_CONSOLE_INTELLIVISION: return &rc_memory_regions_intellivision; + case RC_CONSOLE_MAGNAVOX_ODYSSEY2: + return &rc_memory_regions_magnavox_odyssey_2; + case RC_CONSOLE_MASTER_SYSTEM: return &rc_memory_regions_master_system; @@ -572,11 +678,14 @@ const rc_memory_regions_t* rc_console_memory_regions(int console_id) return &rc_memory_regions_pcengine; case RC_CONSOLE_PCFX: - return &rc_memory_regions_pcfx; + return &rc_memory_regions_pcfx; case RC_CONSOLE_PLAYSTATION: return &rc_memory_regions_playstation; + case RC_CONSOLE_PLAYSTATION_2: + return &rc_memory_regions_playstation2; + case RC_CONSOLE_POKEMON_MINI: return &rc_memory_regions_pokemini; @@ -595,6 +704,15 @@ const rc_memory_regions_t* rc_console_memory_regions(int console_id) case RC_CONSOLE_SUPER_NINTENDO: return &rc_memory_regions_snes; + case RC_CONSOLE_SUPERVISION: + return &rc_memory_regions_watara_supervision; + + case RC_CONSOLE_THOMSONTO8: + return &rc_memory_regions_thomson_to8; + + case RC_CONSOLE_TIC80: + return &rc_memory_regions_tic80; + case RC_CONSOLE_VECTREX: return &rc_memory_regions_vectrex; @@ -602,7 +720,7 @@ const rc_memory_regions_t* rc_console_memory_regions(int console_id) return &rc_memory_regions_virtualboy; case RC_CONSOLE_WONDERSWAN: - return &rc_memory_regions_wonderswan; + return &rc_memory_regions_wonderswan; default: return &rc_memory_regions_none;