From 92c934b9a9f632521948970a636c3fa376118c43 Mon Sep 17 00:00:00 2001 From: goyuken Date: Sat, 1 Mar 2014 23:43:04 +0000 Subject: [PATCH] nes: squeeze a few more percent out of the nametable viewer --- .../tools/NES/NESNameTableViewer.cs | 30 ++++++++++--------- .../Consoles/Nintendo/NES/Core.cs | 9 ++++++ 2 files changed, 25 insertions(+), 14 deletions(-) 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();