Guest User

FCEUX 2.2.2 NewPPU grayscale fix

a guest
Jan 31st, 2016
158
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. diff -urN fceux-2.2.2-orig/src/ppu.cpp fceux-2.2.2/src/ppu.cpp
  2. --- fceux-2.2.2-orig/src/ppu.cpp    2013-09-15 19:41:42 +0900
  3. +++ fceux-2.2.2/src/ppu.cpp 2016-01-14 05:26:46 +0900
  4. @@ -57,7 +57,8 @@
  5.  
  6.  #define PPU_status      (PPU[2])
  7.  
  8. -#define Pal             (PALRAM)
  9. +#define READPAL(ofs)    (PALRAM[(ofs)] & (GRAYSCALE ? 0x30 : 0xFF))
  10. +#define READUPAL(ofs)   (UPALRAM[(ofs)] & (GRAYSCALE ? 0x30 : 0xFF))
  11.  
  12.  static void FetchSpriteData(void);
  13.  static void RefreshLine(int lastpixel);
  14. @@ -460,14 +461,11 @@
  15.         uint8 ret;
  16.         if (!(tmp & 3)) {
  17.             if (!(tmp & 0xC))
  18. -               ret = PALRAM[0x00];
  19. +               ret = READPAL(0x00);
  20.             else
  21. -               ret = UPALRAM[((tmp & 0xC) >> 2) - 1];
  22. +               ret = READUPAL(((tmp & 0xC) >> 2) - 1);
  23.         } else
  24. -           ret = PALRAM[tmp & 0x1F];
  25. -
  26. -       if (GRAYSCALE)
  27. -           ret &= 0x30;
  28. +           ret = READPAL(tmp & 0x1F);
  29.         return ret;
  30.     }
  31.  }
  32. @@ -682,13 +680,11 @@
  33.             //to get a gray color reading
  34.             if (!(tmp & 3)) {
  35.                 if (!(tmp & 0xC))
  36. -                   ret = PALRAM[0x00];
  37. +                   ret = READPAL(0x00);
  38.                 else
  39. -                   ret = UPALRAM[((tmp & 0xC) >> 2) - 1];
  40. +                   ret = READUPAL(((tmp & 0xC) >> 2) - 1);
  41.             } else
  42. -               ret = PALRAM[tmp & 0x1F];
  43. -           if (GRAYSCALE)
  44. -               ret &= 0x30;
  45. +               ret = READPAL(tmp & 0x1F);
  46.             VRAMBuffer = CALL_PPUREAD(RefreshAddr - 0x1000);
  47.         } else {
  48.             if (debug_loggingCD && (RefreshAddr < 0x2000))
  49. @@ -704,13 +700,11 @@
  50.         if (tmp >= 0x3F00) {    // Palette RAM tied directly to the output data, without VRAM buffer
  51.             if (!(tmp & 3)) {
  52.                 if (!(tmp & 0xC))
  53. -                   ret = PALRAM[0x00];
  54. +                   ret = READPAL(0x00);
  55.                 else
  56. -                   ret = UPALRAM[((tmp & 0xC) >> 2) - 1];
  57. +                   ret = READUPAL(((tmp & 0xC) >> 2) - 1);
  58.             } else
  59. -               ret = PALRAM[tmp & 0x1F];
  60. -           if (GRAYSCALE)
  61. -               ret &= 0x30;
  62. +               ret = READPAL(tmp & 0x1F);
  63.             #ifdef FCEUDEF_DEBUGGER
  64.             if (!fceuindbg)
  65.             #endif
  66. @@ -1041,7 +1035,7 @@
  67.  
  68.     if (!ScreenON && !SpriteON) {
  69.         uint32 tem;
  70. -       tem = Pal[0] | (Pal[0] << 8) | (Pal[0] << 16) | (Pal[0] << 24);
  71. +       tem = READPAL(0) | (READPAL(0) << 8) | (READPAL(0) << 16) | (READPAL(0) << 24);
  72.         tem |= 0x40404040;
  73.         FCEU_dwmemset(Pline, tem, numtiles * 8);
  74.         P += numtiles * 8;
  75. @@ -1062,10 +1056,10 @@
  76.     }
  77.  
  78.     //Priority bits, needed for sprite emulation.
  79. -   Pal[0] |= 64;
  80. -   Pal[4] |= 64;
  81. -   Pal[8] |= 64;
  82. -   Pal[0xC] |= 64;
  83. +   PALRAM[0] |= 64;
  84. +   PALRAM[4] |= 64;
  85. +   PALRAM[8] |= 64;
  86. +   PALRAM[0xC] |= 64;
  87.  
  88.     //This high-level graphics MMC5 emulation code was written for MMC5 carts in "CL" mode.
  89.     //It's probably not totally correct for carts in "SL" mode.
  90. @@ -1143,15 +1137,15 @@
  91.  #undef RefreshAddr
  92.  
  93.     //Reverse changes made before.
  94. -   Pal[0] &= 63;
  95. -   Pal[4] &= 63;
  96. -   Pal[8] &= 63;
  97. -   Pal[0xC] &= 63;
  98. +   PALRAM[0] &= 63;
  99. +   PALRAM[4] &= 63;
  100. +   PALRAM[8] &= 63;
  101. +   PALRAM[0xC] &= 63;
  102.  
  103.     RefreshAddr = smorkus;
  104.     if (firsttile <= 2 && 2 < lasttile && !(PPU[1] & 2)) {
  105.         uint32 tem;
  106. -       tem = Pal[0] | (Pal[0] << 8) | (Pal[0] << 16) | (Pal[0] << 24);
  107. +       tem = READPAL(0) | (READPAL(0) << 8) | (READPAL(0) << 16) | (READPAL(0) << 24);
  108.         tem |= 0x40404040;
  109.         *(uint32*)Plinef = *(uint32*)(Plinef + 4) = tem;
  110.     }
  111. @@ -1159,7 +1153,7 @@
  112.     if (!ScreenON) {
  113.         uint32 tem;
  114.         int tstart, tcount;
  115. -       tem = Pal[0] | (Pal[0] << 8) | (Pal[0] << 16) | (Pal[0] << 24);
  116. +       tem = READPAL(0) | (READPAL(0) << 8) | (READPAL(0) << 16) | (READPAL(0) << 24);
  117.         tem |= 0x40404040;
  118.  
  119.         tcount = lasttile - firsttile;
  120. @@ -1228,7 +1222,7 @@
  121.         uint32 tem;
  122.         uint8 col;
  123.         if (gNoBGFillColor == 0xFF)
  124. -           col = Pal[0];
  125. +           col = READPAL(0);
  126.         else col = gNoBGFillColor;
  127.         tem = col | (col << 8) | (col << 16) | (col << 24);
  128.         tem |= 0x40404040;
  129. @@ -1461,7 +1455,7 @@
  130.  
  131.         int x = spr->x;
  132.         uint8 *C;
  133. -       uint8 *VB;
  134. +       int VB;
  135.  
  136.         pixdata = ppulut1[spr->ca[0]] | ppulut2[spr->ca[1]];
  137.         J = spr->ca[0] | spr->ca[1];
  138. @@ -1483,75 +1477,75 @@
  139.             }
  140.  
  141.             C = sprlinebuf + x;
  142. -           VB = (PALRAM + 0x10) + ((atr & 3) << 2);
  143. +           VB = (0x10) + ((atr & 3) << 2);
  144.  
  145.             if (atr & SP_BACK) {
  146.                 if (atr & H_FLIP) {
  147. -                   if (J & 0x80) C[7] = VB[pixdata & 3] | 0x40;
  148. +                   if (J & 0x80) C[7] = READPAL(VB | (pixdata & 3)) | 0x40;
  149.                     pixdata >>= 4;
  150. -                   if (J & 0x40) C[6] = VB[pixdata & 3] | 0x40;
  151. +                   if (J & 0x40) C[6] = READPAL(VB | (pixdata & 3)) | 0x40;
  152.                     pixdata >>= 4;
  153. -                   if (J & 0x20) C[5] = VB[pixdata & 3] | 0x40;
  154. +                   if (J & 0x20) C[5] = READPAL(VB | (pixdata & 3)) | 0x40;
  155.                     pixdata >>= 4;
  156. -                   if (J & 0x10) C[4] = VB[pixdata & 3] | 0x40;
  157. +                   if (J & 0x10) C[4] = READPAL(VB | (pixdata & 3)) | 0x40;
  158.                     pixdata >>= 4;
  159. -                   if (J & 0x08) C[3] = VB[pixdata & 3] | 0x40;
  160. +                   if (J & 0x08) C[3] = READPAL(VB | (pixdata & 3)) | 0x40;
  161.                     pixdata >>= 4;
  162. -                   if (J & 0x04) C[2] = VB[pixdata & 3] | 0x40;
  163. +                   if (J & 0x04) C[2] = READPAL(VB | (pixdata & 3)) | 0x40;
  164.                     pixdata >>= 4;
  165. -                   if (J & 0x02) C[1] = VB[pixdata & 3] | 0x40;
  166. +                   if (J & 0x02) C[1] = READPAL(VB | (pixdata & 3)) | 0x40;
  167.                     pixdata >>= 4;
  168. -                   if (J & 0x01) C[0] = VB[pixdata] | 0x40;
  169. +                   if (J & 0x01) C[0] = READPAL(VB | pixdata) | 0x40;
  170.                 } else {
  171. -                   if (J & 0x80) C[0] = VB[pixdata & 3] | 0x40;
  172. +                   if (J & 0x80) C[0] = READPAL(VB | (pixdata & 3)) | 0x40;
  173.                     pixdata >>= 4;
  174. -                   if (J & 0x40) C[1] = VB[pixdata & 3] | 0x40;
  175. +                   if (J & 0x40) C[1] = READPAL(VB | (pixdata & 3)) | 0x40;
  176.                     pixdata >>= 4;
  177. -                   if (J & 0x20) C[2] = VB[pixdata & 3] | 0x40;
  178. +                   if (J & 0x20) C[2] = READPAL(VB | (pixdata & 3)) | 0x40;
  179.                     pixdata >>= 4;
  180. -                   if (J & 0x10) C[3] = VB[pixdata & 3] | 0x40;
  181. +                   if (J & 0x10) C[3] = READPAL(VB | (pixdata & 3)) | 0x40;
  182.                     pixdata >>= 4;
  183. -                   if (J & 0x08) C[4] = VB[pixdata & 3] | 0x40;
  184. +                   if (J & 0x08) C[4] = READPAL(VB | (pixdata & 3)) | 0x40;
  185.                     pixdata >>= 4;
  186. -                   if (J & 0x04) C[5] = VB[pixdata & 3] | 0x40;
  187. +                   if (J & 0x04) C[5] = READPAL(VB | (pixdata & 3)) | 0x40;
  188.                     pixdata >>= 4;
  189. -                   if (J & 0x02) C[6] = VB[pixdata & 3] | 0x40;
  190. +                   if (J & 0x02) C[6] = READPAL(VB | (pixdata & 3)) | 0x40;
  191.                     pixdata >>= 4;
  192. -                   if (J & 0x01) C[7] = VB[pixdata] | 0x40;
  193. +                   if (J & 0x01) C[7] = READPAL(VB | pixdata) | 0x40;
  194.                 }
  195.             } else {
  196.                 if (atr & H_FLIP) {
  197. -                   if (J & 0x80) C[7] = VB[pixdata & 3];
  198. +                   if (J & 0x80) C[7] = READPAL(VB | (pixdata & 3));
  199.                     pixdata >>= 4;
  200. -                   if (J & 0x40) C[6] = VB[pixdata & 3];
  201. +                   if (J & 0x40) C[6] = READPAL(VB | (pixdata & 3));
  202.                     pixdata >>= 4;
  203. -                   if (J & 0x20) C[5] = VB[pixdata & 3];
  204. +                   if (J & 0x20) C[5] = READPAL(VB | (pixdata & 3));
  205.                     pixdata >>= 4;
  206. -                   if (J & 0x10) C[4] = VB[pixdata & 3];
  207. +                   if (J & 0x10) C[4] = READPAL(VB | (pixdata & 3));
  208.                     pixdata >>= 4;
  209. -                   if (J & 0x08) C[3] = VB[pixdata & 3];
  210. +                   if (J & 0x08) C[3] = READPAL(VB | (pixdata & 3));
  211.                     pixdata >>= 4;
  212. -                   if (J & 0x04) C[2] = VB[pixdata & 3];
  213. +                   if (J & 0x04) C[2] = READPAL(VB | (pixdata & 3));
  214.                     pixdata >>= 4;
  215. -                   if (J & 0x02) C[1] = VB[pixdata & 3];
  216. +                   if (J & 0x02) C[1] = READPAL(VB | (pixdata & 3));
  217.                     pixdata >>= 4;
  218. -                   if (J & 0x01) C[0] = VB[pixdata];
  219. +                   if (J & 0x01) C[0] = READPAL(VB | pixdata);
  220.                 } else {
  221. -                   if (J & 0x80) C[0] = VB[pixdata & 3];
  222. +                   if (J & 0x80) C[0] = READPAL(VB | (pixdata & 3));
  223.                     pixdata >>= 4;
  224. -                   if (J & 0x40) C[1] = VB[pixdata & 3];
  225. +                   if (J & 0x40) C[1] = READPAL(VB | (pixdata & 3));
  226.                     pixdata >>= 4;
  227. -                   if (J & 0x20) C[2] = VB[pixdata & 3];
  228. +                   if (J & 0x20) C[2] = READPAL(VB | (pixdata & 3));
  229.                     pixdata >>= 4;
  230. -                   if (J & 0x10) C[3] = VB[pixdata & 3];
  231. +                   if (J & 0x10) C[3] = READPAL(VB | (pixdata & 3));
  232.                     pixdata >>= 4;
  233. -                   if (J & 0x08) C[4] = VB[pixdata & 3];
  234. +                   if (J & 0x08) C[4] = READPAL(VB | (pixdata & 3));
  235.                     pixdata >>= 4;
  236. -                   if (J & 0x04) C[5] = VB[pixdata & 3];
  237. +                   if (J & 0x04) C[5] = READPAL(VB | (pixdata & 3));
  238.                     pixdata >>= 4;
  239. -                   if (J & 0x02) C[6] = VB[pixdata & 3];
  240. +                   if (J & 0x02) C[6] = READPAL(VB | (pixdata & 3));
  241.                     pixdata >>= 4;
  242. -                   if (J & 0x01) C[7] = VB[pixdata];
  243. +                   if (J & 0x01) C[7] = READPAL(VB | pixdata);
  244.                 }
  245.             }
  246.         }
  247. @@ -2073,7 +2067,7 @@
  248.                             uint8* pt = bgdata.main[bgtile].pt;
  249.                             pixel = ((pt[0] >> (7 - bgpx)) & 1) | (((pt[1] >> (7 - bgpx)) & 1) << 1) | bgdata.main[bgtile].at;
  250.                         }
  251. -                       pixelcolor = PALRAM[pixel];
  252. +                       pixelcolor = READPAL(pixel);
  253.  
  254.                         //look for a sprite to be drawn
  255.                         bool havepixel = false;
  256. @@ -2116,7 +2110,7 @@
  257.  
  258.                                 //bring in the palette bits and palettize
  259.                                 spixel |= (oam[2] & 3) << 2;
  260. -                               pixelcolor = PALRAM[0x10 + spixel];
  261. +                               pixelcolor = READPAL(0x10 + spixel);
  262.                             }
  263.                         }
RAW Paste Data