--- nono/debugger/debugger.cpp 2026/04/29 17:05:24 1.1.1.15 +++ nono/debugger/debugger.cpp 2026/04/29 17:05:28 1.1.1.16 @@ -69,7 +69,7 @@ Debugger::Debugger() // メモリダンプモニタ for (int i = 0, end = memdump_monitor.size(); i < end; i++) { - int objid = OBJ_MPU_MEMDUMP(i); + uint objid = OBJ_MPU_MEMDUMP(i); int monid = ID_MONITOR_MEMDUMP(i); memdump_monitor[i].reset(new MemdumpMonitor(objid, monid)); } @@ -77,7 +77,7 @@ Debugger::Debugger() if (gMainApp.Has(VMCap::LUNA)) { // XP 空間のメモリダンプモニタ for (int i = 0, end = xpmemdump_monitor.size(); i < end; i++) { - int objid = OBJ_XP_MEMDUMP(i); + uint objid = OBJ_XP_MEMDUMP(i); int monid = ID_MONITOR_XPMEMDUMP(i); xpmemdump_monitor[i].reset(new MemdumpMonitor(objid, monid)); } @@ -241,6 +241,8 @@ Debugger::Init() void Debugger::ThreadRun() { + SetThreadAffinityHint(AffinityClass::Light); + // disp_regs の初期値設定。 // 再接続でも継続してていいような気がするのでループ外で初期化。 disp_regs.clear(); @@ -330,14 +332,16 @@ Debugger::Terminate() static int readfunc(void *cookie, char *buf, int bufsize) { - return ((Debugger *)cookie)->ReadFunc(buf, bufsize); + auto debugger = reinterpret_cast(cookie); + return debugger->ReadFunc(buf, bufsize); } // funopen の write コールバック static int writefunc(void *cookie, const char *buf, int len) { - return ((Debugger *)cookie)->WriteFunc(buf, len); + auto debugger = reinterpret_cast(cookie); + return debugger->WriteFunc(buf, len); } // funopen の read コールバックの本体 @@ -885,7 +889,9 @@ Debugger::CheckBreakpointInst(breakpoint // bi_inst_bytes が読み込んだバイト数(bi_inst の左からの有効バイト数)。 // bi_need_bytes が現在のブレークポイントで読み込む必要のあるバイト数。 - busaddr laddr(bp.md->GetPC(), busaddr::Fetch, bp.md->IsSuper()); + busaddr laddr = busaddr(bp.md->GetPC()) + | BusAddr::Fetch + | busaddr::SU(bp.md->IsSuper()); DebuggerMemoryStream mem(bp.md, laddr); // 必要なバイト数に達するまで読み足す @@ -1713,9 +1719,9 @@ Debugger::cmd_bv() int bi = AddBreakpoint(bp, cpustr); if (bi == -1) { fprintf(cons, "no free breakpoints\n"); - } else { - fprintf(cons, "breakpoint #%d added\n", bi); + return CmdAct::Stay; } + fprintf(cons, "breakpoint #%d added\n", bi); // この CPU 側に、すでに来ている例外をクリア。 // ブレークポイント設定の有無に関わらず例外が起きたら CPU 側から常に @@ -2191,15 +2197,15 @@ Debugger::GetAddr(busaddr *sa, bool defa if (mod_prog < 0) { mod_prog = !default_data; } - sa->SetSuper(mod_super); - sa->SetData(!mod_prog); + sa->ChangeSuper(mod_super); + sa->ChangeData(!mod_prog); // アドレス if (ParseAddr(str.c_str() + addrpos, &addr) == false) { return false; } // 命令境界に丸める - sa->SetAddr(addr & ~(curmd->inst_bytes - 1)); + sa->ChangeAddr(addr & ~(curmd->inst_bytes - 1)); return true; } @@ -2240,7 +2246,9 @@ Debugger::cmd_z() } else { // 可変長なら逆アセンブルしてみるしか。 - busaddr laddr(curmd->GetPC(), busaddr::Fetch, curmd->IsSuper()); + busaddr laddr = busaddr(curmd->GetPC()) + | BusAddr::Fetch + | busaddr::SU(curmd->IsSuper()); DebuggerMemoryStream mem(curmd, laddr); // XXX 失敗したらどうすべ curmd->Disassemble(mem); @@ -2267,22 +2275,22 @@ void Debugger::ResetStickyAddr() { pc = curmd->GetPC(); - m_last_addr.Set(pc, busaddr::Read, curmd->IsSuper()); - d_last_addr.Set(pc, busaddr::Fetch, curmd->IsSuper()); + m_last_addr = busaddr(pc) | BusAddr::Read | busaddr::SU(curmd->IsSuper()); + d_last_addr = busaddr(pc) | BusAddr::Fetch | busaddr::SU(curmd->IsSuper()); } // 逆アセンブル: d [[SU:] []] (論理) Debugger::CmdAct Debugger::cmd_d() { - return cmd_d_common(busaddr::Logical); + return cmd_d_common(BusAddr::Logical); } // 逆アセンブル: D [ []] (物理) Debugger::CmdAct Debugger::cmd_D() { - return cmd_d_common(busaddr::Physical); + return cmd_d_common(BusAddr::Physical); } // 逆アセンブル共通 @@ -2407,14 +2415,14 @@ Debugger::cmd_L() Debugger::CmdAct Debugger::cmd_m() { - return cmd_m_common(busaddr::Logical); + return cmd_m_common(BusAddr::Logical); } // メモリダンプ: M [ []] (物理) Debugger::CmdAct Debugger::cmd_M() { - return cmd_m_common(busaddr::Physical); + return cmd_m_common(BusAddr::Physical); } // メモリダンプ共通 @@ -2478,7 +2486,9 @@ Debugger::cmd_minus() std::string addrbuf; std::string textbuf; - busaddr laddr(pc, busaddr::Fetch, curmd->IsSuper()); + busaddr laddr = busaddr(pc) + | BusAddr::Fetch + | busaddr::SU(curmd->IsSuper()); DebuggerMemoryStream mem(curmd, laddr); // アドレス if (mem.FormatAddr(addrbuf) == false) { @@ -2539,7 +2549,9 @@ Debugger::cmd_n_common(bool trace) void Debugger::SetNBreakpoint() { - busaddr laddr(curmd->GetPC(), busaddr::Fetch, curmd->IsSuper()); + busaddr laddr = busaddr(curmd->GetPC()) + | BusAddr::Fetch + | busaddr::SU(curmd->IsSuper()); DebuggerMemoryStream mem(curmd, laddr); // 命令がサブルーチンやトラップなどステップインできる命令か。 @@ -2586,12 +2598,12 @@ Debugger::CmdAct Debugger::cmd_show() { if (args.size() != 2) { - std::vector list; + std::vector list; // 登録されているモニタだけを列挙 // (登録されていてもサブウィンドウの ID を持っているものは除外) for (const auto mon : gMonitorManager->GetList()) { - int id = mon->GetId(); + uint id = mon->GetId(); if (id <= ID_MONITOR_END) { list.push_back(id); } @@ -2609,7 +2621,7 @@ Debugger::cmd_show() std::string name = args[1]; for (auto mon : gMonitorManager->GetList()) { - int id = mon->GetId(); + uint id = mon->GetId(); const auto& aliases = gMonitorManager->GetAliases(id); bool matched = false;