]> Shamusworld >> Repos - virtualjaguar/blobdiff - src/gui/mainwin.cpp
Minor corrections to the file DB.
[virtualjaguar] / src / gui / mainwin.cpp
index 75b4bc385ae734ca09a6e89ce7a5c849ddfbceaa..71872b8cec0989106a92ec08adc0eac709b27fa2 100644 (file)
 // FIXED:
 //
 // - Add dbl click/enter to select in cart list, ESC to dimiss [DONE]
+// - Autoscan/autoload all available BIOS from 'software' folder [DONE]
+// - Add 1 key jumping in cartridge list (press 'R', jumps to carts starting with 'R', etc) [DONE]
 //
 // STILL TO BE DONE:
 //
-// - Autoscan/autoload all available BIOS from 'software' folder
 // - Controller configuration
 // - Remove SDL dependencies (sound, mainly) from Jaguar core lib
-// - Add 1 key jumping in cartridge list (press 'R', jumps to carts starting with 'R', etc)
+// - Fix inconsistency with trailing slashes in paths (eeproms needs one, software doesn't)
 //
 
-/*
-For BIOS autoscan, infrastructure is already there in filethread.cpp; just need to figure out
-if we want to scan every time, or stuff filenames found into the config file, or what.
-Should filethread emit signal that's intercepted here? Maybe...
-*/
-
 // Uncomment this for debugging...
 //#define DEBUG
 //#define DEBUGFOO                     // Various tool debugging...
@@ -46,6 +41,7 @@ Should filethread emit signal that's intercepted here? Maybe...
 #include "generaltab.h"
 #include "version.h"
 
+#include "dac.h"
 #include "jaguar.h"
 #include "tom.h"
 #include "log.h"
@@ -233,17 +229,18 @@ MainWin::MainWin(): running(false), powerButtonOn(false), showUntunedTankCircuit
        WriteLog("VJ: Using built in BIOS/CD BIOS...\n");
        memcpy(jaguarBootROM, jagBootROM, 0x20000);
        memcpy(jaguarCDBootROM, jagCDROM, 0x40000);
-       BIOSLoaded = CDBIOSLoaded = true;
+//     BIOSLoaded = CDBIOSLoaded = true;
+       biosAvailable |= (BIOS_NORMAL | BIOS_CD);
 #else
 // What would be nice here would be a way to check if the BIOS was loaded so that we
 // could disable the pushbutton on the Misc Options menu... !!! FIX !!! [DONE here, but needs to be fixed in GUI as well!]
-       WriteLog("VJ: About to attempt to load BIOSes...\n");
+//     WriteLog("VJ: About to attempt to load BIOSes...\n");
 //This is short-circuiting the file finding thread... ??? WHY ???
 //Not anymore. Was related to a QImage object creation/corruption bug elsewhere.
-       BIOSLoaded = (JaguarLoadROM(jaguarBootROM, vjs.jagBootPath) == 0x20000 ? true : false);
-       WriteLog("VJ: BIOS is %savailable...\n", (BIOSLoaded ? "" : "not "));
-       CDBIOSLoaded = (JaguarLoadROM(jaguarCDBootROM, vjs.CDBootPath) == 0x40000 ? true : false);
-       WriteLog("VJ: CD BIOS is %savailable...\n", (CDBIOSLoaded ? "" : "not "));
+//     BIOSLoaded = (JaguarLoadROM(jaguarBootROM, vjs.jagBootPath) == 0x20000 ? true : false);
+//     WriteLog("VJ: BIOS is %savailable...\n", (BIOSLoaded ? "" : "not "));
+//     CDBIOSLoaded = (JaguarLoadROM(jaguarCDBootROM, vjs.CDBootPath) == 0x40000 ? true : false);
+//     WriteLog("VJ: CD BIOS is %savailable...\n", (CDBIOSLoaded ? "" : "not "));
 #endif
 
        filePickWin->ScanSoftwareFolder(allowUnknownSoftware);
@@ -278,20 +275,20 @@ void MainWin::HandleKeys(QKeyEvent * e, bool state)
                || (e->key() == vjs.p1KeyBindings[BUTTON_D] && joypad_0_buttons[BUTTON_U]))
                return;
 #else
-       if (e->key() == vjs.p1KeyBindings[BUTTON_L] && joypad_0_buttons[BUTTON_R])
+       if (e->key() == (int)vjs.p1KeyBindings[BUTTON_L] && joypad_0_buttons[BUTTON_R])
                joypad_0_buttons[BUTTON_R] = 0;
-       if (e->key() == vjs.p1KeyBindings[BUTTON_R] && joypad_0_buttons[BUTTON_L])
+       if (e->key() == (int)vjs.p1KeyBindings[BUTTON_R] && joypad_0_buttons[BUTTON_L])
                joypad_0_buttons[BUTTON_L] = 0;
-       if (e->key() == vjs.p1KeyBindings[BUTTON_U] && joypad_0_buttons[BUTTON_D])
+       if (e->key() == (int)vjs.p1KeyBindings[BUTTON_U] && joypad_0_buttons[BUTTON_D])
                joypad_0_buttons[BUTTON_D] = 0;
-       if (e->key() == vjs.p1KeyBindings[BUTTON_D] && joypad_0_buttons[BUTTON_U])
+       if (e->key() == (int)vjs.p1KeyBindings[BUTTON_D] && joypad_0_buttons[BUTTON_U])
                joypad_0_buttons[BUTTON_U] = 0;
 #endif
 
        // No bad combos exist, let's stuff the emulator key buffers...!
        for(int i=BUTTON_FIRST; i<=BUTTON_LAST; i++)
        {
-               if (e->key() == vjs.p1KeyBindings[i])
+               if (e->key() == (int)vjs.p1KeyBindings[i])
                        joypad_0_buttons[i] = (uint8)state;
        }
 }
