mirror of
https://github.com/LNH-team/pico-loader.git
synced 2026-06-02 09:16:49 +02:00
Account for spurious CARDi_ReadCard match in Shaberu! DS Oryouri Navi (Japan) (rev 0 and 1)
This commit is contained in:
@@ -39,6 +39,7 @@ void* Arm7Patcher::ApplyPatches(const LoaderPlatform* loaderPlatform) const
|
||||
(romHeader->IsTwlRom()) ? twlRomHeader->arm7iSize : 0,
|
||||
sdkVersion,
|
||||
romHeader->gameCode,
|
||||
romHeader->softwareVersion,
|
||||
loaderPlatform
|
||||
};
|
||||
void* patchSpaceStart = nullptr;
|
||||
|
||||
@@ -116,6 +116,7 @@ void Arm9Patcher::ApplyPatches(const LoaderPlatform* loaderPlatform, const ApLis
|
||||
arm9iSize,
|
||||
sdkVersion,
|
||||
romHeader->gameCode,
|
||||
romHeader->softwareVersion,
|
||||
loaderPlatform
|
||||
};
|
||||
PatchCollection patchCollection;
|
||||
|
||||
@@ -11,9 +11,9 @@ class PatchContext
|
||||
{
|
||||
public:
|
||||
PatchContext(void* data, u32 dataSize, void* twlData, u32 twlDataSize,
|
||||
SdkVersion sdkVersion, u32 gameCode, const LoaderPlatform* loaderPlatform)
|
||||
SdkVersion sdkVersion, u32 gameCode, u8 gameRevision, const LoaderPlatform* loaderPlatform)
|
||||
: _data(data), _dataSize(dataSize), _twlData(twlData), _twlDataSize(twlDataSize)
|
||||
, _sdkVersion(sdkVersion), _gameCode(gameCode), _loaderPlatform(loaderPlatform) { }
|
||||
, _sdkVersion(sdkVersion), _gameCode(gameCode), _gameRevision(gameRevision), _loaderPlatform(loaderPlatform) { }
|
||||
|
||||
/// @brief Tries to find the given \p pattern of the given \p byteLength in the ntr region.
|
||||
/// @param pattern The pattern to find.
|
||||
@@ -43,6 +43,10 @@ public:
|
||||
/// @return The game code of the rom that is being patched.
|
||||
constexpr u32 GetGameCode() const { return _gameCode; }
|
||||
|
||||
/// @brief Returns the game revision of the rom that is being patched.
|
||||
/// @return The game revision of the rom that is being patched.
|
||||
constexpr u8 GetGameRevision() const { return _gameRevision; }
|
||||
|
||||
/// @brief Returns the loader platform that should be used for the patches.
|
||||
/// @return The loader platform that should be used for the patches.
|
||||
constexpr const LoaderPlatform* GetLoaderPlatform() { return _loaderPlatform; }
|
||||
@@ -54,6 +58,7 @@ private:
|
||||
u32 _twlDataSize;
|
||||
SdkVersion _sdkVersion;
|
||||
u32 _gameCode;
|
||||
u8 _gameRevision;
|
||||
|
||||
PatchHeap _patchHeap;
|
||||
PatchCodeCollection _patchCodeCollection;
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
#include "patches/arm9/RomOffsetToSdSectorPatchCode.h"
|
||||
#include "patches/OffsetToSectorRemapPatchCode.h"
|
||||
#include "patches/arm9/FixCp15Asm.h"
|
||||
#include "gameCode.h"
|
||||
#include "CardiReadCardPatchAsm.h"
|
||||
#include "CardiReadCardPatch.h"
|
||||
|
||||
@@ -30,59 +31,69 @@ void CardiReadCardPatch::TryPattern(PatchContext& patchContext, const u32* patte
|
||||
|
||||
bool CardiReadCardPatch::FindPatchTarget(PatchContext& patchContext)
|
||||
{
|
||||
if (patchContext.GetSdkVersion() >= 0x4017530)
|
||||
TryPattern(patchContext, sCARDiReadCardPatternSdk4017530, sizeof(sCARDiReadCardPatternSdk4017530));
|
||||
else if (patchContext.GetSdkVersion() >= 0x4002774)
|
||||
TryPattern(patchContext, sCARDiReadCardPatternSdk4002774, sizeof(sCARDiReadCardPatternSdk4002774));
|
||||
if (patchContext.GetGameCode() == GAMECODE("A4VJ"))
|
||||
{
|
||||
// Shaberu! DS Oryouri Navi (Japan) has a spurious match
|
||||
_foundPattern = sCARDiReadCardPatternUnknown;
|
||||
_thumb = false;
|
||||
_cardiReadCard = (u32*)(patchContext.GetGameRevision() == 0 ? 0x020DBD5C : 0x020DBD4C);
|
||||
}
|
||||
else
|
||||
TryPattern(patchContext, sCARDiReadCardPatternSdk20029A7, sizeof(sCARDiReadCardPatternSdk20029A7));
|
||||
|
||||
if (!_cardiReadCard)
|
||||
{
|
||||
if (patchContext.GetSdkVersion() >= 0x4017530)
|
||||
TryPattern(patchContext, sCARDiReadCardPatternSdk4017530Thumb, sizeof(sCARDiReadCardPatternSdk4017530Thumb));
|
||||
else if (patchContext.GetSdkVersion() >= 0x3027530)
|
||||
TryPattern(patchContext, sCARDiReadCardPatternSdk3027530Thumb, sizeof(sCARDiReadCardPatternSdk3027530Thumb));
|
||||
else if (patchContext.GetSdkVersion() >= 0x2004F4C)
|
||||
TryPattern(patchContext, sCARDiReadCardPatternSdk2004F4CThumb, sizeof(sCARDiReadCardPatternSdk2004F4CThumb));
|
||||
|
||||
if (_cardiReadCard)
|
||||
_thumb = true;
|
||||
}
|
||||
|
||||
if (!_cardiReadCard)
|
||||
{
|
||||
// if still nothing found try some of the patterns that appear all over the place
|
||||
TryPattern(patchContext, sCARDiReadCardPatternUnknown, sizeof(sCARDiReadCardPatternUnknown));
|
||||
if (!_cardiReadCard)
|
||||
TryPattern(patchContext, sCARDiReadCardPatternSdk4017530, sizeof(sCARDiReadCardPatternSdk4017530));
|
||||
else if (patchContext.GetSdkVersion() >= 0x4002774)
|
||||
TryPattern(patchContext, sCARDiReadCardPatternSdk4002774, sizeof(sCARDiReadCardPatternSdk4002774));
|
||||
if (!_cardiReadCard)
|
||||
else
|
||||
TryPattern(patchContext, sCARDiReadCardPatternSdk20029A7, sizeof(sCARDiReadCardPatternSdk20029A7));
|
||||
if (patchContext.GetSdkVersion().GetMajor() >= SDK_VERSION_MAJOR_NITRO_4)
|
||||
|
||||
if (!_cardiReadCard)
|
||||
{
|
||||
if (!_cardiReadCard)
|
||||
TryPattern(patchContext, sCARDiReadCardPatternSdk4027539SpiritTracks, sizeof(sCARDiReadCardPatternSdk4027539SpiritTracks));
|
||||
if (patchContext.GetSdkVersion() >= 0x4017530)
|
||||
TryPattern(patchContext, sCARDiReadCardPatternSdk4017530Thumb, sizeof(sCARDiReadCardPatternSdk4017530Thumb));
|
||||
else if (patchContext.GetSdkVersion() >= 0x3027530)
|
||||
TryPattern(patchContext, sCARDiReadCardPatternSdk3027530Thumb, sizeof(sCARDiReadCardPatternSdk3027530Thumb));
|
||||
else if (patchContext.GetSdkVersion() >= 0x2004F4C)
|
||||
TryPattern(patchContext, sCARDiReadCardPatternSdk2004F4CThumb, sizeof(sCARDiReadCardPatternSdk2004F4CThumb));
|
||||
|
||||
if (_cardiReadCard)
|
||||
_thumb = true;
|
||||
}
|
||||
|
||||
if (patchContext.GetSdkVersion().GetMajor() <= SDK_VERSION_MAJOR_NITRO_2)
|
||||
if (!_cardiReadCard)
|
||||
{
|
||||
// if still nothing found try some of the patterns that appear all over the place
|
||||
TryPattern(patchContext, sCARDiReadCardPatternUnknown, sizeof(sCARDiReadCardPatternUnknown));
|
||||
if (!_cardiReadCard)
|
||||
TryPattern(patchContext, sCARDiReadCardPatternSdk2004F4DDebug, sizeof(sCARDiReadCardPatternSdk2004F4DDebug));
|
||||
TryPattern(patchContext, sCARDiReadCardPatternSdk4002774, sizeof(sCARDiReadCardPatternSdk4002774));
|
||||
if (!_cardiReadCard)
|
||||
TryPattern(patchContext, sCARDiReadCardPatternSdk2004E8BPingPals, sizeof(sCARDiReadCardPatternSdk2004E8BPingPals));
|
||||
TryPattern(patchContext, sCARDiReadCardPatternSdk20029A7, sizeof(sCARDiReadCardPatternSdk20029A7));
|
||||
if (patchContext.GetSdkVersion().GetMajor() >= SDK_VERSION_MAJOR_NITRO_4)
|
||||
{
|
||||
if (!_cardiReadCard)
|
||||
TryPattern(patchContext, sCARDiReadCardPatternSdk4027539SpiritTracks, sizeof(sCARDiReadCardPatternSdk4027539SpiritTracks));
|
||||
}
|
||||
|
||||
if (patchContext.GetSdkVersion().GetMajor() <= SDK_VERSION_MAJOR_NITRO_2)
|
||||
{
|
||||
if (!_cardiReadCard)
|
||||
TryPattern(patchContext, sCARDiReadCardPatternSdk2004F4DDebug, sizeof(sCARDiReadCardPatternSdk2004F4DDebug));
|
||||
if (!_cardiReadCard)
|
||||
TryPattern(patchContext, sCARDiReadCardPatternSdk2004E8BPingPals, sizeof(sCARDiReadCardPatternSdk2004E8BPingPals));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!_cardiReadCard)
|
||||
{
|
||||
TryPattern(patchContext, sCARDiReadCardPatternSdk2004F4CThumb, sizeof(sCARDiReadCardPatternSdk2004F4CThumb));
|
||||
if (!_cardiReadCard)
|
||||
TryPattern(patchContext, sCARDiReadCardPatternSdk3027530Thumb, sizeof(sCARDiReadCardPatternSdk3027530Thumb));
|
||||
if (!_cardiReadCard)
|
||||
TryPattern(patchContext, sCARDiReadCardPatternSdk2027533ThumbChouSoujuu, sizeof(sCARDiReadCardPatternSdk2027533ThumbChouSoujuu));
|
||||
{
|
||||
TryPattern(patchContext, sCARDiReadCardPatternSdk2004F4CThumb, sizeof(sCARDiReadCardPatternSdk2004F4CThumb));
|
||||
if (!_cardiReadCard)
|
||||
TryPattern(patchContext, sCARDiReadCardPatternSdk3027530Thumb, sizeof(sCARDiReadCardPatternSdk3027530Thumb));
|
||||
if (!_cardiReadCard)
|
||||
TryPattern(patchContext, sCARDiReadCardPatternSdk2027533ThumbChouSoujuu, sizeof(sCARDiReadCardPatternSdk2027533ThumbChouSoujuu));
|
||||
|
||||
if (_cardiReadCard)
|
||||
_thumb = true;
|
||||
if (_cardiReadCard)
|
||||
_thumb = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (_cardiReadCard)
|
||||
|
||||
Reference in New Issue
Block a user