#include "SDL.h"
#include "app.h"
-#include "glwidget.h"
#include "about.h"
-#include "help.h"
-#include "settings.h"
-#include "filepicker.h"
#include "configdialog.h"
+#include "filepicker.h"
+#include "gamepad.h"
#include "generaltab.h"
+#include "glwidget.h"
+#include "help.h"
+#include "settings.h"
#include "version.h"
-#include "debug/memorybrowser.h"
#include "debug/cpubrowser.h"
+#include "debug/m68kdasmbrowser.h"
+#include "debug/memorybrowser.h"
+#include "debug/opbrowser.h"
+#include "debug/riscdasmbrowser.h"
#include "dac.h"
#include "jaguar.h"
filePickWin = new FilePickerWindow(this);
memBrowseWin = new MemoryBrowserWindow(this);
cpuBrowseWin = new CPUBrowserWindow(this);
+ opBrowseWin = new OPBrowserWindow(this);
+ m68kDasmBrowseWin = new M68KDasmBrowserWindow(this);
+ riscDasmBrowseWin = new RISCDasmBrowserWindow(this);
- videoWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
- setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
+ videoWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
+ setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
setUnifiedTitleAndToolBarOnMac(true);
palAct->setCheckable(true);
connect(palAct, SIGNAL(triggered()), this, SLOT(SetPAL()));
- blurAct = new QAction(QIcon(":/res/generic.png"), tr("Blur"), this);
+ blurAct = new QAction(QIcon(":/res/blur.png"), tr("Blur"), this);
blurAct->setStatusTip(tr("Sets OpenGL rendering to GL_NEAREST"));
blurAct->setCheckable(true);
connect(blurAct, SIGNAL(triggered()), this, SLOT(ToggleBlur()));
frameAdvanceAct->setShortcut(QKeySequence(tr("F7")));
connect(frameAdvanceAct, SIGNAL(triggered()), this, SLOT(FrameAdvance()));
- fullScreenAct = new QAction(QIcon(":/res/generic.png"), tr("F&ull Screen"), this);
+ fullScreenAct = new QAction(QIcon(":/res/fullscreen.png"), tr("F&ull Screen"), this);
fullScreenAct->setShortcut(QKeySequence(tr("F9")));
+ fullScreenAct->setCheckable(true);
connect(fullScreenAct, SIGNAL(triggered()), this, SLOT(ToggleFullScreen()));
// Debugger Actions
- memBrowseAct = new QAction(QIcon(":/res/generic.png"), tr("Memory Browser"), this);
+ memBrowseAct = new QAction(QIcon(":/res/tool-memory.png"), tr("Memory Browser"), this);
memBrowseAct->setStatusTip(tr("Shows the Jaguar memory browser window"));
// memBrowseAct->setCheckable(true);
connect(memBrowseAct, SIGNAL(triggered()), this, SLOT(ShowMemoryBrowserWin()));
- cpuBrowseAct = new QAction(QIcon(":/res/generic.png"), tr("CPU Browser"), this);
+ cpuBrowseAct = new QAction(QIcon(":/res/tool-cpu.png"), tr("CPU Browser"), this);
cpuBrowseAct->setStatusTip(tr("Shows the Jaguar CPU browser window"));
// memBrowseAct->setCheckable(true);
connect(cpuBrowseAct, SIGNAL(triggered()), this, SLOT(ShowCPUBrowserWin()));
+ opBrowseAct = new QAction(QIcon(":/res/tool-op.png"), tr("OP Browser"), this);
+ opBrowseAct->setStatusTip(tr("Shows the Jaguar OP browser window"));
+// memBrowseAct->setCheckable(true);
+ connect(opBrowseAct, SIGNAL(triggered()), this, SLOT(ShowOPBrowserWin()));
+
+ m68kDasmBrowseAct = new QAction(QIcon(":/res/tool-68k-dis.png"), tr("68K Listing Browser"), this);
+ m68kDasmBrowseAct->setStatusTip(tr("Shows the 68K disassembly browser window"));
+// memBrowseAct->setCheckable(true);
+ connect(m68kDasmBrowseAct, SIGNAL(triggered()), this, SLOT(ShowM68KDasmBrowserWin()));
+
+ riscDasmBrowseAct = new QAction(QIcon(":/res/tool-risc-dis.png"), tr("RISC Listing Browser"), this);
+ riscDasmBrowseAct->setStatusTip(tr("Shows the RISC disassembly browser window"));
+// memBrowseAct->setCheckable(true);
+ connect(riscDasmBrowseAct, SIGNAL(triggered()), this, SLOT(ShowRISCDasmBrowserWin()));
+
// Misc. connections...
connect(filePickWin, SIGNAL(RequestLoad(QString)), this, SLOT(LoadSoftware(QString)));
connect(filePickWin, SIGNAL(FilePickerHiding()), this, SLOT(Unpause()));
debugMenu = menuBar()->addMenu(tr("&Debug"));
debugMenu->addAction(memBrowseAct);
debugMenu->addAction(cpuBrowseAct);
+ debugMenu->addAction(opBrowseAct);
+ debugMenu->addAction(m68kDasmBrowseAct);
+ debugMenu->addAction(riscDasmBrowseAct);
}
helpMenu = menuBar()->addMenu(tr("&Help"));
debugbar = addToolBar(tr("&Debug"));
debugbar->addAction(memBrowseAct);
debugbar->addAction(cpuBrowseAct);
+ debugbar->addAction(opBrowseAct);
+ debugbar->addAction(m68kDasmBrowseAct);
+ debugbar->addAction(riscDasmBrowseAct);
}
// Create status bar
}
+void MainWin::HandleGamepads(void)
+{
+ Gamepad::Update();
+
+ for(int i=BUTTON_FIRST; i<=BUTTON_LAST; i++)
+ {
+ if (vjs.p1KeyBindings[i] & (JOY_BUTTON | JOY_HAT))
+ joypad_0_buttons[i] = (Gamepad::GetState(0, vjs.p1KeyBindings[i]) ? 0x01 : 0x00);
+
+ if (vjs.p2KeyBindings[i] & (JOY_BUTTON | JOY_HAT))
+ joypad_1_buttons[i] = (Gamepad::GetState(1, vjs.p2KeyBindings[i]) ? 0x01 : 0x00);
+ }
+}
+
+
void MainWin::Open(void)
{
}
// Some machines can't handle this, so we give them the option to disable it. :-)
if (!plzDontKillMyComputer)
{
- // Random hash & trash
- // We try to simulate an untuned tank circuit here... :-)
- for(uint32_t x=0; x<videoWidget->rasterWidth; x++)
- {
- for(uint32_t y=0; y<videoWidget->rasterHeight; y++)
+ // Random hash & trash
+ // We try to simulate an untuned tank circuit here... :-)
+ for(uint32_t x=0; x<videoWidget->rasterWidth; x++)
{
- videoWidget->buffer[(y * videoWidget->textureWidth) + x]
- = (rand() & 0xFF) << 8 | (rand() & 0xFF) << 16 | (rand() & 0xFF) << 24;
+ for(uint32_t y=0; y<videoWidget->rasterHeight; y++)
+ {
+ videoWidget->buffer[(y * videoWidget->textureWidth) + x]
+ = (rand() & 0xFF) << 8 | (rand() & 0xFF) << 16 | (rand() & 0xFF) << 24;
+ }
}
}
- }
}
else
{
// Otherwise, run the Jaguar simulation
+ HandleGamepads();
JaguarExecuteNew();
}
showUntunedTankCircuit = true;
// 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. :-)
+ DACPauseAudioThread();
TOMReset();
}
else
WriteLog("GUI: Resetting Jaguar...\n");
JaguarReset();
+ DACPauseAudioThread(false);
}
}
videoWidget->updateGL();
}
+
+ // Pause/unpause any running/non-running threads...
+ DACPauseAudioThread(!running);
}
// NOTE: Really should check here to see which dimension constrains the other.
// Right now, we assume that height is the constraint.
int newWidth = (int)(aspectRatio * (double)r.height());
+ videoWidget->offset = (r.width() - newWidth) / 2;
+ videoWidget->fullscreen = true;
+ videoWidget->outputWidth = newWidth;
- videoWidget->setFixedSize(newWidth, r.height());
+// videoWidget->setFixedSize(newWidth, r.height());
+ videoWidget->setFixedSize(r.width(), r.height());
showFullScreen();
}
else
{
+ // Reset the video widget to windowed mode
+ videoWidget->offset = 0;
+ videoWidget->fullscreen = false;
menuBar()->show();
statusBar()->show();
showNormal();
}
+void MainWin::ShowOPBrowserWin(void)
+{
+ opBrowseWin->show();
+ opBrowseWin->RefreshContents();
+}
+
+
+void MainWin::ShowM68KDasmBrowserWin(void)
+{
+ m68kDasmBrowseWin->show();
+ m68kDasmBrowseWin->RefreshContents();
+}
+
+
+void MainWin::ShowRISCDasmBrowserWin(void)
+{
+ riscDasmBrowseWin->show();
+ riscDasmBrowseWin->RefreshContents();
+}
+
+
void MainWin::ResizeMainWindow(void)
{
// videoWidget->setFixedSize(zoomLevel * 320, zoomLevel * (vjs.hardwareTypeNTSC ? 240 : 256));