--- nono/m680x0/testdis.cpp 2026/04/29 17:04:40 1.1.1.4 +++ nono/m680x0/testdis.cpp 2026/04/29 17:04:44 1.1.1.5 @@ -826,23 +826,16 @@ struct { { { 0xf350 }, "frestore (a0)" }, }; -static uint8 mem[1024]; +static uint8 ram[1024]; static int failed; uint64 -DebuggerMD::PeekFetch(saddr_t laddr) +vm_phys_peek_8(uint32 addr) { - uint32 addr; - uint32 data; + assertmsg(addr < sizeof(ram), "addr=0x%x", addr); - addr = laddr.addr; - if (addr >= sizeof(mem)) { - abort(); - } // XXX endian - data = mem[(addr ) ^ 1] << 8; - data |= mem[(addr + 1) ^ 1]; - return data; + return ram[addr ^ 1]; } // リンカを通すためのダミー @@ -852,12 +845,19 @@ m68030_mmu_translate_peek(m68kcpu *cpu, { return -1; } +Disasm::~Disasm() { } +DebuggerMD::~DebuggerMD() { } int main(int ac, char *av[]) { saddr_t saddr; + // DebuggerMD (の継承クラス)を用意するのは芋づる式に大変なので、 + // 中でアクセスする変数だけ強引に用意する。 + DebuggerMD *md = (DebuggerMD *)malloc(sizeof(DebuggerMD)); + md->inst_bytes = 2; + for (int i = 0; i < countof(table); i++) { std::string expected = table[i].expected; std::vector inst = table[i].inst; @@ -869,15 +869,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 = 0x100; + DebuggerMemoryStream mem(md, saddr, MemoryMode::Physical); + m680x0disasm dis(mem); + dis.Exec(); // 照合 if (dis.text != expected) { printf(">%s expects \"%s\" but \"%s\"\n", inst_str.c_str(),