Add debug dialogs (DisAsm, Memory, VFPU).
New features : Breakpoint display, thread status, display list status Update translation and start french translation
This commit is contained in:
parent
2e0beb5833
commit
69b837f18b
46 changed files with 4999 additions and 618 deletions
|
@ -99,7 +99,15 @@ reswitch:
|
|||
// We should never get here on Android.
|
||||
case CORE_STEPPING:
|
||||
//1: wait for step command..
|
||||
#if defined(USING_QT_UI) || defined(_DEBUG)
|
||||
host->SendCoreWait(true);
|
||||
#endif
|
||||
|
||||
m_hStepEvent.wait(m_hStepMutex);
|
||||
|
||||
#if defined(USING_QT_UI) || defined(_DEBUG)
|
||||
host->SendCoreWait(false);
|
||||
#endif
|
||||
if (coreState == CORE_POWERDOWN)
|
||||
return;
|
||||
if (coreState != CORE_STEPPING)
|
||||
|
@ -112,7 +120,7 @@ reswitch:
|
|||
currentCPU = &mipsr4k;
|
||||
Core_SingleStep();
|
||||
//4: update disasm dialog
|
||||
#ifdef _DEBUG
|
||||
#if defined(USING_QT_UI) || defined(_DEBUG)
|
||||
host->UpdateDisassembly();
|
||||
host->UpdateMemView();
|
||||
#endif
|
||||
|
|
|
@ -143,3 +143,13 @@ void CBreakPoints::InvalidateJit()
|
|||
if (MIPSComp::jit && coreState == CORE_STEPPING)
|
||||
MIPSComp::jit->ClearCache();
|
||||
}
|
||||
|
||||
int CBreakPoints::GetNumBreakpoints()
|
||||
{
|
||||
return m_iBreakPoints.size();
|
||||
}
|
||||
|
||||
int CBreakPoints::GetBreakpointAddress(int i)
|
||||
{
|
||||
return m_iBreakPoints[i].iAddress;
|
||||
}
|
||||
|
|
|
@ -83,6 +83,9 @@ public:
|
|||
|
||||
static void InvalidateJit(u32 _iAddress);
|
||||
static void InvalidateJit();
|
||||
|
||||
static int GetNumBreakpoints();
|
||||
static int GetBreakpointAddress(int i);
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -334,6 +334,11 @@ int SymbolMap::GetNumSymbols()
|
|||
{
|
||||
return (int)entries.size();
|
||||
}
|
||||
SymbolType SymbolMap::GetSymbolType(int i)
|
||||
{
|
||||
return entries[i].type;
|
||||
}
|
||||
|
||||
char *SymbolMap::GetSymbolName(int i)
|
||||
{
|
||||
return entries[i].name;
|
||||
|
|
|
@ -52,6 +52,7 @@ public:
|
|||
void SetSymbolName(int i, const char *newname);
|
||||
u32 GetSymbolSize(int i);
|
||||
u32 GetSymbolAddr(int i);
|
||||
SymbolType GetSymbolType(int i);
|
||||
int FindSymbol(const char *name);
|
||||
u32 GetAddress(int num);
|
||||
void IncreaseRunCount(int num);
|
||||
|
@ -61,7 +62,6 @@ public:
|
|||
void UseFuncSignaturesFile(const char *filename, u32 maxAddress);
|
||||
void CompileFuncSignaturesFile(const char *filename);
|
||||
|
||||
|
||||
private:
|
||||
struct MapEntry
|
||||
{
|
||||
|
|
|
@ -2722,3 +2722,38 @@ u32 __KernelNotifyCallbackType(RegisteredCallbackType type, SceUID cbId, int not
|
|||
return 0;
|
||||
}
|
||||
|
||||
std::vector<DebugThreadInfo> GetThreadsInfo()
|
||||
{
|
||||
std::vector<DebugThreadInfo> threadList;
|
||||
|
||||
u32 error;
|
||||
for (std::vector<SceUID>::iterator iter = threadqueue.begin(); iter != threadqueue.end(); iter++)
|
||||
{
|
||||
Thread *t = kernelObjects.Get<Thread>(*iter, error);
|
||||
if (!t)
|
||||
continue;
|
||||
|
||||
DebugThreadInfo info;
|
||||
info.id = *iter;
|
||||
strncpy(info.name,t->GetName(),KERNELOBJECT_MAX_NAME_LENGTH);
|
||||
info.name[KERNELOBJECT_MAX_NAME_LENGTH+1] = 0;
|
||||
info.status = t->nt.status;
|
||||
info.entrypoint = t->nt.entrypoint;
|
||||
info.curPC = t->context.pc;
|
||||
info.isCurrent = (*iter == currentThread);
|
||||
threadList.push_back(info);
|
||||
}
|
||||
|
||||
return threadList;
|
||||
}
|
||||
|
||||
void __KernelChangeThreadState(SceUID threadId, ThreadStatus newStatus)
|
||||
{
|
||||
u32 error;
|
||||
Thread *t = kernelObjects.Get<Thread>(threadId, error);
|
||||
if (!t)
|
||||
return;
|
||||
|
||||
__KernelChangeThreadState(t, newStatus);
|
||||
}
|
||||
|
||||
|
|
|
@ -257,3 +257,16 @@ void __KernelChangeThreadState(Thread *thread, ThreadStatus newStatus);
|
|||
|
||||
typedef void (*ThreadCallback)(SceUID threadID);
|
||||
void __KernelListenThreadEnd(ThreadCallback callback);
|
||||
|
||||
struct DebugThreadInfo
|
||||
{
|
||||
SceUID id;
|
||||
char name[KERNELOBJECT_MAX_NAME_LENGTH+1];
|
||||
u32 status;
|
||||
int curPC;
|
||||
int entrypoint;
|
||||
bool isCurrent;
|
||||
};
|
||||
|
||||
std::vector<DebugThreadInfo> GetThreadsInfo();
|
||||
void __KernelChangeThreadState(SceUID threadId, ThreadStatus newStatus);
|
||||
|
|
|
@ -61,6 +61,13 @@ public:
|
|||
virtual bool AttemptLoadSymbolMap() {return false;}
|
||||
virtual void SetWindowTitle(const char *message) {}
|
||||
|
||||
virtual void SendCoreWait(bool) {}
|
||||
|
||||
virtual bool GpuStep() { return false; }
|
||||
virtual void SendGPUWait() {}
|
||||
virtual void SetGPUStep(bool value) {}
|
||||
virtual void NextGPUStep() {}
|
||||
|
||||
// Used for headless.
|
||||
virtual void SendDebugOutput(const std::string &output) {}
|
||||
virtual void SendDebugScreenshot(const u8 *pixbuf, u32 w, u32 h) {}
|
||||
|
|
|
@ -80,6 +80,10 @@ enum
|
|||
// George Marsaglia-style random number generator.
|
||||
class GMRng {
|
||||
public:
|
||||
GMRng() {
|
||||
m_w = 0x23E866ED;
|
||||
m_z = 0x80FD5AF2;
|
||||
}
|
||||
void Init(int seed) {
|
||||
m_w = seed ^ (seed << 16);
|
||||
if (!m_w) m_w = 1337;
|
||||
|
@ -91,6 +95,9 @@ public:
|
|||
m_w = 18000 * (m_w & 65535) + (m_w >> 16);
|
||||
return (m_z << 16) + m_w;
|
||||
}
|
||||
float F() {
|
||||
return (float)R32() / (float)(0xFFFFFFFF);
|
||||
}
|
||||
|
||||
void DoState(PointerWrap &p);
|
||||
|
||||
|
|
|
@ -4,7 +4,9 @@
|
|||
#include "GPUCommon.h"
|
||||
#include "GPUState.h"
|
||||
#include "ChunkFile.h"
|
||||
|
||||
#if defined(USING_QT_UI)
|
||||
#include "Core/Host.h"
|
||||
#endif
|
||||
|
||||
static int dlIdGenerator = 1;
|
||||
|
||||
|
@ -28,6 +30,9 @@ u32 GPUCommon::EnqueueList(u32 listpc, u32 stall, int subIntrBase, bool head)
|
|||
{
|
||||
DisplayList dl;
|
||||
dl.id = dlIdGenerator++;
|
||||
#if defined(USING_QT_UI)
|
||||
dl.startpc = listpc & 0xFFFFFFF;
|
||||
#endif
|
||||
dl.pc = listpc & 0xFFFFFFF;
|
||||
dl.stall = stall & 0xFFFFFFF;
|
||||
dl.status = PSP_GE_LIST_QUEUED;
|
||||
|
@ -82,6 +87,12 @@ bool GPUCommon::InterpretList(DisplayList &list)
|
|||
list.status = PSP_GE_LIST_STALL_REACHED;
|
||||
return false;
|
||||
}
|
||||
#if defined(USING_QT_UI)
|
||||
if(host->GpuStep())
|
||||
{
|
||||
host->SendGPUWait();
|
||||
}
|
||||
#endif
|
||||
op = Memory::ReadUnchecked_U32(list.pc); //read from memory
|
||||
u32 cmd = op >> 24;
|
||||
u32 diff = op ^ gstate.cmdmem[cmd];
|
||||
|
|
|
@ -53,4 +53,13 @@ public:
|
|||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
const std::deque<DisplayList>& GetDisplayLists()
|
||||
{
|
||||
return dlQueue;
|
||||
}
|
||||
DisplayList* GetCurrentDisplayList()
|
||||
{
|
||||
return currentList;
|
||||
}
|
||||
};
|
||||
|
|
|
@ -35,6 +35,9 @@ enum DisplayListStatus
|
|||
struct DisplayList
|
||||
{
|
||||
int id;
|
||||
#if defined(USING_QT_UI)
|
||||
u32 startpc;
|
||||
#endif
|
||||
u32 pc;
|
||||
u32 stall;
|
||||
DisplayListStatus status;
|
||||
|
@ -91,4 +94,6 @@ public:
|
|||
|
||||
// Debugging
|
||||
virtual void DumpNextFrame() = 0;
|
||||
virtual const std::deque<DisplayList>& GetDisplayLists() = 0;
|
||||
virtual DisplayList* GetCurrentDisplayList() = 0;
|
||||
};
|
||||
|
|
|
@ -396,7 +396,11 @@ void GeDisassembleOp(u32 pc, u32 op, u32 prev, char *buffer) {
|
|||
case GE_CMD_TEXSIZE5:
|
||||
case GE_CMD_TEXSIZE6:
|
||||
case GE_CMD_TEXSIZE7:
|
||||
sprintf(buffer, "Texture Size %i: %06x", cmd - GE_CMD_TEXSIZE0, data);
|
||||
{
|
||||
int w = 1 << (data & 0xf);
|
||||
int h = 1 << ((data>>8) & 0xf);
|
||||
sprintf(buffer, "Texture Size %i: %06x, width : %d, height : %d", cmd - GE_CMD_TEXSIZE0, data, w, h);
|
||||
}
|
||||
break;
|
||||
|
||||
case GE_CMD_ZBUFPTR:
|
||||
|
|
|
@ -18,9 +18,10 @@
|
|||
#include "gfx_es2/gl_state.h"
|
||||
#include "GPU/GPUState.h"
|
||||
#include "android/jni/ui_atlas.h"
|
||||
#include "native/util/random/rng.h"
|
||||
#include "native/base/timeutil.h"
|
||||
#include "native/base/colorutil.h"
|
||||
#include "GPU/GPUState.h"
|
||||
#include "GPU/GPUInterface.h"
|
||||
|
||||
#include "qtemugl.h"
|
||||
#include "QtHost.h"
|
||||
|
@ -114,6 +115,26 @@ void EmuThread_LockDraw(bool value)
|
|||
}
|
||||
}
|
||||
|
||||
QString GetCurrentFilename()
|
||||
{
|
||||
return fileToStart;
|
||||
}
|
||||
|
||||
|
||||
EmuThread::EmuThread()
|
||||
: running(false)
|
||||
, gameRunning(false)
|
||||
, needInitGame(false)
|
||||
, frames_(0)
|
||||
, gameMutex( new QMutex(QMutex::Recursive))
|
||||
, mutexLockNum(0)
|
||||
{
|
||||
}
|
||||
|
||||
EmuThread::~EmuThread()
|
||||
{
|
||||
delete gameMutex;
|
||||
}
|
||||
|
||||
void EmuThread::init(InputState *inputState)
|
||||
{
|
||||
|
@ -143,13 +164,14 @@ void EmuThread::run()
|
|||
//UpdateGamepad(*input_state);
|
||||
timer.start();
|
||||
|
||||
gameMutex.lock();
|
||||
gameMutex->lock();
|
||||
bool gRun = gameRunning;
|
||||
gameMutex.unlock();
|
||||
gameMutex->unlock();
|
||||
|
||||
if(gRun)
|
||||
{
|
||||
gameMutex.lock();
|
||||
|
||||
gameMutex->lock();
|
||||
|
||||
glWindow->makeCurrent();
|
||||
if(needInitGame)
|
||||
|
@ -227,14 +249,14 @@ void EmuThread::run()
|
|||
|
||||
qint64 time = timer.elapsed();
|
||||
const int frameTime = (1.0f/60.0f) * 1000;
|
||||
gameMutex.unlock();
|
||||
gameMutex->unlock();
|
||||
if(time < frameTime)
|
||||
{
|
||||
glWindow->doneCurrent();
|
||||
msleep(frameTime-time);
|
||||
glWindow->makeCurrent();
|
||||
}
|
||||
gameMutex.lock();
|
||||
gameMutex->lock();
|
||||
timer.start();
|
||||
}
|
||||
|
||||
|
@ -265,11 +287,11 @@ void EmuThread::run()
|
|||
#endif
|
||||
glWindow->swapBuffers();
|
||||
glWindow->doneCurrent();
|
||||
gameMutex.unlock();
|
||||
gameMutex->unlock();
|
||||
}
|
||||
else
|
||||
{
|
||||
gameMutex.lock();
|
||||
gameMutex->lock();
|
||||
glWindow->makeCurrent();
|
||||
glClearColor(0, 0, 0, 0);
|
||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
|
||||
|
@ -311,7 +333,7 @@ void EmuThread::run()
|
|||
|
||||
glWindow->swapBuffers();
|
||||
glWindow->doneCurrent();
|
||||
gameMutex.unlock();
|
||||
gameMutex->unlock();
|
||||
qint64 time = timer.elapsed();
|
||||
const int frameTime = (1.0f/60.0f) * 1000;
|
||||
if(time < frameTime)
|
||||
|
@ -358,18 +380,18 @@ void EmuThread::setRunning(bool value)
|
|||
|
||||
void EmuThread::startGame(QString filename)
|
||||
{
|
||||
gameMutex.lock();
|
||||
gameMutex->lock();
|
||||
needInitGame = true;
|
||||
gameRunning = true;
|
||||
fileToStart = filename;
|
||||
gameMutex.unlock();
|
||||
gameMutex->unlock();
|
||||
|
||||
}
|
||||
|
||||
void EmuThread::stopGame()
|
||||
{
|
||||
Core_Stop();
|
||||
gameMutex.lock();
|
||||
gameMutex->lock();
|
||||
gameRunning = false;
|
||||
|
||||
PSP_Shutdown();
|
||||
|
@ -380,7 +402,25 @@ void EmuThread::stopGame()
|
|||
g_State.bEmuThreadStarted = false;
|
||||
frames_ = 0;
|
||||
|
||||
gameMutex.unlock();
|
||||
gameMutex->unlock();
|
||||
}
|
||||
|
||||
void EmuThread::LockGL(bool lock)
|
||||
{
|
||||
if(lock)
|
||||
{
|
||||
gameMutex->lock();
|
||||
if(mutexLockNum == 0)
|
||||
glWindow->makeCurrent();
|
||||
mutexLockNum++;
|
||||
}
|
||||
else
|
||||
{
|
||||
mutexLockNum--;
|
||||
if(mutexLockNum == 0)
|
||||
glWindow->doneCurrent();
|
||||
gameMutex->unlock();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -8,14 +8,15 @@ class QtEmuGL;
|
|||
class EmuThread : public QThread
|
||||
{
|
||||
public:
|
||||
EmuThread() : running(false), gameRunning(false), needInitGame(false), frames_(0) {}
|
||||
EmuThread();
|
||||
~EmuThread();
|
||||
void init(InputState* inputState);
|
||||
void run();
|
||||
void FinalShutdown();
|
||||
void setRunning(bool value);
|
||||
void startGame(QString filename);
|
||||
void stopGame();
|
||||
QMutex gameMutex;
|
||||
void LockGL(bool value);
|
||||
public slots:
|
||||
void Shutdown();
|
||||
private:
|
||||
|
@ -24,6 +25,8 @@ private:
|
|||
bool gameRunning;
|
||||
bool needInitGame;
|
||||
int frames_;
|
||||
QMutex *gameMutex;
|
||||
int mutexLockNum;
|
||||
|
||||
};
|
||||
|
||||
|
@ -32,3 +35,4 @@ void EmuThread_Stop();
|
|||
void EmuThread_StartGame(QString filename);
|
||||
void EmuThread_StopGame();
|
||||
void EmuThread_LockDraw(bool value);
|
||||
QString GetCurrentFilename();
|
||||
|
|
|
@ -22,7 +22,8 @@ desktop_ui {
|
|||
}
|
||||
|
||||
TRANSLATIONS = languages/ppsspp_en.ts \
|
||||
languages/ppsspp_pl.ts
|
||||
languages/ppsspp_pl.ts \
|
||||
languages/ppsspp_fr.ts
|
||||
|
||||
# Main
|
||||
SOURCES += ../native/base/QtMain.cpp
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
#include "android/jni/EmuScreen.h"
|
||||
#include "android/jni/UIShader.h"
|
||||
#include "android/jni/ui_atlas.h"
|
||||
#include "EmuThread.h"
|
||||
|
||||
std::string boot_filename = "";
|
||||
Texture *uiTexture;
|
||||
|
@ -20,20 +21,22 @@ ScreenManager *screenManager;
|
|||
std::string config_filename;
|
||||
std::string game_title;
|
||||
|
||||
event m_hGPUStepEvent;
|
||||
recursive_mutex m_hGPUStepMutex;
|
||||
|
||||
QtHost::QtHost(MainWindow *mainWindow_)
|
||||
: mainWindow(mainWindow_)
|
||||
, m_GPUStep(false)
|
||||
{
|
||||
QObject::connect(this,SIGNAL(BootDoneSignal()),mainWindow,SLOT(Boot()));
|
||||
}
|
||||
|
||||
void QtHost::InitGL()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void QtHost::ShutdownGL()
|
||||
{
|
||||
//GL_Shutdown();
|
||||
}
|
||||
|
||||
void QtHost::SetWindowTitle(const char *message)
|
||||
|
@ -45,30 +48,28 @@ void QtHost::SetWindowTitle(const char *message)
|
|||
|
||||
void QtHost::UpdateUI()
|
||||
{
|
||||
//mainWindow->Update();
|
||||
mainWindow->Update();
|
||||
mainWindow->UpdateMenus();
|
||||
}
|
||||
|
||||
|
||||
void QtHost::UpdateMemView()
|
||||
{
|
||||
/*for (int i=0; i<numCPUs; i++)
|
||||
if (memoryWindow[i])
|
||||
memoryWindow[i]->Update();*/
|
||||
if(mainWindow->GetDialogMemory())
|
||||
mainWindow->GetDialogMemory()->Update();
|
||||
}
|
||||
|
||||
void QtHost::UpdateDisassembly()
|
||||
{
|
||||
/*for (int i=0; i<numCPUs; i++)
|
||||
if (disasmWindow[i])
|
||||
disasmWindow[i]->Update();*/
|
||||
/*if(dialogDisasm)
|
||||
dialogDisasm->Update();*/
|
||||
if(mainWindow->GetDialogDisasm())
|
||||
{
|
||||
mainWindow->GetDialogDisasm()->GotoPC();
|
||||
mainWindow->GetDialogDisasm()->Update();
|
||||
}
|
||||
}
|
||||
|
||||
void QtHost::SetDebugMode(bool mode)
|
||||
{
|
||||
/*for (int i=0; i<numCPUs; i++)*/
|
||||
if(mainWindow->GetDialogDisasm())
|
||||
mainWindow->GetDialogDisasm()->SetDebugMode(mode);
|
||||
}
|
||||
|
@ -76,14 +77,9 @@ void QtHost::SetDebugMode(bool mode)
|
|||
|
||||
void QtHost::BeginFrame()
|
||||
{
|
||||
/*for (auto iter = this->input.begin(); iter != this->input.end(); iter++)
|
||||
if ((*iter)->UpdateState() == 0)
|
||||
break; // *iter is std::shared_ptr, **iter is InputDevice
|
||||
GL_BeginFrame();*/
|
||||
}
|
||||
void QtHost::EndFrame()
|
||||
{
|
||||
//GL_EndFrame();
|
||||
}
|
||||
|
||||
void QtHost::InitSound(PMixer *mixer)
|
||||
|
@ -102,18 +98,26 @@ void QtHost::BootDone()
|
|||
emit BootDoneSignal();
|
||||
}
|
||||
|
||||
|
||||
static QString SymbolMapFilename(QString currentFilename)
|
||||
{
|
||||
std::string result = currentFilename.toStdString();
|
||||
size_t dot = result.rfind('.');
|
||||
if (dot == result.npos)
|
||||
return (result + ".map").c_str();
|
||||
|
||||
result.replace(dot, result.npos, ".map");
|
||||
return result.c_str();
|
||||
}
|
||||
|
||||
bool QtHost::AttemptLoadSymbolMap()
|
||||
{
|
||||
QFileInfo currentFile(fileToStart);
|
||||
QString ret = currentFile.baseName() + ".map";
|
||||
return symbolMap.LoadSymbolMap(ret.toAscii().constData());
|
||||
return symbolMap.LoadSymbolMap(SymbolMapFilename(GetCurrentFilename()).toStdString().c_str());
|
||||
}
|
||||
|
||||
void QtHost::PrepareShutdown()
|
||||
{
|
||||
QFileInfo currentFile(fileToStart);
|
||||
QString ret = currentFile.baseName() + ".map";
|
||||
symbolMap.SaveSymbolMap(ret.toAscii().constData());
|
||||
symbolMap.SaveSymbolMap(SymbolMapFilename(GetCurrentFilename()).toStdString().c_str());
|
||||
}
|
||||
|
||||
void QtHost::AddSymbol(std::string name, u32 addr, u32 size, int type=0)
|
||||
|
@ -130,6 +134,36 @@ bool QtHost::IsDebuggingEnabled()
|
|||
#endif
|
||||
}
|
||||
|
||||
void QtHost::SendCoreWait(bool isWaiting)
|
||||
{
|
||||
mainWindow->CoreEmitWait(isWaiting);
|
||||
}
|
||||
|
||||
bool QtHost::GpuStep()
|
||||
{
|
||||
return m_GPUStep;
|
||||
}
|
||||
|
||||
void QtHost::SendGPUWait()
|
||||
{
|
||||
EmuThread_LockDraw(false);
|
||||
|
||||
mainWindow->GetDialogDisasm()->UpdateDisplayList();
|
||||
m_hGPUStepEvent.wait(m_hGPUStepMutex);
|
||||
|
||||
EmuThread_LockDraw(true);
|
||||
}
|
||||
|
||||
void QtHost::SetGPUStep(bool value)
|
||||
{
|
||||
m_GPUStep = value;
|
||||
}
|
||||
|
||||
void QtHost::NextGPUStep()
|
||||
{
|
||||
m_hGPUStepEvent.notify_one();
|
||||
}
|
||||
|
||||
void NativeMix(short *audio, int num_samples)
|
||||
{
|
||||
if (g_mixer)
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
#include "gfx/texture.h"
|
||||
#include "input/input_state.h"
|
||||
#include "math/math_util.h"
|
||||
#include "base/mutex.h"
|
||||
#include "math/lin/matrix4x4.h"
|
||||
#include <QGLWidget>
|
||||
|
||||
|
@ -48,10 +49,17 @@ public:
|
|||
bool AttemptLoadSymbolMap();
|
||||
void SetWindowTitle(const char *message);
|
||||
|
||||
void SendCoreWait(bool);
|
||||
bool GpuStep();
|
||||
void SendGPUWait();
|
||||
void SetGPUStep(bool value);
|
||||
void NextGPUStep();
|
||||
|
||||
signals:
|
||||
void BootDoneSignal();
|
||||
private:
|
||||
MainWindow* mainWindow;
|
||||
bool m_GPUStep;
|
||||
};
|
||||
|
||||
#endif // QTAPP_H
|
||||
|
|
|
@ -1,18 +1,451 @@
|
|||
#include "ctrldisasmview.h"
|
||||
#include <QPainter>
|
||||
#include <QKeyEvent>
|
||||
#include <QClipboard>
|
||||
#include <QMenu>
|
||||
#include <QAction>
|
||||
#include <QApplication>
|
||||
#include <QDebug>
|
||||
#include <QInputDialog>
|
||||
#include <QMessageBox>
|
||||
|
||||
#include "debugger_disasm.h"
|
||||
#include "Core/Debugger/SymbolMap.h"
|
||||
|
||||
namespace
|
||||
{
|
||||
u32 halfAndHalf(u32 a, u32 b)
|
||||
{
|
||||
return ((a>>1)&0x7f7f7f7f) + ((b>>1)&0x7f7f7f7f);
|
||||
}
|
||||
}
|
||||
|
||||
CtrlDisAsmView::CtrlDisAsmView(QWidget *parent) :
|
||||
QTableWidget(parent)
|
||||
QWidget(parent)
|
||||
{
|
||||
curAddress=0;
|
||||
rowHeight=14;
|
||||
align=2;
|
||||
selecting=false;
|
||||
showHex=false;
|
||||
}
|
||||
|
||||
void CtrlDisAsmView::keyPressEvent(QKeyEvent *e)
|
||||
{
|
||||
int page=(rect().bottom()/rowHeight)/2-1;
|
||||
|
||||
if(e->key() == Qt::Key_Down)
|
||||
{
|
||||
curAddress += align;
|
||||
e->accept();
|
||||
}
|
||||
else if(e->key() == Qt::Key_Up)
|
||||
{
|
||||
curAddress -= align;
|
||||
e->accept();
|
||||
}
|
||||
else if(e->key() == Qt::Key_PageDown)
|
||||
{
|
||||
curAddress += page*align;
|
||||
e->accept();
|
||||
}
|
||||
else if(e->key() == Qt::Key_PageUp)
|
||||
{
|
||||
curAddress -= page*align;
|
||||
e->accept();
|
||||
}
|
||||
update();
|
||||
}
|
||||
|
||||
void CtrlDisAsmView::mousePressEvent(QMouseEvent *e)
|
||||
{
|
||||
int x = e->pos().x();
|
||||
int y = e->pos().y();
|
||||
if (x>16)
|
||||
{
|
||||
oldSelection=selection;
|
||||
selection=yToAddress(y);
|
||||
bool oldselecting=selecting;
|
||||
selecting=true;
|
||||
if (!oldselecting || (selection!=oldSelection))
|
||||
redraw();
|
||||
e->accept();
|
||||
}
|
||||
else
|
||||
{
|
||||
EmuThread_LockDraw(true);
|
||||
debugger->toggleBreakpoint(yToAddress(y));
|
||||
EmuThread_LockDraw(false);
|
||||
parentWindow->Update();
|
||||
redraw();
|
||||
e->accept();
|
||||
}
|
||||
}
|
||||
|
||||
void CtrlDisAsmView::wheelEvent(QWheelEvent* e)
|
||||
{
|
||||
int numDegrees = e->delta() / 8;
|
||||
int numSteps = numDegrees / 15;
|
||||
if (e->orientation() == Qt::Horizontal) {
|
||||
} else {
|
||||
curAddress -= numSteps*align;
|
||||
e->accept();
|
||||
update();
|
||||
}
|
||||
}
|
||||
|
||||
void CtrlDisAsmView::redraw()
|
||||
{
|
||||
update();
|
||||
}
|
||||
|
||||
void CtrlDisAsmView::contextMenu(const QPoint &pos)
|
||||
{
|
||||
QMenu menu(this);
|
||||
|
||||
QAction *copyAddress = new QAction(tr("Copy &address"), this);
|
||||
connect(copyAddress, SIGNAL(triggered()), this, SLOT(CopyAddress()));
|
||||
menu.addAction(copyAddress);
|
||||
|
||||
QAction *copyInstrHex = new QAction(tr("Copy instruction (&hex)"), this);
|
||||
connect(copyInstrHex, SIGNAL(triggered()), this, SLOT(CopyInstrHex()));
|
||||
menu.addAction(copyInstrHex);
|
||||
|
||||
QAction *copyInstrDisAsm = new QAction(tr("Copy instruction (&disasm)"), this);
|
||||
connect(copyInstrDisAsm, SIGNAL(triggered()), this, SLOT(CopyInstrDisAsm()));
|
||||
menu.addAction(copyInstrDisAsm);
|
||||
|
||||
menu.addSeparator();
|
||||
|
||||
QAction *runToHere = new QAction(tr("&Run to here"), this);
|
||||
connect(runToHere, SIGNAL(triggered()), this, SLOT(RunToHere()));
|
||||
menu.addAction(runToHere);
|
||||
|
||||
QAction *setNextStatement = new QAction(tr("&Set Next Statement"), this);
|
||||
connect(setNextStatement, SIGNAL(triggered()), this, SLOT(SetNextStatement()));
|
||||
menu.addAction(setNextStatement);
|
||||
|
||||
QAction *toggleBreakpoint = new QAction(tr("&Toggle breakpoint"), this);
|
||||
connect(toggleBreakpoint, SIGNAL(triggered()), this, SLOT(ToggleBreakpoint()));
|
||||
menu.addAction(toggleBreakpoint);
|
||||
|
||||
QAction *followBranch = new QAction(tr("&Follow branch"), this);
|
||||
connect(followBranch, SIGNAL(triggered()), this, SLOT(FollowBranch()));
|
||||
menu.addAction(followBranch);
|
||||
|
||||
menu.addSeparator();
|
||||
|
||||
//QAction *showDynarecResults = new QAction(tr("&Show Dynarec Results"), this);
|
||||
//connect(showDynarecResults, SIGNAL(triggered()), this, SLOT(ShowDynarecResults()));
|
||||
//menu.addAction(showDynarecResults);
|
||||
|
||||
QAction *goToMemoryView = new QAction(tr("Go to in &Memory View"), this);
|
||||
connect(goToMemoryView, SIGNAL(triggered()), this, SLOT(GoToMemoryView()));
|
||||
menu.addAction(goToMemoryView);
|
||||
|
||||
menu.addSeparator();
|
||||
|
||||
//QAction *killFunction = new QAction(tr("&Kill function"), this);
|
||||
//connect(killFunction, SIGNAL(triggered()), this, SLOT(KillFunction()));
|
||||
//menu.addAction(killFunction);
|
||||
|
||||
QAction *renameFunction = new QAction(tr("&Rename function..."), this);
|
||||
connect(renameFunction, SIGNAL(triggered()), this, SLOT(RenameFunction()));
|
||||
menu.addAction(renameFunction);
|
||||
|
||||
|
||||
menu.exec( mapToGlobal(pos));
|
||||
}
|
||||
|
||||
void CtrlDisAsmView::click(int row, int col)
|
||||
void CtrlDisAsmView::GoToMemoryView()
|
||||
{
|
||||
parentWindow->ShowMemory(selection);
|
||||
}
|
||||
|
||||
void CtrlDisAsmView::CopyAddress()
|
||||
{
|
||||
char temp[16];
|
||||
sprintf(temp,"%08x",selection);
|
||||
QApplication::clipboard()->setText(QString(temp));
|
||||
}
|
||||
|
||||
void CtrlDisAsmView::CopyInstrDisAsm()
|
||||
{
|
||||
EmuThread_LockDraw(true);
|
||||
QApplication::clipboard()->setText(debugger->disasm(selection,align));
|
||||
EmuThread_LockDraw(false);
|
||||
}
|
||||
|
||||
void CtrlDisAsmView::CopyInstrHex()
|
||||
{
|
||||
char temp[24];
|
||||
EmuThread_LockDraw(true);
|
||||
sprintf(temp,"%08x",debugger->readMemory(selection));
|
||||
EmuThread_LockDraw(false);
|
||||
QApplication::clipboard()->setText(temp);
|
||||
}
|
||||
|
||||
void CtrlDisAsmView::SetNextStatement()
|
||||
{
|
||||
EmuThread_LockDraw(true);
|
||||
debugger->setPC(selection);
|
||||
EmuThread_LockDraw(false);
|
||||
redraw();
|
||||
}
|
||||
|
||||
void CtrlDisAsmView::ToggleBreakpoint()
|
||||
{
|
||||
EmuThread_LockDraw(true);
|
||||
debugger->toggleBreakpoint(selection);
|
||||
EmuThread_LockDraw(false);
|
||||
parentWindow->Update();
|
||||
redraw();
|
||||
}
|
||||
|
||||
void CtrlDisAsmView::FollowBranch()
|
||||
{
|
||||
EmuThread_LockDraw(true);
|
||||
const char *temp = debugger->disasm(selection,align);
|
||||
EmuThread_LockDraw(false);
|
||||
const char *mojs=strstr(temp,"->$");
|
||||
if (mojs)
|
||||
{
|
||||
u32 dest;
|
||||
sscanf(mojs+3,"%08x",&dest);
|
||||
if (dest)
|
||||
{
|
||||
marker = selection;
|
||||
gotoAddr(dest);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CtrlDisAsmView::RunToHere()
|
||||
{
|
||||
EmuThread_LockDraw(true);
|
||||
debugger->setBreakpoint(selection);
|
||||
debugger->runToBreakpoint();
|
||||
EmuThread_LockDraw(false);
|
||||
redraw();
|
||||
}
|
||||
|
||||
void CtrlDisAsmView::RenameFunction()
|
||||
{
|
||||
int sym = symbolMap.GetSymbolNum(selection);
|
||||
if (sym != -1)
|
||||
{
|
||||
char name[256];
|
||||
strncpy(name, symbolMap.GetSymbolName(sym),256);
|
||||
bool ok;
|
||||
QString newname = QInputDialog::getText(this, tr("New function name"),
|
||||
tr("New function name :"), QLineEdit::Normal,
|
||||
name, &ok);
|
||||
if (ok && !newname.isEmpty())
|
||||
{
|
||||
symbolMap.SetSymbolName(sym,newname.toStdString().c_str());
|
||||
redraw();
|
||||
parentWindow->NotifyMapLoaded();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
QMessageBox::information(this,"Warning","No symbol selected",QMessageBox::Ok);
|
||||
}
|
||||
}
|
||||
|
||||
void CtrlDisAsmView::paintEvent(QPaintEvent *)
|
||||
{
|
||||
QPainter painter(this);
|
||||
painter.setBrush(Qt::white);
|
||||
painter.setPen(Qt::white);
|
||||
painter.drawRect(rect());
|
||||
|
||||
struct branch
|
||||
{
|
||||
int src,dst,srcAddr;
|
||||
bool conditional;
|
||||
};
|
||||
branch branches[256];
|
||||
int numBranches=0;
|
||||
|
||||
int width = rect().width();
|
||||
int numRows=(rect().height()/rowHeight)/2+1;
|
||||
|
||||
QColor bgColor = QColor(0xFFFFFFFF);
|
||||
QPen nullPen= QPen(bgColor);
|
||||
QPen currentPen=QPen(QColor(0,0,0));
|
||||
QPen selPen=QPen(QColor(0xFF808080));
|
||||
QPen condPen=QPen(QColor(0xFFFF3020));
|
||||
|
||||
QBrush lbr;
|
||||
lbr.setColor(bgColor);
|
||||
QBrush currentBrush=QBrush(QColor(0xFFFFEfE8));
|
||||
QBrush pcBrush=QBrush(QColor(0xFF70FF70));
|
||||
|
||||
QFont normalFont = QFont("Arial", 10);
|
||||
QFont boldFont = QFont("Arial", 10);
|
||||
QFont alignedFont = QFont("Monospace", 10);
|
||||
boldFont.setBold(true);
|
||||
painter.setFont(normalFont);
|
||||
|
||||
|
||||
QImage breakPoint(":/images/breakpoint");
|
||||
int i;
|
||||
curAddress&=~(align-1);
|
||||
|
||||
align=(debugger->getInstructionSize(0));
|
||||
for (i=-numRows; i<=numRows; i++)
|
||||
{
|
||||
unsigned int address=curAddress + i*align;
|
||||
|
||||
int rowY1 = rect().bottom()/2 + rowHeight*i - rowHeight/2;
|
||||
int rowY2 = rect().bottom()/2 + rowHeight*i + rowHeight/2 - 1;
|
||||
char temp[256];
|
||||
sprintf(temp,"%08x",address);
|
||||
|
||||
lbr.setColor(marker==address?QColor(0xFFFFEEE0):QColor(debugger->getColor(address)));
|
||||
QColor bg = lbr.color();
|
||||
painter.setPen(nullPen);
|
||||
painter.drawRect(0,rowY1,16-1,rowY2-rowY1);
|
||||
|
||||
if (selecting && address == selection)
|
||||
painter.setPen(selPen);
|
||||
else
|
||||
painter.setPen(i==0 ? currentPen : nullPen);
|
||||
|
||||
QBrush mojsBrush=QBrush(lbr.color());
|
||||
painter.setBrush(mojsBrush);
|
||||
|
||||
if (address == debugger->getPC())
|
||||
{
|
||||
painter.setBrush(pcBrush);
|
||||
qDebug() << address;
|
||||
}
|
||||
|
||||
painter.drawRect(16,rowY1,width-16-1,rowY2-rowY1);
|
||||
painter.setBrush(currentBrush);
|
||||
QPen textPen = QPen(QColor(halfAndHalf(bg.rgba(),0)));
|
||||
painter.setPen(textPen);
|
||||
painter.setFont(alignedFont);
|
||||
painter.drawText(17,rowY1-3+rowHeight,QString(temp));
|
||||
painter.setFont(normalFont);
|
||||
textPen.setColor(QColor(0xFF000000));
|
||||
painter.setPen(textPen);
|
||||
if (debugger->isAlive())
|
||||
{
|
||||
const char *dizz = debugger->disasm(address, align);
|
||||
char dis[512];
|
||||
strcpy(dis, dizz);
|
||||
char *dis2 = strchr(dis,'\t');
|
||||
char desc[256]="";
|
||||
if (dis2)
|
||||
{
|
||||
*dis2=0;
|
||||
dis2++;
|
||||
const char *mojs=strstr(dis2,"->$");
|
||||
if (mojs)
|
||||
{
|
||||
for (int i=0; i<8; i++)
|
||||
{
|
||||
bool found=false;
|
||||
for (int j=0; j<22; j++)
|
||||
{
|
||||
if (mojs[i+3]=="0123456789ABCDEFabcdef"[j])
|
||||
found=true;
|
||||
}
|
||||
if (!found)
|
||||
{
|
||||
mojs=0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (mojs)
|
||||
{
|
||||
int offs;
|
||||
sscanf(mojs+3,"%08x",&offs);
|
||||
branches[numBranches].src=rowY1 + rowHeight/2;
|
||||
branches[numBranches].srcAddr=address/align;
|
||||
branches[numBranches].dst=(int)(rowY1+((s64)offs-(s64)address)*rowHeight/align + rowHeight/2);
|
||||
branches[numBranches].conditional = (dis[1]!=0); //unconditional 'b' branch
|
||||
numBranches++;
|
||||
const char *t = debugger->getDescription(offs);
|
||||
if (memcmp(t,"z_",2)==0)
|
||||
t+=2;
|
||||
if (memcmp(t,"zz_",3)==0)
|
||||
t+=3;
|
||||
sprintf(desc,"-->%s", t);
|
||||
textPen.setColor(QColor(0xFF600060));
|
||||
painter.setPen(textPen);
|
||||
}
|
||||
else
|
||||
{
|
||||
textPen.setColor(QColor(0xFF000000));
|
||||
painter.setPen(textPen);
|
||||
}
|
||||
painter.drawText(149,rowY1-3+rowHeight,QString(dis2));
|
||||
}
|
||||
textPen.setColor(QColor(0xFF007000));
|
||||
painter.setPen(textPen);
|
||||
painter.setFont(boldFont);
|
||||
painter.drawText(84,rowY1-3+rowHeight,QString(dis));
|
||||
painter.setFont(normalFont);
|
||||
if (desc[0]==0)
|
||||
{
|
||||
const char *t = debugger->getDescription(address);
|
||||
if (memcmp(t,"z_",2)==0)
|
||||
t+=2;
|
||||
if (memcmp(t,"zz_",3)==0)
|
||||
t+=3;
|
||||
strcpy(desc,t);
|
||||
}
|
||||
if (memcmp(desc,"-->",3) == 0)
|
||||
{
|
||||
textPen.setColor(QColor(0xFF0000FF));
|
||||
painter.setPen(textPen);
|
||||
}
|
||||
else
|
||||
{
|
||||
textPen.setColor(halfAndHalf(halfAndHalf(bg.rgba(),0),bg.rgba()));
|
||||
painter.setPen(textPen);
|
||||
}
|
||||
if (strlen(desc))
|
||||
painter.drawText(std::max(280,width/3+190),rowY1-3+rowHeight,QString(desc));
|
||||
if (debugger->isBreakpoint(address))
|
||||
{
|
||||
painter.drawImage(2,rowY1+2,breakPoint);
|
||||
}
|
||||
}
|
||||
}
|
||||
for (i=0; i<numBranches; i++)
|
||||
{
|
||||
painter.setPen(branches[i].conditional ? condPen : currentPen);
|
||||
int x=280+(branches[i].srcAddr%9)*8;
|
||||
QPoint curPos = QPoint(x-2,branches[i].src);
|
||||
|
||||
if (branches[i].dst<rect().bottom()+200 && branches[i].dst>-200)
|
||||
{
|
||||
painter.drawLine(curPos, QPoint(x+2,branches[i].src));
|
||||
curPos = QPoint(x+2,branches[i].src);
|
||||
painter.drawLine(curPos, QPoint(x+2,branches[i].dst));
|
||||
curPos = QPoint(x+2,branches[i].dst);
|
||||
painter.drawLine(curPos, QPoint(x-4,branches[i].dst));
|
||||
|
||||
curPos = QPoint(x,branches[i].dst-4);
|
||||
painter.drawLine(curPos, QPoint(x-4,branches[i].dst));
|
||||
curPos = QPoint(x-4,branches[i].dst);
|
||||
painter.drawLine(curPos, QPoint(x+1,branches[i].dst+5));
|
||||
}
|
||||
else
|
||||
{
|
||||
painter.drawLine(curPos, QPoint(x+4,branches[i].src));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int CtrlDisAsmView::yToAddress(int y)
|
||||
{
|
||||
int ydiff=y-rect().bottom()/2-rowHeight/2;
|
||||
ydiff=(int)(floor((float)ydiff / (float)rowHeight))+1;
|
||||
return curAddress + ydiff * align;
|
||||
}
|
||||
|
|
|
@ -1,10 +1,13 @@
|
|||
#ifndef CTRLDISASMVIEW_H
|
||||
#define CTRLDISASMVIEW_H
|
||||
|
||||
#include <QTableWidget>
|
||||
#include <QWidget>
|
||||
#include "Core/Debugger/DebugInterface.h"
|
||||
#include "EmuThread.h"
|
||||
|
||||
class CtrlDisAsmView : public QTableWidget
|
||||
class Debugger_Disasm;
|
||||
|
||||
class CtrlDisAsmView : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
|
@ -17,11 +20,18 @@ public:
|
|||
align=l;
|
||||
}
|
||||
|
||||
void setParentWindow(Debugger_Disasm* win)
|
||||
{
|
||||
parentWindow = win;
|
||||
}
|
||||
|
||||
void setDebugger(DebugInterface *deb)
|
||||
{
|
||||
EmuThread_LockDraw(true);
|
||||
debugger=deb;
|
||||
curAddress=debugger->getPC();
|
||||
align=debugger->getInstructionSize(0);
|
||||
EmuThread_LockDraw(false);
|
||||
}
|
||||
DebugInterface *getDebugger()
|
||||
{
|
||||
|
@ -34,7 +44,9 @@ public:
|
|||
}
|
||||
void gotoPC()
|
||||
{
|
||||
EmuThread_LockDraw(true);
|
||||
curAddress=debugger->getPC()&(~(align-1));
|
||||
EmuThread_LockDraw(false);
|
||||
redraw();
|
||||
}
|
||||
unsigned int getSelection()
|
||||
|
@ -49,21 +61,38 @@ public:
|
|||
|
||||
void toggleBreakpoint()
|
||||
{
|
||||
EmuThread_LockDraw(true);
|
||||
debugger->toggleBreakpoint(curAddress);
|
||||
EmuThread_LockDraw(false);
|
||||
redraw();
|
||||
}
|
||||
|
||||
void contextMenu(const QPoint& pos);
|
||||
void click(int row, int col);
|
||||
protected:
|
||||
void paintEvent(QPaintEvent *);
|
||||
void mousePressEvent(QMouseEvent *e);
|
||||
void keyPressEvent(QKeyEvent *);
|
||||
void wheelEvent(QWheelEvent *e);
|
||||
signals:
|
||||
|
||||
public slots:
|
||||
void CopyAddress();
|
||||
void CopyInstrDisAsm();
|
||||
void SetNextStatement();
|
||||
void FollowBranch();
|
||||
void CopyInstrHex();
|
||||
void RunToHere();
|
||||
void ToggleBreakpoint();
|
||||
void GoToMemoryView();
|
||||
void RenameFunction();
|
||||
|
||||
private:
|
||||
int yToAddress(int y);
|
||||
|
||||
int curAddress;
|
||||
int align;
|
||||
|
||||
int rowHeight;
|
||||
int selection;
|
||||
int marker;
|
||||
int oldSelection;
|
||||
|
@ -73,6 +102,7 @@ private:
|
|||
bool showHex;
|
||||
|
||||
DebugInterface *debugger;
|
||||
Debugger_Disasm* parentWindow;
|
||||
|
||||
};
|
||||
|
||||
|
|
250
Qt/ctrlmemview.cpp
Normal file
250
Qt/ctrlmemview.cpp
Normal file
|
@ -0,0 +1,250 @@
|
|||
#include "ctrlmemview.h"
|
||||
|
||||
#include <QPainter>
|
||||
#include <QKeyEvent>
|
||||
#include <QMenu>
|
||||
#include <QMessageBox>
|
||||
#include <QApplication>
|
||||
#include <QClipboard>
|
||||
|
||||
#include "EmuThread.h"
|
||||
#include "Core/MemMap.h"
|
||||
#include "Core/Debugger/SymbolMap.h"
|
||||
|
||||
CtrlMemView::CtrlMemView(QWidget *parent) :
|
||||
QWidget(parent)
|
||||
{
|
||||
|
||||
curAddress=0;
|
||||
rowHeight=14;
|
||||
align=4;
|
||||
alignMul=4;
|
||||
selecting=false;
|
||||
mode=MV_NORMAL;
|
||||
debugger = 0;
|
||||
|
||||
setMinimumWidth(500);
|
||||
}
|
||||
|
||||
void CtrlMemView::redraw()
|
||||
{
|
||||
update();
|
||||
}
|
||||
|
||||
|
||||
void CtrlMemView::wheelEvent(QWheelEvent* e)
|
||||
{
|
||||
int numDegrees = e->delta() / 8;
|
||||
int numSteps = numDegrees / 15;
|
||||
if (e->orientation() == Qt::Horizontal) {
|
||||
} else {
|
||||
curAddress -= numSteps*align*alignMul;
|
||||
e->accept();
|
||||
redraw();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void CtrlMemView::keyPressEvent(QKeyEvent *e)
|
||||
{
|
||||
int page=(rect().bottom()/rowHeight)/2-1;
|
||||
|
||||
if(e->key() == Qt::Key_Up)
|
||||
{
|
||||
curAddress-=align*alignMul;
|
||||
e->accept();
|
||||
}
|
||||
else if(e->key() == Qt::Key_Down)
|
||||
{
|
||||
curAddress+=align*alignMul;
|
||||
e->accept();
|
||||
}
|
||||
else if(e->key() == Qt::Key_PageUp)
|
||||
{
|
||||
curAddress-=page*align*alignMul;
|
||||
e->accept();
|
||||
}
|
||||
else if(e->key() == Qt::Key_PageDown)
|
||||
{
|
||||
curAddress+=page*align*alignMul;
|
||||
e->accept();
|
||||
}
|
||||
redraw();
|
||||
}
|
||||
|
||||
void CtrlMemView::paintEvent(QPaintEvent *)
|
||||
{
|
||||
QPainter painter(this);
|
||||
painter.setBrush(Qt::white);
|
||||
painter.setPen(Qt::white);
|
||||
painter.drawRect(rect());
|
||||
|
||||
if (!debugger)
|
||||
return;
|
||||
|
||||
int width = rect().width();
|
||||
int numRows=(rect().bottom()/rowHeight)/2+1;
|
||||
|
||||
QPen nullPen=QPen(0xFFFFFF);
|
||||
QPen currentPen=QPen(0xFF000000);
|
||||
QPen selPen=QPen(0x808080);
|
||||
QBrush lbr = QBrush(0xFFFFFF);
|
||||
QBrush nullBrush=QBrush(0xFFFFFF);
|
||||
QBrush currentBrush=QBrush(0xFFEfE8);
|
||||
QBrush pcBrush=QBrush(0x70FF70);
|
||||
QPen textPen;
|
||||
|
||||
QFont normalFont = QFont("Arial", 10);
|
||||
QFont alignedFont = QFont("Monospace", 10);
|
||||
painter.setFont(normalFont);
|
||||
|
||||
int i;
|
||||
curAddress&=~(align-1);
|
||||
for (i=-numRows; i<=numRows; i++)
|
||||
{
|
||||
unsigned int address=curAddress + i*align*alignMul;
|
||||
|
||||
int rowY1 = rect().bottom()/2 + rowHeight*i - rowHeight/2;
|
||||
int rowY2 = rect().bottom()/2 + rowHeight*i + rowHeight/2;
|
||||
|
||||
char temp[256];
|
||||
sprintf(temp,"%08x",address);
|
||||
|
||||
painter.setBrush(currentBrush);
|
||||
|
||||
if (selecting && address == selection)
|
||||
painter.setPen(selPen);
|
||||
else
|
||||
painter.setPen(i==0 ? currentPen : nullPen);
|
||||
painter.drawRect(0, rowY1, 16-1, rowY2 - rowY1 - 1);
|
||||
|
||||
painter.drawRect(16, rowY1, width - 16 -1, rowY2 - rowY1 - 1);
|
||||
painter.setBrush(nullBrush);
|
||||
textPen.setColor(0x600000);
|
||||
painter.setPen(textPen);
|
||||
painter.setFont(alignedFont);
|
||||
painter.drawText(17,rowY1-2+rowHeight, temp);
|
||||
textPen.setColor(0xFF000000);
|
||||
painter.setPen(textPen);
|
||||
if (debugger->isAlive())
|
||||
{
|
||||
|
||||
switch(mode) {
|
||||
case MV_NORMAL:
|
||||
{
|
||||
const char *m = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
|
||||
if (Memory::IsValidAddress(address))
|
||||
{
|
||||
EmuThread_LockDraw(true);
|
||||
u32 memory[4] = {
|
||||
debugger->readMemory(address),
|
||||
debugger->readMemory(address+4),
|
||||
debugger->readMemory(address+8),
|
||||
debugger->readMemory(address+12)
|
||||
};
|
||||
EmuThread_LockDraw(false);
|
||||
m = (const char*)memory;
|
||||
sprintf(temp, "%08x %08x %08x %08x ................",
|
||||
memory[0],memory[1],memory[2],memory[3]);
|
||||
}
|
||||
for (int i=0; i<16; i++)
|
||||
{
|
||||
int c = (unsigned char)m[i];
|
||||
if (c>=32 && c<255)
|
||||
temp[i+37]=c;
|
||||
}
|
||||
}
|
||||
painter.setFont(alignedFont);
|
||||
painter.drawText(85,rowY1 - 2 + rowHeight, temp);
|
||||
break;
|
||||
|
||||
case MV_SYMBOLS:
|
||||
{
|
||||
textPen.setColor(0x0000FF);
|
||||
painter.setPen(textPen);
|
||||
int fn = symbolMap.GetSymbolNum(address);
|
||||
if (fn==-1)
|
||||
{
|
||||
sprintf(temp, "%s (ns)", Memory::GetAddressName(address));
|
||||
}
|
||||
else
|
||||
sprintf(temp, "%s (0x%x b)", symbolMap.GetSymbolName(fn),symbolMap.GetSymbolSize(fn));
|
||||
painter.drawText(205,rowY1 - 2 + rowHeight, temp);
|
||||
|
||||
textPen.setColor(0xFF0000000);
|
||||
painter.setPen(textPen);
|
||||
|
||||
if (align==4)
|
||||
{
|
||||
u32 value = Memory::ReadUnchecked_U32(address);
|
||||
sprintf(temp, "%08x [%s]", value, symbolMap.GetSymbolName(symbolMap.GetSymbolNum(value)));
|
||||
}
|
||||
else if (align==2)
|
||||
{
|
||||
u16 value = Memory::ReadUnchecked_U16(address);
|
||||
sprintf(temp, "%04x [%s]", value, symbolMap.GetSymbolName(symbolMap.GetSymbolNum(value)));
|
||||
}
|
||||
|
||||
painter.drawText(85,rowY1 - 2 + rowHeight, temp);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CtrlMemView::mousePressEvent(QMouseEvent *e)
|
||||
{
|
||||
int x = e->pos().x();
|
||||
int y = e->pos().y();
|
||||
if (x>16)
|
||||
{
|
||||
oldSelection=selection;
|
||||
selection=yToAddress(y);
|
||||
bool oldselecting=selecting;
|
||||
selecting=true;
|
||||
if (!oldselecting || (selection!=oldSelection))
|
||||
redraw();
|
||||
}
|
||||
}
|
||||
|
||||
void CtrlMemView::contextMenu(const QPoint &pos)
|
||||
{
|
||||
QMenu menu(this);
|
||||
|
||||
QAction *gotoDisAsm = new QAction(tr("Go to in &disasm"), this);
|
||||
//connect(gotoDisAsm, SIGNAL(triggered()), this, SLOT(GotoDisAsm()));
|
||||
menu.addAction(gotoDisAsm);
|
||||
|
||||
menu.addSeparator();
|
||||
|
||||
QAction *copyValue = new QAction(tr("&Copy value"), this);
|
||||
connect(copyValue, SIGNAL(triggered()), this, SLOT(CopyValue()));
|
||||
menu.addAction(copyValue);
|
||||
|
||||
QAction *dump = new QAction(tr("Dump..."), this);
|
||||
connect(dump, SIGNAL(triggered()), this, SLOT(Dump()));
|
||||
menu.addAction(dump);
|
||||
|
||||
menu.exec( mapToGlobal(pos));
|
||||
}
|
||||
|
||||
void CtrlMemView::CopyValue()
|
||||
{
|
||||
char temp[24];
|
||||
sprintf(temp,"%08x",Memory::ReadUnchecked_U32(selection));
|
||||
QApplication::clipboard()->setText(temp);
|
||||
}
|
||||
|
||||
void CtrlMemView::Dump()
|
||||
{
|
||||
QMessageBox::information(this,"Sorry","This feature has not been implemented.",QMessageBox::Ok);
|
||||
}
|
||||
|
||||
int CtrlMemView::yToAddress(int y)
|
||||
{
|
||||
int ydiff=y-rect().bottom()/2-rowHeight/2;
|
||||
ydiff=(int)(floor((float)ydiff / (float)rowHeight))+1;
|
||||
return curAddress + ydiff * align*alignMul;
|
||||
}
|
||||
|
91
Qt/ctrlmemview.h
Normal file
91
Qt/ctrlmemview.h
Normal file
|
@ -0,0 +1,91 @@
|
|||
#ifndef CTRLMEMVIEW_H
|
||||
#define CTRLMEMVIEW_H
|
||||
|
||||
#include "Core/Debugger/DebugInterface.h"
|
||||
#include <QWidget>
|
||||
|
||||
enum MemViewMode
|
||||
{
|
||||
MV_NORMAL,
|
||||
MV_SYMBOLS,
|
||||
MV_MAX
|
||||
};
|
||||
|
||||
class CtrlMemView : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit CtrlMemView(QWidget *parent = 0);
|
||||
|
||||
void setDebugger(DebugInterface *deb)
|
||||
{
|
||||
debugger=deb;
|
||||
if (debugger)
|
||||
align=debugger->getInstructionSize(0);
|
||||
}
|
||||
DebugInterface *getDebugger()
|
||||
{
|
||||
return debugger;
|
||||
}
|
||||
void redraw();
|
||||
|
||||
void setMode(MemViewMode m)
|
||||
{
|
||||
mode=m;
|
||||
switch(mode) {
|
||||
case MV_NORMAL:
|
||||
alignMul=4;
|
||||
break;
|
||||
case MV_SYMBOLS:
|
||||
alignMul=1;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
redraw();
|
||||
}
|
||||
|
||||
void setAlign(int l)
|
||||
{
|
||||
align=l;
|
||||
}
|
||||
int yToAddress(int y);
|
||||
|
||||
void gotoAddr(unsigned int addr)
|
||||
{
|
||||
curAddress=addr&(~(align-1));
|
||||
redraw();
|
||||
}
|
||||
|
||||
unsigned int getSelection()
|
||||
{
|
||||
return curAddress;
|
||||
}
|
||||
void contextMenu(const QPoint &pos);
|
||||
protected:
|
||||
void paintEvent(QPaintEvent *);
|
||||
void keyPressEvent(QKeyEvent *e);
|
||||
void wheelEvent(QWheelEvent *e);
|
||||
void mousePressEvent(QMouseEvent *e);
|
||||
signals:
|
||||
|
||||
public slots:
|
||||
void CopyValue();
|
||||
void Dump();
|
||||
private:
|
||||
int curAddress;
|
||||
int align;
|
||||
int alignMul;
|
||||
int rowHeight;
|
||||
|
||||
int selection;
|
||||
int oldSelection;
|
||||
bool selectionChanged;
|
||||
bool selecting;
|
||||
bool hasFocus;
|
||||
|
||||
DebugInterface *debugger;
|
||||
MemViewMode mode;
|
||||
};
|
||||
|
||||
#endif // CTRLMEMVIEW_H
|
|
@ -1,10 +1,362 @@
|
|||
#include "ctrlregisterlist.h"
|
||||
#include <QPainter>
|
||||
#include <QFont>
|
||||
#include <QKeyEvent>
|
||||
#include <QScrollBar>
|
||||
#include <QMenu>
|
||||
#include <QApplication>
|
||||
#include <QClipboard>
|
||||
#include <QInputDialog>
|
||||
#include "EmuThread.h"
|
||||
#include "debugger_disasm.h"
|
||||
|
||||
CtrlRegisterList::CtrlRegisterList(QWidget *parent) :
|
||||
QListWidget(parent)
|
||||
QWidget(parent)
|
||||
{
|
||||
rowHeight = 14;
|
||||
selecting=false;
|
||||
selection=0;
|
||||
category=0;
|
||||
showHex=false;
|
||||
cpu=0;
|
||||
lastPC = 0;
|
||||
lastCat0Values = NULL;
|
||||
changedCat0Regs = NULL;
|
||||
curVertOffset = 0;
|
||||
|
||||
}
|
||||
|
||||
CtrlRegisterList::~CtrlRegisterList()
|
||||
{
|
||||
if (lastCat0Values != NULL)
|
||||
delete [] lastCat0Values;
|
||||
if (changedCat0Regs != NULL)
|
||||
delete [] changedCat0Regs;
|
||||
}
|
||||
|
||||
void CtrlRegisterList::redraw()
|
||||
{
|
||||
update();
|
||||
}
|
||||
|
||||
void CtrlRegisterList::scrollChanged(int action)
|
||||
{
|
||||
QScrollBar *bar = findChild<QScrollBar*>("RegListScroll");
|
||||
switch(action)
|
||||
{
|
||||
case QScrollBar::SliderSingleStepAdd:
|
||||
curVertOffset++;
|
||||
break;
|
||||
case QScrollBar::SliderSingleStepSub:
|
||||
curVertOffset--;
|
||||
break;
|
||||
case QScrollBar::SliderPageStepAdd:
|
||||
curVertOffset+= 4;
|
||||
break;
|
||||
case QScrollBar::SliderPageStepSub:
|
||||
curVertOffset-= 4;
|
||||
break;
|
||||
case QScrollBar::SliderMove:
|
||||
curVertOffset = bar->sliderPosition();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
redraw();
|
||||
}
|
||||
|
||||
|
||||
void CtrlRegisterList::keyPressEvent(QKeyEvent *e)
|
||||
{
|
||||
if(e->key() == Qt::Key_Down)
|
||||
{
|
||||
selection += 1;
|
||||
e->accept();
|
||||
}
|
||||
else if(e->key() == Qt::Key_Up)
|
||||
{
|
||||
selection -= 1;
|
||||
e->accept();
|
||||
}
|
||||
else if(e->key() == Qt::Key_PageDown)
|
||||
{
|
||||
selection += 4;
|
||||
e->accept();
|
||||
}
|
||||
else if(e->key() == Qt::Key_PageUp)
|
||||
{
|
||||
selection -= 4;
|
||||
e->accept();
|
||||
}
|
||||
int maxRowsDisplay =rect().bottom()/rowHeight - 1;
|
||||
curVertOffset = std::min(std::max(curVertOffset, selection-maxRowsDisplay),selection);
|
||||
update();
|
||||
}
|
||||
|
||||
void CtrlRegisterList::mousePressEvent(QMouseEvent *e)
|
||||
{
|
||||
int x = e->pos().x();
|
||||
int y = e->pos().y();
|
||||
if (x>16)
|
||||
{
|
||||
oldSelection=selection;
|
||||
|
||||
if (y>rowHeight)
|
||||
{
|
||||
selection=yToIndex(y);
|
||||
bool oldselecting=selecting;
|
||||
selecting=true;
|
||||
if (!oldselecting || (selection!=oldSelection))
|
||||
redraw();
|
||||
}
|
||||
else
|
||||
{
|
||||
int lastCat = category;
|
||||
category = (x*cpu->GetNumCategories())/(rect().width());
|
||||
if (category<0) category=0;
|
||||
if (category>=cpu->GetNumCategories())
|
||||
category=cpu->GetNumCategories()-1;
|
||||
if (category!=lastCat)
|
||||
{
|
||||
curVertOffset = 0;
|
||||
redraw();
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
redraw();
|
||||
}
|
||||
e->accept();
|
||||
}
|
||||
|
||||
void CtrlRegisterList::wheelEvent(QWheelEvent* e)
|
||||
{
|
||||
int numDegrees = e->delta() / 8;
|
||||
int numSteps = numDegrees / 15;
|
||||
if (e->orientation() == Qt::Horizontal) {
|
||||
} else {
|
||||
curVertOffset -= numSteps;
|
||||
e->accept();
|
||||
update();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void CtrlRegisterList::paintEvent(QPaintEvent *)
|
||||
{
|
||||
|
||||
int numRowsTotal = cpu->GetNumRegsInCategory(category);
|
||||
int maxRowsDisplay =rect().bottom()/rowHeight - 1;
|
||||
|
||||
selection = std::min(std::max(selection,0),numRowsTotal);
|
||||
curVertOffset = std::min(std::max(curVertOffset, 0),numRowsTotal - maxRowsDisplay);
|
||||
|
||||
QScrollBar *bar = findChild<QScrollBar*>("RegListScroll");
|
||||
if(bar)
|
||||
{
|
||||
bar->setMinimum(0);
|
||||
bar->setMaximum(numRowsTotal - maxRowsDisplay);
|
||||
bar->setPageStep(1);
|
||||
bar->setValue(curVertOffset);
|
||||
}
|
||||
|
||||
|
||||
QPainter painter(this);
|
||||
painter.setBrush(Qt::white);
|
||||
painter.setPen(Qt::white);
|
||||
painter.drawRect(rect());
|
||||
|
||||
if (!cpu)
|
||||
return;
|
||||
|
||||
QFont normalFont = QFont("Arial", 10);
|
||||
painter.setFont(normalFont);
|
||||
|
||||
int width = rect().width();
|
||||
|
||||
QColor bgColor = QColor(0xffffff);
|
||||
QPen nullPen=QPen(bgColor);
|
||||
QPen currentPen=QPen(QColor(0xFF000000));
|
||||
QPen selPen=QPen(0x808080);
|
||||
QPen textPen;
|
||||
|
||||
QBrush lbr;
|
||||
lbr.setColor(bgColor);
|
||||
QBrush nullBrush=QBrush(bgColor);
|
||||
QBrush currentBrush=QBrush(0xFFEfE8);
|
||||
QBrush pcBrush=QBrush(0x70FF70);
|
||||
|
||||
int nc = cpu->GetNumCategories();
|
||||
for (int i=0; i<nc; i++)
|
||||
{
|
||||
painter.setPen(i==category?currentPen:nullPen);
|
||||
painter.setBrush(i==category?pcBrush:nullBrush);
|
||||
painter.drawRect(width*i/nc,0,width*(i+1)/nc - width*i/nc -1,rowHeight-1);
|
||||
QString name = cpu->GetCategoryName(i);
|
||||
painter.setPen(currentPen);
|
||||
painter.drawText(width*i/nc+1,-3+rowHeight,name);
|
||||
}
|
||||
|
||||
int numRows=rect().bottom()/rowHeight;
|
||||
|
||||
for (int i=curVertOffset; i<curVertOffset+numRows; i++)
|
||||
{
|
||||
int rowY1 = rowHeight*(i-curVertOffset+1);
|
||||
int rowY2 = rowHeight*(i-curVertOffset+2)-1;
|
||||
|
||||
lbr.setColor(i==selection?0xffeee0:0xffffff);
|
||||
|
||||
painter.setBrush(currentBrush);
|
||||
painter.setPen(nullPen);
|
||||
painter.drawRect(0,rowY1,16-1,rowY2-rowY1);
|
||||
|
||||
if (selecting && i == selection)
|
||||
painter.setPen(selPen);
|
||||
else
|
||||
painter.setPen(nullPen);
|
||||
|
||||
QBrush mojsBrush=QBrush(lbr.color());
|
||||
painter.setBrush(mojsBrush);
|
||||
|
||||
painter.drawRect(16,rowY1,width-16-1,rowY2-rowY1);
|
||||
|
||||
// Check for any changes in the registers.
|
||||
if (lastPC != cpu->GetPC())
|
||||
{
|
||||
for (int i = 0, n = cpu->GetNumRegsInCategory(0); i < n; ++i)
|
||||
{
|
||||
u32 v = cpu->GetRegValue(0, i);
|
||||
changedCat0Regs[i] = v != lastCat0Values[i];
|
||||
lastCat0Values[i] = v;
|
||||
}
|
||||
lastPC = cpu->GetPC();
|
||||
}
|
||||
|
||||
painter.setBrush(currentBrush);
|
||||
if (i<cpu->GetNumRegsInCategory(category))
|
||||
{
|
||||
char temp[256];
|
||||
sprintf(temp,"%s",cpu->GetRegName(category,i));
|
||||
textPen.setColor(0x600000);
|
||||
painter.setPen(textPen);
|
||||
painter.drawText(17,rowY1-3+rowHeight,temp);
|
||||
textPen.setColor(0xFF000000);
|
||||
painter.setPen(textPen);
|
||||
|
||||
cpu->PrintRegValue(category,i,temp);
|
||||
if (category == 0 && changedCat0Regs[i])
|
||||
{
|
||||
textPen.setColor(0x0000FF);
|
||||
painter.setPen(textPen);
|
||||
}
|
||||
else
|
||||
{
|
||||
textPen.setColor(0x004000);
|
||||
painter.setPen(textPen);
|
||||
}
|
||||
painter.drawText(77,rowY1-3+rowHeight,temp);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int CtrlRegisterList::yToIndex(int y)
|
||||
{
|
||||
int n = (y/rowHeight) - 1 + curVertOffset;
|
||||
if (n<0) n=0;
|
||||
return n;
|
||||
}
|
||||
|
||||
void CtrlRegisterList::contextMenu(const QPoint &pos)
|
||||
{
|
||||
QMenu menu(this);
|
||||
|
||||
QAction *gotoMemory = new QAction(tr("Go to in &memory view"), this);
|
||||
connect(gotoMemory, SIGNAL(triggered()), this, SLOT(GotoMemory()));
|
||||
menu.addAction(gotoMemory);
|
||||
|
||||
QAction *gotoDisAsm = new QAction(tr("Go to in &disasm"), this);
|
||||
connect(gotoDisAsm, SIGNAL(triggered()), this, SLOT(GotoDisAsm()));
|
||||
menu.addAction(gotoDisAsm);
|
||||
|
||||
menu.addSeparator();
|
||||
|
||||
QAction *copyValue = new QAction(tr("&Copy value"), this);
|
||||
connect(copyValue, SIGNAL(triggered()), this, SLOT(CopyValue()));
|
||||
menu.addAction(copyValue);
|
||||
|
||||
QAction *change = new QAction(tr("C&hange..."), this);
|
||||
connect(change, SIGNAL(triggered()), this, SLOT(Change()));
|
||||
menu.addAction(change);
|
||||
|
||||
menu.exec( mapToGlobal(pos));
|
||||
}
|
||||
|
||||
void CtrlRegisterList::GotoMemory()
|
||||
{
|
||||
int cat = category;
|
||||
int reg = selection;
|
||||
if (selection >= cpu->GetNumRegsInCategory(cat))
|
||||
return;
|
||||
|
||||
EmuThread_LockDraw(true);
|
||||
u32 val = cpu->GetRegValue(cat,reg);
|
||||
EmuThread_LockDraw(false);
|
||||
|
||||
parentWindow->ShowMemory(val);
|
||||
}
|
||||
|
||||
void CtrlRegisterList::GotoDisAsm()
|
||||
{
|
||||
int cat = category;
|
||||
int reg = selection;
|
||||
if (selection >= cpu->GetNumRegsInCategory(cat))
|
||||
return;
|
||||
|
||||
EmuThread_LockDraw(true);
|
||||
u32 val = cpu->GetRegValue(cat,reg);
|
||||
EmuThread_LockDraw(false);
|
||||
|
||||
emit GotoDisasm(val);
|
||||
}
|
||||
|
||||
void CtrlRegisterList::CopyValue()
|
||||
{
|
||||
int cat = category;
|
||||
int reg = selection;
|
||||
if (selection >= cpu->GetNumRegsInCategory(cat))
|
||||
return;
|
||||
|
||||
EmuThread_LockDraw(true);
|
||||
u32 val = cpu->GetRegValue(cat,reg);
|
||||
EmuThread_LockDraw(false);
|
||||
|
||||
char temp[24];
|
||||
sprintf(temp,"%08x",val);
|
||||
|
||||
QApplication::clipboard()->setText(temp);
|
||||
}
|
||||
|
||||
void CtrlRegisterList::Change()
|
||||
{
|
||||
int cat = category;
|
||||
int reg = selection;
|
||||
if (selection >= cpu->GetNumRegsInCategory(cat))
|
||||
return;
|
||||
|
||||
EmuThread_LockDraw(true);
|
||||
u32 val = cpu->GetRegValue(cat,reg);
|
||||
EmuThread_LockDraw(false);
|
||||
|
||||
bool ok;
|
||||
QString text = QInputDialog::getText(this, tr("Set new value"),
|
||||
tr("Set new value :"), QLineEdit::Normal,
|
||||
QString::number(val), &ok);
|
||||
if (ok && !text.isEmpty())
|
||||
{
|
||||
EmuThread_LockDraw(true);
|
||||
cpu->SetRegValue(cat,reg,text.toInt());
|
||||
EmuThread_LockDraw(false);
|
||||
redraw();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,16 +1,21 @@
|
|||
#ifndef CTRLREGISTERLIST_H
|
||||
#define CTRLREGISTERLIST_H
|
||||
|
||||
#include <QListWidget>
|
||||
#include <QWidget>
|
||||
#include "Core/Debugger/DebugInterface.h"
|
||||
|
||||
class CtrlRegisterList : public QListWidget
|
||||
class Debugger_Disasm;
|
||||
class CtrlRegisterList : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit CtrlRegisterList(QWidget *parent = 0);
|
||||
|
||||
void redraw();
|
||||
|
||||
void setParentWindow(Debugger_Disasm* win)
|
||||
{
|
||||
parentWindow = win;
|
||||
}
|
||||
|
||||
void setCPU(DebugInterface *deb)
|
||||
{
|
||||
|
@ -26,10 +31,27 @@ public:
|
|||
{
|
||||
return cpu;
|
||||
}
|
||||
~CtrlRegisterList();
|
||||
void contextMenu(const QPoint &pos);
|
||||
protected:
|
||||
void paintEvent(QPaintEvent *);
|
||||
void keyPressEvent(QKeyEvent *e);
|
||||
void mousePressEvent(QMouseEvent *e);
|
||||
void wheelEvent(QWheelEvent *e);
|
||||
signals:
|
||||
void GotoDisasm(u32);
|
||||
|
||||
public slots:
|
||||
void redraw();
|
||||
void scrollChanged(int);
|
||||
|
||||
void GotoDisAsm();
|
||||
void CopyValue();
|
||||
void Change();
|
||||
void GotoMemory();
|
||||
|
||||
private:
|
||||
int yToIndex(int y);
|
||||
|
||||
int rowHeight;
|
||||
int selection;
|
||||
|
@ -43,10 +65,13 @@ private:
|
|||
bool hasFocus;
|
||||
bool showHex;
|
||||
DebugInterface *cpu;
|
||||
int curVertOffset;
|
||||
|
||||
u32 lastPC;
|
||||
u32 *lastCat0Values;
|
||||
bool *changedCat0Regs;
|
||||
|
||||
Debugger_Disasm* parentWindow;
|
||||
};
|
||||
|
||||
#endif // CTRLREGISTERLIST_H
|
||||
|
|
98
Qt/ctrlvfpuview.cpp
Normal file
98
Qt/ctrlvfpuview.cpp
Normal file
|
@ -0,0 +1,98 @@
|
|||
#include "ctrlvfpuview.h"
|
||||
#include <QPainter>
|
||||
|
||||
#include "Core/MIPS/MIPS.h" // BAD
|
||||
|
||||
CtrlVfpuView::CtrlVfpuView(QWidget *parent) :
|
||||
QWidget(parent)
|
||||
{
|
||||
mode = 0;
|
||||
}
|
||||
|
||||
void CtrlVfpuView::setMode(int newMode)
|
||||
{
|
||||
mode = newMode;
|
||||
redraw();
|
||||
}
|
||||
|
||||
void CtrlVfpuView::paintEvent(QPaintEvent *)
|
||||
{
|
||||
QPainter painter(this);
|
||||
painter.setBrush(Qt::white);
|
||||
painter.setPen(Qt::white);
|
||||
painter.drawRect(rect());
|
||||
|
||||
if (!cpu)
|
||||
return;
|
||||
|
||||
QFont normalFont = QFont("Arial", 10);
|
||||
painter.setFont(normalFont);
|
||||
|
||||
QPen currentPen=QPen(0xFF000000);
|
||||
QBrush nullBrush=QBrush(0xFFEfE8);
|
||||
painter.setPen(currentPen);
|
||||
painter.setBrush(nullBrush);
|
||||
|
||||
enum
|
||||
{
|
||||
rowHeight = 15,
|
||||
columnWidth = 80,
|
||||
xStart = columnWidth/2,
|
||||
yStart = 0
|
||||
};
|
||||
|
||||
for (int matrix = 0; matrix<8; matrix++)
|
||||
{
|
||||
int my = (int)(yStart + matrix * rowHeight * 5.5f);
|
||||
painter.drawRect(0, my, xStart-1, rowHeight-1);
|
||||
char temp[256];
|
||||
sprintf(temp, "M%i00", matrix);
|
||||
painter.drawText(3, my+rowHeight-3, temp);
|
||||
painter.drawRect(xStart, my+rowHeight, columnWidth*4-1, 4*rowHeight-1);
|
||||
|
||||
for (int column = 0; column<4; column++)
|
||||
{
|
||||
int y = my;
|
||||
int x = column * columnWidth + xStart;
|
||||
|
||||
painter.drawRect(x, y, columnWidth-1, rowHeight - 1);
|
||||
char temp[256];
|
||||
sprintf(temp, "R%i0%i", matrix, column);
|
||||
painter.drawText(x+3, y-3+rowHeight, temp);
|
||||
|
||||
painter.drawRect(0, y+rowHeight*(column+1), xStart - 1, rowHeight - 1);
|
||||
sprintf(temp, "C%i%i0", matrix, column);
|
||||
painter.drawText(3, y+rowHeight*(column+2)-3, temp);
|
||||
|
||||
y+=rowHeight;
|
||||
|
||||
for (int row = 0; row<4; row++)
|
||||
{
|
||||
float val = mipsr4k.v[column*32+row+matrix*4];
|
||||
u32 hex = *((u32*)&val);
|
||||
char temp[256];
|
||||
switch (mode)
|
||||
{
|
||||
case 0: sprintf(temp,"%f",val); break;
|
||||
// case 1: sprintf(temp,"??"); break;
|
||||
case 2: sprintf(temp,"0x%08x",hex); break;
|
||||
default:sprintf(temp,"%f",val); break;
|
||||
}
|
||||
|
||||
painter.drawText(x+3, y-3 + rowHeight, temp);
|
||||
y+=rowHeight;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
setMinimumHeight((int)(yStart + 8 * rowHeight * 5.5f));
|
||||
setMinimumWidth(4*columnWidth+xStart);
|
||||
|
||||
}
|
||||
|
||||
|
||||
void CtrlVfpuView::redraw()
|
||||
{
|
||||
update();
|
||||
}
|
||||
|
42
Qt/ctrlvfpuview.h
Normal file
42
Qt/ctrlvfpuview.h
Normal file
|
@ -0,0 +1,42 @@
|
|||
#ifndef CTRLVFPUVIEW_H
|
||||
#define CTRLVFPUVIEW_H
|
||||
|
||||
#include <QWidget>
|
||||
#include "Core/Debugger/DebugInterface.h"
|
||||
|
||||
class Debugger_Vfpu;
|
||||
class CtrlVfpuView : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit CtrlVfpuView(QWidget *parent = 0);
|
||||
|
||||
void setParentWindow(Debugger_Vfpu* win)
|
||||
{
|
||||
parentWindow = win;
|
||||
}
|
||||
|
||||
void setCPU(DebugInterface *deb)
|
||||
{
|
||||
cpu = deb;
|
||||
}
|
||||
DebugInterface *getCPU()
|
||||
{
|
||||
return cpu;
|
||||
}
|
||||
void setMode(int newMode);
|
||||
void redraw();
|
||||
protected:
|
||||
|
||||
void paintEvent(QPaintEvent *);
|
||||
signals:
|
||||
|
||||
public slots:
|
||||
private:
|
||||
|
||||
DebugInterface *cpu;
|
||||
Debugger_Vfpu* parentWindow;
|
||||
int mode;
|
||||
};
|
||||
|
||||
#endif // CTRLVFPUVIEW_H
|
|
@ -1,15 +1,26 @@
|
|||
#include <QMenu>
|
||||
#include <QTimer>
|
||||
|
||||
#include <deque>
|
||||
|
||||
#include "debugger_disasm.h"
|
||||
#include "ui_debugger_disasm.h"
|
||||
#include "Core/CPU.h"
|
||||
#include "Core/Debugger/DebugInterface.h"
|
||||
#include "Core/Debugger/SymbolMap.h"
|
||||
#include "ctrldisasmview.h"
|
||||
#include "Core/Debugger/Breakpoints.h"
|
||||
#include "Core/HLE/HLE.h"
|
||||
#include "Core/CoreTiming.h"
|
||||
#include "mainwindow.h"
|
||||
#include "ctrlregisterlist.h"
|
||||
#include "native/base/stringutil.h"
|
||||
#include "Core/Debugger/SymbolMap.h"
|
||||
#include "GPU/GPUState.h"
|
||||
#include "GPU/GPUInterface.h"
|
||||
#include "GPU/GeDisasm.h"
|
||||
#include "EmuThread.h"
|
||||
#include "Core/Host.h"
|
||||
|
||||
Debugger_Disasm::Debugger_Disasm(DebugInterface *_cpu, MainWindow* mainWindow_, QWidget *parent) :
|
||||
QDialog(parent),
|
||||
|
@ -19,19 +30,50 @@ Debugger_Disasm::Debugger_Disasm(DebugInterface *_cpu, MainWindow* mainWindow_,
|
|||
{
|
||||
ui->setupUi(this);
|
||||
|
||||
vfpudlg = new Debugger_VFPU(_cpu, mainWindow, this);
|
||||
|
||||
ui->DisasmView->setWindowTitle(_cpu->GetName());
|
||||
|
||||
QObject::connect(ui->RegListScroll,SIGNAL(actionTriggered(int)), ui->RegList, SLOT(scrollChanged(int)));
|
||||
QObject::connect(ui->RegList,SIGNAL(GotoDisasm(u32)),this,SLOT(Goto(u32)));
|
||||
QObject::connect(this, SIGNAL(updateDisplayList_()), this, SLOT(UpdateDisplayListGUI()));
|
||||
QObject::connect(this, SIGNAL(UpdateBreakpoints_()), this, SLOT(UpdateBreakpointsGUI()));
|
||||
QObject::connect(this, SIGNAL(UpdateThread_()), this, SLOT(UpdateThreadGUI()));
|
||||
|
||||
CtrlDisAsmView *ptr = ui->DisasmView;
|
||||
ptr->setDebugger(cpu);
|
||||
ptr->setParentWindow(this);
|
||||
ptr->gotoAddr(0x00000000);
|
||||
|
||||
CtrlRegisterList *rl = ui->RegList;
|
||||
rl->setParentWindow(this);
|
||||
rl->setCPU(cpu);
|
||||
|
||||
//symbolMap.FillSymbolComboBox(GetDlgItem(m_hDlg, IDC_FUNCTIONLIST),ST_FUNCTION)
|
||||
FillFunctions();
|
||||
|
||||
}
|
||||
|
||||
void Debugger_Disasm::showEvent(QShowEvent *)
|
||||
{
|
||||
|
||||
#ifdef Q_WS_X11
|
||||
// Hack to remove the X11 crash with threaded opengl when opening the first dialog
|
||||
EmuThread_LockDraw(true);
|
||||
QTimer::singleShot(100, this, SLOT(releaseLock()));
|
||||
#endif
|
||||
|
||||
if(Core_IsStepping())
|
||||
SetDebugMode(true);
|
||||
else
|
||||
SetDebugMode(false);
|
||||
}
|
||||
|
||||
void Debugger_Disasm::releaseLock()
|
||||
{
|
||||
EmuThread_LockDraw(false);
|
||||
}
|
||||
|
||||
|
||||
Debugger_Disasm::~Debugger_Disasm()
|
||||
{
|
||||
delete ui;
|
||||
|
@ -39,73 +81,68 @@ Debugger_Disasm::~Debugger_Disasm()
|
|||
|
||||
void Debugger_Disasm::ShowVFPU()
|
||||
{
|
||||
//vfpudlg->Show(true);
|
||||
vfpudlg->show();
|
||||
}
|
||||
|
||||
void Debugger_Disasm::FunctionList()
|
||||
void Debugger_Disasm::Update()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void Debugger_Disasm::GotoInt()
|
||||
{
|
||||
|
||||
ui->RegList->redraw();
|
||||
mainWindow->UpdateMenus();
|
||||
UpdateDialog();
|
||||
}
|
||||
|
||||
void Debugger_Disasm::Go()
|
||||
{
|
||||
SetDebugMode(false);
|
||||
EmuThread_LockDraw(true);
|
||||
Core_EnableStepping(false);
|
||||
EmuThread_LockDraw(false);
|
||||
mainWindow->UpdateMenus();
|
||||
}
|
||||
|
||||
void Debugger_Disasm::Step()
|
||||
{
|
||||
CtrlDisAsmView *ptr = ui->DisasmView;
|
||||
CtrlRegisterList *reglist = ui->RegList;
|
||||
|
||||
EmuThread_LockDraw(true);
|
||||
Core_DoSingleStep();
|
||||
//Sleep(1);
|
||||
sleep(1);
|
||||
EmuThread_LockDraw(false);
|
||||
_dbg_update_();
|
||||
ptr->gotoPC();
|
||||
reglist->redraw();
|
||||
//vfpudlg->Update();
|
||||
}
|
||||
|
||||
void Debugger_Disasm::StepOver()
|
||||
{
|
||||
CtrlDisAsmView *ptr = ui->DisasmView;
|
||||
CtrlRegisterList *reglist = ui->RegList;
|
||||
|
||||
SetDebugMode(false);
|
||||
EmuThread_LockDraw(true);
|
||||
CBreakPoints::AddBreakPoint(cpu->GetPC()+cpu->getInstructionSize(0),true);
|
||||
_dbg_update_();
|
||||
Core_EnableStepping(false);
|
||||
EmuThread_LockDraw(false);
|
||||
mainWindow->UpdateMenus();
|
||||
//Sleep(1);
|
||||
sleep(1);
|
||||
ptr->gotoPC();
|
||||
reglist->redraw();
|
||||
}
|
||||
|
||||
void Debugger_Disasm::StepHLE()
|
||||
{
|
||||
EmuThread_LockDraw(true);
|
||||
hleDebugBreak();
|
||||
SetDebugMode(false);
|
||||
_dbg_update_();
|
||||
Core_EnableStepping(false);
|
||||
EmuThread_LockDraw(false);
|
||||
mainWindow->UpdateMenus();
|
||||
}
|
||||
|
||||
void Debugger_Disasm::UpdateDialog()
|
||||
{
|
||||
CtrlDisAsmView *ptr = ui->DisasmView;
|
||||
CtrlRegisterList *reglist = ui->RegList;
|
||||
ui->DisasmView->setAlign(cpu->getInstructionSize(0));
|
||||
ui->DisasmView->redraw();
|
||||
ui->RegList->redraw();
|
||||
vfpudlg->Update();
|
||||
UpdateBreakpoints();
|
||||
UpdateThread();
|
||||
UpdateDisplayList();
|
||||
|
||||
ptr->setAlign(cpu->getInstructionSize(0));
|
||||
ptr->redraw();
|
||||
reglist->redraw();
|
||||
char tempTicks[24];
|
||||
sprintf(tempTicks, "%lld", CoreTiming::GetTicks());
|
||||
ui->debugCount->setText(QString("Ctr : ") + tempTicks);
|
||||
|
||||
/*ui->callStack->clear();
|
||||
u32 pc = currentMIPS->pc;
|
||||
|
@ -116,12 +153,12 @@ void Debugger_Disasm::UpdateDialog()
|
|||
sprintf(addr_, "0x%08x",pc);
|
||||
ui->callStack->addItem(new QListWidgetItem(addr_));
|
||||
|
||||
u32 addr2 = Memory::ReadUnchecked_U32(ra);
|
||||
addr = Memory::ReadUnchecked_U32(ra);
|
||||
sprintf(addr_, "0x%08x",ra);
|
||||
ui->callStack->addItem(new QListWidgetItem(addr_));
|
||||
count++;
|
||||
|
||||
while (addr != 0xFFFFFFFF && addr!=0 && count++<20)
|
||||
while (addr != 0xFFFFFFFF && addr!=0 && Memory::IsValidAddress(addr+4) && count++<20)
|
||||
{
|
||||
u32 fun = Memory::ReadUnchecked_U32(addr+4);
|
||||
sprintf(addr_, "0x%08x",fun);
|
||||
|
@ -129,37 +166,30 @@ void Debugger_Disasm::UpdateDialog()
|
|||
addr = Memory::ReadUnchecked_U32(addr);
|
||||
}*/
|
||||
|
||||
/*
|
||||
for (int i=0; i<numCPUs; i++)
|
||||
if (memoryWindow[i])
|
||||
memoryWindow[i]->Update();
|
||||
*/
|
||||
|
||||
if(mainWindow->GetDialogMemory())
|
||||
mainWindow->GetDialogMemory()->Update();
|
||||
|
||||
}
|
||||
|
||||
void Debugger_Disasm::Stop()
|
||||
{
|
||||
CtrlDisAsmView *ptr = ui->DisasmView;
|
||||
CtrlRegisterList *reglist = ui->RegList;
|
||||
|
||||
SetDebugMode(true);
|
||||
EmuThread_LockDraw(true);
|
||||
Core_EnableStepping(true);
|
||||
EmuThread_LockDraw(false);
|
||||
_dbg_update_();
|
||||
mainWindow->UpdateMenus();
|
||||
UpdateDialog();
|
||||
//Sleep(1); //let cpu catch up
|
||||
sleep(1);
|
||||
ptr->gotoPC();
|
||||
reglist->redraw();
|
||||
//vfpudlg->Update();
|
||||
}
|
||||
|
||||
void Debugger_Disasm::Skip()
|
||||
{
|
||||
CtrlDisAsmView *ptr = ui->DisasmView;
|
||||
|
||||
EmuThread_LockDraw(true);
|
||||
cpu->SetPC(cpu->GetPC() + cpu->getInstructionSize(0));
|
||||
//Sleep(1);
|
||||
sleep(1);
|
||||
EmuThread_LockDraw(false);
|
||||
ptr->gotoPC();
|
||||
UpdateDialog();
|
||||
}
|
||||
|
@ -185,12 +215,13 @@ void Debugger_Disasm::SetDebugMode(bool _bDebug)
|
|||
{
|
||||
ui->Go->setEnabled(true);
|
||||
ui->StepInto->setEnabled(true);
|
||||
ui->StepOver->setEnabled(true);
|
||||
ui->StepOver->setEnabled(false); // Crash, so disable for now
|
||||
ui->NextHLE->setEnabled(true);
|
||||
ui->Stop->setEnabled(false);
|
||||
ui->Skip->setEnabled(true);
|
||||
CtrlDisAsmView *ptr = ui->DisasmView;
|
||||
ptr->gotoPC();
|
||||
UpdateDialog();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -200,9 +231,9 @@ void Debugger_Disasm::SetDebugMode(bool _bDebug)
|
|||
ui->NextHLE->setEnabled(false);
|
||||
ui->Stop->setEnabled(true);
|
||||
ui->Skip->setEnabled(false);
|
||||
}
|
||||
CtrlRegisterList *reglist = ui->RegList;
|
||||
reglist->redraw();
|
||||
}
|
||||
}
|
||||
|
||||
void Debugger_Disasm::Goto(u32 addr)
|
||||
|
@ -272,14 +303,414 @@ void Debugger_Disasm::on_DisasmView_customContextMenuRequested(const QPoint &pos
|
|||
ui->DisasmView->contextMenu(pos);
|
||||
}
|
||||
|
||||
void Debugger_Disasm::on_DisasmView_cellClicked(int row, int column)
|
||||
{
|
||||
ui->DisasmView->click(row, column);
|
||||
}
|
||||
|
||||
void Debugger_Disasm::NotifyMapLoaded()
|
||||
{
|
||||
//symbolMap.FillSymbolListBox(GetDlgItem(m_hDlg, IDC_FUNCTIONLIST),ST_FUNCTION);
|
||||
FillFunctions();
|
||||
CtrlDisAsmView *ptr = ui->DisasmView;
|
||||
ptr->redraw();
|
||||
}
|
||||
|
||||
void Debugger_Disasm::on_RegList_customContextMenuRequested(const QPoint &pos)
|
||||
{
|
||||
ui->RegList->contextMenu(pos);
|
||||
}
|
||||
|
||||
void Debugger_Disasm::ShowMemory(u32 addr)
|
||||
{
|
||||
mainWindow->ShowMemory(addr);
|
||||
}
|
||||
|
||||
void Debugger_Disasm::on_vfpu_clicked()
|
||||
{
|
||||
ShowVFPU();
|
||||
}
|
||||
|
||||
void Debugger_Disasm::on_FuncList_itemClicked(QListWidgetItem *item)
|
||||
{
|
||||
u32 addr = item->data(Qt::UserRole).toInt();
|
||||
|
||||
ui->DisasmView->gotoAddr(addr);
|
||||
}
|
||||
|
||||
void Debugger_Disasm::FillFunctions()
|
||||
{
|
||||
QListWidgetItem* item = new QListWidgetItem();
|
||||
item->setText("(0x02000000)");
|
||||
item->setData(Qt::UserRole, 0x02000000);
|
||||
ui->FuncList->addItem(item);
|
||||
|
||||
for(int i = 0; i < symbolMap.GetNumSymbols(); i++)
|
||||
{
|
||||
if(symbolMap.GetSymbolType(i) & ST_FUNCTION)
|
||||
{
|
||||
QListWidgetItem* item = new QListWidgetItem();
|
||||
item->setText(QString(symbolMap.GetSymbolName(i)) + " ("+ QVariant(symbolMap.GetSymbolSize(i)).toString() +")");
|
||||
item->setData(Qt::UserRole, symbolMap.GetAddress(i));
|
||||
ui->FuncList->addItem(item);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Debugger_Disasm::UpdateBreakpoints()
|
||||
{
|
||||
emit UpdateBreakpoints_();
|
||||
}
|
||||
|
||||
void Debugger_Disasm::UpdateBreakpointsGUI()
|
||||
{
|
||||
u32 curBpAddr = 0;
|
||||
QTreeWidgetItem* curItem = ui->breakpointsList->currentItem();
|
||||
if(curItem)
|
||||
curBpAddr = ui->breakpointsList->currentItem()->data(0,Qt::UserRole).toInt();
|
||||
|
||||
ui->breakpointsList->clear();
|
||||
|
||||
EmuThread_LockDraw(true);
|
||||
for(int i = 0; i < CBreakPoints::GetNumBreakpoints(); i++)
|
||||
{
|
||||
u32 addr_ = CBreakPoints::GetBreakpointAddress(i);
|
||||
if(!CBreakPoints::IsTempBreakPoint(addr_))
|
||||
{
|
||||
QTreeWidgetItem* item = new QTreeWidgetItem();
|
||||
char temp[24];
|
||||
sprintf(temp,"%08x",addr_);
|
||||
item->setText(0,temp);
|
||||
item->setData(0,Qt::UserRole,addr_);
|
||||
ui->breakpointsList->addTopLevelItem(item);
|
||||
if(curBpAddr == addr_)
|
||||
ui->breakpointsList->setCurrentItem(item);
|
||||
}
|
||||
}
|
||||
EmuThread_LockDraw(false);
|
||||
}
|
||||
|
||||
void Debugger_Disasm::on_breakpointsList_itemClicked(QTreeWidgetItem *item, int column)
|
||||
{
|
||||
ui->DisasmView->gotoAddr(item->data(column,Qt::UserRole).toInt());
|
||||
}
|
||||
|
||||
void Debugger_Disasm::on_breakpointsList_customContextMenuRequested(const QPoint &pos)
|
||||
{
|
||||
QTreeWidgetItem* item = ui->breakpointsList->itemAt(pos);
|
||||
if(item)
|
||||
{
|
||||
breakpointAddr = item->data(0,Qt::UserRole).toInt();
|
||||
|
||||
QMenu menu(this);
|
||||
|
||||
QAction *removeBP = new QAction(tr("Remove breakpoint"), this);
|
||||
connect(removeBP, SIGNAL(triggered()), this, SLOT(RemoveBreakpoint()));
|
||||
menu.addAction(removeBP);
|
||||
|
||||
menu.exec( ui->breakpointsList->mapToGlobal(pos));
|
||||
}
|
||||
}
|
||||
|
||||
void Debugger_Disasm::RemoveBreakpoint()
|
||||
{
|
||||
CBreakPoints::RemoveBreakPoint(breakpointAddr);
|
||||
Update();
|
||||
}
|
||||
|
||||
void Debugger_Disasm::on_clearAllBP_clicked()
|
||||
{
|
||||
CBreakPoints::ClearAllBreakPoints();
|
||||
Update();
|
||||
}
|
||||
|
||||
void Debugger_Disasm::UpdateThread()
|
||||
{
|
||||
emit UpdateThread_();
|
||||
}
|
||||
|
||||
void Debugger_Disasm::UpdateThreadGUI()
|
||||
{
|
||||
ui->threadList->clear();
|
||||
|
||||
EmuThread_LockDraw(true);
|
||||
std::vector<DebugThreadInfo> threads = GetThreadsInfo();
|
||||
EmuThread_LockDraw(false);
|
||||
|
||||
for(int i = 0; i < threads.size(); i++)
|
||||
{
|
||||
QTreeWidgetItem* item = new QTreeWidgetItem();
|
||||
item->setText(0,QVariant(threads[i].id).toString());
|
||||
item->setData(0,Qt::UserRole,threads[i].id);
|
||||
item->setText(1,threads[i].name);
|
||||
QString status = "";
|
||||
if(threads[i].status & THREADSTATUS_RUNNING) status += "Running ";
|
||||
if(threads[i].status & THREADSTATUS_WAIT) status += "Wait ";
|
||||
if(threads[i].status & THREADSTATUS_READY) status += "Ready ";
|
||||
if(threads[i].status & THREADSTATUS_SUSPEND) status += "Suspend ";
|
||||
if(threads[i].status & THREADSTATUS_DORMANT) status += "Dormant ";
|
||||
if(threads[i].status & THREADSTATUS_DEAD) status += "Dead ";
|
||||
item->setText(2,status);
|
||||
char temp[24];
|
||||
sprintf(temp,"%08x",threads[i].curPC);
|
||||
item->setText(3,temp);
|
||||
item->setData(3,Qt::UserRole,threads[i].curPC);
|
||||
sprintf(temp,"%08x",threads[i].entrypoint);
|
||||
item->setText(4,temp);
|
||||
item->setData(4,Qt::UserRole,threads[i].entrypoint);
|
||||
|
||||
if(threads[i].isCurrent)
|
||||
{
|
||||
for(int j = 0; j < 5; j++)
|
||||
item->setTextColor(j,Qt::green);
|
||||
}
|
||||
|
||||
ui->threadList->addTopLevelItem(item);
|
||||
}
|
||||
}
|
||||
|
||||
void Debugger_Disasm::on_threadList_itemClicked(QTreeWidgetItem *item, int column)
|
||||
{
|
||||
ui->DisasmView->gotoAddr(item->data(3,Qt::UserRole).toInt());
|
||||
}
|
||||
|
||||
void Debugger_Disasm::on_threadList_customContextMenuRequested(const QPoint &pos)
|
||||
{
|
||||
QTreeWidgetItem* item = ui->threadList->itemAt(pos);
|
||||
if(item)
|
||||
{
|
||||
threadRowSelected = item;
|
||||
|
||||
QMenu menu(this);
|
||||
|
||||
QAction *gotoEntryPoint = new QAction(tr("Go to entry point"), this);
|
||||
connect(gotoEntryPoint, SIGNAL(triggered()), this, SLOT(GotoThreadEntryPoint()));
|
||||
menu.addAction(gotoEntryPoint);
|
||||
|
||||
QMenu* changeStatus = menu.addMenu("Change status");
|
||||
|
||||
QAction *statusRunning = new QAction(tr("Running"), this);
|
||||
connect(statusRunning, SIGNAL(triggered()), this, SLOT(SetThreadStatusRun()));
|
||||
changeStatus->addAction(statusRunning);
|
||||
|
||||
QAction *statusWait = new QAction(tr("Wait"), this);
|
||||
connect(statusWait, SIGNAL(triggered()), this, SLOT(SetThreadStatusWait()));
|
||||
changeStatus->addAction(statusWait);
|
||||
|
||||
QAction *statusSuspend = new QAction(tr("Suspend"), this);
|
||||
connect(statusSuspend, SIGNAL(triggered()), this, SLOT(SetThreadStatusSuspend()));
|
||||
changeStatus->addAction(statusSuspend);
|
||||
|
||||
menu.exec( ui->threadList->mapToGlobal(pos));
|
||||
}
|
||||
}
|
||||
|
||||
void Debugger_Disasm::GotoThreadEntryPoint()
|
||||
{
|
||||
ui->DisasmView->gotoAddr(threadRowSelected->data(4,Qt::UserRole).toInt());
|
||||
Update();
|
||||
}
|
||||
|
||||
void Debugger_Disasm::SetThreadStatus(ThreadStatus status)
|
||||
{
|
||||
EmuThread_LockDraw(true);
|
||||
__KernelChangeThreadState(threadRowSelected->data(0,Qt::UserRole).toInt(), status);
|
||||
EmuThread_LockDraw(false);
|
||||
|
||||
UpdateThread();
|
||||
}
|
||||
|
||||
void Debugger_Disasm::SetThreadStatusRun()
|
||||
{
|
||||
SetThreadStatus(THREADSTATUS_RUNNING);
|
||||
}
|
||||
|
||||
void Debugger_Disasm::SetThreadStatusWait()
|
||||
{
|
||||
SetThreadStatus(THREADSTATUS_WAIT);
|
||||
}
|
||||
|
||||
void Debugger_Disasm::SetThreadStatusSuspend()
|
||||
{
|
||||
SetThreadStatus(THREADSTATUS_SUSPEND);
|
||||
}
|
||||
|
||||
void Debugger_Disasm::UpdateDisplayList()
|
||||
{
|
||||
emit updateDisplayList_();
|
||||
}
|
||||
|
||||
void Debugger_Disasm::UpdateDisplayListGUI()
|
||||
{
|
||||
u32 curDlId = 0;
|
||||
QTreeWidgetItem* curItem = ui->displayList->currentItem();
|
||||
if(curItem)
|
||||
curDlId = ui->displayList->currentItem()->data(0,Qt::UserRole).toInt();
|
||||
|
||||
ui->displayList->clear();
|
||||
ui->displayListData->clear();
|
||||
|
||||
EmuThread_LockDraw(true);
|
||||
const std::deque<DisplayList>& dlQueue = gpu->GetDisplayLists();
|
||||
|
||||
DisplayList* dl = gpu->GetCurrentDisplayList();
|
||||
if(dl)
|
||||
{
|
||||
QTreeWidgetItem* item = new QTreeWidgetItem();
|
||||
item->setText(0,QVariant(dl->id).toString());
|
||||
item->setData(0, Qt::UserRole, dl->id);
|
||||
switch(dl->status)
|
||||
{
|
||||
case PSP_GE_LIST_DONE: item->setText(1,"Done"); break;
|
||||
case PSP_GE_LIST_QUEUED: item->setText(1,"Queued"); break;
|
||||
case PSP_GE_LIST_DRAWING: item->setText(1,"Drawing"); break;
|
||||
case PSP_GE_LIST_STALL_REACHED: item->setText(1,"Stall Reached"); break;
|
||||
case PSP_GE_LIST_END_REACHED: item->setText(1,"End Reached"); break;
|
||||
case PSP_GE_LIST_CANCEL_DONE: item->setText(1,"Cancel Done"); break;
|
||||
default: break;
|
||||
}
|
||||
char temp[24];
|
||||
sprintf(temp,"%08x",dl->startpc);
|
||||
item->setText(2,temp);
|
||||
item->setData(2, Qt::UserRole, dl->startpc);
|
||||
sprintf(temp,"%08x",dl->pc);
|
||||
item->setText(3,temp);
|
||||
item->setData(3, Qt::UserRole, dl->pc);
|
||||
ui->displayList->addTopLevelItem(item);
|
||||
if(curDlId == dl->id)
|
||||
{
|
||||
ui->displayList->setCurrentItem(item);
|
||||
displayListRowSelected = item;
|
||||
ShowDLCode();
|
||||
}
|
||||
}
|
||||
|
||||
for(auto it = dlQueue.begin(); it != dlQueue.end(); ++it)
|
||||
{
|
||||
if(dl && it->id == dl->id)
|
||||
continue;
|
||||
QTreeWidgetItem* item = new QTreeWidgetItem();
|
||||
item->setText(0,QVariant(it->id).toString());
|
||||
item->setData(0, Qt::UserRole, it->id);
|
||||
switch(it->status)
|
||||
{
|
||||
case PSP_GE_LIST_DONE: item->setText(1,"Done"); break;
|
||||
case PSP_GE_LIST_QUEUED: item->setText(1,"Queued"); break;
|
||||
case PSP_GE_LIST_DRAWING: item->setText(1,"Drawing"); break;
|
||||
case PSP_GE_LIST_STALL_REACHED: item->setText(1,"Stall Reached"); break;
|
||||
case PSP_GE_LIST_END_REACHED: item->setText(1,"End Reached"); break;
|
||||
case PSP_GE_LIST_CANCEL_DONE: item->setText(1,"Cancel Done"); break;
|
||||
default: break;
|
||||
}
|
||||
char temp[24];
|
||||
sprintf(temp,"%08x",it->startpc);
|
||||
item->setText(2,temp);
|
||||
item->setData(2, Qt::UserRole, it->startpc);
|
||||
sprintf(temp,"%08x",it->pc);
|
||||
item->setText(3,temp);
|
||||
item->setData(3, Qt::UserRole, it->pc);
|
||||
ui->displayList->addTopLevelItem(item);
|
||||
if(curDlId == it->id)
|
||||
{
|
||||
ui->displayList->setCurrentItem(item);
|
||||
displayListRowSelected = item;
|
||||
ShowDLCode();
|
||||
}
|
||||
}
|
||||
EmuThread_LockDraw(false);
|
||||
}
|
||||
|
||||
void Debugger_Disasm::on_displayList_customContextMenuRequested(const QPoint &pos)
|
||||
{
|
||||
QTreeWidgetItem* item = ui->displayList->itemAt(pos);
|
||||
if(item)
|
||||
{
|
||||
displayListRowSelected = item;
|
||||
|
||||
QMenu menu(this);
|
||||
|
||||
QAction *showCode = new QAction(tr("Show code"), this);
|
||||
connect(showCode, SIGNAL(triggered()), this, SLOT(ShowDLCode()));
|
||||
menu.addAction(showCode);
|
||||
|
||||
menu.exec( ui->displayList->mapToGlobal(pos));
|
||||
}
|
||||
}
|
||||
|
||||
void Debugger_Disasm::ShowDLCode()
|
||||
{
|
||||
ui->displayListData->clear();
|
||||
ui->displayListData->setColumnWidth(0,70);
|
||||
|
||||
u32 startPc = displayListRowSelected->data(2,Qt::UserRole).toInt();
|
||||
u32 curPc = displayListRowSelected->data(3,Qt::UserRole).toInt();
|
||||
|
||||
std::map<int,std::string> data;
|
||||
FillDisplayListCmd(data, startPc,0);
|
||||
|
||||
for(std::map<int,std::string>::iterator it = data.begin(); it != data.end(); it++)
|
||||
{
|
||||
QTreeWidgetItem* item = new QTreeWidgetItem();
|
||||
char temp[24];
|
||||
sprintf(temp,"%08x",it->first);
|
||||
item->setText(0,temp);
|
||||
item->setText(1,it->second.c_str());
|
||||
if(curPc == it->first)
|
||||
{
|
||||
for(int j = 0; j < 2; j++)
|
||||
item->setTextColor(j, Qt::green);
|
||||
}
|
||||
ui->displayListData->addTopLevelItem(item);
|
||||
}
|
||||
}
|
||||
|
||||
void Debugger_Disasm::FillDisplayListCmd(std::map<int,std::string>& data, u32 pc, u32 prev)
|
||||
{
|
||||
u32 curPc = pc;
|
||||
int debugLimit = 10000; // Anti crash if this code is bugged
|
||||
while(Memory::IsValidAddress(curPc) && debugLimit > 0)
|
||||
{
|
||||
if(data.find(curPc) != data.end())
|
||||
return;
|
||||
|
||||
u32 op = Memory::ReadUnchecked_U32(curPc); //read from memory
|
||||
u32 cmd = op >> 24;
|
||||
u32 diff = op ^ gstate.cmdmem[cmd];
|
||||
char temp[256];
|
||||
GeDisassembleOp(curPc, op, prev, temp);
|
||||
data[curPc] = temp;
|
||||
prev = op;
|
||||
if(cmd == GE_CMD_JUMP)
|
||||
{
|
||||
u32 target = (((gstate.base & 0x00FF0000) << 8) | (op & 0xFFFFFC)) & 0x0FFFFFFF;
|
||||
FillDisplayListCmd(data, target, prev);
|
||||
return;
|
||||
}
|
||||
else if(cmd == GE_CMD_CALL)
|
||||
{
|
||||
u32 target = gstate_c.getRelativeAddress(op & 0xFFFFFF);
|
||||
FillDisplayListCmd(data, target, prev);
|
||||
}
|
||||
else if(cmd == GE_CMD_RET)
|
||||
{
|
||||
return;
|
||||
}
|
||||
else if(cmd == GE_CMD_FINISH)
|
||||
{
|
||||
return;
|
||||
}
|
||||
else if(cmd == GE_CMD_END)
|
||||
{
|
||||
if(prev >> 24 == GE_CMD_FINISH)
|
||||
return;
|
||||
}
|
||||
curPc += 4;
|
||||
debugLimit--;
|
||||
}
|
||||
}
|
||||
|
||||
void Debugger_Disasm::on_nextGPU_clicked()
|
||||
{
|
||||
host->SetGPUStep(true);
|
||||
host->NextGPUStep();
|
||||
}
|
||||
|
||||
void Debugger_Disasm::on_runBtn_clicked()
|
||||
{
|
||||
host->SetGPUStep(false);
|
||||
host->NextGPUStep();
|
||||
}
|
||||
|
|
|
@ -1,8 +1,12 @@
|
|||
#ifndef DEBUGGER_DISASM_H
|
||||
#define DEBUGGER_DISASM_H
|
||||
|
||||
#include "Core/HLE/sceKernelThread.h"
|
||||
#include "Core/Debugger/DebugInterface.h"
|
||||
#include "debugger_vfpu.h"
|
||||
#include <QDialog>
|
||||
#include <QListWidgetItem>
|
||||
#include <QTreeWidgetItem>
|
||||
|
||||
class MainWindow;
|
||||
namespace Ui {
|
||||
|
@ -17,11 +21,8 @@ public:
|
|||
explicit Debugger_Disasm(DebugInterface *_cpu, MainWindow* mainWindow_, QWidget *parent = 0);
|
||||
~Debugger_Disasm();
|
||||
void SetDebugMode(bool _bDebug);
|
||||
void Goto(u32 addr);
|
||||
|
||||
void ShowVFPU();
|
||||
void FunctionList();
|
||||
void GotoInt();
|
||||
void Go();
|
||||
void Step();
|
||||
void StepOver();
|
||||
|
@ -32,7 +33,32 @@ public:
|
|||
void GotoLR();
|
||||
void UpdateDialog();
|
||||
void NotifyMapLoaded();
|
||||
void Update();
|
||||
void ShowMemory(u32 addr);
|
||||
void FillFunctions();
|
||||
void UpdateBreakpoints();
|
||||
void UpdateThread();
|
||||
void UpdateDisplayList();
|
||||
protected:
|
||||
void showEvent(QShowEvent *);
|
||||
void FillDisplayListCmd(std::map<int,std::string>& data, u32 pc, u32 prev);
|
||||
|
||||
signals:
|
||||
void updateDisplayList_();
|
||||
void UpdateBreakpoints_();
|
||||
void UpdateThread_();
|
||||
|
||||
public slots:
|
||||
void Goto(u32 addr);
|
||||
void RemoveBreakpoint();
|
||||
void GotoThreadEntryPoint();
|
||||
void ShowDLCode();
|
||||
|
||||
private slots:
|
||||
void UpdateDisplayListGUI();
|
||||
void UpdateBreakpointsGUI();
|
||||
void UpdateThreadGUI();
|
||||
|
||||
void on_GotoPc_clicked();
|
||||
|
||||
void on_Go_clicked();
|
||||
|
@ -55,12 +81,42 @@ private slots:
|
|||
|
||||
void on_DisasmView_customContextMenuRequested(const QPoint &pos);
|
||||
|
||||
void on_DisasmView_cellClicked(int row, int column);
|
||||
void releaseLock();
|
||||
void on_RegList_customContextMenuRequested(const QPoint &pos);
|
||||
|
||||
void on_vfpu_clicked();
|
||||
|
||||
void on_FuncList_itemClicked(QListWidgetItem *item);
|
||||
|
||||
void on_breakpointsList_itemClicked(QTreeWidgetItem *item, int column);
|
||||
|
||||
void on_breakpointsList_customContextMenuRequested(const QPoint &pos);
|
||||
|
||||
void on_clearAllBP_clicked();
|
||||
|
||||
void on_threadList_itemClicked(QTreeWidgetItem *item, int column);
|
||||
|
||||
void on_threadList_customContextMenuRequested(const QPoint &pos);
|
||||
|
||||
void SetThreadStatusRun();
|
||||
void SetThreadStatusWait();
|
||||
void SetThreadStatusSuspend();
|
||||
void on_displayList_customContextMenuRequested(const QPoint &pos);
|
||||
|
||||
void on_nextGPU_clicked();
|
||||
|
||||
void on_runBtn_clicked();
|
||||
|
||||
private:
|
||||
void SetThreadStatus(ThreadStatus status);
|
||||
|
||||
Ui::Debugger_Disasm *ui;
|
||||
DebugInterface* cpu;
|
||||
MainWindow* mainWindow;
|
||||
Debugger_VFPU* vfpudlg;
|
||||
u32 breakpointAddr;
|
||||
QTreeWidgetItem* threadRowSelected;
|
||||
QTreeWidgetItem* displayListRowSelected;
|
||||
};
|
||||
|
||||
#endif // DEBUGGER_DISASM_H
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>837</width>
|
||||
<height>423</height>
|
||||
<height>492</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="focusPolicy">
|
||||
|
@ -16,11 +16,16 @@
|
|||
<property name="windowTitle">
|
||||
<string>Dialog</string>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_7">
|
||||
<item>
|
||||
<widget class="QSplitter" name="splitter_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<widget class="QWidget" name="layoutWidget">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<item>
|
||||
<widget class="QLabel" name="label">
|
||||
<widget class="QLabel" name="debugCount">
|
||||
<property name="text">
|
||||
<string>Ctr:</string>
|
||||
</property>
|
||||
|
@ -102,6 +107,30 @@
|
|||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="vfpu">
|
||||
<property name="text">
|
||||
<string>Show VFPU</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QTabWidget" name="tabWidget">
|
||||
<property name="currentIndex">
|
||||
|
@ -115,17 +144,58 @@
|
|||
</sizepolicy>
|
||||
</property>
|
||||
<attribute name="title">
|
||||
<string>Tab 1</string>
|
||||
<string>Regs</string>
|
||||
</attribute>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_4">
|
||||
<item>
|
||||
<widget class="CtrlRegisterList" name="RegList"/>
|
||||
<widget class="CtrlRegisterList" name="RegList" native="true">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="focusPolicy">
|
||||
<enum>Qt::ClickFocus</enum>
|
||||
</property>
|
||||
<property name="contextMenuPolicy">
|
||||
<enum>Qt::CustomContextMenu</enum>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_6">
|
||||
<property name="spacing">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="margin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>229</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QScrollBar" name="RegListScroll">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="tab_2">
|
||||
<attribute name="title">
|
||||
<string>Tab 2</string>
|
||||
<string>Funcs</string>
|
||||
</attribute>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_5">
|
||||
<item>
|
||||
|
@ -136,8 +206,8 @@
|
|||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
</widget>
|
||||
<widget class="QWidget" name="layoutWidget">
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
|
@ -182,6 +252,9 @@
|
|||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="StepOver">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
|
@ -222,66 +295,274 @@
|
|||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="CtrlDisAsmView" name="DisasmView">
|
||||
<widget class="CtrlDisAsmView" name="DisasmView" native="true">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="focusPolicy">
|
||||
<enum>Qt::ClickFocus</enum>
|
||||
</property>
|
||||
<property name="contextMenuPolicy">
|
||||
<enum>Qt::CustomContextMenu</enum>
|
||||
</property>
|
||||
<property name="horizontalScrollBarPolicy">
|
||||
<enum>Qt::ScrollBarAlwaysOff</enum>
|
||||
</property>
|
||||
<property name="selectionMode">
|
||||
<enum>QAbstractItemView::SingleSelection</enum>
|
||||
</property>
|
||||
<property name="selectionBehavior">
|
||||
<enum>QAbstractItemView::SelectRows</enum>
|
||||
</property>
|
||||
<property name="showGrid">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="gridStyle">
|
||||
<enum>Qt::NoPen</enum>
|
||||
</property>
|
||||
<property name="rowCount">
|
||||
<number>5</number>
|
||||
</property>
|
||||
<property name="columnCount">
|
||||
<number>5</number>
|
||||
</property>
|
||||
<attribute name="horizontalHeaderVisible">
|
||||
<bool>false</bool>
|
||||
</attribute>
|
||||
<attribute name="verticalHeaderVisible">
|
||||
<bool>false</bool>
|
||||
</attribute>
|
||||
<row/>
|
||||
<row/>
|
||||
<row/>
|
||||
<row/>
|
||||
<row/>
|
||||
<column/>
|
||||
<column/>
|
||||
<column/>
|
||||
<column/>
|
||||
<column/>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QTabWidget" name="tabWidget_2">
|
||||
<property name="currentIndex">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<widget class="QWidget" name="tab_3">
|
||||
<attribute name="title">
|
||||
<string>Breakpoints</string>
|
||||
</attribute>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_4">
|
||||
<item>
|
||||
<widget class="QTreeWidget" name="breakpointsList">
|
||||
<property name="contextMenuPolicy">
|
||||
<enum>Qt::CustomContextMenu</enum>
|
||||
</property>
|
||||
<property name="itemsExpandable">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="expandsOnDoubleClick">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<attribute name="headerDefaultSectionSize">
|
||||
<number>30</number>
|
||||
</attribute>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string>Address</string>
|
||||
</property>
|
||||
</column>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_8">
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_3">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="clearAllBP">
|
||||
<property name="text">
|
||||
<string>Clear All</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="tab_6">
|
||||
<attribute name="title">
|
||||
<string>Callstack</string>
|
||||
</attribute>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_5">
|
||||
<item>
|
||||
<widget class="QListWidget" name="callStack"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="tab_4">
|
||||
<attribute name="title">
|
||||
<string>Display Lists</string>
|
||||
</attribute>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_10">
|
||||
<item>
|
||||
<widget class="QSplitter" name="splitter">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<widget class="QTreeWidget" name="displayList">
|
||||
<property name="contextMenuPolicy">
|
||||
<enum>Qt::CustomContextMenu</enum>
|
||||
</property>
|
||||
<property name="rootIsDecorated">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="itemsExpandable">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="expandsOnDoubleClick">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<attribute name="headerDefaultSectionSize">
|
||||
<number>30</number>
|
||||
</attribute>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string>Id</string>
|
||||
</property>
|
||||
</column>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string>Status</string>
|
||||
</property>
|
||||
</column>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string>Start Address</string>
|
||||
</property>
|
||||
</column>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string>Current Address</string>
|
||||
</property>
|
||||
</column>
|
||||
</widget>
|
||||
<widget class="QWidget" name="layoutWidget">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_6">
|
||||
<item>
|
||||
<widget class="QTreeWidget" name="displayListData">
|
||||
<property name="rootIsDecorated">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="itemsExpandable">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="expandsOnDoubleClick">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="columnCount">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<attribute name="headerVisible">
|
||||
<bool>false</bool>
|
||||
</attribute>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string notr="true">1</string>
|
||||
</property>
|
||||
</column>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string notr="true">2</string>
|
||||
</property>
|
||||
</column>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_9">
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_4">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="runBtn">
|
||||
<property name="text">
|
||||
<string>Run</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="nextGPU">
|
||||
<property name="text">
|
||||
<string>Step</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="tab_5">
|
||||
<attribute name="title">
|
||||
<string>Threads</string>
|
||||
</attribute>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_7">
|
||||
<item>
|
||||
<widget class="QTreeWidget" name="threadList">
|
||||
<property name="contextMenuPolicy">
|
||||
<enum>Qt::CustomContextMenu</enum>
|
||||
</property>
|
||||
<property name="rootIsDecorated">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="itemsExpandable">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="expandsOnDoubleClick">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<attribute name="headerDefaultSectionSize">
|
||||
<number>50</number>
|
||||
</attribute>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string>Id</string>
|
||||
</property>
|
||||
</column>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string>Name</string>
|
||||
</property>
|
||||
</column>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string>Status</string>
|
||||
</property>
|
||||
</column>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string>Current PC</string>
|
||||
</property>
|
||||
</column>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string>Entry point</string>
|
||||
</property>
|
||||
</column>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<customwidgets>
|
||||
<customwidget>
|
||||
<class>CtrlRegisterList</class>
|
||||
<extends>QListWidget</extends>
|
||||
<header>ctrlregisterlist.h</header>
|
||||
<class>CtrlDisAsmView</class>
|
||||
<extends>QWidget</extends>
|
||||
<header>ctrldisasmview.h</header>
|
||||
<container>1</container>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>CtrlDisAsmView</class>
|
||||
<extends>QTableWidget</extends>
|
||||
<header>ctrldisasmview.h</header>
|
||||
<class>CtrlRegisterList</class>
|
||||
<extends>QWidget</extends>
|
||||
<header>ctrlregisterlist.h</header>
|
||||
<container>1</container>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<resources/>
|
||||
|
|
110
Qt/debugger_memory.cpp
Normal file
110
Qt/debugger_memory.cpp
Normal file
|
@ -0,0 +1,110 @@
|
|||
#include "debugger_memory.h"
|
||||
#include "ui_debugger_memory.h"
|
||||
#include "EmuThread.h"
|
||||
#include "Core/Debugger/SymbolMap.h"
|
||||
#include <QTimer>
|
||||
|
||||
Debugger_Memory::Debugger_Memory(DebugInterface *_cpu, MainWindow* mainWindow_, QWidget *parent) :
|
||||
QDialog(parent),
|
||||
ui(new Ui::Debugger_Memory),
|
||||
cpu(_cpu),
|
||||
mainWindow(mainWindow_)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
|
||||
setWindowTitle(QString("Memory Viewer - ")+cpu->GetName());
|
||||
|
||||
ui->memView->setDebugger(_cpu);
|
||||
}
|
||||
|
||||
Debugger_Memory::~Debugger_Memory()
|
||||
{
|
||||
delete ui;
|
||||
}
|
||||
|
||||
|
||||
void Debugger_Memory::showEvent(QShowEvent *)
|
||||
{
|
||||
|
||||
#ifdef Q_WS_X11
|
||||
// Hack to remove the X11 crash with threaded opengl when opening the first dialog
|
||||
EmuThread_LockDraw(true);
|
||||
QTimer::singleShot(100, this, SLOT(releaseLock()));
|
||||
#endif
|
||||
}
|
||||
|
||||
void Debugger_Memory::releaseLock()
|
||||
{
|
||||
EmuThread_LockDraw(false);
|
||||
}
|
||||
|
||||
void Debugger_Memory::Update()
|
||||
{
|
||||
ui->memView->redraw();
|
||||
}
|
||||
|
||||
void Debugger_Memory::Goto(u32 addr)
|
||||
{
|
||||
show();
|
||||
ui->memView->gotoAddr(addr & ~3);
|
||||
}
|
||||
|
||||
void Debugger_Memory::on_editAddress_textChanged(const QString &arg1)
|
||||
{
|
||||
u32 addr;
|
||||
sscanf(arg1.toStdString().c_str(),"%08x",&addr);
|
||||
ui->memView->gotoAddr(addr & ~3);
|
||||
}
|
||||
|
||||
void Debugger_Memory::on_normalBtn_clicked()
|
||||
{
|
||||
ui->memView->setMode(MV_NORMAL);
|
||||
}
|
||||
|
||||
void Debugger_Memory::on_symbolsBtn_clicked()
|
||||
{
|
||||
ui->memView->setMode(MV_SYMBOLS);
|
||||
}
|
||||
|
||||
void Debugger_Memory::on_memView_customContextMenuRequested(const QPoint &pos)
|
||||
{
|
||||
ui->memView->contextMenu(pos);
|
||||
}
|
||||
|
||||
void Debugger_Memory::NotifyMapLoaded()
|
||||
{
|
||||
QListWidgetItem* item = new QListWidgetItem();
|
||||
item->setText("(0x80000000)");
|
||||
item->setData(Qt::UserRole, 0x80000000);
|
||||
ui->symbols->addItem(item);
|
||||
|
||||
for(int i = 0; i < symbolMap.GetNumSymbols(); i++)
|
||||
{
|
||||
if(symbolMap.GetSymbolType(i) & ST_DATA)
|
||||
{
|
||||
QListWidgetItem* item = new QListWidgetItem();
|
||||
item->setText(QString(symbolMap.GetSymbolName(i)) + " ("+ QVariant(symbolMap.GetSymbolSize(i)).toString() +")");
|
||||
item->setData(Qt::UserRole, symbolMap.GetAddress(i));
|
||||
ui->symbols->addItem(item);
|
||||
}
|
||||
}
|
||||
|
||||
ui->regions->clear();
|
||||
/*
|
||||
for (int i = 0; i < cpu->getMemMap()->numRegions; i++)
|
||||
{
|
||||
int n = ComboBox_AddString(lb,cpu->getMemMap()->regions[i].name);
|
||||
ComboBox_SetItemData(lb,n,cpu->getMemMap()->regions[i].start);
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
void Debugger_Memory::on_regions_currentIndexChanged(int index)
|
||||
{
|
||||
ui->memView->gotoAddr(ui->regions->itemData(index,Qt::UserRole).toInt());
|
||||
}
|
||||
|
||||
void Debugger_Memory::on_symbols_itemClicked(QListWidgetItem *item)
|
||||
{
|
||||
ui->memView->gotoAddr(item->data(Qt::UserRole).toInt());
|
||||
}
|
49
Qt/debugger_memory.h
Normal file
49
Qt/debugger_memory.h
Normal file
|
@ -0,0 +1,49 @@
|
|||
#ifndef DEBUGGER_MEMORY_H
|
||||
#define DEBUGGER_MEMORY_H
|
||||
|
||||
#include "Core/Debugger/DebugInterface.h"
|
||||
#include <QDialog>
|
||||
#include <QListWidgetItem>
|
||||
|
||||
class MainWindow;
|
||||
namespace Ui {
|
||||
class Debugger_Memory;
|
||||
}
|
||||
|
||||
class Debugger_Memory : public QDialog
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit Debugger_Memory(DebugInterface *_cpu, MainWindow* mainWindow_, QWidget *parent = 0);
|
||||
~Debugger_Memory();
|
||||
|
||||
void Update();
|
||||
void Goto(u32 addr);
|
||||
|
||||
void NotifyMapLoaded();
|
||||
public slots:
|
||||
void releaseLock();
|
||||
protected:
|
||||
void showEvent(QShowEvent *);
|
||||
private slots:
|
||||
void on_editAddress_textChanged(const QString &arg1);
|
||||
|
||||
void on_normalBtn_clicked();
|
||||
|
||||
void on_symbolsBtn_clicked();
|
||||
|
||||
void on_memView_customContextMenuRequested(const QPoint &pos);
|
||||
|
||||
void on_regions_currentIndexChanged(int index);
|
||||
|
||||
void on_symbols_itemClicked(QListWidgetItem *item);
|
||||
|
||||
private:
|
||||
Ui::Debugger_Memory *ui;
|
||||
DebugInterface* cpu;
|
||||
MainWindow* mainWindow;
|
||||
|
||||
};
|
||||
|
||||
#endif // DEBUGGER_MEMORY_H
|
92
Qt/debugger_memory.ui
Normal file
92
Qt/debugger_memory.ui
Normal file
|
@ -0,0 +1,92 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>Debugger_Memory</class>
|
||||
<widget class="QDialog" name="Debugger_Memory">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>611</width>
|
||||
<height>384</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Dialog</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string>Goto:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="editAddress"/>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QComboBox" name="regions"/>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBox">
|
||||
<property name="title">
|
||||
<string>Mode</string>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||
<item>
|
||||
<widget class="QPushButton" name="normalBtn">
|
||||
<property name="text">
|
||||
<string>Normal</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="symbolsBtn">
|
||||
<property name="text">
|
||||
<string>Symbols</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<widget class="QListWidget" name="symbols"/>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="CtrlMemView" name="memView" native="true">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="focusPolicy">
|
||||
<enum>Qt::StrongFocus</enum>
|
||||
</property>
|
||||
<property name="contextMenuPolicy">
|
||||
<enum>Qt::CustomContextMenu</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<customwidgets>
|
||||
<customwidget>
|
||||
<class>CtrlMemView</class>
|
||||
<extends>QWidget</extends>
|
||||
<header>ctrlmemview.h</header>
|
||||
<container>1</container>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
55
Qt/debugger_vfpu.cpp
Normal file
55
Qt/debugger_vfpu.cpp
Normal file
|
@ -0,0 +1,55 @@
|
|||
#include "debugger_vfpu.h"
|
||||
#include "ui_debugger_vfpu.h"
|
||||
#include "EmuThread.h"
|
||||
#include "mainwindow.h"
|
||||
#include <QTimer>
|
||||
|
||||
Debugger_VFPU::Debugger_VFPU(DebugInterface *_cpu, MainWindow* mainWindow_, QWidget *parent) :
|
||||
QDialog(parent),
|
||||
ui(new Ui::Debugger_VFPU),
|
||||
cpu(_cpu),
|
||||
mainWindow(mainWindow_)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
|
||||
setWindowTitle(QString("VFPU - ")+cpu->GetName());
|
||||
|
||||
ui->vfpu->setCPU(_cpu);
|
||||
}
|
||||
|
||||
Debugger_VFPU::~Debugger_VFPU()
|
||||
{
|
||||
delete ui;
|
||||
}
|
||||
|
||||
|
||||
void Debugger_VFPU::showEvent(QShowEvent *)
|
||||
{
|
||||
|
||||
#ifdef Q_WS_X11
|
||||
// Hack to remove the X11 crash with threaded opengl when opening the first dialog
|
||||
EmuThread_LockDraw(true);
|
||||
QTimer::singleShot(100, this, SLOT(releaseLock()));
|
||||
#endif
|
||||
}
|
||||
|
||||
void Debugger_VFPU::releaseLock()
|
||||
{
|
||||
EmuThread_LockDraw(false);
|
||||
}
|
||||
|
||||
void Debugger_VFPU::Update()
|
||||
{
|
||||
ui->vfpu->redraw();
|
||||
}
|
||||
|
||||
void Debugger_VFPU::Goto(u32 addr)
|
||||
{
|
||||
show();
|
||||
mainWindow->GetDialogMemory()->Goto(addr & ~3);
|
||||
}
|
||||
|
||||
void Debugger_VFPU::on_comboBox_currentIndexChanged(int index)
|
||||
{
|
||||
ui->vfpu->setMode(index);
|
||||
}
|
35
Qt/debugger_vfpu.h
Normal file
35
Qt/debugger_vfpu.h
Normal file
|
@ -0,0 +1,35 @@
|
|||
#ifndef DEBUGGER_VFPU_H
|
||||
#define DEBUGGER_VFPU_H
|
||||
|
||||
#include "Core/Debugger/DebugInterface.h"
|
||||
#include <QDialog>
|
||||
|
||||
class MainWindow;
|
||||
namespace Ui {
|
||||
class Debugger_VFPU;
|
||||
}
|
||||
|
||||
class Debugger_VFPU : public QDialog
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit Debugger_VFPU(DebugInterface *_cpu, MainWindow *mainWindow_, QWidget *parent = 0);
|
||||
~Debugger_VFPU();
|
||||
|
||||
void Update();
|
||||
void Goto(u32 addr);
|
||||
protected:
|
||||
void showEvent(QShowEvent *);
|
||||
public slots:
|
||||
void releaseLock();
|
||||
private slots:
|
||||
void on_comboBox_currentIndexChanged(int index);
|
||||
|
||||
private:
|
||||
Ui::Debugger_VFPU *ui;
|
||||
DebugInterface* cpu;
|
||||
MainWindow* mainWindow;
|
||||
};
|
||||
|
||||
#endif // DEBUGGER_VFPU_H
|
87
Qt/debugger_vfpu.ui
Normal file
87
Qt/debugger_vfpu.ui
Normal file
|
@ -0,0 +1,87 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>Debugger_VFPU</class>
|
||||
<widget class="QDialog" name="Debugger_VFPU">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>400</width>
|
||||
<height>300</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Dialog</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<widget class="QComboBox" name="comboBox">
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Float</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>HalfFloat</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Hex</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Bytes</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Shorts</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Ints</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="CtrlVfpuView" name="vfpu" native="true">
|
||||
<property name="focusPolicy">
|
||||
<enum>Qt::StrongFocus</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<customwidgets>
|
||||
<customwidget>
|
||||
<class>CtrlVfpuView</class>
|
||||
<extends>QWidget</extends>
|
||||
<header>ctrlvfpuview.h</header>
|
||||
<container>1</container>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
|
@ -9,6 +9,115 @@
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CtrlDisAsmView</name>
|
||||
<message>
|
||||
<location filename="../ctrldisasmview.cpp" line="106"/>
|
||||
<source>Copy &address</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ctrldisasmview.cpp" line="110"/>
|
||||
<source>Copy instruction (&hex)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ctrldisasmview.cpp" line="114"/>
|
||||
<source>Copy instruction (&disasm)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ctrldisasmview.cpp" line="120"/>
|
||||
<source>&Run to here</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ctrldisasmview.cpp" line="124"/>
|
||||
<source>&Set Next Statement</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ctrldisasmview.cpp" line="128"/>
|
||||
<source>&Toggle breakpoint</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ctrldisasmview.cpp" line="132"/>
|
||||
<source>&Follow branch</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ctrldisasmview.cpp" line="142"/>
|
||||
<source>Go to in &Memory View</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ctrldisasmview.cpp" line="152"/>
|
||||
<source>&Rename function...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ctrldisasmview.cpp" line="240"/>
|
||||
<source>New function name</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ctrldisasmview.cpp" line="241"/>
|
||||
<source>New function name :</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CtrlMemView</name>
|
||||
<message>
|
||||
<location filename="../ctrlmemview.cpp" line="215"/>
|
||||
<source>Go to in &disasm</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ctrlmemview.cpp" line="221"/>
|
||||
<source>&Copy value</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ctrlmemview.cpp" line="225"/>
|
||||
<source>Dump...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CtrlRegisterList</name>
|
||||
<message>
|
||||
<location filename="../ctrlregisterlist.cpp" line="274"/>
|
||||
<source>Go to in &memory view</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ctrlregisterlist.cpp" line="278"/>
|
||||
<source>Go to in &disasm</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ctrlregisterlist.cpp" line="284"/>
|
||||
<source>&Copy value</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ctrlregisterlist.cpp" line="288"/>
|
||||
<source>C&hange...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ctrlregisterlist.cpp" line="352"/>
|
||||
<source>Set new value</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ctrlregisterlist.cpp" line="353"/>
|
||||
<source>Set new value :</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Debugger_Disasm</name>
|
||||
<message>
|
||||
|
@ -17,65 +126,243 @@
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="25"/>
|
||||
<location filename="../debugger_disasm.ui" line="30"/>
|
||||
<source>Ctr:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="38"/>
|
||||
<location filename="../debugger_disasm.ui" line="43"/>
|
||||
<source>&Go to</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="73"/>
|
||||
<location filename="../debugger_disasm.ui" line="78"/>
|
||||
<source>&PC</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="86"/>
|
||||
<location filename="../debugger_disasm.ui" line="91"/>
|
||||
<source>&LR</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="118"/>
|
||||
<source>Tab 1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="128"/>
|
||||
<source>Tab 2</source>
|
||||
<source>Show VFPU</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="153"/>
|
||||
<location filename="../debugger_disasm.ui" line="147"/>
|
||||
<source>Regs</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="198"/>
|
||||
<source>Funcs</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="223"/>
|
||||
<source>&Go</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="166"/>
|
||||
<location filename="../debugger_disasm.ui" line="236"/>
|
||||
<source>Stop</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="179"/>
|
||||
<location filename="../debugger_disasm.ui" line="249"/>
|
||||
<source>Step &Into</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="192"/>
|
||||
<location filename="../debugger_disasm.ui" line="265"/>
|
||||
<source>Step &Over</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="205"/>
|
||||
<location filename="../debugger_disasm.ui" line="278"/>
|
||||
<source>S&kip</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="218"/>
|
||||
<location filename="../debugger_disasm.ui" line="291"/>
|
||||
<source>Next &HLE</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="320"/>
|
||||
<source>Breakpoints</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="339"/>
|
||||
<source>Address</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="362"/>
|
||||
<source>Clear All</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="372"/>
|
||||
<source>Callstack</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="382"/>
|
||||
<source>Display Lists</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="408"/>
|
||||
<location filename="../debugger_disasm.ui" line="519"/>
|
||||
<source>Id</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="413"/>
|
||||
<location filename="../debugger_disasm.ui" line="529"/>
|
||||
<source>Status</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="418"/>
|
||||
<source>Start Address</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="423"/>
|
||||
<source>Current Address</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="476"/>
|
||||
<source>Run</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="483"/>
|
||||
<source>Step</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="497"/>
|
||||
<source>Threads</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="524"/>
|
||||
<source>Name</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="534"/>
|
||||
<source>Current PC</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="539"/>
|
||||
<source>Entry point</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.cpp" line="401"/>
|
||||
<source>Remove breakpoint</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.cpp" line="480"/>
|
||||
<source>Go to entry point</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.cpp" line="486"/>
|
||||
<source>Running</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.cpp" line="490"/>
|
||||
<source>Wait</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.cpp" line="494"/>
|
||||
<source>Suspend</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.cpp" line="626"/>
|
||||
<source>Show code</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Debugger_Memory</name>
|
||||
<message>
|
||||
<location filename="../debugger_memory.ui" line="14"/>
|
||||
<source>Dialog</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_memory.ui" line="22"/>
|
||||
<source>Goto:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_memory.ui" line="35"/>
|
||||
<source>Mode</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_memory.ui" line="41"/>
|
||||
<source>Normal</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_memory.ui" line="48"/>
|
||||
<source>Symbols</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Debugger_VFPU</name>
|
||||
<message>
|
||||
<location filename="../debugger_vfpu.ui" line="14"/>
|
||||
<source>Dialog</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_vfpu.ui" line="23"/>
|
||||
<source>Float</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_vfpu.ui" line="28"/>
|
||||
<source>HalfFloat</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_vfpu.ui" line="33"/>
|
||||
<source>Hex</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_vfpu.ui" line="38"/>
|
||||
<source>Bytes</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_vfpu.ui" line="43"/>
|
||||
<source>Shorts</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_vfpu.ui" line="48"/>
|
||||
<source>Ints</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>GamePadDialog</name>
|
||||
|
@ -205,340 +492,360 @@
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="79"/>
|
||||
<location filename="../mainwindow.ui" line="81"/>
|
||||
<source>Debu&g</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="91"/>
|
||||
<location filename="../mainwindow.ui" line="95"/>
|
||||
<source>&Options</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="95"/>
|
||||
<location filename="../mainwindow.ui" line="99"/>
|
||||
<source>&Log Levels</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="99"/>
|
||||
<location filename="../mainwindow.ui" line="103"/>
|
||||
<source>G3D</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="108"/>
|
||||
<location filename="../mainwindow.ui" line="112"/>
|
||||
<source>HLE</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="117"/>
|
||||
<location filename="../mainwindow.ui" line="121"/>
|
||||
<source>Default</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="131"/>
|
||||
<location filename="../mainwindow.ui" line="135"/>
|
||||
<source>Zoom</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="140"/>
|
||||
<location filename="../mainwindow.ui" line="144"/>
|
||||
<source>Language</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="167"/>
|
||||
<location filename="../mainwindow.ui" line="172"/>
|
||||
<source>&Help</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="182"/>
|
||||
<location filename="../mainwindow.ui" line="187"/>
|
||||
<source>&Open...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="187"/>
|
||||
<location filename="../mainwindow.ui" line="192"/>
|
||||
<source>&Close</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="192"/>
|
||||
<location filename="../mainwindow.ui" line="197"/>
|
||||
<source>-</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="197"/>
|
||||
<location filename="../mainwindow.ui" line="202"/>
|
||||
<source>Quickload state</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="200"/>
|
||||
<location filename="../mainwindow.ui" line="205"/>
|
||||
<source>F4</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="205"/>
|
||||
<location filename="../mainwindow.ui" line="210"/>
|
||||
<source>Quicksave state</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="208"/>
|
||||
<location filename="../mainwindow.ui" line="213"/>
|
||||
<source>F2</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="213"/>
|
||||
<location filename="../mainwindow.ui" line="218"/>
|
||||
<source>&Load State File...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="218"/>
|
||||
<location filename="../mainwindow.ui" line="223"/>
|
||||
<source>&Save State File...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="223"/>
|
||||
<location filename="../mainwindow.ui" line="228"/>
|
||||
<source>E&xit</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="228"/>
|
||||
<location filename="../mainwindow.ui" line="233"/>
|
||||
<source>&Run</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="231"/>
|
||||
<location filename="../mainwindow.ui" line="236"/>
|
||||
<source>F7</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="236"/>
|
||||
<location filename="../mainwindow.ui" line="241"/>
|
||||
<source>&Pause</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="239"/>
|
||||
<location filename="../mainwindow.ui" line="244"/>
|
||||
<source>F8</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="244"/>
|
||||
<location filename="../mainwindow.ui" line="249"/>
|
||||
<source>R&eset</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="252"/>
|
||||
<location filename="../mainwindow.ui" line="257"/>
|
||||
<source>&Interpreter</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="260"/>
|
||||
<location filename="../mainwindow.ui" line="265"/>
|
||||
<source>&Slightly Faster Interpreter</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="268"/>
|
||||
<location filename="../mainwindow.ui" line="273"/>
|
||||
<source>&Dynarec</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="276"/>
|
||||
<location filename="../mainwindow.ui" line="281"/>
|
||||
<source>Load &Map File...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="284"/>
|
||||
<location filename="../mainwindow.ui" line="289"/>
|
||||
<source>&Save Map File...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="292"/>
|
||||
<location filename="../mainwindow.ui" line="297"/>
|
||||
<source>&Reset Symbol Table</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="300"/>
|
||||
<location filename="../mainwindow.ui" line="302"/>
|
||||
<source>&Disassembly</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="303"/>
|
||||
<location filename="../mainwindow.ui" line="305"/>
|
||||
<source>Ctrl+D</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="311"/>
|
||||
<location filename="../mainwindow.ui" line="313"/>
|
||||
<source>&Log Console</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="314"/>
|
||||
<location filename="../mainwindow.ui" line="316"/>
|
||||
<source>Ctrl+L</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="322"/>
|
||||
<location filename="../mainwindow.ui" line="321"/>
|
||||
<source>Memory &View...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="325"/>
|
||||
<location filename="../mainwindow.ui" line="324"/>
|
||||
<source>Ctrl+M</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="330"/>
|
||||
<location filename="../mainwindow.ui" line="329"/>
|
||||
<source>Keyboard &Controls</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="335"/>
|
||||
<location filename="../mainwindow.ui" line="334"/>
|
||||
<source>&Toggle Full Screen</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="338"/>
|
||||
<location filename="../mainwindow.ui" line="337"/>
|
||||
<source>F12</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="346"/>
|
||||
<location filename="../mainwindow.ui" line="345"/>
|
||||
<source>&Buffered Rendering</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="349"/>
|
||||
<location filename="../mainwindow.ui" line="348"/>
|
||||
<source>F5</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="357"/>
|
||||
<location filename="../mainwindow.ui" line="356"/>
|
||||
<source>&Hardware Transform</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="360"/>
|
||||
<location filename="../mainwindow.ui" line="359"/>
|
||||
<source>F6</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="368"/>
|
||||
<location filename="../mainwindow.ui" line="367"/>
|
||||
<source>&Linear Filtering</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="376"/>
|
||||
<location filename="../mainwindow.ui" line="375"/>
|
||||
<source>&Wireframe (experimental)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="384"/>
|
||||
<location filename="../mainwindow.ui" line="383"/>
|
||||
<source>&Display Raw Framebuffer</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="392"/>
|
||||
<location filename="../mainwindow.ui" line="391"/>
|
||||
<source>&Show Debug Statistics</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="400"/>
|
||||
<location filename="../mainwindow.ui" line="399"/>
|
||||
<source>Screen &1x</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="403"/>
|
||||
<location filename="../mainwindow.ui" line="402"/>
|
||||
<source>Ctrl+1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="411"/>
|
||||
<location filename="../mainwindow.ui" line="410"/>
|
||||
<source>Screen &2x</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="414"/>
|
||||
<location filename="../mainwindow.ui" line="413"/>
|
||||
<source>Ctrl+2</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="422"/>
|
||||
<location filename="../mainwindow.ui" line="421"/>
|
||||
<source>Screen &3x</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="425"/>
|
||||
<location filename="../mainwindow.ui" line="424"/>
|
||||
<source>Ctrl+3</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="433"/>
|
||||
<location filename="../mainwindow.ui" line="432"/>
|
||||
<source>Screen &4x</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="436"/>
|
||||
<location filename="../mainwindow.ui" line="435"/>
|
||||
<source>Ctrl+4</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="444"/>
|
||||
<location filename="../mainwindow.ui" line="443"/>
|
||||
<source>&Fast Memory (dynarec, unstable)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="452"/>
|
||||
<location filename="../mainwindow.ui" line="451"/>
|
||||
<source>&Ignore illegal reads/writes</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="457"/>
|
||||
<location filename="../mainwindow.ui" line="456"/>
|
||||
<source>&Go to http://www.ppsspp.org/</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="462"/>
|
||||
<location filename="../mainwindow.ui" line="461"/>
|
||||
<source>&About PPSSPP...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="467"/>
|
||||
<location filename="../mainwindow.ui" line="466"/>
|
||||
<source>&Use VBO</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="475"/>
|
||||
<location filename="../mainwindow.ui" line="507"/>
|
||||
<location filename="../mainwindow.ui" line="539"/>
|
||||
<location filename="../mainwindow.ui" line="474"/>
|
||||
<location filename="../mainwindow.ui" line="506"/>
|
||||
<location filename="../mainwindow.ui" line="538"/>
|
||||
<source>Debug</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="483"/>
|
||||
<location filename="../mainwindow.ui" line="515"/>
|
||||
<location filename="../mainwindow.ui" line="547"/>
|
||||
<location filename="../mainwindow.ui" line="482"/>
|
||||
<location filename="../mainwindow.ui" line="514"/>
|
||||
<location filename="../mainwindow.ui" line="546"/>
|
||||
<source>Warning</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="491"/>
|
||||
<location filename="../mainwindow.ui" line="531"/>
|
||||
<location filename="../mainwindow.ui" line="563"/>
|
||||
<location filename="../mainwindow.ui" line="490"/>
|
||||
<location filename="../mainwindow.ui" line="530"/>
|
||||
<location filename="../mainwindow.ui" line="562"/>
|
||||
<source>Error</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="499"/>
|
||||
<location filename="../mainwindow.ui" line="523"/>
|
||||
<location filename="../mainwindow.ui" line="555"/>
|
||||
<location filename="../mainwindow.ui" line="498"/>
|
||||
<location filename="../mainwindow.ui" line="522"/>
|
||||
<location filename="../mainwindow.ui" line="554"/>
|
||||
<source>Info</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="568"/>
|
||||
<location filename="../mainwindow.ui" line="567"/>
|
||||
<source>GamePad Controls</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.cpp" line="828"/>
|
||||
<location filename="../mainwindow.ui" line="572"/>
|
||||
<source>&Run on load</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="577"/>
|
||||
<source>D&ump next frame to log</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="582"/>
|
||||
<source>&Vertex Cache</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="587"/>
|
||||
<source>Memory View Texture...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.cpp" line="843"/>
|
||||
<source>No translations</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
|
941
Qt/languages/ppsspp_fr.ts
Normal file
941
Qt/languages/ppsspp_fr.ts
Normal file
|
@ -0,0 +1,941 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS version="2.0" language="fr_FR">
|
||||
<context>
|
||||
<name>Controls</name>
|
||||
<message>
|
||||
<location filename="../controls.ui" line="20"/>
|
||||
<source>Controls</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CtrlDisAsmView</name>
|
||||
<message>
|
||||
<location filename="../ctrldisasmview.cpp" line="106"/>
|
||||
<source>Copy &address</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ctrldisasmview.cpp" line="110"/>
|
||||
<source>Copy instruction (&hex)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ctrldisasmview.cpp" line="114"/>
|
||||
<source>Copy instruction (&disasm)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ctrldisasmview.cpp" line="120"/>
|
||||
<source>&Run to here</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ctrldisasmview.cpp" line="124"/>
|
||||
<source>&Set Next Statement</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ctrldisasmview.cpp" line="128"/>
|
||||
<source>&Toggle breakpoint</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ctrldisasmview.cpp" line="132"/>
|
||||
<source>&Follow branch</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ctrldisasmview.cpp" line="142"/>
|
||||
<source>Go to in &Memory View</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ctrldisasmview.cpp" line="152"/>
|
||||
<source>&Rename function...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ctrldisasmview.cpp" line="240"/>
|
||||
<source>New function name</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ctrldisasmview.cpp" line="241"/>
|
||||
<source>New function name :</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CtrlMemView</name>
|
||||
<message>
|
||||
<location filename="../ctrlmemview.cpp" line="215"/>
|
||||
<source>Go to in &disasm</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ctrlmemview.cpp" line="221"/>
|
||||
<source>&Copy value</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ctrlmemview.cpp" line="225"/>
|
||||
<source>Dump...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CtrlRegisterList</name>
|
||||
<message>
|
||||
<location filename="../ctrlregisterlist.cpp" line="274"/>
|
||||
<source>Go to in &memory view</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ctrlregisterlist.cpp" line="278"/>
|
||||
<source>Go to in &disasm</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ctrlregisterlist.cpp" line="284"/>
|
||||
<source>&Copy value</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ctrlregisterlist.cpp" line="288"/>
|
||||
<source>C&hange...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ctrlregisterlist.cpp" line="352"/>
|
||||
<source>Set new value</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ctrlregisterlist.cpp" line="353"/>
|
||||
<source>Set new value :</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Debugger_Disasm</name>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="17"/>
|
||||
<source>Dialog</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="30"/>
|
||||
<source>Ctr:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="43"/>
|
||||
<source>&Go to</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="78"/>
|
||||
<source>&PC</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="91"/>
|
||||
<source>&LR</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="128"/>
|
||||
<source>Show VFPU</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="147"/>
|
||||
<source>Regs</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="198"/>
|
||||
<source>Funcs</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="223"/>
|
||||
<source>&Go</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="236"/>
|
||||
<source>Stop</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="249"/>
|
||||
<source>Step &Into</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="265"/>
|
||||
<source>Step &Over</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="278"/>
|
||||
<source>S&kip</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="291"/>
|
||||
<source>Next &HLE</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="320"/>
|
||||
<source>Breakpoints</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="339"/>
|
||||
<source>Address</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="362"/>
|
||||
<source>Clear All</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="372"/>
|
||||
<source>Callstack</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="382"/>
|
||||
<source>Display Lists</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="408"/>
|
||||
<location filename="../debugger_disasm.ui" line="519"/>
|
||||
<source>Id</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="413"/>
|
||||
<location filename="../debugger_disasm.ui" line="529"/>
|
||||
<source>Status</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="418"/>
|
||||
<source>Start Address</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="423"/>
|
||||
<source>Current Address</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="476"/>
|
||||
<source>Run</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="483"/>
|
||||
<source>Step</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="497"/>
|
||||
<source>Threads</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="524"/>
|
||||
<source>Name</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="534"/>
|
||||
<source>Current PC</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="539"/>
|
||||
<source>Entry point</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.cpp" line="401"/>
|
||||
<source>Remove breakpoint</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.cpp" line="480"/>
|
||||
<source>Go to entry point</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.cpp" line="486"/>
|
||||
<source>Running</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.cpp" line="490"/>
|
||||
<source>Wait</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.cpp" line="494"/>
|
||||
<source>Suspend</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.cpp" line="626"/>
|
||||
<source>Show code</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Debugger_Memory</name>
|
||||
<message>
|
||||
<location filename="../debugger_memory.ui" line="14"/>
|
||||
<source>Dialog</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_memory.ui" line="22"/>
|
||||
<source>Goto:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_memory.ui" line="35"/>
|
||||
<source>Mode</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_memory.ui" line="41"/>
|
||||
<source>Normal</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_memory.ui" line="48"/>
|
||||
<source>Symbols</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Debugger_VFPU</name>
|
||||
<message>
|
||||
<location filename="../debugger_vfpu.ui" line="14"/>
|
||||
<source>Dialog</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_vfpu.ui" line="23"/>
|
||||
<source>Float</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_vfpu.ui" line="28"/>
|
||||
<source>HalfFloat</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_vfpu.ui" line="33"/>
|
||||
<source>Hex</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_vfpu.ui" line="38"/>
|
||||
<source>Bytes</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_vfpu.ui" line="43"/>
|
||||
<source>Shorts</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_vfpu.ui" line="48"/>
|
||||
<source>Ints</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>GamePadDialog</name>
|
||||
<message>
|
||||
<location filename="../gamepaddialog.ui" line="14"/>
|
||||
<source>Gamepad Configuration</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gamepaddialog.ui" line="22"/>
|
||||
<source>GamePad List</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gamepaddialog.ui" line="46"/>
|
||||
<source>Refresh</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gamepaddialog.ui" line="53"/>
|
||||
<source>Select</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gamepaddialog.ui" line="62"/>
|
||||
<source>Gamepad Values :</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gamepaddialog.ui" line="86"/>
|
||||
<source>TextLabel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gamepaddialog.ui" line="98"/>
|
||||
<source>Assign Gamepad input</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gamepaddialog.ui" line="108"/>
|
||||
<source> to PSP button/axis</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gamepaddialog.ui" line="118"/>
|
||||
<source>Assign</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gamepaddialog.ui" line="127"/>
|
||||
<source>Press buttons on your gamePad to verify mapping :</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gamepaddialog.cpp" line="134"/>
|
||||
<location filename="../gamepaddialog.cpp" line="366"/>
|
||||
<source><b>No gamepad</b></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gamepaddialog.cpp" line="146"/>
|
||||
<source><b>Unknown gamepad</b></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gamepaddialog.cpp" line="287"/>
|
||||
<source>Buttons</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gamepaddialog.cpp" line="301"/>
|
||||
<location filename="../gamepaddialog.cpp" line="344"/>
|
||||
<source>Button %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gamepaddialog.cpp" line="304"/>
|
||||
<source>Axes</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gamepaddialog.cpp" line="310"/>
|
||||
<source>%1 Neg</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gamepaddialog.cpp" line="317"/>
|
||||
<source>Axes %1 Neg</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gamepaddialog.cpp" line="320"/>
|
||||
<source>%1 Pos</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gamepaddialog.cpp" line="327"/>
|
||||
<source>Axes %1 Pos</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gamepaddialog.cpp" line="331"/>
|
||||
<source>Hats</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gamepaddialog.cpp" line="368"/>
|
||||
<source><b>Current gamepad: %1</b></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MainWindow</name>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="20"/>
|
||||
<source>PPSSPP</source>
|
||||
<translation>PPSSPP</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="52"/>
|
||||
<source>&File</source>
|
||||
<translation>&Fichier</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="66"/>
|
||||
<source>&Emulation</source>
|
||||
<translation>&Emulation</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="81"/>
|
||||
<source>Debu&g</source>
|
||||
<translation>Debu&g</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="95"/>
|
||||
<source>&Options</source>
|
||||
<translation>&Options</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="99"/>
|
||||
<source>&Log Levels</source>
|
||||
<translation>Niveaux de &logs</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="103"/>
|
||||
<source>G3D</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="112"/>
|
||||
<source>HLE</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="121"/>
|
||||
<source>Default</source>
|
||||
<translation>Défaut</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="135"/>
|
||||
<source>Zoom</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="144"/>
|
||||
<source>Language</source>
|
||||
<translation>Langue</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="172"/>
|
||||
<source>&Help</source>
|
||||
<translation>&Aide</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="187"/>
|
||||
<source>&Open...</source>
|
||||
<translation>&Ouvrir...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="192"/>
|
||||
<source>&Close</source>
|
||||
<translation>&Fermer</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="197"/>
|
||||
<source>-</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="202"/>
|
||||
<source>Quickload state</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="205"/>
|
||||
<source>F4</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="210"/>
|
||||
<source>Quicksave state</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="213"/>
|
||||
<source>F2</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="218"/>
|
||||
<source>&Load State File...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="223"/>
|
||||
<source>&Save State File...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="228"/>
|
||||
<source>E&xit</source>
|
||||
<translation>&Quitter</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="233"/>
|
||||
<source>&Run</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="236"/>
|
||||
<source>F7</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="241"/>
|
||||
<source>&Pause</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="244"/>
|
||||
<source>F8</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="249"/>
|
||||
<source>R&eset</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="257"/>
|
||||
<source>&Interpreter</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="265"/>
|
||||
<source>&Slightly Faster Interpreter</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="273"/>
|
||||
<source>&Dynarec</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="281"/>
|
||||
<source>Load &Map File...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="289"/>
|
||||
<source>&Save Map File...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="297"/>
|
||||
<source>&Reset Symbol Table</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="302"/>
|
||||
<source>&Disassembly</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="305"/>
|
||||
<source>Ctrl+D</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="313"/>
|
||||
<source>&Log Console</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="316"/>
|
||||
<source>Ctrl+L</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="321"/>
|
||||
<source>Memory &View...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="324"/>
|
||||
<source>Ctrl+M</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="329"/>
|
||||
<source>Keyboard &Controls</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="334"/>
|
||||
<source>&Toggle Full Screen</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="337"/>
|
||||
<source>F12</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="345"/>
|
||||
<source>&Buffered Rendering</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="348"/>
|
||||
<source>F5</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="356"/>
|
||||
<source>&Hardware Transform</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="359"/>
|
||||
<source>F6</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="367"/>
|
||||
<source>&Linear Filtering</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="375"/>
|
||||
<source>&Wireframe (experimental)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="383"/>
|
||||
<source>&Display Raw Framebuffer</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="391"/>
|
||||
<source>&Show Debug Statistics</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="399"/>
|
||||
<source>Screen &1x</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="402"/>
|
||||
<source>Ctrl+1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="410"/>
|
||||
<source>Screen &2x</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="413"/>
|
||||
<source>Ctrl+2</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="421"/>
|
||||
<source>Screen &3x</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="424"/>
|
||||
<source>Ctrl+3</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="432"/>
|
||||
<source>Screen &4x</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="435"/>
|
||||
<source>Ctrl+4</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="443"/>
|
||||
<source>&Fast Memory (dynarec, unstable)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="451"/>
|
||||
<source>&Ignore illegal reads/writes</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="456"/>
|
||||
<source>&Go to http://www.ppsspp.org/</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="461"/>
|
||||
<source>&About PPSSPP...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="466"/>
|
||||
<source>&Use VBO</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="474"/>
|
||||
<location filename="../mainwindow.ui" line="506"/>
|
||||
<location filename="../mainwindow.ui" line="538"/>
|
||||
<source>Debug</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="482"/>
|
||||
<location filename="../mainwindow.ui" line="514"/>
|
||||
<location filename="../mainwindow.ui" line="546"/>
|
||||
<source>Warning</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="490"/>
|
||||
<location filename="../mainwindow.ui" line="530"/>
|
||||
<location filename="../mainwindow.ui" line="562"/>
|
||||
<source>Error</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="498"/>
|
||||
<location filename="../mainwindow.ui" line="522"/>
|
||||
<location filename="../mainwindow.ui" line="554"/>
|
||||
<source>Info</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="567"/>
|
||||
<source>GamePad Controls</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="572"/>
|
||||
<source>&Run on load</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="577"/>
|
||||
<source>D&ump next frame to log</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="582"/>
|
||||
<source>&Vertex Cache</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="587"/>
|
||||
<source>Memory View Texture...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.cpp" line="843"/>
|
||||
<source>No translations</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>gamepadMapping</name>
|
||||
<message>
|
||||
<location filename="../gamepaddialog.cpp" line="19"/>
|
||||
<source>Cross</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gamepaddialog.cpp" line="20"/>
|
||||
<source>Circle</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gamepaddialog.cpp" line="21"/>
|
||||
<source>Square</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gamepaddialog.cpp" line="22"/>
|
||||
<source>Triangle</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gamepaddialog.cpp" line="23"/>
|
||||
<source>Left Trigger</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gamepaddialog.cpp" line="24"/>
|
||||
<source>Right Trigger</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gamepaddialog.cpp" line="25"/>
|
||||
<source>Start</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gamepaddialog.cpp" line="26"/>
|
||||
<source>Select</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gamepaddialog.cpp" line="27"/>
|
||||
<source>Up</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gamepaddialog.cpp" line="28"/>
|
||||
<source>Down</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gamepaddialog.cpp" line="29"/>
|
||||
<source>Left</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gamepaddialog.cpp" line="30"/>
|
||||
<source>Right</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gamepaddialog.cpp" line="32"/>
|
||||
<source>Home</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gamepaddialog.cpp" line="35"/>
|
||||
<source>Stick left</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gamepaddialog.cpp" line="36"/>
|
||||
<source>Stick right</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gamepaddialog.cpp" line="37"/>
|
||||
<source>Stick up</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../gamepaddialog.cpp" line="38"/>
|
||||
<source>Stick bottom</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|
|
@ -9,6 +9,115 @@
|
|||
<translation></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CtrlDisAsmView</name>
|
||||
<message>
|
||||
<location filename="../ctrldisasmview.cpp" line="106"/>
|
||||
<source>Copy &address</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ctrldisasmview.cpp" line="110"/>
|
||||
<source>Copy instruction (&hex)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ctrldisasmview.cpp" line="114"/>
|
||||
<source>Copy instruction (&disasm)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ctrldisasmview.cpp" line="120"/>
|
||||
<source>&Run to here</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ctrldisasmview.cpp" line="124"/>
|
||||
<source>&Set Next Statement</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ctrldisasmview.cpp" line="128"/>
|
||||
<source>&Toggle breakpoint</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ctrldisasmview.cpp" line="132"/>
|
||||
<source>&Follow branch</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ctrldisasmview.cpp" line="142"/>
|
||||
<source>Go to in &Memory View</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ctrldisasmview.cpp" line="152"/>
|
||||
<source>&Rename function...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ctrldisasmview.cpp" line="240"/>
|
||||
<source>New function name</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ctrldisasmview.cpp" line="241"/>
|
||||
<source>New function name :</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CtrlMemView</name>
|
||||
<message>
|
||||
<location filename="../ctrlmemview.cpp" line="215"/>
|
||||
<source>Go to in &disasm</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ctrlmemview.cpp" line="221"/>
|
||||
<source>&Copy value</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ctrlmemview.cpp" line="225"/>
|
||||
<source>Dump...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>CtrlRegisterList</name>
|
||||
<message>
|
||||
<location filename="../ctrlregisterlist.cpp" line="274"/>
|
||||
<source>Go to in &memory view</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ctrlregisterlist.cpp" line="278"/>
|
||||
<source>Go to in &disasm</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ctrlregisterlist.cpp" line="284"/>
|
||||
<source>&Copy value</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ctrlregisterlist.cpp" line="288"/>
|
||||
<source>C&hange...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ctrlregisterlist.cpp" line="352"/>
|
||||
<source>Set new value</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../ctrlregisterlist.cpp" line="353"/>
|
||||
<source>Set new value :</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Debugger_Disasm</name>
|
||||
<message>
|
||||
|
@ -17,65 +126,243 @@
|
|||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="25"/>
|
||||
<location filename="../debugger_disasm.ui" line="30"/>
|
||||
<source>Ctr:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="38"/>
|
||||
<location filename="../debugger_disasm.ui" line="43"/>
|
||||
<source>&Go to</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="73"/>
|
||||
<location filename="../debugger_disasm.ui" line="78"/>
|
||||
<source>&PC</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="86"/>
|
||||
<location filename="../debugger_disasm.ui" line="91"/>
|
||||
<source>&LR</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="118"/>
|
||||
<source>Tab 1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="128"/>
|
||||
<source>Tab 2</source>
|
||||
<source>Show VFPU</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="153"/>
|
||||
<location filename="../debugger_disasm.ui" line="147"/>
|
||||
<source>Regs</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="198"/>
|
||||
<source>Funcs</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="223"/>
|
||||
<source>&Go</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="166"/>
|
||||
<location filename="../debugger_disasm.ui" line="236"/>
|
||||
<source>Stop</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="179"/>
|
||||
<location filename="../debugger_disasm.ui" line="249"/>
|
||||
<source>Step &Into</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="192"/>
|
||||
<location filename="../debugger_disasm.ui" line="265"/>
|
||||
<source>Step &Over</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="205"/>
|
||||
<location filename="../debugger_disasm.ui" line="278"/>
|
||||
<source>S&kip</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="218"/>
|
||||
<location filename="../debugger_disasm.ui" line="291"/>
|
||||
<source>Next &HLE</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="320"/>
|
||||
<source>Breakpoints</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="339"/>
|
||||
<source>Address</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="362"/>
|
||||
<source>Clear All</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="372"/>
|
||||
<source>Callstack</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="382"/>
|
||||
<source>Display Lists</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="408"/>
|
||||
<location filename="../debugger_disasm.ui" line="519"/>
|
||||
<source>Id</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="413"/>
|
||||
<location filename="../debugger_disasm.ui" line="529"/>
|
||||
<source>Status</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="418"/>
|
||||
<source>Start Address</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="423"/>
|
||||
<source>Current Address</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="476"/>
|
||||
<source>Run</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="483"/>
|
||||
<source>Step</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="497"/>
|
||||
<source>Threads</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="524"/>
|
||||
<source>Name</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="534"/>
|
||||
<source>Current PC</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.ui" line="539"/>
|
||||
<source>Entry point</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.cpp" line="401"/>
|
||||
<source>Remove breakpoint</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.cpp" line="480"/>
|
||||
<source>Go to entry point</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.cpp" line="486"/>
|
||||
<source>Running</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.cpp" line="490"/>
|
||||
<source>Wait</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.cpp" line="494"/>
|
||||
<source>Suspend</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_disasm.cpp" line="626"/>
|
||||
<source>Show code</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Debugger_Memory</name>
|
||||
<message>
|
||||
<location filename="../debugger_memory.ui" line="14"/>
|
||||
<source>Dialog</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_memory.ui" line="22"/>
|
||||
<source>Goto:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_memory.ui" line="35"/>
|
||||
<source>Mode</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_memory.ui" line="41"/>
|
||||
<source>Normal</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_memory.ui" line="48"/>
|
||||
<source>Symbols</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Debugger_VFPU</name>
|
||||
<message>
|
||||
<location filename="../debugger_vfpu.ui" line="14"/>
|
||||
<source>Dialog</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_vfpu.ui" line="23"/>
|
||||
<source>Float</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_vfpu.ui" line="28"/>
|
||||
<source>HalfFloat</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_vfpu.ui" line="33"/>
|
||||
<source>Hex</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_vfpu.ui" line="38"/>
|
||||
<source>Bytes</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_vfpu.ui" line="43"/>
|
||||
<source>Shorts</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../debugger_vfpu.ui" line="48"/>
|
||||
<source>Ints</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>GamePadDialog</name>
|
||||
|
@ -205,340 +492,360 @@
|
|||
<translation>&Emulacja</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="79"/>
|
||||
<location filename="../mainwindow.ui" line="81"/>
|
||||
<source>Debu&g</source>
|
||||
<translation>&Debugger</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="91"/>
|
||||
<location filename="../mainwindow.ui" line="95"/>
|
||||
<source>&Options</source>
|
||||
<translation>&Opcje</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="95"/>
|
||||
<location filename="../mainwindow.ui" line="99"/>
|
||||
<source>&Log Levels</source>
|
||||
<translation>P&oziomy logowania</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="99"/>
|
||||
<location filename="../mainwindow.ui" line="103"/>
|
||||
<source>G3D</source>
|
||||
<translation>G3D</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="108"/>
|
||||
<location filename="../mainwindow.ui" line="112"/>
|
||||
<source>HLE</source>
|
||||
<translation>HLE</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="117"/>
|
||||
<location filename="../mainwindow.ui" line="121"/>
|
||||
<source>Default</source>
|
||||
<translation>Domyślne</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="131"/>
|
||||
<location filename="../mainwindow.ui" line="135"/>
|
||||
<source>Zoom</source>
|
||||
<translation>Zoom</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="140"/>
|
||||
<location filename="../mainwindow.ui" line="144"/>
|
||||
<source>Language</source>
|
||||
<translation>Język</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="167"/>
|
||||
<location filename="../mainwindow.ui" line="172"/>
|
||||
<source>&Help</source>
|
||||
<translation>Pomo&c</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="182"/>
|
||||
<location filename="../mainwindow.ui" line="187"/>
|
||||
<source>&Open...</source>
|
||||
<translation>&Otwórz...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="187"/>
|
||||
<location filename="../mainwindow.ui" line="192"/>
|
||||
<source>&Close</source>
|
||||
<translation>&Zamknij</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="192"/>
|
||||
<location filename="../mainwindow.ui" line="197"/>
|
||||
<source>-</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="197"/>
|
||||
<location filename="../mainwindow.ui" line="202"/>
|
||||
<source>Quickload state</source>
|
||||
<translation>Wczytaj stan</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="200"/>
|
||||
<location filename="../mainwindow.ui" line="205"/>
|
||||
<source>F4</source>
|
||||
<translation>F4</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="205"/>
|
||||
<location filename="../mainwindow.ui" line="210"/>
|
||||
<source>Quicksave state</source>
|
||||
<translation>Zapisz stan</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="208"/>
|
||||
<location filename="../mainwindow.ui" line="213"/>
|
||||
<source>F2</source>
|
||||
<translation>F2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="213"/>
|
||||
<location filename="../mainwindow.ui" line="218"/>
|
||||
<source>&Load State File...</source>
|
||||
<translation>&Wczytaj plik stanu...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="218"/>
|
||||
<location filename="../mainwindow.ui" line="223"/>
|
||||
<source>&Save State File...</source>
|
||||
<translation>&Zapisz plik stanu...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="223"/>
|
||||
<location filename="../mainwindow.ui" line="228"/>
|
||||
<source>E&xit</source>
|
||||
<translation>Wyj&dź</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="228"/>
|
||||
<location filename="../mainwindow.ui" line="233"/>
|
||||
<source>&Run</source>
|
||||
<translation>&Uruchom</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="231"/>
|
||||
<location filename="../mainwindow.ui" line="236"/>
|
||||
<source>F7</source>
|
||||
<translation>F7</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="236"/>
|
||||
<location filename="../mainwindow.ui" line="241"/>
|
||||
<source>&Pause</source>
|
||||
<translation>&Pauza</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="239"/>
|
||||
<location filename="../mainwindow.ui" line="244"/>
|
||||
<source>F8</source>
|
||||
<translation>F8</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="244"/>
|
||||
<location filename="../mainwindow.ui" line="249"/>
|
||||
<source>R&eset</source>
|
||||
<translation>&Reset</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="252"/>
|
||||
<location filename="../mainwindow.ui" line="257"/>
|
||||
<source>&Interpreter</source>
|
||||
<translation>&Interpreter</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="260"/>
|
||||
<location filename="../mainwindow.ui" line="265"/>
|
||||
<source>&Slightly Faster Interpreter</source>
|
||||
<translation>&Szybszy interpreter</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="268"/>
|
||||
<location filename="../mainwindow.ui" line="273"/>
|
||||
<source>&Dynarec</source>
|
||||
<translation>R&ekompilacja (Dynarec)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="276"/>
|
||||
<location filename="../mainwindow.ui" line="281"/>
|
||||
<source>Load &Map File...</source>
|
||||
<translation>&Wczytaj plik mapy...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="284"/>
|
||||
<location filename="../mainwindow.ui" line="289"/>
|
||||
<source>&Save Map File...</source>
|
||||
<translation>&Zapisz plik mapy...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="292"/>
|
||||
<location filename="../mainwindow.ui" line="297"/>
|
||||
<source>&Reset Symbol Table</source>
|
||||
<translation>Zresetuj &tablicę symboli</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="300"/>
|
||||
<location filename="../mainwindow.ui" line="302"/>
|
||||
<source>&Disassembly</source>
|
||||
<translation>&Dekompiluj</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="303"/>
|
||||
<location filename="../mainwindow.ui" line="305"/>
|
||||
<source>Ctrl+D</source>
|
||||
<translation>Ctrl+D</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="311"/>
|
||||
<location filename="../mainwindow.ui" line="313"/>
|
||||
<source>&Log Console</source>
|
||||
<translation>&Konsola logowania</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="314"/>
|
||||
<location filename="../mainwindow.ui" line="316"/>
|
||||
<source>Ctrl+L</source>
|
||||
<translation>Ctrl+L</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="322"/>
|
||||
<location filename="../mainwindow.ui" line="321"/>
|
||||
<source>Memory &View...</source>
|
||||
<translation>Widok &pamięci...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="325"/>
|
||||
<location filename="../mainwindow.ui" line="324"/>
|
||||
<source>Ctrl+M</source>
|
||||
<translation>Ctrl+M</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="330"/>
|
||||
<location filename="../mainwindow.ui" line="329"/>
|
||||
<source>Keyboard &Controls</source>
|
||||
<translation>Ustawienia &klawiatury</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="335"/>
|
||||
<location filename="../mainwindow.ui" line="334"/>
|
||||
<source>&Toggle Full Screen</source>
|
||||
<translation>&Pełny ekran</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="338"/>
|
||||
<location filename="../mainwindow.ui" line="337"/>
|
||||
<source>F12</source>
|
||||
<translation>F12</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="346"/>
|
||||
<location filename="../mainwindow.ui" line="345"/>
|
||||
<source>&Buffered Rendering</source>
|
||||
<translation>&Buffered rendering</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="349"/>
|
||||
<location filename="../mainwindow.ui" line="348"/>
|
||||
<source>F5</source>
|
||||
<translation>F5</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="357"/>
|
||||
<location filename="../mainwindow.ui" line="356"/>
|
||||
<source>&Hardware Transform</source>
|
||||
<translation>&Hardware Transform</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="360"/>
|
||||
<location filename="../mainwindow.ui" line="359"/>
|
||||
<source>F6</source>
|
||||
<translation>F6</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="368"/>
|
||||
<location filename="../mainwindow.ui" line="367"/>
|
||||
<source>&Linear Filtering</source>
|
||||
<translation>&Linear Filtering</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="376"/>
|
||||
<location filename="../mainwindow.ui" line="375"/>
|
||||
<source>&Wireframe (experimental)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="384"/>
|
||||
<location filename="../mainwindow.ui" line="383"/>
|
||||
<source>&Display Raw Framebuffer</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="392"/>
|
||||
<location filename="../mainwindow.ui" line="391"/>
|
||||
<source>&Show Debug Statistics</source>
|
||||
<translation>Pokaż &statystyki emulacji</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="400"/>
|
||||
<location filename="../mainwindow.ui" line="399"/>
|
||||
<source>Screen &1x</source>
|
||||
<translation>&1x</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="403"/>
|
||||
<location filename="../mainwindow.ui" line="402"/>
|
||||
<source>Ctrl+1</source>
|
||||
<translation>Ctrl+1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="411"/>
|
||||
<location filename="../mainwindow.ui" line="410"/>
|
||||
<source>Screen &2x</source>
|
||||
<translation>&2x</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="414"/>
|
||||
<location filename="../mainwindow.ui" line="413"/>
|
||||
<source>Ctrl+2</source>
|
||||
<translation>Ctrl+2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="422"/>
|
||||
<location filename="../mainwindow.ui" line="421"/>
|
||||
<source>Screen &3x</source>
|
||||
<translation>&3x</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="425"/>
|
||||
<location filename="../mainwindow.ui" line="424"/>
|
||||
<source>Ctrl+3</source>
|
||||
<translation>Ctrl+3</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="433"/>
|
||||
<location filename="../mainwindow.ui" line="432"/>
|
||||
<source>Screen &4x</source>
|
||||
<translation>&4x</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="436"/>
|
||||
<location filename="../mainwindow.ui" line="435"/>
|
||||
<source>Ctrl+4</source>
|
||||
<translation>Ctrl+4</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="444"/>
|
||||
<location filename="../mainwindow.ui" line="443"/>
|
||||
<source>&Fast Memory (dynarec, unstable)</source>
|
||||
<translation>&Fast memory (wymagany Dynarec, niestabilne)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="452"/>
|
||||
<location filename="../mainwindow.ui" line="451"/>
|
||||
<source>&Ignore illegal reads/writes</source>
|
||||
<translation>&Ignoruj nieprawidłowe odczyty/zapisy</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="457"/>
|
||||
<location filename="../mainwindow.ui" line="456"/>
|
||||
<source>&Go to http://www.ppsspp.org/</source>
|
||||
<translation>&Idź do http://www.ppsspp.org</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="462"/>
|
||||
<location filename="../mainwindow.ui" line="461"/>
|
||||
<source>&About PPSSPP...</source>
|
||||
<translation>&O PPSSPP...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="467"/>
|
||||
<location filename="../mainwindow.ui" line="466"/>
|
||||
<source>&Use VBO</source>
|
||||
<translation>Użyj &VBO</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="475"/>
|
||||
<location filename="../mainwindow.ui" line="507"/>
|
||||
<location filename="../mainwindow.ui" line="539"/>
|
||||
<location filename="../mainwindow.ui" line="474"/>
|
||||
<location filename="../mainwindow.ui" line="506"/>
|
||||
<location filename="../mainwindow.ui" line="538"/>
|
||||
<source>Debug</source>
|
||||
<translation>Debug</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="483"/>
|
||||
<location filename="../mainwindow.ui" line="515"/>
|
||||
<location filename="../mainwindow.ui" line="547"/>
|
||||
<location filename="../mainwindow.ui" line="482"/>
|
||||
<location filename="../mainwindow.ui" line="514"/>
|
||||
<location filename="../mainwindow.ui" line="546"/>
|
||||
<source>Warning</source>
|
||||
<translation>Ostrzeżenia</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="491"/>
|
||||
<location filename="../mainwindow.ui" line="531"/>
|
||||
<location filename="../mainwindow.ui" line="563"/>
|
||||
<location filename="../mainwindow.ui" line="490"/>
|
||||
<location filename="../mainwindow.ui" line="530"/>
|
||||
<location filename="../mainwindow.ui" line="562"/>
|
||||
<source>Error</source>
|
||||
<translation>Błędy</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="499"/>
|
||||
<location filename="../mainwindow.ui" line="523"/>
|
||||
<location filename="../mainwindow.ui" line="555"/>
|
||||
<location filename="../mainwindow.ui" line="498"/>
|
||||
<location filename="../mainwindow.ui" line="522"/>
|
||||
<location filename="../mainwindow.ui" line="554"/>
|
||||
<source>Info</source>
|
||||
<translation>Info</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="568"/>
|
||||
<location filename="../mainwindow.ui" line="567"/>
|
||||
<source>GamePad Controls</source>
|
||||
<translation>&Ustawienia pada</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.cpp" line="828"/>
|
||||
<location filename="../mainwindow.ui" line="572"/>
|
||||
<source>&Run on load</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="577"/>
|
||||
<source>D&ump next frame to log</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="582"/>
|
||||
<source>&Vertex Cache</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.ui" line="587"/>
|
||||
<source>Memory View Texture...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../mainwindow.cpp" line="843"/>
|
||||
<source>No translations</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
#include <QDesktopWidget>
|
||||
|
||||
#include "Core/MIPS/MIPSDebugInterface.h"
|
||||
#include "Core/Debugger/SymbolMap.h"
|
||||
#include "Core/SaveState.h"
|
||||
#include "Core/System.h"
|
||||
#include "Core/Config.h"
|
||||
|
@ -26,7 +27,8 @@ MainWindow::MainWindow(QWidget *parent) :
|
|||
QMainWindow(parent),
|
||||
ui(new Ui::MainWindow),
|
||||
nextState(CORE_POWERDOWN),
|
||||
dialogDisasm(0)
|
||||
dialogDisasm(0),
|
||||
memoryWindow(0)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
qApp->installEventFilter(this);
|
||||
|
@ -36,19 +38,18 @@ MainWindow::MainWindow(QWidget *parent) :
|
|||
gamePadDlg = new GamePadDialog(&input_state, this);
|
||||
#endif
|
||||
|
||||
SetPlaying(0);
|
||||
|
||||
host = new QtHost(this);
|
||||
w = ui->widget;
|
||||
w->init(&input_state);
|
||||
w->resize(pixel_xres, pixel_yres);
|
||||
w->setMinimumSize(pixel_xres, pixel_yres);
|
||||
w->setMaximumSize(pixel_xres, pixel_yres);
|
||||
QObject::connect( w, SIGNAL(doubleClick()), this, SLOT(on_action_OptionsFullScreen_triggered()) );
|
||||
|
||||
/*
|
||||
DialogManager::AddDlg(memoryWindow[0] = new CMemoryDlg(_hInstance, hwndMain, currentDebugMIPS));
|
||||
DialogManager::AddDlg(vfpudlg = new CVFPUDlg(_hInstance, hwndMain, currentDebugMIPS));
|
||||
*/
|
||||
// Update();
|
||||
createLanguageMenu();
|
||||
|
||||
UpdateMenus();
|
||||
|
||||
int zoom = g_Config.iWindowZoom;
|
||||
|
@ -173,15 +174,16 @@ void NativeInit(int argc, const char *argv[], const char *savegame_directory, co
|
|||
|
||||
void MainWindow::SetPlaying(QString text)
|
||||
{
|
||||
// TODO
|
||||
/*if (text == 0)
|
||||
SetWindowText(hwndMain,programname);
|
||||
if (text == 0)
|
||||
{
|
||||
QString title = "PPSSPP " + QString(PPSSPP_VERSION_STR);
|
||||
setWindowTitle(title);
|
||||
}
|
||||
else
|
||||
{
|
||||
char temp[256];
|
||||
sprintf(temp, "%s - %s", text, programname);
|
||||
SetWindowText(hwndMain,temp);
|
||||
}*/
|
||||
QString title = "PPSSPP " + QString(PPSSPP_VERSION_STR) + "-" + text;
|
||||
setWindowTitle(title);
|
||||
}
|
||||
}
|
||||
|
||||
void MainWindow::SetNextState(CoreState state)
|
||||
|
@ -205,20 +207,28 @@ void MainWindow::Boot()
|
|||
dialogDisasm = new Debugger_Disasm(currentDebugMIPS, this, this);
|
||||
if(g_Config.bShowDebuggerOnLoad)
|
||||
dialogDisasm->show();
|
||||
/*
|
||||
// TODO
|
||||
memoryWindow[0] = new CMemoryDlg(MainWindow::GetHInstance(), MainWindow::GetHWND(), currentDebugMIPS);
|
||||
DialogManager::AddDlg(memoryWindow[0]);
|
||||
if (disasmWindow[0])
|
||||
disasmWindow[0]->NotifyMapLoaded();
|
||||
if (memoryWindow[0])
|
||||
memoryWindow[0]->NotifyMapLoaded();*/
|
||||
|
||||
if(g_Config.bFullScreen != isFullScreen())
|
||||
on_action_OptionsFullScreen_triggered();
|
||||
|
||||
memoryWindow = new Debugger_Memory(currentDebugMIPS, this, this);
|
||||
|
||||
if (dialogDisasm)
|
||||
dialogDisasm->NotifyMapLoaded();
|
||||
if (memoryWindow)
|
||||
memoryWindow->NotifyMapLoaded();
|
||||
|
||||
if (nextState == CORE_RUNNING)
|
||||
on_action_EmulationRun_triggered();
|
||||
UpdateMenus();
|
||||
}
|
||||
|
||||
void MainWindow::CoreEmitWait(bool isWaiting)
|
||||
{
|
||||
// Unlock mutex while core is waiting;
|
||||
EmuThread_LockDraw(!isWaiting);
|
||||
}
|
||||
|
||||
void MainWindow::UpdateMenus()
|
||||
{
|
||||
ui->action_OptionsDisplayRawFramebuffer->setChecked(g_Config.bDisplayFramebuffer);
|
||||
|
@ -227,10 +237,14 @@ void MainWindow::UpdateMenus()
|
|||
ui->action_CPUFastInterpreter->setChecked(g_Config.iCpuCore == CPU_FASTINTERPRETER);
|
||||
ui->action_CPUDynarec->setChecked(g_Config.iCpuCore == CPU_JIT);
|
||||
ui->action_OptionsBufferedRendering->setChecked(g_Config.bBufferedRendering);
|
||||
ui->action_OptionsShowDebugStatistics->setChecked(g_Config.bShowDebugStats);
|
||||
ui->action_OptionsWireframe->setChecked(g_Config.bDrawWireframe);
|
||||
ui->action_OptionsHardwareTransform->setChecked(g_Config.bHardwareTransform);
|
||||
ui->action_OptionsFastMemory->setChecked(g_Config.bFastMemory);
|
||||
ui->action_OptionsLinearFiltering->setChecked(g_Config.bLinearFiltering);
|
||||
ui->action_EmulationRunLoad->setChecked(g_Config.bAutoRun);
|
||||
ui->action_OptionsUseVBO->setChecked(g_Config.bUseVBO);
|
||||
ui->action_OptionsVertexCache->setChecked(g_Config.bVertexCache);
|
||||
|
||||
bool enable = !Core_IsStepping() ? false : true;
|
||||
ui->action_EmulationRun->setEnabled(g_State.bEmuThreadStarted ? enable : false);
|
||||
|
@ -275,6 +289,8 @@ void MainWindow::SetZoom(float zoom) {
|
|||
|
||||
pixel_xres = 480 * zoom;
|
||||
pixel_yres = 272 * zoom;
|
||||
dp_xres = pixel_xres;
|
||||
dp_yres = pixel_yres;
|
||||
|
||||
w->resize(pixel_xres, pixel_yres);
|
||||
w->setMinimumSize(pixel_xres, pixel_yres);
|
||||
|
@ -299,7 +315,6 @@ void MainWindow::on_action_EmulationRun_triggered()
|
|||
{
|
||||
if (g_State.bEmuThreadStarted)
|
||||
{
|
||||
/*for (int i=0; i<numCPUs; i++)*/
|
||||
if(dialogDisasm)
|
||||
{
|
||||
dialogDisasm->Stop();
|
||||
|
@ -310,34 +325,29 @@ void MainWindow::on_action_EmulationRun_triggered()
|
|||
|
||||
void MainWindow::on_action_EmulationStop_triggered()
|
||||
{
|
||||
/*for (int i=0; i<numCPUs; i++)*/
|
||||
|
||||
if(dialogDisasm)
|
||||
{
|
||||
dialogDisasm->Stop();
|
||||
}
|
||||
usleep(100); // TODO : UGLY wait for event instead
|
||||
// This will wait for ppsspp to pause
|
||||
EmuThread_LockDraw(true);
|
||||
EmuThread_LockDraw(false);
|
||||
|
||||
/*for (int i=0; i<numCPUs; i++)
|
||||
if (disasmWindow[i])
|
||||
SendMessage(disasmWindow[i]->GetDlgHandle(), WM_CLOSE, 0, 0);
|
||||
for (int i=0; i<numCPUs; i++)
|
||||
if (memoryWindow[i])
|
||||
SendMessage(memoryWindow[i]->GetDlgHandle(), WM_CLOSE, 0, 0);*/
|
||||
if(dialogDisasm && dialogDisasm->isVisible())
|
||||
dialogDisasm->close();
|
||||
if(memoryWindow && memoryWindow->isVisible())
|
||||
memoryWindow->close();
|
||||
|
||||
EmuThread_StopGame();
|
||||
SetPlaying(0);
|
||||
//Update();
|
||||
Update();
|
||||
UpdateMenus();
|
||||
}
|
||||
|
||||
void MainWindow::on_action_EmulationPause_triggered()
|
||||
{
|
||||
/*for (int i=0; i<numCPUs; i++)*/
|
||||
if(dialogDisasm)
|
||||
{
|
||||
dialogDisasm->Stop();
|
||||
}
|
||||
}
|
||||
|
||||
void SaveStateActionFinished(bool result, void *userdata)
|
||||
|
@ -356,7 +366,6 @@ void SaveStateActionFinished(bool result, void *userdata)
|
|||
|
||||
if (g_State.bEmuThreadStarted && mainWindow->GetNextState() == CORE_RUNNING)
|
||||
{
|
||||
/*for (int i=0; i<numCPUs; i++)*/
|
||||
if(mainWindow->GetDialogDisasm())
|
||||
mainWindow->GetDialogDisasm()->Go();
|
||||
}
|
||||
|
@ -367,7 +376,6 @@ void MainWindow::on_action_FileLoadStateFile_triggered()
|
|||
if (g_State.bEmuThreadStarted)
|
||||
{
|
||||
nextState = Core_IsStepping() ? CORE_STEPPING : CORE_RUNNING;
|
||||
/*for (int i=0; i<numCPUs; i++)*/
|
||||
if(dialogDisasm)
|
||||
{
|
||||
dialogDisasm->Stop();
|
||||
|
@ -393,7 +401,6 @@ void MainWindow::on_action_FileSaveStateFile_triggered()
|
|||
if (g_State.bEmuThreadStarted)
|
||||
{
|
||||
nextState = Core_IsStepping() ? CORE_STEPPING : CORE_RUNNING;
|
||||
/*for (int i=0; i<numCPUs; i++)*/
|
||||
if(dialogDisasm)
|
||||
{
|
||||
dialogDisasm->Stop();
|
||||
|
@ -418,7 +425,6 @@ void MainWindow::on_action_FileQuickloadState_triggered()
|
|||
if (g_State.bEmuThreadStarted)
|
||||
{
|
||||
nextState = Core_IsStepping() ? CORE_STEPPING : CORE_RUNNING;
|
||||
/*for (int i=0; i<numCPUs; i++)*/
|
||||
if(dialogDisasm)
|
||||
{
|
||||
dialogDisasm->Stop();
|
||||
|
@ -432,7 +438,6 @@ void MainWindow::on_action_FileQuickSaveState_triggered()
|
|||
if (g_State.bEmuThreadStarted)
|
||||
{
|
||||
nextState = Core_IsStepping() ? CORE_STEPPING : CORE_RUNNING;
|
||||
/*for (int i=0; i<numCPUs; i++)*/
|
||||
if(dialogDisasm)
|
||||
{
|
||||
dialogDisasm->Stop();
|
||||
|
@ -510,37 +515,47 @@ void MainWindow::on_action_CPUFastInterpreter_triggered()
|
|||
|
||||
void MainWindow::on_action_DebugLoadMapFile_triggered()
|
||||
{
|
||||
// TODO
|
||||
/*if (W32Util::BrowseForFileName(true, hWnd, "Load .MAP",0,"Maps\0*.map\0All files\0*.*\0\0","map",fn))
|
||||
QFileDialog dialog(0,"Load .MAP");
|
||||
dialog.setFileMode(QFileDialog::ExistingFile);
|
||||
QStringList filters;
|
||||
filters << "Maps (*.map)" << "|All files (*.*)";
|
||||
dialog.setNameFilters(filters);
|
||||
dialog.setAcceptMode(QFileDialog::AcceptOpen);
|
||||
QStringList fileNames;
|
||||
if (dialog.exec())
|
||||
{
|
||||
symbolMap.LoadSymbolMap(fn.c_str());
|
||||
// HLE_PatchFunctions();
|
||||
for (int i=0; i<numCPUs; i++)
|
||||
if (disasmWindow[i])
|
||||
disasmWindow[i]->NotifyMapLoaded();
|
||||
for (int i=0; i<numCPUs; i++)
|
||||
if (memoryWindow[i])
|
||||
memoryWindow[i]->NotifyMapLoaded();
|
||||
}*/
|
||||
fileNames = dialog.selectedFiles();
|
||||
symbolMap.LoadSymbolMap(fileNames[0].toStdString().c_str());
|
||||
if (dialogDisasm)
|
||||
dialogDisasm->NotifyMapLoaded();
|
||||
if (memoryWindow)
|
||||
memoryWindow->NotifyMapLoaded();
|
||||
}
|
||||
}
|
||||
|
||||
void MainWindow::on_action_DebugSaveMapFile_triggered()
|
||||
{
|
||||
// TODO
|
||||
/*if (W32Util::BrowseForFileName(false, hWnd, "Save .MAP",0,"Maps\0*.map\0All files\0*.*\0\0","map",fn))
|
||||
symbolMap.SaveSymbolMap(fn.c_str());*/
|
||||
QFileDialog dialog(0,"Save .MAP");
|
||||
dialog.setFileMode(QFileDialog::AnyFile);
|
||||
dialog.setAcceptMode(QFileDialog::AcceptSave);
|
||||
QStringList filters;
|
||||
filters << "Save .MAP (*.map)" << "|All files (*.*)";
|
||||
dialog.setNameFilters(filters);
|
||||
QStringList fileNames;
|
||||
if (dialog.exec())
|
||||
{
|
||||
fileNames = dialog.selectedFiles();
|
||||
symbolMap.SaveSymbolMap(fileNames[0].toStdString().c_str());
|
||||
}
|
||||
}
|
||||
|
||||
void MainWindow::on_action_DebugResetSymbolTable_triggered()
|
||||
{
|
||||
// TODO
|
||||
/*symbolMap.ResetSymbolMap();
|
||||
for (int i=0; i<numCPUs; i++)
|
||||
if (disasmWindow[i])
|
||||
disasmWindow[i]->NotifyMapLoaded();
|
||||
for (int i=0; i<numCPUs; i++)
|
||||
if (memoryWindow[i])
|
||||
memoryWindow[i]->NotifyMapLoaded();*/
|
||||
symbolMap.ResetSymbolMap();
|
||||
if (dialogDisasm)
|
||||
dialogDisasm->NotifyMapLoaded();
|
||||
if (memoryWindow)
|
||||
memoryWindow->NotifyMapLoaded();
|
||||
}
|
||||
|
||||
void MainWindow::on_action_DebugDisassembly_triggered()
|
||||
|
@ -551,9 +566,8 @@ void MainWindow::on_action_DebugDisassembly_triggered()
|
|||
|
||||
void MainWindow::on_action_DebugMemoryView_triggered()
|
||||
{
|
||||
// TODO
|
||||
/*if (memoryWindow[0])
|
||||
memoryWindow[0]->Show(true);*/
|
||||
if (memoryWindow)
|
||||
memoryWindow->show();
|
||||
}
|
||||
|
||||
void MainWindow::on_action_DebugLog_triggered()
|
||||
|
@ -570,12 +584,14 @@ void MainWindow::on_action_OptionsIgnoreIllegalReadsWrites_triggered()
|
|||
void MainWindow::on_action_OptionsFullScreen_triggered()
|
||||
{
|
||||
if(isFullScreen()) {
|
||||
g_Config.bFullScreen = false;
|
||||
showNormal();
|
||||
ui->menubar->setVisible(true);
|
||||
ui->statusbar->setVisible(true);
|
||||
SetZoom(g_Config.iWindowZoom);
|
||||
}
|
||||
else {
|
||||
g_Config.bFullScreen = true;
|
||||
ui->menubar->setVisible(false);
|
||||
ui->statusbar->setVisible(false);
|
||||
|
||||
|
@ -597,6 +613,8 @@ void MainWindow::on_action_OptionsFullScreen_triggered()
|
|||
PSP_CoreParameter().outputHeight = height;
|
||||
pixel_xres = width;
|
||||
pixel_yres = height;
|
||||
dp_xres = pixel_xres;
|
||||
dp_yres = pixel_yres;
|
||||
if (gpu)
|
||||
gpu->Resized();
|
||||
}
|
||||
|
@ -638,10 +656,7 @@ void MainWindow::on_action_HelpOpenWebsite_triggered()
|
|||
|
||||
void MainWindow::on_action_HelpAbout_triggered()
|
||||
{
|
||||
// TODO
|
||||
/*DialogManager::EnableAll(FALSE);
|
||||
DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);
|
||||
DialogManager::EnableAll(TRUE);*/
|
||||
// TODO display about
|
||||
}
|
||||
|
||||
void MainWindow::closeEvent(QCloseEvent *event)
|
||||
|
@ -879,3 +894,55 @@ void MainWindow::changeEvent(QEvent *event)
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
void MainWindow::ShowMemory(u32 addr)
|
||||
{
|
||||
if(memoryWindow)
|
||||
memoryWindow->Goto(addr);
|
||||
}
|
||||
|
||||
void MainWindow::Update()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void MainWindow::on_action_EmulationReset_triggered()
|
||||
{
|
||||
if(dialogDisasm)
|
||||
dialogDisasm->Stop();
|
||||
|
||||
EmuThread_LockDraw(true);
|
||||
EmuThread_LockDraw(false);
|
||||
|
||||
if(dialogDisasm)
|
||||
dialogDisasm->close();
|
||||
if(memoryWindow)
|
||||
memoryWindow->close();
|
||||
|
||||
EmuThread_StopGame();
|
||||
|
||||
EmuThread_StartGame(GetCurrentFilename());
|
||||
}
|
||||
|
||||
void MainWindow::on_action_DebugDumpFrame_triggered()
|
||||
{
|
||||
gpu->DumpNextFrame();
|
||||
}
|
||||
|
||||
void MainWindow::on_action_EmulationRunLoad_triggered()
|
||||
{
|
||||
g_Config.bAutoRun = !g_Config.bAutoRun;
|
||||
UpdateMenus();
|
||||
}
|
||||
|
||||
void MainWindow::on_action_OptionsVertexCache_triggered()
|
||||
{
|
||||
g_Config.bVertexCache = !g_Config.bVertexCache;
|
||||
UpdateMenus();
|
||||
}
|
||||
|
||||
void MainWindow::on_action_OptionsUseVBO_triggered()
|
||||
{
|
||||
g_Config.bUseVBO = !g_Config.bUseVBO;
|
||||
UpdateMenus();
|
||||
}
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
#include "Core/Core.h"
|
||||
#include "input/input_state.h"
|
||||
#include "debugger_disasm.h"
|
||||
#include "debugger_memory.h"
|
||||
#include "controls.h"
|
||||
#include "gamepaddialog.h"
|
||||
|
||||
|
@ -31,13 +32,17 @@ public:
|
|||
void SetPlaying(QString text);
|
||||
|
||||
Debugger_Disasm* GetDialogDisasm() { return dialogDisasm; }
|
||||
Debugger_Memory* GetDialogMemory() { return memoryWindow; }
|
||||
CoreState GetNextState() { return nextState; }
|
||||
void closeEvent(QCloseEvent *event);
|
||||
void keyPressEvent(QKeyEvent *);
|
||||
void keyReleaseEvent(QKeyEvent *e);
|
||||
void ShowMemory(u32 addr);
|
||||
void Update();
|
||||
public slots:
|
||||
|
||||
void Boot();
|
||||
void CoreEmitWait(bool);
|
||||
|
||||
private slots:
|
||||
void on_action_FileLoad_triggered();
|
||||
|
@ -138,6 +143,16 @@ private slots:
|
|||
|
||||
void on_language_changed(QAction *action);
|
||||
|
||||
void on_action_EmulationReset_triggered();
|
||||
|
||||
void on_action_DebugDumpFrame_triggered();
|
||||
|
||||
void on_action_EmulationRunLoad_triggered();
|
||||
|
||||
void on_action_OptionsVertexCache_triggered();
|
||||
|
||||
void on_action_OptionsUseVBO_triggered();
|
||||
|
||||
private:
|
||||
void loadLanguage(const QString &language);
|
||||
void createLanguageMenu();
|
||||
|
@ -156,6 +171,7 @@ private:
|
|||
InputState input_state;
|
||||
|
||||
Debugger_Disasm *dialogDisasm;
|
||||
Debugger_Memory *memoryWindow;
|
||||
Controls* controls;
|
||||
GamePadDialog* gamePadDlg;
|
||||
};
|
||||
|
|
|
@ -70,6 +70,8 @@
|
|||
<addaction name="separator"/>
|
||||
<addaction name="action_EmulationReset"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="action_EmulationRunLoad"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="action_CPUInterpreter"/>
|
||||
<addaction name="action_CPUFastInterpreter"/>
|
||||
<addaction name="action_CPUDynarec"/>
|
||||
|
@ -82,6 +84,8 @@
|
|||
<addaction name="action_DebugSaveMapFile"/>
|
||||
<addaction name="action_DebugResetSymbolTable"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="action_DebugDumpFrame"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="action_DebugDisassembly"/>
|
||||
<addaction name="action_DebugLog"/>
|
||||
<addaction name="action_DebugMemoryView"/>
|
||||
|
@ -148,6 +152,7 @@
|
|||
<addaction name="action_OptionsHardwareTransform"/>
|
||||
<addaction name="action_OptionsLinearFiltering"/>
|
||||
<addaction name="action_OptionsUseVBO"/>
|
||||
<addaction name="action_OptionsVertexCache"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="action_OptionsWireframe"/>
|
||||
<addaction name="action_OptionsDisplayRawFramebuffer"/>
|
||||
|
@ -293,9 +298,6 @@
|
|||
</property>
|
||||
</action>
|
||||
<action name="action_DebugDisassembly">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>&Disassembly</string>
|
||||
</property>
|
||||
|
@ -315,9 +317,6 @@
|
|||
</property>
|
||||
</action>
|
||||
<action name="action_DebugMemoryView">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Memory &View...</string>
|
||||
</property>
|
||||
|
@ -568,6 +567,26 @@
|
|||
<string>GamePad Controls</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_EmulationRunLoad">
|
||||
<property name="text">
|
||||
<string>&Run on load</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_DebugDumpFrame">
|
||||
<property name="text">
|
||||
<string>D&ump next frame to log</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_OptionsVertexCache">
|
||||
<property name="text">
|
||||
<string>&Vertex Cache</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_DebugMemoryViewTexture">
|
||||
<property name="text">
|
||||
<string>Memory View Texture...</string>
|
||||
</property>
|
||||
</action>
|
||||
</widget>
|
||||
<customwidgets>
|
||||
<customwidget>
|
||||
|
|
|
@ -50,14 +50,7 @@ void QtEmuGL::stop_game()
|
|||
|
||||
void QtEmuGL::LockDraw(bool value)
|
||||
{
|
||||
if(value)
|
||||
{
|
||||
thread.gameMutex.lock();
|
||||
}
|
||||
else
|
||||
{
|
||||
thread.gameMutex.unlock();
|
||||
}
|
||||
thread.LockGL(value);
|
||||
}
|
||||
|
||||
void QtEmuGL::resizeEvent(QResizeEvent *evt)
|
||||
|
@ -75,3 +68,8 @@ void QtEmuGL::closeEvent(QCloseEvent *evt)
|
|||
//TODO stopRendering();
|
||||
QGLWidget::closeEvent(evt);
|
||||
}
|
||||
|
||||
void QtEmuGL::mouseDoubleClickEvent(QMouseEvent *)
|
||||
{
|
||||
emit doubleClick();
|
||||
}
|
||||
|
|
|
@ -19,6 +19,8 @@ public:
|
|||
void start_game(QString filename);
|
||||
void stop_game();
|
||||
void LockDraw(bool value);
|
||||
signals:
|
||||
void doubleClick();
|
||||
protected:
|
||||
void initializeGL();
|
||||
|
||||
|
@ -26,6 +28,7 @@ protected:
|
|||
void resizeEvent(QResizeEvent *evt);
|
||||
void paintEvent(QPaintEvent *);
|
||||
void closeEvent(QCloseEvent *evt);
|
||||
void mouseDoubleClickEvent(QMouseEvent *);
|
||||
signals:
|
||||
|
||||
public slots:
|
||||
|
|
|
@ -14,5 +14,7 @@
|
|||
<file>resources/psp_adown.png</file>
|
||||
<file>resources/psp_aleft.png</file>
|
||||
<file>resources/psp_aup.png</file>
|
||||
<file alias="breakpointDisable">resources/stop1.ico</file>
|
||||
<file alias="breakpoint">resources/icon1.ico</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
|
|
BIN
Qt/resources/icon1.ico
Normal file
BIN
Qt/resources/icon1.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 766 B |
BIN
Qt/resources/stop1.ico
Normal file
BIN
Qt/resources/stop1.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 766 B |
Loading…
Add table
Add a link
Reference in a new issue