core: Fix libdwarf and Qt build failure
[clinton/Virtual-Jaguar-Rx.git] / src / gui / mainwin.cpp
index eca4846..7fb2f3d 100644 (file)
@@ -28,6 +28,7 @@
 // JPM   Aug./2019  Update texts descriptions, set cartridge view menu for debugger mode only, added a HW registers browser and source level tracing\r
 // JPM  Marc./2020  Added the step over for source level tracing\r
 //  RG   Jan./2021  Linux build fixes\r
+// JPM   Apr./2021  Handle number of M68K cycles used in tracing mode, added video output display in a window\r
 //\r
 \r
 // FIXED:\r
@@ -93,7 +94,7 @@
 #include "m68000/m68kinterface.h"\r
 \r
 #include "debugger/DBGManager.h"\r
-//#include "debugger/VideoWin.h"\r
+#include "debugger/VideoWin.h"\r
 //#include "debugger/DasmWin.h"\r
 #include "debugger/SourcesWin.h"\r
 #include "debugger/m68kDasmWin.h"\r
@@ -205,7 +206,8 @@ MainWin::MainWin(bool autoRun): running(true), powerButtonOn(false),
        // Windows debugger mode features\r
        if (vjs.softTypeDebugger)\r
        {\r
-               //VideoOutputWin = new VideoOutputWindow(this);\r
+               VideoOutputWin = new VideoOutputWindow(this);\r
+               //VideoOutputWin->show();\r
                //VideoOutputWin->setCentralWidget()\r
                //DasmWin = new DasmWindow();\r
                //DasmWin = new DasmWindow(this);\r
@@ -441,9 +443,9 @@ MainWin::MainWin(bool autoRun): running(true), powerButtonOn(false),
                saveDumpAsAct->setDisabled(false);\r
                connect(saveDumpAsAct, SIGNAL(triggered()), this, SLOT(ShowSaveDumpAsWin()));\r
 \r
-               //VideoOutputAct = new QAction(tr("Output Video"), this);\r
-               //VideoOutputAct->setStatusTip(tr("Shows the output video window"));\r
-               //connect(VideoOutputAct, SIGNAL(triggered()), this, SLOT(ShowVideoOutputWin()));\r
+               VideoOutputAct = new QAction(tr("Output Video"), this);\r
+               VideoOutputAct->setStatusTip(tr("Shows the output video window"));\r
+               connect(VideoOutputAct, SIGNAL(triggered()), this, SLOT(ShowVideoOutputWin()));\r
 \r
                //DasmAct = new QAction(tr("Disassembly"), this);\r
                //DasmAct->setStatusTip(tr("Shows the disassembly window"));\r
@@ -580,11 +582,9 @@ MainWin::MainWin(bool autoRun): running(true), powerButtonOn(false),
                        debugWindowExceptionMenu = debugWindowsMenu->addMenu(tr("&Exception"));\r
                        debugWindowExceptionMenu->addAction(exceptionVectorTableBrowseAct);\r
                        debugWindowsMenu->addSeparator();\r
-#if 0\r
                        debugWindowOutputMenu = debugWindowsMenu->addMenu(tr("&Output"));\r
                        debugWindowOutputMenu->addAction(VideoOutputAct);\r
                        debugWindowsMenu->addSeparator();\r
-#endif\r
                        debugWindowsWatchMenu = debugWindowsMenu->addMenu(tr("&Watch"));\r
                        debugWindowsWatchMenu->addAction(allWatchBrowseAct);\r
                        debugWindowsMenu->addAction(LocalBrowseAct);\r
@@ -1188,6 +1188,7 @@ static uint32_t refresh = 0;
 \r
        //if (!vjs.softTypeDebugger)\r
                videoWidget->updateGL();\r
+               //vjs.softTypeDebugger ? VideoOutputWin->RefreshContents(videoWidget) : NULL;\r
 \r
        // FPS handling\r
        // Approach: We use a ring buffer to store times (in ms) over a given\r
@@ -1331,6 +1332,7 @@ void MainWin::ToggleRunState(void)
                        }\r
 \r
                        videoWidget->updateGL();\r
+                       //vjs.softTypeDebugger ? VideoOutputWin->RefreshContents(videoWidget) : NULL;\r
 \r
                        cpuBrowseWin->HoldBPM();\r
                        cpuBrowseWin->HandleBPMContinue();\r
@@ -1353,6 +1355,7 @@ void MainWin::ToggleRunState(void)
                cpuBrowseWin->UnholdBPM();\r
        }\r
 \r
+       emuStatusWin->ResetM68KCycles();\r
        // Pause/unpause any running/non-running threads...\r
        DACPauseAudioThread(!running);\r
 }\r
@@ -1563,6 +1566,7 @@ void MainWin::DisableAllBreakpoints(void)
 // Open, or display, the new breakpoint function window\r
 void MainWin::ShowNewFunctionBreakpointWin(void)\r
 {\r
+       NewFunctionBreakpointWin->SetFnctBreakpointWin(BreakpointsWin);\r
        NewFunctionBreakpointWin->show();\r
        ShowBreakpointsWin();\r
 }\r
@@ -1590,12 +1594,12 @@ void MainWin::DebuggerTraceStepInto(void)
        {\r
                while (!SourcesWin->CheckChangeLine())\r
                {\r
-                       JaguarStepInto();\r
+                       emuStatusWin->UpdateM68KCycles(JaguarStepInto());\r
                }\r
        }\r
        else\r
        {\r
-               JaguarStepInto();\r
+               emuStatusWin->UpdateM68KCycles(JaguarStepInto());\r
        }\r
 \r
        videoWidget->updateGL();\r
