--- nono/debugger/debugger_private.h 2026/04/29 17:05:16 1.1.1.11 +++ nono/debugger/debugger_private.h 2026/04/29 17:05:59 1.1.1.15 @@ -11,9 +11,9 @@ #pragma once #include "debugger_defs.h" -#include "saddr.h" +#include "bus.h" -class IOContainerDevice; +class IODevice; enum class CPUState { @@ -38,13 +38,19 @@ class DebuggerMD // アドレス変換をする。 // MMUEnabled() が true であることは呼び出し側が確認すること。 - // lookup が true ならテーブルサーチまで行う。 - // 変換できなければ (uint64)-1 を返す。 - virtual uint64 TranslateAddr(saddr_t laddr, bool lookup) const = 0; + // 変換出来なければ BusAddr::BusErr を返す。 + // テーブルサーチを行ったら BusAddr::TableSearched を立てる。 + virtual busaddr TranslateAddr(busaddr laddr) const = 0; // 現在の命令先頭アドレスを返す virtual uint32 GetPC() const = 0; + // 現在の命令の直後の命令アドレスを返す。 + virtual uint32 GetNextPC(); + + // 最後に発生したベクタを取得し、リセットする + virtual int32 GetAndResetLastVector() = 0; + // ステップアウトを設定する virtual void SetStepOut() = 0; // ステップアウトなら true を返す @@ -77,11 +83,17 @@ class DebuggerMD // mem.laddr の位置の命令を一つ逆アセンブルする。 virtual std::string Disassemble(DebuggerMemoryStream& mem) = 0; + // ニーモニックに対応する機械語文字列を返す。(cmd_bi 用) + virtual std::string ParseInst(const std::string&) const = 0; + + // 例外フレームを表示する。 + virtual void PrintExceptionFrame(FILE *, busaddr); + // 機種名を取得する const std::string& GetName() const { return name; } // この CPU のバスを返す - IOContainerDevice *GetBus() const { return bus; } + IODevice *GetBus() const { return bus; } // このバスの論理アドレス幅 (ビット数) を返す int GetLASize() const { return lasize; } // このバスの物理アドレス幅 (ビット数) を返す @@ -92,21 +104,15 @@ class DebuggerMD // 最短の1命令のバイト数 uint inst_bytes {}; - // 命令が固定長ならそのバイト数、可変長なら 0 - uint inst_bytes_fixed {}; - - // 例外ブレーク。 - // 機種固有ではないが main と xp でそれぞれに必要なので、ここに持っておく。 - int bv_vector {}; protected: Debugger *parent {}; // 親クラス std::string name {}; // 機種名 - IOContainerDevice *bus {}; // 対応する外部バス - int lasize {}; // バスの論理アドレス幅 - int pasize {}; // バスの物理アドレス幅 + IODevice *bus {}; // 対応する外部バス + int lasize {}; // バスの論理アドレス幅 + int pasize {}; // バスの物理アドレス幅 }; #define NORM "\x1b[0m"