//\r
// JLH = James Hammons <jlhamm@acm.org>\r
// JPM = Jean-Paul Mari <djipi.mari@gmail.com>\r
+// RG = Richard Goedeken\r
+\r
//\r
// Who When What\r
// --- ---------- ------------------------------------------------------------\r
// JPM 11/04/2017 Added the local window\r
// JPM 08/31/2018 Added the call stack window\r
// JPM Sept./2018 Added the new Models and BIOS handler, a screenshot feature and source code files browsing\r
+// 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 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
//\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
#include "debug/stackbrowser.h"\r
#include "debug/opbrowser.h"\r
#include "debug/riscdasmbrowser.h"\r
+#include "debug/hwregsbrowser.h"\r
\r
#include "dac.h"\r
#include "jaguar.h"\r
#include "joystick.h"\r
#include "m68000/m68kinterface.h"\r
\r
-//#include "debugger/VideoWin.h"\r
+#include "debugger/DBGManager.h"\r
+#include "debugger/VideoWin.h"\r
//#include "debugger/DasmWin.h"\r
-#include "debugger/m68KDasmWin.h"\r
+#include "debugger/SourcesWin.h"\r
+#include "debugger/m68kDasmWin.h"\r
#include "debugger/GPUDasmWin.h"\r
#include "debugger/DSPDasmWin.h"\r
#include "debugger/memory1browser.h"\r
-//#include "debugger/brkWin.h"\r
+#include "debugger/BreakpointsWin.h"\r
+#include "debugger/NewFnctBreakpointWin.h"\r
#include "debugger/FilesrcListWin.h"\r
#include "debugger/exceptionvectortablebrowser.h"\r
#include "debugger/allwatchbrowser.h"\r
#include "debugger/localbrowser.h"\r
#include "debugger/heapallocatorbrowser.h"\r
#include "debugger/callstackbrowser.h"\r
+#include "debugger/CartFilesListWin.h"\r
+#include "debugger/SaveDumpAsWin.h"\r
\r
\r
// According to SebRmv, this header isn't seen on Arch Linux either... :-/\r
\r
setWindowTitle(title);\r
\r
+ // Windows common features\r
aboutWin = new AboutWindow(this);\r
helpWin = new HelpWindow(this);\r
filePickWin = new FilePickerWindow(this);\r
+ emuStatusWin = new EmuStatusWindow(this);\r
+ \r
+ // Windows alpine mode features\r
memBrowseWin = new MemoryBrowserWindow(this);\r
stackBrowseWin = new StackBrowserWindow(this);\r
- emuStatusWin = new EmuStatusWindow(this);\r
cpuBrowseWin = new CPUBrowserWindow(this);\r
opBrowseWin = new OPBrowserWindow(this);\r
m68kDasmBrowseWin = new M68KDasmBrowserWindow(this);\r
riscDasmBrowseWin = new RISCDasmBrowserWindow(this);\r
+ hwRegsBrowseWin = new HWRegsBrowserWindow(this);\r
+\r
+ // 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
allWatchBrowseWin = new AllWatchBrowserWindow(this);\r
LocalBrowseWin = new LocalBrowserWindow(this);\r
heapallocatorBrowseWin = new HeapAllocatorBrowserWindow(this);\r
- //brkWin = new BrkWindow(this);\r
+ BreakpointsWin = new BreakpointsWindow(this);\r
+ NewFunctionBreakpointWin = new NewFnctBreakpointWindow(this);\r
+ SaveDumpAsWin = new SaveDumpAsWindow(this);\r
exceptionvectortableBrowseWin = new ExceptionVectorTableBrowserWindow(this);\r
CallStackBrowseWin = new CallStackBrowserWindow(this);\r
+ CartFilesListWin = new CartFilesListWindow(this);\r
\r
mem1BrowseWin = (Memory1BrowserWindow **)calloc(vjs.nbrmemory1browserwindow, sizeof(Memory1BrowserWindow));\r
#ifdef _MSC_VER\r
#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
\r
setUnifiedTitleAndToolBarOnMac(true);\r
\r
- // Create actions\r
-\r
+ // Quit actions\r
quitAppAct = new QAction(QIcon(":/res/exit.png"), tr("E&xit"), this);\r
-// quitAppAct->setShortcuts(QKeySequence::Quit);\r
-// quitAppAct->setShortcut(QKeySequence(tr("Alt+x")));\r
- //quitAppAct->setShortcut(QKeySequence(tr("Ctrl+q")));\r
quitAppAct->setShortcut(QKeySequence(tr(vjs.KBContent[KBQUIT].KBSettingValue)));\r
quitAppAct->setShortcutContext(Qt::ApplicationShortcut);\r
quitAppAct->setStatusTip(tr("Quit Virtual Jaguar"));\r
connect(quitAppAct, SIGNAL(triggered()), this, SLOT(close()));\r
\r
+ // Power action\r
powerGreen.addFile(":/res/power-off.png", QSize(), QIcon::Normal, QIcon::Off);\r
powerGreen.addFile(":/res/power-on-green.png", QSize(), QIcon::Normal, QIcon::On);\r
powerRed.addFile(":/res/power-off.png", QSize(), QIcon::Normal, QIcon::Off);\r
powerRed.addFile(":/res/power-on-red.png", QSize(), QIcon::Normal, QIcon::On);\r
-\r
powerAct = new QAction(powerGreen, tr("&Power"), this);\r
powerAct->setStatusTip(tr("Powers Jaguar on/off"));\r
powerAct->setCheckable(true);\r
powerAct->setChecked(false);\r
connect(powerAct, SIGNAL(triggered()), this, SLOT(TogglePowerState()));\r
\r
- // Pause feature\r
+ // Pause action\r
QIcon pauseIcon;\r
pauseIcon.addFile(":/res/pause-off.png", QSize(), QIcon::Normal, QIcon::Off);\r
pauseIcon.addFile(":/res/pause-on.png", QSize(), QIcon::Normal, QIcon::On);\r
pauseAct->setStatusTip(tr("Toggles the running state"));\r
pauseAct->setCheckable(true);\r
pauseAct->setDisabled(true);\r
- //pauseAct->setShortcut(QKeySequence(tr("Esc")));\r
pauseAct->setShortcut(QKeySequence(tr(vjs.KBContent[KBPAUSE].KBSettingValue)));\r
pauseAct->setShortcutContext(Qt::ApplicationShortcut);\r
connect(pauseAct, SIGNAL(triggered()), this, SLOT(ToggleRunState()));\r
\r
- // Screenshot feature\r
+ // Screenshot action\r
screenshotAct = new QAction(QIcon(":/res/screenshot.png"), tr("&Screenshot"), this);\r
screenshotAct->setShortcut(QKeySequence(tr(vjs.KBContent[KBSCREENSHOT].KBSettingValue)));\r
screenshotAct->setShortcutContext(Qt::ApplicationShortcut);\r
screenshotAct->setDisabled(false);\r
connect(screenshotAct, SIGNAL(triggered()), this, SLOT(MakeScreenshot()));\r
\r
+ // Zoom actions\r
zoomActs = new QActionGroup(this);\r
-\r
x1Act = new QAction(QIcon(":/res/zoom100.png"), tr("Zoom 100%"), zoomActs);\r
x1Act->setStatusTip(tr("Set window zoom to 100%"));\r
x1Act->setCheckable(true);\r
connect(x1Act, SIGNAL(triggered()), this, SLOT(SetZoom100()));\r
-\r
x2Act = new QAction(QIcon(":/res/zoom200.png"), tr("Zoom 200%"), zoomActs);\r
x2Act->setStatusTip(tr("Set window zoom to 200%"));\r
x2Act->setCheckable(true);\r
connect(x2Act, SIGNAL(triggered()), this, SLOT(SetZoom200()));\r
-\r
x3Act = new QAction(QIcon(":/res/zoom300.png"), tr("Zoom 300%"), zoomActs);\r
x3Act->setStatusTip(tr("Set window zoom to 300%"));\r
x3Act->setCheckable(true);\r
connect(x3Act, SIGNAL(triggered()), this, SLOT(SetZoom300()));\r
\r
+ // TV type actions\r
tvTypeActs = new QActionGroup(this);\r
-\r
ntscAct = new QAction(QIcon(":/res/ntsc.png"), tr("NTSC"), tvTypeActs);\r
ntscAct->setStatusTip(tr("Sets Jaguar to NTSC mode"));\r
ntscAct->setCheckable(true);\r
connect(ntscAct, SIGNAL(triggered()), this, SLOT(SetNTSC()));\r
-\r
palAct = new QAction(QIcon(":/res/pal.png"), tr("PAL"), tvTypeActs);\r
palAct->setStatusTip(tr("Sets Jaguar to PAL mode"));\r
palAct->setCheckable(true);\r
connect(palAct, SIGNAL(triggered()), this, SLOT(SetPAL()));\r
\r
+ // Blur action\r
blur.addFile(":/res/blur-off.png", QSize(), QIcon::Normal, QIcon::Off);\r
blur.addFile(":/res/blur-on.png", QSize(), QIcon::Normal, QIcon::On);\r
-\r
blurAct = new QAction(blur, tr("Blur"), this);\r
blurAct->setStatusTip(tr("Sets OpenGL rendering to GL_NEAREST"));\r
blurAct->setCheckable(true);\r
connect(blurAct, SIGNAL(triggered()), this, SLOT(ToggleBlur()));\r
\r
+ // About action\r
aboutAct = new QAction(QIcon(":/res/vj-icon.png"), tr("&About..."), this);\r
aboutAct->setStatusTip(tr("Blatant self-promotion"));\r
connect(aboutAct, SIGNAL(triggered()), this, SLOT(ShowAboutWin()));\r
\r
+ // Help action\r
helpAct = new QAction(QIcon(":/res/vj-icon.png"), tr("&Contents..."), this);\r
helpAct->setStatusTip(tr("Help is available, if you should need it"));\r
connect(helpAct, SIGNAL(triggered()), this, SLOT(ShowHelpWin()));\r
\r
+ // File pickup action\r
if (!vjs.softTypeDebugger)\r
{\r
filePickAct = new QAction(QIcon(":/res/software.png"), tr("&Insert Cartridge..."), this);\r
filePickAct = new QAction(QIcon(":/res/software.png"), tr("&Insert executable file..."), this);\r
filePickAct->setStatusTip(tr("Insert an executable into Virtual Jaguar"));\r
}\r
- //filePickAct->setShortcut(QKeySequence(tr("Ctrl+i")));\r
filePickAct->setShortcut(QKeySequence(tr(vjs.KBContent[KBPICKFILE].KBSettingValue)));\r
filePickAct->setShortcutContext(Qt::ApplicationShortcut);\r
connect(filePickAct, SIGNAL(triggered()), this, SLOT(InsertCart()));\r
\r
+ // Configuration action\r
configAct = new QAction(QIcon(":/res/wrench.png"), tr("&Configure"), this);\r
configAct->setStatusTip(tr("Configure options for Virtual Jaguar"));\r
- //configAct->setShortcut(QKeySequence(tr("Ctrl+c")));\r
configAct->setShortcut(QKeySequence(tr(vjs.KBContent[KBCONFIGURE].KBSettingValue)));\r
configAct->setShortcutContext(Qt::ApplicationShortcut);\r
connect(configAct, SIGNAL(triggered()), this, SLOT(Configure()));\r
\r
+ // Emulation status action\r
emustatusAct = new QAction(QIcon(":/res/status.png"), tr("&Status"), this);\r
emustatusAct->setStatusTip(tr("Emulator status"));\r
- //emustatusAct->setShortcut(QKeySequence(tr("Ctrl+s")));\r
emustatusAct->setShortcut(QKeySequence(tr(vjs.KBContent[KBEMUSTATUS].KBSettingValue)));\r
emustatusAct->setShortcutContext(Qt::ApplicationShortcut);\r
connect(emustatusAct, SIGNAL(triggered()), this, SLOT(ShowEmuStatusWin()));\r
\r
+ // Use CD action\r
useCDAct = new QAction(QIcon(":/res/compact-disc.png"), tr("&Use CD Unit"), this);\r
useCDAct->setStatusTip(tr("Use Jaguar Virtual CD unit"));\r
-// useCDAct->setShortcut(QKeySequence(tr("Ctrl+c")));\r
useCDAct->setCheckable(true);\r
connect(useCDAct, SIGNAL(triggered()), this, SLOT(ToggleCDUsage()));\r
\r
+ // Frame advance action\r
frameAdvanceAct = new QAction(QIcon(":/res/frame-advance.png"), tr("&Frame Advance"), this);\r
- //frameAdvanceAct->setShortcut(QKeySequence(tr("F7")));\r
frameAdvanceAct->setShortcut(QKeySequence(tr(vjs.KBContent[KBFRAMEADVANCE].KBSettingValue)));\r
frameAdvanceAct->setShortcutContext(Qt::ApplicationShortcut);\r
frameAdvanceAct->setDisabled(true);\r
connect(frameAdvanceAct, SIGNAL(triggered()), this, SLOT(FrameAdvance()));\r
\r
+ // Fullscreen action\r
+ fullScreenAct = new QAction(QIcon(":/res/fullscreen.png"), tr("F&ull Screen"), this);\r
+ fullScreenAct->setShortcut(QKeySequence(tr(vjs.KBContent[KBFULLSCREEN].KBSettingValue)));\r
+ fullScreenAct->setShortcutContext(Qt::ApplicationShortcut);\r
+ fullScreenAct->setCheckable(true);\r
+ connect(fullScreenAct, SIGNAL(triggered()), this, SLOT(ToggleFullScreen()));\r
+\r
+ // Actions dedicated to debugger mode\r
if (vjs.softTypeDebugger)\r
{\r
+ // Restart\r
restartAct = new QAction(QIcon(":/res/debug-restart.png"), tr("&Restart"), this);\r
- //restartAct->setShortcut(QKeySequence(tr("Ctrl+Shift+F5")));\r
restartAct->setShortcut(QKeySequence(tr(vjs.KBContent[KBRESTART].KBSettingValue)));\r
restartAct->setShortcutContext(Qt::ApplicationShortcut);\r
restartAct->setCheckable(false);\r
restartAct->setDisabled(true);\r
connect(restartAct, SIGNAL(triggered()), this, SLOT(DebuggerRestart()));\r
\r
+ // Step over trace\r
traceStepOverAct = new QAction(QIcon(":/res/debug-stepover.png"), tr("&Step Over"), this);\r
- //traceStepOverAct->setShortcut(QKeySequence(tr("F10")));\r
traceStepOverAct->setShortcut(QKeySequence(tr(vjs.KBContent[KBSTEPOVER].KBSettingValue)));\r
traceStepOverAct->setShortcutContext(Qt::ApplicationShortcut);\r
traceStepOverAct->setCheckable(false);\r
traceStepOverAct->setDisabled(true);\r
connect(traceStepOverAct, SIGNAL(triggered()), this, SLOT(DebuggerTraceStepOver()));\r
\r
+ // Trace into tracing\r
traceStepIntoAct = new QAction(QIcon(":/res/debug-stepinto.png"), tr("&Step Into"), this);\r
- //traceStepIntoAct->setShortcut(QKeySequence(tr("F11")));\r
traceStepIntoAct->setShortcut(QKeySequence(tr(vjs.KBContent[KBSTEPINTO].KBSettingValue)));\r
traceStepIntoAct->setShortcutContext(Qt::ApplicationShortcut);\r
traceStepIntoAct->setCheckable(false);\r
traceStepIntoAct->setDisabled(true);\r
connect(traceStepIntoAct, SIGNAL(triggered()), this, SLOT(DebuggerTraceStepInto()));\r
\r
- newBreakpointFunctionAct = new QAction(QIcon(""), tr("&Function Breakpoint"), this);\r
- newBreakpointFunctionAct->setShortcut(QKeySequence(tr("Ctrl+B")));\r
- connect(newBreakpointFunctionAct, SIGNAL(triggered()), this, SLOT(NewBreakpointFunction()));\r
- }\r
+ // Function breakpoint\r
+ newFunctionBreakpointAct = new QAction(QIcon(""), tr("&Function Breakpoint"), this);\r
+ newFunctionBreakpointAct->setShortcut(QKeySequence(tr(vjs.KBContent[KBFUNCTIONBREAKPOINT].KBSettingValue)));\r
+ connect(newFunctionBreakpointAct, SIGNAL(triggered()), this, SLOT(ShowNewFunctionBreakpointWin()));\r
+ BreakpointsAct = new QAction(QIcon(":/res/debug-breakpoints.png"), tr("&Breakpoints"), this);\r
+ BreakpointsAct->setShortcut(QKeySequence(tr(vjs.KBContent[KBBREAKPOINTS].KBSettingValue)));\r
+ connect(BreakpointsAct, SIGNAL(triggered()), this, SLOT(ShowBreakpointsWin()));\r
+ deleteAllBreakpointsAct = new QAction(QIcon(":/res/debug-deleteallbreakpoints.png"), tr("&Delete All Breakpoints"), this);\r
+ deleteAllBreakpointsAct->setShortcut(QKeySequence(tr(vjs.KBContent[KBDELETEALLBREAKPOINTS].KBSettingValue)));\r
+ connect(deleteAllBreakpointsAct, SIGNAL(triggered()), this, SLOT(DeleteAllBreakpoints()));\r
+ disableAllBreakpointsAct = new QAction(QIcon(":/res/debug-disableallbreakpoints.png"), tr("&Disable All Breakpoints"), this);\r
+ connect(disableAllBreakpointsAct, SIGNAL(triggered()), this, SLOT(DisableAllBreakpoints()));\r
+\r
+ // Save dump\r
+ saveDumpAsAct = new QAction(tr("&Save Dump As..."), this);\r
+ saveDumpAsAct->setCheckable(false);\r
+ 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
\r
- fullScreenAct = new QAction(QIcon(":/res/fullscreen.png"), tr("F&ull Screen"), this);\r
- //fullScreenAct->setShortcut(QKeySequence(tr("F9")));\r
- fullScreenAct->setShortcut(QKeySequence(tr(vjs.KBContent[KBFULLSCREEN].KBSettingValue)));\r
- fullScreenAct->setShortcutContext(Qt::ApplicationShortcut);\r
- fullScreenAct->setCheckable(true);\r
- connect(fullScreenAct, SIGNAL(triggered()), this, SLOT(ToggleFullScreen()));\r
+ //DasmAct = new QAction(tr("Disassembly"), this);\r
+ //DasmAct->setStatusTip(tr("Shows the disassembly window"));\r
+ //connect(DasmAct, SIGNAL(triggered()), this, SLOT(ShowDasmWin()));\r
\r
- // Debugger Actions\r
- if (vjs.softTypeDebugger)\r
- {\r
+ // Exception vector table window\r
exceptionVectorTableBrowseAct = new QAction(QIcon(""), tr("Exception Vector Table"), this);\r
exceptionVectorTableBrowseAct->setStatusTip(tr("Shows all Exception Vector Table browser window"));\r
connect(exceptionVectorTableBrowseAct, SIGNAL(triggered()), this, SLOT(ShowExceptionVectorTableBrowserWin()));\r
\r
+ // All watch variables window\r
allWatchBrowseAct = new QAction(QIcon(":/res/debug-watch.png"), tr("All Watch"), this);\r
allWatchBrowseAct->setStatusTip(tr("Shows all Watch browser window"));\r
connect(allWatchBrowseAct, SIGNAL(triggered()), this, SLOT(ShowAllWatchBrowserWin()));\r
\r
+ // Local variables window\r
LocalBrowseAct = new QAction(QIcon(":/res/debug-local.png"), tr("Locals"), this);\r
LocalBrowseAct->setStatusTip(tr("Shows Locals browser window"));\r
connect(LocalBrowseAct, SIGNAL(triggered()), this, SLOT(ShowLocalBrowserWin()));\r
\r
+ // Heap (memory) allocation window\r
heapallocatorBrowseAct = new QAction(QIcon(""), tr("Heap allocator"), this);\r
heapallocatorBrowseAct->setStatusTip(tr("Shows the heap allocator browser window"));\r
connect(heapallocatorBrowseAct, SIGNAL(triggered()), this, SLOT(ShowHeapAllocatorBrowserWin()));\r
\r
+ // Call stack window\r
CallStackBrowseAct = new QAction(QIcon(":/res/debug-callstack.png"), tr("Call Stack"), this);\r
CallStackBrowseAct->setStatusTip(tr("Shows Call Stack browser window"));\r
connect(CallStackBrowseAct, SIGNAL(triggered()), this, SLOT(ShowCallStackBrowserWin()));\r
\r
+ // Cart files list\r
+ CartFilesListAct = new QAction(QIcon(""), tr("Directory and files"), this);\r
+ CartFilesListAct->setStatusTip(tr("List of the files in the cartridge's directory structure"));\r
+ connect(CartFilesListAct, SIGNAL(triggered()), this, SLOT(ShowCartFilesListWin()));\r
+\r
+ // Memory windows\r
mem1BrowseAct = (QAction **)calloc(vjs.nbrmemory1browserwindow, sizeof(QAction));\r
QSignalMapper *signalMapper = new QSignalMapper(this);\r
#ifdef _MSC_VER\r
sprintf(MB, "Memory %i", (unsigned int)(i+1));\r
mem1BrowseAct[i] = new QAction(QIcon(":/res/debug-memory.png"), tr(MB), this);\r
mem1BrowseAct[i]->setStatusTip(tr("Shows a Jaguar memory browser window"));\r
- //mem1BrowseAct[i]->\r
- //connect(mem1BrowseAct[0], SIGNAL(triggered()), this, SLOT(ShowMemory1BrowserWin(size_t(0))));\r
connect(mem1BrowseAct[i], SIGNAL(triggered()), signalMapper, SLOT(map()));\r
signalMapper->setMapping(mem1BrowseAct[i], (int)i);\r
connect(signalMapper, SIGNAL(mapped(int)), this, SLOT(ShowMemory1BrowserWin(int)));\r
}\r
}\r
\r
- // Debugger Browser Actions\r
+ // Memory browser window action\r
memBrowseAct = new QAction(QIcon(":/res/tool-memory.png"), tr("Memory Browser"), this);\r
memBrowseAct->setStatusTip(tr("Shows the Jaguar memory browser window"));\r
-// memBrowseAct->setCheckable(true);\r
connect(memBrowseAct, SIGNAL(triggered()), this, SLOT(ShowMemoryBrowserWin()));\r
\r
+ // Stack browser window action\r
stackBrowseAct = new QAction(QIcon(":/res/tool-stack.png"), tr("Stack Browser"), this);\r
stackBrowseAct->setStatusTip(tr("Shows the Jaguar stack browser window"));\r
- // memBrowseAct->setCheckable(true);\r
connect(stackBrowseAct, SIGNAL(triggered()), this, SLOT(ShowStackBrowserWin()));\r
\r
+ // CPUs (M68000, GPU & DSP browser window action\r
cpuBrowseAct = new QAction(QIcon(":/res/tool-cpu.png"), tr("CPU Browser"), this);\r
cpuBrowseAct->setStatusTip(tr("Shows the Jaguar CPU browser window"));\r
-// memBrowseAct->setCheckable(true);\r
connect(cpuBrowseAct, SIGNAL(triggered()), this, SLOT(ShowCPUBrowserWin()));\r
\r
+ // OP browser window action\r
opBrowseAct = new QAction(QIcon(":/res/tool-op.png"), tr("OP Browser"), this);\r
opBrowseAct->setStatusTip(tr("Shows the Jaguar OP browser window"));\r
-// memBrowseAct->setCheckable(true);\r
connect(opBrowseAct, SIGNAL(triggered()), this, SLOT(ShowOPBrowserWin()));\r
\r
+ // M68000 disassembly browser window\r
m68kDasmBrowseAct = new QAction(QIcon(":/res/tool-68k-dis.png"), tr("68K Listing Browser"), this);\r
m68kDasmBrowseAct->setStatusTip(tr("Shows the 68K disassembly browser window"));\r
-// memBrowseAct->setCheckable(true);\r
connect(m68kDasmBrowseAct, SIGNAL(triggered()), this, SLOT(ShowM68KDasmBrowserWin()));\r
\r
+ // HW registers browser window\r
+ hwRegsBrowseAct = new QAction(QIcon(":/res/tool-hw-regs.png"), tr("HW Registers Browser"), this);\r
+ hwRegsBrowseAct->setStatusTip(tr("Shows the HW registers browser window"));\r
+ connect(hwRegsBrowseAct, SIGNAL(triggered()), this, SLOT(ShowHWRegsBrowserWin()));\r
+\r
+ // Risc (DSP / GPU) disassembly browser window\r
riscDasmBrowseAct = new QAction(QIcon(":/res/tool-risc-dis.png"), tr("RISC Listing Browser"), this);\r
riscDasmBrowseAct->setStatusTip(tr("Shows the RISC disassembly browser window"));\r
-// memBrowseAct->setCheckable(true);\r
connect(riscDasmBrowseAct, SIGNAL(triggered()), this, SLOT(ShowRISCDasmBrowserWin()));\r
\r
- if (vjs.softTypeDebugger)\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
-\r
- //DasmAct = new QAction(tr("Disassembly"), this);\r
- //DasmAct->setStatusTip(tr("Shows the disassembly window"));\r
- //connect(DasmAct, SIGNAL(triggered()), this, SLOT(ShowDasmWin()));\r
- }\r
-\r
// Misc. connections...\r
connect(filePickWin, SIGNAL(RequestLoad(QString)), this, SLOT(LoadSoftware(QString)));\r
connect(filePickWin, SIGNAL(FilePickerHiding()), this, SLOT(Unpause()));\r
fileMenu->addSeparator();\r
fileMenu->addAction(quitAppAct);\r
\r
+ // Alpine and debugger menus\r
if (vjs.hardwareTypeAlpine || vjs.softTypeDebugger)\r
{\r
+ // Create debug menu\r
debugMenu = menuBar()->addMenu(tr("&Debug"));\r
+\r
+ // Create debugger menu\r
if (vjs.softTypeDebugger)\r
{\r
+ // Create view menu\r
+ viewMenu = menuBar()->addMenu(tr("&View"));\r
+\r
+ // Cart menu\r
+ viewCartMenu = viewMenu->addMenu(tr("&Cartridge"));\r
+ viewCartMenu->addAction(CartFilesListAct);\r
+#if 0\r
+ viewCartMenu->addSeparator();\r
+ viewCartMenu->addAction(CartStreamsAct);\r
+#endif\r
+\r
+ // Windows menu\r
debugWindowsMenu = debugMenu->addMenu(tr("&Windows"));\r
+ debugWindowsMenu->addAction(BreakpointsAct);\r
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
debugWindowsBrowsesMenu->addAction(opBrowseAct);\r
debugWindowsBrowsesMenu->addAction(m68kDasmBrowseAct);\r
debugWindowsBrowsesMenu->addAction(riscDasmBrowseAct);\r
+ debugWindowsBrowsesMenu->addAction(hwRegsBrowseAct);\r
debugMenu->addSeparator();\r
debugMenu->addAction(pauseAct);\r
debugMenu->addAction(frameAdvanceAct);\r
debugMenu->addSeparator();\r
debugMenu->addAction(traceStepIntoAct);\r
debugMenu->addAction(traceStepOverAct);\r
-#if 0\r
debugMenu->addSeparator();\r
debugNewBreakpointMenu = debugMenu->addMenu(tr("&New Breakpoint"));\r
- debugNewBreakpointMenu->addAction(newBreakpointFunctionAct);\r
+ debugNewBreakpointMenu->addAction(newFunctionBreakpointAct);\r
+ debugMenu->addAction(deleteAllBreakpointsAct);\r
+ debugMenu->addAction(disableAllBreakpointsAct);\r
+ debugMenu->addSeparator();\r
+ debugMenu->addAction(saveDumpAsAct);\r
+#if 0\r
+ debugMenu->addSeparator();\r
+ debugMenu->addAction(DasmAct);\r
#endif\r
- //debugMenu->addSeparator();\r
- //debugMenu->addAction(DasmAct);\r
}\r
else\r
{\r
+ // Create alpine menu\r
debugMenu->addAction(memBrowseAct);\r
debugMenu->addAction(stackBrowseAct);\r
debugMenu->addAction(cpuBrowseAct);\r
debugMenu->addAction(opBrowseAct);\r
debugMenu->addAction(m68kDasmBrowseAct);\r
debugMenu->addAction(riscDasmBrowseAct);\r
+ debugMenu->addAction(hwRegsBrowseAct);\r
}\r
}\r
\r
+ // Help menus\r
helpMenu = menuBar()->addMenu(tr("&Help"));\r
helpMenu->addAction(helpAct);\r
helpMenu->addAction(aboutAct);\r
debuggerbar->addSeparator();\r
debuggerbar->addAction(traceStepIntoAct);\r
debuggerbar->addAction(traceStepOverAct);\r
+ debuggerbar->addSeparator();\r
+ debuggerbar->addAction(BreakpointsAct);\r
}\r
\r
if (vjs.hardwareTypeAlpine)\r
debugbar->addAction(opBrowseAct);\r
debugbar->addAction(m68kDasmBrowseAct);\r
debugbar->addAction(riscDasmBrowseAct);\r
+ debugbar->addAction(hwRegsBrowseAct);\r
}\r
\r
// Add actions to the main window, as hiding widgets with them\r
}\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
// Just in case we crash before a clean exit...\r
WriteSettings();\r
\r
- DebuggerRefreshWindows();\r
+ RefreshWindows();\r
}\r
\r
\r
// Otherwise, run the Jaguar simulation\r
HandleGamepads();\r
JaguarExecuteNew();\r
- if (!vjs.softTypeDebugger)\r
+ //if (!vjs.softTypeDebugger)\r
videoWidget->HandleMouseHiding();\r
\r
static uint32_t refresh = 0;\r
// Do autorefresh on debug windows\r
// Have to be careful, too much causes the emulator to slow way down!\r
+ if (refresh == vjs.refresh)\r
+ {\r
if (vjs.hardwareTypeAlpine || vjs.softTypeDebugger)\r
{\r
- if (refresh == vjs.refresh)\r
- {\r
AlpineRefreshWindows();\r
//memBrowseWin->RefreshContents();\r
//cpuBrowseWin->RefreshContents();\r
+ }\r
+ CommonRefreshWindows();\r
refresh = 0;\r
}\r
else\r
+ {\r
refresh++;\r
}\r
}\r
\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
}\r
\r
\r
+// Toggle the power state, it can be either on or off\r
void MainWin::TogglePowerState(void)\r
{\r
powerButtonOn = !powerButtonOn;\r
if (!powerButtonOn)\r
{\r
// Restore the mouse pointer, if hidden:\r
- if (!vjs.softTypeDebugger)\r
+ //if (!vjs.softTypeDebugger)\r
+ {\r
videoWidget->CheckAndRestoreMouseCursor();\r
+ }\r
+\r
useCDAct->setDisabled(false);\r
palAct->setDisabled(false);\r
ntscAct->setDisabled(false);\r
pauseAct->setChecked(false);\r
pauseAct->setDisabled(true);\r
showUntunedTankCircuit = true;\r
+\r
DACPauseAudioThread();\r
- // This is just in case the ROM we were playing was in a narrow or wide\r
- // field mode, so the untuned tank sim doesn't look wrong. :-)\r
+ // This is just in case the ROM we were playing was in a narrow or wide field mode, so the untuned tank sim doesn't look wrong. :-)\r
TOMReset();\r
\r
if (plzDontKillMyComputer)\r
{\r
- //if (!vjs.softTypeDebugger)\r
+ // We have to do it line by line, because the texture pitch is not the same as the picture buffer's pitch.\r
+ for (uint32_t y = 0; y < videoWidget->rasterHeight; y++)\r
{\r
- // We have to do it line by line, because the texture pitch is not\r
- // the same as the picture buffer's pitch.\r
- for (uint32_t y = 0; y < videoWidget->rasterHeight; y++)\r
+ if (vjs.hardwareTypeNTSC)\r
{\r
- if (vjs.hardwareTypeNTSC)\r
- memcpy(videoWidget->buffer + (y * videoWidget->textureWidth), testPattern + (y * VIRTUAL_SCREEN_WIDTH), VIRTUAL_SCREEN_WIDTH * sizeof(uint32_t));\r
- else\r
- memcpy(videoWidget->buffer + (y * videoWidget->textureWidth), testPattern2 + (y * VIRTUAL_SCREEN_WIDTH), VIRTUAL_SCREEN_WIDTH * sizeof(uint32_t));\r
+ memcpy(videoWidget->buffer + (y * videoWidget->textureWidth), testPattern + (y * VIRTUAL_SCREEN_WIDTH), VIRTUAL_SCREEN_WIDTH * sizeof(uint32_t));\r
+ }\r
+ else\r
+ {\r
+ memcpy(videoWidget->buffer + (y * videoWidget->textureWidth), testPattern2 + (y * VIRTUAL_SCREEN_WIDTH), VIRTUAL_SCREEN_WIDTH * sizeof(uint32_t));\r
}\r
}\r
}\r
\r
WriteLog("GUI: Resetting Jaguar...\n");\r
JaguarReset();\r
+ DebuggerReset();\r
+ CommonReset();\r
DebuggerResetWindows();\r
+ CommonResetWindows();\r
DACPauseAudioThread(false);\r
}\r
}\r
\r
\r
+// Toggle the emulator state, it can be either on or off\r
void MainWin::ToggleRunState(void)\r
{\r
startM68KTracing = running;\r
running = !running;\r
\r
+ // Pause mode\r
if (!running)\r
{\r
+ // Set action buttons for the pause mode\r
frameAdvanceAct->setDisabled(false);\r
pauseAct->setChecked(true);\r
pauseAct->setDisabled(false);\r
{\r
// Restore the mouse pointer, if hidden:\r
videoWidget->CheckAndRestoreMouseCursor();\r
- // frameAdvanceAct->setDisabled(false);\r
\r
for (uint32_t i = 0; i < (uint32_t)(videoWidget->textureWidth * 256); i++)\r
{\r
}\r
\r
videoWidget->updateGL();\r
+ //vjs.softTypeDebugger ? VideoOutputWin->RefreshContents(videoWidget) : NULL;\r
\r
cpuBrowseWin->HoldBPM();\r
cpuBrowseWin->HandleBPMContinue();\r
- DebuggerRefreshWindows();\r
+ RefreshWindows();\r
}\r
}\r
else\r
traceStepIntoAct->setDisabled(true);\r
traceStepOverAct->setDisabled(true);\r
restartAct->setDisabled(true);\r
+ BreakpointsWin->RefreshContents();\r
}\r
\r
cpuBrowseWin->UnholdBPM();\r
}\r
\r
+ emuStatusWin->ResetM68KCycles();\r
// Pause/unpause any running/non-running threads...\r
DACPauseAudioThread(!running);\r
}\r
running = false; // Prevent bad things(TM) from happening...\r
pauseForFileSelector = false; // Reset the file selector pause flag\r
\r
+ // Setup BIOS in his own dedicated Jaguar memory\r
#ifndef NEWMODELSBIOSHANDLER\r
uint8_t * biosPointer = jaguarBootROM;\r
\r
SelectBIOS(vjs.biosType);\r
#endif\r
\r
+ // Turn 'on' the power to initialize the Jaguar\r
powerAct->setDisabled(false);\r
powerAct->setChecked(true);\r
powerButtonOn = false;\r
\r
// We have to load our software *after* the Jaguar RESET\r
cartridgeLoaded = JaguarLoadFile(file.toUtf8().data());\r
- SET32(jaguarMainRAM, 0, vjs.DRAM_size); // Set top of stack...\r
+ SET32(jaguarMainRAM, 0, vjs.DRAM_size); // Set stack in the M68000's Reset SP\r
\r
// This is icky because we've already done it\r
// it gets worse :-P\r
{\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
}\r
else\r
{\r
- // Prevent the Alpine mode to crash in case of software without a start address\r
- if (vjs.hardwareTypeAlpine && !jaguarRunAddress)\r
+ // Prevent the launch in case of software without a start address and without BIOS presence\r
+ if (!vjs.useJaguarBIOS && !jaguarRunAddress)\r
{\r
ToggleRunState();\r
}\r
}\r
\r
+ // Display the Atari Jaguar software which is running\r
if ((!vjs.hardwareTypeAlpine || !vjs.softTypeDebugger) && !loadAndGo && jaguarRunAddress)\r
{\r
QString newTitle = QString("Virtual Jaguar " VJ_RELEASE_VERSION " Rx - Now playing: %1").arg(filePickWin->GetSelectedPrettyName());\r
}\r
\r
\r
-//\r
-void MainWin::NewBreakpointFunction(void)\r
+// Open, or display, the breakpoints list window\r
+void MainWin::ShowBreakpointsWin(void)\r
+{\r
+ BreakpointsWin->show();\r
+ BreakpointsWin->RefreshContents();\r
+}\r
+\r
+\r
+// Delete all breakpoints\r
+void MainWin::DeleteAllBreakpoints(void)\r
+{\r
+ cpuBrowseWin->ResetBPM();\r
+ m68k_brk_reset();\r
+ ShowBreakpointsWin();\r
+}\r
+\r
+\r
+// Disable all breakpoints\r
+void MainWin::DisableAllBreakpoints(void)\r
{\r
- //brkWin->show();\r
- //brkWin->RefreshContents();\r
+ cpuBrowseWin->DisableBPM();\r
+ m68k_brk_disable();\r
+ ShowBreakpointsWin();\r
+}\r
+\r
+\r
+// 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
+\r
+\r
+// Display list of files found in cartridge\r
+void MainWin::ShowCartFilesListWin(void)\r
+{\r
+ CartFilesListWin->show();\r
+ CartFilesListWin->RefreshContents();\r
+}\r
+\r
+\r
+// Display the save dump pickup file\r
+void MainWin::ShowSaveDumpAsWin(void)\r
+{\r
+ SaveDumpAsWin->show();\r
}\r
\r
\r
// Step Into trace\r
void MainWin::DebuggerTraceStepInto(void)\r
{\r
- JaguarStepInto();\r
+ if (SourcesWin->isVisible() && SourcesWin->GetTraceStatus())\r
+ {\r
+ while (!SourcesWin->CheckChangeLine())\r
+ {\r
+ emuStatusWin->UpdateM68KCycles(JaguarStepInto());\r
+ }\r
+ }\r
+ else\r
+ {\r
+ emuStatusWin->UpdateM68KCycles(JaguarStepInto());\r
+ }\r
+\r
videoWidget->updateGL();\r
- DebuggerRefreshWindows();\r
+ RefreshWindows();\r
#ifdef _MSC_VER\r
#pragma message("Warning: !!! Need to verify the Step Into function !!!")\r
#else\r
}\r
\r
\r
-// Restart\r
+// Restart the Jaguar executable\r
void MainWin::DebuggerRestart(void)\r
{\r
#if 1\r
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
-\r
+ m68k_brk_hitcounts_reset();\r
+ emuStatusWin->ResetM68KCycles();\r
+ bpmHitCounts = 0;\r
DebuggerResetWindows();\r
- DebuggerRefreshWindows();\r
+ CommonResetWindows();\r
+ SourcesWin->Init();\r
+ RefreshWindows();\r
#ifdef _MSC_VER\r
#pragma message("Warning: !!! Need to verify the Restart function !!!")\r
#else\r
// 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
+ emuStatusWin->UpdateM68KCycles(JaguarStepOver(0));\r
+ }\r
+ }\r
+ else\r
+ {\r
+ emuStatusWin->UpdateM68KCycles(JaguarStepOver(0));\r
+ }\r
+\r
videoWidget->updateGL();\r
- DebuggerRefreshWindows();\r
+ RefreshWindows();\r
#ifdef _MSC_VER\r
#pragma message("Warning: !!! Need to verify the Step Over function !!!")\r
#else\r
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
}\r
\r
\r
+// Show the OP browser window\r
void MainWin::ShowOPBrowserWin(void)\r
{\r
opBrowseWin->show();\r
}\r
\r
\r
+// Show the HW registers browser window\r
+void MainWin::ShowHWRegsBrowserWin(void)\r
+{\r
+ hwRegsBrowseWin->show();\r
+ hwRegsBrowseWin->RefreshContents();\r
+}\r
+\r
+\r
+// Show the M68K browser window\r
void MainWin::ShowM68KDasmBrowserWin(void)\r
{\r
m68kDasmBrowseWin->show();\r
\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
+// It doesn't apply in debugger mode as we use this window to display disassembly\r
void MainWin::ResizeMainWindow(void)\r
{\r
if (!vjs.softTypeDebugger)\r
{\r
- videoWidget->setFixedSize(zoomLevel * VIRTUAL_SCREEN_WIDTH,\r
- zoomLevel * (vjs.hardwareTypeNTSC ? VIRTUAL_SCREEN_HEIGHT_NTSC : VIRTUAL_SCREEN_HEIGHT_PAL));\r
+ videoWidget->setFixedSize(zoomLevel * VIRTUAL_SCREEN_WIDTH, zoomLevel * (vjs.hardwareTypeNTSC ? VIRTUAL_SCREEN_HEIGHT_NTSC : VIRTUAL_SCREEN_HEIGHT_PAL));\r
\r
// Show the test pattern if user requested plzDontKillMyComputer mode\r
if (!powerButtonOn && plzDontKillMyComputer)\r
for (uint32_t y = 0; y < videoWidget->rasterHeight; y++)\r
{\r
if (vjs.hardwareTypeNTSC)\r
+ {\r
memcpy(videoWidget->buffer + (y * videoWidget->textureWidth), testPattern + (y * VIRTUAL_SCREEN_WIDTH), VIRTUAL_SCREEN_WIDTH * sizeof(uint32_t));\r
+ }\r
else\r
+ {\r
memcpy(videoWidget->buffer + (y * videoWidget->textureWidth), testPattern2 + (y * VIRTUAL_SCREEN_WIDTH), VIRTUAL_SCREEN_WIDTH * sizeof(uint32_t));\r
+ }\r
}\r
}\r
\r
// Read settings from the Debugger mode\r
settings.beginGroup("debugger");\r
strcpy(vjs.debuggerROMPath, settings.value("DefaultROM", "").toString().toUtf8().data());\r
+ strcpy(vjs.sourcefilesearchPaths, settings.value("SourceFileSearchPaths", "").toString().toUtf8().data());\r
vjs.nbrdisasmlines = settings.value("NbrDisasmLines", 32).toUInt();\r
vjs.disasmopcodes = settings.value("DisasmOpcodes", true).toBool();\r
vjs.displayHWlabels = settings.value("DisplayHWLabels", true).toBool();\r
vjs.displayFullSourceFilename = settings.value("displayFullSourceFilename", true).toBool();\r
+ vjs.ELFSectionsCheck = settings.value("ELFSectionsCheck", false).toBool();\r
vjs.nbrmemory1browserwindow = settings.value("NbrMemory1BrowserWindow", MaxMemory1BrowserWindow).toUInt();\r
settings.endGroup();\r
\r
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
\r
// Write important settings to the log file\r
WriteLog("MainWin: Paths\n");\r
- WriteLog(" EEPROMPath = \"%s\"\n", vjs.EEPROMPath);\r
- WriteLog(" ROMPath = \"%s\"\n", vjs.ROMPath);\r
- WriteLog(" AlpineROMPath = \"%s\"\n", vjs.alpineROMPath);\r
- WriteLog("DebuggerROMPath = \"%s\"\n", vjs.debuggerROMPath);\r
- WriteLog(" absROMPath = \"%s\"\n", vjs.absROMPath);\r
- WriteLog(" Pipelined DSP = %s\n", (vjs.usePipelinedDSP ? "ON" : "off"));\r
+ WriteLog(" EEPROMPath = \"%s\"\n", vjs.EEPROMPath);\r
+ WriteLog(" ROMPath = \"%s\"\n", vjs.ROMPath);\r
+ WriteLog(" AlpineROMPath = \"%s\"\n", vjs.alpineROMPath);\r
+ WriteLog(" DebuggerROMPath = \"%s\"\n", vjs.debuggerROMPath);\r
+ WriteLog(" absROMPath = \"%s\"\n", vjs.absROMPath);\r
+ WriteLog(" ScreenshotsPath = \"%s\"\n", vjs.screenshotPath);\r
+ WriteLog("SourceFileSearchPaths = \"%s\"\n", vjs.sourcefilesearchPaths);\r
+ WriteLog("MainWin: Misc.\n");\r
+ WriteLog(" Pipelined DSP = %s\n", (vjs.usePipelinedDSP ? "ON" : "off"));\r
\r
#if 0\r
// Keybindings in order of U, D, L, R, C, B, A, Op, Pa, 0-9, #, *\r
WriteLog("Read setting = Done\n");\r
\r
ReadProfiles(&settings);\r
+ DBGManager_SourceFileSearchPathsSet(vjs.sourcefilesearchPaths);\r
}\r
\r
\r
// Video output information\r
zoomLevel = settings.value("zoom", 2).toInt();\r
\r
+// Emulator status UI information\r
+ pos = settings.value("emuStatusWinPos", QPoint(200, 200)).toPoint();\r
+ emuStatusWin->move(pos);\r
+ settings.value("emuStatusWinIsVisible", false).toBool() ? ShowEmuStatusWin() : void();\r
+ \r
// Alpine debug UI information (also needed by the Debugger)\r
if (vjs.hardwareTypeAlpine || vjs.softTypeDebugger)\r
{\r
size = settings.value("stackBrowseWinSize", QSize(400, 400)).toSize();\r
stackBrowseWin->resize(size);\r
\r
- // Emulator status UI information\r
- pos = settings.value("emuStatusWinPos", QPoint(200, 200)).toPoint();\r
- emuStatusWin->move(pos);\r
- settings.value("emuStatusWinIsVisible", false).toBool() ? ShowEmuStatusWin() : void();\r
-\r
// OP (Object Processor) UI information\r
pos = settings.value("opBrowseWinPos", QPoint(200, 200)).toPoint();\r
opBrowseWin->move(pos);\r
size = settings.value("opBrowseWinSize", QSize(400, 400)).toSize();\r
opBrowseWin->resize(size);\r
\r
+ // HW registers UI information\r
+ pos = settings.value("hwRegsBrowseWinPos", QPoint(200, 200)).toPoint();\r
+ hwRegsBrowseWin->move(pos);\r
+ settings.value("hwRegsBrowseWinIsVisible", false).toBool() ? ShowHWRegsBrowserWin() : void();\r
+ size = settings.value("hwRegsBrowseWinSize", QSize(400, 400)).toSize();\r
+ hwRegsBrowseWin->resize(size);\r
+\r
// RISC disassembly UI information\r
pos = settings.value("riscDasmBrowseWinPos", QPoint(200, 200)).toPoint();\r
riscDasmBrowseWin->move(pos);\r
size = settings.value("CallStackBrowseWinSize", QSize(400, 400)).toSize();\r
CallStackBrowseWin->resize(size);\r
\r
+ // cartridge directory and files UI information\r
+ pos = settings.value("CartFilesListWinPos", QPoint(200, 200)).toPoint();\r
+ CartFilesListWin->move(pos);\r
+ settings.value("CartFilesListWinIsVisible", false).toBool() ? ShowCartFilesListWin() : void();\r
+ size = settings.value("CartFilesListWinSize", QSize(400, 400)).toSize();\r
+ CartFilesListWin->resize(size);\r
+\r
+ // Save dump UI information\r
+ pos = settings.value("SaveDumpAsWinPos", QPoint(200, 200)).toPoint();\r
+ SaveDumpAsWin->move(pos);\r
+ settings.value("SaveDumpAsWinIsVisible", false).toBool() ? ShowSaveDumpAsWin() : void();\r
+ 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
+ settings.value("BreakpointsWinIsVisible", false).toBool() ? ShowBreakpointsWin() : void();\r
+ size = settings.value("BreakpointsWinSize", QSize(400, 400)).toSize();\r
+ BreakpointsWin->resize(size);\r
+ // New function breakpoint UI information\r
+ pos = settings.value("NewFunctionBreakpointWinPos", QPoint(200, 200)).toPoint();\r
+ NewFunctionBreakpointWin->move(pos);\r
+ settings.value("NewFunctionBreakpointWinIsVisible", false).toBool() ? ShowNewFunctionBreakpointWin() : void();\r
+ size = settings.value("NewFunctionBreakpointWinSize", QSize(400, 400)).toSize();\r
+ NewFunctionBreakpointWin->resize(size);\r
+\r
// Memories browser UI information\r
for (i = 0; i < vjs.nbrmemory1browserwindow; i++)\r
{\r
settings.setValue("jaguarModel", vjs.jaguarModel);\r
settings.setValue("biosType", vjs.biosType);\r
settings.setValue("useFastBlitter", vjs.useFastBlitter);\r
- settings.setValue("JagBootROM", vjs.jagBootPath);\r
- settings.setValue("CDBootROM", vjs.CDBootPath);\r
+ //settings.setValue("JagBootROM", vjs.jagBootPath);\r
+ //settings.setValue("CDBootROM", vjs.CDBootPath);\r
settings.setValue("EEPROMs", vjs.EEPROMPath);\r
settings.setValue("ROMs", vjs.ROMPath);\r
settings.setValue("Screenshots", vjs.screenshotPath);\r
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
settings.beginGroup("debugger");\r
settings.setValue("DisplayHWLabels", vjs.displayHWlabels);\r
- settings.setValue("NbrDisasmLines", vjs.nbrdisasmlines);\r
+ settings.setValue("NbrDisasmLines", (qulonglong) vjs.nbrdisasmlines);\r
settings.setValue("DisasmOpcodes", vjs.disasmopcodes);\r
settings.setValue("displayFullSourceFilename", vjs.displayFullSourceFilename);\r
+ settings.setValue("ELFSectionsCheck", vjs.ELFSectionsCheck);\r
settings.setValue("NbrMemory1BrowserWindow", (unsigned int)vjs.nbrmemory1browserwindow);\r
settings.setValue("DefaultROM", vjs.debuggerROMPath);\r
+ settings.setValue("SourceFileSearchPaths", vjs.sourcefilesearchPaths);\r
settings.endGroup();\r
\r
// Write settings from the Keybindings\r
#endif\r
\r
WriteProfiles(&settings);\r
+ DBGManager_SourceFileSearchPathsSet(vjs.sourcefilesearchPaths);\r
}\r
\r
\r
// Video output information\r
settings.setValue("zoom", zoomLevel);\r
\r
+ // Common UI information\r
+ settings.setValue("emuStatusWinPos", emuStatusWin->pos());\r
+ settings.setValue("emuStatusWinIsVisible", emuStatusWin->isVisible());\r
+ \r
// Alpine debug UI information (also needed by the Debugger)\r
if (vjs.hardwareTypeAlpine || vjs.softTypeDebugger)\r
{\r
settings.setValue("stackBrowseWinPos", stackBrowseWin->pos());\r
settings.setValue("stackBrowseWinIsVisible", stackBrowseWin->isVisible());\r
settings.setValue("stackBrowseWinSize", stackBrowseWin->size());\r
- settings.setValue("emuStatusWinPos", emuStatusWin->pos());\r
- settings.setValue("emuStatusWinIsVisible", emuStatusWin->isVisible());\r
settings.setValue("opBrowseWinPos", opBrowseWin->pos());\r
settings.setValue("opBrowseWinIsVisible", opBrowseWin->isVisible());\r
settings.setValue("opBrowseWinSize", opBrowseWin->size());\r
+ settings.setValue("hwRegsBrowseWinPos", hwRegsBrowseWin->pos());\r
+ settings.setValue("hwRegsBrowseWinIsVisible", hwRegsBrowseWin->isVisible());\r
+ settings.setValue("hwRegsBrowseWinSize", hwRegsBrowseWin->size());\r
settings.setValue("riscDasmBrowseWinPos", riscDasmBrowseWin->pos());\r
settings.setValue("riscDasmBrowseWinIsVisible", riscDasmBrowseWin->isVisible());\r
settings.setValue("m68kDasmBrowseWinPos", m68kDasmBrowseWin->pos());\r
settings.setValue("CallStackBrowseWinPos", CallStackBrowseWin->pos());\r
settings.setValue("CallStackBrowseWinIsVisible", CallStackBrowseWin->isVisible());\r
settings.setValue("CallStackBrowseWinSize", CallStackBrowseWin->size());\r
+ settings.setValue("BreakpointsWinPos", BreakpointsWin->pos());\r
+ settings.setValue("BreakpointsWinIsVisible", BreakpointsWin->isVisible());\r
+ settings.setValue("BreakpointsWinSize", BreakpointsWin->size());\r
+ settings.setValue("NewFunctionBreakpointWinPos", NewFunctionBreakpointWin->pos());\r
+ settings.setValue("NewFunctionBreakpointWinIsVisible", NewFunctionBreakpointWin->isVisible());\r
+ settings.setValue("NewFunctionBreakpointWinSize", NewFunctionBreakpointWin->size());\r
+ settings.setValue("CartFilesListWinPos", CartFilesListWin->pos());\r
+ settings.setValue("CartFilesListWinIsVisible", CartFilesListWin->isVisible());\r
+ settings.setValue("CartFilesListWinSize", CartFilesListWin->size());\r
+ 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
sprintf(mem1Name, "mem1BrowseWinPos[%i]", (unsigned int)i);\r
cpuBrowseWin->RefreshContents();\r
memBrowseWin->RefreshContents();\r
stackBrowseWin->RefreshContents();\r
- emuStatusWin->RefreshContents();\r
opBrowseWin->RefreshContents();\r
riscDasmBrowseWin->RefreshContents();\r
m68kDasmBrowseWin->RefreshContents();\r
+ hwRegsBrowseWin->RefreshContents();\r
+}\r
+\r
+\r
+// \r
+void MainWin::CommonResetWindows(void)\r
+{\r
+}\r
+\r
+\r
+// Reset common\r
+void MainWin::CommonReset(void)\r
+{\r
+}\r
+\r
+\r
+// Reset soft debugger\r
+void MainWin::DebuggerReset(void)\r
+{\r
+ if (vjs.softTypeDebugger)\r
+ {\r
+ DeleteAllBreakpoints();\r
+ }\r
}\r
\r
\r
FilesrcListWin->Reset();\r
allWatchBrowseWin->Reset();\r
heapallocatorBrowseWin->Reset();\r
-\r
+ BreakpointsWin->Reset();\r
+ CartFilesListWin->Reset();\r
+ SourcesWin->Reset();\r
//ResetAlpineWindows();\r
}\r
}\r
\r
\r
+// Refresh common windows\r
+void MainWin::CommonRefreshWindows(void)\r
+{\r
+ emuStatusWin->RefreshContents();\r
+}\r
+\r
+\r
+// Refresh view windows\r
+void MainWin::ViewRefreshWindows(void)\r
+{\r
+ CartFilesListWin->RefreshContents();\r
+}\r
+\r
+\r
+// \r
+void MainWin::RefreshWindows(void)\r
+{\r
+ DebuggerRefreshWindows();\r
+ CommonRefreshWindows();\r
+}\r
+\r
+\r
// Refresh soft debugger & alpine debug windows\r
void MainWin::DebuggerRefreshWindows(void)\r
{\r
- size_t i;\r
-\r
if (vjs.softTypeDebugger)\r
{\r
+ //VideoOutputWin->RefreshContents(videoWidget);\r
FilesrcListWin->RefreshContents();\r
+ SourcesWin->RefreshContents();\r
m68kDasmWin->RefreshContents();\r
GPUDasmWin->RefreshContents();\r
DSPDasmWin->RefreshContents();\r
LocalBrowseWin->RefreshContents();\r
CallStackBrowseWin->RefreshContents();\r
heapallocatorBrowseWin->RefreshContents();\r
- for (i = 0; i < vjs.nbrmemory1browserwindow; i++)\r
+ BreakpointsWin->RefreshContents();\r
+ for (size_t i = 0; i < vjs.nbrmemory1browserwindow; i++)\r
{\r
mem1BrowseWin[i]->RefreshContents(i);\r
}\r
\r
AlpineRefreshWindows();\r
+ ViewRefreshWindows();\r
}\r
}\r
\r
\r
// Create screenshot\r
screenshot = videoWidget->grabFrameBuffer();\r
- screenshot.save(Text, "JPG", 100);\r
+ screenshot.save((char *)Text, "JPG", 100);\r
}\r
\r