diff --git a/trunk/src/ppu.cpp b/trunk/src/ppu.cpp index 992435c9..6fb04fff 100644 --- a/trunk/src/ppu.cpp +++ b/trunk/src/ppu.cpp @@ -433,7 +433,12 @@ unsigned int cdloggerVideoDataSize = 0; int GetCHRAddress(int A) { if (cdloggerVideoDataSize) { - int result = &VPage[A >> 10][A] - CHRptr[0]; +// int result = &VPage[A >> 10][A] - CHRptr[0]; + int result; + if(MMC5Hack) + result = MMC5BGVRAMADR(A) - CHRptr[0]; + else + result = &VPage[A >> 10][A] - CHRptr[0]; if ((result >= 0) && (result < (int)cdloggerVideoDataSize)) return result; } else @@ -441,6 +446,18 @@ int GetCHRAddress(int A) { return -1; } +int GetCHROffset(uint8 *ptr) { + int result = ptr - CHRptr[0]; + if (cdloggerVideoDataSize) { + if ((result >= 0) && (result < (int)cdloggerVideoDataSize)) + return result; + } else { + if ((result >= 0) && (result < 0x2000)) + return result; + } + return -1; +} + #define RENDER_LOG(tmp) { \ if (debug_loggingCD) \ { \ @@ -459,6 +476,24 @@ int GetCHRAddress(int A) { } \ } +#define RENDER_LOGP(tmp) { \ + if (debug_loggingCD) \ + { \ + int addr = GetCHROffset(tmp); \ + if (addr != -1) \ + { \ + if (!(cdloggervdata[addr] & 1)) \ + { \ + cdloggervdata[addr] |= 1; \ + if(cdloggerVideoDataSize) { \ + if (!(cdloggervdata[addr] & 2)) undefinedvromcount--; \ + rendercount++; \ + } \ + } \ + } \ + } \ +} + uint8 FASTCALL FFCEUX_PPURead_Default(uint32 A) { uint32 tmp = A; @@ -741,11 +776,9 @@ static DECLFR(A2007) { if (debug_loggingCD) LogAddress = GetCHRAddress(tmp); if(MMC5Hack) - { - //probably wrong CD logging in this case... VRAMBuffer = *MMC5BGVRAMADR(tmp); - } - else VRAMBuffer = VPage[tmp >> 10][tmp]; + else + VRAMBuffer = VPage[tmp >> 10][tmp]; } else if (tmp < 0x3F00) VRAMBuffer = vnapage[(tmp >> 10) & 0x3][tmp & 0x3FF]; @@ -1395,10 +1428,12 @@ static void FetchSpriteData(void) { C = VRAMADR(vadr); if (SpriteON) - RENDER_LOG(vadr); +// RENDER_LOG(vadr); + RENDER_LOGP(C); dst.ca[0] = C[0]; if (SpriteON) - RENDER_LOG(vadr + 8); +// RENDER_LOG(vadr + 8); + RENDER_LOGP(C+8); dst.ca[1] = C[8]; dst.x = spr->x; dst.atr = spr->atr; @@ -1447,14 +1482,16 @@ static void FetchSpriteData(void) { else C = VRAMADR(vadr); if (SpriteON) - RENDER_LOG(vadr); +// RENDER_LOG(vadr); + RENDER_LOGP(C); dst.ca[0] = C[0]; if (ns < 8) { PPU_hook(0x2000); PPU_hook(vadr); } if (SpriteON) - RENDER_LOG(vadr + 8); +// RENDER_LOG(vadr + 8); + RENDER_LOGP(C+8); dst.ca[1] = C[8]; dst.x = spr->x; dst.atr = spr->atr; diff --git a/trunk/src/pputile.inc b/trunk/src/pputile.inc index b935a7ff..3c7d5792 100644 --- a/trunk/src/pputile.inc +++ b/trunk/src/pputile.inc @@ -89,21 +89,25 @@ pshift[1] <<= 8; #ifdef PPU_BGFETCH if (RefreshAddr & 1) { if(ScreenON) - RENDER_LOG(vadr + 8); +// RENDER_LOG(vadr + 8); + RENDER_LOGP(C + 8); pshift[0] |= C[8]; pshift[1] |= C[8]; } else { if(ScreenON) - RENDER_LOG(vadr); +// RENDER_LOG(vadr); + RENDER_LOGP(C); pshift[0] |= C[0]; pshift[1] |= C[0]; } #else if(ScreenON) - RENDER_LOG(vadr); +// RENDER_LOG(vadr); + RENDER_LOGP(C); pshift[0] |= C[0]; if(ScreenON) - RENDER_LOG(vadr + 8); +// RENDER_LOG(vadr + 8); + RENDER_LOGP(C + 8); pshift[1] |= C[8]; #endif