nes-fix bug where ppu viewer sometimes wouldnt refresh pattern display when the user changed selected palette

This commit is contained in:
zeromus 2012-10-10 05:06:14 +00:00
parent e2e0e6681e
commit 2d8ea045f3
1 changed files with 36 additions and 27 deletions

View File

@ -80,36 +80,42 @@ namespace BizHawk.MultiClient
return (byte)(((PPUBus[address] >> (7 - bit)) & 1)); return (byte)(((PPUBus[address] >> (7 - bit)) & 1));
} }
bool ForceChange = false;
bool CheckChange()
{
bool changed = false;
for (int x = 0; x < 0x20; x++)
{
PALRAMprev[x] = PALRAM[x];
PALRAM[x] = Nes.ppu.PALRAM[x];
if (PALRAM[x] != PALRAMprev[x])
{
changed = true;
}
}
for (int x = 0; x < 0x2000; x++)
{
PPUBusprev[x] = PPUBus[x];
PPUBus[x] = Nes.ppu.ppubus_peek(x);
if (PPUBus[x] != PPUBusprev[x])
{
changed = true;
}
}
if (ForceChange) return true;
return changed;
}
unsafe void Generate(bool now = false) unsafe void Generate(bool now = false)
{ {
if (!this.IsHandleCreated || this.IsDisposed) return; if (!this.IsHandleCreated || this.IsDisposed) return;
if (Global.Emulator.Frame % RefreshRate.Value == 0 || now) if (Global.Emulator.Frame % RefreshRate.Value == 0 || now)
{ {
bool Changed = false; bool Changed = CheckChange();
for (int x = 0; x < 0x20; x++)
{
PALRAMprev[x] = PALRAM[x];
PALRAM[x] = Nes.ppu.PALRAM[x];
if (PALRAM[x] != PALRAMprev[x])
{
Changed = true;
}
}
if (!Changed)
{
for (int x = 0; x < 0x2000; x++)
{
PPUBusprev[x] = PPUBus[x];
PPUBus[x] = Nes.ppu.ppubus_peek(x);
if (PPUBus[x] != PPUBusprev[x])
{
Changed = true;
}
}
}
int b0 = 0; int b0 = 0;
int b1 = 0; int b1 = 0;
@ -118,6 +124,8 @@ namespace BizHawk.MultiClient
if (Changed) if (Changed)
{ {
ForceChange = false;
//Pattern Viewer //Pattern Viewer
int pal; int pal;
for (int x = 0; x < 16; x++) for (int x = 0; x < 16; x++)
@ -336,13 +344,14 @@ namespace BizHawk.MultiClient
PatternView.Pal1++; PatternView.Pal1++;
if (PatternView.Pal1 > 7) PatternView.Pal1 = 0; if (PatternView.Pal1 > 7) PatternView.Pal1 = 0;
} }
UpdateTableLabels(); UpdatePaletteSelection();
} }
HandleDefaultImage(e); HandleDefaultImage(e);
} }
private void UpdateTableLabels() private void UpdatePaletteSelection()
{ {
ForceChange = true;
Table0PaletteLabel.Text = "Palette: " + PatternView.Pal0; Table0PaletteLabel.Text = "Palette: " + PatternView.Pal0;
Table1PaletteLabel.Text = "Palette: " + PatternView.Pal1; Table1PaletteLabel.Text = "Palette: " + PatternView.Pal1;
} }
@ -517,7 +526,7 @@ namespace BizHawk.MultiClient
if (sender == Table1P6) PatternView.Pal1 = 6; if (sender == Table1P6) PatternView.Pal1 = 6;
if (sender == Table1P7) PatternView.Pal1 = 7; if (sender == Table1P7) PatternView.Pal1 = 7;
UpdateTableLabels(); UpdatePaletteSelection();
} }
private void txtScanline_TextChanged(object sender, EventArgs e) private void txtScanline_TextChanged(object sender, EventArgs e)