X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fgui%2Fmainwin.cpp;h=28d022b073f83266973dfa12a4b1e4984f76a289;hb=9142b5bd766e924e92f0aab1c0d9a34c5170a931;hp=fb667e9a7b615a6c00759f6c2305cd76510f43eb;hpb=70a54a68244ca80111cf2c9b2230072051a9f839;p=virtualjaguar diff --git a/src/gui/mainwin.cpp b/src/gui/mainwin.cpp index fb667e9..28d022b 100644 --- a/src/gui/mainwin.cpp +++ b/src/gui/mainwin.cpp @@ -35,16 +35,20 @@ #include "SDL.h" #include "app.h" -#include "glwidget.h" #include "about.h" -#include "help.h" -#include "settings.h" -#include "filepicker.h" #include "configdialog.h" +#include "filepicker.h" +#include "gamepad.h" #include "generaltab.h" +#include "glwidget.h" +#include "help.h" +#include "settings.h" #include "version.h" -#include "debug/memorybrowser.h" #include "debug/cpubrowser.h" +#include "debug/m68kdasmbrowser.h" +#include "debug/memorybrowser.h" +#include "debug/opbrowser.h" +#include "debug/riscdasmbrowser.h" #include "dac.h" #include "jaguar.h" @@ -100,9 +104,12 @@ MainWin::MainWin(bool autoRun): running(true), powerButtonOn(false), filePickWin = new FilePickerWindow(this); memBrowseWin = new MemoryBrowserWindow(this); cpuBrowseWin = new CPUBrowserWindow(this); + opBrowseWin = new OPBrowserWindow(this); + m68kDasmBrowseWin = new M68KDasmBrowserWindow(this); + riscDasmBrowseWin = new RISCDasmBrowserWindow(this); - videoWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); - setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + videoWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); setUnifiedTitleAndToolBarOnMac(true); @@ -216,6 +223,21 @@ MainWin::MainWin(bool autoRun): running(true), powerButtonOn(false), // memBrowseAct->setCheckable(true); connect(cpuBrowseAct, SIGNAL(triggered()), this, SLOT(ShowCPUBrowserWin())); + opBrowseAct = new QAction(QIcon(":/res/generic.png"), tr("OP Browser"), this); + opBrowseAct->setStatusTip(tr("Shows the Jaguar OP browser window")); +// memBrowseAct->setCheckable(true); + connect(opBrowseAct, SIGNAL(triggered()), this, SLOT(ShowOPBrowserWin())); + + m68kDasmBrowseAct = new QAction(QIcon(":/res/generic.png"), tr("68K Listing Browser"), this); + m68kDasmBrowseAct->setStatusTip(tr("Shows the 68K disassembly browser window")); +// memBrowseAct->setCheckable(true); + connect(m68kDasmBrowseAct, SIGNAL(triggered()), this, SLOT(ShowM68KDasmBrowserWin())); + + riscDasmBrowseAct = new QAction(QIcon(":/res/generic.png"), tr("RISC Listing Browser"), this); + riscDasmBrowseAct->setStatusTip(tr("Shows the RISC disassembly browser window")); +// memBrowseAct->setCheckable(true); + connect(riscDasmBrowseAct, SIGNAL(triggered()), this, SLOT(ShowRISCDasmBrowserWin())); + // Misc. connections... connect(filePickWin, SIGNAL(RequestLoad(QString)), this, SLOT(LoadSoftware(QString))); connect(filePickWin, SIGNAL(FilePickerHiding()), this, SLOT(Unpause())); @@ -236,6 +258,9 @@ MainWin::MainWin(bool autoRun): running(true), powerButtonOn(false), debugMenu = menuBar()->addMenu(tr("&Debug")); debugMenu->addAction(memBrowseAct); debugMenu->addAction(cpuBrowseAct); + debugMenu->addAction(opBrowseAct); + debugMenu->addAction(m68kDasmBrowseAct); + debugMenu->addAction(riscDasmBrowseAct); } helpMenu = menuBar()->addMenu(tr("&Help")); @@ -263,6 +288,9 @@ MainWin::MainWin(bool autoRun): running(true), powerButtonOn(false), debugbar = addToolBar(tr("&Debug")); debugbar->addAction(memBrowseAct); debugbar->addAction(cpuBrowseAct); + debugbar->addAction(opBrowseAct); + debugbar->addAction(m68kDasmBrowseAct); + debugbar->addAction(riscDasmBrowseAct); } // Create status bar @@ -485,6 +513,21 @@ void MainWin::HandleKeys(QKeyEvent * e, bool state) } +void MainWin::HandleGamepads(void) +{ + Gamepad::Update(); + + for(int i=BUTTON_FIRST; i<=BUTTON_LAST; i++) + { + if (vjs.p1KeyBindings[i] & (JOY_BUTTON | JOY_HAT)) + joypad_0_buttons[i] = (Gamepad::GetState(0, vjs.p1KeyBindings[i]) ? 0x01 : 0x00); + + if (vjs.p2KeyBindings[i] & (JOY_BUTTON | JOY_HAT)) + joypad_1_buttons[i] = (Gamepad::GetState(1, vjs.p2KeyBindings[i]) ? 0x01 : 0x00); + } +} + + void MainWin::Open(void) { } @@ -573,21 +616,22 @@ void MainWin::Timer(void) // Some machines can't handle this, so we give them the option to disable it. :-) if (!plzDontKillMyComputer) { - // Random hash & trash - // We try to simulate an untuned tank circuit here... :-) - for(uint32_t x=0; xrasterWidth; x++) - { - 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; + for(uint32_t y=0; yrasterHeight; y++) + { + videoWidget->buffer[(y * videoWidget->textureWidth) + x] + = (rand() & 0xFF) << 8 | (rand() & 0xFF) << 16 | (rand() & 0xFF) << 24; + } } } - } } else { // Otherwise, run the Jaguar simulation + HandleGamepads(); JaguarExecuteNew(); } @@ -611,6 +655,7 @@ void MainWin::TogglePowerState(void) showUntunedTankCircuit = 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. :-) + DACPauseAudioThread(); TOMReset(); } else @@ -636,6 +681,7 @@ void MainWin::TogglePowerState(void) WriteLog("GUI: Resetting Jaguar...\n"); JaguarReset(); + DACPauseAudioThread(false); } } @@ -656,6 +702,9 @@ void MainWin::ToggleRunState(void) videoWidget->updateGL(); } + + // Pause/unpause any running/non-running threads... + DACPauseAudioThread(!running); } @@ -864,6 +913,27 @@ void MainWin::ShowCPUBrowserWin(void) } +void MainWin::ShowOPBrowserWin(void) +{ + opBrowseWin->show(); + opBrowseWin->RefreshContents(); +} + + +void MainWin::ShowM68KDasmBrowserWin(void) +{ + m68kDasmBrowseWin->show(); + m68kDasmBrowseWin->RefreshContents(); +} + + +void MainWin::ShowRISCDasmBrowserWin(void) +{ + riscDasmBrowseWin->show(); + riscDasmBrowseWin->RefreshContents(); +} + + void MainWin::ResizeMainWindow(void) { // videoWidget->setFixedSize(zoomLevel * 320, zoomLevel * (vjs.hardwareTypeNTSC ? 240 : 256));