#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);
// memBrowseAct->setCheckable(true);
connect(cpuBrowseAct, SIGNAL(triggered()), this, SLOT(ShowCPUBrowserWin()));
+ opBrowseAct = new QAction(QIcon(":/res/generic.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/generic.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/generic.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);
}
{
if (state)
{
+ mainWinPosition = pos();
+// mainWinSize = size();
menuBar()->hide();
statusBar()->hide();
showFullScreen();
QRect r = QApplication::desktop()->availableGeometry();
- double targetWidth = 320.0, targetHeight = (vjs.hardwareTypeNTSC ? 240.0 : 256.0);
+// double targetWidth = 320.0, targetHeight = (vjs.hardwareTypeNTSC ? 240.0 : 256.0);
+ double targetWidth = (double)VIRTUAL_SCREEN_WIDTH,
+ targetHeight = (double)(vjs.hardwareTypeNTSC ? VIRTUAL_SCREEN_HEIGHT_NTSC : VIRTUAL_SCREEN_HEIGHT_PAL);
double aspectRatio = targetWidth / targetHeight;
// NOTE: Really should check here to see which dimension constrains the other.
// Right now, we assume that height is the constraint.
statusBar()->show();
showNormal();
ResizeMainWindow();
+ move(mainWinPosition);
}
// For some reason, this doesn't work: If the emu is paused, toggling from
}
+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));
+// videoWidget->setFixedSize(zoomLevel * 320, zoomLevel * (vjs.hardwareTypeNTSC ? 240 : 256));
+ videoWidget->setFixedSize(zoomLevel * VIRTUAL_SCREEN_WIDTH,
+ zoomLevel * (vjs.hardwareTypeNTSC ? VIRTUAL_SCREEN_HEIGHT_NTSC : VIRTUAL_SCREEN_HEIGHT_PAL));
show();
for(int i=0; i<2; i++)
void MainWin::ReadSettings(void)
{
QSettings settings("Underground Software", "Virtual Jaguar");
- QPoint pos = settings.value("pos", QPoint(200, 200)).toPoint();
+ mainWinPosition = settings.value("pos", QPoint(200, 200)).toPoint();
QSize size = settings.value("size", QSize(400, 400)).toSize();
resize(size);
- move(pos);
- pos = settings.value("cartLoadPos", QPoint(200, 200)).toPoint();
+ move(mainWinPosition);
+ QPoint pos = settings.value("cartLoadPos", QPoint(200, 200)).toPoint();
filePickWin->move(pos);
zoomLevel = settings.value("zoom", 2).toInt();