--- nono/m88xx0/testdis.cpp 2026/04/29 17:05:11 1.1.1.4 +++ nono/m88xx0/testdis.cpp 2026/04/29 17:05:56 1.1.1.8 @@ -5,6 +5,7 @@ // #include "m88100disasm.h" +#include "debugger_memory.h" #include "mpu.h" #include "mystring.h" @@ -140,19 +141,54 @@ struct { O(0xd632ffff, "bb0.n #17,r18,0x000000fc"), O(0xda32ffff, "bb1 #17,r18,0x000000fc"), O(0xde32ffff, "bb1.n #17,r18,0x000000fc"), - O(0xe852ffff, "bcnd eq0,r18,0x000000fc"), - O(0xec52ffff, "bcnd.n eq0,r18,0x000000fc"), - // bcnd の M5 - O(0xe9b2ffff, "bcnd ne0,r18,0x000000fc"), - O(0xe832ffff, "bcnd gt0,r18,0x000000fc"), - O(0xe992ffff, "bcnd lt0,r18,0x000000fc"), - O(0xe872ffff, "bcnd ge0,r18,0x000000fc"), - O(0xe9d2ffff, "bcnd le0,r18,0x000000fc"), - - T(0xf2328034, "clr r17,r18,1<20>", "{bitclr r17,r18,#20}"), - T(0xf2328274, "clr r17,r18,19<20>", "{bfclr r17,r18,19<20>}"), - T(0xf2328834, "set r17,r18,1<20>", "{bitset r17,r18,#20}"), - T(0xf2328a74, "set r17,r18,19<20>", "{bfset r17,r18,19<20>}"), + +#define L "0x000000fc" + T(0xe852ffff, "bcnd eq0,r18," L, "{br (r18==0|(float)r18==+0)," L "}"), + T(0xec52ffff, "bcnd.n eq0,r18," L, "{br.n (r18==0|(float)r18==+0)," L "}"), +#define A(m5, s1) M(0xe8000000, m5, s1, 0xffff) + T(A(0x00, 2), "bcnd #0, r2, " L, "{br false," L "}"), + T(A(0x01, 2), "bcnd gt0,r2, " L, "{br (r2>0|(float)r2>+0)," L "}"), + T(A(0x02, 2), "bcnd eq0,r2, " L, "{br (r2==0|(float)r2==+0)," L "}"), + T(A(0x03, 2), "bcnd ge0,r2, " L, "{br (r2>=0|(float)r2>=+0)," L "}"), + T(A(0x04, 2), "bcnd #4, r2, " L, "{br ((float)r2<-0)," L "}"), + T(A(0x05, 2), "bcnd #5, r2, " L, "{br ((float)r2!=0)," L "}"), + O(A(0x06, 2), "bcnd #6, r2, " L), + T(A(0x07, 2), "bcnd #7, r2, " L, "{br (r2!=0x80000000)," L "}"), + T(A(0x08, 2), "bcnd #8, r2, " L, "{br (r2==0x80000000)," L "}"), + O(A(0x09, 2), "bcnd #9, r2, " L), + T(A(0x0a, 2), "bcnd #10,r2, " L, "{br ((float)r2==0)," L "}"), + T(A(0x0b, 2), "bcnd #11,r2, " L, "{br ((float)r2>=-0)," L "}"), + T(A(0x0c, 2), "bcnd lt0,r2, " L, "{br (r2<0|(float)r2<+0)," L "}"), + T(A(0x0d, 2), "bcnd ne0,r2, " L, "{br (r2!=0|(float)r2!=+0)," L "}"), + T(A(0x0e, 2), "bcnd le0,r2, " L, "{br (r2<=0|(float)r2<=+0)," L "}"), + T(A(0x0f, 2), "bcnd #15,r2, " L, "{br " L "}"), + O(A(0x10, 2), "bcnd #16,r2, " L), + O(A(0x1f, 2), "bcnd #31,r2, " L), + T(A(0x00, 0), "bcnd #0, r0, " L, "{br false," L "}"), + T(A(0x01, 0), "bcnd gt0,r0, " L, "{br false," L "}"), + T(A(0x02, 0), "bcnd eq0,r0, " L, "{br " L "}"), + T(A(0x03, 0), "bcnd ge0,r0, " L, "{br " L "}"), + T(A(0x04, 0), "bcnd #4, r0, " L, "{br false," L "}"), + T(A(0x05, 0), "bcnd #5, r0, " L, "{br false," L "}"), + T(A(0x06, 0), "bcnd #6, r0, " L, "{br " L "}"), + T(A(0x07, 0), "bcnd #7, r0, " L, "{br " L "}"), + T(A(0x08, 0), "bcnd #8, r0, " L, "{br false," L "}"), + T(A(0x09, 0), "bcnd #9, r0, " L, "{br false," L "}"), + T(A(0x0a, 0), "bcnd #10,r0, " L, "{br " L "}"), + T(A(0x0b, 0), "bcnd #11,r0, " L, "{br " L "}"), + T(A(0x0c, 0), "bcnd lt0,r0, " L, "{br false," L "}"), + T(A(0x0d, 0), "bcnd ne0,r0, " L, "{br false," L "}"), + T(A(0x0e, 0), "bcnd le0,r0, " L, "{br " L "}"), + T(A(0x0f, 0), "bcnd #15,r0, " L, "{br " L "}"), + O(A(0x10, 0), "bcnd #16,r0, " L), + O(A(0x1f, 0), "bcnd #31,r0, " L), +#undef A +#undef L + + T(0xf2328034, "clr r17,r18,1<20>", "{and r17,r18,0xffefffff}"), + T(0xf2328274, "clr r17,r18,19<20>", "{and r17,r18,0x000fffff}"), + T(0xf2328834, "set r17,r18,1<20>", "{or r17,r18,0x00100000}"), + T(0xf2328a74, "set r17,r18,19<20>", "{or r17,r18,0xfff00000}"), T(0xf0129274, "ext r0, r18,19<20>", "{nop}"), T(0xf2209274, "ext r17,r0, 19<20>", "{clr r17}"), @@ -720,30 +756,24 @@ struct { static uint8 ram[1024]; static int failed; -uint64 -vm_phys_peek_8(uint32 addr) -{ - assertmsg(addr < sizeof(ram), "addr=0x%x", addr); - - // XXX endian - return ram[addr ^ 1]; -} +#include "test_debugger_memory.cpp" // リンカを通すためのダミー -Disasm::~Disasm() { } +DisasmLine::~DisasmLine() { } DebuggerMD::~DebuggerMD() { } -MPUDevice *gMPU; +uint32 DebuggerMD::GetNextPC() { return 0; } +void DebuggerMD::PrintExceptionFrame(FILE *, busaddr) { } int main(int ac, char *av[]) { - saddr_t saddr; + busaddr saddr; m88100disasm::use_altname = 1; // DebuggerMD (の継承クラス)を用意するのは芋づる式に大変なので、 // 中でアクセスする変数だけ強引に用意する。 - DebuggerMD *md = (DebuggerMD *)malloc(sizeof(DebuggerMD)); + DebuggerMD *md = (DebuggerMD *)calloc(1, sizeof(DebuggerMD)); md->inst_bytes = 4; for (int i = 0; i < countof(table); i++) { @@ -761,10 +791,10 @@ main(int ac, char *av[]) *(uint16 *)(ram + 0x100) = inst >> 16; *(uint16 *)(ram + 0x102) = inst & 0xffff; // 検査 - saddr = 0x100; - DebuggerMemoryStream mem(md, saddr, MemoryMode::Physical); - m88100disasm dis(mem); - dis.Exec(); + saddr = busaddr(0x100); + m88100disasm dis; + DebuggerMemoryStream mem(NULL, saddr); + dis.Exec(&mem); // 照合 if (dis.text != expstd) { printf("%s std expects \"%s\" but \"%s\"\n", inst_str.c_str(),