SMS: Sprite Limit and Force Stereo Separation no longer require core reboot

This commit is contained in:
beirich 2014-02-27 00:28:05 +00:00
parent 8e0952c494
commit e4e04e7b9d
2 changed files with 9 additions and 4 deletions

View File

@ -122,6 +122,8 @@ namespace BizHawk.Emulation.Cores.Sega.MasterSystem
byte Port3E = 0xAF;
byte Port3F = 0xFF;
byte ForceStereoByte = 0xAD;
public DisplayType DisplayType { get; set; }
public bool DeterministicEmulation { get { return true; } }
@ -173,12 +175,11 @@ namespace BizHawk.Emulation.Cores.Sega.MasterSystem
if (this.Settings.ForceStereoSeparation && !IsGameGear)
{
byte stereoByte = 0xAD;
if (game["StereoByte"])
{
stereoByte = byte.Parse(game.OptionValue("StereoByte"));
ForceStereoByte = byte.Parse(game.OptionValue("StereoByte"));
}
PSG.StereoPanning = stereoByte;
PSG.StereoPanning = ForceStereoByte;
}
if (this.SyncSettings.AllowOverlock && game["OverclockSafe"])
@ -246,6 +247,9 @@ namespace BizHawk.Emulation.Cores.Sega.MasterSystem
Frame++;
PSG.BeginFrame(Cpu.TotalExecutedCycles);
Cpu.Debug = CoreComm.Tracer.Enabled;
if (!IsGameGear)
PSG.StereoPanning = Settings.ForceStereoSeparation ? ForceStereoByte : (byte) 0xFF;
if (Cpu.Debug && Cpu.Logger == null) // TODO, lets not do this on each frame. But lets refactor CoreComm/CoreComm first
{
Cpu.Logger = (s) => CoreComm.Tracer.Put(s);
@ -513,7 +517,7 @@ namespace BizHawk.Emulation.Cores.Sega.MasterSystem
}
public static bool RebootNeeded(SMSSettings x, SMSSettings y)
{
return x.ForceStereoSeparation != y.ForceStereoSeparation || x.SpriteLimit != y.SpriteLimit;
return false;
}
}

View File

@ -353,6 +353,7 @@ namespace BizHawk.Emulation.Cores.Sega.MasterSystem
public void ExecFrame(bool render)
{
int scanlinesPerFrame = DisplayType == DisplayType.NTSC ? 262 : 313;
SpriteLimit = Sms.Settings.SpriteLimit;
for (ScanLine = 0; ScanLine < scanlinesPerFrame; ScanLine++)
{
RenderCurrentScanline(render);