Serenity Operating System
1/*
2 * Copyright (c) 2020, Andreas Kling <kling@serenityos.org>
3 *
4 * SPDX-License-Identifier: BSD-2-Clause
5 */
6
7#pragma once
8
9#include "SoftMMU.h"
10
11namespace UserspaceEmulator {
12
13class SimpleRegion final : public Region {
14public:
15 SimpleRegion(u32 base, u32 size);
16 virtual ~SimpleRegion() override;
17
18 virtual ValueWithShadow<u8> read8(u32 offset) override;
19 virtual ValueWithShadow<u16> read16(u32 offset) override;
20 virtual ValueWithShadow<u32> read32(u32 offset) override;
21 virtual ValueWithShadow<u64> read64(u32 offset) override;
22 virtual ValueWithShadow<u128> read128(u32 offset) override;
23 virtual ValueWithShadow<u256> read256(u32 offset) override;
24
25 virtual void write8(u32 offset, ValueWithShadow<u8>) override;
26 virtual void write16(u32 offset, ValueWithShadow<u16>) override;
27 virtual void write32(u32 offset, ValueWithShadow<u32>) override;
28 virtual void write64(u32 offset, ValueWithShadow<u64>) override;
29 virtual void write128(u32 offset, ValueWithShadow<u128>) override;
30 virtual void write256(u32 offset, ValueWithShadow<u256>) override;
31
32 virtual u8* data() override { return m_data; }
33 virtual u8* shadow_data() override { return m_shadow_data; }
34
35 virtual u8* cacheable_ptr(u32 offset) override;
36
37private:
38 u8* m_data { nullptr };
39 u8* m_shadow_data { nullptr };
40};
41
42}