X-Git-Url: http://git.hcoop.net/clinton/Virtual-Jaguar-Rx.git/blobdiff_plain/d56efc772df4a126865574bbbac62fbdaba5646e..2d99e2b7f7b3905d8c73f5e83c4c2ea8b030dc9c:/src/gui/mainwin.cpp diff --git a/src/gui/mainwin.cpp b/src/gui/mainwin.cpp index 1b547e2..98f1df8 100644 --- a/src/gui/mainwin.cpp +++ b/src/gui/mainwin.cpp @@ -20,9 +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, cartdridge view menu +// 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 04/06/2019 Added ELF sections check +// 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 // // FIXED: @@ -70,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" @@ -102,6 +104,7 @@ #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... :-/ @@ -179,16 +182,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); @@ -200,6 +209,7 @@ MainWin::MainWin(bool autoRun): running(true), powerButtonOn(false), heapallocatorBrowseWin = new HeapAllocatorBrowserWindow(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); @@ -418,6 +428,12 @@ MainWin::MainWin(bool autoRun): running(true), powerButtonOn(false), 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")); //connect(VideoOutputAct, SIGNAL(triggered()), this, SLOT(ShowVideoOutputWin())); @@ -453,7 +469,7 @@ MainWin::MainWin(bool autoRun): running(true), powerButtonOn(false), // Cart files list CartFilesListAct = new QAction(QIcon(""), tr("Directory and files"), this); - CartFilesListAct->setStatusTip(tr("List of the files in the cartdridge's directory")); + CartFilesListAct->setStatusTip(tr("List of the files in the cartridge's directory structure")); connect(CartFilesListAct, SIGNAL(triggered()), this, SLOT(ShowCartFilesListWin())); // Memory windows @@ -501,6 +517,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")); @@ -529,13 +550,15 @@ MainWin::MainWin(bool autoRun): running(true), powerButtonOn(false), // Alpine and debugger menus if (vjs.hardwareTypeAlpine || vjs.softTypeDebugger) { - // Create debug & view menu + // Create debug menu debugMenu = menuBar()->addMenu(tr("&Debug")); - viewMenu = menuBar()->addMenu(tr("&View")); // Create debugger menu if (vjs.softTypeDebugger) { + // Create view menu + viewMenu = menuBar()->addMenu(tr("&View")); + // Cart menu viewCartMenu = viewMenu->addMenu(tr("&Cartridge")); viewCartMenu->addAction(CartFilesListAct); @@ -576,6 +599,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); @@ -588,6 +612,8 @@ MainWin::MainWin(bool autoRun): running(true), powerButtonOn(false), debugNewBreakpointMenu->addAction(newFunctionBreakpointAct); debugMenu->addAction(deleteAllBreakpointsAct); debugMenu->addAction(disableAllBreakpointsAct); + debugMenu->addSeparator(); + debugMenu->addAction(saveDumpAsAct); #if 0 debugMenu->addSeparator(); debugMenu->addAction(DasmAct); @@ -602,6 +628,7 @@ MainWin::MainWin(bool autoRun): running(true), powerButtonOn(false), debugMenu->addAction(opBrowseAct); debugMenu->addAction(m68kDasmBrowseAct); debugMenu->addAction(riscDasmBrowseAct); + debugMenu->addAction(hwRegsBrowseAct); } } @@ -658,6 +685,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 @@ -1071,7 +1099,7 @@ void MainWin::Configure(void) // Just in case we crash before a clean exit... WriteSettings(); - DebuggerRefreshWindows(); + RefreshWindows(); } @@ -1123,16 +1151,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++; } } @@ -1237,7 +1268,9 @@ void MainWin::TogglePowerState(void) WriteLog("GUI: Resetting Jaguar...\n"); JaguarReset(); DebuggerReset(); + CommonReset(); DebuggerResetWindows(); + CommonResetWindows(); DACPauseAudioThread(false); } } @@ -1283,7 +1316,7 @@ void MainWin::ToggleRunState(void) cpuBrowseWin->HoldBPM(); cpuBrowseWin->HandleBPMContinue(); - DebuggerRefreshWindows(); + RefreshWindows(); } } else @@ -1461,6 +1494,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()); @@ -1515,7 +1549,7 @@ void MainWin::ShowNewFunctionBreakpointWin(void) } -// +// Display list of files found in cartridge void MainWin::ShowCartFilesListWin(void) { CartFilesListWin->show(); @@ -1523,12 +1557,19 @@ void MainWin::ShowCartFilesListWin(void) } +// Display the save dump pickup file +void MainWin::ShowSaveDumpAsWin(void) +{ + SaveDumpAsWin->show(); +} + + // Step Into trace void MainWin::DebuggerTraceStepInto(void) { JaguarStepInto(); videoWidget->updateGL(); - DebuggerRefreshWindows(); + RefreshWindows(); #ifdef _MSC_VER #pragma message("Warning: !!! Need to verify the Step Into function !!!") #else @@ -1550,7 +1591,8 @@ void MainWin::DebuggerRestart(void) m68k_brk_hitcounts_reset(); bpmHitCounts = 0; DebuggerResetWindows(); - DebuggerRefreshWindows(); + CommonResetWindows(); + RefreshWindows(); #ifdef _MSC_VER #pragma message("Warning: !!! Need to verify the Restart function !!!") #else @@ -1564,7 +1606,7 @@ void MainWin::DebuggerTraceStepOver(void) { JaguarStepOver(0); videoWidget->updateGL(); - DebuggerRefreshWindows(); + RefreshWindows(); #ifdef _MSC_VER #pragma message("Warning: !!! Need to verify the Step Over function !!!") #else @@ -1732,6 +1774,7 @@ void MainWin::ShowCPUBrowserWin(void) } +// Show the OP browser window void MainWin::ShowOPBrowserWin(void) { opBrowseWin->show(); @@ -1739,6 +1782,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(); @@ -1963,6 +2015,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) { @@ -1983,11 +2040,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); @@ -1995,6 +2047,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); @@ -2058,13 +2117,20 @@ void MainWin::ReadUISettings(void) size = settings.value("CallStackBrowseWinSize", QSize(400, 400)).toSize(); CallStackBrowseWin->resize(size); - // Cartdridge directory and files + // 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); @@ -2234,6 +2300,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) { @@ -2244,11 +2314,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()); @@ -2288,6 +2359,9 @@ void MainWin::WriteUISettings(void) 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++) { @@ -2310,10 +2384,22 @@ 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) +{ } @@ -2342,6 +2428,13 @@ void MainWin::DebuggerResetWindows(void) } +// Refresh common windows +void MainWin::CommonRefreshWindows(void) +{ + emuStatusWin->RefreshContents(); +} + + // Refresh view windows void MainWin::ViewRefreshWindows(void) { @@ -2349,6 +2442,14 @@ void MainWin::ViewRefreshWindows(void) } +// +void MainWin::RefreshWindows(void) +{ + DebuggerRefreshWindows(); + CommonRefreshWindows(); +} + + // Refresh soft debugger & alpine debug windows void MainWin::DebuggerRefreshWindows(void) {