X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fgui%2Fmainwin.cpp;h=71872b8cec0989106a92ec08adc0eac709b27fa2;hb=07d689da4cceee0c376861a1459c9e9c2289c6a2;hp=75b4bc385ae734ca09a6e89ce7a5c849ddfbceaa;hpb=417c77735e5e76ab8803694511b465206d64bf97;p=virtualjaguar diff --git a/src/gui/mainwin.cpp b/src/gui/mainwin.cpp index 75b4bc3..71872b8 100644 --- a/src/gui/mainwin.cpp +++ b/src/gui/mainwin.cpp @@ -15,21 +15,16 @@ // 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; xrasterWidth; x++) - for(uint32_t y=0; yrasterHeight; y++) - videoWidget->buffer[(y * videoWidget->textureWidth) + x] = 0x00000000; -#else -// for(uint32_t i=0; itextureWidth * 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);