aboutsummaryrefslogtreecommitdiff
path: root/qtmips_machine/memory.h
diff options
context:
space:
mode:
Diffstat (limited to 'qtmips_machine/memory.h')
-rw-r--r--qtmips_machine/memory.h33
1 files changed, 28 insertions, 5 deletions
diff --git a/qtmips_machine/memory.h b/qtmips_machine/memory.h
index 1df23ae..1b56d7c 100644
--- a/qtmips_machine/memory.h
+++ b/qtmips_machine/memory.h
@@ -14,7 +14,7 @@ public:
void write_hword(std::uint32_t offset, std::uint16_t value);
void write_word(std::uint32_t offset, std::uint32_t value);
- virtual std::uint8_t read_byte(std::uint32_t offset) = 0;
+ virtual std::uint8_t read_byte(std::uint32_t offset) const = 0;
std::uint16_t read_hword(std::uint32_t offset);
std::uint32_t read_word(std::uint32_t offset);
@@ -26,11 +26,20 @@ signals:
class MemorySection : public MemoryAccess {
public:
MemorySection(std::uint32_t length);
+ MemorySection(const MemorySection&);
~MemorySection();
+
void write_byte(std::uint32_t offset, std::uint8_t value);
- std::uint8_t read_byte(std::uint32_t offset);
+ std::uint8_t read_byte(std::uint32_t offset) const;
+
+ std::uint32_t length() const;
+ const std::uint8_t* data() const;
+
+ bool operator==(const MemorySection&) const;
+ bool operator!=(const MemorySection&) const;
+
private:
- std::uint32_t length;
+ std::uint32_t len;
std::uint8_t *dt;
};
@@ -48,13 +57,27 @@ class Memory : public MemoryAccess {
Q_OBJECT
public:
Memory();
+ Memory(const Memory&);
~Memory();
- MemorySection *get_section(std::uint32_t address, bool create); // returns section containing given address
+
+ MemorySection *get_section(std::uint32_t address, bool create) const; // returns section containing given address
void write_byte(std::uint32_t address, std::uint8_t value);
- std::uint8_t read_byte(std::uint32_t address);
+ std::uint8_t read_byte(std::uint32_t address) const;
+
+ bool operator==(const Memory&) const;
+ bool operator!=(const Memory&) const;
+
+ const union MemoryTree *get_memorytree_root() const;
+
private:
union MemoryTree *mt_root;
static union MemoryTree *allocate_section_tree();
+ static void free_section_tree(union MemoryTree*, size_t depth);
+ static bool compare_section_tree(const union MemoryTree*, const union MemoryTree*, size_t depth);
+ static bool is_zero_section_tree(const union MemoryTree*, size_t depth);
+ static union MemoryTree *copy_section_tree(const union MemoryTree*, size_t depth);
};
+Q_DECLARE_METATYPE(Memory)
+
#endif // MEMORY_H