From ecce10b623b775fcdce88be960761e976d23f5a3 Mon Sep 17 00:00:00 2001 From: rkx1209 Date: Sat, 17 Mar 2018 18:51:50 +0900 Subject: [PATCH] Add banner --- ARMv8/ARMv8.cpp | 15 +++++++++------ ARMv8/Interpreter.cpp | 8 ++++---- Main.cpp | 14 ++++++++++++++ Nsemu.cpp | 4 +++- Svc.cpp | 2 ++ include/Util.hpp | 4 ++-- 6 files changed, 34 insertions(+), 13 deletions(-) diff --git a/ARMv8/ARMv8.cpp b/ARMv8/ARMv8.cpp index 767bbea..3d6c783 100644 --- a/ARMv8/ARMv8.cpp +++ b/ARMv8/ARMv8.cpp @@ -17,19 +17,22 @@ void RunLoop() { } void Dump() { + int cnt = 1; + ns_print ("CPU Dump:\n"); for (int r = 0; r < GPR_DUMMY; r++) { if (!X(r)) continue; if (r == GPR_LR) - ns_print ("LR\t"); + ns_print ("LR:\t"); else if (r == GPR_SP) - ns_print ("SP\t"); + ns_print ("SP:\t"); else - ns_print ("X%d\t", r); - ns_print ("0x%016lx\n", X(r)); + ns_print ("X%d:\t", r); + ns_print ("0x%016lx%c", X(r), cnt % 3 == 0 ? '\n' : '\t'); + cnt++; } - ns_print ("PC\t0x%016lx\n", PC); - ns_print ("NZCV\t0x%016lx\n", NZCV); + ns_print ("PC:\t0x%016lx\n", PC); + ns_print ("NZCV:\t0x%016lx\n", NZCV); } static uint64_t counter; diff --git a/ARMv8/Interpreter.cpp b/ARMv8/Interpreter.cpp index 1bc61bc..90f66c1 100644 --- a/ARMv8/Interpreter.cpp +++ b/ARMv8/Interpreter.cpp @@ -20,10 +20,9 @@ void Interpreter::Run() { while (Cpu::GetState () == Cpu::State::Running) { char c; //scanf("%c", &c); - Cpu::DumpMachine (); SingleStep (); - // if (counter >= 242) - // break; + if (counter >= 241) + break; counter++; // if (PC == 0x2d54) { // SingleStep (); @@ -32,6 +31,7 @@ void Interpreter::Run() { // break; // } } + Cpu::DumpMachine (); } /* ####### Callbacks ####### */ @@ -642,7 +642,7 @@ void IntprCallback::SetPCReg(unsigned int rt_idx) { /* Super Visor Call */ void IntprCallback::SVC(unsigned int svc_num) { //debug_print ("SVC: %u\n", svc_num); - ns_print ("SVC: %u\n", svc_num); + ns_print ("SVC: 0x%02x\n", svc_num); if (SVC::svc_handlers[svc_num]) SVC::svc_handlers[svc_num](); else diff --git a/Main.cpp b/Main.cpp index b88e6f2..5ff651d 100644 --- a/Main.cpp +++ b/Main.cpp @@ -62,6 +62,19 @@ void FinTrace() { fclose (Cpu::TraceOut); } +void Banner() { + + const char *banner = "\n\n"\ + "███╗ ██╗███████╗███████╗███╗ ███╗██╗ ██╗\n"\ + "████╗ ██║██╔════╝██╔════╝████╗ ████║██║ ██║\n"\ + "██╔██╗ ██║███████╗█████╗ ██╔████╔██║██║ ██║\n"\ + "██║╚██╗██║╚════██║██╔══╝ ██║╚██╔╝██║██║ ██║\n"\ + "██║ ╚████║███████║███████╗██║ ╚═╝ ██║╚██████╔╝\n"\ + "╚═╝ ╚═══╝╚══════╝╚══════╝╚═╝ ╚═╝ ╚═════╝ \n\n"\ + "NSEMU ver (0.1: unstable)\n\n"; + ns_print(banner); +} + enum optionIndex { UNKNOWN, HELP, ENABLE_TRACE }; @@ -124,6 +137,7 @@ printUsage: goto printUsage; } } + Banner (); nsemu->BootUp (parse.nonOption (0)); Nsemu::destroy (); FinTrace (); diff --git a/Nsemu.cpp b/Nsemu.cpp index a95bcf0..d23fd49 100644 --- a/Nsemu.cpp +++ b/Nsemu.cpp @@ -11,13 +11,15 @@ static void LoadNso(Nsemu *nsemu, string path) { } static void CpuThread() { + ns_print ("[CPU]\tLaunching ARMv8::VCPU.....\n"); Cpu::Init (); Cpu::SetState (Cpu::State::Running); + ns_print ("[CPU]\tRunning.....\n"); Cpu::Run (); } bool Nsemu::BootUp(const std::string& path) { - debug_print ("Booting... %s\n", path.c_str ()); + ns_print ("Booting... %s\n", path.c_str ()); Memory::InitMemmap (this); LoadNso (this, path); cpu_thread = std::thread (CpuThread); diff --git a/Svc.cpp b/Svc.cpp index d3bf313..097ebae 100644 --- a/Svc.cpp +++ b/Svc.cpp @@ -144,6 +144,7 @@ void ExitThread() { } uint64_t SleepThread(uint64_t ns) { + ns_print("SleepThread 0x%lx [ns]\n", ns); return 0; } @@ -257,6 +258,7 @@ uint64_t Break(uint64_t X0, uint64_t X1, uint64_t info) { } uint64_t OutputDebugString(uint64_t ptr, uint64_t size) { + ns_print("OutputDebugString addr=0x%lx, size=%llu\n", ptr, size); return 0; } diff --git a/include/Util.hpp b/include/Util.hpp index 888e115..128fded 100644 --- a/include/Util.hpp +++ b/include/Util.hpp @@ -13,8 +13,8 @@ enum RunLevel { RUN_LEVEL_DEBUG, }; -static RunLevel curlevel = RUN_LEVEL_DEBUG; -//static RunLevel curlevel = RUN_LEVEL_RELEASE; +//static RunLevel curlevel = RUN_LEVEL_DEBUG; +static RunLevel curlevel = RUN_LEVEL_RELEASE; static void util_print(RunLevel level, FILE *fp, const char *format, ...) { if (curlevel >= level) {