Enabling the memory bus debugger

This commit is contained in:
Zoe Roux
2021-07-05 00:23:48 +02:00
parent f16815c36f
commit cb6fb8a240
20 changed files with 475 additions and 418 deletions

View File

@@ -7,6 +7,7 @@
#include "AMemory.hpp"
#include "RectangleShadow.hpp"
#include "MemoryShadow.hpp"
#include "IMemoryBus.hpp"
#include <cstdint>
#include <memory>
#include <vector>
@@ -18,7 +19,7 @@ namespace ComSquare
namespace Memory
{
//! @brief The memory bus is the component responsible of mapping addresses to components address and transmitting the data.
class MemoryBus
class MemoryBus : public IMemoryBus
{
private:
//! @brief The list of components registered inside the bus. Every components that can read/write to a public address should be in this vector.
@@ -44,26 +45,23 @@ namespace ComSquare
//! @brief A memory bus is assignable.
MemoryBus &operator=(const MemoryBus &) = default;
//! @brief A default destructor
~MemoryBus() = default;
//! @brief Force silencing read to the bus.
bool forceSilence = false;
~MemoryBus() override = default;
//! @brief Read data at a global address. This form allow read to be silenced.
//! @param addr The address to read from.
//! @throws InvalidAddress If the address is not mapped to the bus, this exception is thrown.
//! @return The value that the component returned for this address. If the address was mapped to ram, it simply returned the value. If the address was mapped to a register the component returned the register.
uint8_t read(uint24_t addr);
uint8_t read(uint24_t addr) override;
//! @brief This as the same purpose as a read but it does not change the open bus and won't throw an exception.
//! @param addr The address to read from.
//! @return The value that the component returned for this address. If the address was mapped to ram, it simply returned the value. If the address was mapped to a register the component returned the register.
uint8_t peek(uint24_t addr);
std::optional<uint8_t> peek(uint24_t addr) override;
//! @brief Write a data to a global address.
//! @param addr The address to write to.
//! @param data The data to write.
void write(uint24_t addr, uint8_t data);
void write(uint24_t addr, uint8_t data) override;
//! @brief Map components to the address space using the currently loaded cartridge to set the right mapping mode.
//! @param console All the components.
@@ -72,7 +70,7 @@ namespace ComSquare
//! @brief Helper function to get the components that is responsible of read/write at an address.
//! @param addr The address you want to look for.
//! @return The components responsible for the address param or nullptr if none was found.
IMemory *getAccessor(uint24_t addr);
IMemory *getAccessor(uint24_t addr) override;
};
}
}