Files
tatu/sim/verilator/memory.h
2026-06-27 07:07:07 +00:00

43 lines
969 B
C++

#ifndef MEMORY_H
#define MEMORY_H
#include <cstdint>
#include <vector>
#include <string>
#define TOHOST_ADDR 0x80001000ULL
#define FROMHOST_ADDR 0x80001040ULL
#define MEM_BASE 0x80000000ULL
#define MEM_SIZE (64 * 1024 * 1024) // 64MB
class Memory {
private:
std::vector<uint8_t> 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; }
uint64_t get_tohost_addr() const { return tohost_addr; }
private:
uint64_t entry_point;
uint64_t tohost_addr;
uint64_t to_offset(uint64_t addr);
};
#endif