--- nono/debugger/disasm.h 2026/04/29 17:04:30 1.1 +++ nono/debugger/disasm.h 2026/04/29 17:05:24 1.1.1.7 @@ -1,32 +1,28 @@ // // nono -// Copyright (C) 2020 isaki@NetBSD.org +// Copyright (C) 2020 nono project +// Licensed under nono-license.txt // -// 逆アセンブラ(共通部分) +// +// 逆アセンブラ (共通部分) +// #pragma once -#include "header.h" +#include "monitor.h" #include "debugger_private.h" -// 逆アセンブラ抽象クラス -class Disasm +// 逆アセンブラ(1行分)の基本クラス。 +class DisasmLine { public: - // コンストラクタ - Disasm(DebuggerMD *m) { - md = m; - } - virtual ~Disasm() { } + virtual ~DisasmLine(); - // laddr の位置を1命令逆アセンブルする。 + // mem の位置を1命令逆アセンブルする。 // 成功すれば true、失敗すれば false を返す? // 成功すれば text に出力文字列、ir に命令バイナリがセットされている。 - // - // Exec() 実装は、laddr が論理アドレスなら md->TranslateAddr() を呼んで - // 物理アドレスを取得し、vm_phys_peek8() で物理メモリを読み出すこと。 - virtual bool Exec(saddr_t laddr) = 0; + virtual bool Exec(DebuggerMemoryStream *memp) = 0; // 出力文字列(ダンプ) std::string dump {}; @@ -34,17 +30,23 @@ class Disasm // 出力文字列(命令) std::string text {}; + // 別名 (m88k で使う) + std::string alttext {}; + // この命令のバイナリ列 // (メモリイメージ順) std::vector bin {}; - protected: - // デバッガ(MD)クラス。TranslateAddr() のため。 - DebuggerMD *md {}; + // メモリアクセス + DebuggerMemoryStream *mem {}; - // 継承先の Exec() の先頭で呼び出してください。 - void ExecInit() { + protected: + // 継承先の Exec() の先頭で呼び出すこと。 + void ExecInit(DebuggerMemoryStream *mem_) { + mem = mem_; + dump.clear(); text.clear(); + alttext.clear(); bin.clear(); } };