diff options
author | Jesse Talavera <jesse@jesse.tg> | 2024-02-01 08:36:35 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-02-01 14:36:35 +0100 |
commit | d48e5f2da0439c7109c7ed5c003fa00d58dadbe9 (patch) | |
tree | 99bb464def17ead4919ac021557255b83fe90a0b /src | |
parent | 7dd4152d6711db76fbe2a2acffcc208a524bb25d (diff) |
Fix DSiWare detection (#1969)
- According to GBATek, all DSiWare games have a high title ID of 0x00030004
- Some homebrew apps set the Unitcode bits to DSi mode to enable support of DSi features
Diffstat (limited to 'src')
-rw-r--r-- | src/NDS_Header.h | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/src/NDS_Header.h b/src/NDS_Header.h index de75f7c..77a5bac 100644 --- a/src/NDS_Header.h +++ b/src/NDS_Header.h @@ -39,6 +39,8 @@ enum RegionMask : u32 RegionFree = 0xFFFFFFFF,
};
+constexpr u32 DSiWareTitleIDHigh = 0x00030004;
+
// Consult GBATEK for info on what these are
struct NDSHeader
{
@@ -198,8 +200,9 @@ struct NDSHeader u8 HeaderSignature[128]; // RSA-SHA1 across 0x000..0xDFF
- /// @return \c true if this header represents a DSi title
- /// (either a physical cartridge or a DSiWare title).
+ /// @return \c true if this header represents a title
+ /// that is DSi-exclusive (including DSiWare)
+ /// or DSi-enhanced (including cartridges).
[[nodiscard]] bool IsDSi() const { return (UnitCode & 0x02) != 0; }
[[nodiscard]] u32 GameCodeAsU32() const {
return (u32)GameCode[3] << 24 |
@@ -213,7 +216,7 @@ struct NDSHeader }
/// @return \c true if this header represents a DSiWare title.
- [[nodiscard]] bool IsDSiWare() const { return IsDSi() && DSiRegionStart == 0; }
+ [[nodiscard]] bool IsDSiWare() const { return IsDSi() && DSiTitleIDHigh == DSiWareTitleIDHigh; }
};
static_assert(sizeof(NDSHeader) == 4096, "NDSHeader is not 4096 bytes!");
|