--- nono/debugger/debugger_private.h 2026/04/29 17:04:37 1.1.1.3 +++ nono/debugger/debugger_private.h 2026/04/29 17:04:40 1.1.1.4 @@ -18,23 +18,24 @@ using HelpMessages = std::vector args {}; - uint32 pc = 0; - uint32 nextpc = 0; + uint32 pc {}; std::vector ir {}; // この後実行する命令のバイナリ列 std::array bpoint {}; - bool bc_enable = false; - uint32 bc_addr = 0; - uint32 bi_inst = 0; - int bi_inst_bytes = 0; - int bi_need_bytes = 0; + bool bc_enable {}; + uint32 bc_addr {}; + uint32 bi_inst {}; + int bi_inst_bytes {}; + int bi_need_bytes {}; int bv_vector = -1; - uint32 d_last_addr = 0; - uint32 m_last_addr = 0; - bool n_enable = false; - bool n_breakenable = false; - uint32 n_breakaddr = 0; - uint32 n_count = 0; - bool s_enable = false; - uint32 s_count = 0; - bool so_enable = false; - bool t_enable = false; - uint32 t_count = 0; + uint32 d_last_addr {}; + uint32 m_last_addr {}; + bool n_enable {}; + uint32 n_breakaddr {}; + uint32 n_count {}; + bool s_enable {}; + uint32 s_count {}; + bool so_enable {}; + bool t_enable {}; + uint32 t_count {}; // 一度VMを実行して再びプロンプトに来たら true - bool is_continued = false; + bool is_continued {}; + + // プロンプトで表示するレジスタ群 + std::vector disp_regs {}; static std::vector cmdtable; }; @@ -223,8 +240,8 @@ class Debugger final class DebuggerMD { public: - DebuggerMD(Debugger *arg) { - parent = arg; + DebuggerMD(Debugger *parent_) { + parent = parent_; } virtual ~DebuggerMD() { } @@ -246,11 +263,19 @@ class DebuggerMD // 現在の命令先頭アドレスを返す virtual uint32 GetPC() const = 0; + // MMU 状態を考慮して、プログラム空間の指定のアドレスから1命令語を + // 読み出して、下(右)詰めにして返す。 + // 命令語が可変長な CPU では最短命令長 (この命令の全ワードではない)。 + uint64 PeekFetch(saddr_t laddr); + // ステップアウトを設定する virtual void SetStepOut() = 0; // ステップアウトなら true を返す virtual bool IsStepOut() const = 0; + // この命令がステップイン出来るなら true を返す (cmd_n 用) + virtual bool IsOpStepIn(uint32 op) = 0; + // name で示されるのレジスタの値を返す。 // メモリダンプで指定するケースを想定しているので、明らかにアドレスでは // ないレジスタは含まなくてよい (m680x0 の SR など)。ただし Dn は含めて @@ -293,13 +318,18 @@ class DebuggerMD virtual std::string FormatDisasmLive(const std::string& mnemonic, const std::vector& bin) = 0; + // 例外のベクタ番号から名前を取得。 + virtual const char *GetExceptionName(int vector) const = 0; + // ベクタ番号の最大値 (+1) - int vector_max = 0; - // 1命令の最小ビット数 - uint inst_bits = 0; + int vector_max {}; + // 最短の1命令のバイト数 + uint inst_bytes {}; + // 命令が固定長ならそのバイト数、可変長なら 0 + uint inst_bytes_fixed {}; protected: - Debugger *parent; // 親クラス + Debugger *parent {}; // 親クラス }; #define NORM "\x1b[0m"