Add banner

This commit is contained in:
rkx1209 2018-03-17 18:51:50 +09:00
parent 0d9d94f1ec
commit ecce10b623
6 changed files with 34 additions and 13 deletions

View file

@ -17,19 +17,22 @@ void RunLoop() {
} }
void Dump() { void Dump() {
int cnt = 1;
ns_print ("CPU Dump:\n");
for (int r = 0; r < GPR_DUMMY; r++) { for (int r = 0; r < GPR_DUMMY; r++) {
if (!X(r)) if (!X(r))
continue; continue;
if (r == GPR_LR) if (r == GPR_LR)
ns_print ("LR\t"); ns_print ("LR:\t");
else if (r == GPR_SP) else if (r == GPR_SP)
ns_print ("SP\t"); ns_print ("SP:\t");
else else
ns_print ("X%d\t", r); ns_print ("X%d:\t", r);
ns_print ("0x%016lx\n", X(r)); ns_print ("0x%016lx%c", X(r), cnt % 3 == 0 ? '\n' : '\t');
cnt++;
} }
ns_print ("PC\t0x%016lx\n", PC); ns_print ("PC:\t0x%016lx\n", PC);
ns_print ("NZCV\t0x%016lx\n", NZCV); ns_print ("NZCV:\t0x%016lx\n", NZCV);
} }
static uint64_t counter; static uint64_t counter;

View file

@ -20,10 +20,9 @@ void Interpreter::Run() {
while (Cpu::GetState () == Cpu::State::Running) { while (Cpu::GetState () == Cpu::State::Running) {
char c; char c;
//scanf("%c", &c); //scanf("%c", &c);
Cpu::DumpMachine ();
SingleStep (); SingleStep ();
// if (counter >= 242) if (counter >= 241)
// break; break;
counter++; counter++;
// if (PC == 0x2d54) { // if (PC == 0x2d54) {
// SingleStep (); // SingleStep ();
@ -32,6 +31,7 @@ void Interpreter::Run() {
// break; // break;
// } // }
} }
Cpu::DumpMachine ();
} }
/* ####### Callbacks ####### */ /* ####### Callbacks ####### */
@ -642,7 +642,7 @@ void IntprCallback::SetPCReg(unsigned int rt_idx) {
/* Super Visor Call */ /* Super Visor Call */
void IntprCallback::SVC(unsigned int svc_num) { void IntprCallback::SVC(unsigned int svc_num) {
//debug_print ("SVC: %u\n", 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]) if (SVC::svc_handlers[svc_num])
SVC::svc_handlers[svc_num](); SVC::svc_handlers[svc_num]();
else else

View file

@ -62,6 +62,19 @@ void FinTrace() {
fclose (Cpu::TraceOut); 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 { enum optionIndex {
UNKNOWN, HELP, ENABLE_TRACE UNKNOWN, HELP, ENABLE_TRACE
}; };
@ -124,6 +137,7 @@ printUsage:
goto printUsage; goto printUsage;
} }
} }
Banner ();
nsemu->BootUp (parse.nonOption (0)); nsemu->BootUp (parse.nonOption (0));
Nsemu::destroy (); Nsemu::destroy ();
FinTrace (); FinTrace ();

View file

@ -11,13 +11,15 @@ static void LoadNso(Nsemu *nsemu, string path) {
} }
static void CpuThread() { static void CpuThread() {
ns_print ("[CPU]\tLaunching ARMv8::VCPU.....\n");
Cpu::Init (); Cpu::Init ();
Cpu::SetState (Cpu::State::Running); Cpu::SetState (Cpu::State::Running);
ns_print ("[CPU]\tRunning.....\n");
Cpu::Run (); Cpu::Run ();
} }
bool Nsemu::BootUp(const std::string& path) { 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); Memory::InitMemmap (this);
LoadNso (this, path); LoadNso (this, path);
cpu_thread = std::thread (CpuThread); cpu_thread = std::thread (CpuThread);

View file

@ -144,6 +144,7 @@ void ExitThread() {
} }
uint64_t SleepThread(uint64_t ns) { uint64_t SleepThread(uint64_t ns) {
ns_print("SleepThread 0x%lx [ns]\n", ns);
return 0; 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) { uint64_t OutputDebugString(uint64_t ptr, uint64_t size) {
ns_print("OutputDebugString addr=0x%lx, size=%llu\n", ptr, size);
return 0; return 0;
} }

View file

@ -13,8 +13,8 @@ enum RunLevel {
RUN_LEVEL_DEBUG, RUN_LEVEL_DEBUG,
}; };
static RunLevel curlevel = RUN_LEVEL_DEBUG; //static RunLevel curlevel = RUN_LEVEL_DEBUG;
//static RunLevel curlevel = RUN_LEVEL_RELEASE; static RunLevel curlevel = RUN_LEVEL_RELEASE;
static void util_print(RunLevel level, FILE *fp, const char *format, ...) { static void util_print(RunLevel level, FILE *fp, const char *format, ...) {
if (curlevel >= level) { if (curlevel >= level) {