@@ -1620,6 +1624,7 @@ void MainWin::DebuggerRestart(void)
        dasmtabWidget->setCurrentIndex(1);              // set focus on the disasm M68K tab\r
        m68k_set_reg(M68K_REG_A6, 0);\r
        m68k_brk_hitcounts_reset();\r
+       emuStatusWin->ResetM68KCycles();\r
        bpmHitCounts = 0;\r
        DebuggerResetWindows();\r
        CommonResetWindows();\r
@@ -1640,12 +1645,12 @@ void MainWin::DebuggerTraceStepOver(void)
        {\r
                while (!SourcesWin->CheckChangeLine())\r
                {\r
-                       JaguarStepOver(0);\r
+                       emuStatusWin->UpdateM68KCycles(JaguarStepOver(0));\r
                }\r
        }\r
        else\r
        {\r
-               JaguarStepOver(0);\r
+               emuStatusWin->UpdateM68KCycles(JaguarStepOver(0));\r
        }\r
 \r
        videoWidget->updateGL();\r
@@ -1667,6 +1672,7 @@ void MainWin::FrameAdvance(void)
        JaguarExecuteNew();\r
        //if (!vjs.softTypeDebugger)\r
                videoWidget->updateGL();\r
+               //vjs.softTypeDebugger ? VideoOutputWin->RefreshContents(videoWidget) : NULL;\r
        ToggleRunState();\r
        // Need to execute 1 frames' worth of DSP thread as well :-/\r
 \r
@@ -1859,17 +1865,17 @@ void    MainWin::ShowDasmWin(void)
 \r
 \r
 // \r
-#if 0\r
 void MainWin::ShowVideoOutputWin(void)\r
 {\r
        //VideoOutputWindowCentrale = mainWindowCentrale->addSubWindow(videoWidget);\r
        //VideoOutputWindowCentrale->setWindowTitle(QString(tr("Video output")));\r
        //VideoOutputWindowCentrale->show();\r
        //memBrowseWin->show();\r
-       //VideoOutputWin->show();\r
+       VideoOutputWin->show();\r
+       VideoOutputWin->SetupVideo(videoWidget);\r
+       //VideoOutputWin->adjustSize();\r
        //VideoOutputWin->RefreshContents(videoWidget);\r
 }\r
-#endif\r
 \r
 \r
 // Resize video window based on zoom factor\r
@@ -1952,6 +1958,7 @@ void MainWin::ReadSettings(void)
        strcpy(vjs.absROMPath, settings.value("DefaultABS", "").toString().toUtf8().data());\r
        vjs.refresh = settings.value("refresh", 60).toUInt();\r
        vjs.allowWritesToROM = settings.value("writeROM", false).toBool();\r
+       vjs.allowM68KExceptionCatch = settings.value("M68KExceptionCatch", false).toBool();\r
        settings.endGroup();\r
 \r
        // Read settings from the Keybindings\r
@@ -2174,6 +2181,13 @@ void MainWin::ReadUISettings(void)
                size = settings.value("SaveDumpAsWinSize", QSize(400, 400)).toSize();\r
                SaveDumpAsWin->resize(size);\r
 \r
+               // save output video UI information\r
+               pos = settings.value("VideoOutputWinPos", QPoint(200, 200)).toPoint();\r
+               VideoOutputWin->move(pos);\r
+               settings.value("VideoOutputWinIsVisible", false).toBool() ? ShowVideoOutputWin() : void();\r
+               size = settings.value("VideoOutputWinSize", QSize(400, 400)).toSize();\r
+               VideoOutputWin->resize(size);\r
+\r
                // Breakpoints UI information\r
                pos = settings.value("BreakpointsWinPos", QPoint(200, 200)).toPoint();\r
                BreakpointsWin->move(pos);\r
@@ -2252,6 +2266,7 @@ void MainWin::WriteSettings(void)
        settings.setValue("DefaultROM", vjs.alpineROMPath);\r
        settings.setValue("DefaultABS", vjs.absROMPath);\r
        settings.setValue("writeROM", vjs.allowWritesToROM);\r
+       settings.setValue("M68KExceptionCatch", vjs.allowM68KExceptionCatch);\r
        settings.endGroup();\r
 \r
        // Write settings from the Debugger mode\r
@@ -2405,6 +2420,9 @@ void MainWin::WriteUISettings(void)
                settings.setValue("SaveDumpAsWinPos", SaveDumpAsWin->pos());\r
                settings.setValue("SaveDumpAsWinIsVisible", SaveDumpAsWin->isVisible());\r
                settings.setValue("SaveDumpAsWinSize", SaveDumpAsWin->size());\r
+               settings.setValue("VideoOutputWinPos", VideoOutputWin->pos());\r
+               settings.setValue("VideoOutputWinIsVisible", VideoOutputWin->isVisible());\r
+               settings.setValue("VideoOutputWinSize", VideoOutputWin->size());\r
 \r
                for (i = 0; i < vjs.nbrmemory1browserwindow; i++)\r
                {\r
@@ -2499,6 +2517,7 @@ void MainWin::DebuggerRefreshWindows(void)
 {\r
        if (vjs.softTypeDebugger)\r
        {\r
+               //VideoOutputWin->RefreshContents(videoWidget);\r
                FilesrcListWin->RefreshContents();\r
                SourcesWin->RefreshContents();\r
                m68kDasmWin->RefreshContents();\r