diff --git a/src/harptool.cpp b/src/harptool.cpp index c3a61a37..ffceac46 100644 --- a/src/harptool.cpp +++ b/src/harptool.cpp @@ -207,7 +207,7 @@ 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, basicMachine; + bool showHelp, showStats, basicMachine, batch; /* Read the command line arguments. */ CommandLineArgFlag fh("-h", "--help", "", showHelp); @@ -215,6 +215,7 @@ int emu_main(int argc, char **argv) { CommandLineArgSetterfa("-a", "--arch", "", archString); CommandLineArgFlag fs("-s", "--stats", "", showStats); CommandLineArgFlag fb("-b", "--basic", "", basicMachine); + CommandLineArgFlag fi("-i", "--batch", "", batch); CommandLineArg::readArgs(argc, argv); @@ -240,7 +241,7 @@ int emu_main(int argc, char **argv) { Core core(arch, *dec, mu/*, ID in multicore implementations*/); RamMemDevice mem(imgFileName.c_str(), arch.getWordSize()); - ConsoleMemDevice console(arch.getWordSize(), cout, core); + ConsoleMemDevice console(arch.getWordSize(), cout, core, batch); mu.attach(mem, 0); mu.attach(console, 1ll<<(arch.getWordSize()*8 - 1)); diff --git a/src/include/help.h b/src/include/help.h index 1da55bff..9c495bbb 100644 --- a/src/include/help.h +++ b/src/include/help.h @@ -19,7 +19,8 @@ namespace HarpTools { " -c, --core RAM image\n" " -a, --arch Architecture string\n" " -s, --stats Print stats on exit.\n" - " -b, --basic Disable virtual memory.\n", + " -b, --basic Disable virtual memory.\n" + " -i, --batch Disable console input.\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 7ea8e5d0..79873658 100644 --- a/src/include/mem.h +++ b/src/include/mem.h @@ -55,7 +55,7 @@ namespace Harp { class Core; class ConsoleMemDevice : public MemDevice { public: - ConsoleMemDevice(Size wS, std::ostream &o, Core &core); + ConsoleMemDevice(Size wS, std::ostream &o, Core &core, bool batch = false); ~ConsoleMemDevice() {} //virtual Size wordSize() const { return wordSize; } diff --git a/src/mem.cpp b/src/mem.cpp index 18446d6b..73b6f3ac 100644 --- a/src/mem.cpp +++ b/src/mem.cpp @@ -187,11 +187,15 @@ void *Harp::consoleInputThread(void* arg_vp) { exit(4); } -ConsoleMemDevice::ConsoleMemDevice(Size wS, std::ostream &o, Core &core) : +ConsoleMemDevice::ConsoleMemDevice(Size wS, std::ostream &o, Core &core, + bool batch) : wordSize(wS), output(o), core(core), cBuf() { - pthread_t *thread = new pthread_t; - pthread_create(thread, NULL, consoleInputThread, (void*)this); + // Create a console input thread if we are running in interactive mode. + if (!batch) { + pthread_t *thread = new pthread_t; + pthread_create(thread, NULL, consoleInputThread, (void*)this); + } pthread_mutex_init(&cBufLock, NULL); } diff --git a/src/test/Makefile b/src/test/Makefile index 9e69e374..bf9afbb0 100644 --- a/src/test/Makefile +++ b/src/test/Makefile @@ -1,6 +1,6 @@ HARPLD = ../harptool -L HARPAS = ../harptool -A -HARPEM = ../harptool -E +HARPEM = ../harptool -E -i HARPDIS = ../harptool -D 4BARCH = 4b16/16/2/1