X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=gfx.cpp;h=3a92defaf0e3a4903cdfb78876ef8d803fe232f0;hb=f4da228c8e2684675c7535704d0dc4d40da77ab2;hp=ce2421b92db3b2d7b2a4607ebbaa11f587a44b14;hpb=88a7ff138db66673061e5631ada16b14790ce9a7;p=drnoksnes diff --git a/gfx.cpp b/gfx.cpp index ce2421b..3a92def 100644 --- a/gfx.cpp +++ b/gfx.cpp @@ -58,9 +58,11 @@ #define M7 19 #define M8 19 -void ComputeClipWindows (); -static void S9xDisplayFrameRate (); -static void S9xDisplayString (const char *string); +#define GFX_PIX_SIZE 1 + +void ComputeClipWindows(); +static void S9xDisplayFrameRate(); +static void S9xDisplayString(const char *string); extern uint8 BitShifts[8][4]; extern uint8 TileShifts[8][4]; @@ -213,29 +215,21 @@ bool8_32 S9xGraphicsInit () if (Settings.Transparency) Settings.SixteenBit = TRUE; - IPPU.DirectColourMapsNeedRebuild = TRUE; - GFX.PixSize = 1; - if (Settings.SixteenBit) - { - DrawTilePtr = DrawTile16; - DrawClippedTilePtr = DrawClippedTile16; - DrawLargePixelPtr = DrawLargePixel16; - DrawHiResTilePtr= DrawHiResTile16; - DrawHiResClippedTilePtr = DrawHiResClippedTile16; - GFX.PPL = GFX.Pitch >> 1; - GFX.PPLx2 = GFX.Pitch; - } - else - { - DrawTilePtr = DrawTile; - DrawClippedTilePtr = DrawClippedTile; - DrawLargePixelPtr = DrawLargePixel; - DrawHiResTilePtr = DrawTile; - DrawHiResClippedTilePtr = DrawClippedTile; - GFX.PPL = GFX.Pitch; - GFX.PPLx2 = GFX.Pitch * 2; - } - S9xFixColourBrightness (); + IPPU.DirectColourMapsNeedRebuild = TRUE; + if (Settings.SixteenBit) { + DrawTilePtr = DrawTile16; + DrawClippedTilePtr = DrawClippedTile16; + DrawLargePixelPtr = DrawLargePixel16; + DrawHiResTilePtr= DrawHiResTile16; + DrawHiResClippedTilePtr = DrawHiResClippedTile16; + } else { + DrawTilePtr = DrawTile; + DrawClippedTilePtr = DrawClippedTile; + DrawLargePixelPtr = DrawLargePixel; + DrawHiResTilePtr = DrawTile; + DrawHiResClippedTilePtr = DrawClippedTile; + } + S9xFixColourBrightness(); if (Settings.SixteenBit) { @@ -431,41 +425,30 @@ void S9xBuildDirectColourMaps () IPPU.DirectColourMapsNeedRebuild = FALSE; } -void S9xStartScreenRefresh () +void S9xStartScreenRefresh() { if (GFX.InfoStringTimeout > 0 && --GFX.InfoStringTimeout == 0) { free(GFX.InfoString); GFX.InfoString = NULL; } - if (IPPU.RenderThisFrame) - { -#ifndef _SNESPPC - if (!S9xInitUpdate ()) - { - IPPU.RenderThisFrame = FALSE; - return; - } -#endif - IPPU.RenderedFramesCount++; - IPPU.PreviousLine = IPPU.CurrentLine = 0; - IPPU.MaxBrightness = PPU.Brightness; - IPPU.LatchedBlanking = PPU.ForcedBlanking; - IPPU.LatchedInterlace = (Memory.FillRAM[0x2133] & 1); - IPPU.RenderedScreenWidth = 256; - IPPU.RenderedScreenHeight = PPU.ScreenHeight; - IPPU.DoubleWidthPixels = FALSE; - GFX.Pitch2 = GFX.Pitch = GFX.RealPitch; - GFX.PPL = GFX.PPLx2 >> 1; - PPU.RecomputeClipWindows = TRUE; - GFX.DepthDelta = GFX.SubZBuffer - GFX.ZBuffer; - GFX.Delta = (GFX.SubScreen - GFX.Screen) >> 1; - } - if (++IPPU.FrameCount % Memory.ROMFramesPerSecond == 0) - { - IPPU.DisplayedRenderedFrameCount = IPPU.RenderedFramesCount; - IPPU.RenderedFramesCount = 0; - IPPU.FrameCount = 0; + IPPU.FrameCount++; + + if (IPPU.RenderThisFrame) { + if (!S9xInitUpdate()) { + IPPU.RenderThisFrame = FALSE; + return; + } + + IPPU.PreviousLine = IPPU.CurrentLine = 0; + IPPU.MaxBrightness = PPU.Brightness; + IPPU.LatchedBlanking = PPU.ForcedBlanking; + IPPU.LatchedInterlace = (Memory.FillRAM[0x2133] & 1); + IPPU.RenderedScreenWidth = 256; + IPPU.RenderedScreenHeight = PPU.ScreenHeight; + IPPU.DoubleWidthPixels = FALSE; + + PPU.RecomputeClipWindows = TRUE; } } @@ -516,51 +499,51 @@ void RenderLine (uint8 C) void S9xEndScreenRefresh() { - IPPU.HDMAStarted = FALSE; - -//RC - if (IPPU.RenderThisFrame) - { - FLUSH_REDRAW (); - if (IPPU.ColorsChanged) - { - uint32 saved = PPU.CGDATA[0]; - if (!Settings.SixteenBit) - { - // Hack for Super Mario World - to get its sky blue - // (It uses Fixed colour addition on the backdrop colour) - if (!(Memory.FillRAM [0x2131] & 0x80) && - (Memory.FillRAM[0x2131] & 0x20) && - (PPU.FixedColourRed || PPU.FixedColourGreen || - PPU.FixedColourBlue)) - { - PPU.CGDATA[0] = PPU.FixedColourRed | - (PPU.FixedColourGreen << 5) | - (PPU.FixedColourBlue << 10); + IPPU.HDMAStarted = FALSE; + + if (IPPU.RenderThisFrame) { + FLUSH_REDRAW (); + + IPPU.RenderedFramesCount++; + + if (IPPU.ColorsChanged) { + uint32 saved = PPU.CGDATA[0]; + + if (!Settings.SixteenBit) { + // Hack for Super Mario World - to get its sky blue + // (It uses Fixed colour addition on the backdrop colour) + if (!(Memory.FillRAM [0x2131] & 0x80) && + (Memory.FillRAM[0x2131] & 0x20) && + (PPU.FixedColourRed || PPU.FixedColourGreen || + PPU.FixedColourBlue)) { + PPU.CGDATA[0] = PPU.FixedColourRed | + (PPU.FixedColourGreen << 5) | + (PPU.FixedColourBlue << 10); + } } - } - IPPU.ColorsChanged = FALSE; - - S9xSetPalette (); - PPU.CGDATA[0] = saved; - } - GFX.Pitch = GFX.Pitch2 = GFX.RealPitch; - GFX.PPL = GFX.PPLx2 >> 1; + IPPU.ColorsChanged = FALSE; + S9xSetPalette(); + PPU.CGDATA[0] = saved; + } + + if (Settings.DisplayFrameRate) { + S9xDisplayFrameRate(); + } - if (Settings.DisplayFrameRate) - S9xDisplayFrameRate (); - if (GFX.InfoString) - S9xDisplayString (GFX.InfoString); + if (GFX.InfoString) { + S9xDisplayString(GFX.InfoString); + } - S9xDeinitUpdate (IPPU.RenderedScreenWidth, IPPU.RenderedScreenHeight, - Settings.SixteenBit); + S9xDeinitUpdate( + IPPU.RenderedScreenWidth, IPPU.RenderedScreenHeight, + Settings.SixteenBit); } + #ifndef RC_OPTIMIZED - S9xApplyCheats (); + S9xApplyCheats (); #endif - #ifdef DEBUGGER if (CPU.Flags & FRAME_ADVANCE_FLAG) { @@ -755,8 +738,6 @@ void DrawOBJS (bool8_32 OnMain = FALSE, uint8 D = 0) BG.NameSelect = PPU.OBJNameSelect; BG.DirectColourMode = FALSE; - GFX.PixSize = 1; - GFX.Z1 = D + 2; int I = 0; @@ -845,10 +826,10 @@ void DrawOBJS (bool8_32 OnMain = FALSE, uint8 D = 0) { Tile += ((Left - PPU.OBJ[S].HPos) >> 3) * TileInc; Middle -= (Left - PPU.OBJ[S].HPos) >> 3; - O += Left * GFX.PixSize; + O += Left * GFX_PIX_SIZE; if ((Offset = (Left - PPU.OBJ[S].HPos) & 7)) { - O -= Offset * GFX.PixSize; + O -= Offset * GFX_PIX_SIZE; int W = 8 - Offset; int Width = Right - Left; if (W > Width) @@ -860,11 +841,11 @@ void DrawOBJS (bool8_32 OnMain = FALSE, uint8 D = 0) continue; Tile += TileInc; Middle--; - O += 8 * GFX.PixSize; + O += 8 * GFX_PIX_SIZE; } } else - O += PPU.OBJ[S].HPos * GFX.PixSize; + O += PPU.OBJ[S].HPos * GFX_PIX_SIZE; if (PPU.OBJ[S].HPos + Size >= Right) { @@ -875,7 +856,7 @@ void DrawOBJS (bool8_32 OnMain = FALSE, uint8 D = 0) else Offset = 0; - for (int X = 0; X < Middle; X++, O += 8 * GFX.PixSize, + for (int X = 0; X < Middle; X++, O += 8 * GFX_PIX_SIZE, Tile += TileInc) { (*DrawTilePtr) (Tile, O, TileLine, LineCount); @@ -990,9 +971,9 @@ void DrawBackgroundMosaic (uint32 BGMode, uint32 bg, uint8 Z1, uint8 Z2) HPos = HOffset + Left; PixWidth = PPU.Mosaic - r; } - uint32 s = Y * GFX.PPL + Left * GFX.PixSize; + uint32 s = Y * GFX.PPL + Left * GFX_PIX_SIZE; for (uint32 x = Left; x < Right; x += PixWidth, - s += PixWidth * GFX.PixSize, + s += PixWidth * GFX_PIX_SIZE, HPos += PixWidth, PixWidth = PPU.Mosaic) { uint32 Quot = (HPos & OffsetMask) >> 3; @@ -1229,7 +1210,7 @@ void DrawBackgroundOffset (uint32 BGMode, uint32 bg, uint8 Z1, uint8 Z2) uint32 TotalCount = 0; uint32 MaxCount = 8; - uint32 s = Left * GFX.PixSize + Y * GFX.PPL; + uint32 s = Left * GFX_PIX_SIZE + Y * GFX.PPL; bool8_32 left_hand_edge = (Left == 0); Width = Right - Left; @@ -1336,7 +1317,7 @@ void DrawBackgroundOffset (uint32 BGMode, uint32 bg, uint8 Z1, uint8 Z2) if (Count > MaxCount) Count = MaxCount; - s -= Offset * GFX.PixSize; + s -= Offset * GFX_PIX_SIZE; Tile = READ_2BYTES(t); GFX.Z1 = GFX.Z2 = depths [(Tile & 0x2000) >> 13]; @@ -1376,7 +1357,7 @@ void DrawBackgroundOffset (uint32 BGMode, uint32 bg, uint8 Z1, uint8 Z2) Left += Count; TotalCount += Count; - s += (Offset + Count) * GFX.PixSize; + s += (Offset + Count) * GFX_PIX_SIZE; MaxCount = 8; } } @@ -1387,9 +1368,6 @@ void DrawBackgroundMode5 (uint32 /* BGMODE */, uint32 bg, uint8 Z1, uint8 Z2) { CHECK_SOUND(); - GFX.Pitch = GFX.RealPitch; - GFX.PPL = GFX.PPLx2 >> 1; - GFX.PixSize = 1; uint8 depths [2] = {Z1, Z2}; uint32 Tile; @@ -1496,8 +1474,8 @@ void DrawBackgroundMode5 (uint32 /* BGMODE */, uint32 bg, uint8 Z1, uint8 Z2) continue; } - uint32 s = (Left>>1) * GFX.PixSize + Y * GFX.PPL; - uint32 HPos = (HOffset + Left * GFX.PixSize) & 0x3ff; + uint32 s = (Left>>1) * GFX_PIX_SIZE + Y * GFX.PPL; + uint32 HPos = (HOffset + Left * GFX_PIX_SIZE) & 0x3ff; uint32 Quot = HPos >> 3; uint32 Count = 0; @@ -1698,8 +1676,6 @@ void DrawBackgroundMode5 (uint32 /* BGMODE */, uint32 bg, uint8 Z1, uint8 Z2) void DrawBackground (uint32 BGMode, uint32 bg, uint8 Z1, uint8 Z2) { - GFX.PixSize = 1; - BG.TileSize = BGSizes [PPU.BG[bg].BGSize]; BG.BitShift = BitShifts[BGMode][bg]; BG.TileShift = TileShifts[BGMode][bg]; @@ -1846,7 +1822,7 @@ void DrawBackground (uint32 BGMode, uint32 bg, uint8 Z1, uint8 Z2) continue; } - uint32 s = Left * GFX.PixSize + Y * GFX.PPL; + uint32 s = Left * GFX_PIX_SIZE + Y * GFX.PPL; uint32 HPos = (HOffset + Left) & OffsetMask; uint32 Quot = HPos >> 3; @@ -1876,7 +1852,7 @@ void DrawBackground (uint32 BGMode, uint32 bg, uint8 Z1, uint8 Z2) Count = 8 - Offset; if (Count > Width) Count = Width; - s -= Offset * GFX.PixSize; + s -= Offset * GFX_PIX_SIZE; Tile = READ_2BYTES(t); GFX.Z1 = GFX.Z2 = depths [(Tile & 0x2000) >> 13]; @@ -1934,14 +1910,14 @@ void DrawBackground (uint32 BGMode, uint32 bg, uint8 Z1, uint8 Z2) t = b1; } Quot++; - s += 8 * GFX.PixSize; + s += 8 * GFX_PIX_SIZE; } // Middle, unclipped tiles Count = Width - Count; int Middle = Count >> 3; Count &= 7; - for (int C = Middle; C > 0; s += 8 * GFX.PixSize, Quot++, C--) + for (int C = Middle; C > 0; s += 8 * GFX_PIX_SIZE, Quot++, C--) { Tile = READ_2BYTES(t); GFX.Z1 = GFX.Z2 = depths [(Tile & 0x2000) >> 13]; @@ -2924,7 +2900,7 @@ void RenderScreen (uint8 *Screen, bool8_32 sub, bool8_32 force_no_add, uint8 D) #include "font.h" -void DisplayChar (uint8 *Screen, uint8 c) +static void DisplayChar(uint8 *Screen, uint8 c) { int line = (((c & 0x7f) - 32) >> 4) * font_height; int offset = (((c & 0x7f) - 32) & 15) * font_width; @@ -2972,32 +2948,35 @@ void DisplayChar (uint8 *Screen, uint8 c) #endif } -static void S9xDisplayFrameRate () +static void S9xDisplayFrameRate() { - uint8 *Screen = GFX.Screen + 2 + - (IPPU.RenderedScreenHeight - font_height - 1) * GFX.Pitch2; - char string [10]; - int len = 5; - - sprintf (string, "%02d/%02d", IPPU.DisplayedRenderedFrameCount, - (int) Memory.ROMFramesPerSecond); + uint8 *Screen = GFX.Screen + 2 + + (IPPU.RenderedScreenHeight - font_height - 1) * GFX.Pitch; + char string[12]; + int len; + const unsigned int char_width = Settings.SixteenBit ? + (font_width - 1) * sizeof (uint16) : + (font_width - 1); + + if (Settings.TurboMode) { + len = sprintf(string, "%u", + IPPU.DisplayedRenderedFrameCount); + } else { + len = sprintf(string, "%2u/%02u", + IPPU.DisplayedRenderedFrameCount, + (unsigned int) Memory.ROMFramesPerSecond); + } - int i; -#ifdef _SNESPPC - Screen += (font_width - 1) * sizeof(uint16); -#endif - for (i = 0; i < len; i++) - { - DisplayChar (Screen, string [i]); - Screen += Settings.SixteenBit ? (font_width - 1) * sizeof (uint16) : - (font_width - 1); - } + for (int i = 0; i < len; i++) { + DisplayChar(Screen, string[i]); + Screen += char_width; + } } -static void S9xDisplayString (const char *string) +static void S9xDisplayString(const char *string) { uint8 *Screen = GFX.Screen + 2 + - (IPPU.RenderedScreenHeight - font_height * 5) * GFX.Pitch2; + (IPPU.RenderedScreenHeight - font_height * 5) * GFX.Pitch; int len = strlen (string); int max_chars = IPPU.RenderedScreenWidth / (font_width - 1); int char_count = 0; @@ -3067,74 +3046,46 @@ void S9xUpdateScreen () // ~30-50ms! (called from FLUSH_REDRAW()) uint32 endy = GFX.EndY; #ifndef RC_OPTIMIZED - if (Settings.SupportHiRes && - (PPU.BGMode == 5 || PPU.BGMode == 6 || IPPU.LatchedInterlace)) - { - if (PPU.BGMode == 5 || PPU.BGMode == 6) - { + if (Settings.SupportHiRes && + (PPU.BGMode == 5 || PPU.BGMode == 6 || IPPU.LatchedInterlace)) { + if (PPU.BGMode == 5 || PPU.BGMode == 6) { IPPU.RenderedScreenWidth = 512; x2 = 2; } - if (IPPU.LatchedInterlace) - { - starty = GFX.StartY * 2; - endy = GFX.EndY * 2 + 1; + + if (IPPU.LatchedInterlace) { + starty = GFX.StartY * 2; + endy = GFX.EndY * 2 + 1; } - if (!IPPU.DoubleWidthPixels) - { - // The game has switched from lo-res to hi-res mode part way down - // the screen. Scale any existing lo-res pixels on screen -#ifndef _SNESPPC - if (Settings.SixteenBit) -#endif - { -#if defined (USE_GLIDE) || defined (USE_OPENGL) - if ( -#ifdef USE_GLIDE - (Settings.GlideEnable && GFX.Pitch == 512) || -#endif -#ifdef USE_OPENGL - (Settings.OpenGLEnable && GFX.Pitch == 512) || -#endif - 0) - { - // Have to back out of the speed up hack where the low res. - // SNES image was rendered into a 256x239 sized buffer, - // ignoring the true, larger size of the buffer. - - for (register int32 y = (int32) GFX.StartY - 1; y >= 0; y--) - { - register uint16 *p = (uint16 *) (GFX.Screen + y * GFX.Pitch) + 255; - register uint16 *q = (uint16 *) (GFX.Screen + y * GFX.RealPitch) + 510; - for (register int x = 255; x >= 0; x--, p--, q -= 2) - *q = *(q + 1) = *p; - } + + if (!IPPU.DoubleWidthPixels) { + // The game has switched from lo-res to hi-res mode part way down + // the screen. Scale any existing lo-res pixels on screen + if (Settings.SixteenBit) { + for (register uint32 y = 0; y < GFX.StartY; y++) { + register uint16 *p = + (uint16 *) (GFX.Screen + y * GFX.Pitch) + 255; + register uint16 *q = + (uint16 *) (GFX.Screen + y * GFX.Pitch) + 510; + for (register int x = 255; x >= 0; x--, p--, q -= 2) { + *q = *(q + 1) = *p; + } } - else -#endif - for (register uint32 y = 0; y < GFX.StartY; y++) - { - register uint16 *p = (uint16 *) (GFX.Screen + y * GFX.Pitch) + 255; - register uint16 *q = (uint16 *) (GFX.Screen + y * GFX.Pitch) + 510; - for (register int x = 255; x >= 0; x--, p--, q -= 2) + } else { + for (register uint32 y = 0; y < GFX.StartY; y++) { + register uint8 *p = + GFX.Screen + y * GFX.Pitch + 255; + register uint8 *q = + GFX.Screen + y * GFX.Pitch + 510; + for (register int x = 255; x >= 0; x--, p--, q -= 2) { *q = *(q + 1) = *p; } - } -#ifndef _SNESPPC - else - { - for (register uint32 y = 0; y < GFX.StartY; y++) - { - register uint8 *p = GFX.Screen + y * GFX.Pitch + 255; - register uint8 *q = GFX.Screen + y * GFX.Pitch + 510; - for (register int x = 255; x >= 0; x--, p--, q -= 2) - *q = *(q + 1) = *p; } } -#endif - IPPU.DoubleWidthPixels = TRUE; + + IPPU.DoubleWidthPixels = TRUE; } - } + } #endif //RC_OPTIMIZED (DONT DO ABOVE) uint32 black = BLACK | (BLACK << 16); @@ -3173,11 +3124,9 @@ void S9xUpdateScreen () // ~30-50ms! (called from FLUSH_REDRAW()) { // Colour window enabled. - #ifdef RC_OPTIMIZED for (uint32 y = starty; y <= endy; y++) { - ZeroMemory (GFX.SubZBuffer + y * GFX.ZPitch, IPPU.RenderedScreenWidth); ZeroMemory (GFX.ZBuffer + y * GFX.ZPitch, @@ -3185,7 +3134,7 @@ void S9xUpdateScreen () // ~30-50ms! (called from FLUSH_REDRAW()) if (IPPU.Clip [0].Count [5]) { - memset ((GFX.SubScreen + y * GFX.Pitch2), black, IPPU.RenderedScreenWidth); + memset ((GFX.SubScreen + y * GFX.Pitch), black, IPPU.RenderedScreenWidth); } for (uint32 c = 0; c < pClip->Count [5]; c++) { @@ -3199,7 +3148,7 @@ void S9xUpdateScreen () // ~30-50ms! (called from FLUSH_REDRAW()) // because there is a colour window in effect clipping // the main screen that will allow the sub-screen // 'underneath' to show through. - memset ((GFX.SubScreen + y * GFX.Pitch2) + pClip->Left [c][5] * x2, + memset ((GFX.SubScreen + y * GFX.Pitch) + pClip->Left [c][5] * x2, GFX.FixedColour, pClip->Right[c][5]*x2 - pClip->Left [c][5] * x2); } @@ -3221,7 +3170,7 @@ void S9xUpdateScreen () // ~30-50ms! (called from FLUSH_REDRAW()) // if there is clipping then clear subscreen to a black color if (IPPU.Clip [0].Count [5]) { - memset32 ((uint32_t*)(GFX.SubScreen + y * GFX.Pitch2), black, IPPU.RenderedScreenWidth>>1); + memset32 ((uint32_t*)(GFX.SubScreen + y * GFX.Pitch), black, IPPU.RenderedScreenWidth>>1); } // loop through all window clippings @@ -3238,7 +3187,7 @@ void S9xUpdateScreen () // ~30-50ms! (called from FLUSH_REDRAW()) // the main screen that will allow the sub-screen // 'underneath' to show through. - register uint16 *p = (uint16 *) (GFX.SubScreen + y * GFX.Pitch2); + register uint16 *p = (uint16 *) (GFX.SubScreen + y * GFX.Pitch); register uint16 *q = p + pClip->Right [c][5] * x2; p += pClip->Left [c][5] * x2; @@ -3249,7 +3198,6 @@ void S9xUpdateScreen () // ~30-50ms! (called from FLUSH_REDRAW()) } } #endif -//#undef RC_OPTIMIZED } else @@ -3281,17 +3229,17 @@ void S9xUpdateScreen () // ~30-50ms! (called from FLUSH_REDRAW()) // because there is a colour window in effect clipping // the main screen that will allow the sub-screen // 'underneath' to show through. - if (GFX.Pitch2 == (uint32)IPPU.RenderedScreenWidth) + if (GFX.Pitch == (uint32)IPPU.RenderedScreenWidth) { - memset ((GFX.SubScreen + starty * GFX.Pitch2), + memset ((GFX.SubScreen + starty * GFX.Pitch), GFX.FixedColour | (GFX.FixedColour << 16), - GFX.Pitch2 * (endy - starty - 1)); + GFX.Pitch * (endy - starty - 1)); } else { for (uint32 y = starty; y <= endy; y++) { - memset ((GFX.SubScreen + y * GFX.Pitch2), + memset ((GFX.SubScreen + y * GFX.Pitch), GFX.FixedColour | (GFX.FixedColour << 16), IPPU.RenderedScreenWidth); } @@ -3316,7 +3264,7 @@ void S9xUpdateScreen () // ~30-50ms! (called from FLUSH_REDRAW()) // 'underneath' to show through. - memset32 ((uint32_t*)(GFX.SubScreen + y * GFX.Pitch2), fixedColour, + memset32 ((uint32_t*)(GFX.SubScreen + y * GFX.Pitch), fixedColour, IPPU.RenderedScreenWidth>>1); } } @@ -3334,7 +3282,7 @@ void S9xUpdateScreen () // ~30-50ms! (called from FLUSH_REDRAW()) { for (uint32 y = starty; y <= endy; y++) { - register uint16 *p = (uint16 *) (GFX.Screen + y * GFX.Pitch2); + register uint16 *p = (uint16 *) (GFX.Screen + y * GFX.Pitch); register uint8 *d = GFX.SubZBuffer + y * GFX.ZPitch ; register uint8 *e = d + SNES_WIDTH; @@ -3385,7 +3333,7 @@ void S9xUpdateScreen () // ~30-50ms! (called from FLUSH_REDRAW()) if (GFX.r2131 & 0x40) { // Subtract, halving the result. - register uint16 *p = (uint16 *) (GFX.Screen + y * GFX.Pitch2) + Left; + register uint16 *p = (uint16 *) (GFX.Screen + y * GFX.Pitch) + Left; register uint8 *d = GFX.ZBuffer + y * GFX.ZPitch; register uint8 *s = GFX.SubZBuffer + y * GFX.ZPitch + Left; register uint8 *e = d + Right; @@ -3414,7 +3362,7 @@ void S9xUpdateScreen () // ~30-50ms! (called from FLUSH_REDRAW()) else { // Subtract - register uint16 *p = (uint16 *) (GFX.Screen + y * GFX.Pitch2) + Left; + register uint16 *p = (uint16 *) (GFX.Screen + y * GFX.Pitch) + Left; register uint8 *s = GFX.SubZBuffer + y * GFX.ZPitch + Left; register uint8 *d = GFX.ZBuffer + y * GFX.ZPitch; register uint8 *e = d + Right; @@ -3444,7 +3392,7 @@ void S9xUpdateScreen () // ~30-50ms! (called from FLUSH_REDRAW()) else if (GFX.r2131 & 0x40) { - register uint16 *p = (uint16 *) (GFX.Screen + y * GFX.Pitch2) + Left; + register uint16 *p = (uint16 *) (GFX.Screen + y * GFX.Pitch) + Left; register uint8 *d = GFX.ZBuffer + y * GFX.ZPitch; register uint8 *s = GFX.SubZBuffer + y * GFX.ZPitch + Left; register uint8 *e = d + Right; @@ -3472,7 +3420,7 @@ void S9xUpdateScreen () // ~30-50ms! (called from FLUSH_REDRAW()) else if (back != 0) { - register uint16 *p = (uint16 *) (GFX.Screen + y * GFX.Pitch2) + Left; + register uint16 *p = (uint16 *) (GFX.Screen + y * GFX.Pitch) + Left; register uint8 *d = GFX.ZBuffer + y * GFX.ZPitch; register uint8 *s = GFX.SubZBuffer + y * GFX.ZPitch + Left; register uint8 *e = d + Right; @@ -3505,7 +3453,7 @@ void S9xUpdateScreen () // ~30-50ms! (called from FLUSH_REDRAW()) // copy the sub-screen to the main screen // or fill it with the back-drop colour if the // sub-screen is clear. - register uint16 *p = (uint16 *) (GFX.Screen + y * GFX.Pitch2) + Left; + register uint16 *p = (uint16 *) (GFX.Screen + y * GFX.Pitch) + Left; register uint8 *d = GFX.ZBuffer + y * GFX.ZPitch; register uint8 *s = GFX.SubZBuffer + y * GFX.ZPitch + Left; register uint8 *e = d + Right; @@ -3548,7 +3496,7 @@ void S9xUpdateScreen () // ~30-50ms! (called from FLUSH_REDRAW()) { uint32 Left = pClip->Left [b][5] * x2; uint32 Right = pClip->Right [b][5] * x2; - register uint16 *p = (uint16 *) (GFX.Screen + y * GFX.Pitch2) + Left; + register uint16 *p = (uint16 *) (GFX.Screen + y * GFX.Pitch) + Left; register uint8 *d = GFX.ZBuffer + y * GFX.ZPitch; register uint8 *e = d + Right; d += Left; @@ -3566,7 +3514,7 @@ void S9xUpdateScreen () // ~30-50ms! (called from FLUSH_REDRAW()) { for (uint32 y = starty; y <= endy; y++) { - register uint16 *p = (uint16 *) (GFX.Screen + y * GFX.Pitch2); + register uint16 *p = (uint16 *) (GFX.Screen + y * GFX.Pitch); register uint8 *d = GFX.ZBuffer + y * GFX.ZPitch; register uint8 *e = d + 256 * x2; @@ -3605,17 +3553,17 @@ void S9xUpdateScreen () // ~30-50ms! (called from FLUSH_REDRAW()) { #ifdef RC_OPTIMIZED - if (GFX.Pitch2 == (uint32)IPPU.RenderedScreenWidth) + if (GFX.Pitch == (uint32)IPPU.RenderedScreenWidth) { - memset (GFX.Screen + starty * GFX.Pitch2, black, - GFX.Pitch2 * (endy - starty - 1)); + memset (GFX.Screen + starty * GFX.Pitch, black, + GFX.Pitch * (endy - starty - 1)); } else { for (uint32 y = starty; y <= endy; y++) { - memset (GFX.Screen + y * GFX.Pitch2, black, - GFX.Pitch2); + memset (GFX.Screen + y * GFX.Pitch, black, + GFX.Pitch); } } for (uint32 y = starty; y <= endy; y++) @@ -3625,7 +3573,7 @@ void S9xUpdateScreen () // ~30-50ms! (called from FLUSH_REDRAW()) if (IPPU.Clip [0].Right [c][5] > IPPU.Clip [0].Left [c][5]) { - memset ((GFX.Screen + y * GFX.Pitch2) + IPPU.Clip [0].Left [c][5] * x2, + memset ((GFX.Screen + y * GFX.Pitch) + IPPU.Clip [0].Left [c][5] * x2, back, IPPU.Clip [0].Right [c][5] * x2 - IPPU.Clip [0].Left [c][5] * x2); } @@ -3635,7 +3583,7 @@ void S9xUpdateScreen () // ~30-50ms! (called from FLUSH_REDRAW()) // loop through all of the lines that are going to be updated as part of this screen update for (uint32 y = starty; y <= endy; y++) { - memset32 ((uint32_t*)(GFX.Screen + y * GFX.Pitch2), black, + memset32 ((uint32_t*)(GFX.Screen + y * GFX.Pitch), black, IPPU.RenderedScreenWidth>>1); if (black!=back) @@ -3644,7 +3592,7 @@ void S9xUpdateScreen () // ~30-50ms! (called from FLUSH_REDRAW()) { if (IPPU.Clip [0].Right [c][5] > IPPU.Clip [0].Left [c][5]) { - register uint16 *p = (uint16 *) (GFX.Screen + y * GFX.Pitch2); // get pointer to current line in screen buffer + register uint16 *p = (uint16 *) (GFX.Screen + y * GFX.Pitch); // get pointer to current line in screen buffer register uint16 *q = p + IPPU.Clip [0].Right [c][5] * x2; // get pointer to end of line p += IPPU.Clip [0].Left [c][5] * x2; @@ -3659,24 +3607,24 @@ void S9xUpdateScreen () // ~30-50ms! (called from FLUSH_REDRAW()) else { #ifdef RC_OPTIMIZED - if (GFX.Pitch2 == (uint32)IPPU.RenderedScreenWidth) + if (GFX.Pitch == (uint32)IPPU.RenderedScreenWidth) { - memset (GFX.Screen + starty * GFX.Pitch2, back, - GFX.Pitch2 * (endy - starty - 1)); + memset (GFX.Screen + starty * GFX.Pitch, back, + GFX.Pitch * (endy - starty - 1)); } else { for (uint32 y = starty; y <= endy; y++) { - memset (GFX.Screen + y * GFX.Pitch2, back, - GFX.Pitch2); + memset (GFX.Screen + y * GFX.Pitch, back, + GFX.Pitch); } } #else // there is no clipping to worry about so just fill with the back colour for (uint32 y = starty; y <= endy; y++) { - memset32 ((uint32_t*)(GFX.Screen + y * GFX.Pitch2), back, + memset32 ((uint32_t*)(GFX.Screen + y * GFX.Pitch), back, IPPU.RenderedScreenWidth>>1); } #endif @@ -3747,7 +3695,7 @@ void S9xUpdateScreen () // ~30-50ms! (called from FLUSH_REDRAW()) // now clear all graphics lines which are being updated using the back colour for (register uint32 y = starty; y <= endy; y++) { - memset32 ((uint32_t*)(GFX.Screen + y * GFX.Pitch2), back, + memset32 ((uint32_t*)(GFX.Screen + y * GFX.Pitch), back, IPPU.RenderedScreenWidth>>1); } } @@ -3760,7 +3708,7 @@ void S9xUpdateScreen () // ~30-50ms! (called from FLUSH_REDRAW()) // Loop through all lines being updated and clear the pixels to 0 for (uint32 y = starty; y <= endy; y++) { - ZeroMemory (GFX.Screen + y * GFX.Pitch2, + ZeroMemory (GFX.Screen + y * GFX.Pitch, IPPU.RenderedScreenWidth); } } @@ -3786,18 +3734,19 @@ else \ // Define an inline function to handle which BGs are being displayed #define DISPLAY(n) \ -(!(PPU.BG_Forced & n) && \ -(GFX.r212c & n) || \ -((GFX.r212d & n) && subadd)) + ( \ + (!(PPU.BG_Forced & n) && (GFX.r212c & n)) || \ + (((GFX.r212d & n) && subadd)) \ + ) uint8 subadd = GFX.r2131 & 0x3f; // go through all BGS are check if they need to be displayed - bool8_32 BG0 = DISPLAY(1) && !(Settings.os9x_hack & GFX_IGNORE_BG0); - bool8_32 BG1 = DISPLAY(2) && !(Settings.os9x_hack & GFX_IGNORE_BG1); - bool8_32 BG2 = DISPLAY(4) && !(Settings.os9x_hack & GFX_IGNORE_BG2); - bool8_32 BG3 = DISPLAY(8) && !(Settings.os9x_hack & GFX_IGNORE_BG3); - bool8_32 OB = DISPLAY(16) && !(Settings.os9x_hack & GFX_IGNORE_OBJ); + bool BG0 = DISPLAY(1) && !(Settings.os9x_hack & GFX_IGNORE_BG0); + bool BG1 = DISPLAY(2) && !(Settings.os9x_hack & GFX_IGNORE_BG1); + bool BG2 = DISPLAY(4) && !(Settings.os9x_hack & GFX_IGNORE_BG2); + bool BG3 = DISPLAY(8) && !(Settings.os9x_hack & GFX_IGNORE_BG3); + bool OB = DISPLAY(16) && !(Settings.os9x_hack & GFX_IGNORE_OBJ); if (PPU.BGMode <= 1) { @@ -3935,9 +3884,9 @@ else \ // pixels. for (uint32 y = GFX.StartY; y <= GFX.EndY; y++) { - memcpy32 ((uint32_t*)(GFX.Screen + (y * 2 + 1) * GFX.Pitch2), - (uint32_t*)(GFX.Screen + y * 2 * GFX.Pitch2), - GFX.Pitch2>>2); + memcpy32 ((uint32_t*)(GFX.Screen + (y * 2 + 1) * GFX.Pitch), + (uint32_t*)(GFX.Screen + y * 2 * GFX.Pitch), + GFX.Pitch>>2); } } }