diff --git a/src/harptool.cpp b/src/harptool.cpp index e6bf4091..c3a61a37 100644 --- a/src/harptool.cpp +++ b/src/harptool.cpp @@ -207,13 +207,14 @@ int disasm_main(int argc, char **argv) { int emu_main(int argc, char **argv) { string archString("8w32/32/8/8"), imgFileName("a.out.bin"); - bool showHelp, showStats; + bool showHelp, showStats, basicMachine; /* Read the command line arguments. */ CommandLineArgFlag fh("-h", "--help", "", showHelp); CommandLineArgSetterfc("-c", "--core", "", imgFileName); CommandLineArgSetterfa("-a", "--arch", "", archString); CommandLineArgFlag fs("-s", "--stats", "", showStats); + CommandLineArgFlag fb("-b", "--basic", "", basicMachine); CommandLineArg::readArgs(argc, argv); @@ -235,7 +236,7 @@ int emu_main(int argc, char **argv) { return 1; } - MemoryUnit mu(4096, arch.getWordSize()); + MemoryUnit mu(4096, arch.getWordSize(), basicMachine); Core core(arch, *dec, mu/*, ID in multicore implementations*/); RamMemDevice mem(imgFileName.c_str(), arch.getWordSize()); diff --git a/src/include/help.h b/src/include/help.h index 52947572..1da55bff 100644 --- a/src/include/help.h +++ b/src/include/help.h @@ -17,7 +17,9 @@ namespace HarpTools { " Display contextual help.\n", *emuHelp = "HARP Emulator command line arguments:\n" " -c, --core RAM image\n" - " -a, --arch Architecture string\n", + " -a, --arch Architecture string\n" + " -s, --stats Print stats on exit.\n" + " -b, --basic Disable virtual memory.\n", *asmHelp = "HARP Assembler command line arguments:\n" " -a, --arch \n" " -o, --output \n", diff --git a/src/include/mem.h b/src/include/mem.h index 7b93cb95..7ea8e5d0 100644 --- a/src/include/mem.h +++ b/src/include/mem.h @@ -106,10 +106,11 @@ namespace Harp { class MemoryUnit { public: - MemoryUnit(Size pageSize, Size addrBytes) : - pageSize(pageSize), addrBytes(addrBytes), ad() + MemoryUnit(Size pageSize, Size addrBytes, bool disableVm = false) : + pageSize(pageSize), addrBytes(addrBytes), ad(), disableVm(disableVm) { - tlb[0] = TLBEntry(0, 077); + if (!disableVm) + tlb[0] = TLBEntry(0, 077); } void attach(MemDevice &m, Addr base); @@ -162,6 +163,8 @@ namespace Harp { TLBEntry tlbLookup(Addr vAddr, Word flagMask); Size pageSize, addrBytes; + + bool disableVm; }; }; diff --git a/src/mem.cpp b/src/mem.cpp index f151aa98..18446d6b 100644 --- a/src/mem.cpp +++ b/src/mem.cpp @@ -80,6 +80,7 @@ Byte *MemoryUnit::ADecoder::getPtr(Addr a, Size sz, Size wordSize) { MemDevice &m(doLookup(a, bit)); a &= (2<