From: Maarten t. H. <mth...@us...> - 2003-03-30 22:56:43
|
Update of /cvsroot/openmsx/openMSX/src In directory sc8-pr-cvs1:/tmp/cvs-serv23765/src Modified Files: SDLGLRenderer.cc SDLHiRenderer.cc SDLLoRenderer.cc Log Message: Fixed uses of display mode which could not yet handle the YJK bits. Index: SDLGLRenderer.cc =================================================================== RCS file: /cvsroot/openmsx/openMSX/src/SDLGLRenderer.cc,v retrieving revision 1.56 retrieving revision 1.57 diff -u -d -r1.56 -r1.57 --- SDLGLRenderer.cc 30 Mar 2003 17:39:43 -0000 1.56 +++ SDLGLRenderer.cc 30 Mar 2003 22:56:39 -0000 1.57 @@ -2,8 +2,6 @@ /* TODO: -- Scanline emulation. -- Use 8x8 textures in character mode. - Use GL display lists for geometry speedup. - Implement sprite pixels in Graphic 5. - Is it possible to combine dirtyPattern and dirtyColour into a single @@ -221,14 +219,16 @@ inline void SDLGLRenderer::setDisplayMode(int mode) { - dirtyChecker = modeToDirtyChecker[mode & 0x1F]; + int baseMode = mode & 0x1F; + dirtyChecker = modeToDirtyChecker[baseMode]; if (vdp->isBitmapMode(mode)) { bitmapConverter.setDisplayMode(mode); } else { characterConverter.setDisplayMode(mode); } - lineWidth = (mode == 0x09 || mode == 0x10 || mode == 0x14 ? 512 : 256); - palSprites = (mode == 0x1C ? palGraphic7Sprites : palBg); + lineWidth = + (baseMode == 0x09 || baseMode == 0x10 || baseMode == 0x14 ? 512 : 256); + palSprites = (baseMode == 0x1C ? palGraphic7Sprites : palBg); } void SDLGLRenderer::finishFrame() @@ -307,11 +307,12 @@ // TODO: Used knowledge of V9938 to merge two 4-bit colours // into a single 8 bit colour for SCREEN8. // Keep doing that or make VDP handle SCREEN8 differently? + int baseMode = vdp->getDisplayMode() & 0x1F; return - ( vdp->getDisplayMode() == 0x1C + ( baseMode == 0x1C ? PALETTE256[ vdp->getBackgroundColour() | (vdp->getForegroundColour() << 4) ] - : palBg[ vdp->getDisplayMode() == 0x10 + : palBg[ baseMode == 0x10 ? vdp->getBackgroundColour() & 3 : vdp->getBackgroundColour() ] @@ -669,7 +670,7 @@ // I don't know why exactly, but it's probably related to // being called at frame start. //sync(time); - if (vdp->getDisplayMode() == 0x09) { + if ((vdp->getDisplayMode() & 0x1F) == 0x09) { // Text2 with blinking text. // Consider all characters dirty. // TODO: Only mark characters in blink colour dirty. Index: SDLHiRenderer.cc =================================================================== RCS file: /cvsroot/openmsx/openMSX/src/SDLHiRenderer.cc,v retrieving revision 1.84 retrieving revision 1.85 diff -u -d -r1.84 -r1.85 --- SDLHiRenderer.cc 30 Mar 2003 18:46:46 -0000 1.84 +++ SDLHiRenderer.cc 30 Mar 2003 22:56:39 -0000 1.85 @@ -91,10 +91,10 @@ // into a single 8 bit colour for SCREEN8. // Keep doing that or make VDP handle SCREEN8 differently? return - ( vdp->getDisplayMode() == 0x1C + ( (vdp->getDisplayMode() & 0x1F) == 0x1C ? PALETTE256[ vdp->getBackgroundColour() | (vdp->getForegroundColour() << 4)] - : palBg[ vdp->getDisplayMode() == 0x10 + : palBg[ (vdp->getDisplayMode() & 0x1F) == 0x10 ? vdp->getBackgroundColour() & 3 : vdp->getBackgroundColour() ] @@ -334,11 +334,12 @@ PixelRenderer::reset(time); // Init renderer state. - dirtyChecker = modeToDirtyChecker[vdp->getDisplayMode()]; + int mode = vdp->getDisplayMode(); + dirtyChecker = modeToDirtyChecker[mode & 0x1F]; if (vdp->isBitmapMode()) { - bitmapConverter.setDisplayMode(vdp->getDisplayMode()); + bitmapConverter.setDisplayMode(mode); } else { - characterConverter.setDisplayMode(vdp->getDisplayMode()); + characterConverter.setDisplayMode(mode); } palSprites = palBg; @@ -438,7 +439,7 @@ // I don't know why exactly, but it's probably related to // being called at frame start. //sync(time); - if (vdp->getDisplayMode() == 0x09) { + if ((vdp->getDisplayMode() & 0x1F) == 0x09) { // Text2 with blinking text. // Consider all characters dirty. // TODO: Only mark characters in blink colour dirty. @@ -498,7 +499,7 @@ } else { characterConverter.setDisplayMode(mode); } - palSprites = (mode == 0x1C ? palGraphic7Sprites : palBg); + palSprites = (mode & 0x1F) == 0x1C ? palGraphic7Sprites : palBg; setDirty(true); } Index: SDLLoRenderer.cc =================================================================== RCS file: /cvsroot/openmsx/openMSX/src/SDLLoRenderer.cc,v retrieving revision 1.50 retrieving revision 1.51 diff -u -d -r1.50 -r1.51 --- SDLLoRenderer.cc 30 Mar 2003 17:39:44 -0000 1.50 +++ SDLLoRenderer.cc 30 Mar 2003 22:56:39 -0000 1.51 @@ -91,10 +91,10 @@ // into a single 8 bit colour for SCREEN8. // Keep doing that or make VDP handle SCREEN8 differently? return - ( vdp->getDisplayMode() == 0x1C + ( (vdp->getDisplayMode() & 0x1F) == 0x1C ? PALETTE256[ vdp->getBackgroundColour() | (vdp->getForegroundColour() << 4)] - : palBg[ vdp->getDisplayMode() == 0x10 + : palBg[ (vdp->getDisplayMode() & 0x1F) == 0x10 ? vdp->getBackgroundColour() & 3 : vdp->getBackgroundColour() ] @@ -348,11 +348,12 @@ PixelRenderer::reset(time); // Init renderer state. - dirtyChecker = modeToDirtyChecker[vdp->getDisplayMode()]; + int mode = vdp->getDisplayMode(); + dirtyChecker = modeToDirtyChecker[mode & 0x1F]; if (vdp->isBitmapMode()) { - bitmapConverter.setDisplayMode(vdp->getDisplayMode()); + bitmapConverter.setDisplayMode(mode); } else { - characterConverter.setDisplayMode(vdp->getDisplayMode()); + characterConverter.setDisplayMode(mode); } palSprites = palBg; @@ -452,7 +453,7 @@ // I don't know why exactly, but it's probably related to // being called at frame start. //sync(time); - if (vdp->getDisplayMode() == 0x09) { + if ((vdp->getDisplayMode() & 0x1F) == 0x09) { // Text2 with blinking text. // Consider all characters dirty. // TODO: Only mark characters in blink colour dirty. @@ -512,7 +513,7 @@ } else { characterConverter.setDisplayMode(mode); } - palSprites = (mode == 0x1C ? palGraphic7Sprites : palBg); + palSprites = (mode & 0x1F) == 0x1C ? palGraphic7Sprites : palBg; setDirty(true); } |