clean DSi handling up a bit, add entries in movie header to indicate DSi/DSiWare

This commit is contained in:
CasualPokePlayer 2022-02-02 15:42:02 -08:00
parent cff2b04dcc
commit 625a77cc14
2 changed files with 38 additions and 20 deletions

View File

@ -5,6 +5,7 @@ using System.Linq;
using BizHawk.Common; using BizHawk.Common;
using BizHawk.Emulation.Common; using BizHawk.Emulation.Common;
using BizHawk.Emulation.Cores.Consoles.Nintendo.Gameboy; using BizHawk.Emulation.Cores.Consoles.Nintendo.Gameboy;
using BizHawk.Emulation.Cores.Consoles.Nintendo.NDS;
using BizHawk.Emulation.Cores.Consoles.Sega.gpgx; using BizHawk.Emulation.Cores.Consoles.Sega.gpgx;
using BizHawk.Emulation.Cores.Consoles.Sega.PicoDrive; using BizHawk.Emulation.Cores.Consoles.Sega.PicoDrive;
using BizHawk.Emulation.Cores.Nintendo.NES; using BizHawk.Emulation.Cores.Nintendo.NES;
@ -234,6 +235,16 @@ namespace BizHawk.Client.Common
} }
} }
if (emulator is NDS nds && nds.IsDSi)
{
movie.HeaderEntries.Add("IsDSi", "1");
if (nds.IsDSiWare)
{
movie.HeaderEntries.Add("IsDSiWare", "1");
}
}
if ((emulator is NES nes && nes.IsVS) if ((emulator is NES nes && nes.IsVS)
|| (emulator is SubNESHawk subnes && subnes.IsVs)) || (emulator is SubNESHawk subnes && subnes.IsVs))
{ {

View File

@ -36,9 +36,12 @@ namespace BizHawk.Emulation.Cores.Consoles.Nintendo.NDS
_syncSettings = lp.SyncSettings ?? new NDSSyncSettings(); _syncSettings = lp.SyncSettings ?? new NDSSyncSettings();
_settings = lp.Settings ?? new NDSSettings(); _settings = lp.Settings ?? new NDSSettings();
IsDSi = _syncSettings.UseDSi;
IsDSiWare = _syncSettings.LoadDSiWare;
var roms = lp.Roms.Select(r => r.RomData).ToList(); var roms = lp.Roms.Select(r => r.RomData).ToList();
if (roms.Count > (_syncSettings.UseDSi ? 1 : 3)) if (roms.Count > (IsDSi ? 1 : 3))
{ {
throw new InvalidOperationException("Wrong number of ROMs!"); throw new InvalidOperationException("Wrong number of ROMs!");
} }
@ -60,31 +63,31 @@ namespace BizHawk.Emulation.Cores.Consoles.Nintendo.NDS
SkipMemoryConsistencyCheck = CoreComm.CorePreferences.HasFlag(CoreComm.CorePreferencesFlags.WaterboxMemoryConsistencyCheck), SkipMemoryConsistencyCheck = CoreComm.CorePreferences.HasFlag(CoreComm.CorePreferencesFlags.WaterboxMemoryConsistencyCheck),
}, new Delegate[] { _tracecb }); }, new Delegate[] { _tracecb });
var bios7 = _syncSettings.UseDSi || _syncSettings.UseRealBIOS var bios7 = IsDSi || _syncSettings.UseRealBIOS
? CoreComm.CoreFileProvider.GetFirmwareOrThrow(new("NDS", "bios7")) ? CoreComm.CoreFileProvider.GetFirmwareOrThrow(new("NDS", "bios7"))
: null; : null;
var bios9 = _syncSettings.UseDSi || _syncSettings.UseRealBIOS var bios9 = IsDSi || _syncSettings.UseRealBIOS
? CoreComm.CoreFileProvider.GetFirmwareOrThrow(new("NDS", "bios9")) ? CoreComm.CoreFileProvider.GetFirmwareOrThrow(new("NDS", "bios9"))
: null; : null;
var bios7i = _syncSettings.UseDSi var bios7i = IsDSi
? CoreComm.CoreFileProvider.GetFirmwareOrThrow(new("NDS", "bios7i")) ? CoreComm.CoreFileProvider.GetFirmwareOrThrow(new("NDS", "bios7i"))
: null; : null;
var bios9i = _syncSettings.UseDSi var bios9i = IsDSi
? CoreComm.CoreFileProvider.GetFirmwareOrThrow(new("NDS", "bios9i")) ? CoreComm.CoreFileProvider.GetFirmwareOrThrow(new("NDS", "bios9i"))
: null; : null;
var nand = _syncSettings.UseDSi var nand = IsDSi
? CoreComm.CoreFileProvider.GetFirmwareOrThrow(new("NDS", "nand")) ? CoreComm.CoreFileProvider.GetFirmwareOrThrow(new("NDS", "nand"))
: null; : null;
var fw = _syncSettings.UseDSi var fw = IsDSi
? CoreComm.CoreFileProvider.GetFirmwareOrThrow(new("NDS", "firmwarei")) ? CoreComm.CoreFileProvider.GetFirmwareOrThrow(new("NDS", "firmwarei"))
: CoreComm.CoreFileProvider.GetFirmware(new("NDS", "firmware")); : CoreComm.CoreFileProvider.GetFirmware(new("NDS", "firmware"));
var tmd = _syncSettings.UseDSi && _syncSettings.LoadDSiWare var tmd = IsDSi && IsDSiWare
? GetTMDData(roms[0]) ? GetTMDData(roms[0])
: null; : null;
@ -92,19 +95,19 @@ namespace BizHawk.Emulation.Cores.Consoles.Nintendo.NDS
LibMelonDS.LoadFlags flags = LibMelonDS.LoadFlags.NONE; LibMelonDS.LoadFlags flags = LibMelonDS.LoadFlags.NONE;
if (_syncSettings.UseRealBIOS || _syncSettings.UseDSi) if (_syncSettings.UseRealBIOS || IsDSi)
flags |= LibMelonDS.LoadFlags.USE_REAL_BIOS; flags |= LibMelonDS.LoadFlags.USE_REAL_BIOS;
if (skipfw && !_syncSettings.UseDSi) if (skipfw && !IsDSi)
flags |= LibMelonDS.LoadFlags.SKIP_FIRMWARE; flags |= LibMelonDS.LoadFlags.SKIP_FIRMWARE;
if (gbacartpresent) if (gbacartpresent)
flags |= LibMelonDS.LoadFlags.GBA_CART_PRESENT; flags |= LibMelonDS.LoadFlags.GBA_CART_PRESENT;
if (_settings.AccurateAudioBitrate) if (_settings.AccurateAudioBitrate && !IsDSi) // todo: let users have DS audio bitrate on DSi?
flags |= LibMelonDS.LoadFlags.ACCURATE_AUDIO_BITRATE; flags |= LibMelonDS.LoadFlags.ACCURATE_AUDIO_BITRATE;
if (_syncSettings.FirmwareOverride || lp.DeterministicEmulationRequested) if (_syncSettings.FirmwareOverride || lp.DeterministicEmulationRequested)
flags |= LibMelonDS.LoadFlags.FIRMWARE_OVERRIDE; flags |= LibMelonDS.LoadFlags.FIRMWARE_OVERRIDE;
if (_syncSettings.UseDSi) if (IsDSi)
flags |= LibMelonDS.LoadFlags.IS_DSI; flags |= LibMelonDS.LoadFlags.IS_DSI;
if (_syncSettings.UseDSi && _syncSettings.LoadDSiWare) if (IsDSi && IsDSiWare)
flags |= LibMelonDS.LoadFlags.LOAD_DSIWARE; flags |= LibMelonDS.LoadFlags.LOAD_DSIWARE;
var fwSettings = new LibMelonDS.FirmwareSettings(); var fwSettings = new LibMelonDS.FirmwareSettings();
@ -125,30 +128,30 @@ namespace BizHawk.Emulation.Cores.Consoles.Nintendo.NDS
GbaRamLength = gbasrampresent ? roms[2].Length : 0, GbaRamLength = gbasrampresent ? roms[2].Length : 0,
NandLength = nand?.Length ?? 0, NandLength = nand?.Length ?? 0,
}; };
if (_syncSettings.UseRealBIOS || _syncSettings.UseDSi) if (_syncSettings.UseRealBIOS || IsDSi)
{ {
_exe.AddReadonlyFile(bios7, "bios7.rom"); _exe.AddReadonlyFile(bios7, "bios7.rom");
_exe.AddReadonlyFile(bios9, "bios9.rom"); _exe.AddReadonlyFile(bios9, "bios9.rom");
} }
if (_syncSettings.UseDSi) if (IsDSi)
{ {
_exe.AddReadonlyFile(bios7i, "bios7i.rom"); _exe.AddReadonlyFile(bios7i, "bios7i.rom");
_exe.AddReadonlyFile(bios9i, "bios9i.rom"); _exe.AddReadonlyFile(bios9i, "bios9i.rom");
if (_syncSettings.LoadDSiWare) if (IsDSiWare)
{ {
_exe.AddReadonlyFile(roms[0], "dsiware.rom"); _exe.AddReadonlyFile(roms[0], "dsiware.rom");
} }
} }
if (fw != null) if (fw != null)
{ {
if (_syncSettings.UseDSi || NDSFirmware.MaybeWarnIfBadFw(fw, CoreComm)) if (IsDSi || NDSFirmware.MaybeWarnIfBadFw(fw, CoreComm)) // fw checks dont work on dsi firmware, don't bother
{ {
if (_syncSettings.FirmwareOverride || lp.DeterministicEmulationRequested) if (_syncSettings.FirmwareOverride || lp.DeterministicEmulationRequested)
{ {
NDSFirmware.SanitizeFw(fw); NDSFirmware.SanitizeFw(fw);
} }
} }
_exe.AddReadonlyFile(fw, _syncSettings.UseDSi ? "firmwarei.bin" : "firmware.bin"); _exe.AddReadonlyFile(fw, IsDSi ? "firmwarei.bin" : "firmware.bin");
} }
unsafe unsafe
@ -178,10 +181,10 @@ namespace BizHawk.Emulation.Cores.Consoles.Nintendo.NDS
if (fw != null) if (fw != null)
{ {
_exe.RemoveReadonlyFile(_syncSettings.UseDSi ? "firmwarei.bin" : "firmware.bin"); _exe.RemoveReadonlyFile(IsDSi ? "firmwarei.bin" : "firmware.bin");
} }
if (_syncSettings.UseDSi && _syncSettings.LoadDSiWare) if (IsDSi && IsDSiWares)
{ {
_exe.RemoveReadonlyFile("dsiware.rom"); _exe.RemoveReadonlyFile("dsiware.rom");
} }
@ -229,6 +232,10 @@ namespace BizHawk.Emulation.Cores.Consoles.Nintendo.NDS
return ret; return ret;
} }
public bool IsDSi { get; }
public bool IsDSiWare { get; }
public override ControllerDefinition ControllerDefinition => NDSController; public override ControllerDefinition ControllerDefinition => NDSController;
public static readonly ControllerDefinition NDSController = new ControllerDefinition("NDS Controller") public static readonly ControllerDefinition NDSController = new ControllerDefinition("NDS Controller")