mirror of
https://github.com/zoriya/ComSquare.git
synced 2025-12-19 13:45:11 +00:00
40 lines
1.5 KiB
C++
40 lines
1.5 KiB
C++
//
|
|
// Created by anonymus-raccoon on 1/23/20.
|
|
//
|
|
|
|
#ifndef COMSQUARE_MEMORYBUS_HPP
|
|
#define COMSQUARE_MEMORYBUS_HPP
|
|
|
|
#include <cstdint>
|
|
#include <vector>
|
|
#include <memory>
|
|
#include "IMemory.hpp"
|
|
|
|
namespace ComSquare
|
|
{
|
|
//! @brief The memory bus is the component responsible of mapping addresses to components address and transmitting the data.
|
|
class MemoryBus {
|
|
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.
|
|
std::vector<std::shared_ptr<IMemory>> _memoryAccessors;
|
|
//! @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.
|
|
std::shared_ptr<IMemory> getAccessor(uint24_t addr);
|
|
//! @brief The last value read via the memory bus.
|
|
uint8_t _openbus = 0;
|
|
public:
|
|
//! @brief Read data at a global address.
|
|
//! @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 read(uint24_t addr);
|
|
//! @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);
|
|
};
|
|
}
|
|
|
|
|
|
#endif //COMSQUARE_MEMORYBUS_HPP
|