Merge pull request #224 from mjbudd77/master
Bug fix for issue #217. The Qt hex editor memory reads are now synchr…
This commit is contained in:
commit
9471ff5e7b
|
@ -1427,9 +1427,9 @@ void ConsoleDebugger::reloadSymbolsCB(void)
|
||||||
{
|
{
|
||||||
fceuWrapperLock();
|
fceuWrapperLock();
|
||||||
debugSymbolTable.loadGameSymbols();
|
debugSymbolTable.loadGameSymbols();
|
||||||
fceuWrapperUnLock();
|
|
||||||
|
|
||||||
asmView->updateAssemblyView();
|
asmView->updateAssemblyView();
|
||||||
|
fceuWrapperUnLock();
|
||||||
}
|
}
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
void ConsoleDebugger::debugRunCB(void)
|
void ConsoleDebugger::debugRunCB(void)
|
||||||
|
@ -2812,7 +2812,9 @@ void QAsmView::setDisplayROMoffsets( bool value )
|
||||||
{
|
{
|
||||||
displayROMoffsets = value;
|
displayROMoffsets = value;
|
||||||
|
|
||||||
|
fceuWrapperLock();
|
||||||
updateAssemblyView();
|
updateAssemblyView();
|
||||||
|
fceuWrapperUnLock();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
|
@ -2822,7 +2824,9 @@ void QAsmView::setSymbolDebugEnable( bool value )
|
||||||
{
|
{
|
||||||
symbolicDebugEnable = value;
|
symbolicDebugEnable = value;
|
||||||
|
|
||||||
|
fceuWrapperLock();
|
||||||
updateAssemblyView();
|
updateAssemblyView();
|
||||||
|
fceuWrapperUnLock();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
|
@ -2832,7 +2836,9 @@ void QAsmView::setRegisterNameEnable( bool value )
|
||||||
{
|
{
|
||||||
registerNameEnable = value;
|
registerNameEnable = value;
|
||||||
|
|
||||||
|
fceuWrapperLock();
|
||||||
updateAssemblyView();
|
updateAssemblyView();
|
||||||
|
fceuWrapperUnLock();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
|
|
|
@ -41,6 +41,7 @@
|
||||||
#include "Qt/ConsoleUtilities.h"
|
#include "Qt/ConsoleUtilities.h"
|
||||||
#include "Qt/ConsoleWindow.h"
|
#include "Qt/ConsoleWindow.h"
|
||||||
|
|
||||||
|
static bool memNeedsCheck = false;
|
||||||
static HexBookMarkManager_t hbm;
|
static HexBookMarkManager_t hbm;
|
||||||
static std::list <HexEditorDialog_t*> winList;
|
static std::list <HexEditorDialog_t*> winList;
|
||||||
static const char *memViewNames[] = { "RAM", "PPU", "OAM", "ROM", NULL };
|
static const char *memViewNames[] = { "RAM", "PPU", "OAM", "ROM", NULL };
|
||||||
|
@ -724,7 +725,12 @@ HexEditorDialog_t::HexEditorDialog_t(QWidget *parent)
|
||||||
|
|
||||||
periodicTimer->start( 100 ); // 10hz
|
periodicTimer->start( 100 ); // 10hz
|
||||||
|
|
||||||
|
// Lock the mutex before adding a new window to the list,
|
||||||
|
// we want to be sure that the emulator is not iterating the list
|
||||||
|
// when we change it.
|
||||||
|
fceuWrapperLock();
|
||||||
winList.push_back(this);
|
winList.push_back(this);
|
||||||
|
fceuWrapperUnLock();
|
||||||
|
|
||||||
populateBookmarkMenu();
|
populateBookmarkMenu();
|
||||||
|
|
||||||
|
@ -737,6 +743,11 @@ HexEditorDialog_t::~HexEditorDialog_t(void)
|
||||||
printf("Hex Editor Deleted\n");
|
printf("Hex Editor Deleted\n");
|
||||||
periodicTimer->stop();
|
periodicTimer->stop();
|
||||||
|
|
||||||
|
// Lock the emulation thread mutex to ensure
|
||||||
|
// that the emulator is not attempting to update memory values
|
||||||
|
// for window while we are destroying it or editing the window list.
|
||||||
|
fceuWrapperLock();
|
||||||
|
|
||||||
for (it = winList.begin(); it != winList.end(); it++)
|
for (it = winList.begin(); it != winList.end(); it++)
|
||||||
{
|
{
|
||||||
if ( (*it) == this )
|
if ( (*it) == this )
|
||||||
|
@ -746,6 +757,7 @@ HexEditorDialog_t::~HexEditorDialog_t(void)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
fceuWrapperUnLock();
|
||||||
}
|
}
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
void HexEditorDialog_t::setWindowTitle(void)
|
void HexEditorDialog_t::setWindowTitle(void)
|
||||||
|
@ -1103,7 +1115,18 @@ void HexEditorDialog_t::updatePeriodic(void)
|
||||||
{
|
{
|
||||||
//printf("Update Periodic\n");
|
//printf("Update Periodic\n");
|
||||||
|
|
||||||
editor->checkMemActivity();
|
if ( fceuWrapperTryLock(0) )
|
||||||
|
{
|
||||||
|
memNeedsCheck = false;
|
||||||
|
|
||||||
|
editor->checkMemActivity();
|
||||||
|
|
||||||
|
fceuWrapperUnLock();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
memNeedsCheck = true;
|
||||||
|
}
|
||||||
|
|
||||||
editor->memModeUpdate();
|
editor->memModeUpdate();
|
||||||
|
|
||||||
|
@ -2009,6 +2032,9 @@ void QHexEdit::jumpToROM(void)
|
||||||
setAddr( jumpToRomValue );
|
setAddr( jumpToRomValue );
|
||||||
}
|
}
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
|
// Calling of checkMemActivity must always be synchronized with the emulation
|
||||||
|
// thread as calling GetMem while the emulation is executing can mess up certain
|
||||||
|
// registers (especially controller registers $4016 and $4017)
|
||||||
int QHexEdit::checkMemActivity(void)
|
int QHexEdit::checkMemActivity(void)
|
||||||
{
|
{
|
||||||
int c;
|
int c;
|
||||||
|
@ -2442,3 +2468,20 @@ int hexEditorOpenFromDebugger( int mode, int addr )
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
|
// This function must be called from within the emulation thread
|
||||||
|
void hexEditorUpdateMemoryValues(void)
|
||||||
|
{
|
||||||
|
std::list <HexEditorDialog_t*>::iterator it;
|
||||||
|
|
||||||
|
if ( !memNeedsCheck )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (it = winList.begin(); it != winList.end(); it++)
|
||||||
|
{
|
||||||
|
(*it)->editor->checkMemActivity();
|
||||||
|
}
|
||||||
|
memNeedsCheck = false;
|
||||||
|
}
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
|
|
@ -248,6 +248,7 @@ class HexEditorDialog_t : public QDialog
|
||||||
};
|
};
|
||||||
|
|
||||||
int hexEditorNumWindows(void);
|
int hexEditorNumWindows(void);
|
||||||
|
void hexEditorUpdateMemoryValues(void);
|
||||||
void hexEditorLoadBookmarks(void);
|
void hexEditorLoadBookmarks(void);
|
||||||
void hexEditorSaveBookmarks(void);
|
void hexEditorSaveBookmarks(void);
|
||||||
int hexEditorOpenFromDebugger( int mode, int addr );
|
int hexEditorOpenFromDebugger( int mode, int addr );
|
||||||
|
|
|
@ -1043,6 +1043,8 @@ int fceuWrapperUpdate( void )
|
||||||
{
|
{
|
||||||
DoFun(frameskip, periodic_saves);
|
DoFun(frameskip, periodic_saves);
|
||||||
|
|
||||||
|
hexEditorUpdateMemoryValues();
|
||||||
|
|
||||||
fceuWrapperUnLock();
|
fceuWrapperUnLock();
|
||||||
|
|
||||||
emulatorHasMutux = 0;
|
emulatorHasMutux = 0;
|
||||||
|
|
Loading…
Reference in New Issue