X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fgui%2Fmainwin.cpp;h=4f9dcce2e8576ea89525adf5ea984197a09e571d;hb=f45b4acc547ca85d9af9efa37d8caa68c20a42e6;hp=90f192a464a69932108fe592b28bab75c3e0e971;hpb=438d3a52ef0af04ac3279c0839fe6ffd7333b776;p=virtualjaguar diff --git a/src/gui/mainwin.cpp b/src/gui/mainwin.cpp index 90f192a..4f9dcce 100644 --- a/src/gui/mainwin.cpp +++ b/src/gui/mainwin.cpp @@ -63,7 +63,7 @@ // We'll make the VJ core modular so that it doesn't matter what GUI is in // use, we can drop it in anywhere and use it as-is. -MainWin::MainWin() +MainWin::MainWin(): showUntunedTankCircuit(true) { videoWidget = new GLWidget(this); setCentralWidget(videoWidget); @@ -133,6 +133,9 @@ MainWin::MainWin() filePickAct->setStatusTip(tr("Insert a cartridge into Virtual Jaguar")); connect(filePickAct, SIGNAL(triggered()), this, SLOT(InsertCart())); + // Misc. connections... + connect(filePickWin, SIGNAL(RequestLoad(QString)), this, SLOT(LoadSoftware(QString))); + // Create menus & toolbars fileMenu = menuBar()->addMenu(tr("&File")); @@ -145,6 +148,7 @@ MainWin::MainWin() toolbar = addToolBar(tr("Stuff")); toolbar->addAction(powerAct); + toolbar->addAction(filePickAct); toolbar->addSeparator(); toolbar->addAction(x1Act); toolbar->addAction(x2Act); @@ -175,6 +179,10 @@ MainWin::MainWin() 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 @@ -206,12 +214,18 @@ WriteLog("About to attempt to load BIOSes...\n"); SET32(jaguarMainRAM, 0, 0x00200000); // Set top of stack... +//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(); - +//WriteLog("GUI: Resetting Jaguar...\n"); +// JaguarReset(); } void MainWin::closeEvent(QCloseEvent * event) @@ -232,23 +246,27 @@ void MainWin::Timer(void) if (!running) return; -#if 0 - // Random hash & trash - // We try to simulate an untuned tank circuit here... :-) - for(uint32_t x=0; xrasterWidth; x++) + if (showUntunedTankCircuit) { - for(uint32_t y=0; yrasterHeight; y++) + // Random hash & trash + // We try to simulate an untuned tank circuit here... :-) + for(uint32_t x=0; xrasterWidth; x++) { - videoWidget->buffer[(y * videoWidget->textureWidth) + x] = (rand() & 0xFF) << 8 | (rand() & 0xFF) << 16 | (rand() & 0xFF) << 24;// | (rand() & 0xFF);//0x000000FF; -// buffer[(y * textureWidth) + x] = x*y; + for(uint32_t y=0; yrasterHeight; y++) + { + videoWidget->buffer[(y * videoWidget->textureWidth) + x] = (rand() & 0xFF) << 8 | (rand() & 0xFF) << 16 | (rand() & 0xFF) << 24;// | (rand() & 0xFF);//0x000000FF; + // buffer[(y * textureWidth) + x] = x*y; + } } } -#else - JaguarExecuteNew(); -// memcpy(videoWidget->buffer, backbuffer, videoWidget->rasterHeight * videoWidget->rasterWidth); - memcpy(videoWidget->buffer, backbuffer, videoWidget->rasterHeight * videoWidget->textureWidth); -// memcpy(surface->pixels, backbuffer, TOMGetVideoModeWidth() * TOMGetVideoModeHeight() * 4); -#endif + else + { + // Otherwise, run the Jaguar simulation + JaguarExecuteNew(); +// memcpy(videoWidget->buffer, backbuffer, videoWidget->rasterHeight * videoWidget->rasterWidth); + memcpy(videoWidget->buffer, backbuffer, videoWidget->rasterHeight * videoWidget->textureWidth * sizeof(uint32_t)); +// memcpy(surface->pixels, backbuffer, TOMGetVideoModeWidth() * TOMGetVideoModeHeight() * 4); + } videoWidget->updateGL(); } @@ -385,7 +403,7 @@ void MainWin::ToggleRunState(void) } // memcpy(videoWidget->buffer, backbuffer, videoWidget->rasterHeight * videoWidget->rasterWidth); - memcpy(videoWidget->buffer, backbuffer, videoWidget->rasterHeight * videoWidget->textureWidth); + memcpy(videoWidget->buffer, backbuffer, videoWidget->rasterHeight * videoWidget->textureWidth * sizeof(uint32_t)); #endif videoWidget->updateGL(); @@ -437,6 +455,19 @@ void MainWin::InsertCart(void) filePickWin->show(); } +void MainWin::LoadSoftware(QString file) +{ + running = false; // Prevent bad things(TM) from happening... + SET32(jaguarMainRAM, 0, 0x00200000); // Set top of stack... + showUntunedTankCircuit = (JaguarLoadFile(file.toAscii().data()) ? false : true); +//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; +} + void MainWin::ResizeMainWindow(void) { videoWidget->setFixedSize(zoomLevel * 320, zoomLevel * (vjs.hardwareTypeNTSC ? 240 : 256)); @@ -471,10 +502,15 @@ void MainWin::ReadSettings(void) 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/jagboot.rom").toString().toAscii().data()); + 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()); +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); } void MainWin::WriteSettings(void)