Add the source level tracing
[clinton/Virtual-Jaguar-Rx.git] / src / gui / mainwin.cpp
index 98f1df8..82c6c3c 100644 (file)
@@ -23,7 +23,8 @@
 // JPM   Oct./2018  Added search paths in the settings, breakpoints feature, cartridge view menu\r
 // JPM  11/18/2018  Fix crash with non-debugger mode\r
 // JPM  April/2019  Added ELF sections check, added a save memory dump\r
-// JPM   Aug./2019  Update texts descriptions, set cartridge view menu for debugger mode only, added a HW registers browser\r
+// 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
 //\r
 \r
 // FIXED:\r
 //\r
 // STILL TO BE DONE:\r
 //\r
+// - The source file listing do not need to be refresh more than one time\r
 // - Fix bug in switching between PAL & NTSC in fullscreen mode.\r
 // - Remove SDL dependencies (sound, mainly) from Jaguar core lib\r
-// - Fix inconsistency with trailing slashes in paths (eeproms needs one,\r
-//   software doesn't)\r
+// - Fix inconsistency with trailing slashes in paths (eeproms needs one, software doesn't)\r
 //\r
 // SFDX CODE: S1E9T8H5M23YS\r
 \r
@@ -91,6 +92,7 @@
 #include "debugger/DBGManager.h"\r
 //#include "debugger/VideoWin.h"\r
 //#include "debugger/DasmWin.h"\r
+#include "debugger/SourcesWin.h"\r
 #include "debugger/m68KDasmWin.h"\r
 #include "debugger/GPUDasmWin.h"\r
 #include "debugger/DSPDasmWin.h"\r
@@ -244,9 +246,11 @@ MainWin::MainWin(bool autoRun): running(true), powerButtonOn(false),
 #endif\r
                // Setup disasm tabs\r
                dasmtabWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);\r
-               dasmtabWidget->addTab(m68kDasmWin = new m68KDasmWindow(this), tr("M68000"));\r
+               dasmtabWidget->addTab(SourcesWin = new SourcesWindow(this), tr("Sources"));\r
+               dasmtabWidget->setCurrentIndex(dasmtabWidget->addTab(m68kDasmWin = new m68KDasmWindow(this), tr("M68000")));\r
                dasmtabWidget->addTab(GPUDasmWin = new GPUDasmWindow(this), tr("GPU"));\r
                dasmtabWidget->addTab(DSPDasmWin = new DSPDasmWindow(this), tr("DSP"));\r
+               connect(dasmtabWidget, SIGNAL(currentChanged(const int)), this, SLOT(SelectdasmtabWidget(const int)));\r
 #if 1\r
                setCentralWidget(dasmtabWidget);\r
 #endif\r
@@ -858,6 +862,17 @@ void MainWin::SyncUI(void)
 }\r
 \r
 \r
+// \r
+void MainWin::SelectdasmtabWidget(const int Index)\r
+{\r
+       // check sources tab\r
+       if (Index == 0)\r
+       {\r
+               SourcesWin->RefreshContents();\r
+       }\r
+}\r
+\r
+\r
 void MainWin::closeEvent(QCloseEvent * event)\r
 {\r
        JaguarDone();\r
@@ -1480,6 +1495,7 @@ void MainWin::LoadSoftware(QString file)
        {\r
                m68k_set_reg(M68K_REG_A6, 0);\r
                m68kDasmWin->SetAddress(jaguarRunAddress);\r
+               SourcesWin->Init();\r
                //pauseAct->setDisabled(false);\r
                //pauseAct->setChecked(true);\r
                ToggleRunState();\r
@@ -1567,7 +1583,18 @@ void MainWin::ShowSaveDumpAsWin(void)
 // Step Into trace\r
 void MainWin::DebuggerTraceStepInto(void)\r
 {\r
-       JaguarStepInto();\r
+       if (SourcesWin->isVisible() && SourcesWin->GetTraceStatus())\r
+       {\r
+               while (!SourcesWin->CheckChangeLine())\r
+               {\r
+                       JaguarStepInto();\r
+               }\r
+       }\r
+       else\r
+       {\r
+               JaguarStepInto();\r
+       }\r
+\r
        videoWidget->updateGL();\r
        RefreshWindows();\r
 #ifdef _MSC_VER\r
@@ -1587,11 +1614,13 @@ void MainWin::DebuggerRestart(void)
        m68k_set_reg(M68K_REG_PC, jaguarRunAddress);\r
        m68k_set_reg(M68K_REG_SP, vjs.DRAM_size);\r
 #endif\r
+       dasmtabWidget->setCurrentIndex(1);              // set focus on the disasm M68K tab\r
        m68k_set_reg(M68K_REG_A6, 0);\r
        m68k_brk_hitcounts_reset();\r
        bpmHitCounts = 0;\r
        DebuggerResetWindows();\r
        CommonResetWindows();\r
+       SourcesWin->Init();\r
        RefreshWindows();\r
 #ifdef _MSC_VER\r
 #pragma message("Warning: !!! Need to verify the Restart function !!!")\r
@@ -1604,7 +1633,18 @@ void MainWin::DebuggerRestart(void)
 // Step Over trace\r
 void MainWin::DebuggerTraceStepOver(void)\r
 {\r
-       JaguarStepOver(0);\r
+       if (SourcesWin->isVisible() && SourcesWin->GetTraceStatus())\r
+       {\r
+               while (!SourcesWin->CheckChangeLine())\r
+               {\r
+                       JaguarStepOver(0);\r
+               }\r
+       }\r
+       else\r
+       {\r
+               JaguarStepOver(0);\r
+       }\r
+\r
        videoWidget->updateGL();\r
        RefreshWindows();\r
 #ifdef _MSC_VER\r
@@ -2423,6 +2463,7 @@ void MainWin::DebuggerResetWindows(void)
                heapallocatorBrowseWin->Reset();\r
                BreakpointsWin->Reset();\r
                CartFilesListWin->Reset();\r
+               SourcesWin->Reset();\r
                //ResetAlpineWindows();\r
        }\r
 }\r
@@ -2456,6 +2497,7 @@ void MainWin::DebuggerRefreshWindows(void)
        if (vjs.softTypeDebugger)\r
        {\r
                FilesrcListWin->RefreshContents();\r
+               SourcesWin->RefreshContents();\r
                m68kDasmWin->RefreshContents();\r
                GPUDasmWin->RefreshContents();\r
                DSPDasmWin->RefreshContents();\r