Files
Bear/memory.h
2026-03-03 23:50:39 -06:00

37 lines
859 B
C++

#ifndef BEAR_MEMORY_H
#define BEAR_MEMORY_H
#include <cstddef>
#include <cstdint>
#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