From 40f843da7563fa45afc9fbd3bfc9ffd1eae36894 Mon Sep 17 00:00:00 2001
From: Anonymus Raccoon
Date: Tue, 24 Mar 2020 21:06:54 +0100
Subject: [PATCH] Adding filters
---
CMakeLists.txt | 4 +-
sources/APU/APU.cpp | 18 ++++-
sources/APU/APU.hpp | 3 +
sources/APU/DSP/DSP.cpp | 5 ++
sources/APU/DSP/DSP.hpp | 3 +
sources/APU/Instructions/Subroutine.cpp | 5 --
sources/CPU/CPU.cpp | 10 +++
sources/CPU/CPU.hpp | 4 +
.../CPU/Instructions/InternalInstruction.cpp | 5 --
sources/Cartridge/Cartridge.cpp | 2 +-
sources/Debugger/MemoryBusDebug.cpp | 80 ++++++++++++++++++-
sources/Debugger/MemoryBusDebug.hpp | 6 +-
sources/Memory/AMemory.hpp | 3 +
sources/Memory/MemoryShadow.cpp | 5 ++
sources/Memory/MemoryShadow.hpp | 2 +
sources/Memory/RectangleShadow.cpp | 5 ++
sources/Memory/RectangleShadow.hpp | 2 +
sources/PPU/PPU.cpp | 5 ++
sources/PPU/PPU.hpp | 2 +
sources/Ram/Ram.cpp | 8 +-
sources/Ram/Ram.hpp | 7 +-
sources/SNES.cpp | 4 +-
22 files changed, 160 insertions(+), 28 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index c9aa11d..9589780 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -79,7 +79,7 @@ add_executable(unit_tests
sources/CPU/Instructions/TransferRegisters.cpp
tests/CPU/TransferRegisters.cpp
sources/CPU/AddressingModes.cpp
-)
+ sources/Models/Components.hpp)
# include criterion & coverage
target_link_libraries(unit_tests criterion -lgcov)
@@ -174,7 +174,7 @@ add_executable(ComSquare
sources/Debugger/MemoryBusDebug.cpp
sources/Debugger/MemoryBusDebug.hpp
sources/Debugger/ClosableWindow.hpp
-)
+ sources/Models/Components.hpp)
target_compile_definitions(ComSquare PUBLIC DEBUGGER_ENABLED)
diff --git a/sources/APU/APU.cpp b/sources/APU/APU.cpp
index 9b97357..c12542c 100644
--- a/sources/APU/APU.cpp
+++ b/sources/APU/APU.cpp
@@ -23,6 +23,16 @@ namespace ComSquare::APU
return false;
}
+ std::string APU::getName()
+ {
+ return "APU";
+ }
+
+ Component APU::getComponent()
+ {
+ return Apu;
+ }
+
uint8_t APU::_internalRead(uint24_t addr) {
switch (addr) {
case 0x0000 ... 0x00EF:
@@ -359,10 +369,10 @@ namespace ComSquare::APU
}
MemoryMap::MemoryMap() :
- Page0(0x00F0, "APU's Page 0"),
- Page1(0x0100, "APU's Page 1"),
- Memory(0xFDC0, "APU's Ram"),
- IPL(0x0040, "IPL Rom")
+ Page0(0x00F0, Apu, "APU's Page 0"),
+ Page1(0x0100, Apu, "APU's Page 1"),
+ Memory(0xFDC0, Apu, "APU's Ram"),
+ IPL(0x0040, Apu, "IPL Rom")
{
}
diff --git a/sources/APU/APU.hpp b/sources/APU/APU.hpp
index 0e58ad3..1d22ec3 100644
--- a/sources/APU/APU.hpp
+++ b/sources/APU/APU.hpp
@@ -158,6 +158,9 @@ namespace ComSquare::APU
//! @brief Get the name of this accessor (used for debug purpose)
std::string getName() override;
+ //! @brief Get the component of this accessor (used for debug purpose)
+ Component getComponent() override;
+
//! @brief Current state of APU CPU
StateMode _state = Running;
diff --git a/sources/APU/DSP/DSP.cpp b/sources/APU/DSP/DSP.cpp
index 1b895c7..421826e 100644
--- a/sources/APU/DSP/DSP.cpp
+++ b/sources/APU/DSP/DSP.cpp
@@ -593,4 +593,9 @@ namespace ComSquare::APU::DSP
{
return "DSP";
}
+
+ Component DSP::getComponent()
+ {
+ return Apu;
+ }
}
\ No newline at end of file
diff --git a/sources/APU/DSP/DSP.hpp b/sources/APU/DSP/DSP.hpp
index 9e25c6a..1676cd5 100644
--- a/sources/APU/DSP/DSP.hpp
+++ b/sources/APU/DSP/DSP.hpp
@@ -143,6 +143,9 @@ namespace ComSquare::APU::DSP
//! @brief Get the name of this accessor (used for debug purpose)
std::string getName() override;
+
+ //! @brief Get the component of this accessor (used for debug purpose)
+ Component getComponent() override;
};
}
diff --git a/sources/APU/Instructions/Subroutine.cpp b/sources/APU/Instructions/Subroutine.cpp
index 3dcf2c3..34eb031 100644
--- a/sources/APU/Instructions/Subroutine.cpp
+++ b/sources/APU/Instructions/Subroutine.cpp
@@ -52,9 +52,4 @@ namespace ComSquare::APU
this->RET();
return 6;
}
-
- std::string APU::getName()
- {
- return "APU";
- }
}
\ No newline at end of file
diff --git a/sources/CPU/CPU.cpp b/sources/CPU/CPU.cpp
index e4efc02..cfce0c8 100644
--- a/sources/CPU/CPU.cpp
+++ b/sources/CPU/CPU.cpp
@@ -413,4 +413,14 @@ namespace ComSquare::CPU
{
return this->_bus->read(++this->_registers.s) + (this->_bus->read(++this->_registers.s) << 8u);
}
+
+ std::string CPU::getName()
+ {
+ return "CPU";
+ }
+
+ Component CPU::getComponent()
+ {
+ return Cpu;
+ }
}
\ No newline at end of file
diff --git a/sources/CPU/CPU.hpp b/sources/CPU/CPU.hpp
index cdecf8b..84d613f 100644
--- a/sources/CPU/CPU.hpp
+++ b/sources/CPU/CPU.hpp
@@ -9,6 +9,7 @@
#include "../Memory/MemoryBus.hpp"
#include "../Models/Int24.hpp"
#include "../Cartridge/Cartridge.hpp"
+#include "../Memory/AMemory.hpp"
namespace ComSquare::CPU
{
@@ -573,6 +574,9 @@ namespace ComSquare::CPU
//! @brief Get the name of this accessor (used for debug purpose)
std::string getName() override;
+ //! @brief Get the component of this accessor (used for debug purpose)
+ Component getComponent() override;
+
//! @brief Reset interrupt - Called on boot and when the reset button is pressed.
virtual void RESB();
diff --git a/sources/CPU/Instructions/InternalInstruction.cpp b/sources/CPU/Instructions/InternalInstruction.cpp
index 3b3d5f6..6c16c0c 100644
--- a/sources/CPU/Instructions/InternalInstruction.cpp
+++ b/sources/CPU/Instructions/InternalInstruction.cpp
@@ -307,9 +307,4 @@ namespace ComSquare::CPU
{
this->_registers.pac = value;
}
-
- std::string CPU::getName()
- {
- return "CPU";
- }
}
\ No newline at end of file
diff --git a/sources/Cartridge/Cartridge.cpp b/sources/Cartridge/Cartridge.cpp
index 61ce1e0..227903a 100644
--- a/sources/Cartridge/Cartridge.cpp
+++ b/sources/Cartridge/Cartridge.cpp
@@ -13,7 +13,7 @@
namespace ComSquare::Cartridge
{
Cartridge::Cartridge(const std::string &romPath)
- : Ram::Ram(0, "Cartridge")
+ : Ram::Ram(0, Rom, "Cartridge")
{
try {
if (romPath.empty())
diff --git a/sources/Debugger/MemoryBusDebug.cpp b/sources/Debugger/MemoryBusDebug.cpp
index 18bad54..d4065c8 100644
--- a/sources/Debugger/MemoryBusDebug.cpp
+++ b/sources/Debugger/MemoryBusDebug.cpp
@@ -30,6 +30,60 @@ namespace ComSquare::Debugger
this->_ui.log->horizontalHeader()->setSectionsMovable(true);
for (int i = 0; i < this->_model.column; i++)
this->_ui.log->setColumnWidth(i, this->_ui.log->width());
+
+ QMainWindow::connect(this->_ui.fromAPU, &QCheckBox::toggled, [this](bool checked) {
+ this->_proxy.filters[0].apu = checked;
+ });
+ QMainWindow::connect(this->_ui.fromCPU, &QCheckBox::toggled, [this](bool checked) {
+ this->_proxy.filters[0].cpu = checked;
+ });
+ QMainWindow::connect(this->_ui.fromOAM, &QCheckBox::toggled, [this](bool checked) {
+ this->_proxy.filters[0].oamram = checked;
+ });
+ QMainWindow::connect(this->_ui.fromPPU, &QCheckBox::toggled, [this](bool checked) {
+ this->_proxy.filters[0].ppu = checked;
+ });
+ QMainWindow::connect(this->_ui.fromROM, &QCheckBox::toggled, [this](bool checked) {
+ this->_proxy.filters[0].rom = checked;
+ });
+ QMainWindow::connect(this->_ui.fromSRAM, &QCheckBox::toggled, [this](bool checked) {
+ this->_proxy.filters[0].sram = checked;
+ });
+ QMainWindow::connect(this->_ui.fromVRAM, &QCheckBox::toggled, [this](bool checked) {
+ this->_proxy.filters[0].vram = checked;
+ });
+ QMainWindow::connect(this->_ui.fromWRAM, &QCheckBox::toggled, [this](bool checked) {
+ this->_proxy.filters[0].wram = checked;
+ });
+ QMainWindow::connect(this->_ui.fromCG, &QCheckBox::toggled, [this](bool checked) {
+ this->_proxy.filters[0].cgram = checked;
+ });
+
+ QMainWindow::connect(this->_ui.toAPU, &QCheckBox::toggled, [this](bool checked) {
+ this->_proxy.filters[1].apu = checked;
+ });
+ QMainWindow::connect(this->_ui.toCPU, &QCheckBox::toggled, [this](bool checked) {
+ this->_proxy.filters[1].cpu = checked;
+ });
+ QMainWindow::connect(this->_ui.toOAM, &QCheckBox::toggled, [this](bool checked) {
+ this->_proxy.filters[1].oamram = checked;
+ });
+ QMainWindow::connect(this->_ui.toPPU, &QCheckBox::toggled, [this](bool checked) {
+ this->_proxy.filters[1].ppu = checked;
+ });
+ QMainWindow::connect(this->_ui.toSRAM, &QCheckBox::toggled, [this](bool checked) {
+ this->_proxy.filters[1].sram = checked;
+ });
+ QMainWindow::connect(this->_ui.toVRAM, &QCheckBox::toggled, [this](bool checked) {
+ this->_proxy.filters[1].vram = checked;
+ });
+ QMainWindow::connect(this->_ui.toWRAM, &QCheckBox::toggled, [this](bool checked) {
+ this->_proxy.filters[1].wram = checked;
+ });
+ QMainWindow::connect(this->_ui.toCG, &QCheckBox::toggled, [this](bool checked) {
+ this->_proxy.filters[1].cgram = checked;
+ });
+
this->_window->show();
}
@@ -153,7 +207,27 @@ bool BusLoggerProxy::filterAcceptsRow(int sourceRow, const QModelIndex &sourcePa
{
ComSquare::Debugger::BusLog log = this->_parent.getLogAt(sourceRow);
-// if (log.accessor && log.accessor->getName() == "Cartridge")
-// return false;
- return QSortFilterProxyModel::filterAcceptsRow(sourceRow, sourceParent);
+ if (!log.accessor)
+ return true;
+ ComSquare::Component component = log.accessor->getComponent();
+ switch (component) {
+ case ComSquare::Component::Cpu:
+ return this->filters[log.write].cpu;
+ case ComSquare::Component::Ppu:
+ return this->filters[log.write].ppu;
+ case ComSquare::Component::Apu:
+ return this->filters[log.write].apu;
+ case ComSquare::Component::Rom:
+ return this->filters[log.write].rom;
+ case ComSquare::Component::WRam:
+ return this->filters[log.write].wram;
+ case ComSquare::Component::VRam:
+ return this->filters[log.write].vram;
+ case ComSquare::Component::CGRam:
+ return this->filters[log.write].cgram;
+ case ComSquare::Component::OAMRam:
+ return this->filters[log.write].oamram;
+ case ComSquare::Component::SRam:
+ return this->filters[log.write].sram;
+ }
}
diff --git a/sources/Debugger/MemoryBusDebug.hpp b/sources/Debugger/MemoryBusDebug.hpp
index 61a74d9..55c993d 100644
--- a/sources/Debugger/MemoryBusDebug.hpp
+++ b/sources/Debugger/MemoryBusDebug.hpp
@@ -81,10 +81,8 @@ protected:
//! @brief Function that filter logs.
bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override;
public:
- //! @brief Currently enabled read filters
- ComSquare::Debugger::BusLoggerFilters readFilters = ComSquare::Debugger::BusLoggerFilters();
- //! @brief Currently enabled write filters
- ComSquare::Debugger::BusLoggerFilters writeFilters = ComSquare::Debugger::BusLoggerFilters();
+ //! @brief Currently enabled filters, index 0 is for reads, index 1 for writes.
+ ComSquare::Debugger::BusLoggerFilters filters[2] = {ComSquare::Debugger::BusLoggerFilters(), ComSquare::Debugger::BusLoggerFilters()};
BusLoggerProxy(BusLogModel &parent);
BusLoggerProxy(const BusLoggerProxy &) = delete;
diff --git a/sources/Memory/AMemory.hpp b/sources/Memory/AMemory.hpp
index ab2fd7b..5215436 100644
--- a/sources/Memory/AMemory.hpp
+++ b/sources/Memory/AMemory.hpp
@@ -10,6 +10,7 @@
#include
#include
#include "../Models/Int24.hpp"
+#include "../Models/Components.hpp"
namespace ComSquare::Memory
{
@@ -48,6 +49,8 @@ namespace ComSquare::Memory
virtual bool isMirror();
//! @brief Get the name of this accessor (used for debug purpose)
virtual std::string getName() = 0;
+ //! @brief Get the component of this accessor (used for debug purpose)
+ virtual Component getComponent() = 0;
//! @brief Get the name of the data at the address
//! @param addr The address (in local space)
virtual std::string getValueName(uint24_t addr);
diff --git a/sources/Memory/MemoryShadow.cpp b/sources/Memory/MemoryShadow.cpp
index 246e7c6..ecc4b4f 100644
--- a/sources/Memory/MemoryShadow.cpp
+++ b/sources/Memory/MemoryShadow.cpp
@@ -38,4 +38,9 @@ namespace ComSquare::Memory
{
return this->_initial->getName();
}
+
+ Component MemoryShadow::getComponent()
+ {
+ return this->_initial->getComponent();
+ }
}
\ No newline at end of file
diff --git a/sources/Memory/MemoryShadow.hpp b/sources/Memory/MemoryShadow.hpp
index 673eaf3..7c33c43 100644
--- a/sources/Memory/MemoryShadow.hpp
+++ b/sources/Memory/MemoryShadow.hpp
@@ -36,6 +36,8 @@ namespace ComSquare::Memory
bool isMirror() override;
//! @brief Get the name of this accessor (used for debug purpose)
std::string getName() override;
+ //! @brief Get the component of this accessor (used for debug purpose)
+ Component getComponent() override;
//! @brief Return the memory accessor this accessor mirror if any
//! @return nullptr if isMirror is false, the source otherwise.
std::shared_ptr getMirrored() override;
diff --git a/sources/Memory/RectangleShadow.cpp b/sources/Memory/RectangleShadow.cpp
index f798389..9d924d4 100644
--- a/sources/Memory/RectangleShadow.cpp
+++ b/sources/Memory/RectangleShadow.cpp
@@ -47,4 +47,9 @@ namespace ComSquare::Memory
{
return this->_initial->getName();
}
+
+ Component RectangleShadow::getComponent()
+ {
+ return this->_initial->getComponent();
+ }
}
\ No newline at end of file
diff --git a/sources/Memory/RectangleShadow.hpp b/sources/Memory/RectangleShadow.hpp
index 756ab0d..d3130d9 100644
--- a/sources/Memory/RectangleShadow.hpp
+++ b/sources/Memory/RectangleShadow.hpp
@@ -39,6 +39,8 @@ namespace ComSquare::Memory
bool isMirror() override;
//! @brief Get the name of this accessor (used for debug purpose)
std::string getName() override;
+ //! @brief Get the component of this accessor (used for debug purpose)
+ Component getComponent() override;
//! @brief Return the memory accessor this accessor mirror if any
//! @return nullptr if isMirror is false, the source otherwise.
std::shared_ptr getMirrored() override;
diff --git a/sources/PPU/PPU.cpp b/sources/PPU/PPU.cpp
index 9fd377e..5cc3aa8 100644
--- a/sources/PPU/PPU.cpp
+++ b/sources/PPU/PPU.cpp
@@ -249,4 +249,9 @@ namespace ComSquare::PPU
{
return "PPU";
}
+
+ Component PPU::getComponent()
+ {
+ return Ppu;
+ }
}
\ No newline at end of file
diff --git a/sources/PPU/PPU.hpp b/sources/PPU/PPU.hpp
index ec0d8d4..0c64f3c 100644
--- a/sources/PPU/PPU.hpp
+++ b/sources/PPU/PPU.hpp
@@ -566,6 +566,8 @@ namespace ComSquare::PPU
void write(uint24_t addr, uint8_t data) override;
//! @brief Get the name of this accessor (used for debug purpose)
std::string getName() override;
+ //! @brief Get the component of this accessor (used for debug purpose)
+ Component getComponent() override;
//! @brief Update the PPU of n cycles.
//! @param The number of cycles to update.
diff --git a/sources/Ram/Ram.cpp b/sources/Ram/Ram.cpp
index 320834e..100901d 100644
--- a/sources/Ram/Ram.cpp
+++ b/sources/Ram/Ram.cpp
@@ -9,8 +9,9 @@
namespace ComSquare::Ram
{
- Ram::Ram(size_t size, std::string ramName)
+ Ram::Ram(size_t size, Component type, std::string ramName)
: _size(size),
+ _ramType(type),
_ramName(std::move(ramName))
{
if (size == 0)
@@ -58,4 +59,9 @@ namespace ComSquare::Ram
{
return this->_ramName;
}
+
+ Component Ram::getComponent()
+ {
+ return this->_ramType;
+ }
}
diff --git a/sources/Ram/Ram.hpp b/sources/Ram/Ram.hpp
index 24b7f88..d9297e7 100644
--- a/sources/Ram/Ram.hpp
+++ b/sources/Ram/Ram.hpp
@@ -15,11 +15,13 @@ namespace ComSquare::Ram
uint8_t *_data;
//! @brief The size of the ram (iny bytes).
size_t _size;
+ //! @brief An id identifying the type of memory this is (for the debugger)
+ Component _ramType;
//! @brief The name of this ram.
std::string _ramName;
public:
//! @brief Create a ram of a given size in bytes.
- explicit Ram(size_t size, std::string ramName);
+ explicit Ram(size_t size, Component, std::string ramName);
//! @brief The ram can't be copied.
Ram(const Ram &) = delete;
//! @brief The ram can't be assigned.
@@ -46,6 +48,9 @@ namespace ComSquare::Ram
//! @brief Get the name of this accessor (used for debug purpose)
std::string getName() override;
+ //! @brief Get the component of this accessor (used for debug purpose)
+ Component getComponent() override;
+
//! @brief Get the size of the ram in bytes.
size_t getSize();
};
diff --git a/sources/SNES.cpp b/sources/SNES.cpp
index 5cc42a8..3dc9674 100644
--- a/sources/SNES.cpp
+++ b/sources/SNES.cpp
@@ -17,8 +17,8 @@ namespace ComSquare
SNES::SNES(const std::string &romPath, Renderer::IRenderer &renderer) :
_bus(std::make_shared()),
cartridge(new Cartridge::Cartridge(romPath)),
- wram(new Ram::Ram(16384, "WRam")),
- sram(new Ram::Ram(this->cartridge->header.sramSize, "SRam")),
+ wram(new Ram::Ram(16384, WRam, "WRam")),
+ sram(new Ram::Ram(this->cartridge->header.sramSize, SRam, "SRam")),
apuRam(new APU::MemoryMap()),
cpu(new CPU::CPU(this->_bus, cartridge->header)),
ppu(new PPU::PPU(renderer)),