From 499a88621d12ff0cdcba1f8c796b7031d6adc649 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karel=20Ko=C4=8D=C3=AD?= Date: Tue, 21 Nov 2017 19:48:51 +0100 Subject: Add possibility to compare memory and registers state For core testing we want to compare whole memory and registers. Registers are pretty simple but in case of memory it is some what more complicated and required its own tests to be sure that it works. --- qtmips_machine/memory.h | 33 ++++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) (limited to 'qtmips_machine/memory.h') 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 -- cgit v1.2.3