]> Shamusworld >> Repos - virtualjaguar/blobdiff - src/gui/mainwin.cpp
Minor fix to IRQ subsystem. Should fix games that expected DSP IRQs masked.
[virtualjaguar] / src / gui / mainwin.cpp
index 3cebc8ac1541904a707e847f91a01e71fe6cb934..48411906dec629ebe3ede9591305b07a8a4c41f5 100644 (file)
@@ -35,6 +35,7 @@
 #include "SDL.h"
 #include "glwidget.h"
 #include "about.h"
+#include "help.h"
 #include "settings.h"
 #include "filepicker.h"
 #include "configdialog.h"
@@ -95,6 +96,7 @@ MainWin::MainWin(): running(false), powerButtonOn(false), showUntunedTankCircuit
        setWindowTitle(title);
 
        aboutWin = new AboutWindow(this);
+       helpWin = new HelpWindow(this);
        filePickWin = new FilePickerWindow(this);
 
     videoWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
@@ -161,12 +163,16 @@ MainWin::MainWin(): running(false), powerButtonOn(false), showUntunedTankCircuit
        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()));
@@ -183,15 +189,16 @@ MainWin::MainWin(): running(false), powerButtonOn(false), showUntunedTankCircuit
 
        // 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"));
@@ -274,6 +281,8 @@ MainWin::MainWin(): running(false), powerButtonOn(false), showUntunedTankCircuit
                // 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)
@@ -314,6 +323,15 @@ void MainWin::HandleKeys(QKeyEvent * e, bool state)
                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...!
@@ -321,6 +339,9 @@ void MainWin::HandleKeys(QKeyEvent * e, bool state)
        {
                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;
        }
 }
 
@@ -534,8 +555,15 @@ void MainWin::ShowAboutWin(void)
        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();
@@ -560,7 +588,7 @@ void MainWin::LoadSoftware(QString file)
        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;
 
@@ -619,7 +647,7 @@ void MainWin::ReadSettings(void)
        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();
@@ -627,12 +655,13 @@ void MainWin::ReadSettings(void)
        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());
@@ -650,15 +679,15 @@ WriteLog("AlpineROMPath = \"%s\"\n", vjs.alpineROMPath);
 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();
@@ -669,8 +698,8 @@ WriteLog("   absROMPath = \"%s\"\n", vjs.absROMPath);
        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();
@@ -710,6 +739,7 @@ void MainWin::WriteSettings(void)
        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);