libmicroemu 0.2.0
ARM Microcontroller Emulator Library
Loading...
Searching...
No Matches
spec_reg_access.h
1#pragma once
2
3#include "libmicroemu/emu_context.h"
4
5namespace libmicroemu::internal {
6
16template <typename TCpuAccessor> class SpecialRegAccessor : public ISpecialRegAccessor {
17public:
18 using CpuAccessor = TCpuAccessor;
19 using SReg = typename CpuAccessor::SReg;
20
26 SpecialRegAccessor(CpuAccessor &cpua) : cpua_(cpua) {}
27
32
37
42
47
52
54 std::string_view GetRegisterName(const SpecialRegisterId &reg_id) const override {
55 return SReg::GetRegisterName(reg_id);
56 }
57
59 u32 ReadRegister(const SpecialRegisterId &reg_id) const override {
60 return cpua_.ReadSpecialRegister(reg_id);
61 }
62
64 void WriteRegister(const SpecialRegisterId &reg_id, u32 value) override {
65 return cpua_.WriteSpecialRegister(reg_id, value);
66 }
67
68private:
69 CpuAccessor &cpua_;
70};
71
72} // namespace libmicroemu::internal
Interface for accessing special registers.
Definition emu_context.h:52
Definition cpu_accessor.h:17
SpecialRegAccessor(SpecialRegAccessor &&)=default
Default move constructor for the SpecialRegAccessor object.
u32 ReadRegister(const SpecialRegisterId &reg_id) const override
Reads the value of the specified special register.
Definition spec_reg_access.h:59
SpecialRegAccessor(const SpecialRegAccessor &)=default
Default copy constructor for the SpecialRegAccessor object.
~SpecialRegAccessor()=default
Default destructor for the SpecialRegAccessor object.
SpecialRegAccessor(CpuAccessor &cpua)
Constructs a SpecialRegAccessor object with the given processor states.
Definition spec_reg_access.h:26
void WriteRegister(const SpecialRegisterId &reg_id, u32 value) override
Writes the value to the specified special register.
Definition spec_reg_access.h:64
SpecialRegAccessor & operator=(const SpecialRegAccessor &)=default
Default copy assignment operator for the SpecialRegAccessor object.
std::string_view GetRegisterName(const SpecialRegisterId &reg_id) const override
Gets the name of the specified special register.
Definition spec_reg_access.h:54
SpecialRegAccessor & operator=(SpecialRegAccessor &&)=default
Default move assignment operator for the SpecialRegAccessor object.
The libmicroemu::internal namespace contains all classes and functions of libmicroemu which are priva...
Definition bkpt_flags.h:6
SpecialRegisterId
Enumeration of special register IDs.
Definition special_register_id.h:18