From 5b99e3e998bd407c2e2ff03fa5de35a2b04698bb Mon Sep 17 00:00:00 2001 From: Christian Speckner Date: Mon, 13 Jan 2020 00:06:23 +0100 Subject: [PATCH] Change adjustscanlines parameterization to -5% .. 5%, hook uo hotkey. --- src/emucore/Console.cxx | 20 +++++++----- src/emucore/Settings.cxx | 12 +++---- src/emucore/tia/TIA.hxx | 4 +-- .../frame-manager/AbstractFrameManager.hxx | 4 +-- .../tia/frame-manager/FrameManager.cxx | 11 ++++--- .../tia/frame-manager/FrameManager.hxx | 6 ++-- src/gui/VideoDialog.cxx | 32 +++++++------------ src/gui/VideoDialog.hxx | 3 +- src/libretro/StellaLIBRETRO.cxx | 3 +- 9 files changed, 44 insertions(+), 51 deletions(-) diff --git a/src/emucore/Console.cxx b/src/emucore/Console.cxx index 8549064ef..35d5da2a4 100644 --- a/src/emucore/Console.cxx +++ b/src/emucore/Console.cxx @@ -688,19 +688,24 @@ void Console::changeScanlineAdjust(int direction) // Get correct setting, depending on whether we're in NTSC or PAL // Int32 adjust = myOSystem.settings().getInt("tia.adjustscanlines.ntsc"); + float newAdjustScanliens = myTIA->adjustScanlines();; + + if (direction != -1 && direction != +1) return; + if(direction == +1) // increase scanline adjustment { - cerr << "adjust scanline +\n"; + newAdjustScanliens = std::min(myTIA->adjustScanlines() + 0.5f, 5.f); } else if(direction == -1) // decrease scanline adjustment { - cerr << "adjust scanline -\n"; + newAdjustScanliens = std::max(myTIA->adjustScanlines() - 0.5f, -5.f); } - else - return; - // Set new adjustment, updating the correct setting - // ... + if (newAdjustScanliens != myTIA->adjustScanlines()) { + myTIA->setAdjustScanlines(newAdjustScanliens); + myOSystem.settings().setValue("tia.adjustscanlines", newAdjustScanliens); + initializeVideo(); + } } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -715,15 +720,14 @@ void Console::setTIAProperties() { // Assume we've got ~262 scanlines (NTSC-like format) myTIA->setLayout(FrameLayout::ntsc); - myTIA->setAdjustScanlines(myOSystem.settings().getInt("tia.adjustscanlines.ntsc")); } else { // Assume we've got ~312 scanlines (PAL-like format) myTIA->setLayout(FrameLayout::pal); - myTIA->setAdjustScanlines(myOSystem.settings().getInt("tia.adjustscanlines.pal")); } + myTIA->setAdjustScanlines(myOSystem.settings().getFloat("tia.adjustscanlines")); myTIA->setVcenter(vcenter); myEmulationTiming.updateFrameLayout(myTIA->frameLayout()); diff --git a/src/emucore/Settings.cxx b/src/emucore/Settings.cxx index d6a566766..e8f7bbc91 100644 --- a/src/emucore/Settings.cxx +++ b/src/emucore/Settings.cxx @@ -50,8 +50,7 @@ Settings::Settings() // TIA specific options setPermanent("tia.zoom", "3"); setPermanent("tia.inter", "false"); - setPermanent("tia.adjustscanlines.ntsc", "0"); - setPermanent("tia.adjustscanlines.pal", "0"); + setPermanent("tia.adjustscanlines", 0.f); setPermanent("fullscreen", "false"); setPermanent("tia.fs_stretch", "false"); setPermanent("tia.fs_overscan", "0"); @@ -255,10 +254,8 @@ void Settings::validate() f = getFloat("speed"); if (f <= 0) setValue("speed", "1.0"); - i = getInt("tia.adjustscanlines.ntsc"); - if(i < -25 || i > 25) setValue("tia.adjustscanlines.ntsc", "90"); - i = getInt("tia.adjustscanlines.pal"); - if(i < -25 || i > 25) setValue("tia.adjustscanlines.pal", "100"); + i = getFloat("tia.adjustscanlines"); + if(i < -5. || i > 5.) setValue("tia.adjustscanlines", 0.f); s = getString("tia.dbgcolors"); sort(s.begin(), s.end()); @@ -410,8 +407,7 @@ void Settings::usage() const << " for TIA image\n" << " -tia.inter <1|0> Enable interpolated (smooth) scaling for TIA\n" << " image\n" - << " -tia.adjustscanlines.ntsc Adjust the visible number if TIA scanlines on NTSC\n" - << " -tia.adjustscanlines.pal Adjust the visible number if TIA scanlines on PAL\n" + << " -tia.adjustscanlines Adjust the visible number if TIA scanlines [percent]\n" << " -tia.fs_stretch <1|0> Stretch TIA image to fill fullscreen mode\n" << " -tia.fs_overscan <0-10> Add overscan to TIA image in fill fullscreen mode\n" << " -tia.dbgcolors Debug colors to use for each object (see manual\n" diff --git a/src/emucore/tia/TIA.hxx b/src/emucore/tia/TIA.hxx index fc89e30d1..bbd8738e1 100644 --- a/src/emucore/tia/TIA.hxx +++ b/src/emucore/tia/TIA.hxx @@ -264,8 +264,8 @@ class TIA : public Device void setLayout(FrameLayout layout) { myFrameManager->setLayout(layout); } FrameLayout frameLayout() const { return myFrameManager->layout(); } - void setAdjustScanlines(Int32 adjustScanlines) { myFrameManager->setAdjustScanlines(adjustScanlines); } - Int32 adjustScanlines() const { return myFrameManager->adjustScanlines(); } + void setAdjustScanlines(float adjustScanlines) { myFrameManager->setAdjustScanlines(adjustScanlines); } + float adjustScanlines() const { return myFrameManager->adjustScanlines(); } /** Enables/disables color-loss for PAL modes only. diff --git a/src/emucore/tia/frame-manager/AbstractFrameManager.hxx b/src/emucore/tia/frame-manager/AbstractFrameManager.hxx index ef1922a1b..830cfb6fc 100644 --- a/src/emucore/tia/frame-manager/AbstractFrameManager.hxx +++ b/src/emucore/tia/frame-manager/AbstractFrameManager.hxx @@ -181,9 +181,9 @@ class AbstractFrameManager : public Serializable virtual Int32 maxVcenter() const { return 0; } - virtual void setAdjustScanlines(Int32 adjustScanlines) {} + virtual void setAdjustScanlines(float adjustScanlines) {} - virtual Int32 adjustScanlines() const { return 0; } + virtual float adjustScanlines() const { return 0; } /** * The corresponding start line. diff --git a/src/emucore/tia/frame-manager/FrameManager.cxx b/src/emucore/tia/frame-manager/FrameManager.cxx index c61080380..7366f80f3 100644 --- a/src/emucore/tia/frame-manager/FrameManager.cxx +++ b/src/emucore/tia/frame-manager/FrameManager.cxx @@ -18,6 +18,7 @@ // #define TIA_FRAMEMANAGER_DEBUG_LOG #include +#include #include "FrameManager.hxx" @@ -27,8 +28,8 @@ enum Metrics: uInt32 { vsync = 3, frameSizeNTSC = 262, frameSizePAL = 312, - baseHeightNTSC = 240, - baseHeightPAL = 288, + baseHeightNTSC = 228, + baseHeightPAL = 274, maxLinesVsync = 50, initialGarbageFrames = TIAConstants::initialGarbageFrames, ystartNTSC = 16, @@ -120,7 +121,7 @@ void FrameManager::setVcenter(Int32 vcenter) } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void FrameManager::setAdjustScanlines(Int32 adjustScanlines) +void FrameManager::setAdjustScanlines(float adjustScanlines) { myAdjustScanlines = adjustScanlines; recalculateMetrics(); @@ -243,10 +244,12 @@ void FrameManager::recalculateMetrics() { throw runtime_error("frame manager: invalid TV mode"); } - myHeight = BSPF::clamp(baseHeight + myAdjustScanlines * 2, 0, myFrameLines); + myHeight = BSPF::clamp(round(static_cast(baseHeight) * (1.f + myAdjustScanlines / 100.f)), 0, myFrameLines); myYStart = BSPF::clamp(ystartBase + (baseHeight - static_cast(myHeight)) / 2 - myVcenter, 0, myFrameLines); // TODO: why "- 1" here: ??? myMaxVcenter = BSPF::clamp(ystartBase + (baseHeight - static_cast(myHeight)) / 2 - 1, 0, TIAConstants::maxVcenter); + cout << myAdjustScanlines << " " << myHeight << endl << std::flush; + myJitterEmulation.setYStart(myYStart); } diff --git a/src/emucore/tia/frame-manager/FrameManager.hxx b/src/emucore/tia/frame-manager/FrameManager.hxx index f2647bb13..5e1cd1c68 100644 --- a/src/emucore/tia/frame-manager/FrameManager.hxx +++ b/src/emucore/tia/frame-manager/FrameManager.hxx @@ -52,9 +52,9 @@ class FrameManager: public AbstractFrameManager { Int32 maxVcenter() const override { return myMaxVcenter; } - void setAdjustScanlines(Int32 adjustScanlines) override; + void setAdjustScanlines(float adjustScanlines) override; - Int32 adjustScanlines() const override { return myAdjustScanlines; } + float adjustScanlines() const override { return myAdjustScanlines; } uInt32 startLine() const override { return myYStart; } @@ -102,7 +102,7 @@ class FrameManager: public AbstractFrameManager { uInt32 myYStart{0}; Int32 myVcenter{0}; Int32 myMaxVcenter{0}; - Int32 myAdjustScanlines{0}; + float myAdjustScanlines{0.f}; bool myJitterEnabled{false}; diff --git a/src/gui/VideoDialog.cxx b/src/gui/VideoDialog.cxx index 8df937e2d..ac6bb2826 100644 --- a/src/gui/VideoDialog.cxx +++ b/src/gui/VideoDialog.cxx @@ -136,21 +136,12 @@ VideoDialog::VideoDialog(OSystem& osystem, DialogContainer& parent, ypos += lineHeight + VGAP; // Aspect ratio (NTSC mode) - myAdjustScanlinesNTSC = + myAdjustScanlines = new SliderWidget(myTab, font, xpos, ypos-1, swidth, lineHeight, - "NTSC scanlines adjust ", lwidth, 0, fontWidth * 4, "", 0, true); - myAdjustScanlinesNTSC->setMinValue(-25); myAdjustScanlinesNTSC->setMaxValue(25); - myAdjustScanlinesNTSC->setTickmarkIntervals(2); - wid.push_back(myAdjustScanlinesNTSC); - ypos += lineHeight + VGAP; - - // Aspect ratio (PAL mode) - myAdjustScanlinesPAL = - new SliderWidget(myTab, font, xpos, ypos-1, swidth, lineHeight, - "PAL scanlines adjust ", lwidth, 0, fontWidth * 4, "", 0, true); - myAdjustScanlinesPAL->setMinValue(-25); myAdjustScanlinesPAL->setMaxValue(25); - myAdjustScanlinesPAL->setTickmarkIntervals(2); - wid.push_back(myAdjustScanlinesPAL); + "Scanlines adjust ", lwidth, 0, fontWidth * 4, "", 0, true); + myAdjustScanlines->setMinValue(-50); myAdjustScanlines->setMaxValue(50); + myAdjustScanlines->setTickmarkIntervals(5); + wid.push_back(myAdjustScanlines); ypos += lineHeight + VGAP; // Speed @@ -351,8 +342,9 @@ void VideoDialog::loadConfig() myTIAInterpolate->setState(instance().settings().getBool("tia.inter")); // Aspect ratio setting (NTSC and PAL) - myAdjustScanlinesNTSC->setValue(instance().settings().getInt("tia.adjustscanlines.ntsc")); - myAdjustScanlinesPAL->setValue(instance().settings().getInt("tia.adjustscanlines.pal")); + myAdjustScanlines->setValue( + round(instance().settings().getFloat("tia.adjustscanlines") * 10) + ); // Emulation speed int speed = mapSpeed(instance().settings().getFloat("speed")); @@ -424,8 +416,9 @@ void VideoDialog::saveConfig() instance().settings().setValue("tia.inter", myTIAInterpolate->getState()); // Aspect ratio setting (NTSC and PAL) - instance().settings().setValue("tia.adjustscanlines.ntsc", myAdjustScanlinesNTSC->getValueLabel()); - instance().settings().setValue("tia.adjustscanlines.pal", myAdjustScanlinesPAL->getValueLabel()); + instance().settings().setValue("tia.adjustscanlines", + static_cast(myAdjustScanlines->getValue()) / 10.f + ); // Speed int speedup = mySpeed->getValue(); @@ -505,8 +498,7 @@ void VideoDialog::setDefaults() myTIAZoom->setValue(300); myTIAPalette->setSelected("standard", ""); myTIAInterpolate->setState(false); - myAdjustScanlinesNTSC->setValue(0); - myAdjustScanlinesPAL->setValue(0); + myAdjustScanlines->setValue(0); mySpeed->setValue(0); myFullscreen->setState(false); diff --git a/src/gui/VideoDialog.hxx b/src/gui/VideoDialog.hxx index 4d3ce582a..0af3abc5f 100644 --- a/src/gui/VideoDialog.hxx +++ b/src/gui/VideoDialog.hxx @@ -58,8 +58,7 @@ class VideoDialog : public Dialog SliderWidget* myTIAZoom{nullptr}; PopUpWidget* myTIAPalette{nullptr}; CheckboxWidget* myTIAInterpolate{nullptr}; - SliderWidget* myAdjustScanlinesNTSC{nullptr}; - SliderWidget* myAdjustScanlinesPAL{nullptr}; + SliderWidget* myAdjustScanlines{nullptr}; SliderWidget* mySpeed{nullptr}; CheckboxWidget* myFullscreen{nullptr}; diff --git a/src/libretro/StellaLIBRETRO.cxx b/src/libretro/StellaLIBRETRO.cxx index d599619f3..b518828f3 100644 --- a/src/libretro/StellaLIBRETRO.cxx +++ b/src/libretro/StellaLIBRETRO.cxx @@ -90,8 +90,7 @@ bool StellaLIBRETRO::create(bool logging) settings.setValue("tia.zoom", 1); settings.setValue("tia.inter", false); - settings.setValue("tia.adjustscanlines.ntsc", 0); - settings.setValue("tia.adjustscanlines.ntsc", 0); + settings.setValue("tia.", 0.f); //fastscbios // Fast loading of Supercharger BIOS