37 lines
859 B
C++
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
|