X-Git-Url: http://git.hcoop.net/clinton/Virtual-Jaguar-Rx.git/blobdiff_plain/425f1b79dc09b692d390a7b533301d4d796a38c9..e1f83a1a126789a59e5436aa58a6df2becc53289:/src/gui/mainwin.cpp diff --git a/src/gui/mainwin.cpp b/src/gui/mainwin.cpp index ff0e195..ede2dc8 100644 --- a/src/gui/mainwin.cpp +++ b/src/gui/mainwin.cpp @@ -20,6 +20,10 @@ // JPM 11/04/2017 Added the local window // JPM 08/31/2018 Added the call stack window // JPM Sept./2018 Added the new Models and BIOS handler, a screenshot feature and source code files browsing +// JPM Oct./2018 Added search paths in the settings, breakpoints feature, cartridge view menu +// JPM 11/18/2018 Fix crash with non-debugger mode +// JPM April/2019 Added ELF sections check, added a save memory dump +// JPM Aug./2019 Update texts descriptions, set cartridge view menu for debugger mode only, added a HW registers browser and source level tracing // // FIXED: @@ -32,10 +36,10 @@ // // STILL TO BE DONE: // +// - The source file listing do not need to be refresh more than one time // - Fix bug in switching between PAL & NTSC in fullscreen mode. // - Remove SDL dependencies (sound, mainly) from Jaguar core lib -// - Fix inconsistency with trailing slashes in paths (eeproms needs one, -// software doesn't) +// - Fix inconsistency with trailing slashes in paths (eeproms needs one, software doesn't) // // SFDX CODE: S1E9T8H5M23YS @@ -67,6 +71,7 @@ #include "debug/stackbrowser.h" #include "debug/opbrowser.h" #include "debug/riscdasmbrowser.h" +#include "debug/hwregsbrowser.h" #include "dac.h" #include "jaguar.h" @@ -83,19 +88,24 @@ #include "joystick.h" #include "m68000/m68kinterface.h" +#include "debugger/DBGManager.h" //#include "debugger/VideoWin.h" //#include "debugger/DasmWin.h" +#include "debugger/SourcesWin.h" #include "debugger/m68KDasmWin.h" #include "debugger/GPUDasmWin.h" #include "debugger/DSPDasmWin.h" #include "debugger/memory1browser.h" -//#include "debugger/brkWin.h" +#include "debugger/BreakpointsWin.h" +#include "debugger/NewFnctBreakpointWin.h" #include "debugger/FilesrcListWin.h" #include "debugger/exceptionvectortablebrowser.h" #include "debugger/allwatchbrowser.h" #include "debugger/localbrowser.h" #include "debugger/heapallocatorbrowser.h" #include "debugger/callstackbrowser.h" +#include "debugger/CartFilesListWin.h" +#include "debugger/SaveDumpAsWin.h" // According to SebRmv, this header isn't seen on Arch Linux either... :-/ @@ -173,16 +183,22 @@ MainWin::MainWin(bool autoRun): running(true), powerButtonOn(false), setWindowTitle(title); + // Windows common features aboutWin = new AboutWindow(this); helpWin = new HelpWindow(this); filePickWin = new FilePickerWindow(this); + emuStatusWin = new EmuStatusWindow(this); + + // Windows alpine mode features memBrowseWin = new MemoryBrowserWindow(this); stackBrowseWin = new StackBrowserWindow(this); - emuStatusWin = new EmuStatusWindow(this); cpuBrowseWin = new CPUBrowserWindow(this); opBrowseWin = new OPBrowserWindow(this); m68kDasmBrowseWin = new M68KDasmBrowserWindow(this); riscDasmBrowseWin = new RISCDasmBrowserWindow(this); + hwRegsBrowseWin = new HWRegsBrowserWindow(this); + + // Windows debugger mode features if (vjs.softTypeDebugger) { //VideoOutputWin = new VideoOutputWindow(this); @@ -192,9 +208,12 @@ MainWin::MainWin(bool autoRun): running(true), powerButtonOn(false), allWatchBrowseWin = new AllWatchBrowserWindow(this); LocalBrowseWin = new LocalBrowserWindow(this); heapallocatorBrowseWin = new HeapAllocatorBrowserWindow(this); - //brkWin = new BrkWindow(this); + BreakpointsWin = new BreakpointsWindow(this); + NewFunctionBreakpointWin = new NewFnctBreakpointWindow(this); + SaveDumpAsWin = new SaveDumpAsWindow(this); exceptionvectortableBrowseWin = new ExceptionVectorTableBrowserWindow(this); CallStackBrowseWin = new CallStackBrowserWindow(this); + CartFilesListWin = new CartFilesListWindow(this); mem1BrowseWin = (Memory1BrowserWindow **)calloc(vjs.nbrmemory1browserwindow, sizeof(Memory1BrowserWindow)); #ifdef _MSC_VER @@ -226,9 +245,11 @@ MainWin::MainWin(bool autoRun): running(true), powerButtonOn(false), #endif // Setup disasm tabs dasmtabWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); - dasmtabWidget->addTab(m68kDasmWin = new m68KDasmWindow(this), tr("M68000")); + dasmtabWidget->addTab(SourcesWin = new SourcesWindow(this), tr("Sources")); + dasmtabWidget->setCurrentIndex(dasmtabWidget->addTab(m68kDasmWin = new m68KDasmWindow(this), tr("M68000"))); dasmtabWidget->addTab(GPUDasmWin = new GPUDasmWindow(this), tr("GPU")); dasmtabWidget->addTab(DSPDasmWin = new DSPDasmWindow(this), tr("DSP")); + connect(dasmtabWidget, SIGNAL(currentChanged(const int)), this, SLOT(SelectdasmtabWidget(const int))); #if 1 setCentralWidget(dasmtabWidget); #endif @@ -389,7 +410,7 @@ MainWin::MainWin(bool autoRun): running(true), powerButtonOn(false), traceStepOverAct->setDisabled(true); connect(traceStepOverAct, SIGNAL(triggered()), this, SLOT(DebuggerTraceStepOver())); - // Trace into trace + // Trace into tracing traceStepIntoAct = new QAction(QIcon(":/res/debug-stepinto.png"), tr("&Step Into"), this); traceStepIntoAct->setShortcut(QKeySequence(tr(vjs.KBContent[KBSTEPINTO].KBSettingValue))); traceStepIntoAct->setShortcutContext(Qt::ApplicationShortcut); @@ -397,9 +418,24 @@ MainWin::MainWin(bool autoRun): running(true), powerButtonOn(false), traceStepIntoAct->setDisabled(true); connect(traceStepIntoAct, SIGNAL(triggered()), this, SLOT(DebuggerTraceStepInto())); - //newBreakpointFunctionAct = new QAction(QIcon(""), tr("&Function Breakpoint"), this); - //newBreakpointFunctionAct->setShortcut(QKeySequence(tr("Ctrl+B"))); - //connect(newBreakpointFunctionAct, SIGNAL(triggered()), this, SLOT(NewBreakpointFunction())); + // Function breakpoint + newFunctionBreakpointAct = new QAction(QIcon(""), tr("&Function Breakpoint"), this); + newFunctionBreakpointAct->setShortcut(QKeySequence(tr(vjs.KBContent[KBFUNCTIONBREAKPOINT].KBSettingValue))); + connect(newFunctionBreakpointAct, SIGNAL(triggered()), this, SLOT(ShowNewFunctionBreakpointWin())); + BreakpointsAct = new QAction(QIcon(":/res/debug-breakpoints.png"), tr("&Breakpoints"), this); + BreakpointsAct->setShortcut(QKeySequence(tr(vjs.KBContent[KBBREAKPOINTS].KBSettingValue))); + connect(BreakpointsAct, SIGNAL(triggered()), this, SLOT(ShowBreakpointsWin())); + deleteAllBreakpointsAct = new QAction(QIcon(":/res/debug-deleteallbreakpoints.png"), tr("&Delete All Breakpoints"), this); + deleteAllBreakpointsAct->setShortcut(QKeySequence(tr(vjs.KBContent[KBDELETEALLBREAKPOINTS].KBSettingValue))); + connect(deleteAllBreakpointsAct, SIGNAL(triggered()), this, SLOT(DeleteAllBreakpoints())); + disableAllBreakpointsAct = new QAction(QIcon(":/res/debug-disableallbreakpoints.png"), tr("&Disable All Breakpoints"), this); + connect(disableAllBreakpointsAct, SIGNAL(triggered()), this, SLOT(DisableAllBreakpoints())); + + // Save dump + saveDumpAsAct = new QAction(tr("&Save Dump As..."), this); + saveDumpAsAct->setCheckable(false); + saveDumpAsAct->setDisabled(false); + connect(saveDumpAsAct, SIGNAL(triggered()), this, SLOT(ShowSaveDumpAsWin())); //VideoOutputAct = new QAction(tr("Output Video"), this); //VideoOutputAct->setStatusTip(tr("Shows the output video window")); @@ -434,6 +470,11 @@ MainWin::MainWin(bool autoRun): running(true), powerButtonOn(false), CallStackBrowseAct->setStatusTip(tr("Shows Call Stack browser window")); connect(CallStackBrowseAct, SIGNAL(triggered()), this, SLOT(ShowCallStackBrowserWin())); + // Cart files list + CartFilesListAct = new QAction(QIcon(""), tr("Directory and files"), this); + CartFilesListAct->setStatusTip(tr("List of the files in the cartridge's directory structure")); + connect(CartFilesListAct, SIGNAL(triggered()), this, SLOT(ShowCartFilesListWin())); + // Memory windows mem1BrowseAct = (QAction **)calloc(vjs.nbrmemory1browserwindow, sizeof(QAction)); QSignalMapper *signalMapper = new QSignalMapper(this); @@ -479,6 +520,11 @@ MainWin::MainWin(bool autoRun): running(true), powerButtonOn(false), m68kDasmBrowseAct->setStatusTip(tr("Shows the 68K disassembly browser window")); connect(m68kDasmBrowseAct, SIGNAL(triggered()), this, SLOT(ShowM68KDasmBrowserWin())); + // HW registers browser window + hwRegsBrowseAct = new QAction(QIcon(":/res/tool-hw-regs.png"), tr("HW Registers Browser"), this); + hwRegsBrowseAct->setStatusTip(tr("Shows the HW registers browser window")); + connect(hwRegsBrowseAct, SIGNAL(triggered()), this, SLOT(ShowHWRegsBrowserWin())); + // Risc (DSP / GPU) disassembly browser window riscDasmBrowseAct = new QAction(QIcon(":/res/tool-risc-dis.png"), tr("RISC Listing Browser"), this); riscDasmBrowseAct->setStatusTip(tr("Shows the RISC disassembly browser window")); @@ -504,12 +550,29 @@ MainWin::MainWin(bool autoRun): running(true), powerButtonOn(false), fileMenu->addSeparator(); fileMenu->addAction(quitAppAct); + // Alpine and debugger menus if (vjs.hardwareTypeAlpine || vjs.softTypeDebugger) { + // Create debug menu debugMenu = menuBar()->addMenu(tr("&Debug")); + + // Create debugger menu if (vjs.softTypeDebugger) { + // Create view menu + viewMenu = menuBar()->addMenu(tr("&View")); + + // Cart menu + viewCartMenu = viewMenu->addMenu(tr("&Cartridge")); + viewCartMenu->addAction(CartFilesListAct); +#if 0 + viewCartMenu->addSeparator(); + viewCartMenu->addAction(CartStreamsAct); +#endif + + // Windows menu debugWindowsMenu = debugMenu->addMenu(tr("&Windows")); + debugWindowsMenu->addAction(BreakpointsAct); debugWindowExceptionMenu = debugWindowsMenu->addMenu(tr("&Exception")); debugWindowExceptionMenu->addAction(exceptionVectorTableBrowseAct); debugWindowsMenu->addSeparator(); @@ -539,6 +602,7 @@ MainWin::MainWin(bool autoRun): running(true), powerButtonOn(false), debugWindowsBrowsesMenu->addAction(opBrowseAct); debugWindowsBrowsesMenu->addAction(m68kDasmBrowseAct); debugWindowsBrowsesMenu->addAction(riscDasmBrowseAct); + debugWindowsBrowsesMenu->addAction(hwRegsBrowseAct); debugMenu->addSeparator(); debugMenu->addAction(pauseAct); debugMenu->addAction(frameAdvanceAct); @@ -546,22 +610,28 @@ MainWin::MainWin(bool autoRun): running(true), powerButtonOn(false), debugMenu->addSeparator(); debugMenu->addAction(traceStepIntoAct); debugMenu->addAction(traceStepOverAct); -#if 0 debugMenu->addSeparator(); debugNewBreakpointMenu = debugMenu->addMenu(tr("&New Breakpoint")); - debugNewBreakpointMenu->addAction(newBreakpointFunctionAct); + debugNewBreakpointMenu->addAction(newFunctionBreakpointAct); + debugMenu->addAction(deleteAllBreakpointsAct); + debugMenu->addAction(disableAllBreakpointsAct); + debugMenu->addSeparator(); + debugMenu->addAction(saveDumpAsAct); +#if 0 + debugMenu->addSeparator(); + debugMenu->addAction(DasmAct); #endif - //debugMenu->addSeparator(); - //debugMenu->addAction(DasmAct); } else { + // Create alpine menu debugMenu->addAction(memBrowseAct); debugMenu->addAction(stackBrowseAct); debugMenu->addAction(cpuBrowseAct); debugMenu->addAction(opBrowseAct); debugMenu->addAction(m68kDasmBrowseAct); debugMenu->addAction(riscDasmBrowseAct); + debugMenu->addAction(hwRegsBrowseAct); } } @@ -605,6 +675,8 @@ MainWin::MainWin(bool autoRun): running(true), powerButtonOn(false), debuggerbar->addSeparator(); debuggerbar->addAction(traceStepIntoAct); debuggerbar->addAction(traceStepOverAct); + debuggerbar->addSeparator(); + debuggerbar->addAction(BreakpointsAct); } if (vjs.hardwareTypeAlpine) @@ -616,6 +688,7 @@ MainWin::MainWin(bool autoRun): running(true), powerButtonOn(false), debugbar->addAction(opBrowseAct); debugbar->addAction(m68kDasmBrowseAct); debugbar->addAction(riscDasmBrowseAct); + debugbar->addAction(hwRegsBrowseAct); } // Add actions to the main window, as hiding widgets with them @@ -788,6 +861,17 @@ void MainWin::SyncUI(void) } +// +void MainWin::SelectdasmtabWidget(const int Index) +{ + // check sources tab + if (Index == 0) + { + SourcesWin->RefreshContents(); + } +} + + void MainWin::closeEvent(QCloseEvent * event) { JaguarDone(); @@ -1029,7 +1113,7 @@ void MainWin::Configure(void) // Just in case we crash before a clean exit... WriteSettings(); - DebuggerRefreshWindows(); + RefreshWindows(); } @@ -1081,16 +1165,19 @@ static uint32_t ntscTickCount; static uint32_t refresh = 0; // Do autorefresh on debug windows // Have to be careful, too much causes the emulator to slow way down! + if (refresh == vjs.refresh) + { if (vjs.hardwareTypeAlpine || vjs.softTypeDebugger) { - if (refresh == vjs.refresh) - { AlpineRefreshWindows(); //memBrowseWin->RefreshContents(); //cpuBrowseWin->RefreshContents(); + } + CommonRefreshWindows(); refresh = 0; } else + { refresh++; } } @@ -1194,7 +1281,10 @@ void MainWin::TogglePowerState(void) WriteLog("GUI: Resetting Jaguar...\n"); JaguarReset(); + DebuggerReset(); + CommonReset(); DebuggerResetWindows(); + CommonResetWindows(); DACPauseAudioThread(false); } } @@ -1240,7 +1330,7 @@ void MainWin::ToggleRunState(void) cpuBrowseWin->HoldBPM(); cpuBrowseWin->HandleBPMContinue(); - DebuggerRefreshWindows(); + RefreshWindows(); } } else @@ -1253,6 +1343,7 @@ void MainWin::ToggleRunState(void) traceStepIntoAct->setDisabled(true); traceStepOverAct->setDisabled(true); restartAct->setDisabled(true); + BreakpointsWin->RefreshContents(); } cpuBrowseWin->UnholdBPM(); @@ -1403,6 +1494,7 @@ void MainWin::LoadSoftware(QString file) { m68k_set_reg(M68K_REG_A6, 0); m68kDasmWin->SetAddress(jaguarRunAddress); + SourcesWin->Init(); //pauseAct->setDisabled(false); //pauseAct->setChecked(true); ToggleRunState(); @@ -1417,6 +1509,7 @@ void MainWin::LoadSoftware(QString file) } } + // Display the Atari Jaguar software which is running if ((!vjs.hardwareTypeAlpine || !vjs.softTypeDebugger) && !loadAndGo && jaguarRunAddress) { QString newTitle = QString("Virtual Jaguar " VJ_RELEASE_VERSION " Rx - Now playing: %1").arg(filePickWin->GetSelectedPrettyName()); @@ -1437,20 +1530,72 @@ void MainWin::ToggleCDUsage(void) } -// -void MainWin::NewBreakpointFunction(void) +// Open, or display, the breakpoints list window +void MainWin::ShowBreakpointsWin(void) { - //brkWin->show(); - //brkWin->RefreshContents(); + BreakpointsWin->show(); + BreakpointsWin->RefreshContents(); +} + + +// Delete all breakpoints +void MainWin::DeleteAllBreakpoints(void) +{ + cpuBrowseWin->ResetBPM(); + m68k_brk_reset(); + ShowBreakpointsWin(); +} + + +// Disable all breakpoints +void MainWin::DisableAllBreakpoints(void) +{ + cpuBrowseWin->DisableBPM(); + m68k_brk_disable(); + ShowBreakpointsWin(); +} + + +// Open, or display, the new breakpoint function window +void MainWin::ShowNewFunctionBreakpointWin(void) +{ + NewFunctionBreakpointWin->show(); + ShowBreakpointsWin(); +} + + +// Display list of files found in cartridge +void MainWin::ShowCartFilesListWin(void) +{ + CartFilesListWin->show(); + CartFilesListWin->RefreshContents(); +} + + +// Display the save dump pickup file +void MainWin::ShowSaveDumpAsWin(void) +{ + SaveDumpAsWin->show(); } // Step Into trace void MainWin::DebuggerTraceStepInto(void) { - JaguarStepInto(); + if (SourcesWin->isVisible() && SourcesWin->GetTraceStatus()) + { + while (!SourcesWin->CheckChangeLine()) + { + JaguarStepInto(); + } + } + else + { + JaguarStepInto(); + } + videoWidget->updateGL(); - DebuggerRefreshWindows(); + RefreshWindows(); #ifdef _MSC_VER #pragma message("Warning: !!! Need to verify the Step Into function !!!") #else @@ -1459,7 +1604,7 @@ void MainWin::DebuggerTraceStepInto(void) } -// Restart +// Restart the Jaguar executable void MainWin::DebuggerRestart(void) { #if 1 @@ -1468,10 +1613,14 @@ void MainWin::DebuggerRestart(void) m68k_set_reg(M68K_REG_PC, jaguarRunAddress); m68k_set_reg(M68K_REG_SP, vjs.DRAM_size); #endif + dasmtabWidget->setCurrentIndex(1); // set focus on the disasm M68K tab m68k_set_reg(M68K_REG_A6, 0); - + m68k_brk_hitcounts_reset(); + bpmHitCounts = 0; DebuggerResetWindows(); - DebuggerRefreshWindows(); + CommonResetWindows(); + SourcesWin->Init(); + RefreshWindows(); #ifdef _MSC_VER #pragma message("Warning: !!! Need to verify the Restart function !!!") #else @@ -1483,9 +1632,17 @@ void MainWin::DebuggerRestart(void) // Step Over trace void MainWin::DebuggerTraceStepOver(void) { - JaguarStepOver(0); + if (SourcesWin->isVisible() && SourcesWin->GetTraceStatus()) + { + + } + else + { + JaguarStepOver(0); + } + videoWidget->updateGL(); - DebuggerRefreshWindows(); + RefreshWindows(); #ifdef _MSC_VER #pragma message("Warning: !!! Need to verify the Step Over function !!!") #else @@ -1653,6 +1810,7 @@ void MainWin::ShowCPUBrowserWin(void) } +// Show the OP browser window void MainWin::ShowOPBrowserWin(void) { opBrowseWin->show(); @@ -1660,6 +1818,15 @@ void MainWin::ShowOPBrowserWin(void) } +// Show the HW registers browser window +void MainWin::ShowHWRegsBrowserWin(void) +{ + hwRegsBrowseWin->show(); + hwRegsBrowseWin->RefreshContents(); +} + + +// Show the M68K browser window void MainWin::ShowM68KDasmBrowserWin(void) { m68kDasmBrowseWin->show(); @@ -1763,10 +1930,12 @@ void MainWin::ReadSettings(void) // Read settings from the Debugger mode settings.beginGroup("debugger"); strcpy(vjs.debuggerROMPath, settings.value("DefaultROM", "").toString().toUtf8().data()); + strcpy(vjs.sourcefilesearchPaths, settings.value("SourceFileSearchPaths", "").toString().toUtf8().data()); vjs.nbrdisasmlines = settings.value("NbrDisasmLines", 32).toUInt(); vjs.disasmopcodes = settings.value("DisasmOpcodes", true).toBool(); vjs.displayHWlabels = settings.value("DisplayHWLabels", true).toBool(); vjs.displayFullSourceFilename = settings.value("displayFullSourceFilename", true).toBool(); + vjs.ELFSectionsCheck = settings.value("ELFSectionsCheck", false).toBool(); vjs.nbrmemory1browserwindow = settings.value("NbrMemory1BrowserWindow", MaxMemory1BrowserWindow).toUInt(); settings.endGroup(); @@ -1788,13 +1957,15 @@ void MainWin::ReadSettings(void) // Write important settings to the log file WriteLog("MainWin: Paths\n"); - WriteLog(" EEPROMPath = \"%s\"\n", vjs.EEPROMPath); - WriteLog(" ROMPath = \"%s\"\n", vjs.ROMPath); - WriteLog(" AlpineROMPath = \"%s\"\n", vjs.alpineROMPath); - WriteLog("DebuggerROMPath = \"%s\"\n", vjs.debuggerROMPath); - WriteLog(" absROMPath = \"%s\"\n", vjs.absROMPath); - WriteLog("ScreenshotsPath = \"%s\"\n", vjs.screenshotPath); - WriteLog(" Pipelined DSP = %s\n", (vjs.usePipelinedDSP ? "ON" : "off")); + WriteLog(" EEPROMPath = \"%s\"\n", vjs.EEPROMPath); + WriteLog(" ROMPath = \"%s\"\n", vjs.ROMPath); + WriteLog(" AlpineROMPath = \"%s\"\n", vjs.alpineROMPath); + WriteLog(" DebuggerROMPath = \"%s\"\n", vjs.debuggerROMPath); + WriteLog(" absROMPath = \"%s\"\n", vjs.absROMPath); + WriteLog(" ScreenshotsPath = \"%s\"\n", vjs.screenshotPath); + WriteLog("SourceFileSearchPaths = \"%s\"\n", vjs.sourcefilesearchPaths); + WriteLog("MainWin: Misc.\n"); + WriteLog(" Pipelined DSP = %s\n", (vjs.usePipelinedDSP ? "ON" : "off")); #if 0 // Keybindings in order of U, D, L, R, C, B, A, Op, Pa, 0-9, #, * @@ -1846,6 +2017,7 @@ void MainWin::ReadSettings(void) WriteLog("Read setting = Done\n"); ReadProfiles(&settings); + DBGManager_SourceFileSearchPathsSet(vjs.sourcefilesearchPaths); } @@ -1879,6 +2051,11 @@ void MainWin::ReadUISettings(void) // Video output information zoomLevel = settings.value("zoom", 2).toInt(); +// Emulator status UI information + pos = settings.value("emuStatusWinPos", QPoint(200, 200)).toPoint(); + emuStatusWin->move(pos); + settings.value("emuStatusWinIsVisible", false).toBool() ? ShowEmuStatusWin() : void(); + // Alpine debug UI information (also needed by the Debugger) if (vjs.hardwareTypeAlpine || vjs.softTypeDebugger) { @@ -1899,11 +2076,6 @@ void MainWin::ReadUISettings(void) size = settings.value("stackBrowseWinSize", QSize(400, 400)).toSize(); stackBrowseWin->resize(size); - // Emulator status UI information - pos = settings.value("emuStatusWinPos", QPoint(200, 200)).toPoint(); - emuStatusWin->move(pos); - settings.value("emuStatusWinIsVisible", false).toBool() ? ShowEmuStatusWin() : void(); - // OP (Object Processor) UI information pos = settings.value("opBrowseWinPos", QPoint(200, 200)).toPoint(); opBrowseWin->move(pos); @@ -1911,6 +2083,13 @@ void MainWin::ReadUISettings(void) size = settings.value("opBrowseWinSize", QSize(400, 400)).toSize(); opBrowseWin->resize(size); + // HW registers UI information + pos = settings.value("hwRegsBrowseWinPos", QPoint(200, 200)).toPoint(); + hwRegsBrowseWin->move(pos); + settings.value("hwRegsBrowseWinIsVisible", false).toBool() ? ShowHWRegsBrowserWin() : void(); + size = settings.value("hwRegsBrowseWinSize", QSize(400, 400)).toSize(); + hwRegsBrowseWin->resize(size); + // RISC disassembly UI information pos = settings.value("riscDasmBrowseWinPos", QPoint(200, 200)).toPoint(); riscDasmBrowseWin->move(pos); @@ -1974,6 +2153,33 @@ void MainWin::ReadUISettings(void) size = settings.value("CallStackBrowseWinSize", QSize(400, 400)).toSize(); CallStackBrowseWin->resize(size); + // cartridge directory and files UI information + pos = settings.value("CartFilesListWinPos", QPoint(200, 200)).toPoint(); + CartFilesListWin->move(pos); + settings.value("CartFilesListWinIsVisible", false).toBool() ? ShowCartFilesListWin() : void(); + size = settings.value("CartFilesListWinSize", QSize(400, 400)).toSize(); + CartFilesListWin->resize(size); + + // Save dump UI information + pos = settings.value("SaveDumpAsWinPos", QPoint(200, 200)).toPoint(); + SaveDumpAsWin->move(pos); + settings.value("SaveDumpAsWinIsVisible", false).toBool() ? ShowSaveDumpAsWin() : void(); + size = settings.value("SaveDumpAsWinSize", QSize(400, 400)).toSize(); + SaveDumpAsWin->resize(size); + + // Breakpoints UI information + pos = settings.value("BreakpointsWinPos", QPoint(200, 200)).toPoint(); + BreakpointsWin->move(pos); + settings.value("BreakpointsWinIsVisible", false).toBool() ? ShowBreakpointsWin() : void(); + size = settings.value("BreakpointsWinSize", QSize(400, 400)).toSize(); + BreakpointsWin->resize(size); + // New function breakpoint UI information + pos = settings.value("NewFunctionBreakpointWinPos", QPoint(200, 200)).toPoint(); + NewFunctionBreakpointWin->move(pos); + settings.value("NewFunctionBreakpointWinIsVisible", false).toBool() ? ShowNewFunctionBreakpointWin() : void(); + size = settings.value("NewFunctionBreakpointWinSize", QSize(400, 400)).toSize(); + NewFunctionBreakpointWin->resize(size); + // Memories browser UI information for (i = 0; i < vjs.nbrmemory1browserwindow; i++) { @@ -2047,8 +2253,10 @@ void MainWin::WriteSettings(void) settings.setValue("NbrDisasmLines", vjs.nbrdisasmlines); settings.setValue("DisasmOpcodes", vjs.disasmopcodes); settings.setValue("displayFullSourceFilename", vjs.displayFullSourceFilename); + settings.setValue("ELFSectionsCheck", vjs.ELFSectionsCheck); settings.setValue("NbrMemory1BrowserWindow", (unsigned int)vjs.nbrmemory1browserwindow); settings.setValue("DefaultROM", vjs.debuggerROMPath); + settings.setValue("SourceFileSearchPaths", vjs.sourcefilesearchPaths); settings.endGroup(); // Write settings from the Keybindings @@ -2106,6 +2314,7 @@ void MainWin::WriteSettings(void) #endif WriteProfiles(&settings); + DBGManager_SourceFileSearchPathsSet(vjs.sourcefilesearchPaths); } @@ -2127,6 +2336,10 @@ void MainWin::WriteUISettings(void) // Video output information settings.setValue("zoom", zoomLevel); + // Common UI information + settings.setValue("emuStatusWinPos", emuStatusWin->pos()); + settings.setValue("emuStatusWinIsVisible", emuStatusWin->isVisible()); + // Alpine debug UI information (also needed by the Debugger) if (vjs.hardwareTypeAlpine || vjs.softTypeDebugger) { @@ -2137,11 +2350,12 @@ void MainWin::WriteUISettings(void) settings.setValue("stackBrowseWinPos", stackBrowseWin->pos()); settings.setValue("stackBrowseWinIsVisible", stackBrowseWin->isVisible()); settings.setValue("stackBrowseWinSize", stackBrowseWin->size()); - settings.setValue("emuStatusWinPos", emuStatusWin->pos()); - settings.setValue("emuStatusWinIsVisible", emuStatusWin->isVisible()); settings.setValue("opBrowseWinPos", opBrowseWin->pos()); settings.setValue("opBrowseWinIsVisible", opBrowseWin->isVisible()); settings.setValue("opBrowseWinSize", opBrowseWin->size()); + settings.setValue("hwRegsBrowseWinPos", hwRegsBrowseWin->pos()); + settings.setValue("hwRegsBrowseWinIsVisible", hwRegsBrowseWin->isVisible()); + settings.setValue("hwRegsBrowseWinSize", hwRegsBrowseWin->size()); settings.setValue("riscDasmBrowseWinPos", riscDasmBrowseWin->pos()); settings.setValue("riscDasmBrowseWinIsVisible", riscDasmBrowseWin->isVisible()); settings.setValue("m68kDasmBrowseWinPos", m68kDasmBrowseWin->pos()); @@ -2172,6 +2386,19 @@ void MainWin::WriteUISettings(void) settings.setValue("CallStackBrowseWinPos", CallStackBrowseWin->pos()); settings.setValue("CallStackBrowseWinIsVisible", CallStackBrowseWin->isVisible()); settings.setValue("CallStackBrowseWinSize", CallStackBrowseWin->size()); + settings.setValue("BreakpointsWinPos", BreakpointsWin->pos()); + settings.setValue("BreakpointsWinIsVisible", BreakpointsWin->isVisible()); + settings.setValue("BreakpointsWinSize", BreakpointsWin->size()); + settings.setValue("NewFunctionBreakpointWinPos", NewFunctionBreakpointWin->pos()); + settings.setValue("NewFunctionBreakpointWinIsVisible", NewFunctionBreakpointWin->isVisible()); + settings.setValue("NewFunctionBreakpointWinSize", NewFunctionBreakpointWin->size()); + settings.setValue("CartFilesListWinPos", CartFilesListWin->pos()); + settings.setValue("CartFilesListWinIsVisible", CartFilesListWin->isVisible()); + settings.setValue("CartFilesListWinSize", CartFilesListWin->size()); + settings.setValue("SaveDumpAsWinPos", SaveDumpAsWin->pos()); + settings.setValue("SaveDumpAsWinIsVisible", SaveDumpAsWin->isVisible()); + settings.setValue("SaveDumpAsWinSize", SaveDumpAsWin->size()); + for (i = 0; i < vjs.nbrmemory1browserwindow; i++) { sprintf(mem1Name, "mem1BrowseWinPos[%i]", (unsigned int)i); @@ -2193,10 +2420,32 @@ void MainWin::AlpineRefreshWindows(void) cpuBrowseWin->RefreshContents(); memBrowseWin->RefreshContents(); stackBrowseWin->RefreshContents(); - emuStatusWin->RefreshContents(); opBrowseWin->RefreshContents(); riscDasmBrowseWin->RefreshContents(); m68kDasmBrowseWin->RefreshContents(); + hwRegsBrowseWin->RefreshContents(); +} + + +// +void MainWin::CommonResetWindows(void) +{ +} + + +// Reset common +void MainWin::CommonReset(void) +{ +} + + +// Reset soft debugger +void MainWin::DebuggerReset(void) +{ + if (vjs.softTypeDebugger) + { + DeleteAllBreakpoints(); + } } @@ -2208,20 +2457,43 @@ void MainWin::DebuggerResetWindows(void) FilesrcListWin->Reset(); allWatchBrowseWin->Reset(); heapallocatorBrowseWin->Reset(); - + BreakpointsWin->Reset(); + CartFilesListWin->Reset(); + SourcesWin->Reset(); //ResetAlpineWindows(); } } +// Refresh common windows +void MainWin::CommonRefreshWindows(void) +{ + emuStatusWin->RefreshContents(); +} + + +// Refresh view windows +void MainWin::ViewRefreshWindows(void) +{ + CartFilesListWin->RefreshContents(); +} + + +// +void MainWin::RefreshWindows(void) +{ + DebuggerRefreshWindows(); + CommonRefreshWindows(); +} + + // Refresh soft debugger & alpine debug windows void MainWin::DebuggerRefreshWindows(void) { - size_t i; - if (vjs.softTypeDebugger) { FilesrcListWin->RefreshContents(); + SourcesWin->RefreshContents(); m68kDasmWin->RefreshContents(); GPUDasmWin->RefreshContents(); DSPDasmWin->RefreshContents(); @@ -2229,12 +2501,14 @@ void MainWin::DebuggerRefreshWindows(void) LocalBrowseWin->RefreshContents(); CallStackBrowseWin->RefreshContents(); heapallocatorBrowseWin->RefreshContents(); - for (i = 0; i < vjs.nbrmemory1browserwindow; i++) + BreakpointsWin->RefreshContents(); + for (size_t i = 0; i < vjs.nbrmemory1browserwindow; i++) { mem1BrowseWin[i]->RefreshContents(i); } AlpineRefreshWindows(); + ViewRefreshWindows(); } }