|
|
1.1 ! root 1: // ! 2: // nono ! 3: // Copyright (C) 2018 [email protected] ! 4: // ! 5: ! 6: #include "header.h" ! 7: #include "disasm.h" ! 8: #include "m68030.h" ! 9: #include "mystring.h" ! 10: #include <vector> ! 11: ! 12: struct { ! 13: std::vector<uint16> inst; ! 14: std::string expected; ! 15: } table[] = { ! 16: { { 0x0000, 0x89ab }, "ori.b #$ab,d0" }, ! 17: { { 0x003c, 0x89ab }, "ori.b #$ab,ccr" }, ! 18: { { 0x0040, 0x89ab }, "ori.w #$89ab,d0" }, ! 19: { { 0x007c, 0x89ab }, "ori.w #$89ab,sr" }, ! 20: { { 0x0080, 0x89ab, 0xcdef }, "ori.l #$89abcdef,d0" }, ! 21: { { 0x00c0, 0x9000 }, "cmp2.b d0,a1" }, ! 22: { { 0x00f8, 0x9000, 0x89ab }, "cmp2.b $89ab,a1" }, ! 23: { { 0x00c0, 0x9800 }, "chk2.b d0,a1" }, ! 24: { { 0x00f8, 0x9800, 0x89ab }, "chk2.b $89ab,a1" }, ! 25: { { 0x0300 }, "btst.l d1,d0" }, ! 26: { { 0x0310 }, "btst.b d1,(a0)" }, ! 27: { { 0x030a, 0x89ab }, "movep.w ($89ab,a2),d1" }, ! 28: { { 0x0340 }, "bchg.l d1,d0" }, ! 29: { { 0x0350 }, "bchg.b d1,(a0)" }, ! 30: { { 0x034a, 0x89ab }, "movep.l ($89ab,a2),d1" }, ! 31: { { 0x0380 }, "bclr.l d1,d0" }, ! 32: { { 0x0390 }, "bclr.b d1,(a0)" }, ! 33: { { 0x038a, 0x89ab }, "movep.w d1,($89ab,a2)" }, ! 34: { { 0x03c0 }, "bset.l d1,d0" }, ! 35: { { 0x03d0 }, "bset.b d1,(a0)" }, ! 36: { { 0x03ca, 0x89ab }, "movep.l d1,($89ab,a2)" }, ! 37: { { 0x0200, 0x89ab }, "andi.b #$ab,d0" }, ! 38: { { 0x023c, 0x89ab }, "andi.b #$ab,ccr" }, ! 39: { { 0x0240, 0x89ab }, "andi.w #$89ab,d0" }, ! 40: { { 0x027c, 0x89ab }, "andi.w #$89ab,sr" }, ! 41: { { 0x0280, 0x89ab, 0xcdef }, "andi.l #$89abcdef,d0" }, ! 42: { { 0x02c0, 0x9000 }, "cmp2.w d0,a1" }, ! 43: { { 0x02f8, 0x9000, 0x89ab }, "cmp2.w $89ab,a1" }, ! 44: { { 0x02c0, 0x9800 }, "chk2.w d0,a1" }, ! 45: { { 0x02f8, 0x9800, 0x89ab }, "chk2.w $89ab,a1" }, ! 46: { { 0x0400, 0x89ab }, "subi.b #$ab,d0" }, ! 47: { { 0x0440, 0x89ab }, "subi.w #$89ab,d0" }, ! 48: { { 0x0480, 0x89ab, 0xcdef }, "subi.l #$89abcdef,d0" }, ! 49: { { 0x04c0, 0x9000 }, "cmp2.l d0,a1" }, ! 50: { { 0x04f8, 0x9000, 0x89ab }, "cmp2.l $89ab,a1" }, ! 51: { { 0x04c0, 0x9800 }, "chk2.l d0,a1" }, ! 52: { { 0x04f8, 0x9800, 0x89ab }, "chk2.l $89ab,a1" }, ! 53: { { 0x0600, 0x89ab }, "addi.b #$ab,d0" }, ! 54: { { 0x0640, 0x89ab }, "addi.w #$89ab,d0" }, ! 55: { { 0x0680, 0x89ab, 0xcdef }, "addi.l #$89abcdef,d0" }, ! 56: { { 0x0800, 0x00ff }, "btst.l #31,d0" }, ! 57: { { 0x0838, 0x00ff, 0x89ab }, "btst.b #7,$89ab" }, ! 58: { { 0x0840, 0x00ff }, "bchg.l #31,d0" }, ! 59: { { 0x0878, 0x00ff, 0x89ab }, "bchg.b #7,$89ab" }, ! 60: { { 0x0880, 0x00ff }, "bclr.l #31,d0" }, ! 61: { { 0x08b8, 0x00ff, 0x89ab }, "bclr.b #7,$89ab" }, ! 62: { { 0x08c0, 0x00ff }, "bset.l #31,d0" }, ! 63: { { 0x08f8, 0x00ff, 0x89ab }, "bset.b #7,$89ab" }, ! 64: { { 0x0a00, 0x89ab }, "eori.b #$ab,d0" }, ! 65: { { 0x0a3c, 0x89ab }, "eori.b #$ab,ccr" }, ! 66: { { 0x0a40, 0x89ab }, "eori.w #$89ab,d0" }, ! 67: { { 0x0a7c, 0x89ab }, "eori.w #$89ab,sr" }, ! 68: { { 0x0a80, 0x89ab, 0xcdef }, "eori.l #$89abcdef,d0" }, ! 69: { { 0x0ac0, 0x0081 }, "cas.b d1,d2,d0" }, ! 70: { { 0x0af8, 0x0081, 0x89ab }, "cas.b d1,d2,$89ab" }, ! 71: { { 0x0c00, 0x89ab }, "cmpi.b #$ab,d0" }, ! 72: { { 0x0c40, 0x89ab }, "cmpi.w #$89ab,d0" }, ! 73: { { 0x0c80, 0x89ab, 0xcdef }, "cmpi.l #$89abcdef,d0" }, ! 74: { { 0x0cc0, 0x0081 }, "cas.w d1,d2,d0" }, ! 75: { { 0x0cf8, 0x0081, 0x89ab }, "cas.w d1,d2,$89ab" }, ! 76: { { 0x0cfc, 0xb081, 0xe144 }, "cas2.w d1:d4,d2:d5,(a3):(a6)" }, ! 77: { { 0x0e38, 0x9000, 0x89ab }, "moves.b $89ab,a1" }, ! 78: { { 0x0e38, 0x9800, 0x89ab }, "moves.b a1,$89ab" }, ! 79: { { 0x0e78, 0x9000, 0x89ab }, "moves.w $89ab,a1" }, ! 80: { { 0x0e78, 0x9800, 0x89ab }, "moves.w a1,$89ab" }, ! 81: { { 0x0eb8, 0x9000, 0x89ab }, "moves.l $89ab,a1" }, ! 82: { { 0x0eb8, 0x9800, 0x89ab }, "moves.l a1,$89ab" }, ! 83: { { 0x0ec0, 0x0081 }, "cas.l d1,d2,d0" }, ! 84: { { 0x0ef8, 0x0081, 0x89ab }, "cas.l d1,d2,$89ab" }, ! 85: { { 0x0efc, 0xb081, 0xe144 }, "cas2.l d1:d4,d2:d5,(a3):(a6)" }, ! 86: ! 87: { { 0x1200 }, "move.b d0,d1" }, ! 88: { { 0x1280 }, "move.b d0,(a1)" }, ! 89: { { 0x12c0 }, "move.b d0,(a1)+" }, ! 90: { { 0x1300 }, "move.b d0,-(a1)" }, ! 91: { { 0x1340, 0x89ab }, "move.b d0,-$7655(a1)" }, ! 92: { { 0x1380, 0x20fe }, "move.b d0,-$02(a1,d2.w)" }, ! 93: { { 0x11c0, 0x89ab }, "move.b d0,$89ab" }, ! 94: { { 0x13c0, 0x89ab, 0xcdef }, "move.b d0,$89abcdef" }, ! 95: { { 0x2200 }, "move.l d0,d1" }, ! 96: { { 0x2240 }, "movea.l d0,a1" }, ! 97: { { 0x2280 }, "move.l d0,(a1)" }, ! 98: { { 0x22c0 }, "move.l d0,(a1)+" }, ! 99: { { 0x2300 }, "move.l d0,-(a1)" }, ! 100: { { 0x2340, 0x89ab }, "move.l d0,-$7655(a1)" }, ! 101: { { 0x2380, 0x20fe }, "move.l d0,-$02(a1,d2.w)" }, ! 102: { { 0x21c0, 0x89ab }, "move.l d0,$89ab" }, ! 103: { { 0x23c0, 0x89ab, 0xcdef }, "move.l d0,$89abcdef" }, ! 104: { { 0x3200 }, "move.w d0,d1" }, ! 105: { { 0x3240 }, "movea.w d0,a1" }, ! 106: // movea.w $ffff89ab,a1 のように表示したい気もするけど、今の所 ! 107: // 構造上面倒なのでちょっとおいておく。 ! 108: { { 0x327c, 0x89ab }, "movea.w #$89ab,a1" }, ! 109: { { 0x3280 }, "move.w d0,(a1)" }, ! 110: { { 0x32c0 }, "move.w d0,(a1)+" }, ! 111: { { 0x3300 }, "move.w d0,-(a1)" }, ! 112: { { 0x3340, 0x89ab }, "move.w d0,-$7655(a1)" }, ! 113: { { 0x3380, 0x20fe }, "move.w d0,-$02(a1,d2.w)" }, ! 114: { { 0x31c0, 0x89ab }, "move.w d0,$89ab" }, ! 115: { { 0x33c0, 0x89ab, 0xcdef }, "move.w d0,$89abcdef" }, ! 116: ! 117: { { 0x4000 }, "negx.b d0" }, ! 118: { { 0x4040 }, "negx.w d0" }, ! 119: { { 0x4080 }, "negx.l d0" }, ! 120: { { 0x40c0 }, "move.w sr,d0" }, ! 121: { { 0x4300 }, "chk.l d0,d1" }, ! 122: { { 0x4380 }, "chk.w d0,d1" }, ! 123: { { 0x43d0 }, "lea.l (a0),a1" }, ! 124: { { 0x49c0 }, "extb.l d0" }, ! 125: { { 0x4200 }, "clr.b d0" }, ! 126: { { 0x4240 }, "clr.w d0" }, ! 127: { { 0x4280 }, "clr.l d0" }, ! 128: { { 0x42c0 }, "move.w ccr,d0" }, ! 129: { { 0x4400 }, "neg.b d0" }, ! 130: { { 0x4440 }, "neg.w d0" }, ! 131: { { 0x4480 }, "neg.l d0" }, ! 132: { { 0x44c0 }, "move.w d0,ccr" }, ! 133: { { 0x4600 }, "not.b d0" }, ! 134: { { 0x4640 }, "not.w d0" }, ! 135: { { 0x4680 }, "not.l d0" }, ! 136: { { 0x46c0 }, "move.w d0,sr" }, ! 137: { { 0x4800 }, "nbcd.b d0" }, ! 138: { { 0x4808, 0x89ab, 0xcdef }, "link.l a0,#-$76543211" }, ! 139: { { 0x4840 }, "swap.w d0" }, ! 140: { { 0x4849 }, "bkpt #1" }, ! 141: { { 0x4850 }, "pea.l (a0)" }, ! 142: { { 0x4880 }, "ext.w d0" }, ! 143: { { 0x4890, 0x0101 }, "movem.w d0/a0,(a0)" }, ! 144: { { 0x48b8, 0x0101, 0x89ab }, "movem.w d0/a0,$89ab" }, ! 145: { { 0x48c0 }, "ext.l d0" }, ! 146: { { 0x48d0, 0x0101 }, "movem.l d0/a0,(a0)" }, ! 147: { { 0x48f8, 0x0101, 0x89ab }, "movem.l d0/a0,$89ab" }, ! 148: { { 0x4a00 }, "tst.b d0" }, ! 149: { { 0x4a40 }, "tst.w d0" }, ! 150: { { 0x4a80 }, "tst.l d0" }, ! 151: { { 0x4ac0 }, "tas.b d0" }, ! 152: { { 0x4afc }, "illegal" }, ! 153: // ※ mul[us].l <ea>,dh:dl (h==l) はニーモニックとしては正しい ! 154: { { 0x4c38, 0x1000, 0x89ab }, "mulu.l $89ab,d1" }, ! 155: { { 0x4c38, 0x1401, 0x89ab }, "mulu.l $89ab,d1:d1" }, // ※ ! 156: { { 0x4c38, 0x1402, 0x89ab }, "mulu.l $89ab,d2:d1" }, ! 157: { { 0x4c38, 0x1800, 0x89ab }, "muls.l $89ab,d1" }, ! 158: { { 0x4c38, 0x1c01, 0x89ab }, "muls.l $89ab,d1:d1" }, // ※ ! 159: { { 0x4c38, 0x1c02, 0x89ab }, "muls.l $89ab,d2:d1" }, ! 160: { { 0x4c78, 0x1001, 0x89ab }, "divu.l $89ab,d1" }, ! 161: { { 0x4c78, 0x1002, 0x89ab }, "divu.l $89ab,d2:d1" }, ! 162: { { 0x4c78, 0x1402, 0x89ab }, "divul.l $89ab,d2:d1" }, ! 163: { { 0x4c78, 0x1801, 0x89ab }, "divs.l $89ab,d1" }, ! 164: { { 0x4c78, 0x1802, 0x89ab }, "divs.l $89ab,d2:d1" }, ! 165: { { 0x4c78, 0x1c02, 0x89ab }, "divsl.l $89ab,d2:d1" }, ! 166: { { 0x4c90, 0x0101 }, "movem.w (a0),d0/a0" }, ! 167: { { 0x4cb8, 0x0101, 0x89ab }, "movem.w $89ab,d0/a0" }, ! 168: { { 0x4cd0, 0x0101 }, "movem.l (a0),d0/a0" }, ! 169: { { 0x4cf8, 0x0101, 0x89ab }, "movem.l $89ab,d0/a0" }, ! 170: { { 0x4e4f }, "trap #15" }, ! 171: { { 0x4e50, 0x89ab }, "link.w a0,#-$7655" }, ! 172: { { 0x4e58 }, "unlk a0" }, ! 173: { { 0x4e60 }, "move.l a0,usp" }, ! 174: { { 0x4e68 }, "move.l usp,a0" }, ! 175: { { 0x4e70 }, "reset" }, ! 176: { { 0x4e71 }, "nop" }, ! 177: { { 0x4e72, 0x89ab }, "stop #$89ab" }, ! 178: { { 0x4e73 }, "rte" }, ! 179: { { 0x4e74, 0x89ab }, "rtd #$89ab" }, ! 180: { { 0x4e75 }, "rts" }, ! 181: { { 0x4e76 }, "trapv" }, ! 182: { { 0x4e77 }, "rtr" }, ! 183: { { 0x4e7a, 0x8801 }, "movec.l vbr,a0" }, ! 184: { { 0x4e7b, 0x8801 }, "movec.l a0,vbr" }, ! 185: { { 0x4e90 }, "jsr (a0)" }, ! 186: { { 0x4ed0 }, "jmp (a0)" }, ! 187: ! 188: { { 0x5000 }, "addq.b #8,d0" }, ! 189: { { 0x5040 }, "addq.w #8,d0" }, ! 190: { { 0x5048 }, "addq.w #8,a0" }, // .l にする? ! 191: { { 0x5080 }, "addq.l #8,d0" }, ! 192: { { 0x5088 }, "addq.l #8,a0" }, ! 193: { { 0x50c0 }, "st.b d0" }, ! 194: { { 0x50c8, 0xfffe }, "dbt.w d0,$00000100" }, ! 195: { { 0x51c8, 0xfffe }, "dbra.w d0,$00000100" }, ! 196: { { 0x50fa, 0x89ab }, "trapt.w #$89ab" }, ! 197: { { 0x50fb, 0x89ab, 0xcdef }, "trapt.l #$89abcdef" }, ! 198: { { 0x50fc }, "trapt" }, ! 199: { { 0x5100 }, "subq.b #8,d0" }, ! 200: { { 0x5140 }, "subq.w #8,d0" }, ! 201: { { 0x5148 }, "subq.w #8,a0" }, // .l にする? ! 202: { { 0x5180 }, "subq.l #8,d0" }, ! 203: { { 0x5188 }, "subq.l #8,a0" }, ! 204: ! 205: { { 0x6000, 0xfffe }, "bra.w $00000100" }, ! 206: { { 0x60fe }, "bra.b $00000100" }, ! 207: { { 0x60ff, 0xffff, 0xfffe }, "bra.l $00000100" }, ! 208: { { 0x6100, 0xfffe }, "bsr.w $00000100" }, ! 209: { { 0x61fe }, "bsr.b $00000100" }, ! 210: { { 0x61ff, 0xffff, 0xfffe }, "bsr.l $00000100" }, ! 211: { { 0x6200, 0xfffe }, "bhi.w $00000100" }, ! 212: { { 0x62fe }, "bhi.b $00000100" }, ! 213: { { 0x62ff, 0xffff, 0xfffe }, "bhi.l $00000100" }, ! 214: ! 215: { { 0x727f }, "moveq.l #$7f,d1" }, ! 216: { { 0x7280 }, "moveq.l #$ffffff80,d1" }, ! 217: ! 218: { { 0x8200 }, "or.b d0,d1" }, ! 219: { { 0x8240 }, "or.w d0,d1" }, ! 220: { { 0x8280 }, "or.l d0,d1" }, ! 221: { { 0x82c0 }, "divu.w d0,d1" }, ! 222: { { 0x8300 }, "sbcd.b d0,d1" }, ! 223: { { 0x8308 }, "sbcd.b -(a0),-(a1)" }, ! 224: { { 0x8310 }, "or.b d1,(a0)" }, ! 225: { { 0x8340, 0x89ab }, "pack d0,d1,#$89ab" }, ! 226: { { 0x8348, 0x89ab }, "pack -(a0),-(a1),#$89ab" }, ! 227: { { 0x8350 }, "or.w d1,(a0)" }, ! 228: { { 0x8380, 0x89ab }, "unpk d0,d1,#$89ab" }, ! 229: { { 0x8388, 0x89ab }, "unpk -(a0),-(a1),#$89ab" }, ! 230: { { 0x8390 }, "or.l d1,(a0)" }, ! 231: { { 0x83c0 }, "divs.w d0,d1" }, ! 232: ! 233: { { 0x9200 }, "sub.b d0,d1" }, ! 234: { { 0x9240 }, "sub.w d0,d1" }, ! 235: { { 0x9280 }, "sub.l d0,d1" }, ! 236: { { 0x92c0 }, "suba.w d0,a1" }, ! 237: { { 0x9300 }, "subx.b d0,d1" }, ! 238: { { 0x9308 }, "subx.b -(a0),-(a1)" }, ! 239: { { 0x9310 }, "sub.b d1,(a0)" }, ! 240: { { 0x9340 }, "subx.w d0,d1" }, ! 241: { { 0x9348 }, "subx.w -(a0),-(a1)" }, ! 242: { { 0x9350 }, "sub.w d1,(a0)" }, ! 243: { { 0x9380 }, "subx.l d0,d1" }, ! 244: { { 0x9388 }, "subx.l -(a0),-(a1)" }, ! 245: { { 0x9390 }, "sub.l d1,(a0)" }, ! 246: { { 0x93c0 }, "suba.l d0,a1" }, ! 247: ! 248: // A-Line ! 249: ! 250: { { 0xb200 }, "cmp.b d0,d1" }, ! 251: { { 0xb240 }, "cmp.w d0,d1" }, ! 252: { { 0xb280 }, "cmp.l d0,d1" }, ! 253: { { 0xb2c0 }, "cmpa.w d0,a1" }, ! 254: { { 0xb300 }, "eor.b d1,d0" }, ! 255: { { 0xb308 }, "cmpm.b (a0)+,(a1)+" }, ! 256: { { 0xb340 }, "eor.w d1,d0" }, ! 257: { { 0xb348 }, "cmpm.w (a0)+,(a1)+" }, ! 258: { { 0xb380 }, "eor.l d1,d0" }, ! 259: { { 0xb388 }, "cmpm.l (a0)+,(a1)+" }, ! 260: { { 0xb3c0 }, "cmpa.l d0,a1" }, ! 261: ! 262: { { 0xc200 }, "and.b d0,d1" }, ! 263: { { 0xc240 }, "and.w d0,d1" }, ! 264: { { 0xc280 }, "and.l d0,d1" }, ! 265: { { 0xc2c0 }, "mulu.w d0,d1" }, ! 266: { { 0xc300 }, "abcd.b d0,d1" }, ! 267: { { 0xc308 }, "abcd.b -(a0),-(a1)" }, ! 268: { { 0xc310 }, "and.b d1,(a0)" }, ! 269: { { 0xc340 }, "exg.l d1,d0" }, ! 270: { { 0xc348 }, "exg.l a1,a0" }, ! 271: { { 0xc350 }, "and.w d1,(a0)" }, ! 272: { { 0xc388 }, "exg.l d1,a0" }, ! 273: { { 0xc390 }, "and.l d1,(a0)" }, ! 274: { { 0xc3c0 }, "muls.w d0,d1" }, ! 275: ! 276: { { 0xd200 }, "add.b d0,d1" }, ! 277: { { 0xd240 }, "add.w d0,d1" }, ! 278: { { 0xd280 }, "add.l d0,d1" }, ! 279: { { 0xd2c0 }, "adda.w d0,a1" }, ! 280: { { 0xd300 }, "addx.b d0,d1" }, ! 281: { { 0xd308 }, "addx.b -(a0),-(a1)" }, ! 282: { { 0xd310 }, "add.b d1,(a0)" }, ! 283: { { 0xd340 }, "addx.w d0,d1" }, ! 284: { { 0xd348 }, "addx.w -(a0),-(a1)" }, ! 285: { { 0xd350 }, "add.w d1,(a0)" }, ! 286: { { 0xd380 }, "addx.l d0,d1" }, ! 287: { { 0xd388 }, "addx.l -(a0),-(a1)" }, ! 288: { { 0xd390 }, "add.l d1,(a0)" }, ! 289: { { 0xd3c0 }, "adda.l d0,a1" }, ! 290: ! 291: { { 0xe000 }, "asr.b #8,d0" }, ! 292: { { 0xe008 }, "lsr.b #8,d0" }, ! 293: { { 0xe010 }, "roxr.b #8,d0" }, ! 294: { { 0xe018 }, "ror.b #8,d0" }, ! 295: { { 0xe220 }, "asr.b d1,d0" }, ! 296: { { 0xe228 }, "lsr.b d1,d0" }, ! 297: { { 0xe230 }, "roxr.b d1,d0" }, ! 298: { { 0xe238 }, "ror.b d1,d0" }, ! 299: ! 300: { { 0xe040 }, "asr.w #8,d0" }, ! 301: { { 0xe048 }, "lsr.w #8,d0" }, ! 302: { { 0xe050 }, "roxr.w #8,d0" }, ! 303: { { 0xe058 }, "ror.w #8,d0" }, ! 304: { { 0xe260 }, "asr.w d1,d0" }, ! 305: { { 0xe268 }, "lsr.w d1,d0" }, ! 306: { { 0xe270 }, "roxr.w d1,d0" }, ! 307: { { 0xe278 }, "ror.w d1,d0" }, ! 308: ! 309: { { 0xe080 }, "asr.l #8,d0" }, ! 310: { { 0xe088 }, "lsr.l #8,d0" }, ! 311: { { 0xe090 }, "roxr.l #8,d0" }, ! 312: { { 0xe098 }, "ror.l #8,d0" }, ! 313: { { 0xe2a0 }, "asr.l d1,d0" }, ! 314: { { 0xe2a8 }, "lsr.l d1,d0" }, ! 315: { { 0xe2b0 }, "roxr.l d1,d0" }, ! 316: { { 0xe2b8 }, "ror.l d1,d0" }, ! 317: ! 318: { { 0xe0c0 }, "asr.w d0" }, ! 319: ! 320: { { 0xe100 }, "asl.b #8,d0" }, ! 321: { { 0xe108 }, "lsl.b #8,d0" }, ! 322: { { 0xe110 }, "roxl.b #8,d0" }, ! 323: { { 0xe118 }, "rol.b #8,d0" }, ! 324: { { 0xe320 }, "asl.b d1,d0" }, ! 325: { { 0xe328 }, "lsl.b d1,d0" }, ! 326: { { 0xe330 }, "roxl.b d1,d0" }, ! 327: { { 0xe338 }, "rol.b d1,d0" }, ! 328: ! 329: { { 0xe140 }, "asl.w #8,d0" }, ! 330: { { 0xe148 }, "lsl.w #8,d0" }, ! 331: { { 0xe150 }, "roxl.w #8,d0" }, ! 332: { { 0xe158 }, "rol.w #8,d0" }, ! 333: { { 0xe360 }, "asl.w d1,d0" }, ! 334: { { 0xe368 }, "lsl.w d1,d0" }, ! 335: { { 0xe370 }, "roxl.w d1,d0" }, ! 336: { { 0xe378 }, "rol.w d1,d0" }, ! 337: ! 338: { { 0xe180 }, "asl.l #8,d0" }, ! 339: { { 0xe188 }, "lsl.l #8,d0" }, ! 340: { { 0xe190 }, "roxl.l #8,d0" }, ! 341: { { 0xe198 }, "rol.l #8,d0" }, ! 342: { { 0xe3a0 }, "asl.l d1,d0" }, ! 343: { { 0xe3a8 }, "lsl.l d1,d0" }, ! 344: { { 0xe3b0 }, "roxl.l d1,d0" }, ! 345: { { 0xe3b8 }, "rol.l d1,d0" }, ! 346: ! 347: { { 0xe1c0 }, "asl.w d0" }, ! 348: ! 349: { { 0xe2c0 }, "lsr.w d0" }, ! 350: { { 0xe3c0 }, "lsl.w d0" }, ! 351: { { 0xe4c0 }, "roxr.w d0" }, ! 352: { { 0xe5c0 }, "roxl.w d0" }, ! 353: { { 0xe6c0 }, "ror.w d0" }, ! 354: { { 0xe7c0 }, "rol.w d0" }, ! 355: ! 356: { { 0xe8c0, 0x0862 }, "bftst d0{d1:d2}" }, ! 357: { { 0xe9c0, 0x3862 }, "bfextu d0{d1:d2},d3" }, ! 358: { { 0xeac0, 0x0862 }, "bfchg d0{d1:d2}" }, ! 359: { { 0xebc0, 0x3862 }, "bfexts d0{d1:d2},d3" }, ! 360: { { 0xecc0, 0x0862 }, "bfclr d0{d1:d2}" }, ! 361: { { 0xedc0, 0x3862 }, "bfffo d0{d1:d2},d3" }, ! 362: { { 0xeec0, 0x0862 }, "bfset d0{d1:d2}" }, ! 363: { { 0xefc0, 0x3862 }, "bfins d3,d0{d1:d2}" }, ! 364: { { 0xe8f8, 0x0862, 0x89ab }, "bftst $89ab{d1:d2}" }, ! 365: { { 0xe9f8, 0x3862, 0x89ab }, "bfextu $89ab{d1:d2},d3" }, ! 366: { { 0xeaf8, 0x0862, 0x89ab }, "bfchg $89ab{d1:d2}" }, ! 367: { { 0xebf8, 0x3862, 0x89ab }, "bfexts $89ab{d1:d2},d3" }, ! 368: { { 0xecf8, 0x0862, 0x89ab }, "bfclr $89ab{d1:d2}" }, ! 369: { { 0xedf8, 0x3862, 0x89ab }, "bfffo $89ab{d1:d2},d3" }, ! 370: { { 0xeef8, 0x0862, 0x89ab }, "bfset $89ab{d1:d2}" }, ! 371: { { 0xeff8, 0x3862, 0x89ab }, "bfins d3,$89ab{d1:d2}" }, ! 372: { { 0xe8c0, 0x0022 }, "bftst d0{#0:d2}" }, // offset 0 ! 373: { { 0xe8c0, 0x07e2 }, "bftst d0{#31:d2}" }, // offset 31 ! 374: { { 0xe8c0, 0x0841 }, "bftst d0{d1:#1}" }, // width 1 ! 375: { { 0xe8c0, 0x0840 }, "bftst d0{d1:#32}" }, // width 32 ! 376: { { 0xe8c0, 0x0000 }, "bftst d0{#0:#32}" }, // oもwも即値 ! 377: ! 378: // EA ! 379: { { 0x4a07 }, "tst.b d7" }, // dn ! 380: { { 0x4a0f }, "tst.b a7" }, // an ! 381: { { 0x4a17 }, "tst.b (a7)" }, // (an) ! 382: { { 0x4a1f }, "tst.b (a7)+" }, // (an)+ ! 383: { { 0x4a27 }, "tst.b -(a7)" }, // -(an) ! 384: { { 0x4a2f, 0x89ab }, "tst.b -$7655(a7)" }, // d16(an) ! 385: { { 0x4a38, 0x89ab }, "tst.b $89ab" }, // abs.w ! 386: { { 0x4a39, 0x89ab, 0xcdef }, "tst.b $89abcdef" }, // abs.l ! 387: { { 0x4a3a, 0xfffe }, "tst.b $00000100(pc)" }, // d16(pc) ! 388: { { 0x4a3c, 0x89ab }, "tst.b #$ab" }, // #imm ! 389: // (an,ix) 短縮フォーマット ! 390: { { 0x4a37, 0x9000 }, "tst.b (a7,a1.w)" }, ! 391: { { 0x4a37, 0x9201 }, "tst.b $01(a7,a1.w*2)" }, ! 392: { { 0x4a37, 0x947f }, "tst.b $7f(a7,a1.w*4)" }, ! 393: { { 0x4a37, 0x9680 }, "tst.b -$80(a7,a1.w*8)" }, ! 394: { { 0x4a37, 0x98ff }, "tst.b -$01(a7,a1.l)" }, ! 395: { { 0x4a37, 0x9a00 }, "tst.b (a7,a1.l*2)" }, ! 396: { { 0x4a37, 0x9c00 }, "tst.b (a7,a1.l*4)" }, ! 397: { { 0x4a37, 0x9e00 }, "tst.b (a7,a1.l*8)" }, ! 398: // (an,ix) フルフォーマット ! 399: #define BW 0x89ab ! 400: #define BL 0x89ab, 0xcdef ! 401: #define OW 0xcdef ! 402: #define OL 0xcdef, 0x0123 ! 403: #define MA(x, ...) { 0x4a37, x, __VA_ARGS__ } ! 404: #define T "tst.b " ! 405: // an,bs=0, bdsize=1 ! 406: { MA(0x1110), T "(a7,d1.w)" }, ! 407: { MA(0x1111), T "([a7,d1.w])" }, ! 408: { MA(0x1112, OW), T "([a7,d1.w],-$3211)" }, ! 409: { MA(0x1113, OL), T "([a7,d1.w],-$3210fedd)" }, ! 410: { MA(0x1115), T "([a7],d1.w)" }, ! 411: { MA(0x1116, OW), T "([a7],d1.w,-$3211)" }, ! 412: { MA(0x1117, OL), T "([a7],d1.w,-$3210fedd)" }, ! 413: { MA(0x1150), T "(a7)" }, ! 414: { MA(0x1151), T "([a7])" }, ! 415: { MA(0x1152, OW), T "([a7],-$3211)" }, ! 416: { MA(0x1153, OL), T "([a7],-$3210fedd)" }, ! 417: // an,bs=0, bdsize=2 ! 418: { MA(0x1120, BW), T "(-$7655,a7,d1.w)" }, ! 419: { MA(0x1121, BW), T "([-$7655,a7,d1.w])" }, ! 420: { MA(0x1122, BW, OW), T "([-$7655,a7,d1.w],-$3211)" }, ! 421: { MA(0x1123, BW, OL), T "([-$7655,a7,d1.w],-$3210fedd)" }, ! 422: { MA(0x1125, BW), T "([-$7655,a7],d1.w)" }, ! 423: { MA(0x1126, BW, OW), T "([-$7655,a7],d1.w,-$3211)" }, ! 424: { MA(0x1127, BW, OL), T "([-$7655,a7],d1.w,-$3210fedd)" }, ! 425: { MA(0x1160, BW), T "(-$7655,a7)" }, ! 426: { MA(0x1161, BW), T "([-$7655,a7])" }, ! 427: { MA(0x1162, BW, OW), T "([-$7655,a7],-$3211)" }, ! 428: { MA(0x1163, BW, OL), T "([-$7655,a7],-$3210fedd)" }, ! 429: // an,bs=0, bdsize=3 ! 430: { MA(0x1130, BL), T "(-$76543211,a7,d1.w)" }, ! 431: { MA(0x1131, BL), T "([-$76543211,a7,d1.w])" }, ! 432: { MA(0x1132, BL, OW), T "([-$76543211,a7,d1.w],-$3211)" }, ! 433: { MA(0x1133, BL, OL), T "([-$76543211,a7,d1.w],-$3210fedd)" }, ! 434: { MA(0x1135, BL), T "([-$76543211,a7],d1.w)" }, ! 435: { MA(0x1136, BL, OW), T "([-$76543211,a7],d1.w,-$3211)" }, ! 436: { MA(0x1137, BL, OL), T "([-$76543211,a7],d1.w,-$3210fedd)" }, ! 437: { MA(0x1170, BL), T "(-$76543211,a7)" }, ! 438: { MA(0x1171, BL), T "([-$76543211,a7])" }, ! 439: { MA(0x1172, BL, OW), T "([-$76543211,a7],-$3211)" }, ! 440: { MA(0x1173, BL, OL), T "([-$76543211,a7],-$3210fedd)" }, ! 441: // an,bs=1, bdsize=1 ! 442: { MA(0x1190), T "(za7,d1.w)" }, ! 443: { MA(0x1191), T "([za7,d1.w])" }, ! 444: { MA(0x1192, OW), T "([za7,d1.w],-$3211)" }, ! 445: { MA(0x1193, OL), T "([za7,d1.w],-$3210fedd)" }, ! 446: { MA(0x1195), T "([za7],d1.w)" }, ! 447: { MA(0x1196, OW), T "([za7],d1.w,-$3211)" }, ! 448: { MA(0x1197, OL), T "([za7],d1.w,-$3210fedd)" }, ! 449: { MA(0x11d0), T "(za7)" }, ! 450: { MA(0x11d1), T "([za7])" }, ! 451: { MA(0x11d2, OW), T "([za7],-$3211)" }, ! 452: { MA(0x11d3, OL), T "([za7],-$3210fedd)" }, ! 453: // an,bs=1, bdsize=2 ! 454: { MA(0x11a0, BW), T "(-$7655,za7,d1.w)" }, ! 455: { MA(0x11a1, BW), T "([-$7655,za7,d1.w])" }, ! 456: { MA(0x11a2, BW, OW), T "([-$7655,za7,d1.w],-$3211)" }, ! 457: { MA(0x11a3, BW, OL), T "([-$7655,za7,d1.w],-$3210fedd)" }, ! 458: { MA(0x11a5, BW), T "([-$7655,za7],d1.w)" }, ! 459: { MA(0x11a6, BW, OW), T "([-$7655,za7],d1.w,-$3211)" }, ! 460: { MA(0x11a7, BW, OL), T "([-$7655,za7],d1.w,-$3210fedd)" }, ! 461: { MA(0x11e0, BW), T "(-$7655,za7)" }, ! 462: { MA(0x11e1, BW), T "([-$7655,za7])" }, ! 463: { MA(0x11e2, BW, OW), T "([-$7655,za7],-$3211)" }, ! 464: { MA(0x11e3, BW, OL), T "([-$7655,za7],-$3210fedd)" }, ! 465: // an,bs=1, bdsize=3 ! 466: { MA(0x11b0, BL), T "(-$76543211,za7,d1.w)" }, ! 467: { MA(0x11b1, BL), T "([-$76543211,za7,d1.w])" }, ! 468: { MA(0x11b2, BL, OW), T "([-$76543211,za7,d1.w],-$3211)" }, ! 469: { MA(0x11b3, BL, OL), T "([-$76543211,za7,d1.w],-$3210fedd)" }, ! 470: { MA(0x11b5, BL), T "([-$76543211,za7],d1.w)" }, ! 471: { MA(0x11b6, BL, OW), T "([-$76543211,za7],d1.w,-$3211)" }, ! 472: { MA(0x11b7, BL, OL), T "([-$76543211,za7],d1.w,-$3210fedd)" }, ! 473: { MA(0x11f0, BL), T "(-$76543211,za7)" }, ! 474: { MA(0x11f1, BL), T "([-$76543211,za7])" }, ! 475: { MA(0x11f2, BL, OW), T "([-$76543211,za7],-$3211)" }, ! 476: { MA(0x11f3, BL, OL), T "([-$76543211,za7],-$3210fedd)" }, ! 477: #undef MA ! 478: #undef T ! 479: #define MA(x, ...) { 0x4a3b, x, __VA_ARGS__ } ! 480: #define T "tst.b " ! 481: // pc,bs=0, bdsize=1 ! 482: { MA(0x1110), T "(pc,d1.w)" }, ! 483: { MA(0x1111), T "([pc,d1.w])" }, ! 484: { MA(0x1112, OW), T "([pc,d1.w],-$3211)" }, ! 485: { MA(0x1113, OL), T "([pc,d1.w],-$3210fedd)" }, ! 486: { MA(0x1115), T "([pc],d1.w)" }, ! 487: { MA(0x1116, OW), T "([pc],d1.w,-$3211)" }, ! 488: { MA(0x1117, OL), T "([pc],d1.w,-$3210fedd)" }, ! 489: { MA(0x1150), T "(pc)" }, ! 490: { MA(0x1151), T "([pc])" }, ! 491: { MA(0x1152, OW), T "([pc],-$3211)" }, ! 492: { MA(0x1153, OL), T "([pc],-$3210fedd)" }, ! 493: // pc,bs=0, bdsize=2 ! 494: { MA(0x1120, BW), T "(-$7655,pc,d1.w)" }, ! 495: { MA(0x1121, BW), T "([-$7655,pc,d1.w])" }, ! 496: { MA(0x1122, BW, OW), T "([-$7655,pc,d1.w],-$3211)" }, ! 497: { MA(0x1123, BW, OL), T "([-$7655,pc,d1.w],-$3210fedd)" }, ! 498: { MA(0x1125, BW), T "([-$7655,pc],d1.w)" }, ! 499: { MA(0x1126, BW, OW), T "([-$7655,pc],d1.w,-$3211)" }, ! 500: { MA(0x1127, BW, OL), T "([-$7655,pc],d1.w,-$3210fedd)" }, ! 501: { MA(0x1160, BW), T "(-$7655,pc)" }, ! 502: { MA(0x1161, BW), T "([-$7655,pc])" }, ! 503: { MA(0x1162, BW, OW), T "([-$7655,pc],-$3211)" }, ! 504: { MA(0x1163, BW, OL), T "([-$7655,pc],-$3210fedd)" }, ! 505: // an,bs=0, bdsize=3 ! 506: { MA(0x1130, BL), T "(-$76543211,pc,d1.w)" }, ! 507: { MA(0x1131, BL), T "([-$76543211,pc,d1.w])" }, ! 508: { MA(0x1132, BL, OW), T "([-$76543211,pc,d1.w],-$3211)" }, ! 509: { MA(0x1133, BL, OL), T "([-$76543211,pc,d1.w],-$3210fedd)" }, ! 510: { MA(0x1135, BL), T "([-$76543211,pc],d1.w)" }, ! 511: { MA(0x1136, BL, OW), T "([-$76543211,pc],d1.w,-$3211)" }, ! 512: { MA(0x1137, BL, OL), T "([-$76543211,pc],d1.w,-$3210fedd)" }, ! 513: { MA(0x1170, BL), T "(-$76543211,pc)" }, ! 514: { MA(0x1171, BL), T "([-$76543211,pc])" }, ! 515: { MA(0x1172, BL, OW), T "([-$76543211,pc],-$3211)" }, ! 516: { MA(0x1173, BL, OL), T "([-$76543211,pc],-$3210fedd)" }, ! 517: // an,bs=1, bdsize=1 ! 518: { MA(0x1190), T "(zpc,d1.w)" }, ! 519: { MA(0x1191), T "([zpc,d1.w])" }, ! 520: { MA(0x1192, OW), T "([zpc,d1.w],-$3211)" }, ! 521: { MA(0x1193, OL), T "([zpc,d1.w],-$3210fedd)" }, ! 522: { MA(0x1195), T "([zpc],d1.w)" }, ! 523: { MA(0x1196, OW), T "([zpc],d1.w,-$3211)" }, ! 524: { MA(0x1197, OL), T "([zpc],d1.w,-$3210fedd)" }, ! 525: { MA(0x11d0), T "(zpc)" }, ! 526: { MA(0x11d1), T "([zpc])" }, ! 527: { MA(0x11d2, OW), T "([zpc],-$3211)" }, ! 528: { MA(0x11d3, OL), T "([zpc],-$3210fedd)" }, ! 529: // an,bs=1, bdsize=2 ! 530: { MA(0x11a0, BW), T "(-$7655,zpc,d1.w)" }, ! 531: { MA(0x11a1, BW), T "([-$7655,zpc,d1.w])" }, ! 532: { MA(0x11a2, BW, OW), T "([-$7655,zpc,d1.w],-$3211)" }, ! 533: { MA(0x11a3, BW, OL), T "([-$7655,zpc,d1.w],-$3210fedd)" }, ! 534: { MA(0x11a5, BW), T "([-$7655,zpc],d1.w)" }, ! 535: { MA(0x11a6, BW, OW), T "([-$7655,zpc],d1.w,-$3211)" }, ! 536: { MA(0x11a7, BW, OL), T "([-$7655,zpc],d1.w,-$3210fedd)" }, ! 537: { MA(0x11e0, BW), T "(-$7655,zpc)" }, ! 538: { MA(0x11e1, BW), T "([-$7655,zpc])" }, ! 539: { MA(0x11e2, BW, OW), T "([-$7655,zpc],-$3211)" }, ! 540: { MA(0x11e3, BW, OL), T "([-$7655,zpc],-$3210fedd)" }, ! 541: // an,bs=1, bdsize=3 ! 542: { MA(0x11b0, BL), T "(-$76543211,zpc,d1.w)" }, ! 543: { MA(0x11b1, BL), T "([-$76543211,zpc,d1.w])" }, ! 544: { MA(0x11b2, BL, OW), T "([-$76543211,zpc,d1.w],-$3211)" }, ! 545: { MA(0x11b3, BL, OL), T "([-$76543211,zpc,d1.w],-$3210fedd)" }, ! 546: { MA(0x11b5, BL), T "([-$76543211,zpc],d1.w)" }, ! 547: { MA(0x11b6, BL, OW), T "([-$76543211,zpc],d1.w,-$3211)" }, ! 548: { MA(0x11b7, BL, OL), T "([-$76543211,zpc],d1.w,-$3210fedd)" }, ! 549: { MA(0x11f0, BL), T "(-$76543211,zpc)" }, ! 550: { MA(0x11f1, BL), T "([-$76543211,zpc])" }, ! 551: { MA(0x11f2, BL, OW), T "([-$76543211,zpc],-$3211)" }, ! 552: { MA(0x11f3, BL, OL), T "([-$76543211,zpc],-$3210fedd)" }, ! 553: #undef MA ! 554: #undef T ! 555: ! 556: // movem (制御・ポストインクリメント) ! 557: { { 0x48d0, 0x0000 }, "movem.l noregs,(a0)" }, // リストなし ! 558: { { 0x48d0, 0x0001 }, "movem.l d0,(a0)" }, // 単体 ! 559: { { 0x48d0, 0x0006 }, "movem.l d1-d2,(a0)" }, // dで連続 ! 560: { { 0x48d0, 0x00f6 }, "movem.l d1-d2/d4-d7,(a0)" }, // 区間が複数 ! 561: { { 0x48d0, 0x01ff }, "movem.l d0-d7/a0,(a0)" }, // d/a をまたぐ ! 562: { { 0x48d0, 0x03ff }, "movem.l d0-d7/a0-a1,(a0)" }, // d/a をまたいで連続 ! 563: { { 0x48d0, 0xff00 }, "movem.l a0-a7,(a0)" }, // aで連続 ! 564: { { 0x48d0, 0x6186 }, "movem.l d1-d2/d7/a0/a5-a6,(a0)" }, // 複雑なの ! 565: // movem (プリデクリメント) ! 566: { { 0x48e0, 0x0000 }, "movem.l noregs,-(a0)" }, // リストなし ! 567: { { 0x48e0, 0x8000 }, "movem.l d0,-(a0)" }, // 単体 ! 568: { { 0x48e0, 0x6000 }, "movem.l d1-d2,-(a0)" }, // dで連続 ! 569: { { 0x48e0, 0x6f00 }, "movem.l d1-d2/d4-d7,-(a0)" },// 区間が複数 ! 570: { { 0x48e0, 0xff80 }, "movem.l d0-d7/a0,-(a0)" }, // d/a をまたぐ ! 571: { { 0x48e0, 0xffc0 }, "movem.l d0-d7/a0-a1,-(a0)" },// d/a をまたいで連続 ! 572: { { 0x48e0, 0x00ff }, "movem.l a0-a7,-(a0)" }, // aで連続 ! 573: { { 0x48e0, 0x6186 }, "movem.l d1-d2/d7/a0/a5-a6,-(a0)" }, // 複雑なの ! 574: // movec (制御レジスタだけ確認、向きはもういいだろう) ! 575: { { 0x4e7b, 0x0000 }, "movec.l d0,sfc" }, ! 576: { { 0x4e7b, 0x0001 }, "movec.l d0,dfc" }, ! 577: { { 0x4e7b, 0x0002 }, "movec.l d0,cacr" }, ! 578: { { 0x4e7b, 0x8800 }, "movec.l a0,usp" }, ! 579: { { 0x4e7b, 0x8801 }, "movec.l a0,vbr" }, ! 580: { { 0x4e7b, 0x8802 }, "movec.l a0,caar" }, ! 581: { { 0x4e7b, 0x8803 }, "movec.l a0,msp" }, ! 582: { { 0x4e7b, 0x8804 }, "movec.l a0,isp" }, ! 583: // condition ! 584: { { 0x50fc }, "trapt" }, ! 585: { { 0x51fc }, "trapf" }, ! 586: { { 0x52fc }, "traphi" }, ! 587: { { 0x53fc }, "trapls" }, ! 588: { { 0x54fc }, "trapcc" }, ! 589: { { 0x55fc }, "trapcs" }, ! 590: { { 0x56fc }, "trapne" }, ! 591: { { 0x57fc }, "trapeq" }, ! 592: { { 0x58fc }, "trapvc" }, ! 593: { { 0x59fc }, "trapvs" }, ! 594: { { 0x5afc }, "trappl" }, ! 595: { { 0x5bfc }, "trapmi" }, ! 596: { { 0x5cfc }, "trapge" }, ! 597: { { 0x5dfc }, "traplt" }, ! 598: { { 0x5efc }, "trapgt" }, ! 599: { { 0x5ffc }, "traple" }, ! 600: ! 601: // MMU ! 602: { { 0xf010, 0x0800 }, "pmove.l (a0),tt0" }, ! 603: { { 0xf010, 0x0900 }, "pmovefd.l (a0),tt0" }, ! 604: { { 0xf010, 0x0a00 }, "pmove.l tt0,(a0)" }, ! 605: { { 0xf010, 0x0c00 }, "pmove.l (a0),tt1" }, ! 606: { { 0xf010, 0x0d00 }, "pmovefd.l (a0),tt1" }, ! 607: { { 0xf010, 0x0e00 }, "pmove.l tt1,(a0)" }, ! 608: { { 0xf010, 0x2000 }, "ploadw sfc,(a0)" }, ! 609: { { 0xf010, 0x2008 }, "ploadw d0,(a0)" }, ! 610: { { 0xf010, 0x2017 }, "ploadw #7,(a0)" }, ! 611: { { 0xf010, 0x2201 }, "ploadr dfc,(a0)" }, ! 612: { { 0xf010, 0x2208 }, "ploadr d0,(a0)" }, ! 613: { { 0xf010, 0x2210 }, "ploadr #0,(a0)" }, ! 614: { { 0xf000, 0x2400 }, "pflusha" }, ! 615: { { 0xf000, 0x30e0 }, "pflush sfc,#7" }, ! 616: { { 0xf000, 0x3011 }, "pflush #1,#0" }, ! 617: { { 0xf010, 0x38e0 }, "pflush sfc,#7,(a0)" }, ! 618: { { 0xf010, 0x3811 }, "pflush #1,#0,(a0)" }, ! 619: { { 0xf010, 0x4000 }, "pmove.l (a0),tc" }, ! 620: { { 0xf010, 0x4100 }, "pmovefd.l (a0),tc" }, ! 621: { { 0xf010, 0x4200 }, "pmove.l tc,(a0)" }, ! 622: { { 0xf010, 0x4800 }, "pmove.q (a0),srp" }, ! 623: { { 0xf010, 0x4900 }, "pmovefd.q (a0),srp" }, ! 624: { { 0xf010, 0x4a00 }, "pmove.q srp,(a0)" }, ! 625: { { 0xf010, 0x4c00 }, "pmove.q (a0),crp" }, ! 626: { { 0xf010, 0x4d00 }, "pmovefd.q (a0),crp" }, ! 627: { { 0xf010, 0x4e00 }, "pmove.q crp,(a0)" }, ! 628: { { 0xf010, 0x6000 }, "pmove.w (a0),mmusr" }, ! 629: { { 0xf010, 0x6200 }, "pmove.w mmusr,(a0)" }, ! 630: { { 0xf010, 0x8000 }, "ptestw sfc,(a0),#0" }, ! 631: { { 0xf010, 0x9d21 }, "ptestw dfc,(a0),#7,a1" }, ! 632: { { 0xf010, 0x8208 }, "ptestr d0,(a0),#0" }, ! 633: { { 0xf010, 0x9ff7 }, "ptestr #7,(a0),#7,a7" }, ! 634: ! 635: // FPU ! 636: { { 0xf200, 0x0000 }, "fmove.x fp0,fp0" }, ! 637: { { 0xf200, 0x0500 }, "fmove.x fp1,fp2" }, ! 638: { { 0xf200, 0x0001 }, "fint.x fp0" }, ! 639: { { 0xf200, 0x0501 }, "fint.x fp1,fp2" }, ! 640: { { 0xf200, 0x0002 }, "fsinh.x fp0" }, ! 641: { { 0xf200, 0x0502 }, "fsinh.x fp1,fp2" }, ! 642: { { 0xf200, 0x0003 }, "fintrz.x fp0" }, ! 643: { { 0xf200, 0x0503 }, "fintrz.x fp1,fp2" }, ! 644: { { 0xf200, 0x0004 }, "fsqrt.x fp0" }, ! 645: { { 0xf200, 0x0504 }, "fsqrt.x fp1,fp2" }, ! 646: { { 0xf200, 0x0006 }, "flognp1.x fp0" }, ! 647: { { 0xf200, 0x0506 }, "flognp1.x fp1,fp2" }, ! 648: { { 0xf200, 0x0008 }, "fetoxm1.x fp0" }, ! 649: { { 0xf200, 0x0508 }, "fetoxm1.x fp1,fp2" }, ! 650: { { 0xf200, 0x0009 }, "ftanh.x fp0" }, ! 651: { { 0xf200, 0x0509 }, "ftanh.x fp1,fp2" }, ! 652: { { 0xf200, 0x000a }, "fatan.x fp0" }, ! 653: { { 0xf200, 0x050a }, "fatan.x fp1,fp2" }, ! 654: { { 0xf200, 0x000c }, "fasin.x fp0" }, ! 655: { { 0xf200, 0x050c }, "fasin.x fp1,fp2" }, ! 656: { { 0xf200, 0x000d }, "fatanh.x fp0" }, ! 657: { { 0xf200, 0x050d }, "fatanh.x fp1,fp2" }, ! 658: { { 0xf200, 0x000e }, "fsin.x fp0" }, ! 659: { { 0xf200, 0x050e }, "fsin.x fp1,fp2" }, ! 660: { { 0xf200, 0x000f }, "ftan.x fp0" }, ! 661: { { 0xf200, 0x050f }, "ftan.x fp1,fp2" }, ! 662: { { 0xf200, 0x0010 }, "fetox.x fp0" }, ! 663: { { 0xf200, 0x0510 }, "fetox.x fp1,fp2" }, ! 664: { { 0xf200, 0x0011 }, "ftwotox.x fp0" }, ! 665: { { 0xf200, 0x0511 }, "ftwotox.x fp1,fp2" }, ! 666: { { 0xf200, 0x0012 }, "ftentox.x fp0" }, ! 667: { { 0xf200, 0x0512 }, "ftentox.x fp1,fp2" }, ! 668: { { 0xf200, 0x0014 }, "flogn.x fp0" }, ! 669: { { 0xf200, 0x0514 }, "flogn.x fp1,fp2" }, ! 670: { { 0xf200, 0x0015 }, "flog10.x fp0" }, ! 671: { { 0xf200, 0x0515 }, "flog10.x fp1,fp2" }, ! 672: { { 0xf200, 0x0016 }, "flog2.x fp0" }, ! 673: { { 0xf200, 0x0516 }, "flog2.x fp1,fp2" }, ! 674: { { 0xf200, 0x0018 }, "fabs.x fp0" }, ! 675: { { 0xf200, 0x0518 }, "fabs.x fp1,fp2" }, ! 676: { { 0xf200, 0x0019 }, "fcosh.x fp0" }, ! 677: { { 0xf200, 0x0519 }, "fcosh.x fp1,fp2" }, ! 678: { { 0xf200, 0x001a }, "fneg.x fp0" }, ! 679: { { 0xf200, 0x051a }, "fneg.x fp1,fp2" }, ! 680: { { 0xf200, 0x001c }, "facos.x fp0" }, ! 681: { { 0xf200, 0x051c }, "facos.x fp1,fp2" }, ! 682: { { 0xf200, 0x001d }, "fcos.x fp0" }, ! 683: { { 0xf200, 0x051d }, "fcos.x fp1,fp2" }, ! 684: { { 0xf200, 0x001e }, "fgetexp.x fp0" }, ! 685: { { 0xf200, 0x051e }, "fgetexp.x fp1,fp2" }, ! 686: { { 0xf200, 0x001f }, "fgetman.x fp0" }, ! 687: { { 0xf200, 0x051f }, "fgetman.x fp1,fp2" }, ! 688: { { 0xf200, 0x0020 }, "fdiv.x fp0" }, ! 689: { { 0xf200, 0x0520 }, "fdiv.x fp1,fp2" }, ! 690: { { 0xf200, 0x0021 }, "fmod.x fp0" }, ! 691: { { 0xf200, 0x0521 }, "fmod.x fp1,fp2" }, ! 692: { { 0xf200, 0x0022 }, "fadd.x fp0" }, ! 693: { { 0xf200, 0x0522 }, "fadd.x fp1,fp2" }, ! 694: { { 0xf200, 0x0023 }, "fmul.x fp0" }, ! 695: { { 0xf200, 0x0523 }, "fmul.x fp1,fp2" }, ! 696: { { 0xf200, 0x0024 }, "fsgldiv.x fp0" }, ! 697: { { 0xf200, 0x0524 }, "fsgldiv.x fp1,fp2" }, ! 698: { { 0xf200, 0x0025 }, "frem.x fp0" }, ! 699: { { 0xf200, 0x0525 }, "frem.x fp1,fp2" }, ! 700: { { 0xf200, 0x0026 }, "fscale.x fp0" }, ! 701: { { 0xf200, 0x0526 }, "fscale.x fp1,fp2" }, ! 702: { { 0xf200, 0x0027 }, "fsglmul.x fp0" }, ! 703: { { 0xf200, 0x0527 }, "fsglmul.x fp1,fp2" }, ! 704: { { 0xf200, 0x0028 }, "fsub.x fp0" }, ! 705: { { 0xf200, 0x0528 }, "fsub.x fp1,fp2" }, ! 706: { { 0xf200, 0x05b2 }, "fsincos.x fp1,fp2:fp3" }, ! 707: { { 0xf200, 0x04b1 }, "fsincos.x fp1,fp1:fp1" }, ! 708: { { 0xf200, 0x0038 }, "fcmp.x fp0" }, ! 709: { { 0xf200, 0x0538 }, "fcmp.x fp1,fp2" }, ! 710: { { 0xf200, 0x003a }, "ftst.x fp0" }, ! 711: { { 0xf200, 0x053a }, "ftst.x fp1,fp2" }, ! 712: ! 713: { { 0xf210, 0x4080 }, "fmove.l (a0),fp1" }, ! 714: { { 0xf210, 0x4480 }, "fmove.s (a0),fp1" }, ! 715: { { 0xf210, 0x4880 }, "fmove.x (a0),fp1" }, ! 716: { { 0xf210, 0x4c80 }, "fmove.p (a0),fp1" }, ! 717: { { 0xf210, 0x5080 }, "fmove.w (a0),fp1" }, ! 718: { { 0xf210, 0x5480 }, "fmove.d (a0),fp1" }, ! 719: { { 0xf210, 0x5880 }, "fmove.b (a0),fp1" }, ! 720: { { 0xf23c, 0x4080, 0x89ab,0xcdef}, "fmove.l #$89abcdef,fp1" }, ! 721: { { 0xf23c, 0x4480, 0x89ab,0xcdef}, "fmove.s #$89abcdef,fp1" }, ! 722: { { 0xf23c, 0x4880, 0x89ab,0xcdef, 0x1122,0x3344, 0x5566, 0x7788 }, ! 723: "fmove.x #$89abcdef_11223344_55667788,fp1" }, ! 724: { { 0xf23c, 0x4c80, 0x89ab,0xcdef, 0x1122,0x3344, 0x5566, 0x7788 }, ! 725: "fmove.p #$89abcdef_11223344_55667788,fp1" }, ! 726: { { 0xf23c, 0x5080, 0x89ab }, "fmove.w #$89ab,fp1" }, ! 727: { { 0xf23c, 0x5480, 0x89ab,0xcdef, 0x1122,0x3344 }, ! 728: "fmove.d #$89abcdef_11223344,fp1" }, ! 729: { { 0xf23c, 0x5880, 0x89ab }, "fmove.b #$ab,fp1" }, ! 730: // 代表で fmove 以外のを1つだけ ! 731: { { 0xf210, 0x4081 }, "fint.l (a0),fp1" }, ! 732: { { 0xf210, 0x4481 }, "fint.s (a0),fp1" }, ! 733: { { 0xf210, 0x4881 }, "fint.x (a0),fp1" }, ! 734: { { 0xf210, 0x4c81 }, "fint.p (a0),fp1" }, ! 735: { { 0xf210, 0x5081 }, "fint.w (a0),fp1" }, ! 736: { { 0xf210, 0x5481 }, "fint.d (a0),fp1" }, ! 737: { { 0xf210, 0x5881 }, "fint.b (a0),fp1" }, ! 738: ! 739: { { 0xf200, 0x5c81 }, "fmovecr.x #$01,fp1" }, // 不正定数 ! 740: { { 0xf200, 0x5cff }, "fmovecr.x #$7f,fp1" }, ! 741: { { 0xf200, 0x5c80 }, "fmovecr.x #$00<pi>,fp1" }, ! 742: { { 0xf200, 0x5c8b }, "fmovecr.x #$0b<log10(2)>,fp1" }, ! 743: { { 0xf200, 0x5c8c }, "fmovecr.x #$0c<e>,fp1" }, ! 744: { { 0xf200, 0x5c8d }, "fmovecr.x #$0d<log2(e)>,fp1" }, ! 745: { { 0xf200, 0x5c8e }, "fmovecr.x #$0e<log10(e)>,fp1" }, ! 746: { { 0xf200, 0x5c8f }, "fmovecr.x #$0f<0>,fp1" }, ! 747: { { 0xf200, 0x5cb0 }, "fmovecr.x #$30<ln(2)>,fp1" }, ! 748: { { 0xf200, 0x5cb1 }, "fmovecr.x #$31<ln(10)>,fp1" }, ! 749: { { 0xf200, 0x5cb2 }, "fmovecr.x #$32<1>,fp1" }, ! 750: { { 0xf200, 0x5cb3 }, "fmovecr.x #$33<10>,fp1" }, ! 751: { { 0xf200, 0x5cb4 }, "fmovecr.x #$34<1e2>,fp1" }, ! 752: { { 0xf200, 0x5cb5 }, "fmovecr.x #$35<1e4>,fp1" }, ! 753: { { 0xf200, 0x5cb6 }, "fmovecr.x #$36<1e8>,fp1" }, ! 754: { { 0xf200, 0x5cb7 }, "fmovecr.x #$37<1e16>,fp1" }, ! 755: { { 0xf200, 0x5cb8 }, "fmovecr.x #$38<1e32>,fp1" }, ! 756: { { 0xf200, 0x5cb9 }, "fmovecr.x #$39<1e64>,fp1" }, ! 757: { { 0xf200, 0x5cba }, "fmovecr.x #$3a<1e128>,fp1" }, ! 758: { { 0xf200, 0x5cbb }, "fmovecr.x #$3b<1e256>,fp1" }, ! 759: { { 0xf200, 0x5cbc }, "fmovecr.x #$3c<1e512>,fp1" }, ! 760: { { 0xf200, 0x5cbd }, "fmovecr.x #$3d<1e1024>,fp1" }, ! 761: { { 0xf200, 0x5cbe }, "fmovecr.x #$3e<1e2048>,fp1" }, ! 762: { { 0xf200, 0x5cbf }, "fmovecr.x #$3f<1e4096>,fp1" }, ! 763: ! 764: { { 0xf210, 0x6080 }, "fmove.l fp1,(a0)" }, ! 765: { { 0xf210, 0x6480 }, "fmove.s fp1,(a0)" }, ! 766: { { 0xf210, 0x6880 }, "fmove.x fp1,(a0)" }, ! 767: { { 0xf210, 0x6c80 }, "fmove.p fp1,(a0){#0}" }, ! 768: { { 0xf210, 0x6cbf }, "fmove.p fp1,(a0){#63}" }, ! 769: { { 0xf210, 0x6cc0 }, "fmove.p fp1,(a0){#-64}" }, ! 770: { { 0xf210, 0x7080 }, "fmove.w fp1,(a0)" }, ! 771: { { 0xf210, 0x7480 }, "fmove.d fp1,(a0)" }, ! 772: { { 0xf210, 0x7880 }, "fmove.b fp1,(a0)" }, ! 773: { { 0xf210, 0x7cf0 }, "fmove.p fp1,(a0){d7}" }, ! 774: ! 775: { { 0xf210, 0x8400 }, "fmove.l (a0),fpiar" }, ! 776: { { 0xf210, 0x8800 }, "fmove.l (a0),fpsr" }, ! 777: { { 0xf210, 0x8c00 }, "fmovem.l (a0),fpsr/fpiar" }, ! 778: { { 0xf210, 0x9000 }, "fmove.l (a0),fpcr" }, ! 779: { { 0xf210, 0x9400 }, "fmovem.l (a0),fpcr/fpiar" }, ! 780: { { 0xf210, 0x9800 }, "fmovem.l (a0),fpcr/fpsr" }, ! 781: { { 0xf210, 0x9c00 }, "fmovem.l (a0),fpcr/fpsr/fpiar" }, ! 782: { { 0xf23c, 0x8400, 0x89ab,0xcdef },"fmove.l #$89abcdef,fpiar" }, ! 783: { { 0xf23c, 0x8800, 0x89ab,0xcdef },"fmove.l #$89abcdef,fpsr" }, ! 784: { { 0xf23c, 0x8c00, 0x89ab,0xcdef, 0xabcd,0xef01 }, ! 785: "fmovem.l #$89abcdef/#$abcdef01,fpsr/fpiar" }, ! 786: { { 0xf23c, 0x9000, 0x89ab,0xcdef },"fmove.l #$89abcdef,fpcr" }, ! 787: { { 0xf23c, 0x9400, 0x89ab,0xcdef, 0xabcd,0xef01 }, ! 788: "fmovem.l #$89abcdef/#$abcdef01,fpcr/fpiar" }, ! 789: { { 0xf23c, 0x9800, 0x89ab,0xcdef, 0xabcd,0xef01 }, ! 790: "fmovem.l #$89abcdef/#$abcdef01,fpcr/fpsr" }, ! 791: { { 0xf23c, 0x9c00, 0x89ab,0xcdef, 0xabcd,0xef01, 0xcdef,0x1234 }, ! 792: "fmovem.l #$89abcdef/#$abcdef01/#$cdef1234,fpcr/fpsr/fpiar" }, ! 793: { { 0xf210, 0xa400 }, "fmove.l fpiar,(a0)" }, ! 794: { { 0xf210, 0xa800 }, "fmove.l fpsr,(a0)" }, ! 795: { { 0xf210, 0xac00 }, "fmovem.l fpsr/fpiar,(a0)" }, ! 796: { { 0xf210, 0xb000 }, "fmove.l fpcr,(a0)" }, ! 797: { { 0xf210, 0xb400 }, "fmovem.l fpcr/fpiar,(a0)" }, ! 798: { { 0xf210, 0xb800 }, "fmovem.l fpcr/fpsr,(a0)" }, ! 799: { { 0xf210, 0xbc00 }, "fmovem.l fpcr/fpsr/fpiar,(a0)" }, ! 800: ! 801: { { 0xf210, 0xd080 }, "fmovem.x (a0),fp0" }, ! 802: { { 0xf210, 0xd810 }, "fmovem.x (a0),d1" }, ! 803: { { 0xf220, 0xe801 }, "fmovem.x fp0,-(a0)" }, ! 804: { { 0xf210, 0xf080 }, "fmovem.x fp0,(a0)" }, ! 805: { { 0xf210, 0xf810 }, "fmovem.x d1,(a0)" }, ! 806: // fmovem (制御・ポストインクリメント) ! 807: { { 0xf210, 0xf000 }, "fmovem.x nofpn,(a0)" }, // リストなし ! 808: { { 0xf210, 0xf0c0 }, "fmovem.x fp0-fp1,(a0)" }, // 連続 ! 809: { { 0xf210, 0xf0ec }, "fmovem.x fp0-fp2/fp4-fp5,(a0)" },// 区間が複数 ! 810: { { 0xf210, 0xf00f }, "fmovem.x fp4-fp7,(a0)" }, // fp7で終わる ! 811: // fmovem (プリデクリメント) ! 812: { { 0xf220, 0xe800 }, "fmovem.x nofpn,-(a0)" }, // リストなし ! 813: { { 0xf220, 0xe803 }, "fmovem.x fp0-fp1,-(a0)" }, // 連続 ! 814: { { 0xf220, 0xe837 }, "fmovem.x fp0-fp2/fp4-fp5,-(a0)"},// 区間が複数 ! 815: { { 0xf220, 0xe8f0 }, "fmovem.x fp4-fp7,-(a0)" }, // fp7で終わる ! 816: ! 817: { { 0xf240, 0x0001 }, "fseq.b d0" }, ! 818: { { 0xf249, 0x0001, 0xfffe }, "fdbeq d1,$00000100" }, ! 819: { { 0xf27a, 0x0001, 0x89ab }, "ftrapeq.w #$89ab" }, ! 820: { { 0xf27b, 0x0001, 0x89ab, 0xcdef},"ftrapeq.l #$89abcdef" }, ! 821: { { 0xf27c, 0x0001 }, "ftrapeq" }, ! 822: { { 0xf281, 0xfffe }, "fbeq.w $00000100" }, ! 823: { { 0xf2c1, 0xffff, 0xfffe }, "fbeq.l $00000100" }, ! 824: { { 0xf280, 0x0000 }, "fnop" }, ! 825: { { 0xf280, 0xfffe }, "fbf.w $00000100" }, ! 826: { { 0xf310 }, "fsave (a0)" }, ! 827: { { 0xf350 }, "frestore (a0)" }, ! 828: }; ! 829: ! 830: uint8 mem[1024]; ! 831: int failed; ! 832: ! 833: uint32 ! 834: m68030_phys_peek_8(uint32 addr) ! 835: { ! 836: if (addr >= sizeof(mem)) { ! 837: abort(); ! 838: } ! 839: return mem[addr ^ 1]; ! 840: } ! 841: ! 842: // リンカを通すためのダミー ! 843: uint64 ! 844: m68030_mmu_translate_peek(m68kcpu *cpu, uint32 addr, uint fc) ! 845: { ! 846: return -1; ! 847: } ! 848: ! 849: int ! 850: main(int ac, char *av[]) ! 851: { ! 852: std::string buf; ! 853: uint32 nextpc; ! 854: ! 855: for (int i = 0; i < countof(table); i++) { ! 856: std::string expected = table[i].expected; ! 857: std::vector<uint16> inst = table[i].inst; ! 858: ! 859: // エラー表示用 ! 860: std::string inst_str; ! 861: for (const auto j : inst) { ! 862: inst_str += string_format(" %04x", j); ! 863: } ! 864: ! 865: // 全体を初期化 ! 866: memset(mem, 0xdd, sizeof(mem)); ! 867: // 100番地から命令列を書き込む ! 868: for (int j = 0; j < inst.size(); j++) { ! 869: *(uint16 *)(mem + 0x100 + j * 2) = inst[j]; ! 870: } ! 871: // 検査 ! 872: Disasm disasm; ! 873: buf = disasm.Disassemble(0x100); ! 874: nextpc = disasm.GetNextAddr(); ! 875: // 照合 ! 876: if (buf != expected) { ! 877: printf(">%s expects \"%s\" but \"%s\"\n", inst_str.c_str(), ! 878: expected.c_str(), buf.c_str()); ! 879: failed++; ! 880: continue; ! 881: } ! 882: uint32 expected_pc = 0x100 + inst.size() * 2; ! 883: if (nextpc != expected_pc) { ! 884: printf(">%s expects nextpc=$%x but $%x\n", inst_str.c_str(), ! 885: expected_pc, nextpc); ! 886: failed++; ! 887: continue; ! 888: } ! 889: } ! 890: ! 891: int total = countof(table); ! 892: printf("%d tests, %d success", total, total - failed); ! 893: if (failed > 0) { ! 894: printf(", %d failed", failed); ! 895: } ! 896: printf("\n"); ! 897: return 0; ! 898: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.