diff --git a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/NDS/MelonDS.ISettable.cs b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/NDS/MelonDS.ISettable.cs index a971606990..36a9496e4d 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/NDS/MelonDS.ISettable.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/NDS/MelonDS.ISettable.cs @@ -108,11 +108,6 @@ namespace BizHawk.Emulation.Cores.Consoles.Nintendo.NDS [DefaultValue(false)] public bool UseDSi { get; set; } - [DisplayName("Load DSiWare")] - [Description("")] - [DefaultValue(false)] - public bool LoadDSiWare { get; set; } - [DisplayName("Use Real BIOS")] [Description("If true, real BIOS files will be used. Forced true for DSi.")] [DefaultValue(false)] diff --git a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/NDS/MelonDS.cs b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/NDS/MelonDS.cs index d26587979d..3cc9aebab2 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/NDS/MelonDS.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/NDS/MelonDS.cs @@ -37,7 +37,6 @@ namespace BizHawk.Emulation.Cores.Consoles.Nintendo.NDS _settings = lp.Settings ?? new NDSSettings(); IsDSi = _syncSettings.UseDSi; - IsDSiWare = _syncSettings.LoadDSiWare; var roms = lp.Roms.Select(r => r.RomData).ToList(); @@ -46,6 +45,8 @@ namespace BizHawk.Emulation.Cores.Consoles.Nintendo.NDS throw new InvalidOperationException("Wrong number of ROMs!"); } + IsDSiWare = IsDSi && RomIsWare(roms[0]); + bool gbacartpresent = roms.Count > 1; bool gbasrampresent = roms.Count == 3; @@ -217,13 +218,24 @@ namespace BizHawk.Emulation.Cores.Consoles.Nintendo.NDS } } + private static bool RomIsWare(byte[] file) + { + uint lowerWareTitleId = 0; + for (int i = 0; i < 4; i++) + { + lowerWareTitleId <<= 8; + lowerWareTitleId |= file[0x237 - i]; + } + return lowerWareTitleId == 0x00030004; + } + private static byte[] GetTMDData(byte[] ware) { ulong titleId = 0; - for (int i = 0; i < 16; i++) + for (int i = 0; i < 8; i++) { titleId <<= 8; - titleId |= ware[0x23F - i]; + titleId |= ware[0x237 - i]; } using var zip = new ZipArchive(new MemoryStream(Util.DecompressGzipFile(new MemoryStream(Resources.TMDS.Value))), ZipArchiveMode.Read, false); using var tmd = zip.GetEntry($"{titleId:x16}.tmd").Open();