@@ -311,8 +308,10 @@ void MainWin::Configure(void)
                return;
 
        QString before = vjs.ROMPath;
+       bool audioBefore = vjs.audioEnabled;
        dlg.UpdateVJSettings();
        QString after = vjs.ROMPath;
+       bool audioAfter = vjs.audioEnabled;
 
        bool allowOld = allowUnknownSoftware;
        //ick.
@@ -323,6 +322,13 @@ void MainWin::Configure(void)
        if ((before != after) || (allowOld != allowUnknownSoftware))
                filePickWin->ScanSoftwareFolder(allowUnknownSoftware);
 
+       // If the "Enable audio" checkbox changed, then we have to re-init the DAC...
+       if (audioBefore != audioAfter)
+       {
+               DACDone();
+               DACInit();
+       }
+
        // Just in case we crash before a clean exit...
        WriteSettings();
 }
@@ -479,7 +485,8 @@ void MainWin::TogglePowerState(void)
                pauseAct->setDisabled(true);
                showUntunedTankCircuit = true;
                running = true;
-               // This is just in case the ROM we were playing was in a narrow or wide field mode
+               // 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. :-)
                TOMReset();
        }
        else
@@ -501,6 +508,8 @@ void MainWin::TogglePowerState(void)
                        pauseAct->setChecked(false);
                        pauseAct->setDisabled(false);
                        memcpy(jagMemSpace + 0x800000, jaguarCDBootROM, 0x40000);
+                       setWindowTitle(QString("Virtual Jaguar " VJ_RELEASE_VERSION
+                               " - Now playing: Jaguar CD"));
                }
 
 //(Err, what's so crappy about this? It seems to do what it's supposed to...)
@@ -519,25 +528,15 @@ void MainWin::ToggleRunState(void)
 
        if (!running)
        {
-#if 0
-               for(uint32_t x=0; x<videoWidget->rasterWidth; x++)
-                       for(uint32_t y=0; y<videoWidget->rasterHeight; y++)
-                               videoWidget->buffer[(y * videoWidget->textureWidth) + x] = 0x00000000;
-#else
-//             for(uint32_t i=0; i<TOMGetVideoModeWidth() * 256; i++)
-               for(uint32_t i=0; i<videoWidget->textureWidth * 256; i++)
+               for(uint32_t i=0; i<(uint32_t)(videoWidget->textureWidth * 256); i++)
                {
                        uint32_t pixel = backbuffer[i];
-//                     uint8_t b = (pixel >> 16) & 0xFF, g = (pixel >> 8) & 0xFF, r = pixel & 0xFF;
                        uint8_t r = (pixel >> 24) & 0xFF, g = (pixel >> 16) & 0xFF, b = (pixel >> 8) & 0xFF;
                        pixel = ((r + g + b) / 3) & 0x00FF;
-//                     backbuffer[i] = 0xFF000000 | (pixel << 16) | (pixel << 8);
                        backbuffer[i] = 0x000000FF | (pixel << 16) | (pixel << 8);
                }
 
-//             memcpy(videoWidget->buffer, backbuffer, videoWidget->rasterHeight * videoWidget->rasterWidth);
                memcpy(videoWidget->buffer, backbuffer, videoWidget->rasterHeight * videoWidget->textureWidth * sizeof(uint32_t));
-#endif
 
                videoWidget->updateGL();
        }
@@ -652,6 +651,7 @@ void MainWin::ReadSettings(void)
        vjs.frameSkip        = settings.value("frameSkip", 0).toInt();
        vjs.useJaguarBIOS    = settings.value("useJaguarBIOS", false).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();
@@ -659,11 +659,11 @@ void MainWin::ReadSettings(void)
        vjs.renderType       = settings.value("renderType", 0).toInt();
        strcpy(vjs.jagBootPath, settings.value("JagBootROM", "./bios/[BIOS] Atari Jaguar (USA, Europe).zip").toString().toAscii().data());
        strcpy(vjs.CDBootPath, settings.value("CDBootROM", "./bios/jagcd.rom").toString().toAscii().data());
-       strcpy(vjs.EEPROMPath, settings.value("EEPROMs", "./eeproms").toString().toAscii().data());
-       strcpy(vjs.ROMPath, settings.value("ROMs", "./software").toString().toAscii().data());
+       strcpy(vjs.EEPROMPath, settings.value("EEPROMs", "./eeproms/").toString().toAscii().data());
+       strcpy(vjs.ROMPath, settings.value("ROMs", "./software/").toString().toAscii().data());
 WriteLog("MainWin: Paths\n");
-WriteLog("    jagBootPath = \"%s\"\n", vjs.jagBootPath);
-WriteLog("    CDBootPath  = \"%s\"\n", vjs.CDBootPath);
+//WriteLog("    jagBootPath = \"%s\"\n", vjs.jagBootPath);
+//WriteLog("    CDBootPath  = \"%s\"\n", vjs.CDBootPath);
 WriteLog("    EEPROMPath  = \"%s\"\n", vjs.EEPROMPath);
 WriteLog("    ROMPath     = \"%s\"\n", vjs.ROMPath);
 
@@ -729,6 +729,7 @@ void MainWin::WriteSettings(void)
        settings.setValue("frameSkip", vjs.frameSkip);
        settings.setValue("useJaguarBIOS", vjs.useJaguarBIOS);
        settings.setValue("DSPEnabled", vjs.DSPEnabled);
+       settings.setValue("audioEnabled", vjs.audioEnabled);
        settings.setValue("usePipelinedDSP", vjs.usePipelinedDSP);
        settings.setValue("fullscreen", vjs.fullscreen);
        settings.setValue("useOpenGL", vjs.useOpenGL);