update rcheevos to latest release, change a ton of ints to uints (what's actually used often)
todo: trim out unneeded defs and do c# 10 cleanups
This commit is contained in:
parent
c2e8bda5e2
commit
cc0b6c0d99
Binary file not shown.
Binary file not shown.
|
@ -6,14 +6,11 @@ endif()
|
|||
|
||||
project(rcheevos C)
|
||||
|
||||
set(CMAKE_C_STANDARD 90)
|
||||
set(CMAKE_C_STANDARD 99)
|
||||
set(CMAKE_C_STANDARD_REQUIRED ON)
|
||||
set(CMAKE_C_EXTENSIONS OFF)
|
||||
set(CMAKE_C_EXTENSIONS ON)
|
||||
|
||||
if(MSVC)
|
||||
# silence dumb warnings over CRT functions be "unsafe"
|
||||
add_compile_definitions(_CRT_SECURE_NO_WARNINGS)
|
||||
|
||||
# MSVC targets don't export all symbols unless this is on
|
||||
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
|
||||
|
||||
|
@ -25,14 +22,13 @@ if(MSVC)
|
|||
# this differs between clang-cl and cl
|
||||
if(CMAKE_C_COMPILER_ID MATCHES "Clang")
|
||||
add_compile_options(
|
||||
-Wno-missing-field-initializers
|
||||
-Wno-unused-parameter
|
||||
-Wno-null-pointer-subtraction
|
||||
)
|
||||
else()
|
||||
add_compile_options(
|
||||
/wd4100 # "unreferenced formal parameter"
|
||||
/wd4701 # "potentially uninitialized local variable used" (detection here is just faulty)
|
||||
/wd4244 # "conversion from 'type1' to 'type2', possible loss of data"
|
||||
/wd4245 # "conversion from 'type1' to 'type2', signed/unsigned mismatch"
|
||||
)
|
||||
endif()
|
||||
|
||||
|
@ -53,11 +49,8 @@ else()
|
|||
|
||||
# ignore some warnings
|
||||
add_compile_options(
|
||||
-Wno-missing-field-initializers
|
||||
-Wno-unused-parameter
|
||||
-Wno-null-pointer-subtraction
|
||||
-Wno-implicit-fallthrough
|
||||
-Wno-array-bounds # interestingly this warning isn't triggered with lto active, it's likely just a false positive when there isn't lto
|
||||
)
|
||||
|
||||
# strip in release, optimize for gdb usage in debug
|
||||
|
@ -73,42 +66,43 @@ else()
|
|||
set(RC_TARGET rcheevos)
|
||||
endif()
|
||||
|
||||
set(RC_RAPI_DIR ${CMAKE_SOURCE_DIR}/rcheevos/src/rapi)
|
||||
set(RC_RCHEEVOS_DIR ${CMAKE_SOURCE_DIR}/rcheevos/src/rcheevos)
|
||||
set(RC_RHASH_DIR ${CMAKE_SOURCE_DIR}/rcheevos/src/rhash)
|
||||
set(RC_SRC_DIR ${CMAKE_SOURCE_DIR}/rcheevos/src)
|
||||
set(RC_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/rcheevos/include)
|
||||
|
||||
add_library(
|
||||
${RC_TARGET}
|
||||
SHARED
|
||||
${RC_RAPI_DIR}/rc_api_common.c
|
||||
${RC_RAPI_DIR}/rc_api_common.h
|
||||
${RC_RAPI_DIR}/rc_api_editor.c
|
||||
${RC_RAPI_DIR}/rc_api_info.c
|
||||
${RC_RAPI_DIR}/rc_api_runtime.c
|
||||
${RC_RAPI_DIR}/rc_api_user.c
|
||||
${RC_RCHEEVOS_DIR}/alloc.c
|
||||
${RC_RCHEEVOS_DIR}/compat.c
|
||||
${RC_RCHEEVOS_DIR}/condition.c
|
||||
${RC_RCHEEVOS_DIR}/condset.c
|
||||
${RC_RCHEEVOS_DIR}/consoleinfo.c
|
||||
${RC_RCHEEVOS_DIR}/format.c
|
||||
${RC_RCHEEVOS_DIR}/lboard.c
|
||||
${RC_RCHEEVOS_DIR}/memref.c
|
||||
${RC_RCHEEVOS_DIR}/operand.c
|
||||
${RC_RCHEEVOS_DIR}/rc_compat.h
|
||||
${RC_RCHEEVOS_DIR}/rc_internal.h
|
||||
${RC_RCHEEVOS_DIR}/rc_validate.c
|
||||
${RC_RCHEEVOS_DIR}/rc_validate.h
|
||||
${RC_RCHEEVOS_DIR}/richpresence.c
|
||||
${RC_RCHEEVOS_DIR}/runtime.c
|
||||
${RC_RCHEEVOS_DIR}/runtime_progress.c
|
||||
${RC_RCHEEVOS_DIR}/trigger.c
|
||||
${RC_RCHEEVOS_DIR}/value.c
|
||||
${RC_RHASH_DIR}/cdreader.c
|
||||
${RC_RHASH_DIR}/hash.c
|
||||
${RC_RHASH_DIR}/md5.c
|
||||
${RC_RHASH_DIR}/md5.h
|
||||
${RC_SRC_DIR}/rc_compat.c
|
||||
${RC_SRC_DIR}/rc_compat.h
|
||||
${RC_SRC_DIR}/rc_util.c
|
||||
${RC_SRC_DIR}/rc_util.h
|
||||
${RC_SRC_DIR}/rc_version.h
|
||||
${RC_SRC_DIR}/rapi/rc_api_common.c
|
||||
${RC_SRC_DIR}/rapi/rc_api_common.h
|
||||
${RC_SRC_DIR}/rapi/rc_api_editor.c
|
||||
${RC_SRC_DIR}/rapi/rc_api_info.c
|
||||
${RC_SRC_DIR}/rapi/rc_api_runtime.c
|
||||
${RC_SRC_DIR}/rapi/rc_api_user.c
|
||||
${RC_SRC_DIR}/rcheevos/alloc.c
|
||||
${RC_SRC_DIR}/rcheevos/condition.c
|
||||
${RC_SRC_DIR}/rcheevos/condset.c
|
||||
${RC_SRC_DIR}/rcheevos/consoleinfo.c
|
||||
${RC_SRC_DIR}/rcheevos/format.c
|
||||
${RC_SRC_DIR}/rcheevos/lboard.c
|
||||
${RC_SRC_DIR}/rcheevos/memref.c
|
||||
${RC_SRC_DIR}/rcheevos/operand.c
|
||||
${RC_SRC_DIR}/rcheevos/rc_internal.h
|
||||
${RC_SRC_DIR}/rcheevos/rc_validate.c
|
||||
${RC_SRC_DIR}/rcheevos/rc_validate.h
|
||||
${RC_SRC_DIR}/rcheevos/richpresence.c
|
||||
${RC_SRC_DIR}/rcheevos/runtime.c
|
||||
${RC_SRC_DIR}/rcheevos/runtime_progress.c
|
||||
${RC_SRC_DIR}/rcheevos/trigger.c
|
||||
${RC_SRC_DIR}/rcheevos/value.c
|
||||
${RC_SRC_DIR}/rhash/cdreader.c
|
||||
${RC_SRC_DIR}/rhash/hash.c
|
||||
${RC_SRC_DIR}/rhash/md5.c
|
||||
${RC_SRC_DIR}/rhash/md5.h
|
||||
${RC_INCLUDE_DIR}/rc_api_editor.h
|
||||
${RC_INCLUDE_DIR}/rc_api_info.h
|
||||
${RC_INCLUDE_DIR}/rc_api_request.h
|
||||
|
@ -119,11 +113,10 @@ add_library(
|
|||
${RC_INCLUDE_DIR}/rc_hash.h
|
||||
${RC_INCLUDE_DIR}/rc_runtime.h
|
||||
${RC_INCLUDE_DIR}/rc_runtime_types.h
|
||||
${RC_INCLUDE_DIR}/rc_url.h
|
||||
${RC_INCLUDE_DIR}/rcheevos.h
|
||||
)
|
||||
|
||||
target_compile_definitions(${RC_TARGET} PRIVATE -DRC_DISABLE_LUA)
|
||||
target_compile_definitions(${RC_TARGET} PRIVATE RC_DISABLE_LUA RC_NO_THREADS)
|
||||
target_include_directories(${RC_TARGET} PRIVATE ${RC_INCLUDE_DIR})
|
||||
|
||||
add_custom_command(
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
#!/bin/sh
|
||||
set -e
|
||||
if [ -z "$CC" ]; then export CC="clang"; fi
|
||||
|
||||
rm -rf build
|
||||
mkdir build
|
||||
cd build
|
||||
cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_COMPILER=clang -G Ninja
|
||||
cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_COMPILER=$CC -G Ninja
|
||||
ninja
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
rmdir /s /q build
|
||||
mkdir build
|
||||
cd build
|
||||
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=TRUE -DCMAKE_C_COMPILER=clang-cl -G Ninja
|
||||
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON -DCMAKE_C_COMPILER=clang-cl -G Ninja
|
||||
ninja
|
||||
cd ..
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
#!/bin/sh
|
||||
set -e
|
||||
if [ -z "$CC" ]; then export CC="clang"; fi
|
||||
|
||||
rm -rf build
|
||||
mkdir build
|
||||
cd build
|
||||
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=TRUE -DCMAKE_C_COMPILER=clang -G Ninja
|
||||
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON -DCMAKE_C_COMPILER=$CC -G Ninja
|
||||
ninja
|
||||
|
|
|
@ -1 +1 @@
|
|||
Subproject commit 46e1feaafb2e777ced9fbef14a22d54fd0191287
|
||||
Subproject commit 6fb3ebca22fe4f3a97e7a391e5e9c4623aa2286a
|
|
@ -47,7 +47,16 @@ namespace BizHawk.Client.EmuHawk
|
|||
RC_INVALID_MEASURED_TARGET = -23,
|
||||
RC_INVALID_COMPARISON = -24,
|
||||
RC_INVALID_STATE = -25,
|
||||
RC_INVALID_JSON = -26
|
||||
RC_INVALID_JSON = -26,
|
||||
RC_API_FAILURE = -27,
|
||||
RC_LOGIN_REQUIRED = -28,
|
||||
RC_NO_GAME_LOADED = -29,
|
||||
RC_HARDCORE_DISABLED = -30,
|
||||
RC_ABORTED = -31,
|
||||
RC_NO_RESPONSE = -32,
|
||||
RC_ACCESS_DENIED = -33,
|
||||
RC_INVALID_CREDENTIALS = -34,
|
||||
RC_EXPIRED_TOKEN = -35
|
||||
}
|
||||
|
||||
public enum rc_runtime_event_type_t : byte
|
||||
|
@ -63,10 +72,11 @@ namespace BizHawk.Client.EmuHawk
|
|||
RC_RUNTIME_EVENT_LBOARD_TRIGGERED,
|
||||
RC_RUNTIME_EVENT_ACHIEVEMENT_DISABLED,
|
||||
RC_RUNTIME_EVENT_LBOARD_DISABLED,
|
||||
RC_RUNTIME_EVENT_ACHIEVEMENT_UNPRIMED
|
||||
RC_RUNTIME_EVENT_ACHIEVEMENT_UNPRIMED,
|
||||
RC_RUNTIME_EVENT_ACHIEVEMENT_PROGRESS_UPDATED
|
||||
}
|
||||
|
||||
public enum rc_api_image_type_t : int
|
||||
public enum rc_api_image_type_t : uint
|
||||
{
|
||||
RC_IMAGE_TYPE_GAME = 1,
|
||||
RC_IMAGE_TYPE_ACHIEVEMENT,
|
||||
|
@ -74,7 +84,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
RC_IMAGE_TYPE_USER,
|
||||
}
|
||||
|
||||
public enum rc_runtime_achievement_category_t : int
|
||||
public enum rc_runtime_achievement_category_t : uint
|
||||
{
|
||||
RC_ACHIEVEMENT_CATEGORY_CORE = 3,
|
||||
RC_ACHIEVEMENT_CATEGORY_UNOFFICIAL = 5,
|
||||
|
@ -83,17 +93,24 @@ namespace BizHawk.Client.EmuHawk
|
|||
[StructLayout(LayoutKind.Sequential)]
|
||||
public struct rc_runtime_event_t
|
||||
{
|
||||
public int id;
|
||||
public uint id;
|
||||
public int value;
|
||||
public rc_runtime_event_type_t type;
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public struct rc_api_buffer_t
|
||||
public struct rc_buffer_chunk_t
|
||||
{
|
||||
public IntPtr write;
|
||||
public IntPtr end;
|
||||
public IntPtr start;
|
||||
public IntPtr next;
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public struct rc_buffer_t
|
||||
{
|
||||
public rc_buffer_chunk_t chunk;
|
||||
public unsafe fixed byte data[256];
|
||||
}
|
||||
|
||||
|
@ -102,10 +119,12 @@ namespace BizHawk.Client.EmuHawk
|
|||
{
|
||||
public IntPtr url;
|
||||
public IntPtr post_data;
|
||||
public rc_api_buffer_t buffer;
|
||||
public IntPtr content_type;
|
||||
public rc_buffer_t buffer;
|
||||
|
||||
public string URL => Mershul.PtrToStringUtf8(url);
|
||||
public string PostData => Mershul.PtrToStringUtf8(post_data);
|
||||
public string ContentType => Mershul.PtrToStringUtf8(content_type);
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
|
@ -113,16 +132,18 @@ namespace BizHawk.Client.EmuHawk
|
|||
{
|
||||
public int succeeded;
|
||||
public IntPtr error_message;
|
||||
public rc_api_buffer_t buffer;
|
||||
public IntPtr error_code;
|
||||
public rc_buffer_t buffer;
|
||||
|
||||
public string ErrorMessage => Mershul.PtrToStringUtf8(error_message);
|
||||
public readonly string ErrorMessage => Mershul.PtrToStringUtf8(error_message);
|
||||
public readonly string ErrorCode => Mershul.PtrToStringUtf8(error_code);
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public struct rc_api_fetch_user_unlocks_response_t
|
||||
{
|
||||
public IntPtr achievement_ids;
|
||||
public int num_achievement_ids;
|
||||
public unsafe uint* achievement_ids;
|
||||
public uint num_achievement_ids;
|
||||
public rc_api_response_t response;
|
||||
}
|
||||
|
||||
|
@ -131,19 +152,32 @@ namespace BizHawk.Client.EmuHawk
|
|||
{
|
||||
public IntPtr username;
|
||||
public IntPtr api_token;
|
||||
public int score;
|
||||
public int num_unread_messages;
|
||||
public uint score;
|
||||
public uint score_softcore;
|
||||
public uint num_unread_messages;
|
||||
public IntPtr display_name;
|
||||
public rc_api_response_t response;
|
||||
|
||||
public string Username => Mershul.PtrToStringUtf8(username);
|
||||
public string ApiToken => Mershul.PtrToStringUtf8(api_token);
|
||||
public string DisplayName => Mershul.PtrToStringUtf8(display_name);
|
||||
public readonly string Username => Mershul.PtrToStringUtf8(username);
|
||||
public readonly string ApiToken => Mershul.PtrToStringUtf8(api_token);
|
||||
public readonly string DisplayName => Mershul.PtrToStringUtf8(display_name);
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public struct rc_api_unlock_entry_t
|
||||
{
|
||||
public uint achievement_id;
|
||||
public long when; // time_t?
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public struct rc_api_start_session_response_t
|
||||
{
|
||||
public unsafe rc_api_unlock_entry_t* hardcore_unlocks;
|
||||
public unsafe rc_api_unlock_entry_t* unlocks;
|
||||
public uint num_hardcore_unlocks;
|
||||
public uint num_unlocks;
|
||||
public long server_now; // time_t?
|
||||
public rc_api_response_t response;
|
||||
}
|
||||
|
||||
|
@ -154,11 +188,11 @@ namespace BizHawk.Client.EmuHawk
|
|||
public string username;
|
||||
[MarshalAs(UnmanagedType.LPUTF8Str)]
|
||||
public string api_token;
|
||||
public int game_id;
|
||||
public uint game_id;
|
||||
[MarshalAs(UnmanagedType.Bool)]
|
||||
public bool hardcore;
|
||||
|
||||
public rc_api_fetch_user_unlocks_request_t(string username, string api_token, int game_id, bool hardcore)
|
||||
public rc_api_fetch_user_unlocks_request_t(string username, string api_token, uint game_id, bool hardcore)
|
||||
{
|
||||
this.username = username;
|
||||
this.api_token = api_token;
|
||||
|
@ -192,9 +226,9 @@ namespace BizHawk.Client.EmuHawk
|
|||
public string username;
|
||||
[MarshalAs(UnmanagedType.LPUTF8Str)]
|
||||
public string api_token;
|
||||
public int game_id;
|
||||
public uint game_id;
|
||||
|
||||
public rc_api_start_session_request_t(string username, string api_token, int game_id)
|
||||
public rc_api_start_session_request_t(string username, string api_token, uint game_id)
|
||||
{
|
||||
this.username = username;
|
||||
this.api_token = api_token;
|
||||
|
@ -205,17 +239,18 @@ namespace BizHawk.Client.EmuHawk
|
|||
[StructLayout(LayoutKind.Sequential)]
|
||||
public struct rc_api_award_achievement_response_t
|
||||
{
|
||||
public int awarded_achievement_id;
|
||||
public int new_player_score;
|
||||
public int achievements_remaining;
|
||||
public uint awarded_achievement_id;
|
||||
public uint new_player_score;
|
||||
public uint new_player_score_softcore;
|
||||
public uint achievements_remaining;
|
||||
public rc_api_response_t response;
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public struct rc_api_achievement_definition_t
|
||||
{
|
||||
public int id;
|
||||
public int points;
|
||||
public uint id;
|
||||
public uint points;
|
||||
public rc_runtime_achievement_category_t category;
|
||||
public IntPtr title;
|
||||
public IntPtr description;
|
||||
|
@ -225,46 +260,46 @@ namespace BizHawk.Client.EmuHawk
|
|||
public long created; // time_t?
|
||||
public long updated; // time_t?
|
||||
|
||||
public string Title => Mershul.PtrToStringUtf8(title);
|
||||
public string Description => Mershul.PtrToStringUtf8(description);
|
||||
public string Definition => Mershul.PtrToStringUtf8(definition);
|
||||
public string Author => Mershul.PtrToStringUtf8(author);
|
||||
public string BadgeName => Mershul.PtrToStringUtf8(badge_name);
|
||||
public readonly string Title => Mershul.PtrToStringUtf8(title);
|
||||
public readonly string Description => Mershul.PtrToStringUtf8(description);
|
||||
public readonly string Definition => Mershul.PtrToStringUtf8(definition);
|
||||
public readonly string Author => Mershul.PtrToStringUtf8(author);
|
||||
public readonly string BadgeName => Mershul.PtrToStringUtf8(badge_name);
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public struct rc_api_leaderboard_definition_t
|
||||
{
|
||||
public int id;
|
||||
public uint id;
|
||||
public int format;
|
||||
public IntPtr title;
|
||||
public IntPtr description;
|
||||
public IntPtr definition;
|
||||
public int lower_is_better;
|
||||
public int hidden;
|
||||
public byte lower_is_better;
|
||||
public byte hidden;
|
||||
|
||||
public string Title => Mershul.PtrToStringUtf8(title);
|
||||
public string Description => Mershul.PtrToStringUtf8(description);
|
||||
public string Definition => Mershul.PtrToStringUtf8(definition);
|
||||
public readonly string Title => Mershul.PtrToStringUtf8(title);
|
||||
public readonly string Description => Mershul.PtrToStringUtf8(description);
|
||||
public readonly string Definition => Mershul.PtrToStringUtf8(definition);
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public struct rc_api_fetch_game_data_response_t
|
||||
{
|
||||
public int id;
|
||||
public uint id;
|
||||
public RetroAchievements.ConsoleID console_id;
|
||||
public IntPtr title;
|
||||
public IntPtr image_name;
|
||||
public IntPtr rich_presence_script;
|
||||
public IntPtr achievements;
|
||||
public int num_achievements;
|
||||
public IntPtr leaderboards;
|
||||
public int num_leaderboards;
|
||||
public unsafe rc_api_achievement_definition_t* achievements;
|
||||
public uint num_achievements;
|
||||
public unsafe rc_api_leaderboard_definition_t* leaderboards;
|
||||
public uint num_leaderboards;
|
||||
public rc_api_response_t response;
|
||||
|
||||
public string Title => Mershul.PtrToStringUtf8(title);
|
||||
public string ImageName => Mershul.PtrToStringUtf8(image_name);
|
||||
public string RichPresenceScript => Mershul.PtrToStringUtf8(rich_presence_script);
|
||||
public readonly string Title => Mershul.PtrToStringUtf8(title);
|
||||
public readonly string ImageName => Mershul.PtrToStringUtf8(image_name);
|
||||
public readonly string RichPresenceScript => Mershul.PtrToStringUtf8(rich_presence_script);
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
|
@ -276,19 +311,29 @@ namespace BizHawk.Client.EmuHawk
|
|||
[StructLayout(LayoutKind.Sequential)]
|
||||
public struct rc_api_resolve_hash_response_t
|
||||
{
|
||||
public int game_id;
|
||||
public uint game_id;
|
||||
public rc_api_response_t response;
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public struct rc_api_lboard_entry_t
|
||||
{
|
||||
public IntPtr username;
|
||||
public uint rank;
|
||||
public int score;
|
||||
|
||||
public readonly string Username => Mershul.PtrToStringUtf8(username);
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public struct rc_api_submit_lboard_entry_response_t
|
||||
{
|
||||
public int submitted_score;
|
||||
public int best_score;
|
||||
public int new_rank;
|
||||
public int num_entries;
|
||||
public IntPtr top_entries;
|
||||
public int num_top_entries;
|
||||
public uint new_rank;
|
||||
public uint num_entries;
|
||||
public unsafe rc_api_lboard_entry_t* top_entries;
|
||||
public uint num_top_entries;
|
||||
public rc_api_response_t response;
|
||||
}
|
||||
|
||||
|
@ -299,13 +344,13 @@ namespace BizHawk.Client.EmuHawk
|
|||
public string username;
|
||||
[MarshalAs(UnmanagedType.LPUTF8Str)]
|
||||
public string api_token;
|
||||
public int achievement_id;
|
||||
public uint achievement_id;
|
||||
[MarshalAs(UnmanagedType.Bool)]
|
||||
public bool hardcore;
|
||||
[MarshalAs(UnmanagedType.LPUTF8Str)]
|
||||
public string game_hash;
|
||||
|
||||
public rc_api_award_achievement_request_t(string username, string api_token, int achievement_id, bool hardcore, string game_hash)
|
||||
public rc_api_award_achievement_request_t(string username, string api_token, uint achievement_id, bool hardcore, string game_hash)
|
||||
{
|
||||
this.username = username;
|
||||
this.api_token = api_token;
|
||||
|
@ -322,9 +367,9 @@ namespace BizHawk.Client.EmuHawk
|
|||
public string username;
|
||||
[MarshalAs(UnmanagedType.LPUTF8Str)]
|
||||
public string api_token;
|
||||
public int game_id;
|
||||
public uint game_id;
|
||||
|
||||
public rc_api_fetch_game_data_request_t(string username, string api_token, int game_id)
|
||||
public rc_api_fetch_game_data_request_t(string username, string api_token, uint game_id)
|
||||
{
|
||||
this.username = username;
|
||||
this.api_token = api_token;
|
||||
|
@ -353,11 +398,11 @@ namespace BizHawk.Client.EmuHawk
|
|||
public string username;
|
||||
[MarshalAs(UnmanagedType.LPUTF8Str)]
|
||||
public string api_token;
|
||||
public int game_id;
|
||||
public uint game_id;
|
||||
[MarshalAs(UnmanagedType.LPUTF8Str)]
|
||||
public string rich_presence;
|
||||
|
||||
public rc_api_ping_request_t(string username, string api_token, int game_id, string rich_presence)
|
||||
public rc_api_ping_request_t(string username, string api_token, uint game_id, string rich_presence)
|
||||
{
|
||||
this.username = username;
|
||||
this.api_token = api_token;
|
||||
|
@ -391,12 +436,12 @@ namespace BizHawk.Client.EmuHawk
|
|||
public string username;
|
||||
[MarshalAs(UnmanagedType.LPUTF8Str)]
|
||||
public string api_token;
|
||||
public int leaderboard_id;
|
||||
public uint leaderboard_id;
|
||||
public int score;
|
||||
[MarshalAs(UnmanagedType.LPUTF8Str)]
|
||||
public string game_hash;
|
||||
|
||||
public rc_api_submit_lboard_entry_request_t(string username, string api_token, int leaderboard_id, int score, string game_hash)
|
||||
public rc_api_submit_lboard_entry_request_t(string username, string api_token, uint leaderboard_id, int score, string game_hash)
|
||||
{
|
||||
this.username = username;
|
||||
this.api_token = api_token;
|
||||
|
@ -406,46 +451,76 @@ namespace BizHawk.Client.EmuHawk
|
|||
}
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public struct rc_api_achievement_awarded_entry_t
|
||||
{
|
||||
public IntPtr username;
|
||||
public long awarded; // time_t?
|
||||
|
||||
public string Username => Mershul.PtrToStringUtf8(username);
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public struct rc_api_fetch_achievement_info_response_t
|
||||
{
|
||||
public int id;
|
||||
public int game_id;
|
||||
public int num_awarded;
|
||||
public int num_players;
|
||||
public IntPtr recently_awarded;
|
||||
public int num_recently_awarded;
|
||||
public uint id;
|
||||
public uint game_id;
|
||||
public uint num_awarded;
|
||||
public uint num_players;
|
||||
public unsafe rc_api_achievement_awarded_entry_t* recently_awarded;
|
||||
public uint num_recently_awarded;
|
||||
public rc_api_response_t response;
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public struct rc_api_game_list_entry_t
|
||||
{
|
||||
public uint id;
|
||||
public IntPtr name;
|
||||
|
||||
public readonly string Name => Mershul.PtrToStringUtf8(name);
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public struct rc_api_fetch_games_list_response_t
|
||||
{
|
||||
public IntPtr entries;
|
||||
public int num_entries;
|
||||
public unsafe rc_api_game_list_entry_t* entries;
|
||||
public uint num_entries;
|
||||
public rc_api_response_t response;
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public struct rc_api_lboard_info_entry_t
|
||||
{
|
||||
public IntPtr username;
|
||||
public uint rank;
|
||||
public uint index;
|
||||
public int score;
|
||||
public long submitted; // time_t?
|
||||
|
||||
public readonly string Username => Mershul.PtrToStringUtf8(username);
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public struct rc_api_fetch_leaderboard_info_response_t
|
||||
{
|
||||
public int id;
|
||||
public uint id;
|
||||
public int format;
|
||||
public int lower_is_better;
|
||||
public uint lower_is_better;
|
||||
public IntPtr title;
|
||||
public IntPtr description;
|
||||
public IntPtr definition;
|
||||
public int game_id;
|
||||
public uint game_id;
|
||||
public IntPtr author;
|
||||
public long created; // time_t?
|
||||
public long updated; // time_t?
|
||||
public IntPtr entries;
|
||||
public int num_entries;
|
||||
public unsafe rc_api_lboard_info_entry_t* entries;
|
||||
public uint num_entries;
|
||||
public rc_api_response_t response;
|
||||
|
||||
public string Title => Mershul.PtrToStringUtf8(title);
|
||||
public string Description => Mershul.PtrToStringUtf8(description);
|
||||
public string Definition => Mershul.PtrToStringUtf8(definition);
|
||||
public readonly string Title => Mershul.PtrToStringUtf8(title);
|
||||
public readonly string Description => Mershul.PtrToStringUtf8(description);
|
||||
public readonly string Definition => Mershul.PtrToStringUtf8(definition);
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
|
@ -455,12 +530,12 @@ namespace BizHawk.Client.EmuHawk
|
|||
public string username;
|
||||
[MarshalAs(UnmanagedType.LPUTF8Str)]
|
||||
public string api_token;
|
||||
public int achievement_id;
|
||||
public int first_entry;
|
||||
public int count;
|
||||
public int friends_only;
|
||||
public uint achievement_id;
|
||||
public uint first_entry;
|
||||
public uint count;
|
||||
public uint friends_only;
|
||||
|
||||
public rc_api_fetch_achievement_info_request_t(string username, string api_token, int achievement_id, int first_entry, int count, int friends_only)
|
||||
public rc_api_fetch_achievement_info_request_t(string username, string api_token, uint achievement_id, uint first_entry, uint count, uint friends_only)
|
||||
{
|
||||
this.username = username;
|
||||
this.api_token = api_token;
|
||||
|
@ -474,9 +549,9 @@ namespace BizHawk.Client.EmuHawk
|
|||
[StructLayout(LayoutKind.Sequential)]
|
||||
public struct rc_api_fetch_games_list_request_t
|
||||
{
|
||||
public int console_id;
|
||||
public uint console_id;
|
||||
|
||||
public rc_api_fetch_games_list_request_t(int console_id)
|
||||
public rc_api_fetch_games_list_request_t(uint console_id)
|
||||
{
|
||||
this.console_id = console_id;
|
||||
}
|
||||
|
@ -485,13 +560,13 @@ namespace BizHawk.Client.EmuHawk
|
|||
[StructLayout(LayoutKind.Sequential)]
|
||||
public struct rc_api_fetch_leaderboard_info_request_t
|
||||
{
|
||||
public int leaderboard_id;
|
||||
public int count;
|
||||
public int first_entry;
|
||||
public uint leaderboard_id;
|
||||
public uint count;
|
||||
public uint first_entry;
|
||||
[MarshalAs(UnmanagedType.LPUTF8Str)]
|
||||
public string username;
|
||||
|
||||
public rc_api_fetch_leaderboard_info_request_t(int leaderboard_id, int count, int first_entry, string username)
|
||||
public rc_api_fetch_leaderboard_info_request_t(uint leaderboard_id, uint count, uint first_entry, string username)
|
||||
{
|
||||
this.leaderboard_id = leaderboard_id;
|
||||
this.count = count;
|
||||
|
@ -576,11 +651,11 @@ namespace BizHawk.Client.EmuHawk
|
|||
public delegate void rc_runtime_event_handler_t(IntPtr runtime_event);
|
||||
|
||||
[UnmanagedFunctionPointer(cc)]
|
||||
public delegate int rc_peek_t(int address, int num_bytes, IntPtr ud);
|
||||
public delegate uint rc_runtime_peek_t(uint address, uint num_bytes, IntPtr ud);
|
||||
|
||||
[UnmanagedFunctionPointer(cc)]
|
||||
[return: MarshalAs(UnmanagedType.Bool)]
|
||||
public delegate bool rc_runtime_validate_address_t(int address);
|
||||
public delegate bool rc_runtime_validate_address_t(uint address);
|
||||
|
||||
[UnmanagedFunctionPointer(cc)]
|
||||
public delegate void rc_hash_message_callback(string message);
|
||||
|
@ -607,7 +682,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
public abstract void rc_runtime_reset(IntPtr runtime);
|
||||
|
||||
[BizImport(cc)]
|
||||
public abstract void rc_runtime_do_frame(IntPtr runtime, rc_runtime_event_handler_t rc_runtime_event_handler_t, rc_peek_t peek, IntPtr ud, IntPtr unused);
|
||||
public abstract void rc_runtime_do_frame(IntPtr runtime, rc_runtime_event_handler_t rc_runtime_event_handler_t, rc_runtime_peek_t peek, IntPtr ud, IntPtr unused);
|
||||
|
||||
[BizImport(cc)]
|
||||
public abstract rc_error_t rc_runtime_progress_size(IntPtr runtime, IntPtr unused);
|
||||
|
@ -619,44 +694,44 @@ namespace BizHawk.Client.EmuHawk
|
|||
public abstract rc_error_t rc_runtime_deserialize_progress(IntPtr runtime, byte[] serialized, IntPtr unused);
|
||||
|
||||
[BizImport(cc)]
|
||||
public abstract void rc_runtime_invalidate_address(IntPtr runtime, int address);
|
||||
public abstract void rc_runtime_invalidate_address(IntPtr runtime, uint address);
|
||||
|
||||
[BizImport(cc)]
|
||||
public abstract void rc_runtime_validate_addresses(IntPtr runtime, rc_runtime_event_handler_t event_handler, rc_runtime_validate_address_t validate_handler);
|
||||
|
||||
[BizImport(cc)]
|
||||
public abstract rc_error_t rc_runtime_activate_achievement(IntPtr runtime, int id, string memaddr, IntPtr unused, int unused_idx);
|
||||
public abstract rc_error_t rc_runtime_activate_achievement(IntPtr runtime, uint id, string memaddr, IntPtr unused, int unused_idx);
|
||||
|
||||
[BizImport(cc)]
|
||||
public abstract rc_error_t rc_runtime_activate_lboard(IntPtr runtime, int id, string memaddr, IntPtr unused, int unused_idx);
|
||||
public abstract rc_error_t rc_runtime_activate_lboard(IntPtr runtime, uint id, string memaddr, IntPtr unused, int unused_idx);
|
||||
|
||||
[BizImport(cc)]
|
||||
public abstract rc_error_t rc_runtime_activate_richpresence(IntPtr runtime, string script, IntPtr unused, int unused_idx);
|
||||
|
||||
[BizImport(cc)]
|
||||
public abstract IntPtr rc_runtime_get_achievement(IntPtr runtime, int id);
|
||||
public abstract IntPtr rc_runtime_get_achievement(IntPtr runtime, uint id);
|
||||
|
||||
[BizImport(cc)]
|
||||
public abstract IntPtr rc_runtime_get_lboard(IntPtr runtime, int id);
|
||||
public abstract IntPtr rc_runtime_get_lboard(IntPtr runtime, uint id);
|
||||
|
||||
[BizImport(cc)]
|
||||
public abstract int rc_runtime_get_richpresence(IntPtr runtime, byte[] buffer, int buffersize, rc_peek_t peek, IntPtr ud, IntPtr unused);
|
||||
public abstract int rc_runtime_get_richpresence(IntPtr runtime, byte[] buffer, UIntPtr buffersize, rc_runtime_peek_t peek, IntPtr ud, IntPtr unused);
|
||||
|
||||
[BizImport(cc)]
|
||||
[return: MarshalAs(UnmanagedType.Bool)]
|
||||
public abstract bool rc_runtime_get_achievement_measured(IntPtr runtime, int id, out int measured_value, out int measured_target);
|
||||
public abstract bool rc_runtime_get_achievement_measured(IntPtr runtime, uint id, out uint measured_value, out uint measured_target);
|
||||
|
||||
[BizImport(cc)]
|
||||
public abstract int rc_runtime_format_achievement_measured(IntPtr runtime, int id, byte[] buffer, long buffer_size);
|
||||
public abstract int rc_runtime_format_achievement_measured(IntPtr runtime, uint id, byte[] buffer, UIntPtr buffer_size);
|
||||
|
||||
[BizImport(cc)]
|
||||
public abstract int rc_runtime_format_lboard_value(byte[] buffer, int size, int value, int format);
|
||||
|
||||
[BizImport(cc)]
|
||||
public abstract void rc_runtime_deactivate_achievement(IntPtr runtime, int id);
|
||||
public abstract void rc_runtime_deactivate_achievement(IntPtr runtime, uint id);
|
||||
|
||||
[BizImport(cc)]
|
||||
public abstract void rc_runtime_deactivate_lboard(IntPtr runtime, int id);
|
||||
public abstract void rc_runtime_deactivate_lboard(IntPtr runtime, uint id);
|
||||
|
||||
[BizImport(cc)]
|
||||
public abstract void rc_hash_init_error_message_callback(rc_hash_message_callback callback);
|
||||
|
@ -672,14 +747,14 @@ namespace BizHawk.Client.EmuHawk
|
|||
|
||||
[BizImport(cc)]
|
||||
[return: MarshalAs(UnmanagedType.Bool)]
|
||||
public abstract bool rc_hash_generate_from_buffer(byte[] hash, RetroAchievements.ConsoleID console_id, byte[] buffer, long buffer_size);
|
||||
public abstract bool rc_hash_generate_from_buffer(byte[] hash, RetroAchievements.ConsoleID console_id, byte[] buffer, UIntPtr buffer_size);
|
||||
|
||||
[BizImport(cc)]
|
||||
[return: MarshalAs(UnmanagedType.Bool)]
|
||||
public abstract bool rc_hash_generate_from_file(byte[] hash, RetroAchievements.ConsoleID console_id, string path);
|
||||
|
||||
[BizImport(cc)]
|
||||
public abstract void rc_hash_initialize_iterator(IntPtr iterator, string path, byte[] buffer, long buffer_size);
|
||||
public abstract void rc_hash_initialize_iterator(IntPtr iterator, string path, byte[] buffer, UIntPtr buffer_size);
|
||||
|
||||
[BizImport(cc)]
|
||||
[return: MarshalAs(UnmanagedType.Bool)]
|
||||
|
|
|
@ -107,10 +107,10 @@ namespace BizHawk.Client.EmuHawk
|
|||
RA.WarnDisableHardcore(null);
|
||||
}
|
||||
|
||||
protected override int IdentifyHash(string hash)
|
||||
protected override uint IdentifyHash(string hash)
|
||||
=> RA.IdentifyHash(hash);
|
||||
|
||||
protected override int IdentifyRom(byte[] rom)
|
||||
protected override uint IdentifyRom(byte[] rom)
|
||||
=> RA.IdentifyRom(rom, rom.Length);
|
||||
|
||||
public RAIntegration(
|
||||
|
@ -213,7 +213,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
for (var i = 0; i < _memFunctions.Count; i++)
|
||||
{
|
||||
_memFunctions[i].MemGuard = _memGuard;
|
||||
RA.InstallMemoryBank(i, _memFunctions[i].ReadFunc, _memFunctions[i].WriteFunc, _memFunctions[i].BankSize);
|
||||
RA.InstallMemoryBank(i, _memFunctions[i].ReadFunc, _memFunctions[i].WriteFunc, checked((int)_memFunctions[i].BankSize));
|
||||
RA.InstallMemoryBankBlockReader(i, _memFunctions[i].ReadBlockFunc);
|
||||
}
|
||||
}
|
||||
|
@ -224,9 +224,9 @@ namespace BizHawk.Client.EmuHawk
|
|||
{
|
||||
var ids = GetRAGameIds(_mainForm.CurrentlyOpenRomArgs.OpenAdvanced, consoleId);
|
||||
|
||||
AllGamesVerified = !ids.Contains(0);
|
||||
AllGamesVerified = !ids.Contains(0u);
|
||||
|
||||
RA.ActivateGame(ids.Count > 0 ? ids[0] : 0);
|
||||
RA.ActivateGame(ids.Count > 0 ? ids[0] : 0u);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -137,13 +137,13 @@ namespace BizHawk.Client.EmuHawk
|
|||
public abstract void UpdateHWnd(IntPtr hwnd);
|
||||
|
||||
[BizImport(cc, EntryPoint = "_RA_IdentifyRom")]
|
||||
public abstract int IdentifyRom(byte[] rom, int romSize);
|
||||
public abstract uint IdentifyRom(byte[] rom, int romSize);
|
||||
|
||||
[BizImport(cc, EntryPoint = "_RA_IdentifyHash")]
|
||||
public abstract int IdentifyHash(string hash);
|
||||
public abstract uint IdentifyHash(string hash);
|
||||
|
||||
[BizImport(cc, EntryPoint = "_RA_ActivateGame")]
|
||||
public abstract void ActivateGame(int gameId);
|
||||
public abstract void ActivateGame(uint gameId);
|
||||
|
||||
[BizImport(cc, EntryPoint = "_RA_OnLoadNewRom")]
|
||||
[return: MarshalAs(UnmanagedType.Bool)]
|
||||
|
|
|
@ -29,7 +29,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
InternalDoRequest(apiParamsResult, ref api_req);
|
||||
}
|
||||
|
||||
public CheevoUnlockRequest(string username, string api_token, int achievement_id, bool hardcore, string game_hash)
|
||||
public CheevoUnlockRequest(string username, string api_token, uint achievement_id, bool hardcore, string game_hash)
|
||||
{
|
||||
_apiParams = new(username, api_token, achievement_id, hardcore, game_hash);
|
||||
}
|
||||
|
@ -40,8 +40,8 @@ namespace BizHawk.Client.EmuHawk
|
|||
|
||||
public class Cheevo
|
||||
{
|
||||
public int ID { get; }
|
||||
public int Points { get; }
|
||||
public uint ID { get; }
|
||||
public uint Points { get; }
|
||||
public LibRCheevos.rc_runtime_achievement_category_t Category { get; }
|
||||
public string Title { get; }
|
||||
public string Description { get; }
|
||||
|
@ -129,9 +129,9 @@ namespace BizHawk.Client.EmuHawk
|
|||
|
||||
private readonly byte[] _cheevoFormatBuffer = new byte[1024];
|
||||
|
||||
private string GetCheevoProgress(int id)
|
||||
private string GetCheevoProgress(uint id)
|
||||
{
|
||||
var len = _lib.rc_runtime_format_achievement_measured(_runtime, id, _cheevoFormatBuffer, _cheevoFormatBuffer.Length);
|
||||
var len = _lib.rc_runtime_format_achievement_measured(_runtime, id, _cheevoFormatBuffer, new((uint)_cheevoFormatBuffer.Length));
|
||||
return Encoding.ASCII.GetString(_cheevoFormatBuffer, 0, len);
|
||||
}
|
||||
|
||||
|
|
|
@ -247,12 +247,11 @@ namespace BizHawk.Client.EmuHawk
|
|||
// outputs results in the console
|
||||
public static void DebugHash()
|
||||
{
|
||||
using var ofd = new OpenFileDialog
|
||||
{
|
||||
CheckFileExists = true,
|
||||
CheckPathExists = true,
|
||||
InitialDirectory = PathUtils.ExeDirectoryPath,
|
||||
};
|
||||
using var ofd = new OpenFileDialog();
|
||||
|
||||
ofd.CheckFileExists = true;
|
||||
ofd.CheckPathExists = true;
|
||||
ofd.InitialDirectory = PathUtils.ExeDirectoryPath;
|
||||
|
||||
string path = null;
|
||||
if (ofd.ShowDialog()
|
||||
|
|
|
@ -16,15 +16,15 @@ namespace BizHawk.Client.EmuHawk
|
|||
private ConsoleID _consoleId;
|
||||
|
||||
private string _gameHash;
|
||||
private readonly Dictionary<string, int> _cachedGameIds = new(); // keep around IDs per hash to avoid unneeded API calls for a simple RebootCore
|
||||
private readonly Dictionary<string, uint> _cachedGameIds = new(); // keep around IDs per hash to avoid unneeded API calls for a simple RebootCore
|
||||
|
||||
private GameData _gameData;
|
||||
private readonly Dictionary<int, GameData> _cachedGameDatas = new(); // keep game data around to avoid unneeded API calls for a simple RebootCore
|
||||
private readonly Dictionary<uint, GameData> _cachedGameDatas = new(); // keep game data around to avoid unneeded API calls for a simple RebootCore
|
||||
|
||||
public sealed class UserUnlocksRequest : RCheevoHttpRequest
|
||||
{
|
||||
private LibRCheevos.rc_api_fetch_user_unlocks_request_t _apiParams;
|
||||
private readonly IReadOnlyDictionary<int, Cheevo> _cheevos;
|
||||
private readonly IReadOnlyDictionary<uint, Cheevo> _cheevos;
|
||||
|
||||
protected override void ResponseCallback(byte[] serv_resp)
|
||||
{
|
||||
|
@ -33,10 +33,9 @@ namespace BizHawk.Client.EmuHawk
|
|||
{
|
||||
unsafe
|
||||
{
|
||||
var unlocks = (int*)resp.achievement_ids;
|
||||
for (var i = 0; i < resp.num_achievement_ids; i++)
|
||||
{
|
||||
if (_cheevos.TryGetValue(unlocks![i], out var cheevo))
|
||||
if (_cheevos.TryGetValue(resp.achievement_ids[i], out var cheevo))
|
||||
{
|
||||
cheevo.SetUnlocked(_apiParams.hardcore, true);
|
||||
}
|
||||
|
@ -57,7 +56,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
InternalDoRequest(apiParamsResult, ref api_req);
|
||||
}
|
||||
|
||||
public UserUnlocksRequest(string username, string api_token, int game_id, bool hardcore, IReadOnlyDictionary<int, Cheevo> cheevos)
|
||||
public UserUnlocksRequest(string username, string api_token, uint game_id, bool hardcore, IReadOnlyDictionary<uint, Cheevo> cheevos)
|
||||
{
|
||||
_apiParams = new(username, api_token, game_id, hardcore);
|
||||
_cheevos = cheevos;
|
||||
|
@ -95,7 +94,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
InternalDoRequest(apiParamsResult, ref api_req);
|
||||
}
|
||||
|
||||
public GameDataRequest(string username, string api_token, int game_id, Func<bool> allowUnofficialCheevos)
|
||||
public GameDataRequest(string username, string api_token, uint game_id, Func<bool> allowUnofficialCheevos)
|
||||
{
|
||||
_apiParams = new(username, api_token, game_id);
|
||||
_allowUnofficialCheevos = allowUnofficialCheevos;
|
||||
|
@ -144,7 +143,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
|
||||
public class GameData
|
||||
{
|
||||
public int GameID { get; }
|
||||
public uint GameID { get; }
|
||||
public ConsoleID ConsoleID { get; }
|
||||
public string Title { get; }
|
||||
private string ImageName { get; }
|
||||
|
@ -153,14 +152,14 @@ namespace BizHawk.Client.EmuHawk
|
|||
|
||||
private ImageRequest _gameBadgeImageRequest;
|
||||
|
||||
private readonly IReadOnlyDictionary<int, Cheevo> _cheevos;
|
||||
private readonly IReadOnlyDictionary<int, LBoard> _lboards;
|
||||
private readonly IReadOnlyDictionary<uint, Cheevo> _cheevos;
|
||||
private readonly IReadOnlyDictionary<uint, LBoard> _lboards;
|
||||
|
||||
public IEnumerable<Cheevo> CheevoEnumerable => _cheevos.Values;
|
||||
public IEnumerable<LBoard> LBoardEnumerable => _lboards.Values;
|
||||
|
||||
public Cheevo GetCheevoById(int i) => _cheevos[i];
|
||||
public LBoard GetLboardById(int i) => _lboards[i];
|
||||
public Cheevo GetCheevoById(uint i) => _cheevos[i];
|
||||
public LBoard GetLboardById(uint i) => _lboards[i];
|
||||
|
||||
public UserUnlocksRequest InitUnlocks(string username, string api_token, bool hardcore)
|
||||
{
|
||||
|
@ -184,7 +183,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
return requests;
|
||||
}
|
||||
|
||||
public int TotalCheevoPoints(bool hardcore)
|
||||
public long TotalCheevoPoints(bool hardcore)
|
||||
=> _cheevos?.Values.Sum(c => c.IsEnabled && !c.Invalid && c.IsUnlocked(hardcore) ? c.Points : 0) ?? 0;
|
||||
|
||||
public unsafe GameData(in LibRCheevos.rc_api_fetch_game_data_response_t resp, Func<bool> allowUnofficialCheevos)
|
||||
|
@ -195,20 +194,18 @@ namespace BizHawk.Client.EmuHawk
|
|||
ImageName = resp.ImageName;
|
||||
RichPresenseScript = resp.RichPresenceScript;
|
||||
|
||||
var cheevos = new Dictionary<int, Cheevo>();
|
||||
var cptr = (LibRCheevos.rc_api_achievement_definition_t*)resp.achievements;
|
||||
var cheevos = new Dictionary<uint, Cheevo>();
|
||||
for (var i = 0; i < resp.num_achievements; i++)
|
||||
{
|
||||
cheevos.Add(cptr![i].id, new(in cptr[i], allowUnofficialCheevos));
|
||||
cheevos.Add(resp.achievements[i].id, new(in resp.achievements[i], allowUnofficialCheevos));
|
||||
}
|
||||
|
||||
_cheevos = cheevos;
|
||||
|
||||
var lboards = new Dictionary<int, LBoard>();
|
||||
var lptr = (LibRCheevos.rc_api_leaderboard_definition_t*)resp.leaderboards;
|
||||
var lboards = new Dictionary<uint, LBoard>();
|
||||
for (var i = 0; i < resp.num_leaderboards; i++)
|
||||
{
|
||||
lboards.Add(lptr![i].id, new(in lptr[i]));
|
||||
lboards.Add(resp.leaderboards[i].id, new(in resp.leaderboards[i]));
|
||||
}
|
||||
|
||||
_lboards = lboards;
|
||||
|
@ -222,8 +219,8 @@ namespace BizHawk.Client.EmuHawk
|
|||
ImageName = gameData.ImageName;
|
||||
RichPresenseScript = gameData.RichPresenseScript;
|
||||
|
||||
_cheevos = gameData.CheevoEnumerable.ToDictionary<Cheevo, int, Cheevo>(cheevo => cheevo.ID, cheevo => new(in cheevo, allowUnofficialCheevos));
|
||||
_lboards = gameData.LBoardEnumerable.ToDictionary<LBoard, int, LBoard>(lboard => lboard.ID, lboard => new(in lboard));
|
||||
_cheevos = gameData.CheevoEnumerable.ToDictionary<Cheevo, uint, Cheevo>(cheevo => cheevo.ID, cheevo => new(in cheevo, allowUnofficialCheevos));
|
||||
_lboards = gameData.LBoardEnumerable.ToDictionary<LBoard, uint, LBoard>(lboard => lboard.ID, lboard => new(in lboard));
|
||||
}
|
||||
|
||||
public GameData()
|
||||
|
@ -235,7 +232,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
private sealed class ResolveHashRequest : RCheevoHttpRequest
|
||||
{
|
||||
private LibRCheevos.rc_api_resolve_hash_request_t _apiParams;
|
||||
public int GameID { get; private set; }
|
||||
public uint GameID { get; private set; }
|
||||
|
||||
// eh? not sure I want this retried, given the blocking behavior
|
||||
public override bool ShouldRetry => false;
|
||||
|
@ -268,7 +265,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
}
|
||||
}
|
||||
|
||||
private int SendHash(string hash)
|
||||
private uint SendHash(string hash)
|
||||
{
|
||||
var resolveHashRequest = new ResolveHashRequest(hash);
|
||||
PushRequest(resolveHashRequest);
|
||||
|
@ -276,16 +273,16 @@ namespace BizHawk.Client.EmuHawk
|
|||
return resolveHashRequest.GameID;
|
||||
}
|
||||
|
||||
protected override int IdentifyHash(string hash)
|
||||
protected override uint IdentifyHash(string hash)
|
||||
{
|
||||
_gameHash ??= hash;
|
||||
return _cachedGameIds.GetValueOrPut(hash, SendHash);
|
||||
}
|
||||
|
||||
protected override int IdentifyRom(byte[] rom)
|
||||
protected override uint IdentifyRom(byte[] rom)
|
||||
{
|
||||
var hash = new byte[33];
|
||||
if (_lib.rc_hash_generate_from_buffer(hash, _consoleId, rom, rom.Length))
|
||||
if (_lib.rc_hash_generate_from_buffer(hash, _consoleId, rom, new((uint)rom.Length)))
|
||||
{
|
||||
return IdentifyHash(Encoding.ASCII.GetString(hash, 0, 32));
|
||||
}
|
||||
|
@ -315,7 +312,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
}
|
||||
}
|
||||
|
||||
private GameData GetGameData(int id)
|
||||
private GameData GetGameData(uint id)
|
||||
{
|
||||
var gameDataRequest = new GameDataRequest(Username, ApiToken, id, () => AllowUnofficialCheevos);
|
||||
PushRequest(gameDataRequest);
|
||||
|
|
|
@ -29,7 +29,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
InternalDoRequest(apiParamsResult, ref api_req);
|
||||
}
|
||||
|
||||
public LboardTriggerRequest(string username, string api_token, int id, int value, string hash)
|
||||
public LboardTriggerRequest(string username, string api_token, uint id, int value, string hash)
|
||||
{
|
||||
_apiParams = new(username, api_token, id, value, hash);
|
||||
}
|
||||
|
@ -40,7 +40,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
|
||||
public class LBoard
|
||||
{
|
||||
public int ID { get; }
|
||||
public uint ID { get; }
|
||||
public int Format { get; }
|
||||
public string Title { get; }
|
||||
public string Description { get; }
|
||||
|
|
|
@ -12,7 +12,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
{
|
||||
private LibRCheevos.rc_api_start_session_request_t _apiParams;
|
||||
|
||||
public StartGameSessionRequest(string username, string apiToken, int gameId)
|
||||
public StartGameSessionRequest(string username, string apiToken, uint gameId)
|
||||
{
|
||||
_apiParams = new(username, apiToken, gameId);
|
||||
}
|
||||
|
@ -43,7 +43,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
{
|
||||
private LibRCheevos.rc_api_ping_request_t _apiParams;
|
||||
|
||||
public PingRequest(string username, string apiToken, int gameId, string richPresence)
|
||||
public PingRequest(string username, string apiToken, uint gameId, string richPresence)
|
||||
{
|
||||
_apiParams = new(username, apiToken, gameId, richPresence);
|
||||
}
|
||||
|
@ -79,7 +79,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
{
|
||||
if (RichPresenceActive)
|
||||
{
|
||||
var len = _lib.rc_runtime_get_richpresence(_runtime, _richPresenceBuffer, _richPresenceBuffer.Length, _peekcb, IntPtr.Zero, IntPtr.Zero);
|
||||
var len = _lib.rc_runtime_get_richpresence(_runtime, _richPresenceBuffer, new((uint)_richPresenceBuffer.Length), _peekcb, IntPtr.Zero, IntPtr.Zero);
|
||||
CurrentRichPresence = Encoding.UTF8.GetString(_richPresenceBuffer, 0, len);
|
||||
}
|
||||
else
|
||||
|
|
|
@ -41,9 +41,9 @@ namespace BizHawk.Client.EmuHawk
|
|||
private IntPtr _runtime;
|
||||
|
||||
private readonly LibRCheevos.rc_runtime_event_handler_t _eventcb;
|
||||
private readonly LibRCheevos.rc_peek_t _peekcb;
|
||||
private readonly LibRCheevos.rc_runtime_peek_t _peekcb;
|
||||
|
||||
private readonly Dictionary<int, (ReadMemoryFunc Func, int Start)> _readMap = new();
|
||||
private readonly Dictionary<uint, (ReadMemoryFunc Func, uint Start)> _readMap = new();
|
||||
|
||||
private ToolStripMenuItem _hardcoreModeMenuItem;
|
||||
private bool _hardcoreMode;
|
||||
|
@ -369,12 +369,12 @@ namespace BizHawk.Client.EmuHawk
|
|||
{
|
||||
_memFunctions = CreateMemoryBanks(_consoleId, Domains, Emu.CanDebug() ? Emu.AsDebuggable() : null);
|
||||
|
||||
var addr = 0;
|
||||
uint addr = 0;
|
||||
foreach (var memFunctions in _memFunctions)
|
||||
{
|
||||
if (memFunctions.ReadFunc is not null)
|
||||
{
|
||||
for (var i = 0; i < memFunctions.BankSize; i++)
|
||||
for (uint i = 0; i < memFunctions.BankSize; i++)
|
||||
{
|
||||
_readMap.Add(addr + i, (memFunctions.ReadFunc, addr));
|
||||
}
|
||||
|
@ -392,7 +392,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
{
|
||||
var ids = GetRAGameIds(_mainForm.CurrentlyOpenRomArgs.OpenAdvanced, _consoleId);
|
||||
|
||||
AllGamesVerified = !ids.Contains(0);
|
||||
AllGamesVerified = !ids.Contains(0u);
|
||||
|
||||
var gameId = ids.Count > 0 ? ids[0] : 0;
|
||||
_gameData = new();
|
||||
|
@ -427,7 +427,9 @@ namespace BizHawk.Client.EmuHawk
|
|||
|
||||
// validate addresses now that we have cheevos init
|
||||
// ReSharper disable once ConvertToLocalFunction
|
||||
#pragma warning disable IDE0039
|
||||
LibRCheevos.rc_runtime_validate_address_t peekcb = address => _readMap.ContainsKey(address);
|
||||
#pragma warning restore IDE0039
|
||||
_lib.rc_runtime_validate_addresses(_runtime, _eventcb, peekcb);
|
||||
|
||||
_gameInfoForm.Restart(_gameData.Title, _gameData.TotalCheevoPoints(HardcoreMode), CurrentRichPresence ?? "N/A");
|
||||
|
@ -613,10 +615,10 @@ namespace BizHawk.Client.EmuHawk
|
|||
}
|
||||
}
|
||||
|
||||
private int PeekCallback(int address, int num_bytes, IntPtr ud)
|
||||
private uint PeekCallback(uint address, uint num_bytes, IntPtr ud)
|
||||
{
|
||||
byte Peek(int addr)
|
||||
=> _readMap.TryGetValue(addr, out var reader) ? reader.Func(addr - reader.Start) : (byte)0;
|
||||
uint Peek(uint addr)
|
||||
=> _readMap.TryGetValue(addr, out var reader) ? reader.Func(addr - reader.Start) : 0u;
|
||||
|
||||
return num_bytes switch
|
||||
{
|
||||
|
|
|
@ -23,9 +23,9 @@ namespace BizHawk.Client.EmuHawk
|
|||
|
||||
private Bitmap _unlockedBadge, _lockedBadge;
|
||||
private readonly RCheevos.Cheevo _cheevo;
|
||||
private readonly Func<int, string> _getCheevoProgress;
|
||||
private readonly Func<uint, string> _getCheevoProgress;
|
||||
|
||||
public RCheevosAchievementForm(RCheevos.Cheevo cheevo, Func<int, string> getCheevoProgress)
|
||||
public RCheevosAchievementForm(RCheevos.Cheevo cheevo, Func<uint, string> getCheevoProgress)
|
||||
{
|
||||
InitializeComponent();
|
||||
titleBox.Text = cheevo.Title;
|
||||
|
|
|
@ -32,7 +32,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
}
|
||||
}
|
||||
|
||||
public void Restart(IEnumerable<RCheevos.Cheevo> cheevos, Func<int, string> getCheevoProgress)
|
||||
public void Restart(IEnumerable<RCheevos.Cheevo> cheevos, Func<uint, string> getCheevoProgress)
|
||||
{
|
||||
flowLayoutPanel1.Controls.Clear();
|
||||
DisposeCheevoForms();
|
||||
|
@ -52,14 +52,14 @@ namespace BizHawk.Client.EmuHawk
|
|||
{
|
||||
_updateCooldown = 5;
|
||||
|
||||
for (int i = 0; i < _cheevoForms.Length; i++)
|
||||
foreach (var form in _cheevoForms)
|
||||
{
|
||||
_cheevoForms[i].OnFrameAdvance(hardcore);
|
||||
form.OnFrameAdvance(hardcore);
|
||||
}
|
||||
|
||||
var reorderedForms = _cheevoForms.OrderByDescending(f => f.OrderByKey()).ToArray();
|
||||
|
||||
for (int i = 0; i < _cheevoForms.Length; i++)
|
||||
for (var i = 0; i < _cheevoForms.Length; i++)
|
||||
{
|
||||
if (_cheevoForms[i] != reorderedForms[i])
|
||||
{
|
||||
|
|
|
@ -19,7 +19,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
Shown += (_, _) => IsShown = true;
|
||||
}
|
||||
|
||||
public void Restart(string gameTitle, int totalPoints, string richPresence)
|
||||
public void Restart(string gameTitle, long totalPoints, string richPresence)
|
||||
{
|
||||
titleTextBox.Text = gameTitle;
|
||||
totalPointsBox.Text = totalPoints.ToString();
|
||||
|
@ -28,7 +28,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
_iconLoaded = false;
|
||||
}
|
||||
|
||||
public void OnFrameAdvance(Bitmap gameIcon, int totalPoints, string lboardStr, string richPresence)
|
||||
public void OnFrameAdvance(Bitmap gameIcon, long totalPoints, string lboardStr, string richPresence)
|
||||
{
|
||||
// probably bad idea to set this every frame, so
|
||||
if (!_iconLoaded && gameIcon is not null)
|
||||
|
|
|
@ -10,7 +10,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
{
|
||||
public abstract partial class RetroAchievements
|
||||
{
|
||||
public enum ConsoleID : int
|
||||
public enum ConsoleID : uint
|
||||
{
|
||||
UnknownConsoleID = 0,
|
||||
MegaDrive = 1,
|
||||
|
|
|
@ -13,10 +13,10 @@ namespace BizHawk.Client.EmuHawk
|
|||
public abstract partial class RetroAchievements
|
||||
{
|
||||
protected bool AllGamesVerified { get; set; }
|
||||
protected abstract int IdentifyHash(string hash);
|
||||
protected abstract int IdentifyRom(byte[] rom);
|
||||
protected abstract uint IdentifyHash(string hash);
|
||||
protected abstract uint IdentifyRom(byte[] rom);
|
||||
|
||||
private int HashDisc(string path, ConsoleID consoleID)
|
||||
private uint HashDisc(string path, ConsoleID consoleID)
|
||||
{
|
||||
// this shouldn't throw in practice, this is only called when loading was successful!
|
||||
using var disc = DiscExtensions.CreateAnyType(path, e => throw new(e));
|
||||
|
@ -276,7 +276,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
return IdentifyHash(hash);
|
||||
}
|
||||
|
||||
private int HashArcade(string path)
|
||||
private uint HashArcade(string path)
|
||||
{
|
||||
// Arcade wants to just hash the filename (with no extension)
|
||||
var name = Encoding.UTF8.GetBytes(Path.GetFileNameWithoutExtension(path));
|
||||
|
@ -284,7 +284,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
return IdentifyHash(hash);
|
||||
}
|
||||
|
||||
private int Hash3DS(string path)
|
||||
private uint Hash3DS(string path)
|
||||
{
|
||||
// 3DS is too big to hash as a byte array...
|
||||
var hash = new byte[33];
|
||||
|
@ -292,9 +292,9 @@ namespace BizHawk.Client.EmuHawk
|
|||
? IdentifyHash(Encoding.ASCII.GetString(hash, 0, 32)) : 0;
|
||||
}
|
||||
|
||||
protected IReadOnlyList<int> GetRAGameIds(IOpenAdvanced ioa, ConsoleID consoleID)
|
||||
protected IReadOnlyList<uint> GetRAGameIds(IOpenAdvanced ioa, ConsoleID consoleID)
|
||||
{
|
||||
var ret = new List<int>();
|
||||
var ret = new List<uint>();
|
||||
switch (ioa.TypeName)
|
||||
{
|
||||
case OpenAdvancedTypes.OpenRom:
|
||||
|
|
|
@ -94,32 +94,32 @@ namespace BizHawk.Client.EmuHawk
|
|||
}
|
||||
|
||||
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
||||
public delegate byte ReadMemoryFunc(int address);
|
||||
public delegate byte ReadMemoryFunc(uint address);
|
||||
|
||||
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
||||
public delegate void WriteMemoryFunc(int address, byte value);
|
||||
public delegate void WriteMemoryFunc(uint address, byte value);
|
||||
|
||||
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
||||
public delegate int ReadMemoryBlockFunc(int address, IntPtr buffer, int bytes);
|
||||
public delegate uint ReadMemoryBlockFunc(uint address, IntPtr buffer, uint bytes);
|
||||
|
||||
protected class MemFunctions
|
||||
{
|
||||
protected readonly MemoryDomain _domain;
|
||||
private readonly int _domainAddrStart; // addr of _domain where bank begins
|
||||
private readonly int _addressMangler; // of course, let's *not* correct internal core byteswapping!
|
||||
private readonly uint _domainAddrStart; // addr of _domain where bank begins
|
||||
private readonly uint _addressMangler; // of course, let's *not* correct internal core byteswapping!
|
||||
|
||||
public ReadMemoryFunc ReadFunc { get; protected init; }
|
||||
public WriteMemoryFunc WriteFunc { get; protected init; }
|
||||
public ReadMemoryBlockFunc ReadBlockFunc { get; protected init; }
|
||||
|
||||
public readonly int BankSize;
|
||||
public readonly uint BankSize;
|
||||
|
||||
public RAMemGuard MemGuard { get; set; }
|
||||
|
||||
protected virtual int FixAddr(int addr)
|
||||
protected virtual uint FixAddr(uint addr)
|
||||
=> _domainAddrStart + addr;
|
||||
|
||||
protected virtual byte ReadMem(int addr)
|
||||
protected virtual byte ReadMem(uint addr)
|
||||
{
|
||||
using (MemGuard.EnterExit())
|
||||
{
|
||||
|
@ -127,7 +127,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
}
|
||||
}
|
||||
|
||||
protected virtual void WriteMem(int addr, byte val)
|
||||
protected virtual void WriteMem(uint addr, byte val)
|
||||
{
|
||||
using (MemGuard.EnterExit())
|
||||
{
|
||||
|
@ -135,7 +135,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
}
|
||||
}
|
||||
|
||||
protected virtual int ReadMemBlock(int addr, IntPtr buffer, int bytes)
|
||||
protected virtual uint ReadMemBlock(uint addr, IntPtr buffer, uint bytes)
|
||||
{
|
||||
addr = FixAddr(addr);
|
||||
|
||||
|
@ -153,7 +153,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
{
|
||||
var ret = new byte[length];
|
||||
_domain.BulkPeekByte(((long)addr).RangeToExclusive(end), ret);
|
||||
Marshal.Copy(ret, 0, buffer, length);
|
||||
Marshal.Copy(ret, 0, buffer, (int)length);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -170,7 +170,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
}
|
||||
}
|
||||
|
||||
public MemFunctions(MemoryDomain domain, int domainAddrStart, long bankSize, int addressMangler = 0)
|
||||
public MemFunctions(MemoryDomain domain, uint domainAddrStart, long bankSize, uint addressMangler = 0)
|
||||
{
|
||||
_domain = domain;
|
||||
_domainAddrStart = domainAddrStart;
|
||||
|
@ -180,12 +180,12 @@ namespace BizHawk.Client.EmuHawk
|
|||
WriteFunc = WriteMem;
|
||||
ReadBlockFunc = ReadMemBlock;
|
||||
|
||||
if (bankSize > int.MaxValue)
|
||||
if (bankSize > uint.MaxValue)
|
||||
{
|
||||
throw new OverflowException("bankSize is too big!");
|
||||
}
|
||||
|
||||
BankSize = (int)bankSize;
|
||||
BankSize = (uint)bankSize;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -203,10 +203,10 @@ namespace BizHawk.Client.EmuHawk
|
|||
// this is a complete hack because the libretro Intelli core sucks and so achievements are made expecting this format
|
||||
private class IntelliMemFunctions : MemFunctions
|
||||
{
|
||||
protected override int FixAddr(int addr)
|
||||
protected override uint FixAddr(uint addr)
|
||||
=> (addr >> 1) + (~addr & 1);
|
||||
|
||||
protected override byte ReadMem(int addr)
|
||||
protected override byte ReadMem(uint addr)
|
||||
{
|
||||
if ((addr & 2) != 0)
|
||||
{
|
||||
|
@ -216,7 +216,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
return base.ReadMem(addr);
|
||||
}
|
||||
|
||||
protected override void WriteMem(int addr, byte val)
|
||||
protected override void WriteMem(uint addr, byte val)
|
||||
{
|
||||
if ((addr & 2) != 0)
|
||||
{
|
||||
|
@ -226,7 +226,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
base.WriteMem(addr, val);
|
||||
}
|
||||
|
||||
protected override int ReadMemBlock(int addr, IntPtr buffer, int bytes)
|
||||
protected override uint ReadMemBlock(uint addr, IntPtr buffer, uint bytes)
|
||||
{
|
||||
if (addr >= BankSize)
|
||||
{
|
||||
|
@ -268,7 +268,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
private readonly IDebuggable _debuggable;
|
||||
private readonly MemoryDomain _vram; // our vram is unpacked, but RA expects it packed
|
||||
|
||||
private byte ReadVRAMPacked(int addr)
|
||||
private byte ReadVRAMPacked(uint addr)
|
||||
{
|
||||
return (byte)(((_vram.PeekByte(addr * 4 + 0) & 3) << 6)
|
||||
| ((_vram.PeekByte(addr * 4 + 1) & 3) << 4)
|
||||
|
@ -276,7 +276,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
| ((_vram.PeekByte(addr * 4 + 3) & 3) << 0));
|
||||
}
|
||||
|
||||
protected override byte ReadMem(int addr)
|
||||
protected override byte ReadMem(uint addr)
|
||||
{
|
||||
using (MemGuard.EnterExit())
|
||||
{
|
||||
|
@ -291,7 +291,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
}
|
||||
}
|
||||
|
||||
protected override void WriteMem(int addr, byte val)
|
||||
protected override void WriteMem(uint addr, byte val)
|
||||
{
|
||||
using (MemGuard.EnterExit())
|
||||
{
|
||||
|
@ -310,7 +310,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
}
|
||||
}
|
||||
|
||||
protected override int ReadMemBlock(int addr, IntPtr buffer, int bytes)
|
||||
protected override uint ReadMemBlock(uint addr, IntPtr buffer, uint bytes)
|
||||
{
|
||||
if (addr >= BankSize)
|
||||
{
|
||||
|
@ -367,12 +367,12 @@ namespace BizHawk.Client.EmuHawk
|
|||
};
|
||||
|
||||
// these consoles will use part of the system bus at an offset
|
||||
private static readonly Dictionary<ConsoleID, (int Start, int Size)[]> UsePartialSysBus = new()
|
||||
private static readonly Dictionary<ConsoleID, (uint Start, uint Size)[]> UsePartialSysBus = new()
|
||||
{
|
||||
[ConsoleID.MasterSystem] = new[] { (0xC000, 0x2000) },
|
||||
[ConsoleID.GameGear] = new[] { (0xC000, 0x2000) },
|
||||
[ConsoleID.Colecovision] = new[] { (0x6000, 0x400) },
|
||||
[ConsoleID.SG1000] = new[] { (0xC000, 0x2000), (0x2000, 0x2000), (0x8000, 0x2000) },
|
||||
[ConsoleID.MasterSystem] = new[] { (0xC000u, 0x2000u) },
|
||||
[ConsoleID.GameGear] = new[] { (0xC000u, 0x2000u) },
|
||||
[ConsoleID.Colecovision] = new[] { (0x6000u, 0x400u) },
|
||||
[ConsoleID.SG1000] = new[] { (0xC000u, 0x2000u), (0x2000u, 0x2000u), (0x8000u, 0x2000u) },
|
||||
};
|
||||
|
||||
// anything more complicated will be handled accordingly
|
||||
|
@ -381,7 +381,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
{
|
||||
var mfs = new List<MemFunctions>();
|
||||
|
||||
void TryAddDomain(string domain, int? size = null, int addressMangler = 0)
|
||||
void TryAddDomain(string domain, uint? size = null, uint addressMangler = 0)
|
||||
{
|
||||
if (domains.Has(domain))
|
||||
{
|
||||
|
@ -422,7 +422,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
mfs.Add(new(domains["68K RAM"], 0, domains["68K RAM"].Size, 1));
|
||||
TryAddDomain("32X RAM", addressMangler: 1);
|
||||
// our picodrive doesn't byteswap its SRAM, so...
|
||||
TryAddDomain("SRAM", addressMangler: domains["SRAM"] is MemoryDomainIntPtrSwap16Monitor ? 1 : 0);
|
||||
TryAddDomain("SRAM", addressMangler: domains["SRAM"] is MemoryDomainIntPtrSwap16Monitor ? 1u : 0u);
|
||||
break;
|
||||
case ConsoleID.SNES:
|
||||
mfs.Add(new(domains["WRAM"], 0, domains["WRAM"].Size));
|
||||
|
|
Loading…
Reference in New Issue