#include "common.h"
#include "config.h"
#include "sim.h"
+#include "mmu.h"
#include "htif.h"
#include "disasm.h"
#include <cinttypes>
{
parse_isa_string(isa);
- mmu = new mmu_t(sim->mem, sim->memsz);
- mmu->set_processor(this);
+ mmu = new mmu_t(sim, this);
reset(true);
set_csr(CSR_MSTATUS, s);
set_privilege(PRV_S);
} else {
- state.pc = DEFAULT_MTVEC;
+ state.pc = state.mtvec;
state.mcause = t.cause();
state.mepc = epc;
if (t.has_badaddr())
case CSR_SCAUSE: state.scause = val; break;
case CSR_SBADADDR: state.sbadaddr = val; break;
case CSR_MEPC: state.mepc = val; break;
+ case CSR_MTVEC: state.mtvec = val >> 2 << 2; break;
case CSR_MSCRATCH: state.mscratch = val; break;
case CSR_MCAUSE: state.mcause = val; break;
case CSR_MBADADDR: state.mbadaddr = val; break;
case CSR_MIMPID: return 0;
case CSR_MVENDORID: return 0;
case CSR_MHARTID: return id;
- case CSR_MTVEC: return DEFAULT_MTVEC;
+ case CSR_MTVEC: return state.mtvec;
case CSR_MEDELEG: return state.medeleg;
case CSR_MIDELEG: return state.mideleg;
case CSR_MTOHOST: