X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=src%2Fgui%2Fmainwin.cpp;h=ea44c70a8f295dc0c805cced4bf2ba10e709f01f;hb=4333fdb4f2f297db8272d2ebc8323028df8c105f;hp=1435d97a56e978e59ec8c8dd4702769346fa34bd;hpb=ea10984eaf09364d9f6e08114caa4bcfcaa72d9e;p=virtualjaguar diff --git a/src/gui/mainwin.cpp b/src/gui/mainwin.cpp index 1435d97..ea44c70 100644 --- a/src/gui/mainwin.cpp +++ b/src/gui/mainwin.cpp @@ -9,13 +9,20 @@ // --- ---------- ------------------------------------------------------------- // JLH 12/23/2009 Created this file // JLH 12/20/2010 Added settings, menus & toolbars +// JLH 07/05/2011 Added CD BIOS functionality to GUI // // 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: // +// - Controller configuration +// - Remove SDL dependencies (sound, mainly) from Jaguar core lib +// - Fix inconsistency with trailing slashes in paths (eeproms needs one, software doesn't) // // Uncomment this for debugging... @@ -26,28 +33,31 @@ #include "mainwin.h" #include "SDL.h" -//#include -//#include #include "glwidget.h" #include "about.h" #include "settings.h" #include "filepicker.h" +#include "configdialog.h" +#include "generaltab.h" +#include "version.h" +#include "dac.h" #include "jaguar.h" -#include "video.h" #include "tom.h" #include "log.h" #include "file.h" #include "joystick.h" +#ifdef __GCCWIN32__ +// Apparently on win32, usleep() is not pulled in by the usual suspects. +#include +#endif + // Uncomment this to use built-in BIOS/CD-ROM BIOS // You'll need a copy of jagboot.h & jagcd.h for this to work...! +// Creating those is left as an exercise for the reader. ;-) //#define USE_BUILT_IN_BIOS -// Uncomment this for an official Virtual Jaguar release -//#define VJ_RELEASE_VERSION "2.0.0" -#warning !!! FIX !!! Figure out how to use this in GUI.CPP as well! - #ifdef USE_BUILT_IN_BIOS #include "jagboot.h" #include "jagcd.h" @@ -66,23 +76,28 @@ // use, we can drop it in anywhere and use it as-is. MainWin::MainWin(): running(false), powerButtonOn(false), showUntunedTankCircuit(true), - cartridgeLoaded(false) + cartridgeLoaded(false), CDActive(false)//, alpineLoadSuccessful(false) { videoWidget = new GLWidget(this); setCentralWidget(videoWidget); setWindowIcon(QIcon(":/res/vj-icon.png")); - setWindowTitle("Virtual Jaguar v2.0.0"); +// setWindowTitle("Virtual Jaguar v2.0.0"); - ReadSettings(); - setUnifiedTitleAndToolBarOnMac(true); + QString title = QString(tr("Virtual Jaguar " VJ_RELEASE_VERSION )); + + if (vjs.hardwareTypeAlpine) + title += QString(tr(" - Alpine Mode")); + + setWindowTitle(title); -#warning "!!! Save/Restore window location for FilePickerWindow !!!" aboutWin = new AboutWindow(this); filePickWin = new FilePickerWindow(this); videoWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + setUnifiedTitleAndToolBarOnMac(true); + // Create actions quitAppAct = new QAction(tr("E&xit"), this); @@ -101,6 +116,7 @@ MainWin::MainWin(): running(false), powerButtonOn(false), showUntunedTankCircuit pauseAct->setStatusTip(tr("Toggles the running state")); pauseAct->setCheckable(true); pauseAct->setDisabled(true); + pauseAct->setShortcut(QKeySequence(tr("Esc"))); connect(pauseAct, SIGNAL(triggered()), this, SLOT(ToggleRunState())); zoomActs = new QActionGroup(this); @@ -122,12 +138,12 @@ MainWin::MainWin(): running(false), powerButtonOn(false), showUntunedTankCircuit tvTypeActs = new QActionGroup(this); - ntscAct = new QAction(QIcon(":/res/generic.png"), tr("NTSC"), tvTypeActs); + ntscAct = new QAction(QIcon(":/res/ntsc.png"), tr("NTSC"), tvTypeActs); ntscAct->setStatusTip(tr("Sets Jaguar to NTSC mode")); ntscAct->setCheckable(true); connect(ntscAct, SIGNAL(triggered()), this, SLOT(SetNTSC())); - palAct = new QAction(QIcon(":/res/generic.png"), tr("PAL"), tvTypeActs); + palAct = new QAction(QIcon(":/res/pal.png"), tr("PAL"), tvTypeActs); palAct->setStatusTip(tr("Sets Jaguar to PAL mode")); palAct->setCheckable(true); connect(palAct, SIGNAL(triggered()), this, SLOT(SetPAL())); @@ -137,15 +153,26 @@ MainWin::MainWin(): running(false), powerButtonOn(false), showUntunedTankCircuit blurAct->setCheckable(true); connect(blurAct, SIGNAL(triggered()), this, SLOT(ToggleBlur())); - aboutAct = new QAction(QIcon(":/res/generic.png"), tr("&About..."), this); + aboutAct = new QAction(QIcon(":/res/vj-icon.png"), tr("&About..."), this); aboutAct->setStatusTip(tr("Blatant self-promotion")); connect(aboutAct, SIGNAL(triggered()), this, SLOT(ShowAboutWin())); -#warning "!!! Set up a decent keyboard shortcut for Insert Cartridge !!!" 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->setStatusTip(tr("Configure options for Virtual Jaguar")); + configAct->setShortcut(QKeySequence(tr("Ctrl+c"))); + connect(configAct, SIGNAL(triggered()), this, SLOT(Configure())); + + useCDAct = new QAction(QIcon(":/res/compact-disc.png"), tr("&Use CD Unit"), this); + useCDAct->setStatusTip(tr("Use Jaguar Virtual CD unit")); +// useCDAct->setShortcut(QKeySequence(tr("Ctrl+c"))); + useCDAct->setCheckable(true); + connect(useCDAct, SIGNAL(triggered()), this, SLOT(ToggleCDUsage())); + // Misc. connections... connect(filePickWin, SIGNAL(RequestLoad(QString)), this, SLOT(LoadSoftware(QString))); @@ -153,8 +180,10 @@ MainWin::MainWin(): running(false), powerButtonOn(false), showUntunedTankCircuit fileMenu = menuBar()->addMenu(tr("&File")); fileMenu->addAction(filePickAct); + fileMenu->addAction(useCDAct); fileMenu->addAction(powerAct); fileMenu->addAction(pauseAct); + fileMenu->addAction(configAct); fileMenu->addAction(quitAppAct); helpMenu = menuBar()->addMenu(tr("&Help")); @@ -164,6 +193,7 @@ MainWin::MainWin(): running(false), powerButtonOn(false), showUntunedTankCircuit toolbar->addAction(powerAct); toolbar->addAction(pauseAct); toolbar->addAction(filePickAct); + toolbar->addAction(useCDAct); toolbar->addSeparator(); toolbar->addAction(x1Act); toolbar->addAction(x2Act); @@ -177,6 +207,8 @@ MainWin::MainWin(): running(false), powerButtonOn(false), showUntunedTankCircuit // Create status bar statusBar()->showMessage(tr("Ready")); + ReadSettings(); + // Set toolbar buttons/menus based on settings read in (sync the UI)... blurAct->setChecked(vjs.glFilter); x1Act->setChecked(zoomLevel == 1); @@ -194,16 +226,8 @@ MainWin::MainWin(): running(false), powerButtonOn(false), showUntunedTankCircuit connect(timer, SIGNAL(timeout()), this, SLOT(Timer())); timer->start(20); - // NOTE: Keyboards/joysticks will *not* work until SDL is brought back in, or - // the key handling is improved in Qt... - // Wait a minute... it seems they already are... So why no keyboard love? - -#ifdef VJ_RELEASE_VERSION WriteLog("Virtual Jaguar %s (Last full build was on %s %s)\n", VJ_RELEASE_VERSION, __DATE__, __TIME__); -#else - WriteLog("Virtual Jaguar SVN %s (Last full build was on %s %s)\n", __DATE__, __DATE__, __TIME__); -#endif - WriteLog("Initializing jaguar subsystem...\n"); + WriteLog("VJ: Initializing jaguar subsystem...\n"); JaguarInit(); // Get the BIOS ROM @@ -211,40 +235,45 @@ 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("About to attempt to load BIOSes...\n"); -#if 1 +// WriteLog("VJ: About to attempt to load BIOSes...\n"); //This is short-circuiting the file finding thread... ??? WHY ??? - BIOSLoaded = (JaguarLoadROM(jaguarBootROM, vjs.jagBootPath) == 0x20000 ? true : false); -#else - BIOSLoaded = false; -#endif - 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 ")); +//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 ")); #endif - SET32(jaguarMainRAM, 0, 0x00200000); // Set top of stack... + filePickWin->ScanSoftwareFolder(allowUnknownSoftware); -//Let's try this... -// JaguarLoadFile("./software/Rayman (World).j64"); -// JaguarLoadFile("./software/I-War (World).j64"); -// JaguarLoadFile("./software/Alien vs Predator (World).j64"); -//no JaguarLoadFile("./software/battlesphere.bin"); -// JaguarLoadFile("./software/Battle Sphere Gold (World).j64"); -// JaguarLoadFile("./software/Rayman (USA, Europe).zip"); -//This is crappy!!! !!! FIX !!! -//Is this even needed any more? Hmm. Maybe. Dunno. -//Seems like it is... But then again, maybe not. Have to test it to see. -//WriteLog("GUI: Resetting Jaguar...\n"); -// JaguarReset(); + // Load up the default ROM if in Alpine mode: + if (vjs.hardwareTypeAlpine) + { + bool romLoaded = JaguarLoadFile(vjs.alpineROMPath); + + // If regular load failed, try just a straight file load + // (Dev only! I don't want people to start getting lazy with their releases again! :-P) + if (!romLoaded) + romLoaded = AlpineLoadFile(vjs.alpineROMPath); + + if (romLoaded) + WriteLog("Alpine Mode: Successfully loaded file \"%s\".\n", vjs.alpineROMPath); + else + WriteLog("Alpine Mode: Unable to load file \"%s\"!\n", vjs.alpineROMPath); + + // Attempt to load/run the ABS file... + LoadSoftware(vjs.absROMPath); + } } void MainWin::closeEvent(QCloseEvent * event) { + JaguarDone(); WriteSettings(); event->accept(); // ignore() if can't close for some reason } @@ -272,20 +301,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; } } @@ -294,6 +323,72 @@ void MainWin::Open(void) { } +void MainWin::Configure(void) +{ + // Call the configuration dialog and update settings + ConfigDialog dlg(this); + //ick. + dlg.generalTab->useUnknownSoftware->setChecked(allowUnknownSoftware); + + if (dlg.exec() == false) + return; + + QString before = vjs.ROMPath; + QString alpineBefore = vjs.alpineROMPath; + QString absBefore = vjs.absROMPath; + bool audioBefore = vjs.audioEnabled; + dlg.UpdateVJSettings(); + QString after = vjs.ROMPath; + QString alpineAfter = vjs.alpineROMPath; + QString absAfter = vjs.absROMPath; + bool audioAfter = vjs.audioEnabled; + + bool allowOld = allowUnknownSoftware; + //ick. + allowUnknownSoftware = dlg.generalTab->useUnknownSoftware->isChecked(); + + // We rescan the "software" folder if the user either changed the path or + // checked/unchecked the "Allow unknown files" option in the config dialog. + if ((before != after) || (allowOld != allowUnknownSoftware)) + filePickWin->ScanSoftwareFolder(allowUnknownSoftware); + + // If the "Alpine" ROM is changed, then let's load it... + if (alpineBefore != alpineAfter) + { + if (!JaguarLoadFile(vjs.alpineROMPath) || !AlpineLoadFile(vjs.alpineROMPath)) + { + // Oh crap, we couldn't get the file! Alert the media! + QMessageBox msg; + msg.setText(QString(tr("Could not load file \"%1\"!")).arg(vjs.alpineROMPath)); + msg.setIcon(QMessageBox::Warning); + msg.exec(); + } + } + + // If the "ABS" ROM is changed, then let's load it... + if (absBefore != absAfter) + { + if (!JaguarLoadFile(vjs.absROMPath)) + { + // Oh crap, we couldn't get the file! Alert the media! + QMessageBox msg; + msg.setText(QString(tr("Could not load file \"%1\"!")).arg(vjs.absROMPath)); + msg.setIcon(QMessageBox::Warning); + msg.exec(); + } + } + + // 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(); +} + // // Here's the main emulator loop // @@ -446,11 +541,34 @@ 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, + // so the untuned tank sim doesn't look wrong. :-) + TOMReset(); } else { - showUntunedTankCircuit = (cartridgeLoaded ? false : true); - pauseAct->setDisabled(!cartridgeLoaded); + if (!CDActive) + { + showUntunedTankCircuit = false;//(cartridgeLoaded ? false : true); + pauseAct->setChecked(false); + pauseAct->setDisabled(!cartridgeLoaded); + } + else + { +// Should check for cartridgeLoaded here as well...! +// We can clear it when toggling CDActive on, so that when we power cycle it does the +// expected thing. Otherwise, if we use the file picker to insert a cart, we expect +// to run the cart! Maybe have a RemoveCart function that only works if the CD unit +// is active? + showUntunedTankCircuit = false; + 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...) //This is crappy!!! !!! FIX !!! //Is this even needed any more? Hmm. Maybe. Dunno. //Seems like it is... But then again, maybe not. Have to test it to see. @@ -466,25 +584,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(); } @@ -538,27 +646,50 @@ void MainWin::InsertCart(void) void MainWin::LoadSoftware(QString file) { running = false; // Prevent bad things(TM) from happening... - SET32(jaguarMainRAM, 0, 0x00200000); // Set top of stack... + SET32(jaguarMainRAM, 0, 0x00200000); // Set top of stack... cartridgeLoaded = (JaguarLoadFile(file.toAscii().data()) ? true : false); -#if 0 - showUntunedTankCircuit = !cartridgeLoaded; -//This is crappy!!! !!! FIX !!! -//Is this even needed any more? Hmm. Maybe. Dunno. -//Seems like it is... But then again, maybe not. Have to test it to see. - WriteLog("GUI: Resetting Jaguar...\n"); - JaguarReset(); - running = true; -#else + uint8_t * biosPointer = jaguarBootROM; + + if (vjs.hardwareTypeAlpine) + { + if (biosAvailable & BIOS_STUB1) +// memcpy(jagMemSpace + 0xE00000, jaguarDevBootROM1, 0x20000); + biosPointer = jaguarDevBootROM1; + else if (biosAvailable & BIOS_STUB2) +// memcpy(jagMemSpace + 0xE00000, jaguarDevBootROM2, 0x20000); + biosPointer = jaguarDevBootROM2; + } +// else +// memcpy(jagMemSpace + 0xE00000, jaguarBootROM, 0x20000); + + memcpy(jagMemSpace + 0xE00000, biosPointer, 0x20000); + powerAct->setDisabled(false); powerAct->setChecked(true); powerButtonOn = false; TogglePowerState(); -#endif - QString newTitle = QString("Virtual Jaguar 2.0.0 - Now playing: %1") - .arg(filePickWin->GetSelectedPrettyName()); - setWindowTitle(newTitle); + if (!vjs.hardwareTypeAlpine) + { + QString newTitle = QString("Virtual Jaguar " VJ_RELEASE_VERSION " - Now playing: %1") + .arg(filePickWin->GetSelectedPrettyName()); + setWindowTitle(newTitle); + } +} + +void MainWin::ToggleCDUsage(void) +{ + CDActive = !CDActive; + + if (CDActive) + { + powerAct->setDisabled(false); + } + else + { + powerAct->setDisabled(true); + } } void MainWin::ResizeMainWindow(void) @@ -581,8 +712,11 @@ void MainWin::ReadSettings(void) QSize size = settings.value("size", QSize(400, 400)).toSize(); resize(size); move(pos); + pos = settings.value("cartLoadPos", QPoint(200, 200)).toPoint(); + filePickWin->move(pos); zoomLevel = settings.value("zoom", 1).toInt(); + allowUnknownSoftware = settings.value("showUnknownSoftware", false).toBool(); vjs.useJoystick = settings.value("useJoystick", false).toBool(); vjs.joyport = settings.value("joyport", 0).toInt(); @@ -590,20 +724,26 @@ 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(); vjs.glFilter = settings.value("glFilterType", 0).toInt(); 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()); + vjs.allowWritesToROM = settings.value("writeROM", false).toBool(); +// 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.alpineROMPath, settings.value("DefaultROM", "").toString().toAscii().data()); + strcpy(vjs.absROMPath, settings.value("DefaultABS", "").toString().toAscii().data()); WriteLog("MainWin: Paths\n"); -WriteLog(" jagBootPath = \"%s\"\n", vjs.jagBootPath); -WriteLog(" CDBootPath = \"%s\"\n", vjs.CDBootPath); -WriteLog(" EEPROMPath = \"%s\"\n", vjs.EEPROMPath); -WriteLog(" ROMPath = \"%s\"\n", vjs.ROMPath); +//WriteLog(" jagBootPath = \"%s\"\n", vjs.jagBootPath); +//WriteLog(" CDBootPath = \"%s\"\n", vjs.CDBootPath); +WriteLog(" EEPROMPath = \"%s\"\n", vjs.EEPROMPath); +WriteLog(" ROMPath = \"%s\"\n", vjs.ROMPath); +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(); @@ -656,8 +796,10 @@ void MainWin::WriteSettings(void) QSettings settings("Underground Software", "Virtual Jaguar"); settings.setValue("pos", pos()); settings.setValue("size", size()); + settings.setValue("cartLoadPos", filePickWin->pos()); settings.setValue("zoom", zoomLevel); + settings.setValue("showUnknownSoftware", allowUnknownSoftware); settings.setValue("useJoystick", vjs.useJoystick); settings.setValue("joyport", vjs.joyport); @@ -665,15 +807,19 @@ 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); settings.setValue("glFilterType", vjs.glFilter); settings.setValue("renderType", vjs.renderType); + settings.setValue("writeROM", vjs.allowWritesToROM); settings.setValue("JagBootROM", vjs.jagBootPath); settings.setValue("CDBootROM", vjs.CDBootPath); settings.setValue("EEPROMs", vjs.EEPROMPath); settings.setValue("ROMs", vjs.ROMPath); + settings.setValue("DefaultROM", vjs.alpineROMPath); + settings.setValue("DefaultABS", vjs.absROMPath); settings.setValue("p1k_up", vjs.p1KeyBindings[BUTTON_U]); settings.setValue("p1k_down", vjs.p1KeyBindings[BUTTON_D]);