20 enum class Type : uint32_t {
38 implSetCallbackR(t, [f = std::move(fn)](
void* ptr, uint32_t
id) {
39 f(*
reinterpret_cast<T*
>(ptr),
id);
45 implSetCallbackW(t, [f = std::move(fn)](
void* ptr, uint32_t
id) {
46 f(*
reinterpret_cast<T*
>(ptr),
id);
50 ptr32_t pin (
void* mem,
ptr32_t address, uint32_t size,
const char* comment =
nullptr);
51 ptr32_t pin (
void* mem, uint32_t size,
const char* comment =
nullptr);
54 ptr32_t alloc(uint32_t size,
const char* comment =
nullptr);
62 auto deref (
ptr32_t address) -> std::tuple<void*, uint32_t>;
68 if constexpr(std::is_const<T>::value) {
69 return reinterpret_cast<const T*
>(
deref(address,
sizeof(T)));
71 return reinterpret_cast<T*
>(
derefv(address,
sizeof(T)));
89 Region(
ptr32_t b, uint32_t sz):address(b),size(sz){}
95 const char* comment =
nullptr;
96 Status status = S_Unused;
100 std::function<void(
void*,uint32_t)> read;
101 std::function<void(
void*,uint32_t)> write;
105 void implSetCallbackR(
Type t, std::function<
void (
void*, uint32_t)> fn,
size_t elt);
106 void implSetCallbackW(
Type t, std::function<
void (
void*, uint32_t)> fn,
size_t elt);
108 Region* implAlloc(uint32_t size);
109 Region* implAllocAt(
ptr32_t address, uint32_t size);
110 bool implRealloc(
ptr32_t address, uint32_t size);
111 Region* implTranslate(
ptr32_t address);
112 Region* translate(
ptr32_t address);
115 void memSyncRead(
Type t,
const Region& rgn,
ptr32_t address, uint32_t size);
116 void memSyncRead(Callback& cb,
const Region& rgn,
ptr32_t address, uint32_t size);
118 void memSyncWrite(
Type t,
const Region& rgn,
ptr32_t address, uint32_t size);
119 void memSyncWrite(Callback& cb,
const Region& rgn,
ptr32_t address, uint32_t size);
121 std::vector<Region> region;
122 std::unordered_map<Type, Callback> memMap;
Compatibility::ptr32_t ptr32_t
void setCallbackW(Type t, const T &fn)
T * deref(ptr32_t address)
int32_t readInt(ptr32_t address)
void * derefv(ptr32_t address, uint32_t size)
ptr32_t alloc(uint32_t size, const char *comment=nullptr)
ptr32_t realloc(ptr32_t address, uint32_t size)
void setCallbackR(Type t, std::function< void(T &t, uint32_t)> fn)
ptr32_t pin(void *mem, ptr32_t address, uint32_t size, const char *comment=nullptr)
static constexpr uint32_t memAlign
void setCallbackR(Type t, const T &fn)
void copyBytes(ptr32_t src, ptr32_t dst, uint32_t size)
auto deref(ptr32_t address) -> std::tuple< void *, uint32_t >
void setCallbackW(Type t, std::function< void(T &t, uint32_t)> fn)
void writeInt(ptr32_t address, int32_t v)