#include #include "emu.h" #include "debugger.h" #include "debugqtwindow.h" #include "debugqtlogwindow.h" #include "debugqtdasmwindow.h" #include "debugqtmemorywindow.h" bool WindowQt::s_refreshAll = false; bool WindowQt::s_hideAll = false; WindowQt::WindowQt(running_machine* machine, QWidget* parent) : QMainWindow(parent), m_machine(machine) { //setAttribute(Qt::WA_DeleteOnClose, true); // The Debug menu bar QAction* debugActOpenMemory = new QAction("New &Memory Window", this); debugActOpenMemory->setShortcut(QKeySequence("Ctrl+M")); connect(debugActOpenMemory, SIGNAL(triggered()), this, SLOT(debugActOpenMemory())); QAction* debugActOpenDasm = new QAction("New &Dasm Window", this); debugActOpenDasm->setShortcut(QKeySequence("Ctrl+D")); connect(debugActOpenDasm, SIGNAL(triggered()), this, SLOT(debugActOpenDasm())); QAction* debugActOpenLog = new QAction("New &Log Window", this); debugActOpenLog->setShortcut(QKeySequence("Ctrl+L")); connect(debugActOpenLog, SIGNAL(triggered()), this, SLOT(debugActOpenLog())); QAction* dbgActRun = new QAction("Run", this); dbgActRun->setShortcut(Qt::Key_F5); connect(dbgActRun, SIGNAL(triggered()), this, SLOT(debugActRun())); QAction* dbgActRunAndHide = new QAction("Run And Hide Debugger", this); dbgActRunAndHide->setShortcut(Qt::Key_F12); connect(dbgActRunAndHide, SIGNAL(triggered()), this, SLOT(debugActRunAndHide())); QAction* dbgActRunToNextCpu = new QAction("Run to Next CPU", this); dbgActRunToNextCpu->setShortcut(Qt::Key_F6); connect(dbgActRunToNextCpu, SIGNAL(triggered()), this, SLOT(debugActRunToNextCpu())); QAction* dbgActRunNextInt = new QAction("Run to Next Interrupt on This CPU", this); dbgActRunNextInt->setShortcut(Qt::Key_F7); connect(dbgActRunNextInt, SIGNAL(triggered()), this, SLOT(debugActRunNextInt())); QAction* dbgActRunNextVBlank = new QAction("Run to Next VBlank", this); dbgActRunNextVBlank->setShortcut(Qt::Key_F8); connect(dbgActRunNextVBlank, SIGNAL(triggered()), this, SLOT(debugActRunNextVBlank())); QAction* dbgActStepInto = new QAction("Step Into", this); dbgActStepInto->setShortcut(Qt::Key_F11); connect(dbgActStepInto, SIGNAL(triggered()), this, SLOT(debugActStepInto())); QAction* dbgActStepOver = new QAction("Step Over", this); dbgActStepOver->setShortcut(Qt::Key_F10); connect(dbgActStepOver, SIGNAL(triggered()), this, SLOT(debugActStepOver())); QAction* dbgActStepOut = new QAction("Step Out", this); dbgActStepOut->setShortcut(QKeySequence("Shift+F11")); connect(dbgActStepOut, SIGNAL(triggered()), this, SLOT(debugActStepOut())); QAction* dbgActSoftReset = new QAction("Soft Reset", this); dbgActSoftReset->setShortcut(Qt::Key_F3); connect(dbgActSoftReset, SIGNAL(triggered()), this, SLOT(debugActSoftReset())); QAction* dbgActHardReset = new QAction("Hard Reset", this); dbgActHardReset->setShortcut(QKeySequence("Shift+F3")); connect(dbgActHardReset, SIGNAL(triggered()), this, SLOT(debugActHardReset())); QAction* dbgActClose = new QAction("Close &Window", this); dbgActClose->setShortcut(QKeySequence::Close); connect(dbgActClose, SIGNAL(triggered()), this, SLOT(debugActClose())); QAction* dbgActQuit = new QAction("&Quit", this); dbgActQuit->setShortcut(QKeySequence::Quit); connect(dbgActQuit, SIGNAL(triggered()), this, SLOT(debugActQuit())); // Construct the menu QMenu* debugMenu = menuBar()->addMenu("&Debug"); debugMenu->addAction(debugActOpenMemory); debugMenu->addAction(debugActOpenDasm); debugMenu->addAction(debugActOpenLog); debugMenu->addSeparator(); debugMenu->addAction(dbgActRun); debugMenu->addAction(dbgActRunAndHide); debugMenu->addAction(dbgActRunToNextCpu); debugMenu->addAction(dbgActRunNextInt); debugMenu->addAction(dbgActRunNextVBlank); debugMenu->addSeparator(); debugMenu->addAction(dbgActStepInto); debugMenu->addAction(dbgActStepOver); debugMenu->addAction(dbgActStepOut); debugMenu->addSeparator(); debugMenu->addAction(dbgActSoftReset); debugMenu->addAction(dbgActHardReset); debugMenu->addSeparator(); debugMenu->addAction(dbgActClose); debugMenu->addAction(dbgActQuit); } void WindowQt::debugActOpenMemory() { MemoryWindow* foo = new MemoryWindow(m_machine, this); // A valiant effort, but it just doesn't wanna' hide behind the main window & not make a new toolbar icon // foo->setWindowFlags(Qt::Dialog); // foo->setWindowFlags(foo->windowFlags() & ~Qt::WindowStaysOnTopHint); foo->show(); } void WindowQt::debugActOpenDasm() { DasmWindow* foo = new DasmWindow(m_machine, this); // A valiant effort, but it just doesn't wanna' hide behind the main window & not make a new toolbar icon // foo->setWindowFlags(Qt::Dialog); // foo->setWindowFlags(foo->windowFlags() & ~Qt::WindowStaysOnTopHint); foo->show(); } void WindowQt::debugActOpenLog() { LogWindow* foo = new LogWindow(m_machine, this); // A valiant effort, but it just doesn't wanna' hide behind the main window & not make a new toolbar icon // foo->setWindowFlags(Qt::Dialog); // foo->setWindowFlags(foo->windowFlags() & ~Qt::WindowStaysOnTopHint); foo->show(); } void WindowQt::debugActRun() { debug_cpu_get_visible_cpu(*m_machine)->debug()->go(); } void WindowQt::debugActRunAndHide() { debug_cpu_get_visible_cpu(*m_machine)->debug()->go(); hideAll(); } void WindowQt::debugActRunToNextCpu() { debug_cpu_get_visible_cpu(*m_machine)->debug()->go_next_device(); } void WindowQt::debugActRunNextInt() { debug_cpu_get_visible_cpu(*m_machine)->debug()->go_interrupt(); } void WindowQt::debugActRunNextVBlank() { debug_cpu_get_visible_cpu(*m_machine)->debug()->go_vblank(); } void WindowQt::debugActStepInto() { debug_cpu_get_visible_cpu(*m_machine)->debug()->single_step(); } void WindowQt::debugActStepOver() { debug_cpu_get_visible_cpu(*m_machine)->debug()->single_step_over(); } void WindowQt::debugActStepOut() { debug_cpu_get_visible_cpu(*m_machine)->debug()->single_step_out(); } void WindowQt::debugActSoftReset() { m_machine->schedule_soft_reset(); debug_cpu_get_visible_cpu(*m_machine)->debug()->single_step(); } void WindowQt::debugActHardReset() { m_machine->schedule_hard_reset(); } void WindowQt::debugActClose() { close(); } void WindowQt::debugActQuit() { m_machine->schedule_exit(); }