--- nono/m680x0/testdis.cpp 2026/04/29 17:04:40 1.1.1.4 +++ nono/m680x0/testdis.cpp 2026/04/29 17:05:27 1.1.1.8 @@ -5,6 +5,7 @@ // #include "m68030disasm.h" +#include "debugger_memory.h" #include "mystring.h" #include @@ -826,37 +827,24 @@ struct { { { 0xf350 }, "frestore (a0)" }, }; -static uint8 mem[1024]; +static uint8 ram[1024]; static int failed; -uint64 -DebuggerMD::PeekFetch(saddr_t laddr) -{ - uint32 addr; - uint32 data; - - addr = laddr.addr; - if (addr >= sizeof(mem)) { - abort(); - } - // XXX endian - data = mem[(addr ) ^ 1] << 8; - data |= mem[(addr + 1) ^ 1]; - return data; -} +#include "test_debugger_memory.cpp" // リンカを通すためのダミー -extern uint64 m68030_mmu_translate_peek(m68kcpu *, uint32, uint); -uint64 -m68030_mmu_translate_peek(m68kcpu *cpu, uint32 addr, uint fc) -{ - return -1; -} +DisasmLine::~DisasmLine() { } +DebuggerMD::~DebuggerMD() { } int main(int ac, char *av[]) { - saddr_t saddr; + busaddr saddr; + + // DebuggerMD (の継承クラス)を用意するのは芋づる式に大変なので、 + // 中でアクセスする変数だけ強引に用意する。 + DebuggerMD *md = (DebuggerMD *)calloc(1, sizeof(DebuggerMD)); + md->inst_bytes = 2; for (int i = 0; i < countof(table); i++) { std::string expected = table[i].expected; @@ -869,15 +857,16 @@ main(int ac, char *av[]) } // 全体を初期化 - memset(mem, 0xdd, sizeof(mem)); + memset(ram, 0xdd, sizeof(ram)); // 100番地から命令列を書き込む for (int j = 0; j < inst.size(); j++) { - *(uint16 *)(mem + 0x100 + j * 2) = inst[j]; + *(uint16 *)(ram + 0x100 + j * 2) = inst[j]; } // 検査 - m680x0disasm dis(NULL); - saddr.addr = 0x100; - dis.Exec(saddr); + saddr = busaddr(0x100); + m680x0disasm dis; + DebuggerMemoryStream mem(NULL, saddr); + dis.Exec(&mem); // 照合 if (dis.text != expected) { printf(">%s expects \"%s\" but \"%s\"\n", inst_str.c_str(),