Annotation of nono/m680x0/testdis.cpp, revision 1.1.1.4

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

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.