diff --git a/src/drivers/Qt/RamSearch.cpp b/src/drivers/Qt/RamSearch.cpp index 4caa9d49..aa1a9720 100644 --- a/src/drivers/Qt/RamSearch.cpp +++ b/src/drivers/Qt/RamSearch.cpp @@ -22,6 +22,7 @@ #include "../../fceu.h" #include "../../cheat.h" #include "../../debug.h" +#include "../../movie.h" #include "Qt/main.h" #include "Qt/dface.h" @@ -74,7 +75,9 @@ struct memoryLocation_t }; static struct memoryLocation_t memLoc[0x10000]; -static std::list actvSrchList; +static std::list actvSrchList; +static std::list deactvSrchList; +static std::vector deactvFrameStack; static int dpySize = 'b'; static int dpyType = 's'; @@ -148,7 +151,7 @@ RamSearchDialog_t::RamSearchDialog_t(QWidget *parent) undoButton = new QPushButton( tr("Undo") ); vbox->addWidget( undoButton ); //connect( undoButton, SIGNAL(clicked(void)), this, SLOT(removeWatchClicked(void))); - //undoButton->setEnabled(false); + undoButton->setEnabled(false); searchROMCbox = new QCheckBox( tr("Search ROM") ); vbox->addWidget( searchROMCbox ); @@ -297,22 +300,26 @@ RamSearchDialog_t::RamSearchDialog_t(QWidget *parent) setLayout( mainLayout ); + cycleCounter = 0; + resetSearch(); updateTimer = new QTimer( this ); connect( updateTimer, &QTimer::timeout, this, &RamSearchDialog_t::periodicUpdate ); - updateTimer->start( 100 ); // 10hz + updateTimer->start( 8 ); // ~120hz } //---------------------------------------------------------------------------- RamSearchDialog_t::~RamSearchDialog_t(void) { updateTimer->stop(); - printf("Destroy RAM Watch Config Window\n"); + printf("Destroy RAM Search Window\n"); ramSearchWin = NULL; actvSrchList.clear(); + deactvSrchList.clear(); + deactvFrameStack.clear(); for (unsigned int addr=0; addr<0x08000; addr++) { @@ -322,7 +329,7 @@ RamSearchDialog_t::~RamSearchDialog_t(void) //---------------------------------------------------------------------------- void RamSearchDialog_t::closeEvent(QCloseEvent *event) { - printf("RAM Watch Close Window Event\n"); + printf("RAM Search Close Window Event\n"); done(0); deleteLater(); event->accept(); @@ -337,9 +344,18 @@ void RamSearchDialog_t::closeWindow(void) //---------------------------------------------------------------------------- void RamSearchDialog_t::periodicUpdate(void) { - updateRamValues(); + if ( currFrameCounter != frameCounterLastPass ) + { + updateRamValues(); + + frameCounterLastPass = currFrameCounter; + } - ramView->update(); + if ( (cycleCounter % 10) == 0) + { + ramView->update(); + } + cycleCounter++; } //---------------------------------------------------- void RamSearchDialog_t::hbarChanged(int val) @@ -364,6 +380,15 @@ void RamSearchDialog_t::misalignedChanged(int state) calcRamList(); } //---------------------------------------------------------------------------- +static bool memoryAddrCompare( memoryLocation_t *loc1, memoryLocation_t *loc2 ) +{ + return loc1->addr < loc2->addr; +} +static void sortActvMemList(void) +{ + actvSrchList.sort( memoryAddrCompare ); +} +//---------------------------------------------------------------------------- static unsigned int ReadValueAtHardwareAddress(int address, unsigned int size) { unsigned int value = 0; @@ -389,6 +414,8 @@ void RamSearchDialog_t::runSearch(void) void RamSearchDialog_t::resetSearch(void) { actvSrchList.clear(); + deactvSrchList.clear(); + deactvFrameStack.clear(); for (unsigned int addr=0; addr<0x10000; addr++) { @@ -601,6 +628,8 @@ void QRamSearchView::calcFontData(void) pxLineWidth = pxColWidth[0] + pxColWidth[1] + pxColWidth[2] + pxColWidth[3]; viewLines = (viewHeight / pxLineSpacing) + 1; + + setMinimumWidth( pxLineWidth ); } //---------------------------------------------------------------------------- void QRamSearchView::setScrollBars( QScrollBar *hbar, QScrollBar *vbar ) diff --git a/src/drivers/Qt/RamSearch.h b/src/drivers/Qt/RamSearch.h index 0e986c3c..014b1f9e 100644 --- a/src/drivers/Qt/RamSearch.h +++ b/src/drivers/Qt/RamSearch.h @@ -114,6 +114,9 @@ class RamSearchDialog_t : public QDialog QCheckBox *autoSearchCbox; int fontCharWidth; + int frameCounterLastPass; + unsigned int cycleCounter; + private: void updateRamValues(void); diff --git a/src/drivers/Qt/fceuWrapper.cpp b/src/drivers/Qt/fceuWrapper.cpp index 0f204e16..ddc1b0e2 100644 --- a/src/drivers/Qt/fceuWrapper.cpp +++ b/src/drivers/Qt/fceuWrapper.cpp @@ -64,6 +64,7 @@ static int periodic_saves = 0; static int mutexLocks = 0; static int mutexPending = 0; static bool emulatorHasMutux = 0; +static unsigned int emulatorCycleCount = 0; extern double g_fpsScale; @@ -945,6 +946,8 @@ static void DoFun(int frameskip, int periodic_saves) // opause=FCEUI_EmulationPaused(); // SilenceSound(opause); //} + + emulatorCycleCount++; } void fceuWrapperLock(void) @@ -1019,7 +1022,7 @@ int fceuWrapperUpdate( void ) } emulatorHasMutux = 1; - if ( GameInfo && !FCEUI_EmulationPaused() ) + if ( GameInfo /*&& !FCEUI_EmulationPaused()*/ ) { DoFun(frameskip, periodic_saves); diff --git a/src/drivers/Qt/input.cpp b/src/drivers/Qt/input.cpp index 1510857b..30f4c715 100644 --- a/src/drivers/Qt/input.cpp +++ b/src/drivers/Qt/input.cpp @@ -139,6 +139,7 @@ static uint8 keyonce[SDL_NUM_SCANCODES]; int getKeyState( int k ) { + k = SDL_GetScancodeFromKey(k); if ( (k >= 0) && (k < SDL_NUM_SCANCODES) ) { return g_keyState[k]; @@ -661,12 +662,13 @@ static void KeyboardCommands (void) } static bool frameAdvancing = false; - if ( _keyonly(Hotkeys[HK_FRAME_ADVANCE])) + if ( getKeyState(Hotkeys[HK_FRAME_ADVANCE])) { if (frameAdvancing == false) { FCEUI_FrameAdvance (); frameAdvancing = true; + //printf("Frame Advance Start\n"); } } else @@ -675,6 +677,7 @@ static void KeyboardCommands (void) { FCEUI_FrameAdvanceEnd (); frameAdvancing = false; + //printf("Frame Advance End\n"); } }