|
|
1.1 ! root 1: // ! 2: // nono ! 3: // Copyright (C) 2019 [email protected] ! 4: // ! 5: ! 6: #pragma once ! 7: ! 8: #include "m68030.h" ! 9: #include "disasm.h" ! 10: ! 11: // 逆アセンブル、メモリダンプを行う際のアドレス解決方法を指定する。 ! 12: enum MemdumpMode { ! 13: Physical = 0, // 物理アドレス ! 14: Logical_atc, // 論理アドレス (ただし TT、ATC のみ検索) ! 15: Logical_search, // 論理アドレス (TT、ATC、テーブルサーチすべて行う) ! 16: }; ! 17: ! 18: // ! 19: // 逆アセンブルを表示する。 ! 20: // ! 21: class DisasmLine ! 22: { ! 23: public: ! 24: DisasmLine(m68kcpu *arg, uint32 addr, MemdumpMode mode); ! 25: virtual ~DisasmLine() { } ! 26: ! 27: // 1行分の逆アセンブル文字列を返す。改行は付加していない。 ! 28: std::string Output(); ! 29: ! 30: // 表示した次のアドレスを取得する ! 31: uint32 GetNextAddr() const { return laddr; } ! 32: ! 33: private: ! 34: m68kcpu *cpu = NULL; ! 35: Disasm disasm {}; ! 36: uint32 laddr = 0; ! 37: MemdumpMode mode {}; ! 38: uint fc2 = 0; ! 39: uint64 paddr = 0; ! 40: uint32 last_lpage = 0; ! 41: uint last_fc2 = 0; ! 42: bool is_logical = false; ! 43: }; ! 44: ! 45: // ! 46: // メモリダンプを表示する。 ! 47: // ! 48: // このインスタンスは長期間維持してはいけない。cpu->mmu_tc の状態を参照して ! 49: // メンバ変数と比較する処理があるので、インスタンスの生存期間中に CPU の ! 50: // 状態が変わることは想定していない。基本的に1回のダンプ表示(数行程度)で ! 51: // 寿命を終えること。 ! 52: // ! 53: class MemdumpLine ! 54: { ! 55: public: ! 56: MemdumpLine(m68kcpu *arg, uint32 addr, MemdumpMode mode); ! 57: virtual ~MemdumpLine() { } ! 58: ! 59: // 1行分のメモリダンプ文字列を返す。改行は付加していない。 ! 60: std::string Output(); ! 61: ! 62: // 表示した次のアドレスを取得する ! 63: uint32 GetNextAddr() const { return laddr; } ! 64: ! 65: private: ! 66: m68kcpu *cpu = NULL; ! 67: uint32 laddr = 0; ! 68: MemdumpMode mode {}; ! 69: uint fc2 = 0; ! 70: uint64 paddr = 0; ! 71: uint32 last_lpage = 0; ! 72: uint last_fc2 = 0; ! 73: bool is_logical = false; ! 74: };
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.