#ifndef MEMORY_H #define MEMORY_H #include #include #include #define TOHOST_ADDR 0x80001000ULL #define FROMHOST_ADDR 0x80001040ULL #define MEM_BASE 0x80000000ULL #define MEM_SIZE (64 * 1024 * 1024) // 64MB class Memory { private: std::vector mem; uint64_t base_addr; public: Memory(); bool load_elf(const std::string& filename); uint8_t read8(uint64_t addr); uint16_t read16(uint64_t addr); uint32_t read32(uint64_t addr); uint64_t read64(uint64_t addr); void write8(uint64_t addr, uint8_t data); void write16(uint64_t addr, uint16_t data); void write32(uint64_t addr, uint32_t data); void write64(uint64_t addr, uint64_t data); uint64_t get_entry_point() const { return entry_point; } private: uint64_t entry_point; uint64_t to_offset(uint64_t addr); }; #endif