From efb998129be7461356e4ec5180adb9a2e73c818e Mon Sep 17 00:00:00 2001 From: thrust26 Date: Thu, 9 Aug 2018 15:39:54 +0200 Subject: [PATCH] fixes #342 --- src/debugger/TIADebug.cxx | 36 ++++++++++++++++++--------------- src/emucore/tia/TIA.cxx | 11 ++++++++-- src/emucore/tia/TIA.hxx | 40 ++++++++++++++++++++++--------------- src/gui/DeveloperDialog.cxx | 34 ++++++++++++++++++++----------- 4 files changed, 75 insertions(+), 46 deletions(-) diff --git a/src/debugger/TIADebug.cxx b/src/debugger/TIADebug.cxx index 9d9741a65..f71164753 100644 --- a/src/debugger/TIADebug.cxx +++ b/src/debugger/TIADebug.cxx @@ -49,15 +49,17 @@ const DebuggerState& TIADebug::getState() myState.coluRegs.push_back(coluBK()); // Debug Colors - int mode = myTIA.frameLayout() == FrameLayout::ntsc ? 0 : 1; + int timing = myTIA.consoleTiming() == ConsoleTiming::ntsc ? 0 + : myTIA.consoleTiming() == ConsoleTiming::pal ? 1 : 2; + myState.fixedCols.clear(); - myState.fixedCols.push_back(myTIA.myFixedColorPalette[mode][TIA::P0]); - myState.fixedCols.push_back(myTIA.myFixedColorPalette[mode][TIA::P1]); - myState.fixedCols.push_back(myTIA.myFixedColorPalette[mode][TIA::PF]); - myState.fixedCols.push_back(myTIA.myFixedColorPalette[mode][TIA::BK]); - myState.fixedCols.push_back(myTIA.myFixedColorPalette[mode][TIA::M0]); - myState.fixedCols.push_back(myTIA.myFixedColorPalette[mode][TIA::M1]); - myState.fixedCols.push_back(myTIA.myFixedColorPalette[mode][TIA::BL]); + myState.fixedCols.push_back(myTIA.myFixedColorPalette[timing][TIA::P0]); + myState.fixedCols.push_back(myTIA.myFixedColorPalette[timing][TIA::P1]); + myState.fixedCols.push_back(myTIA.myFixedColorPalette[timing][TIA::PF]); + myState.fixedCols.push_back(myTIA.myFixedColorPalette[timing][TIA::BK]); + myState.fixedCols.push_back(myTIA.myFixedColorPalette[timing][TIA::M0]); + myState.fixedCols.push_back(myTIA.myFixedColorPalette[timing][TIA::M1]); + myState.fixedCols.push_back(myTIA.myFixedColorPalette[timing][TIA::BL]); myState.fixedCols.push_back(TIA::FixedColor::HBLANK_WHITE); // Collisions @@ -1012,20 +1014,22 @@ string TIADebug::debugColors() const { ostringstream buf; - int mode = myTIA.frameLayout() == FrameLayout::ntsc ? 0 : 1; - buf << " " << myTIA.myFixedColorNames[TIA::P0] << " " << colorSwatch(myTIA.myFixedColorPalette[mode][TIA::P0]) + int timing = myTIA.consoleTiming() == ConsoleTiming::ntsc ? 0 + : myTIA.consoleTiming() == ConsoleTiming::pal ? 1 : 2; + + buf << " " << myTIA.myFixedColorNames[TIA::P0] << " " << colorSwatch(myTIA.myFixedColorPalette[timing][TIA::P0]) << " Player 0\n" - << " " << myTIA.myFixedColorNames[TIA::M0] << " " << colorSwatch(myTIA.myFixedColorPalette[mode][TIA::M0]) + << " " << myTIA.myFixedColorNames[TIA::M0] << " " << colorSwatch(myTIA.myFixedColorPalette[timing][TIA::M0]) << " Missile 0\n" - << " " << myTIA.myFixedColorNames[TIA::P1] << " " << colorSwatch(myTIA.myFixedColorPalette[mode][TIA::P1]) + << " " << myTIA.myFixedColorNames[TIA::P1] << " " << colorSwatch(myTIA.myFixedColorPalette[timing][TIA::P1]) << " Player 1\n" - << " " << myTIA.myFixedColorNames[TIA::M1] << " " << colorSwatch(myTIA.myFixedColorPalette[mode][TIA::M1]) + << " " << myTIA.myFixedColorNames[TIA::M1] << " " << colorSwatch(myTIA.myFixedColorPalette[timing][TIA::M1]) << " Missile 1\n" - << " " << myTIA.myFixedColorNames[TIA::PF] << " " << colorSwatch(myTIA.myFixedColorPalette[mode][TIA::PF]) + << " " << myTIA.myFixedColorNames[TIA::PF] << " " << colorSwatch(myTIA.myFixedColorPalette[timing][TIA::PF]) << " Playfield\n" - << " " << myTIA.myFixedColorNames[TIA::BL] << " " << colorSwatch(myTIA.myFixedColorPalette[mode][TIA::BL]) + << " " << myTIA.myFixedColorNames[TIA::BL] << " " << colorSwatch(myTIA.myFixedColorPalette[timing][TIA::BL]) << " Ball\n" - << " Grey " << colorSwatch(myTIA.myFixedColorPalette[mode][TIA::BK]) + << " Grey " << colorSwatch(myTIA.myFixedColorPalette[timing][TIA::BK]) << " Background\n" << " White " << colorSwatch(TIA::FixedColor::HBLANK_WHITE) << " HMOVE\n"; diff --git a/src/emucore/tia/TIA.cxx b/src/emucore/tia/TIA.cxx index 7529ac0b0..651da546b 100644 --- a/src/emucore/tia/TIA.cxx +++ b/src/emucore/tia/TIA.cxx @@ -973,7 +973,8 @@ bool TIA::toggleCollisions() // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - bool TIA::enableFixedColors(bool enable) { - int timing = consoleTiming() == ConsoleTiming::pal ? 1 : 0; + int timing = consoleTiming() == ConsoleTiming::ntsc ? 0 + : consoleTiming() == ConsoleTiming::pal ? 1 : 2; myMissile0.setDebugColor(myFixedColorPalette[timing][FixedObject::M0]); myMissile1.setDebugColor(myFixedColorPalette[timing][FixedObject::M1]); @@ -1010,38 +1011,44 @@ bool TIA::setFixedColorPalette(const string& colors) case 'r': myFixedColorPalette[0][i] = FixedColor::NTSC_RED; myFixedColorPalette[1][i] = FixedColor::PAL_RED; + myFixedColorPalette[2][i] = FixedColor::SECAM_RED; myFixedColorNames[i] = "Red "; break; case 'o': myFixedColorPalette[0][i] = FixedColor::NTSC_ORANGE; myFixedColorPalette[1][i] = FixedColor::PAL_ORANGE; + myFixedColorPalette[2][i] = FixedColor::SECAM_ORANGE; myFixedColorNames[i] = "Orange"; break; case 'y': myFixedColorPalette[0][i] = FixedColor::NTSC_YELLOW; myFixedColorPalette[1][i] = FixedColor::PAL_YELLOW; + myFixedColorPalette[2][i] = FixedColor::SECAM_YELLOW; myFixedColorNames[i] = "Yellow"; break; case 'g': myFixedColorPalette[0][i] = FixedColor::NTSC_GREEN; myFixedColorPalette[1][i] = FixedColor::PAL_GREEN; + myFixedColorPalette[2][i] = FixedColor::SECAM_GREEN; myFixedColorNames[i] = "Green "; break; case 'b': myFixedColorPalette[0][i] = FixedColor::NTSC_BLUE; myFixedColorPalette[1][i] = FixedColor::PAL_BLUE; + myFixedColorPalette[2][i] = FixedColor::SECAM_BLUE; myFixedColorNames[i] = "Blue "; break; case 'p': myFixedColorPalette[0][i] = FixedColor::NTSC_PURPLE; myFixedColorPalette[1][i] = FixedColor::PAL_PURPLE; + myFixedColorPalette[2][i] = FixedColor::SECAM_PURPLE; myFixedColorNames[i] = "Purple"; break; } } myFixedColorPalette[0][TIA::BK] = FixedColor::NTSC_GREY; myFixedColorPalette[1][TIA::BK] = FixedColor::PAL_GREY; - + myFixedColorPalette[2][TIA::BK] = FixedColor::SECAM_GREY; // If already in fixed debug colours mode, update the current palette if(usingFixedColors()) diff --git a/src/emucore/tia/TIA.hxx b/src/emucore/tia/TIA.hxx index dc78c0477..41a7191ce 100644 --- a/src/emucore/tia/TIA.hxx +++ b/src/emucore/tia/TIA.hxx @@ -73,23 +73,31 @@ class TIA : public Device * Possible palette entries for objects in "fixed debug color mode". */ enum FixedColor { - NTSC_RED = 0x30, - NTSC_ORANGE = 0x38, - NTSC_YELLOW = 0x1c, - NTSC_GREEN = 0xc4, - NTSC_BLUE = 0x9c, - NTSC_PURPLE = 0x66, - NTSC_GREY = 0x04, + NTSC_RED = 0x30, + NTSC_ORANGE = 0x38, + NTSC_YELLOW = 0x1c, + NTSC_GREEN = 0xc4, + NTSC_BLUE = 0x9c, + NTSC_PURPLE = 0x66, + NTSC_GREY = 0x04, - PAL_RED = 0x62, - PAL_ORANGE = 0x4a, - PAL_YELLOW = 0x2e, - PAL_GREEN = 0x34, - PAL_BLUE = 0xbc, - PAL_PURPLE = 0xa6, - PAL_GREY = 0x06, + PAL_RED = 0x62, + PAL_ORANGE = 0x4a, + PAL_YELLOW = 0x2e, + PAL_GREEN = 0x34, + PAL_BLUE = 0xbc, + PAL_PURPLE = 0xa6, + PAL_GREY = 0x06, - HBLANK_WHITE = 0x0e + SECAM_RED = 0x04, + SECAM_ORANGE = 0x06, // purple + SECAM_YELLOW = 0x0c, + SECAM_GREEN = 0x08, + SECAM_BLUE = 0x02, + SECAM_PURPLE = 0x0a, // cyan + SECAM_GREY = 0x00, + + HBLANK_WHITE = 0x0e }; public: @@ -502,7 +510,7 @@ class TIA : public Device * Palette and indices for fixed debug colors. */ enum FixedObject { P0, M0, P1, M1, PF, BL, BK }; - FixedColor myFixedColorPalette[2][7]; + FixedColor myFixedColorPalette[3][7]; string myFixedColorNames[7]; private: diff --git a/src/gui/DeveloperDialog.cxx b/src/gui/DeveloperDialog.cxx index b1dde505d..4b65f37d3 100644 --- a/src/gui/DeveloperDialog.cxx +++ b/src/gui/DeveloperDialog.cxx @@ -1090,7 +1090,7 @@ void DeveloperDialog::handleDebugColours(int idx, int color) return; } - static constexpr ColorId dbg_color[2][DEBUG_COLORS] = { + static constexpr ColorId dbg_color[3][DEBUG_COLORS] = { { TIA::FixedColor::NTSC_RED, TIA::FixedColor::NTSC_ORANGE, @@ -1106,11 +1106,21 @@ void DeveloperDialog::handleDebugColours(int idx, int color) TIA::FixedColor::PAL_GREEN, TIA::FixedColor::PAL_PURPLE, TIA::FixedColor::PAL_BLUE + }, + { + TIA::FixedColor::SECAM_RED, + TIA::FixedColor::SECAM_ORANGE, + TIA::FixedColor::SECAM_YELLOW, + TIA::FixedColor::SECAM_GREEN, + TIA::FixedColor::SECAM_PURPLE, + TIA::FixedColor::SECAM_BLUE } }; - int mode = instance().console().tia().frameLayout() == FrameLayout::ntsc ? 0 : 1; - myDbgColourSwatch[idx]->setColor(dbg_color[mode][color]); + int timing = instance().console().tia().consoleTiming() == ConsoleTiming::ntsc ? 0 + : instance().console().tia().consoleTiming() == ConsoleTiming::pal ? 1 : 2; + + myDbgColourSwatch[idx]->setColor(dbg_color[timing][color]); myDbgColour[idx]->setSelectedIndex(color); // make sure the selected debug colors are all different @@ -1122,7 +1132,7 @@ void DeveloperDialog::handleDebugColours(int idx, int color) usedCol[i] = false; for(int j = 0; j < DEBUG_COLORS; ++j) { - if(myDbgColourSwatch[j]->getColor() == dbg_color[mode][i]) + if(myDbgColourSwatch[j]->getColor() == dbg_color[timing][i]) { usedCol[i] = true; break; @@ -1132,14 +1142,14 @@ void DeveloperDialog::handleDebugColours(int idx, int color) // check if currently changed color was used somewhere else for(int i = 0; i < DEBUG_COLORS; ++i) { - if (i != idx && myDbgColourSwatch[i]->getColor() == dbg_color[mode][color]) + if (i != idx && myDbgColourSwatch[i]->getColor() == dbg_color[timing][color]) { // if already used, change the other color to an unused one for(int j = 0; j < DEBUG_COLORS; ++j) { if(!usedCol[j]) { - myDbgColourSwatch[i]->setColor(dbg_color[mode][j]); + myDbgColourSwatch[i]->setColor(dbg_color[timing][j]); myDbgColour[i]->setSelectedIndex(j); break; } @@ -1155,12 +1165,12 @@ void DeveloperDialog::handleDebugColours(const string& colors) { switch(colors[i]) { - case 'r': handleDebugColours(i, 0); break; - case 'o': handleDebugColours(i, 1); break; - case 'y': handleDebugColours(i, 2); break; - case 'g': handleDebugColours(i, 3); break; - case 'p': handleDebugColours(i, 4); break; - case 'b': handleDebugColours(i, 5); break; + case 'r': handleDebugColours(i, 0); break; + case 'o': handleDebugColours(i, 1); break; + case 'y': handleDebugColours(i, 2); break; + case 'g': handleDebugColours(i, 3); break; + case 'p': handleDebugColours(i, 4); break; + case 'b': handleDebugColours(i, 5); break; default: break; } }