mirror of
https://github.com/wheremyfoodat/Panda3DS.git
synced 2025-07-09 00:28:42 +12:00
Qt: Initial CPU debugger widget implementation
Co-Authored-By: liuk707 <62625900+liuk7071@users.noreply.github.com>
This commit is contained in:
parent
8e20bd6220
commit
9dc52577ea
8 changed files with 311 additions and 6 deletions
|
@ -23,7 +23,7 @@ namespace Common {
|
|||
// pc: program counter of the instruction to disassemble
|
||||
// bytes: Byte representation of instruction
|
||||
// buffer: text buffer to output the disassembly too
|
||||
usize disassemble(std::string& buffer, u32 pc, std::span<u8> bytes, u64 offset = 0) {
|
||||
usize disassemble(std::string& buffer, u32 pc, std::span<const u8> bytes, u64 offset = 0) {
|
||||
if (!initialized) {
|
||||
buffer = "Capstone was not properly initialized";
|
||||
return 0;
|
||||
|
|
|
@ -122,14 +122,16 @@ class Emulator {
|
|||
// Reloads some settings that require special handling, such as audio enable
|
||||
void reloadSettings();
|
||||
|
||||
CPU& getCPU() { return cpu; }
|
||||
Memory& getMemory() { return memory; }
|
||||
Kernel& getKernel() { return kernel; }
|
||||
Scheduler& getScheduler() { return scheduler; }
|
||||
|
||||
EmulatorConfig& getConfig() { return config; }
|
||||
Cheats& getCheats() { return cheats; }
|
||||
ServiceManager& getServiceManager() { return kernel.getServiceManager(); }
|
||||
LuaManager& getLua() { return lua; }
|
||||
Scheduler& getScheduler() { return scheduler; }
|
||||
Memory& getMemory() { return memory; }
|
||||
AudioDeviceInterface& getAudioDevice() { return audioDevice; }
|
||||
Kernel& getKernel() { return kernel; }
|
||||
|
||||
RendererType getRendererType() const { return config.rendererType; }
|
||||
Renderer* getRenderer() { return gpu.getRenderer(); }
|
||||
|
|
38
include/panda_qt/cpu_debugger.hpp
Normal file
38
include/panda_qt/cpu_debugger.hpp
Normal file
|
@ -0,0 +1,38 @@
|
|||
#pragma once
|
||||
#include <QListWidget>
|
||||
#include <QPlainTextEdit>
|
||||
#include <QScrollBar>
|
||||
#include <QWidget>
|
||||
|
||||
#include "emulator.hpp"
|
||||
#include "panda_qt/disabled_widget_overlay.hpp"
|
||||
|
||||
class CPUDebugger : public QWidget {
|
||||
Q_OBJECT
|
||||
Emulator* emu;
|
||||
|
||||
QListWidget* disasmListWidget;
|
||||
QScrollBar* verticalScrollBar;
|
||||
QPlainTextEdit* registerTextEdit;
|
||||
|
||||
DisabledWidgetOverlay* disabledOverlay;
|
||||
|
||||
bool enabled = false;
|
||||
|
||||
public:
|
||||
CPUDebugger(Emulator* emulator, QWidget* parent = nullptr);
|
||||
void enable();
|
||||
void disable();
|
||||
|
||||
private:
|
||||
// Update the state of the disassembler. Qt events should always call update, not updateDisasm/updateRegister
|
||||
// As update properly handles thread safety
|
||||
void update();
|
||||
void updateDisasm();
|
||||
void updateRegisters();
|
||||
|
||||
bool eventFilter(QObject* obj, QEvent* event) override;
|
||||
void showEvent(QShowEvent* event) override;
|
||||
void resizeEvent(QResizeEvent* event) override;
|
||||
void keyPressEvent(QKeyEvent* event);
|
||||
};
|
28
include/panda_qt/disabled_widget_overlay.hpp
Normal file
28
include/panda_qt/disabled_widget_overlay.hpp
Normal file
|
@ -0,0 +1,28 @@
|
|||
#pragma once
|
||||
|
||||
#include <QtWidgets>
|
||||
|
||||
class DisabledWidgetOverlay : public QWidget {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
DisabledWidgetOverlay(QWidget *parent = nullptr, QString overlayText = tr("This widget is disabled")) : text(overlayText), QWidget(parent) {
|
||||
setVisible(false);
|
||||
}
|
||||
|
||||
private:
|
||||
QString text;
|
||||
|
||||
void paintEvent(QPaintEvent *) override {
|
||||
QPainter painter = QPainter(this);
|
||||
painter.fillRect(rect(), QColor(60, 60, 60, 128));
|
||||
painter.setPen(Qt::gray);
|
||||
|
||||
QFont font = painter.font();
|
||||
font.setBold(true);
|
||||
font.setPointSize(18);
|
||||
|
||||
painter.setFont(font);
|
||||
painter.drawText(rect(), Qt::AlignCenter, text);
|
||||
}
|
||||
};
|
|
@ -17,6 +17,7 @@
|
|||
#include "panda_qt/about_window.hpp"
|
||||
#include "panda_qt/cheats_window.hpp"
|
||||
#include "panda_qt/config_window.hpp"
|
||||
#include "panda_qt/cpu_debugger.hpp"
|
||||
#include "panda_qt/patch_window.hpp"
|
||||
#include "panda_qt/screen.hpp"
|
||||
#include "panda_qt/shader_editor.hpp"
|
||||
|
@ -110,6 +111,7 @@ class MainWindow : public QMainWindow {
|
|||
TextEditorWindow* luaEditor;
|
||||
PatchWindow* patchWindow;
|
||||
ShaderEditorWindow* shaderEditor;
|
||||
CPUDebugger* cpuDebugger;
|
||||
ThreadDebugger* threadDebugger;
|
||||
|
||||
// We use SDL's game controller API since it's the sanest API that supports as many controllers as possible
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue