Compare commits

...

2 Commits

Author SHA1 Message Date
LotP1
facc12a94a JIT Sparse Function Table random crash fix (#319)
A couple of games have random crashing with the JIT Sparse Ftable changes, and it seems to have been caused by an insufficient int size returned by `AddressTableLevel#GetValue(ulong address)`.
It was 32 bits (Int32), but the GiantBlock (which is the current address table impl) uses potentially 36 bits for the first level.
2024-11-29 16:32:55 -06:00
Hack茶ん
8e55e6d6d7 Korean translation for key install tool (#329) 2024-11-29 15:39:11 -06:00
4 changed files with 14 additions and 14 deletions

View File

@@ -36,9 +36,9 @@ namespace ARMeilleure.Common
/// </summary> /// </summary>
/// <param name="address">Guest address</param> /// <param name="address">Guest address</param>
/// <returns>Value of the <see cref="AddressTableLevel"/> from the specified guest <paramref name="address"/></returns> /// <returns>Value of the <see cref="AddressTableLevel"/> from the specified guest <paramref name="address"/></returns>
public int GetValue(ulong address) public long GetValue(ulong address)
{ {
return (int)((address & Mask) >> Index); return (long)((address & Mask) >> Index);
} }
} }
} }

View File

@@ -30,7 +30,7 @@ namespace ARMeilleure.Translation.PTC
private const string OuterHeaderMagicString = "PTCohd\0\0"; private const string OuterHeaderMagicString = "PTCohd\0\0";
private const string InnerHeaderMagicString = "PTCihd\0\0"; private const string InnerHeaderMagicString = "PTCihd\0\0";
private const uint InternalVersion = 6992; //! To be incremented manually for each change to the ARMeilleure project. private const uint InternalVersion = 6997; //! To be incremented manually for each change to the ARMeilleure project.
private const string ActualDir = "0"; private const string ActualDir = "0";
private const string BackupDir = "1"; private const string BackupDir = "1";

View File

@@ -238,7 +238,7 @@ namespace ARMeilleure.Common
{ {
TEntry* page = GetPage(address); TEntry* page = GetPage(address);
int index = Levels[^1].GetValue(address); long index = Levels[^1].GetValue(address);
EnsureMapped((IntPtr)(page + index)); EnsureMapped((IntPtr)(page + index));

View File

@@ -31,9 +31,9 @@
"MenuBarToolsInstallFirmware": "펌웨어 설치", "MenuBarToolsInstallFirmware": "펌웨어 설치",
"MenuBarFileToolsInstallFirmwareFromFile": "XCI 또는 ZIP으로 펌웨어 설치", "MenuBarFileToolsInstallFirmwareFromFile": "XCI 또는 ZIP으로 펌웨어 설치",
"MenuBarFileToolsInstallFirmwareFromDirectory": "디렉터리에서 펌웨어 설치", "MenuBarFileToolsInstallFirmwareFromDirectory": "디렉터리에서 펌웨어 설치",
"MenuBarToolsInstallKeys": "Install Keys", "MenuBarToolsInstallKeys": "설치 키",
"MenuBarFileToolsInstallKeysFromFile": "Install keys from KEYS or ZIP", "MenuBarFileToolsInstallKeysFromFile": "키나 ZIP에서 키 설치",
"MenuBarFileToolsInstallKeysFromFolder": "Install keys from a directory", "MenuBarFileToolsInstallKeysFromFolder": "디렉터리에서 키 설치",
"MenuBarToolsManageFileTypes": "파일 형식 관리", "MenuBarToolsManageFileTypes": "파일 형식 관리",
"MenuBarToolsInstallFileTypes": "파일 형식 설치", "MenuBarToolsInstallFileTypes": "파일 형식 설치",
"MenuBarToolsUninstallFileTypes": "파일 형식 제거", "MenuBarToolsUninstallFileTypes": "파일 형식 제거",
@@ -509,13 +509,13 @@
"DialogFirmwareInstallerFirmwareInstallConfirmMessage": "\n\n계속하시겠습니까?", "DialogFirmwareInstallerFirmwareInstallConfirmMessage": "\n\n계속하시겠습니까?",
"DialogFirmwareInstallerFirmwareInstallWaitMessage": "펌웨어 설치 중...", "DialogFirmwareInstallerFirmwareInstallWaitMessage": "펌웨어 설치 중...",
"DialogFirmwareInstallerFirmwareInstallSuccessMessage": "시스템 버전 {0}이(가) 설치되었습니다.", "DialogFirmwareInstallerFirmwareInstallSuccessMessage": "시스템 버전 {0}이(가) 설치되었습니다.",
"DialogKeysInstallerKeysNotFoundErrorMessage": "An invalid Keys file was found in {0}", "DialogKeysInstallerKeysNotFoundErrorMessage": "{0}에서 잘못된 키 파일이 발견",
"DialogKeysInstallerKeysInstallTitle": "Install Keys", "DialogKeysInstallerKeysInstallTitle": "설치 키",
"DialogKeysInstallerKeysInstallMessage": "New Keys file will be installed.", "DialogKeysInstallerKeysInstallMessage": "새로운 키 파일이 설치됩니다.",
"DialogKeysInstallerKeysInstallSubMessage": "\n\nThis may replace some of the current installed Keys.", "DialogKeysInstallerKeysInstallSubMessage": "\n\n이로 인해 현재 설치된 키 중 일부가 대체될 수 있습니다.",
"DialogKeysInstallerKeysInstallConfirmMessage": "\n\nDo you want to continue?", "DialogKeysInstallerKeysInstallConfirmMessage": "\n\n계속하시겠습니까?",
"DialogKeysInstallerKeysInstallWaitMessage": "Installing Keys...", "DialogKeysInstallerKeysInstallWaitMessage": "키 설치 중...",
"DialogKeysInstallerKeysInstallSuccessMessage": "New Keys file successfully installed.", "DialogKeysInstallerKeysInstallSuccessMessage": "새로운 키 파일이 성공적으로 설치되었습니다.",
"DialogUserProfileDeletionWarningMessage": "선택한 프로필을 삭제하면 다른 프로필을 열 수 없음", "DialogUserProfileDeletionWarningMessage": "선택한 프로필을 삭제하면 다른 프로필을 열 수 없음",
"DialogUserProfileDeletionConfirmMessage": "선택한 프로필을 삭제하시겠습니까?", "DialogUserProfileDeletionConfirmMessage": "선택한 프로필을 삭제하시겠습니까?",
"DialogUserProfileUnsavedChangesTitle": "경고 - 저장되지 않은 변경 사항", "DialogUserProfileUnsavedChangesTitle": "경고 - 저장되지 않은 변경 사항",