diff --git a/BizHawk.Client.EmuHawk/tools/NES/NESNameTableViewer.cs b/BizHawk.Client.EmuHawk/tools/NES/NESNameTableViewer.cs
index 5d92047cbb..0804bef641 100644
--- a/BizHawk.Client.EmuHawk/tools/NES/NESNameTableViewer.cs
+++ b/BizHawk.Client.EmuHawk/tools/NES/NESNameTableViewer.cs
@@ -72,7 +72,7 @@ namespace BizHawk.Client.EmuHawk
#endregion
- private unsafe void DrawTile(int* dst, int pitch, byte* pal, byte* tile)
+ private unsafe void DrawTile(int* dst, int pitch, byte* pal, byte* tile, int* finalpal)
{
dst += 7;
int vinc = pitch + 8;
@@ -82,7 +82,7 @@ namespace BizHawk.Client.EmuHawk
int hi = tile[8] << 1;
for (int i = 0; i < 8; i++)
{
- *dst-- = _nes.LookupColor(pal[lo & 1 | hi & 2]);
+ *dst-- = finalpal[pal[lo & 1 | hi & 2]];
lo >>= 1;
hi >>= 1;
}
@@ -97,29 +97,31 @@ namespace BizHawk.Client.EmuHawk
int chr_mask = chr.Length - 1;
fixed (byte* chrptr = chr, palptr = palram, ppuptr = ppumem, exptr = exram)
+ fixed (int* finalpal = _nes.GetCompiledPalette())
{
- DrawExNT(dst, pitch, palptr, ppuptr + 0x2000, exptr, chrptr, chr_mask);
- DrawExNT(dst + 256, pitch, palptr, ppuptr + 0x2400, exptr, chrptr, chr_mask);
+ DrawExNT(dst, pitch, palptr, ppuptr + 0x2000, exptr, chrptr, chr_mask, finalpal);
+ DrawExNT(dst + 256, pitch, palptr, ppuptr + 0x2400, exptr, chrptr, chr_mask, finalpal);
dst += pitch * 240;
- DrawExNT(dst, pitch, palptr, ppuptr + 0x2800, exptr, chrptr, chr_mask);
- DrawExNT(dst + 256, pitch, palptr, ppuptr + 0x2c00, exptr, chrptr, chr_mask);
+ DrawExNT(dst, pitch, palptr, ppuptr + 0x2800, exptr, chrptr, chr_mask, finalpal);
+ DrawExNT(dst + 256, pitch, palptr, ppuptr + 0x2c00, exptr, chrptr, chr_mask, finalpal);
}
}
private unsafe void GenerateAttr(int* dst, int pitch, byte[] palram, byte[] ppumem)
{
fixed (byte* palptr = palram, ppuptr = ppumem)
+ fixed (int* finalpal = _nes.GetCompiledPalette())
{
byte* chrptr = ppuptr + (_nes.ppu.reg_2000.bg_pattern_hi ? 0x1000 : 0);
- DrawNT(dst, pitch, palptr, ppuptr + 0x2000, chrptr);
- DrawNT(dst + 256, pitch, palptr, ppuptr + 0x2400, chrptr);
+ DrawNT(dst, pitch, palptr, ppuptr + 0x2000, chrptr, finalpal);
+ DrawNT(dst + 256, pitch, palptr, ppuptr + 0x2400, chrptr, finalpal);
dst += pitch * 240;
- DrawNT(dst, pitch, palptr, ppuptr + 0x2800, chrptr);
- DrawNT(dst + 256, pitch, palptr, ppuptr + 0x2c00, chrptr);
+ DrawNT(dst, pitch, palptr, ppuptr + 0x2800, chrptr, finalpal);
+ DrawNT(dst + 256, pitch, palptr, ppuptr + 0x2c00, chrptr, finalpal);
}
}
- private unsafe void DrawNT(int* dst, int pitch, byte* palram, byte* nt, byte* chr)
+ private unsafe void DrawNT(int* dst, int pitch, byte* palram, byte* nt, byte* chr, int* finalpal)
{
byte* at = nt + 0x3c0;
@@ -134,7 +136,7 @@ namespace BizHawk.Client.EmuHawk
int palnum = a & 3;
int tileaddr = t << 4;
- DrawTile(dst, pitch, palram + palnum * 4, chr + tileaddr);
+ DrawTile(dst, pitch, palram + palnum * 4, chr + tileaddr, finalpal);
dst += 8;
}
dst -= 256;
@@ -142,7 +144,7 @@ namespace BizHawk.Client.EmuHawk
}
}
- private unsafe void DrawExNT(int* dst, int pitch, byte* palram, byte* nt, byte* exnt, byte* chr, int chr_mask)
+ private unsafe void DrawExNT(int* dst, int pitch, byte* palram, byte* nt, byte* exnt, byte* chr, int chr_mask, int* finalpal)
{
for (int ty = 0; ty < 30; ty++)
{
@@ -155,7 +157,7 @@ namespace BizHawk.Client.EmuHawk
int palnum = ex >> 6;
int tileaddr = tilenum << 4 & chr_mask;
- DrawTile(dst, pitch, palram + palnum * 4, chr + tileaddr);
+ DrawTile(dst, pitch, palram + palnum * 4, chr + tileaddr, finalpal);
dst += 8;
}
dst -= 256;
diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Core.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Core.cs
index 675a142a35..15cb7367e6 100644
--- a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Core.cs
+++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Core.cs
@@ -63,6 +63,15 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES
return board;
}
+ ///
+ /// for debugging only!
+ ///
+ ///
+ public int[] GetCompiledPalette()
+ {
+ return palette_compiled;
+ }
+
public void Dispose()
{
if (magicSoundProvider != null) magicSoundProvider.Dispose();