--- nono/debugger/debugger_m680x0.h 2026/04/29 17:04:30 1.1.1.1 +++ nono/debugger/debugger_m680x0.h 2026/04/29 17:04:33 1.1.1.2 @@ -1,63 +1,71 @@ // // nono -// Copyright (C) 2020 isaki@NetBSD.org +// Copyright (C) 2020 nono project +// Licensed under nono-license.txt // #pragma once #include "debugger_private.h" +#include "mpu680x0.h" #include "m68030.h" #include "m68030disasm.h" class DebuggerMD_m680x0 : public DebuggerMD { - typedef DebuggerMD inherited; + using inherited = DebuggerMD; public: - DebuggerMD_m680x0(Debugger *parg, m68kcpu *carg) - : inherited(parg) - { - cpu = carg; - } - virtual ~DebuggerMD_m680x0() { } - - void ReqSet(uint32 flag) { cpu->atomic_reqflag |= flag; } - void ReqClr(uint32 flag) { cpu->atomic_reqflag &= ~flag; } - - bool IsSuper() const { return cpu->reg.s; } - bool MMUEnabled() const { return cpu->mmu_enable; } - uint64 TranslateAddr(saddr_t laddr); - - uint32 GetPC() const { return RegPC; } - - void SetStepOut(); - bool IsStepOut() const; - uint64 GetRegAddr(const char *name) const; - void BackupRegs() { prev = cpu->reg; } - void ShowRegMain(Console *cons); - void ShowRegCtrl(Console *cons) {} - void ShowRegFPU(Console *cons); - void ShowRegMMU(Console *cons); - void ShowRegATC(Console *cons); - void ShowRegOther(Console *cons); + DebuggerMD_m680x0(Debugger *parent, m68kcpu *cpu); + ~DebuggerMD_m680x0() override; + + void ReqSet(uint32 flag) override { cpu->atomic_reqflag |= flag; } + void ReqClr(uint32 flag) override { cpu->atomic_reqflag &= ~flag; } + + bool IsSuper() const override { return cpu->reg.s; } + bool MMUEnabled() const override { return cpu->mmu_enable; } + uint64 TranslateAddr(saddr_t laddr) override; + + uint32 GetPC() const override { return RegPC; } + + void SetStepOut() override; + bool IsStepOut() const override; + uint64 GetRegAddr(const char *name) const override; + void BackupRegs() override { prev = cpu->reg; } + bool ShowRegister(Console *cons, const std::vector& args) + override; + const HelpMessages& GetRegisterHelp() const override; - bool CheckLEA(uint32 laddr) { return false; } + Object& GetBrHist() const override { return cpu->brhist; } + + bool CheckLEA(uint32 laddr) override { return false; } bool Disassemble(saddr_t laddr, - std::string& mnemonic, std::vector& bin); + std::string& mnemonic, std::vector& bin) override; std::string FormatDisasm(const std::string& mnemonic, - const std::vector& bin); + const std::vector& bin) override; std::string FormatDisasmLive(const std::string& mnemonic, - const std::vector& bin); + const std::vector& bin) override; private: m68kcpu *cpu = NULL; // CPU コア m68kreg prev {}; // 前回のレジスタセットのコピー + // 前回アクセス時の論理ページ。.addr == 0xffffffff なら無効。 + saddr_t last_lpage; + uint32 last_ppage; + const char *CondStr(const std::vector& ir); bool IsOPcc(uint16 op); bool IsDBcc(uint16 op); bool IsCond(uint16 op); + static const HelpMessages HelpMsgRegister; + void ShowRegMain(Console *cons); + void ShowRegFPU(Console *cons); + void ShowRegMMU(Console *cons); + void ShowRegATC(Console *cons); + void ShowRegOther(Console *cons); + uint32 so_a7 = 0; // ステップアウト判定用 uint16 so_sr = 0; };