mirror of
https://github.com/zoriya/ComSquare.git
synced 2026-06-07 11:45:07 +00:00
Merge branch 'Debugger' of github.com:AnonymusRaccoon/ComSquare into CPU
This commit is contained in:
+1
-1
@@ -370,7 +370,7 @@ namespace ComSquare::APU
|
|||||||
explicit APU(std::shared_ptr<MemoryMap> &map);
|
explicit APU(std::shared_ptr<MemoryMap> &map);
|
||||||
APU(const APU &) = default;
|
APU(const APU &) = default;
|
||||||
APU &operator=(const APU &) = default;
|
APU &operator=(const APU &) = default;
|
||||||
~APU() = default;
|
~APU() override = default;
|
||||||
|
|
||||||
//! @brief Read from the internal APU register.
|
//! @brief Read from the internal APU register.
|
||||||
//! @param addr The address to read from. The address 0x00 should refer to the first byte of the register.
|
//! @param addr The address to read from. The address 0x00 should refer to the first byte of the register.
|
||||||
|
|||||||
@@ -7,7 +7,6 @@
|
|||||||
#include <utility>
|
#include <utility>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include "../Exceptions/InvalidAddress.hpp"
|
#include "../Exceptions/InvalidAddress.hpp"
|
||||||
#include "../Exceptions/InvalidOpcode.hpp"
|
|
||||||
|
|
||||||
namespace ComSquare::CPU
|
namespace ComSquare::CPU
|
||||||
{
|
{
|
||||||
|
|||||||
+2
-1
@@ -732,6 +732,7 @@ namespace ComSquare::CPU
|
|||||||
CPU(const CPU &) = default;
|
CPU(const CPU &) = default;
|
||||||
CPU &operator=(const CPU &) = delete;
|
CPU &operator=(const CPU &) = delete;
|
||||||
~CPU() override = default;
|
~CPU() override = default;
|
||||||
|
|
||||||
//! @brief This function continue to execute the Cartridge code.
|
//! @brief This function continue to execute the Cartridge code.
|
||||||
//! @return The number of CPU cycles that elapsed
|
//! @return The number of CPU cycles that elapsed
|
||||||
virtual unsigned update();
|
virtual unsigned update();
|
||||||
@@ -766,7 +767,7 @@ namespace ComSquare::CPU
|
|||||||
virtual bool isDebugger();
|
virtual bool isDebugger();
|
||||||
|
|
||||||
//! @brief Change the memory bus used by the CPU.
|
//! @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 "CPUDebug.hpp"
|
||||||
#include "../../Utility/Utility.hpp"
|
#include "../../Utility/Utility.hpp"
|
||||||
#include "../../Exceptions/InvalidOpcode.hpp"
|
#include "../../Exceptions/InvalidOpcode.hpp"
|
||||||
#include "../../CPU/CPU.hpp"
|
|
||||||
#include <QtEvents>
|
#include <QtEvents>
|
||||||
#include <QPainter>
|
#include <QPainter>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <utility>
|
|
||||||
|
|
||||||
using namespace ComSquare::CPU;
|
using namespace ComSquare::CPU;
|
||||||
|
|
||||||
@@ -21,7 +19,7 @@ namespace ComSquare::Debugger
|
|||||||
_ui(),
|
_ui(),
|
||||||
_model(*this),
|
_model(*this),
|
||||||
_painter(*this),
|
_painter(*this),
|
||||||
_stackModel(*this->_bus, *this),
|
_stackModel(this->_bus, *this),
|
||||||
_snes(snes)
|
_snes(snes)
|
||||||
{
|
{
|
||||||
this->_window->setContextMenuPolicy(Qt::NoContextMenu);
|
this->_window->setContextMenuPolicy(Qt::NoContextMenu);
|
||||||
@@ -70,6 +68,12 @@ namespace ComSquare::Debugger
|
|||||||
this->_snes.disableCPUDebugging();
|
this->_snes.disableCPUDebugging();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CPUDebug::setMemoryBus(std::shared_ptr<Memory::MemoryBus> bus)
|
||||||
|
{
|
||||||
|
this->_stackModel.setMemoryBus(bus);
|
||||||
|
CPU::setMemoryBus(bus);
|
||||||
|
}
|
||||||
|
|
||||||
unsigned CPUDebug::update()
|
unsigned CPUDebug::update()
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
@@ -379,7 +383,12 @@ QSize RowPainter::sizeHint(const QStyleOptionViewItem &, const QModelIndex &) co
|
|||||||
return QSize();
|
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
|
int StackModel::rowCount(const QModelIndex &) const
|
||||||
{
|
{
|
||||||
@@ -405,7 +414,7 @@ QVariant StackModel::data(const QModelIndex &index, int role) const
|
|||||||
return QVariant();
|
return QVariant();
|
||||||
uint16_t addr = index.row() * 2 + index.column();
|
uint16_t addr = index.row() * 2 + index.column();
|
||||||
try {
|
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());
|
return (ComSquare::Utility::to_hex(value, ComSquare::Utility::NoPrefix).c_str());
|
||||||
} catch (std::exception &) {
|
} catch (std::exception &) {
|
||||||
return "??";
|
return "??";
|
||||||
|
|||||||
@@ -34,10 +34,10 @@ class StackModel : public QAbstractTableModel
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
private:
|
private:
|
||||||
ComSquare::Memory::MemoryBus &_bus;
|
std::shared_ptr<ComSquare::Memory::MemoryBus> _bus;
|
||||||
ComSquare::Debugger::CPUDebug &_cpu;
|
ComSquare::Debugger::CPUDebug &_cpu;
|
||||||
public:
|
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;
|
StackModel(const StackModel &) = delete;
|
||||||
const StackModel &operator=(const StackModel &) = delete;
|
const StackModel &operator=(const StackModel &) = delete;
|
||||||
~StackModel() override = default;
|
~StackModel() override = default;
|
||||||
@@ -50,6 +50,9 @@ public:
|
|||||||
QVariant data(const QModelIndex &index, int role) const override;
|
QVariant data(const QModelIndex &index, int role) const override;
|
||||||
//! @brief Override the headers to use hex values.
|
//! @brief Override the headers to use hex values.
|
||||||
QVariant headerData(int section, Qt::Orientation orientation, int role) const override;
|
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.
|
//! @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.
|
//! @brief Override the basic cpu's update to allow pausing of the CPU only.
|
||||||
unsigned update() override;
|
unsigned update() override;
|
||||||
|
|
||||||
|
//! @brief Change the memory bus used by the CPU.
|
||||||
|
void setMemoryBus(std::shared_ptr<Memory::MemoryBus> bus) override;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -165,9 +165,10 @@ namespace ComSquare::Debugger
|
|||||||
void MemoryBusDebug::write(uint24_t addr, uint8_t data)
|
void MemoryBusDebug::write(uint24_t addr, uint8_t data)
|
||||||
{
|
{
|
||||||
auto accessor = this->getAccessor(addr);
|
auto accessor = this->getAccessor(addr);
|
||||||
uint8_t value;
|
uint8_t value = 0;
|
||||||
try {
|
try {
|
||||||
value = accessor->read(addr - accessor->getStart());
|
if (accessor)
|
||||||
|
value = accessor->read(addr - accessor->getStart());
|
||||||
} catch (InvalidAddress &) {
|
} catch (InvalidAddress &) {
|
||||||
value = 0;
|
value = 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -56,6 +56,8 @@ namespace ComSquare::Memory
|
|||||||
|
|
||||||
void MemoryBus::mapComponents(SNES &console)
|
void MemoryBus::mapComponents(SNES &console)
|
||||||
{
|
{
|
||||||
|
this->_memoryAccessors.clear();
|
||||||
|
|
||||||
// The WRam and PU registers are always mapped at the same address no matter the mapping mode.
|
// The WRam and PU registers are always mapped at the same address no matter the mapping mode.
|
||||||
console.wram->setMemoryRegion(0x7E, 0x7F, 0x0000, 0xFFFF);
|
console.wram->setMemoryRegion(0x7E, 0x7F, 0x0000, 0xFFFF);
|
||||||
this->_memoryAccessors.push_back(console.wram);
|
this->_memoryAccessors.push_back(console.wram);
|
||||||
|
|||||||
+8
-2
@@ -42,8 +42,10 @@ namespace ComSquare
|
|||||||
cpuDebug->focus();
|
cpuDebug->focus();
|
||||||
if (pause)
|
if (pause)
|
||||||
cpuDebug->pause();
|
cpuDebug->pause();
|
||||||
} else
|
} else {
|
||||||
this->cpu = std::make_shared<Debugger::CPUDebug>(*this->cpu, *this);
|
this->cpu = std::make_shared<Debugger::CPUDebug>(*this->cpu, *this);
|
||||||
|
this->_bus->mapComponents(*this);
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
std::cerr << "Debugging features are not enabled. You can't enable the debugger." << std::endl;
|
std::cerr << "Debugging features are not enabled. You can't enable the debugger." << std::endl;
|
||||||
(void)pause;
|
(void)pause;
|
||||||
@@ -53,6 +55,7 @@ namespace ComSquare
|
|||||||
void SNES::disableCPUDebugging()
|
void SNES::disableCPUDebugging()
|
||||||
{
|
{
|
||||||
this->cpu = std::make_shared<CPU::CPU>(*this->cpu);
|
this->cpu = std::make_shared<CPU::CPU>(*this->cpu);
|
||||||
|
this->_bus->mapComponents(*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SNES::enableRamViewer()
|
void SNES::enableRamViewer()
|
||||||
@@ -94,8 +97,10 @@ namespace ComSquare
|
|||||||
#ifdef DEBUGGER_ENABLED
|
#ifdef DEBUGGER_ENABLED
|
||||||
if (this->apu->isDebugger())
|
if (this->apu->isDebugger())
|
||||||
std::static_pointer_cast<Debugger::APUDebug>(this->apu)->focus();
|
std::static_pointer_cast<Debugger::APUDebug>(this->apu)->focus();
|
||||||
else
|
else {
|
||||||
this->apu = std::make_shared<Debugger::APUDebug>(*this->apu, *this);
|
this->apu = std::make_shared<Debugger::APUDebug>(*this->apu, *this);
|
||||||
|
this->_bus->mapComponents(*this);
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
std::cerr << "Debugging features are not enabled. You can't enable the debugger." << std::endl;
|
std::cerr << "Debugging features are not enabled. You can't enable the debugger." << std::endl;
|
||||||
#endif
|
#endif
|
||||||
@@ -104,6 +109,7 @@ namespace ComSquare
|
|||||||
void SNES::disableAPUDebugging()
|
void SNES::disableAPUDebugging()
|
||||||
{
|
{
|
||||||
this->apu = std::make_shared<APU::APU>(*this->apu);
|
this->apu = std::make_shared<APU::APU>(*this->apu);
|
||||||
|
this->_bus->mapComponents(*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SNES::enableMemoryBusDebugging()
|
void SNES::enableMemoryBusDebugging()
|
||||||
|
|||||||
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
/********************************************************************************
|
/********************************************************************************
|
||||||
** Form generated from reading UI file 'cpu.ui'
|
** 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!
|
** WARNING! All changes made in this file will be lost when recompiling UI file!
|
||||||
********************************************************************************/
|
********************************************************************************/
|
||||||
|
|||||||
Reference in New Issue
Block a user