From 88a6c5a0965b4e3e7e2bf998160177d29d29f033 Mon Sep 17 00:00:00 2001
From: Anonymus Raccoon
Date: Tue, 28 Apr 2020 21:20:16 +0200
Subject: [PATCH 1/2] Solving a bug with the bus when enabling/disabling a
debugger
---
sources/APU/APU.hpp | 2 +-
.../APU/Instructions/8bitShiftRotation.cpp | 1 +
sources/CPU/CPU.hpp | 2 ++
sources/Memory/MemoryBus.cpp | 2 ++
sources/SNES.cpp | 30 +++++++++++++++++--
sources/main.cpp | 8 ++++-
6 files changed, 40 insertions(+), 5 deletions(-)
diff --git a/sources/APU/APU.hpp b/sources/APU/APU.hpp
index 5dbc43f..25f9917 100644
--- a/sources/APU/APU.hpp
+++ b/sources/APU/APU.hpp
@@ -370,7 +370,7 @@ namespace ComSquare::APU
explicit APU(std::shared_ptr &map);
APU(const APU &) = default;
APU &operator=(const APU &) = default;
- ~APU() = default;
+ ~APU() override = default;
//! @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.
diff --git a/sources/APU/Instructions/8bitShiftRotation.cpp b/sources/APU/Instructions/8bitShiftRotation.cpp
index 1aece45..db7e538 100644
--- a/sources/APU/Instructions/8bitShiftRotation.cpp
+++ b/sources/APU/Instructions/8bitShiftRotation.cpp
@@ -2,6 +2,7 @@
// Created by Melefo on 25/02/2020.
//
+#include
#include "../APU.hpp"
namespace ComSquare::APU
diff --git a/sources/CPU/CPU.hpp b/sources/CPU/CPU.hpp
index 3e45f77..adfc4e0 100644
--- a/sources/CPU/CPU.hpp
+++ b/sources/CPU/CPU.hpp
@@ -5,6 +5,7 @@
#ifndef COMSQUARE_CPU_HPP
#define COMSQUARE_CPU_HPP
+#include
#include "../Memory/AMemory.hpp"
#include "../Memory/MemoryBus.hpp"
#include "../Models/Int24.hpp"
@@ -642,6 +643,7 @@ namespace ComSquare::CPU
CPU(const CPU &) = default;
CPU &operator=(const CPU &) = delete;
~CPU() override = default;
+
//! @brief This function continue to execute the Cartridge code.
//! @return The number of CPU cycles that elapsed
virtual unsigned update();
diff --git a/sources/Memory/MemoryBus.cpp b/sources/Memory/MemoryBus.cpp
index 12a0391..4c74b40 100644
--- a/sources/Memory/MemoryBus.cpp
+++ b/sources/Memory/MemoryBus.cpp
@@ -56,6 +56,8 @@ namespace ComSquare::Memory
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.
console.wram->setMemoryRegion(0x7E, 0x7F, 0x0000, 0xFFFF);
this->_memoryAccessors.push_back(console.wram);
diff --git a/sources/SNES.cpp b/sources/SNES.cpp
index bcbce3c..837593c 100644
--- a/sources/SNES.cpp
+++ b/sources/SNES.cpp
@@ -6,9 +6,10 @@
#include
#include "SNES.hpp"
#ifdef DEBUGGER_ENABLED
-#include "Debugger/CPUDebug.hpp"
+#include "Debugger/CPU/CPUDebug.hpp"
#include "Debugger/APUDebug.hpp"
#include "Debugger/MemoryBusDebug.hpp"
+#include "Debugger/CGramDebug.hpp"
#endif
@@ -42,8 +43,10 @@ namespace ComSquare
cpuDebug->focus();
if (pause)
cpuDebug->pause();
- } else
+ } else {
this->cpu = std::make_shared(*this->cpu, *this);
+ this->_bus->mapComponents(*this);
+ }
#else
std::cerr << "Debugging features are not enabled. You can't enable the debugger." << std::endl;
(void)pause;
@@ -53,6 +56,7 @@ namespace ComSquare
void SNES::disableCPUDebugging()
{
this->cpu = std::make_shared(*this->cpu);
+ this->_bus->mapComponents(*this);
}
void SNES::enableRamViewer()
@@ -94,8 +98,10 @@ namespace ComSquare
#ifdef DEBUGGER_ENABLED
if (this->apu->isDebugger())
std::static_pointer_cast(this->apu)->focus();
- else
+ else {
this->apu = std::make_shared(*this->apu, *this);
+ this->_bus->mapComponents(*this);
+ }
#else
std::cerr << "Debugging features are not enabled. You can't enable the debugger." << std::endl;
#endif
@@ -104,6 +110,7 @@ namespace ComSquare
void SNES::disableAPUDebugging()
{
this->apu = std::make_shared(*this->apu);
+ this->_bus->mapComponents(*this);
}
void SNES::enableMemoryBusDebugging()
@@ -130,4 +137,21 @@ namespace ComSquare
std::cerr << "Debugging features are not enabled. You can't enable the debugger." << std::endl;
#endif
}
+
+ void SNES::enableCgramDebugging()
+ {
+ #ifdef DEBUGGER_ENABLED
+ if (this->_cgramViewer)
+ this->_cgramViewer->focus();
+ else
+ this->_cgramViewer = std::make_unique(*this, *this->ppu);
+ #endif
+ }
+
+ void SNES::disableCgramDebugging()
+ {
+ #ifdef DEBUGGER_ENABLED
+ this->_cgramViewer = nullptr;
+ #endif
+ }
}
diff --git a/sources/main.cpp b/sources/main.cpp
index 195dedc..871f559 100644
--- a/sources/main.cpp
+++ b/sources/main.cpp
@@ -20,6 +20,8 @@ void usage(char *bin)
<< "\t-m, --memory: \tEnable the memory viewer panel." << std::endl
<< "\t-h, --header: \tShow the header of the cartridge." << std::endl
<< "\t-b, --bus: \tShow the memory bus's log." << std::endl;
+ << "\t-b, --bus: \tShow the memory bus's log." << std::endl
+ << "\t-g, --cgram: \tShow the palette viewer." << std::endl;
}
void parseArguments(int argc, char **argv, SNES &snes)
@@ -32,10 +34,11 @@ void parseArguments(int argc, char **argv, SNES &snes)
{"memory", no_argument, 0, 'm'},
{"header", no_argument, 0, 'h'},
{"bus", no_argument, 0, 'b'},
+ {"cgram", no_argument, 0, 'g'},
{0, 0, 0, 0}
};
- int c = getopt_long(argc, argv, "camhb", long_options, &option_index);
+ int c = getopt_long(argc, argv, "camhbg", long_options, &option_index);
if (c == -1)
break;
switch (c) {
@@ -57,6 +60,9 @@ void parseArguments(int argc, char **argv, SNES &snes)
case 'b':
snes.enableMemoryBusDebugging();
break;
+ case 'g':
+ snes.enableCgramDebugging();
+ break;
default:
break;
}
From ab59fac0fcd7e3b6c4916263e970013b42892e80 Mon Sep 17 00:00:00 2001
From: Anonymus Raccoon
Date: Tue, 28 Apr 2020 21:26:53 +0200
Subject: [PATCH 2/2] Oups
---
.../APU/Instructions/8bitShiftRotation.cpp | 1 -
sources/CPU/CPU.hpp | 1 -
sources/SNES.cpp | 20 +------------------
sources/main.cpp | 8 +-------
4 files changed, 2 insertions(+), 28 deletions(-)
diff --git a/sources/APU/Instructions/8bitShiftRotation.cpp b/sources/APU/Instructions/8bitShiftRotation.cpp
index db7e538..1aece45 100644
--- a/sources/APU/Instructions/8bitShiftRotation.cpp
+++ b/sources/APU/Instructions/8bitShiftRotation.cpp
@@ -2,7 +2,6 @@
// Created by Melefo on 25/02/2020.
//
-#include
#include "../APU.hpp"
namespace ComSquare::APU
diff --git a/sources/CPU/CPU.hpp b/sources/CPU/CPU.hpp
index adfc4e0..37af15f 100644
--- a/sources/CPU/CPU.hpp
+++ b/sources/CPU/CPU.hpp
@@ -5,7 +5,6 @@
#ifndef COMSQUARE_CPU_HPP
#define COMSQUARE_CPU_HPP
-#include
#include "../Memory/AMemory.hpp"
#include "../Memory/MemoryBus.hpp"
#include "../Models/Int24.hpp"
diff --git a/sources/SNES.cpp b/sources/SNES.cpp
index 837593c..6320900 100644
--- a/sources/SNES.cpp
+++ b/sources/SNES.cpp
@@ -6,10 +6,9 @@
#include
#include "SNES.hpp"
#ifdef DEBUGGER_ENABLED
-#include "Debugger/CPU/CPUDebug.hpp"
+#include "Debugger/CPUDebug.hpp"
#include "Debugger/APUDebug.hpp"
#include "Debugger/MemoryBusDebug.hpp"
-#include "Debugger/CGramDebug.hpp"
#endif
@@ -137,21 +136,4 @@ namespace ComSquare
std::cerr << "Debugging features are not enabled. You can't enable the debugger." << std::endl;
#endif
}
-
- void SNES::enableCgramDebugging()
- {
- #ifdef DEBUGGER_ENABLED
- if (this->_cgramViewer)
- this->_cgramViewer->focus();
- else
- this->_cgramViewer = std::make_unique(*this, *this->ppu);
- #endif
- }
-
- void SNES::disableCgramDebugging()
- {
- #ifdef DEBUGGER_ENABLED
- this->_cgramViewer = nullptr;
- #endif
- }
}
diff --git a/sources/main.cpp b/sources/main.cpp
index 871f559..195dedc 100644
--- a/sources/main.cpp
+++ b/sources/main.cpp
@@ -20,8 +20,6 @@ void usage(char *bin)
<< "\t-m, --memory: \tEnable the memory viewer panel." << std::endl
<< "\t-h, --header: \tShow the header of the cartridge." << std::endl
<< "\t-b, --bus: \tShow the memory bus's log." << std::endl;
- << "\t-b, --bus: \tShow the memory bus's log." << std::endl
- << "\t-g, --cgram: \tShow the palette viewer." << std::endl;
}
void parseArguments(int argc, char **argv, SNES &snes)
@@ -34,11 +32,10 @@ void parseArguments(int argc, char **argv, SNES &snes)
{"memory", no_argument, 0, 'm'},
{"header", no_argument, 0, 'h'},
{"bus", no_argument, 0, 'b'},
- {"cgram", no_argument, 0, 'g'},
{0, 0, 0, 0}
};
- int c = getopt_long(argc, argv, "camhbg", long_options, &option_index);
+ int c = getopt_long(argc, argv, "camhb", long_options, &option_index);
if (c == -1)
break;
switch (c) {
@@ -60,9 +57,6 @@ void parseArguments(int argc, char **argv, SNES &snes)
case 'b':
snes.enableMemoryBusDebugging();
break;
- case 'g':
- snes.enableCgramDebugging();
- break;
default:
break;
}