#ifndef BEAR_MEMORY_H #define BEAR_MEMORY_H #include #include #include "Bus.h" class IMemoryAccessor { public: virtual ~IMemoryAccessor() = default; virtual void write(std::uint16_t _addr, std::uint8_t value) = 0; virtual std::uint8_t read8(std::uint16_t _addr) = 0; }; class CPUMemoryAccessor : public IMemoryAccessor { public: explicit CPUMemoryAccessor(Bus* bus); ~CPUMemoryAccessor() override = default; void write(std::uint16_t _addr, std::uint8_t value) override; std::uint8_t read8(std::uint16_t _addr) override; private: std::uint8_t* ram = nullptr; Bus* bus = nullptr; static bool isRamAddress(std::uint16_t _addr); [[nodiscard]] std::uint8_t readFromRam(std::uint16_t _addr) const; void writeToRam(std::uint16_t _addr, std::uint8_t value) const; }; #endif //BEAR_MEMORY_H