// --- ---------- -------------------------------------------------------------
// 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...
// 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
#ifdef USE_BUILT_IN_BIOS
// 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)
{
videoWidget = new GLWidget(this);
setCentralWidget(videoWidget);
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)));
fileMenu = menuBar()->addMenu(tr("&File"));
fileMenu->addAction(filePickAct);
+ fileMenu->addAction(useCDAct);
fileMenu->addAction(powerAct);
fileMenu->addAction(pauseAct);
fileMenu->addAction(configAct);
toolbar->addAction(powerAct);
toolbar->addAction(pauseAct);
toolbar->addAction(filePickAct);
+ toolbar->addAction(useCDAct);
toolbar->addSeparator();
toolbar->addAction(x1Act);
toolbar->addAction(x2Act);
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);
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->setChecked(false);
- pauseAct->setDisabled(!cartridgeLoaded);
+ if (!CDActive)
+ {
+ showUntunedTankCircuit = (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 !!!
setWindowTitle(newTitle);
}
+void MainWin::ToggleCDUsage(void)
+{
+ CDActive = !CDActive;
+
+ if (CDActive)
+ {
+ powerAct->setDisabled(false);
+ }
+ else
+ {
+ powerAct->setDisabled(true);
+ }
+}
+
void MainWin::ResizeMainWindow(void)
{
videoWidget->setFixedSize(zoomLevel * 320, zoomLevel * (vjs.hardwareTypeNTSC ? 240 : 256));
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);