-- ROM cartridge writing detection follow the alpine "allow writes to cartridge rom"'s flag check\r
-- Alert box will display a message with possibility to pass or not the breakpoint only if this is related to a 8 or 16 bits ROM access\r
8) Local variables window detects now if a variable is used or not by the code\r
-9) The address provided in the memory window is now verified to prevent crash\r
+9) The address provided in the debugger memory windows is now verified to prevent crash\r
-- Wrong address will be displayed in red\r
10) UI changes \r
-- Added new icons for the exit and status features\r
23) Added LEB128 decoding functions\r
-- It is used for the DWARF decoding information\r
24) Debugger support improvement\r
--- DWARF support for the enum type (partial), and subroutine type\r
+-- DWARF support for the enum type (partial), structure and subroutine type\r
-- Debugger can report variable's unsigned char value\r
25) UI modifications\r
-- Added a status bar, better status report & information display for the heap allocation window\r
-- Added better information display for the exception vectors table window, and added some missing vectors\r
-- Added a status bar, better status report & information display for the call stack window\r
-- Added a status bar, better status report & information display for the all watches window\r
+26) Added screenshot feature\r
+-- Not accessible in debugger mode\r
+-- Added screenshot editable path in the general tab, and a key binding\r
+27) Minor misspellings fixes\r
+28) DWARF source code directory path clean-up\r
+29) Added a source code files list viewer\r
+-- List comes from the DWARF information\r
+30) Check potential variables missing/incomplete description found in the DWARF information\r
+-- No crash involved but can help to reduce such as variables duplicate or the blank ones\r
+31) Added a sorting filter in the all watches window\r
+32) Improve source code file reading to avoid additional text/bytes reading\r
+33) Help & content texts updates\r
\r
Release 3 (13th November 2017)\r
------------------------------\r
5) Added ui, alpine and debugger groups in the settings\r
6) Added the possibility to erase settings\r
7) Added the --es-all, --es-ui, --es-alpine and --es-debugger options to erase specific settings\r
-8) Added a keybindings tab and adapted the configuration dialog tabs\r
--- User can modify the keybindings where appropriate\r
--- Keybindings UI is displayed based on the option used (--debugger, -- alpine)\r
+8) Added a key bindings tab and adapted the configuration dialog tabs\r
+-- User can modify the key bindings where appropriate\r
+-- Key bindings UI is displayed based on the option used (--debugger, -- alpine)\r
9) Fixed a crash, in Release mode, when the HW labels setting is turn on\r
10) Solved an interference between the HW labels setting and the one used by the debugger\r
-- The setting is now only the reference used\r
8) User needs to manualy check if the Atari Jaguar executable match his source code files\r
-- Otherwise, source code and assembly may not match or leads to instabilities\r
9) The emulator needs to be restarted in case of the following actions occur\r
--- Keybindings changes\r
+-- Key bindings changes\r
-- BIOS selection changes and without new executable load\r
10) In the case of a ROM cartridge writing, and with occuring breakpoint, the PC pointer will point at the next instruction and not at the instruction causing the breakpoint\r
11) Emulator will crash in case of wrong address value provided in the memory browser\r
12) The RAM access log is limited to the 2MB\r
+13) In various occasions, global variables may be duplicated or without name in the DWARF information\r
+-- It may come from the Vlink linker and/or GCC 7.1.0 or 8.2.0 compilation with -gdwarf-2 option\r
\r
Cosmetic / UX issues\r
====================\r
1) The SP (Stack) icon color backgound doesn't look similar with the other ones\r
2) The SP (Stack) browser size always open at a forced size no matter if the size has been changed\r
-3) Not every features have associated keybindings\r
+3) Not every features have associated key bindings\r
\r
Legacy issues/hints\r
===================\r
5) QT 5.5.1 library 64bits for VS 2015\r
6) QT 5.9.1 library 64bits for VS 2017\r
7) Zlib 1.2.8 library 64bits for VS 2015\r
-7) Zlib 1.2.11 library 64bits for VS 2017\r
-8) SDL 1.2.15 library 64bits for VS 2015/2017\r
-9) The original make files have been modified to follow the requirements and modifications\r
-10) The 'Rx' word has been added to the emulator name to make distinction with the official version\r
-11) The project source is set at https://github.com/djipi/Virtual-Jaguar-Rx\r
-12) GPLv3 file document has been renamed as LICENSE, to fit better the GitHub requirements\r
+8) Zlib 1.2.11 library 64bits for VS 2017\r
+9) SDL 1.2.15 library 64bits for VS 2015/2017\r
+10) The original make files have been modified to follow the requirements and modifications\r
+11) The 'Rx' word has been added to the emulator name to make distinction with the official version\r
+12) The project is set at https://github.com/djipi/Virtual-Jaguar-Rx\r
+13) GPLv3 file document has been renamed as LICENSE, to fit better the GitHub requirements\r
-- Text / License terms are the same\r
\r
\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 trace\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
+ //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
- 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
+ //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
- // Debugger Actions\r
- if (vjs.softTypeDebugger)\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
+ // 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
+ // 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
+ // 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
}\r
}\r
\r
+ // Help menus\r
helpMenu = menuBar()->addMenu(tr("&Help"));\r
helpMenu->addAction(helpAct);\r
helpMenu->addAction(aboutAct);\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
{\r
// Restore the mouse pointer, if hidden:\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
\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
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
#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
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(" Pipelined DSP = %s\n", (vjs.usePipelinedDSP ? "ON" : "off"));\r
\r
#if 0\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
\r
// Create screenshot\r
screenshot = videoWidget->grabFrameBuffer();\r
- screenshot.save(Text, "JPG", 100);\r
+ screenshot.save((char *)Text, "JPG", 100);\r
}\r
\r