mirror of
https://github.com/zoriya/ComSquare.git
synced 2026-05-27 16:21:53 +00:00
Fixing a segfault with the bus & cpu's debugger together
This commit is contained in:
@@ -6,9 +6,7 @@
|
||||
|
||||
#include <utility>
|
||||
#include <iostream>
|
||||
#include "../Exceptions/NotImplementedException.hpp"
|
||||
#include "../Exceptions/InvalidAddress.hpp"
|
||||
#include "../Exceptions/InvalidOpcode.hpp"
|
||||
|
||||
namespace ComSquare::CPU
|
||||
{
|
||||
|
||||
+1
-1
@@ -713,7 +713,7 @@ namespace ComSquare::CPU
|
||||
virtual bool isDebugger();
|
||||
|
||||
//! @brief Change the memory bus used by the CPU.
|
||||
void setMemoryBus(std::shared_ptr<Memory::MemoryBus> bus);
|
||||
virtual void setMemoryBus(std::shared_ptr<Memory::MemoryBus> bus);
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -5,11 +5,9 @@
|
||||
#include "CPUDebug.hpp"
|
||||
#include "../../Utility/Utility.hpp"
|
||||
#include "../../Exceptions/InvalidOpcode.hpp"
|
||||
#include "../../CPU/CPU.hpp"
|
||||
#include <QtEvents>
|
||||
#include <QPainter>
|
||||
#include <iostream>
|
||||
#include <utility>
|
||||
|
||||
using namespace ComSquare::CPU;
|
||||
|
||||
@@ -21,7 +19,7 @@ namespace ComSquare::Debugger
|
||||
_ui(),
|
||||
_model(*this),
|
||||
_painter(*this),
|
||||
_stackModel(*this->_bus, *this),
|
||||
_stackModel(this->_bus, *this),
|
||||
_snes(snes)
|
||||
{
|
||||
this->_window->setContextMenuPolicy(Qt::NoContextMenu);
|
||||
@@ -70,6 +68,12 @@ namespace ComSquare::Debugger
|
||||
this->_snes.disableCPUDebugging();
|
||||
}
|
||||
|
||||
void CPUDebug::setMemoryBus(std::shared_ptr<Memory::MemoryBus> bus)
|
||||
{
|
||||
this->_stackModel.setMemoryBus(bus);
|
||||
CPU::setMemoryBus(bus);
|
||||
}
|
||||
|
||||
unsigned CPUDebug::update()
|
||||
{
|
||||
try {
|
||||
@@ -379,7 +383,12 @@ QSize RowPainter::sizeHint(const QStyleOptionViewItem &, const QModelIndex &) co
|
||||
return QSize();
|
||||
}
|
||||
|
||||
StackModel::StackModel(ComSquare::Memory::MemoryBus &bus, ComSquare::Debugger::CPUDebug &cpu) : _bus(bus), _cpu(cpu) { }
|
||||
StackModel::StackModel(std::shared_ptr<ComSquare::Memory::MemoryBus> bus, ComSquare::Debugger::CPUDebug &cpu) : _bus(bus), _cpu(cpu) { }
|
||||
|
||||
void StackModel::setMemoryBus(std::shared_ptr<ComSquare::Memory::MemoryBus> bus)
|
||||
{
|
||||
this->_bus = std::move(bus);
|
||||
}
|
||||
|
||||
int StackModel::rowCount(const QModelIndex &) const
|
||||
{
|
||||
@@ -405,7 +414,7 @@ QVariant StackModel::data(const QModelIndex &index, int role) const
|
||||
return QVariant();
|
||||
uint16_t addr = index.row() * 2 + index.column();
|
||||
try {
|
||||
uint8_t value = this->_bus.read(addr);
|
||||
uint8_t value = this->_bus->read(addr);
|
||||
return (ComSquare::Utility::to_hex(value, ComSquare::Utility::NoPrefix).c_str());
|
||||
} catch (std::exception &) {
|
||||
return "??";
|
||||
|
||||
@@ -34,10 +34,10 @@ class StackModel : public QAbstractTableModel
|
||||
{
|
||||
Q_OBJECT
|
||||
private:
|
||||
ComSquare::Memory::MemoryBus &_bus;
|
||||
std::shared_ptr<ComSquare::Memory::MemoryBus> _bus;
|
||||
ComSquare::Debugger::CPUDebug &_cpu;
|
||||
public:
|
||||
explicit StackModel(ComSquare::Memory::MemoryBus &bus, ComSquare::Debugger::CPUDebug &cpu);
|
||||
explicit StackModel(std::shared_ptr<ComSquare::Memory::MemoryBus> bus, ComSquare::Debugger::CPUDebug &cpu);
|
||||
StackModel(const StackModel &) = delete;
|
||||
const StackModel &operator=(const StackModel &) = delete;
|
||||
~StackModel() override = default;
|
||||
@@ -50,6 +50,9 @@ public:
|
||||
QVariant data(const QModelIndex &index, int role) const override;
|
||||
//! @brief Override the headers to use hex values.
|
||||
QVariant headerData(int section, Qt::Orientation orientation, int role) const override;
|
||||
|
||||
//! @brief Change the memory bus used by the view.
|
||||
void setMemoryBus(std::shared_ptr<ComSquare::Memory::MemoryBus> bus);
|
||||
};
|
||||
|
||||
//! @brief The qt model that show the history.
|
||||
@@ -285,6 +288,9 @@ namespace ComSquare::Debugger
|
||||
|
||||
//! @brief Override the basic cpu's update to allow pausing of the CPU only.
|
||||
unsigned update() override;
|
||||
|
||||
//! @brief Change the memory bus used by the CPU.
|
||||
void setMemoryBus(std::shared_ptr<Memory::MemoryBus> bus) override;
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
/********************************************************************************
|
||||
** Form generated from reading UI file 'cpu.ui'
|
||||
**
|
||||
** Created by: Qt User Interface Compiler version 5.14.1
|
||||
** Created by: Qt User Interface Compiler version 5.14.2
|
||||
**
|
||||
** WARNING! All changes made in this file will be lost when recompiling UI file!
|
||||
********************************************************************************/
|
||||
|
||||
Reference in New Issue
Block a user