summaryrefslogblamecommitdiffstatshomepage
path: root/src/osd/sdl/debugqtwindow.c
blob: 997cfe54f448629395f9220343191072c76e71d1 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11










                                    
                                 

 



                                                               

                                                   



































































                                                                                               
                                               












                                                  




                                   




                                                                                                                 




                                 




                                                                                                                 




                                




                                                                                                                 




                            
                                                             



                                   
                                                             
                  



                                     
                                                                         



                                   
                                                                       



                                      
                                                                    



                                 
                                                                      



                                 
                                                                           



                                
                                                                          



                                  
                                         
                                                                      



                                  
                                         



                              
                



                             
                                   
 
#include <QtGui/QtGui>

#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();
}