--- nono/m680x0/testdis.cpp 2026/04/29 17:05:27 1.1.1.8 +++ nono/m680x0/testdis.cpp 2026/04/29 17:05:31 1.1.1.9 @@ -4,7 +4,7 @@ // Licensed under nono-license.txt // -#include "m68030disasm.h" +#include "m680x0disasm.h" #include "debugger_memory.h" #include "mystring.h" #include @@ -18,9 +18,9 @@ struct { { { 0x0040, 0x89ab }, "ori.w #$89ab,d0" }, { { 0x007c, 0x89ab }, "ori.w #$89ab,sr" }, { { 0x0080, 0x89ab, 0xcdef }, "ori.l #$89abcdef,d0" }, - { { 0x00c0, 0x9000 }, "cmp2.b d0,a1" }, + { { 0x00d0, 0x9000 }, "cmp2.b (a0),a1" }, { { 0x00f8, 0x9000, 0x89ab }, "cmp2.b $89ab,a1" }, - { { 0x00c0, 0x9800 }, "chk2.b d0,a1" }, + { { 0x00d0, 0x9800 }, "chk2.b (a0),a1" }, { { 0x00f8, 0x9800, 0x89ab }, "chk2.b $89ab,a1" }, { { 0x0300 }, "btst.l d1,d0" }, { { 0x0310 }, "btst.b d1,(a0)" }, @@ -39,16 +39,16 @@ struct { { { 0x0240, 0x89ab }, "andi.w #$89ab,d0" }, { { 0x027c, 0x89ab }, "andi.w #$89ab,sr" }, { { 0x0280, 0x89ab, 0xcdef }, "andi.l #$89abcdef,d0" }, - { { 0x02c0, 0x9000 }, "cmp2.w d0,a1" }, + { { 0x02d0, 0x9000 }, "cmp2.w (a0),a1" }, { { 0x02f8, 0x9000, 0x89ab }, "cmp2.w $89ab,a1" }, - { { 0x02c0, 0x9800 }, "chk2.w d0,a1" }, + { { 0x02d0, 0x9800 }, "chk2.w (a0),a1" }, { { 0x02f8, 0x9800, 0x89ab }, "chk2.w $89ab,a1" }, { { 0x0400, 0x89ab }, "subi.b #$ab,d0" }, { { 0x0440, 0x89ab }, "subi.w #$89ab,d0" }, { { 0x0480, 0x89ab, 0xcdef }, "subi.l #$89abcdef,d0" }, - { { 0x04c0, 0x9000 }, "cmp2.l d0,a1" }, + { { 0x04d0, 0x9000 }, "cmp2.l (a0),a1" }, { { 0x04f8, 0x9000, 0x89ab }, "cmp2.l $89ab,a1" }, - { { 0x04c0, 0x9800 }, "chk2.l d0,a1" }, + { { 0x04d0, 0x9800 }, "chk2.l (a0),a1" }, { { 0x04f8, 0x9800, 0x89ab }, "chk2.l $89ab,a1" }, { { 0x0600, 0x89ab }, "addi.b #$ab,d0" }, { { 0x0640, 0x89ab }, "addi.w #$89ab,d0" }, @@ -66,12 +66,12 @@ struct { { { 0x0a40, 0x89ab }, "eori.w #$89ab,d0" }, { { 0x0a7c, 0x89ab }, "eori.w #$89ab,sr" }, { { 0x0a80, 0x89ab, 0xcdef }, "eori.l #$89abcdef,d0" }, - { { 0x0ac0, 0x0081 }, "cas.b d1,d2,d0" }, + { { 0x0ad0, 0x0081 }, "cas.b d1,d2,(a0)" }, { { 0x0af8, 0x0081, 0x89ab }, "cas.b d1,d2,$89ab" }, { { 0x0c00, 0x89ab }, "cmpi.b #$ab,d0" }, { { 0x0c40, 0x89ab }, "cmpi.w #$89ab,d0" }, { { 0x0c80, 0x89ab, 0xcdef }, "cmpi.l #$89abcdef,d0" }, - { { 0x0cc0, 0x0081 }, "cas.w d1,d2,d0" }, + { { 0x0cd0, 0x0081 }, "cas.w d1,d2,(a0)" }, { { 0x0cf8, 0x0081, 0x89ab }, "cas.w d1,d2,$89ab" }, { { 0x0cfc, 0xb081, 0xe144 }, "cas2.w d1:d4,d2:d5,(a3):(a6)" }, { { 0x0e38, 0x9000, 0x89ab }, "moves.b $89ab,a1" }, @@ -80,7 +80,7 @@ struct { { { 0x0e78, 0x9800, 0x89ab }, "moves.w a1,$89ab" }, { { 0x0eb8, 0x9000, 0x89ab }, "moves.l $89ab,a1" }, { { 0x0eb8, 0x9800, 0x89ab }, "moves.l a1,$89ab" }, - { { 0x0ec0, 0x0081 }, "cas.l d1,d2,d0" }, + { { 0x0ed0, 0x0081 }, "cas.l d1,d2,(a0)" }, { { 0x0ef8, 0x0081, 0x89ab }, "cas.l d1,d2,$89ab" }, { { 0x0efc, 0xb081, 0xe144 }, "cas2.l d1:d4,d2:d5,(a3):(a6)" }, @@ -113,6 +113,7 @@ struct { { { 0x3380, 0x20fe }, "move.w d0,-$02(a1,d2.w)" }, { { 0x31c0, 0x89ab }, "move.w d0,$89ab" }, { { 0x33c0, 0x89ab, 0xcdef }, "move.w d0,$89abcdef" }, + { { 0x1f7c, 0x0012, 0x89ab }, "move.b #$12,-$7655(a7)" }, { { 0x4000 }, "negx.b d0" }, { { 0x4040 }, "negx.w d0" }, @@ -315,8 +316,6 @@ struct { { { 0xe2b0 }, "roxr.l d1,d0" }, { { 0xe2b8 }, "ror.l d1,d0" }, - { { 0xe0c0 }, "asr.w d0" }, - { { 0xe100 }, "asl.b #8,d0" }, { { 0xe108 }, "lsl.b #8,d0" }, { { 0xe110 }, "roxl.b #8,d0" }, @@ -344,14 +343,14 @@ struct { { { 0xe3b0 }, "roxl.l d1,d0" }, { { 0xe3b8 }, "rol.l d1,d0" }, - { { 0xe1c0 }, "asl.w d0" }, - - { { 0xe2c0 }, "lsr.w d0" }, - { { 0xe3c0 }, "lsl.w d0" }, - { { 0xe4c0 }, "roxr.w d0" }, - { { 0xe5c0 }, "roxl.w d0" }, - { { 0xe6c0 }, "ror.w d0" }, - { { 0xe7c0 }, "rol.w d0" }, + { { 0xe0d0 }, "asr.w (a0)" }, + { { 0xe1d0 }, "asl.w (a0)" }, + { { 0xe2d0 }, "lsr.w (a0)" }, + { { 0xe3d0 }, "lsl.w (a0)" }, + { { 0xe4d0 }, "roxr.w (a0)" }, + { { 0xe5d0 }, "roxl.w (a0)" }, + { { 0xe6d0 }, "ror.w (a0)" }, + { { 0xe7d0 }, "rol.w (a0)" }, { { 0xe8c0, 0x0862 }, "bftst d0{d1:d2}" }, { { 0xe9c0, 0x3862 }, "bfextu d0{d1:d2},d3" }, @@ -553,6 +552,21 @@ struct { #undef MA #undef T + // EA のないところが illegal になるか。 + { { 0x4207 }, "clr.b d7" }, // dn + { { 0x420f }, "" }, // an + { { 0x4217 }, "clr.b (a7)" }, // (an) + { { 0x421f }, "clr.b (a7)+" }, // (an)+ + { { 0x4227 }, "clr.b -(a7)" }, // -(an) + { { 0x4238, 0x89ab }, "clr.b $89ab" }, // abs.w + { { 0x4239, 0x89ab, 0xcdef }, "clr.b $89abcdef" }, // abs.l + { { 0x423a }, "" }, // d16(pc) + { { 0x423b }, "" }, // d8(pc,ix) + { { 0x423c }, "" }, // #imm + { { 0x423d }, "" }, // invalid + { { 0x423e }, "" }, // invalid + { { 0x423f }, "" }, // invalid + // movem (制御・ポストインクリメント) { { 0x48d0, 0x0000 }, "movem.l noregs,(a0)" }, // リストなし { { 0x48d0, 0x0001 }, "movem.l d0,(a0)" }, // 単体 @@ -825,6 +839,43 @@ struct { { { 0xf280, 0xfffe }, "fbf.w $00000100" }, { { 0xf310 }, "fsave (a0)" }, { { 0xf350 }, "frestore (a0)" }, + + // 040 + { { 0xf409 }, "cinvl nc,(a1)" }, + { { 0xf449 }, "cinvl dc,(a1)" }, + { { 0xf489 }, "cinvl ic,(a1)" }, + { { 0xf4c9 }, "cinvl bc,(a1)" }, + { { 0xf451 }, "cinvp dc,(a1)" }, + { { 0xf458 }, "cinva dc" }, + { { 0xf469 }, "cpushl dc,(a1)" }, + { { 0xf471 }, "cpushp dc,(a1)" }, + { { 0xf478 }, "cpusha dc" }, + { { 0xf501 }, "pflushn (a1)" }, + { { 0xf509 }, "pflush (a1)" }, + { { 0xf510 }, "pflushan" }, + { { 0xf518 }, "pflusha_040" }, + { { 0xf549 }, "ptestw (a1)" }, + { { 0xf569 }, "ptestr (a1)" }, + { { 0xf601, 0x1234, 0x5678 }, "move16 (a1)+,$12345678" }, + { { 0xf609, 0x1234, 0x5678 }, "move16 $12345678,(a1)+" }, + { { 0xf611, 0x1234, 0x5678 }, "move16 (a1),$12345678" }, + { { 0xf619, 0x1234, 0x5678 }, "move16 $12345678,(a1)" }, + { { 0xf621, 0x2000 }, "move16 (a1)+,(a2)+" }, + + // cp* + { { 0xf511 }, "cpsave (a1)" }, // cpid=2 + { { 0xf551 }, "cprestore (a1)" }, + { { 0xf711 }, "cpsave (a1)" }, // cpid=3 + { { 0xf751 }, "cprestore (a1)" }, + { { 0xf911 }, "cpsave (a1)" }, // cpid=4 + { { 0xf951 }, "cprestore (a1)" }, + { { 0xfb11 }, "cpsave (a1)" }, // cpid=5 + { { 0xfb51 }, "cprestore (a1)" }, + { { 0xfd11 }, "cpsave (a1)" }, // cpid=6 + { { 0xfd51 }, "cprestore (a1)" }, + // cpid=7 の cpSAVE/RESTORE だが無条件に DOS コールを優先している。 + { { 0xff11 }, "DOS _PRNSNS" }, // cpid=7 + { { 0xff51 }, "DOS _GETPDB(v2)" }, }; static uint8 ram[1024]; @@ -850,6 +901,10 @@ main(int ac, char *av[]) std::string expected = table[i].expected; std::vector inst = table[i].inst; + if (expected.empty()) { + expected = ""; + } + // エラー表示用 std::string inst_str; for (const auto j : inst) {