#include "SDL.h"
#include "glwidget.h"
#include "about.h"
+#include "help.h"
#include "settings.h"
#include "filepicker.h"
#include "configdialog.h"
// use, we can drop it in anywhere and use it as-is.
MainWin::MainWin(): running(false), powerButtonOn(false), showUntunedTankCircuit(true),
- cartridgeLoaded(false), CDActive(false)//, alpineLoadSuccessful(false)
+ cartridgeLoaded(false), CDActive(false),//, alpineLoadSuccessful(false),
+ pauseForFileSelector(false)
{
videoWidget = new GLWidget(this);
setCentralWidget(videoWidget);
setWindowTitle(title);
aboutWin = new AboutWindow(this);
+ helpWin = new HelpWindow(this);
filePickWin = new FilePickerWindow(this);
videoWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
aboutAct->setStatusTip(tr("Blatant self-promotion"));
connect(aboutAct, SIGNAL(triggered()), this, SLOT(ShowAboutWin()));
+ helpAct = new QAction(QIcon(":/res/vj-icon.png"), tr("&Contents..."), this);
+ helpAct->setStatusTip(tr("Help is available, if you should need it"));
+ connect(helpAct, SIGNAL(triggered()), this, SLOT(ShowHelpWin()));
+
filePickAct = new QAction(QIcon(":/res/software.png"), tr("&Insert Cartridge..."), this);
filePickAct->setStatusTip(tr("Insert a cartridge into Virtual Jaguar"));
filePickAct->setShortcut(QKeySequence(tr("Ctrl+i")));
connect(filePickAct, SIGNAL(triggered()), this, SLOT(InsertCart()));
- configAct = new QAction(QIcon(":/res/generic.png"), tr("&Configure"), this);
+ configAct = new QAction(QIcon(":/res/wrench.png"), tr("&Configure"), this);
configAct->setStatusTip(tr("Configure options for Virtual Jaguar"));
configAct->setShortcut(QKeySequence(tr("Ctrl+c")));
connect(configAct, SIGNAL(triggered()), this, SLOT(Configure()));
// Misc. connections...
connect(filePickWin, SIGNAL(RequestLoad(QString)), this, SLOT(LoadSoftware(QString)));
+ connect(filePickWin, SIGNAL(FilePickerHiding()), this, SLOT(Unpause()));
// Create menus & toolbars
- fileMenu = menuBar()->addMenu(tr("&File"));
- fileMenu->addAction(filePickAct);
- fileMenu->addAction(useCDAct);
+ fileMenu = menuBar()->addMenu(tr("&Jaguar"));
fileMenu->addAction(powerAct);
fileMenu->addAction(pauseAct);
+ fileMenu->addAction(filePickAct);
+ fileMenu->addAction(useCDAct);
fileMenu->addAction(configAct);
fileMenu->addAction(quitAppAct);
helpMenu = menuBar()->addMenu(tr("&Help"));
+ helpMenu->addAction(helpAct);
helpMenu->addAction(aboutAct);
toolbar = addToolBar(tr("Stuff"));
// Attempt to load/run the ABS file...
LoadSoftware(vjs.absROMPath);
}
+ else
+ memcpy(jagMemSpace + 0xE00000, jaguarBootROM, 0x20000); // Otherwise, use the stock BIOS
}
void MainWin::closeEvent(QCloseEvent * event)
joypad_0_buttons[BUTTON_D] = 0;
if (e->key() == (int)vjs.p1KeyBindings[BUTTON_D] && joypad_0_buttons[BUTTON_U])
joypad_0_buttons[BUTTON_U] = 0;
+
+ if (e->key() == (int)vjs.p2KeyBindings[BUTTON_L] && joypad_1_buttons[BUTTON_R])
+ joypad_0_buttons[BUTTON_R] = 0;
+ if (e->key() == (int)vjs.p2KeyBindings[BUTTON_R] && joypad_1_buttons[BUTTON_L])
+ joypad_0_buttons[BUTTON_L] = 0;
+ if (e->key() == (int)vjs.p2KeyBindings[BUTTON_U] && joypad_1_buttons[BUTTON_D])
+ joypad_0_buttons[BUTTON_D] = 0;
+ if (e->key() == (int)vjs.p2KeyBindings[BUTTON_D] && joypad_1_buttons[BUTTON_U])
+ joypad_0_buttons[BUTTON_U] = 0;
#endif
// No bad combos exist, let's stuff the emulator key buffers...!
{
if (e->key() == (int)vjs.p1KeyBindings[i])
joypad_0_buttons[i] = (uint8)state;
+
+ if (e->key() == (int)vjs.p2KeyBindings[i])
+ joypad_1_buttons[i] = (uint8)state;
}
}
// If the "Alpine" ROM is changed, then let's load it...
if (alpineBefore != alpineAfter)
{
- if (!JaguarLoadFile(vjs.alpineROMPath) || !AlpineLoadFile(vjs.alpineROMPath))
+ if (!JaguarLoadFile(vjs.alpineROMPath) && !AlpineLoadFile(vjs.alpineROMPath))
{
// Oh crap, we couldn't get the file! Alert the media!
QMessageBox msg;
aboutWin->show();
}
+void MainWin::ShowHelpWin(void)
+{
+ helpWin->show();
+}
+
void MainWin::InsertCart(void)
{
+ // If the emulator is running, we pause it here and unpause it later
+ // if we dismiss the file selector without choosing anything
+ if (running)
+ {
+ ToggleRunState();
+ pauseForFileSelector = true;
+ }
+
filePickWin->show();
}
+void MainWin::Unpause(void)
+{
+ // Here we unpause the emulator if it was paused when we went into the file selector
+ if (pauseForFileSelector)
+ {
+ pauseForFileSelector = false;
+ ToggleRunState();
+ }
+}
+
void MainWin::LoadSoftware(QString file)
{
- running = false; // Prevent bad things(TM) from happening...
+ running = false; // Prevent bad things(TM) from happening...
+ pauseForFileSelector = false; // Reset the file selector pause flag
SET32(jaguarMainRAM, 0, 0x00200000); // Set top of stack...
- cartridgeLoaded = (JaguarLoadFile(file.toAscii().data()) ? true : false);
+ cartridgeLoaded = JaguarLoadFile(file.toAscii().data());
char * biosPointer = jaguarBootROM;
pos = settings.value("cartLoadPos", QPoint(200, 200)).toPoint();
filePickWin->move(pos);
- zoomLevel = settings.value("zoom", 1).toInt();
+ zoomLevel = settings.value("zoom", 2).toInt();
allowUnknownSoftware = settings.value("showUnknownSoftware", false).toBool();
vjs.useJoystick = settings.value("useJoystick", false).toBool();
vjs.hardwareTypeNTSC = settings.value("hardwareTypeNTSC", true).toBool();
vjs.frameSkip = settings.value("frameSkip", 0).toInt();
vjs.useJaguarBIOS = settings.value("useJaguarBIOS", false).toBool();
+ vjs.GPUEnabled = settings.value("GPUEnabled", true).toBool();
vjs.DSPEnabled = settings.value("DSPEnabled", false).toBool();
vjs.audioEnabled = settings.value("audioEnabled", true).toBool();
vjs.usePipelinedDSP = settings.value("usePipelinedDSP", false).toBool();
vjs.fullscreen = settings.value("fullscreen", false).toBool();
vjs.useOpenGL = settings.value("useOpenGL", true).toBool();
- vjs.glFilter = settings.value("glFilterType", 0).toInt();
+ vjs.glFilter = settings.value("glFilterType", 1).toInt();
vjs.renderType = settings.value("renderType", 0).toInt();
vjs.allowWritesToROM = settings.value("writeROM", false).toBool();
// strcpy(vjs.jagBootPath, settings.value("JagBootROM", "./bios/[BIOS] Atari Jaguar (USA, Europe).zip").toString().toAscii().data());
WriteLog(" absROMPath = \"%s\"\n", vjs.absROMPath);
// Keybindings in order of U, D, L, R, C, B, A, Op, Pa, 0-9, #, *
- vjs.p1KeyBindings[BUTTON_U] = settings.value("p1k_up", Qt::Key_Up).toInt();
- vjs.p1KeyBindings[BUTTON_D] = settings.value("p1k_down", Qt::Key_Down).toInt();
- vjs.p1KeyBindings[BUTTON_L] = settings.value("p1k_left", Qt::Key_Left).toInt();
- vjs.p1KeyBindings[BUTTON_R] = settings.value("p1k_right", Qt::Key_Right).toInt();
- vjs.p1KeyBindings[BUTTON_C] = settings.value("p1k_c", Qt::Key_Z).toInt();
- vjs.p1KeyBindings[BUTTON_B] = settings.value("p1k_b", Qt::Key_X).toInt();
- vjs.p1KeyBindings[BUTTON_A] = settings.value("p1k_a", Qt::Key_C).toInt();
- vjs.p1KeyBindings[BUTTON_OPTION] = settings.value("p1k_option", Qt::Key_Apostrophe).toInt();
- vjs.p1KeyBindings[BUTTON_PAUSE] = settings.value("p1k_pause", Qt::Key_Return).toInt();
+ vjs.p1KeyBindings[BUTTON_U] = settings.value("p1k_up", Qt::Key_S).toInt();
+ vjs.p1KeyBindings[BUTTON_D] = settings.value("p1k_down", Qt::Key_X).toInt();
+ vjs.p1KeyBindings[BUTTON_L] = settings.value("p1k_left", Qt::Key_A).toInt();
+ vjs.p1KeyBindings[BUTTON_R] = settings.value("p1k_right", Qt::Key_D).toInt();
+ vjs.p1KeyBindings[BUTTON_C] = settings.value("p1k_c", Qt::Key_J).toInt();
+ vjs.p1KeyBindings[BUTTON_B] = settings.value("p1k_b", Qt::Key_K).toInt();
+ vjs.p1KeyBindings[BUTTON_A] = settings.value("p1k_a", Qt::Key_L).toInt();
+ vjs.p1KeyBindings[BUTTON_OPTION] = settings.value("p1k_option", Qt::Key_O).toInt();
+ vjs.p1KeyBindings[BUTTON_PAUSE] = settings.value("p1k_pause", Qt::Key_P).toInt();
vjs.p1KeyBindings[BUTTON_0] = settings.value("p1k_0", Qt::Key_0).toInt();
vjs.p1KeyBindings[BUTTON_1] = settings.value("p1k_1", Qt::Key_1).toInt();
vjs.p1KeyBindings[BUTTON_2] = settings.value("p1k_2", Qt::Key_2).toInt();
vjs.p1KeyBindings[BUTTON_7] = settings.value("p1k_7", Qt::Key_7).toInt();
vjs.p1KeyBindings[BUTTON_8] = settings.value("p1k_8", Qt::Key_8).toInt();
vjs.p1KeyBindings[BUTTON_9] = settings.value("p1k_9", Qt::Key_9).toInt();
- vjs.p1KeyBindings[BUTTON_d] = settings.value("p1k_pound", Qt::Key_Slash).toInt();
- vjs.p1KeyBindings[BUTTON_s] = settings.value("p1k_star", Qt::Key_Asterisk).toInt();
+ vjs.p1KeyBindings[BUTTON_d] = settings.value("p1k_pound", Qt::Key_Minus).toInt();
+ vjs.p1KeyBindings[BUTTON_s] = settings.value("p1k_star", Qt::Key_Equal).toInt();
vjs.p2KeyBindings[BUTTON_U] = settings.value("p2k_up", Qt::Key_Up).toInt();
vjs.p2KeyBindings[BUTTON_D] = settings.value("p2k_down", Qt::Key_Down).toInt();
settings.setValue("hardwareTypeNTSC", vjs.hardwareTypeNTSC);
settings.setValue("frameSkip", vjs.frameSkip);
settings.setValue("useJaguarBIOS", vjs.useJaguarBIOS);
+ settings.setValue("GPUEnabled", vjs.GPUEnabled);
settings.setValue("DSPEnabled", vjs.DSPEnabled);
settings.setValue("audioEnabled", vjs.audioEnabled);
settings.setValue("usePipelinedDSP", vjs.usePipelinedDSP);