--- nono/debugger/memdump.h 2026/04/29 17:05:16 1.1.1.2 +++ nono/debugger/memdump.h 2026/04/29 17:05:32 1.1.1.5 @@ -10,11 +10,10 @@ #pragma once -#include "monitor.h" +#include "object.h" #include "debugger_memory.h" class DisasmLine; -class IOContainerDevice; // メモリダンプ/逆アセンブルをする人。 class Memdump : public Object @@ -30,19 +29,21 @@ class Memdump : public Object M68030PageShort, M68030PageLong, + M68040TableDesc, + M68040PageDesc, M88200Page, - M68030Disasm, + M680x0Disasm, M88100Disasm, HD64180Disasm, }; protected: // 継承クラスから呼ばれるほう。bus, md は後から指定するので不要。 - Memdump(int objid_); + explicit Memdump(uint objid_); public: // メモリダンプ用にデバッガから呼ばれるほう - Memdump(DebuggerMD *md_); + explicit Memdump(DebuggerMD *md_); // 逆アセンブル用にデバッガから呼ばれるほう Memdump(DebuggerMD *md_, CPUArch asm_arch); @@ -50,17 +51,12 @@ class Memdump : public Object void InitMD(DebuggerMD *md_); - uint32 GetAddr() const { return saddr.GetAddr(); } + busaddr GetAddr() const { return saddr; } - // saddr を代入 - void SetAddr(const saddr_t& saddr_); - // 個別に設定 + // busaddr を代入 + void SetAddr(busaddr saddr_); + // アドレスを設定 void SetAddr(uint32 laddr_); - void SetSuper(bool super_); - void SetData(bool data_); - // モードを設定 - void SetAccessMode(MemoryMode access_mode_); - void SetLookupMode(MMULookupMode lookup_mode_); // アドレスをバイト単位で加算(減算) void Offset(int bytes); @@ -77,7 +73,7 @@ class Memdump : public Object // メモリの内容を(越権的に)読み出す。ここでは長さは bytes で指定。 uint64 Peek(uint32 paddr_, int bytes) const; // メモリの内容を(越権的に)書き換える。ここでは長さは bytes で指定。 - uint64 Poke(uint32 paddr_, uint32 data, int bytes); + bool Poke(uint32 paddr_, uint32 data, int bytes); // このアドレスが Poke 可能かどうかを返す。 bool CanPoke(uint32 paddr_) const; @@ -85,6 +81,8 @@ class Memdump : public Object void Print(FILE *cons, int row); protected: + void MaskAddr(); + std::vector Read(DebuggerMemoryStream&, int bytes); std::string DumpChar(const std::vector&); std::string DumpHex(const std::vector&); @@ -92,9 +90,7 @@ class Memdump : public Object std::string Dump88200Page(const std::vector&); // アドレス等 - saddr_t saddr {}; - MemoryMode access_mode {}; - MMULookupMode lookup_mode {}; + busaddr saddr {}; // 表示形式 Format fmt {}; @@ -109,9 +105,11 @@ class Memdump : public Object int inst_bytes {}; DebuggerMD *md {}; - IOContainerDevice *bus {}; + IODevice *bus {}; static const char * const dtname[4]; + static const char * const udtname[4]; + static const char * const pdtname[4]; }; // メモリダンプ/逆アセンブルモニタ @@ -119,7 +117,7 @@ class MemdumpMonitor : public Memdump { using inherited = Memdump; public: - MemdumpMonitor(int objid_, int monid_); + MemdumpMonitor(uint objid_, int monid_); ~MemdumpMonitor() override; int GetLineOffset(int n) const; @@ -131,16 +129,18 @@ class MemdumpMonitor : public Memdump void MonitorUpdateMemdump(TextScreen&, DebuggerMemoryStream&); void MonitorUpdateDisasm(TextScreen&, DebuggerMemoryStream&); void Update68030PageShort(TextScreen&, int, int, const std::vector&); + void Update68040TableDesc(TextScreen&, int, int, const std::vector&); + void Update68040PageDesc(TextScreen&, int, int, const std::vector&); void Update88200Page(TextScreen&, int, int, const std::vector&); - // 次の命令開始アドレス。少し変則的だが、一番上の行を1行目として、 - // [0] が2行目のアドレス、 - // [1] が3行目のアドレス、 + // 命令開始アドレス。 + // [0] が1行目のアドレス、 + // [1] が2行目のアドレス、 // : - // [row - 2] が表示されてる最下行のアドレス、 - // [row - 1] が最下行の次のアドレス、 + // [row - 1] が表示されてる最下行のアドレス、 + // [row] が最下行の次のアドレス、 // を指している。 std::vector nextaddr {}; - Monitor monitor { this }; + Monitor *monitor {}; };