|
|
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.