Annotation of nono/m680x0/disasm.cpp, revision 1.1

1.1     ! root        1: //
        !             2: // nono
        !             3: // Copyright (C) 2017 [email protected]
        !             4: //
        !             5: 
        !             6: #include "header.h"
        !             7: #include "m68030.h"
        !             8: #include "disasm.h"
        !             9: #include "bus.h"
        !            10: #include "mystring.h"
        !            11: 
        !            12: // コンストラクタ
        !            13: Disasm::Disasm()
        !            14: {
        !            15:        init();
        !            16: }
        !            17: 
        !            18: // デストラクタ
        !            19: Disasm::~Disasm()
        !            20: {
        !            21: }
        !            22: 
        !            23: // 逆アセンブル
        !            24: std::string
        !            25: Disasm::Disassemble(uint32 laddr, uint32 paddr)
        !            26: {
        !            27:        init();
        !            28: 
        !            29:        pc = laddr;
        !            30:        pc0 = pc;
        !            31:        phys_pc = paddr;
        !            32: 
        !            33:        switch (fetch16() >> 6) {
        !            34: #include "m68030switch.h"
        !            35:         default:
        !            36:                __unreachable();
        !            37:        }
        !            38: 
        !            39:        std::string s = name + size_str[size];
        !            40: 
        !            41:        if (!src.empty() || !dst.empty()) {
        !            42:                // オペランドが片方でもあればインデントする
        !            43:                int sl = s.length();
        !            44:                if (sl < 8) {
        !            45:                        s += std::string(8 - sl, ' ');
        !            46:                } else {
        !            47:                        s += ' ';
        !            48:                }
        !            49: 
        !            50:                // src があれば src を追加
        !            51:                if (!src.empty()) {
        !            52:                        s += src;
        !            53:                }
        !            54:                // 両方あればカンマで区切る
        !            55:                if (!src.empty() && !dst.empty()) {
        !            56:                        s += ",";
        !            57:                }
        !            58:                // dst があれば dst を追加
        !            59:                if (!dst.empty()) {
        !            60:                        s += dst;
        !            61:                }
        !            62:        }
        !            63: 
        !            64:        return s;
        !            65: }
        !            66: 
        !            67: // 逆アセンブル + ダンプ
        !            68: std::string
        !            69: Disasm::DisassembleWithDump(uint32 laddr, uint32 paddr)
        !            70: {
        !            71:        // 逆アセンブル
        !            72:        std::string s = Disassemble(laddr, paddr);
        !            73: 
        !            74:        // ダンプ
        !            75:        std::string dump;
        !            76:        for (const auto & i : ir) {
        !            77:                dump += string_format("%04x ", i);
        !            78:        }
        !            79:        if (ir.size() < 5) {
        !            80:                dump += std::string(25 - ir.size() * 5, ' ');
        !            81:        }
        !            82: 
        !            83:        return dump + s;
        !            84: }
        !            85: 
        !            86: // 1行逆アセンブル前の初期化
        !            87: void
        !            88: Disasm::init()
        !            89: {
        !            90:        ir.clear();
        !            91:        name.clear();
        !            92:        size = Size::None;
        !            93:        src.clear();
        !            94:        dst.clear();
        !            95: }
        !            96: 
        !            97: // ワードピーク (PCを進めずワードを取得する)
        !            98: uint32
        !            99: Disasm::peek16()
        !           100: {
        !           101:        // 物理空間から読み込む
        !           102:        uint16 data;
        !           103:        data = m68030_phys_peek_8(phys_pc) << 8;
        !           104:        data |= m68030_phys_peek_8(phys_pc + 1);
        !           105:        return data;
        !           106: }
        !           107: 
        !           108: // ワードフェッチ
        !           109: uint32
        !           110: Disasm::fetch16()
        !           111: {
        !           112:        uint16 data = peek16();
        !           113:        // IR に入れて PC を進める
        !           114:        ir.push_back(data);
        !           115:        pc += 2;
        !           116:        phys_pc += 2;
        !           117:        return data;
        !           118: }
        !           119: 
        !           120: // ロングワードフェッチ
        !           121: uint32
        !           122: Disasm::fetch32()
        !           123: {
        !           124:        uint32 data;
        !           125:        data = fetch16() << 16;
        !           126:        data |= fetch16();
        !           127:        return data;
        !           128: }
        !           129: 
        !           130: // 符号なし8ビット16進数を文字列にして返す
        !           131: std::string
        !           132: Disasm::hex8(uint32 val)
        !           133: {
        !           134:        return string_format("$%02x", val);
        !           135: }
        !           136: 
        !           137: // 符号なし16ビット16進数を文字列にして返す
        !           138: std::string
        !           139: Disasm::hex16(uint32 val)
        !           140: {
        !           141:        return string_format("$%04x", val);
        !           142: }
        !           143: 
        !           144: // 符号なし32ビット16進数を文字列にして返す
        !           145: std::string
        !           146: Disasm::hex32(uint32 val)
        !           147: {
        !           148:        return string_format("$%08x", val);
        !           149: }
        !           150: 
        !           151: // 符号つき8ビット16進数を文字列にして返す
        !           152: // 負数はマイナスを前置して表す。
        !           153: std::string
        !           154: Disasm::shex8(uint32 val)
        !           155: {
        !           156:        if ((int8)val < 0) {
        !           157:                return string_format("-$%02x", -(int8)val);
        !           158:        } else {
        !           159:                return string_format("$%02x", val);
        !           160:        }
        !           161: }
        !           162: 
        !           163: // 符号つき16ビット16進数を文字列にして返す
        !           164: // 負数はマイナスを前置して表す。
        !           165: std::string
        !           166: Disasm::shex16(uint32 val)
        !           167: {
        !           168:        if ((int16)val < 0) {
        !           169:                return string_format("-$%04x", -(int16)val);
        !           170:        } else {
        !           171:                return string_format("$%04x", val);
        !           172:        }
        !           173: }
        !           174: 
        !           175: // 符号つき32ビット16進数を文字列にして返す
        !           176: // 負数はマイナスを前置して表す。
        !           177: std::string
        !           178: Disasm::shex32(uint32 val)
        !           179: {
        !           180:        if ((int32)val < 0) {
        !           181:                return string_format("-$%08x", (uint32)(-(int64)(int32)val));
        !           182:        } else {
        !           183:                return string_format("$%08x", val);
        !           184:        }
        !           185: }
        !           186: 
        !           187: // EA を示す文字列を返す。ir[0] の mmmrrr の部分固定。
        !           188: std::string
        !           189: Disasm::make_ea()
        !           190: {
        !           191:        return make_ea(ir[0]);
        !           192: }
        !           193: 
        !           194: // mmrr に対して EA を示す文字列を返す。
        !           195: std::string
        !           196: Disasm::make_ea(uint mmrr)
        !           197: {
        !           198:        std::string s;
        !           199:        uint rr;
        !           200: 
        !           201:        mmrr &= 0x3f;
        !           202:        rr = mmrr & 7;
        !           203: 
        !           204:        switch (mmrr) {
        !           205:         case 0x00 ... 0x07:    // 0
        !           206:                s = make_dn(rr);
        !           207:                break;
        !           208:         case 0x08 ... 0x0f:    // 1
        !           209:                s = make_an(rr);
        !           210:                break;
        !           211:         case 0x10 ... 0x17:    // 2
        !           212:                s = make_anin(rr);
        !           213:                break;
        !           214:         case 0x18 ... 0x1f:    // 3
        !           215:                s = make_anpi(rr);
        !           216:                break;
        !           217:         case 0x20 ... 0x27:    // 4
        !           218:                s = make_anpd(rr);
        !           219:                break;
        !           220:         case 0x28 ... 0x2f:    // 5
        !           221:                s = disp16() + make_anin(rr);
        !           222:                break;
        !           223:         case 0x30 ... 0x37:    // 6
        !           224:                s = make_eaix(make_an(rr));
        !           225:                break;
        !           226:         case 0x38:                     // Abs.W
        !           227:                s = addr16();
        !           228:                break;
        !           229:         case 0x39:                     // Abs.L
        !           230:                s = addr32();
        !           231:                break;
        !           232:         case 0x3a:                     // d16(pc)
        !           233:                s = addr32(pc + (int32)(int16)fetch16()) +
        !           234:                        "(" + make_reg(Reg::PC) + ")";
        !           235:                break;
        !           236:         case 0x3b:                     // d8(pc,IX)
        !           237:                s = make_eaix(make_reg(Reg::PC));
        !           238:                break;
        !           239:         case 0x3c:                     // imm
        !           240:                switch (size) {
        !           241:                 case Size::B:
        !           242:                        s = imm8();
        !           243:                        break;
        !           244:                 case Size::W:
        !           245:                        s = imm16();
        !           246:                        break;
        !           247:                 case Size::L:
        !           248:                 case Size::S:
        !           249:                        s = imm32();
        !           250:                        break;
        !           251:                 case Size::D:
        !           252:                        s = imm32();
        !           253:                        s += string_format("_%08x", fetch32());
        !           254:                        break;
        !           255:                 case Size::X:
        !           256:                 case Size::P:
        !           257:                        s = imm32();
        !           258:                        s += string_format("_%08x", fetch32());
        !           259:                        s += string_format("_%08x", fetch32());
        !           260:                        break;
        !           261:                 default:
        !           262:                        s = "(invalid ea size?)";
        !           263:                        break;
        !           264:                }
        !           265:                break;
        !           266:         default:
        !           267:                s = "(invalid ea?)";
        !           268:                break;
        !           269:        }
        !           270:        return s;
        !           271: }
        !           272: 
        !           273: std::string
        !           274: Disasm::make_eaix(std::string basereg)
        !           275: {
        !           276:        static const char * const scalestr[] = {
        !           277:                "", "*2", "*4", "*8",
        !           278:        };
        !           279:        uint16 ext = fetch16();
        !           280:        bool full = (ext & 0x0100);
        !           281:        uint rn = (ext >> 12);
        !           282:        bool wl = (ext & 0x0800);
        !           283:        uint scale = (ext >> 9) & 3;
        !           284:        std::string idx;
        !           285:        std::string s;
        !           286: 
        !           287:        // インデックスレジスタ
        !           288:        Size sz = wl ? Size::L : Size::W;
        !           289:        idx = ",";
        !           290:        idx += make_rn(rn);             // Rn
        !           291:        idx += size_str[sz];    // .[WL]
        !           292:        idx += scalestr[scale]; // *{2/4/8}
        !           293: 
        !           294:        if (full == false) {
        !           295:                // 短縮フォーマット
        !           296:                uint8 disp = ext & 0xff;
        !           297:                if (disp == 0) {
        !           298:                        // $00 は省略する
        !           299:                } else {
        !           300:                        s = shex8(disp);
        !           301:                }
        !           302:                s += '(';
        !           303:                s += basereg;
        !           304:                s += idx;
        !           305:                s += ')';
        !           306:        } else {
        !           307:                // フルフォーマット
        !           308:                bool bs = (ext & 0x0080);
        !           309:                bool is = (ext & 0x0040);
        !           310:                uint bdsize = (ext >> 4) & 3;
        !           311:                uint iis = (ext & 7);
        !           312:                std::string bd;
        !           313:                std::string od;
        !           314: 
        !           315:                // ベースレジスタ・サプレス
        !           316:                if (bs) {
        !           317:                        basereg = "z" + basereg;
        !           318:                }
        !           319: 
        !           320:                // ベース・ディスプレースメント
        !           321:                switch (bdsize) {
        !           322:                 case 0:        // 予約
        !           323:                        return "<invalid EA(bdsize 0)>";
        !           324:                 case 1:        // ベースはヌル
        !           325:                        break;
        !           326:                 case 2:        // ベース.W
        !           327:                        bd = disp16();
        !           328:                        bd += ",";
        !           329:                        break;
        !           330:                 case 3:        // ベース.L
        !           331:                        bd = disp32();
        !           332:                        bd += ",";
        !           333:                        break;
        !           334:                }
        !           335: 
        !           336:                // アウター・ディスプレースメント
        !           337:                switch (iis & 3) {
        !           338:                 case 0:        // 不要?
        !           339:                 case 1:        // アウターはヌル
        !           340:                        break;
        !           341:                 case 2:        // アウター.W
        !           342:                        od = ",";
        !           343:                        od += disp16();
        !           344:                        break;
        !           345:                 case 3:        // アウター.L
        !           346:                        od = ",";
        !           347:                        od += disp32();
        !           348:                        break;
        !           349:                }
        !           350: 
        !           351:                if (is == 0) {
        !           352:                        switch (iis) {
        !           353:                         case 0:        // no memory indirection
        !           354:                                // (bd,base,idx)
        !           355:                                s = "(";
        !           356:                                s += bd;
        !           357:                                s += basereg;
        !           358:                                s += idx;
        !           359:                                s += ")";
        !           360:                                break;
        !           361:                         case 1:        // indirect pre-index with null outer
        !           362:                                // ([bd,base,idx])
        !           363:                         case 2:        // indirect pre-index with word outer
        !           364:                         case 3:        // indirect pre-index with long outer
        !           365:                                // ([bd,base,idx],od)
        !           366:                                s = "([";
        !           367:                                s += bd;
        !           368:                                s += basereg;
        !           369:                                s += idx;
        !           370:                                s += "]";
        !           371:                                s += od;
        !           372:                                s += ")";
        !           373:                                break;
        !           374: 
        !           375:                         case 4:
        !           376:                                return "<invalid EA(iis=4)>";
        !           377: 
        !           378:                         case 5:        // indirect post-index with null outer
        !           379:                                // ([bd,base],idx)
        !           380:                         case 6:        // indirect post-index with word outer
        !           381:                         case 7:        // indirect post-index with long outer
        !           382:                                // ([bd,base],idx,od)
        !           383:                                s = "([";
        !           384:                                s += bd;
        !           385:                                s += basereg;
        !           386:                                s += "]";
        !           387:                                s += idx;
        !           388:                                s += od;
        !           389:                                s += ")";
        !           390:                                break;
        !           391:                         default:
        !           392:                                __unreachable();
        !           393:                        }
        !           394:                } else {
        !           395:                        switch (iis) {
        !           396:                         case 0:        // no memory indirection
        !           397:                                // (bd,base)
        !           398:                                s = "(";
        !           399:                                s += bd;
        !           400:                                s += basereg;
        !           401:                                s += ")";
        !           402:                                break;
        !           403:                         case 1:        // memory indirect with null outer
        !           404:                                // ([bd,base])
        !           405:                         case 2:        // memory indirect with word outer
        !           406:                         case 3:        // memory indirect with long outer
        !           407:                                // ([bd,base],od)
        !           408:                                s += "([";
        !           409:                                s += bd;
        !           410:                                s += basereg;
        !           411:                                s += "]";
        !           412:                                s += od;
        !           413:                                s += ")";
        !           414:                                break;
        !           415:                         default:
        !           416:                                return string_format("<invalid EA(is=1,iis=%d)>", iis);
        !           417:                        }
        !           418:                }
        !           419:        }
        !           420: 
        !           421:        return s;
        !           422: }
        !           423: 
        !           424: // addr をワードアドレスとした時の文字列を返す
        !           425: std::string
        !           426: Disasm::addr16(uint32 addr)
        !           427: {
        !           428:        return hex16(addr & 0xffff);
        !           429: }
        !           430: 
        !           431: // addr をロングワードアドレスとした時の文字列を返す
        !           432: std::string
        !           433: Disasm::addr32(uint32 addr)
        !           434: {
        !           435:        return hex32(addr);
        !           436: }
        !           437: 
        !           438: // フェッチした値をワードアドレスとして文字列を返す
        !           439: std::string
        !           440: Disasm::addr16()
        !           441: {
        !           442:        return addr16(fetch16());
        !           443: }
        !           444: 
        !           445: // フェッチした値をロングワードアドレスとして文字列を返す
        !           446: std::string
        !           447: Disasm::addr32()
        !           448: {
        !           449:        return addr32(fetch32());
        !           450: }
        !           451: 
        !           452: // フェッチした値をワードディスプレースメントとして文字列を返す
        !           453: std::string
        !           454: Disasm::disp16()
        !           455: {
        !           456:        return shex16(fetch16());
        !           457: }
        !           458: 
        !           459: // フェッチした値をロングワードディスプレースメントとして文字列を返す
        !           460: std::string
        !           461: Disasm::disp32()
        !           462: {
        !           463:        return shex32(fetch32());
        !           464: }
        !           465: 
        !           466: // バイト即値 imm を文字列にして返す
        !           467: std::string
        !           468: Disasm::imm8()
        !           469: {
        !           470:        return "#" + hex8(fetch16() & 0xff);
        !           471: }
        !           472: 
        !           473: // ワード即値 imm を文字列にして返す
        !           474: std::string
        !           475: Disasm::imm16()
        !           476: {
        !           477:        return "#" + hex16(fetch16());
        !           478: }
        !           479: 
        !           480: // ロングワード即値 imm を文字列にして返す
        !           481: std::string
        !           482: Disasm::imm32()
        !           483: {
        !           484:        return "#" + hex32(fetch32());
        !           485: }
        !           486: 
        !           487: // Dn を文字列にして返す。n の上位ビットは無視する。
        !           488: std::string
        !           489: Disasm::make_dn(uint n)
        !           490: {
        !           491:        n = (n & 7) + '0';
        !           492:        std::string s;
        !           493:        s = 'd';
        !           494:        s += n;
        !           495:        return s;
        !           496: }
        !           497: 
        !           498: // An を文字列にして返す。n の上位ビットは無視する。
        !           499: std::string
        !           500: Disasm::make_an(uint n)
        !           501: {
        !           502:        n = (n & 7) + '0';
        !           503:        std::string s;
        !           504:        s = 'a';
        !           505:        s += n;
        !           506:        return s;
        !           507: }
        !           508: 
        !           509: // Rn (Dn/An) を文字列にして返す。n の上位ビットは無視する。
        !           510: std::string
        !           511: Disasm::make_rn(uint n)
        !           512: {
        !           513:        n &= 0x0f;
        !           514:        if (n < 8) {
        !           515:                return make_dn(n);
        !           516:        } else {
        !           517:                return make_an(n - 8);
        !           518:        }
        !           519: }
        !           520: 
        !           521: // (An) を文字列にして返す。n の上位ビットは無視する。
        !           522: std::string
        !           523: Disasm::make_anin(uint n)
        !           524: {
        !           525:        std::string s;
        !           526:        s = '(';
        !           527:        s += make_an(n);
        !           528:        s += ')';
        !           529:        return s;
        !           530: }
        !           531: 
        !           532: // (An)+ を文字列にして返す。n の上位ビットは無視する。
        !           533: std::string
        !           534: Disasm::make_anpi(uint n)
        !           535: {
        !           536:        std::string s;
        !           537:        s = make_anin(n);
        !           538:        s += '+';
        !           539:        return s;
        !           540: }
        !           541: 
        !           542: // -(An) を文字列にして返す。n の上位ビットは無視する。
        !           543: std::string
        !           544: Disasm::make_anpd(uint n)
        !           545: {
        !           546:        std::string s;
        !           547:        s = '-';
        !           548:        s += make_anin(n);
        !           549:        return s;
        !           550: }
        !           551: 
        !           552: // #qqq を文字列にして返す。ir[0] のいつものところにあると仮定する。
        !           553: std::string
        !           554: Disasm::make_q8()
        !           555: {
        !           556:        uint q = (ir[0] >> 9) & 7;
        !           557:        if (q == 0) {
        !           558:                q = 8;
        !           559:        }
        !           560:        return string_format("#%d", q);
        !           561: }
        !           562: 
        !           563: // regno で示されるレジスタ名を返す
        !           564: std::string
        !           565: Disasm::make_reg(Reg reg)
        !           566: {
        !           567:        return reg_names[reg];
        !           568: }
        !           569: 
        !           570: // MOVEM のレジスタリスト文字列を返す。
        !           571: // 第2ワードのフェッチは呼び出し側で行っておくこと。
        !           572: // プリデクリメントかどうかの判断はこちらで行う。
        !           573: std::string
        !           574: Disasm::make_reglist()
        !           575: {
        !           576:        uint16 mask = ir[1];
        !           577:        uint mm = (ir[0] >> 3) & 7;
        !           578:        std::string s;
        !           579: 
        !           580:        // 制御モード・ポストインクリメントモードなら、ビット順を入れ替える。
        !           581:        if (mm != 4) {
        !           582:                //mask = bitrev16(mask);
        !           583:                mask = ((mask & 0x5555) << 1) | ((mask >> 1) & 0x5555);
        !           584:                mask = ((mask & 0x3333) << 2) | ((mask >> 2) & 0x3333);
        !           585:                mask = ((mask & 0x0f0f) << 4) | ((mask >> 4) & 0x0f0f);
        !           586:                mask = (mask >> 8) | (mask << 8);
        !           587:        }
        !           588: 
        !           589:        // これでどちらのモードでも 16ビット内に上から順に並んでいる。
        !           590:        // Bit: 15 14 ...  1  0
        !           591:        // Reg: D0 D1 ... A6 A7
        !           592: 
        !           593:        make_reglist_half(s, "d", mask & 0xff00);
        !           594:        make_reglist_half(s, "a", mask << 8);
        !           595:        if (s.empty()) {
        !           596:                s = "noregs";
        !           597:        }
        !           598:        return s;
        !           599: }
        !           600: 
        !           601: // データレジスタもしくはアドレスレジスタの8ビット分だけを処理する。
        !           602: // FPn からも使うようになったので名前がいまいちか。
        !           603: // mask は以下のように上位8ビットに上から下に向かって並ぶように渡すこと。
        !           604: // ビット7 は番兵のため %0 にすること。
        !           605: //
        !           606: //  15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
        !           607: //  R0 R1 R2 R3 R4 R5 R6 R7 <-------- %0 --------->
        !           608: //
        !           609: void
        !           610: Disasm::make_reglist_half(std::string& s, const char *reg, uint16 mask)
        !           611: {
        !           612:        int top = -1;
        !           613: 
        !           614:        // 番兵を含めてループするため1つ多く回る
        !           615:        for (int i = 0; i < 9; i++, mask <<= 1) {
        !           616:                if ((int16)mask < 0) {
        !           617:                        // このビットは表示するレジスタ
        !           618:                        if (top < 0) {
        !           619:                                // 非表示中ならこのレジスタを出力する。
        !           620:                                // 初回以外は区切りを先に出力する。
        !           621:                                if (s.length() != 0) {
        !           622:                                        s += '/';
        !           623:                                }
        !           624:                                s += reg;
        !           625:                                s += '0' + i;
        !           626:                                top = i;
        !           627:                        }
        !           628:                } else {
        !           629:                        // このビットは表示しない
        !           630:                        if (top >= 0) {
        !           631:                                // 表示中ならこの一つ前のレジスタで終端
        !           632:                                int last = i - 1;
        !           633:                                if (top != last) {
        !           634:                                        // 表示が複数にまたがっていた
        !           635:                                        s += '-';
        !           636:                                        s += reg;
        !           637:                                        s += '0' + last;
        !           638:                                }
        !           639:                                top = -1;
        !           640:                        }
        !           641:                }
        !           642:        }
        !           643: }
        !           644: 
        !           645: // ビットフィールド欄を文字列にして返す。
        !           646: // 第2ワードのフェッチは呼び出し側で行っておくこと。
        !           647: std::string
        !           648: Disasm::make_bf()
        !           649: {
        !           650:        uint16 ext = ir[1];
        !           651:        uint od = (ext & 0x0800);
        !           652:        uint offset = (ext >> 6) & 0x1f;
        !           653:        uint wd = (ext & 0x0020);
        !           654:        uint width = ext & 0x1f;
        !           655:        std::string s = "{";
        !           656: 
        !           657:        // offset
        !           658:        if (od) {
        !           659:                if (offset < 8) {
        !           660:                        s += make_dn(offset);
        !           661:                } else {
        !           662:                        s += string_format("<invalid regno %d>", offset);
        !           663:                }
        !           664:        } else {
        !           665:                // オフセットは 0..31
        !           666:                s += string_format("#%d", offset);
        !           667:        }
        !           668: 
        !           669:        s += ":";
        !           670: 
        !           671:        // width
        !           672:        if (wd) {
        !           673:                if (width < 8) {
        !           674:                        s += make_dn(width);
        !           675:                } else {
        !           676:                        s += string_format("<invalid regno %d>", width); 
        !           677:                }
        !           678:        } else {
        !           679:                // 幅は 0 なら 32 を意味する
        !           680:                if (width == 0) {
        !           681:                        width = 32;
        !           682:                }
        !           683:                s += string_format("#%d", width);
        !           684:        }
        !           685: 
        !           686:        s += "}";
        !           687:        return s;
        !           688: }
        !           689: 
        !           690: // ファンクションコードフィールドを文字列にして返す。
        !           691: // MMU の拡張ワードは呼び出し側で取得済みのはず。
        !           692: std::string
        !           693: Disasm::make_fc()
        !           694: {
        !           695:        uint fc = ir[1] & 0x1f;
        !           696: 
        !           697:        switch (fc) {
        !           698:         case 0:
        !           699:                return make_reg(Reg::SFC);
        !           700:         case 1:
        !           701:                return make_reg(Reg::DFC);
        !           702:         case 0x08 ... 0x0f:
        !           703:                return make_dn(fc);
        !           704:         case 0x10 ... 0x17:
        !           705:                return string_format("#%d", fc & 7);
        !           706:         default:
        !           707:                return string_format("<invalid fc %d>", fc);
        !           708:        }
        !           709: }
        !           710: 
        !           711: // MOVEC の制御レジスタを返す。
        !           712: std::string
        !           713: Disasm::make_movec()
        !           714: {
        !           715:        uint n = ir[1] & 0x0fff;
        !           716:        Reg reg;
        !           717: 
        !           718:        switch (n) {
        !           719:         case 0x000:    reg = Reg::SFC;         break;
        !           720:         case 0x001:    reg = Reg::DFC;         break;
        !           721:         case 0x002:    reg = Reg::CACR;        break;
        !           722:         case 0x800:    reg = Reg::USP;         break;
        !           723:         case 0x801:    reg = Reg::VBR;         break;
        !           724:         case 0x802:    reg = Reg::CAAR;        break;
        !           725:         case 0x803:    reg = Reg::MSP;         break;
        !           726:         case 0x804:    reg = Reg::ISP;         break;
        !           727: 
        !           728:         // 040
        !           729:         // TC, MMUSR, SRP は名前が同じだが 030 MMU のではない
        !           730:         case 0x003:    reg = Reg::TC;          break;
        !           731:         case 0x004:    reg = Reg::ITT0;        break;  // EC040 なら IACR0
        !           732:         case 0x005:    reg = Reg::ITT1;        break;  // EC040 なら IACR1
        !           733:         case 0x006:    reg = Reg::DTT0;        break;  // EC040 なら DACR0
        !           734:         case 0x007:    reg = Reg::DTT1;        break;  // EC040 なら DACR1
        !           735:         case 0x805:    reg = Reg::MMUSR;       break;
        !           736:         case 0x806:    reg = Reg::URP;         break;
        !           737:         case 0x807:    reg = Reg::SRP;         break;
        !           738: 
        !           739:         default:
        !           740:                return string_format("<invalid ctrl reg %03x>", n);
        !           741:        }
        !           742:        return make_reg(reg);
        !           743: }
        !           744: 
        !           745: // FPgen 関数名を返す
        !           746: // mode が適切でなければ "" を返す。
        !           747: std::string
        !           748: Disasm::make_fpgen()
        !           749: {
        !           750:        uint mode = ir[1] & 0x7f;
        !           751: 
        !           752:        if (mode < countof(fpgen_names)) {
        !           753:                return fpgen_names[mode];
        !           754:        }
        !           755:        return "";
        !           756: }
        !           757: 
        !           758: // FPn を文字列にして返す。n の上位ビットは無視する。
        !           759: std::string
        !           760: Disasm::make_fpn(uint n)
        !           761: {
        !           762:        n = (n & 7) + '0';
        !           763:        std::string s;
        !           764:        s = "fp";
        !           765:        s += n;
        !           766:        return s;
        !           767: }
        !           768: 
        !           769: // FPU の condition 文字列を返す。
        !           770: // word には condition が入ったワードを指定すること。
        !           771: // 不要な上位ビットはこちらでマスクする。
        !           772: std::string
        !           773: Disasm::make_fpcc(uint16 word)
        !           774: {
        !           775:        uint cc = word & 0x3f;
        !           776:        if (cc > 0x1f) {
        !           777:                return string_format("<invalid fpcc $%x>", cc);
        !           778:        }
        !           779:        return fpconditions[cc];
        !           780: }
        !           781: 
        !           782: // FMOVEM 用の FPctls を文字列にして s に返す。
        !           783: // 戻り値は指定された制御レジスタの個数。
        !           784: uint
        !           785: Disasm::make_fpctls(std::string& s)
        !           786: {
        !           787:        uint n = 0;
        !           788:        uint list = ir[1] >> 10;
        !           789: 
        !           790:        s.clear();
        !           791:        if ((list & 4)) {
        !           792:                s += make_reg(Reg::FPCR);
        !           793:                n++;
        !           794:        }
        !           795:        if ((list & 2)) {
        !           796:                if (!s.empty()) {
        !           797:                        s += "/";
        !           798:                }
        !           799:                s += make_reg(Reg::FPSR);
        !           800:                n++;
        !           801:        }
        !           802:        if ((list & 1)) {
        !           803:                if (!s.empty()) {
        !           804:                        s += "/";
        !           805:                }
        !           806:                s += make_reg(Reg::FPIAR);
        !           807:                n++;
        !           808:        }
        !           809: 
        !           810:        if (n == 0)
        !           811:                s = "nofpc";
        !           812: 
        !           813:        return n;
        !           814: }
        !           815: 
        !           816: // FMOVEM のレジスタリスト文字列を返す。
        !           817: // 第2ワードのフェッチはすでに行ってあるはず。
        !           818: // プリデクリメントかどうかの判断はこちらで行う。
        !           819: std::string
        !           820: Disasm::make_fpnlist()
        !           821: {
        !           822:        uint16 mask = ir[1] & 0x00ff;
        !           823:        std::string s;
        !           824: 
        !           825:        // プリデクリメントモードなら、ビット順を入れ替える。
        !           826:        // An/Dn の時とは逆なので注意。てかなんでだよ。
        !           827:        // <ea> のモードと食い違ってたらその時は知らん…。
        !           828:        if ((ir[1] & 0x0800)) {
        !           829:                //mask = bitrev8(mask);
        !           830:                mask = ((mask & 0x55) << 1) | ((mask >> 1) & 0x55);
        !           831:                mask = ((mask & 0x33) << 2) | ((mask >> 2) & 0x33);
        !           832:                mask = ((mask & 0x0f) << 4) | ((mask >> 4) & 0x0f);
        !           833:        }
        !           834: 
        !           835:        // これで、レジスタは常に上から順に並んでいる。
        !           836:        //   7   6   5 ..   1   0
        !           837:        // FP0 FP1 FP2 .. FP6 FP7
        !           838: 
        !           839:        make_reglist_half(s, "fp", mask << 8);
        !           840:        if (s.empty()) {
        !           841:                s = "nofpn";
        !           842:        }
        !           843:        return s;
        !           844: }
        !           845: 
        !           846: /*static*/ const char * const Disasm::reg_names[] = {
        !           847:        "ccr",
        !           848:        "sr",
        !           849:        "pc",
        !           850:        "usp",
        !           851: 
        !           852:        "msp",
        !           853:        "isp",
        !           854:        "vbr",
        !           855:        "sfc",
        !           856:        "dfc",
        !           857:        "cacr",
        !           858:        "caar",
        !           859: 
        !           860:        "tc",
        !           861:        "mmusr",
        !           862:        "srp",
        !           863:        "crp",
        !           864:        "tt0",
        !           865:        "tt1",
        !           866: 
        !           867:        "fpcr",
        !           868:        "fpsr",
        !           869:        "fpiar",
        !           870: };
        !           871: 
        !           872: /*static*/ const char * const Disasm::size_str[] = {
        !           873:        ".l",
        !           874:        ".s",
        !           875:        ".x",
        !           876:        ".p",
        !           877:        ".w",
        !           878:        ".d",
        !           879:        ".b",
        !           880:        ".p",   // dynamic k-factor
        !           881:        ".q",
        !           882:        "",             // None
        !           883: };
        !           884: 
        !           885: /*static*/ const char * const Disasm::conditions[] = {
        !           886:        "t",  "f",  "hi", "ls", "cc", "cs", "ne", "eq",
        !           887:        "vc", "vs", "pl", "mi", "ge", "lt", "gt", "le",
        !           888: };
        !           889: 
        !           890: /*static*/ const char * const Disasm::fpconditions[] = {
        !           891:        "f",    // 000000
        !           892:        "eq",   // 000001
        !           893:        "ogt",  // 000010
        !           894:        "oge",  // 000011
        !           895:        "olt",  // 000100
        !           896:        "ole",  // 000101
        !           897:        "ogl",  // 000110
        !           898:        "or",   // 000111
        !           899:        "un",   // 001000
        !           900:        "ueq",  // 001001
        !           901:        "ugt",  // 001010
        !           902:        "uge",  // 001011
        !           903:        "ult",  // 001100
        !           904:        "ule",  // 001101
        !           905:        "ne",   // 001110
        !           906:        "?",    // 001111
        !           907: 
        !           908:        "sf",   // 010000
        !           909:        "seq",  // 010001
        !           910:        "ge",   // 010010
        !           911:        "ge",   // 010011
        !           912:        "lt",   // 010100
        !           913:        "le",   // 010101
        !           914:        "gl",   // 010110
        !           915:        "gle",  // 010111
        !           916:        "ngle", // 011000
        !           917:        "ngl",  // 011001
        !           918:        "nle",  // 011010
        !           919:        "nlt",  // 011011
        !           920:        "nge",  // 011100
        !           921:        "ngt",  // 011101
        !           922:        "sne",  // 011110
        !           923:        "st",   // 011111
        !           924: };
        !           925: 
        !           926: /*static*/ const char * const Disasm::btst_names[] = {
        !           927:        "btst",
        !           928:        "bchg",
        !           929:        "bclr",
        !           930:        "bset",
        !           931: };
        !           932: 
        !           933: /*static*/ const char * const Disasm::fpgen_names[] = {
        !           934:        "fmove",        // $00
        !           935:        "fint",         // $01
        !           936:        "fsinh",        // $02
        !           937:        "fintrz",       // $03
        !           938:        "fsqrt",        // $04
        !           939:        "",                     // $05
        !           940:        "flognp1",      // $06
        !           941:        "",                     // $07
        !           942:        "fetoxm1",      // $08
        !           943:        "ftanh",        // $09
        !           944:        "fatan",        // $0a
        !           945:        "",                     // $0b
        !           946:        "fasin",        // $0c
        !           947:        "fatanh",       // $0d
        !           948:        "fsin",         // $0e
        !           949:        "ftan",         // $0f
        !           950:        "fetox",        // $10
        !           951:        "ftwotox",      // $11
        !           952:        "ftentox",      // $12
        !           953:        "",                     // $13
        !           954:        "flogn",        // $14
        !           955:        "flog10",       // $15
        !           956:        "flog2",        // $16
        !           957:        "",                     // $17
        !           958:        "fabs",         // $18
        !           959:        "fcosh",        // $19
        !           960:        "fneg",         // $1a
        !           961:        "",                     // $1b
        !           962:        "facos",        // $1c
        !           963:        "fcos",         // $1d
        !           964:        "fgetexp",      // $1e
        !           965:        "fgetman",      // $1f
        !           966:        "fdiv",         // $20
        !           967:        "fmod",         // $21
        !           968:        "fadd",         // $22
        !           969:        "fmul",         // $23
        !           970:        "fsgldiv",      // $24
        !           971:        "frem",         // $25
        !           972:        "fscale",       // $26
        !           973:        "fsglmul",      // $27
        !           974:        "fsub",         // $28
        !           975:        "",                     // $29
        !           976:        "",                     // $2a
        !           977:        "",                     // $2b
        !           978:        "",                     // $2c
        !           979:        "",                     // $2d
        !           980:        "",                     // $2e
        !           981:        "",                     // $2f
        !           982:        "",                     // $30 (fsincos)
        !           983:        "",                     // $31 (fsincos)
        !           984:        "",                     // $32 (fsincos)
        !           985:        "",                     // $33 (fsincos)
        !           986:        "",                     // $34 (fsincos)
        !           987:        "",                     // $35 (fsincos)
        !           988:        "",                     // $36 (fsincos)
        !           989:        "",                     // $37 (fsincos)
        !           990:        "fcmp",         // $38
        !           991:        "",                     // $39
        !           992:        "ftst",         // $3a
        !           993: };
        !           994: 
        !           995: /*static*/ const char * const Disasm::fmovecr_text[] = {
        !           996:        "<log10(2)>",   // [0] $0b
        !           997:        "<e>",                  // [1] $0c
        !           998:        "<log2(e)>",    // [2] $0d
        !           999:        "<log10(e)>",   // [3] $0e
        !          1000:        "<0>",                  // [4] $0f
        !          1001:        "<ln(2)>",              // $30
        !          1002:        "<ln(10)>",             // $31
        !          1003:        "<1>",                  // $32
        !          1004:        "<10>",                 // $33
        !          1005:        "<1e2>",                // $34
        !          1006:        "<1e4>",                // $35
        !          1007:        "<1e8>",                // $36
        !          1008:        "<1e16>",               // $37
        !          1009:        "<1e32>",               // $38
        !          1010:        "<1e64>",               // $39
        !          1011:        "<1e128>",              // $3a
        !          1012:        "<1e256>",              // $3b
        !          1013:        "<1e512>",              // $3c
        !          1014:        "<1e1024>",             // $3d
        !          1015:        "<1e2048>",             // $3e
        !          1016:        "<1e4096>",             // $3f
        !          1017: };
        !          1018: 
        !          1019: /*static*/ const char *const Disasm::x68k_doscall[256] = {
        !          1020:        "_EXIT",                // ff00
        !          1021:        "_GETCHAR",             // ff01
        !          1022:        "_PUTCHAR",             // ff02
        !          1023:        "_COMINP",              // ff03
        !          1024:        "_COMOUT",              // ff04
        !          1025:        "_PRNOUT",              // ff05
        !          1026:        "_INPOUT",              // ff06
        !          1027:        "_INKEY",               // ff07
        !          1028:        "_GETC",                // ff08
        !          1029:        "_PRINT",               // ff09
        !          1030:        "_GETS",                // ff0a
        !          1031:        "_KEYSNS",              // ff0b
        !          1032:        "_KFLUSH",              // ff0c
        !          1033:        "_FFLUSH",              // ff0d
        !          1034:        "_CHGDRV",              // ff0e
        !          1035:        "_DRVCTRL",             // ff0f
        !          1036: 
        !          1037:        "_CONSNS",              // ff10
        !          1038:        "_PRNSNS",              // ff11
        !          1039:        "_CINSNS",              // ff12
        !          1040:        "_COUTSNS",             // ff13
        !          1041:        NULL,                   // ff14
        !          1042:        NULL,                   // ff15
        !          1043:        NULL,                   // ff16
        !          1044:        "_FATCHK",              // ff17
        !          1045:        "_HENDSP",              // ff18
        !          1046:        "_CURDRV",              // ff19
        !          1047:        "_GETSS",               // ff1a
        !          1048:        "_FGETC",               // ff1b
        !          1049:        "_FGETS",               // ff1c
        !          1050:        "_FPUTC",               // ff1d
        !          1051:        "_FPUTS",               // ff1e
        !          1052:        "_ALLCLOSE",    // ff1f
        !          1053: 
        !          1054:        "_SUPER",               // ff20
        !          1055:        "_FNCKEY",              // ff21
        !          1056:        "_KNJCTRL",             // ff22
        !          1057:        "_CONCTRL",             // ff23
        !          1058:        "_KEYCTRL",             // ff24
        !          1059:        "_INTVCS",              // ff25
        !          1060:        "_PSPSET",              // ff26
        !          1061:        "_GETTIM2",             // ff27
        !          1062:        "_SETTIM2",             // ff28
        !          1063:        "_NAMESTS",             // ff29
        !          1064:        "_GETDATE",             // ff2a
        !          1065:        "_SETDATE",             // ff2b
        !          1066:        "_GETTIME",             // ff2c
        !          1067:        "_SETTIME",             // ff2d
        !          1068:        "_VERIFY",              // ff2e
        !          1069:        "_DUP0",                // ff2f
        !          1070: 
        !          1071:        "_VERNUM",              // ff30
        !          1072:        "_KEEPPR",              // ff31
        !          1073:        "_GETDPB",              // ff32
        !          1074:        "_BREAKCK",             // ff33
        !          1075:        "_DRVXCHG",             // ff34
        !          1076:        "_INTVCG",              // ff35
        !          1077:        "_DSKFRE",              // ff36
        !          1078:        "_NAMECK",              // ff37
        !          1079:        NULL,                   // ff38
        !          1080:        "_MKDIR",               // ff39
        !          1081:        "_RMDIR",               // ff3a
        !          1082:        "_CHDIR",               // ff3b
        !          1083:        "_CREATE",              // ff3c
        !          1084:        "_OPEN",                // ff3d
        !          1085:        "_CLOSE",               // ff3e
        !          1086:        "_READ",                // ff3f
        !          1087: 
        !          1088:        "_WRITE",               // ff40
        !          1089:        "_DELETE",              // ff41
        !          1090:        "_SEEK",                // ff42
        !          1091:        "_CHMOD",               // ff43
        !          1092:        "_IOCTRL",              // ff44
        !          1093:        "_DUP",                 // ff45
        !          1094:        "_DUP2",                // ff46
        !          1095:        "_CURDIR",              // ff47
        !          1096:        "_MALLOC",              // ff48
        !          1097:        "_MFREE",               // ff49
        !          1098:        "_SETBLOCK",    // ff4a
        !          1099:        "_EXEC",                // ff4b
        !          1100:        "_EXIT2",               // ff4c
        !          1101:        "_WAIT",                // ff4d
        !          1102:        "_FILES",               // ff4e
        !          1103:        "_NFILES",              // ff4f
        !          1104: 
        !          1105:        "_SETPDB",              // ff50 (Human68k ver.2)
        !          1106:        "_GETPDB",              // ff51 (Human68k ver.2)
        !          1107:        "_SETENV",              // ff52 (Human68k ver.2)
        !          1108:        "_GETENV",              // ff53 (Human68k ver.2)
        !          1109:        "_VERIFYG",             // ff54 (Human68k ver.2)
        !          1110:        "_COMMON",              // ff55 (Human68k ver.2)
        !          1111:        "_RENAME",              // ff56 (Human68k ver.2)
        !          1112:        "_FILEDATE",    // ff57 (Human68k ver.2)
        !          1113:        "_MALLOC2",             // ff58 (Human68k ver.2)
        !          1114:        NULL,                   // ff59
        !          1115:        "_MAKETMP",             // ff5a (Human68k ver.2)
        !          1116:        "_NEWFILE",             // ff5b (Human68k ver.2)
        !          1117:        "_LOCK",                // ff5c (Human68k ver.2)
        !          1118:        NULL,                   // ff5d
        !          1119:        NULL,                   // ff5e
        !          1120:        "_ASSIGN",              // ff5f (Human68k ver.2)
        !          1121: 
        !          1122:        NULL,                   // ff60
        !          1123:        NULL,                   // ff61
        !          1124:        NULL,                   // ff62
        !          1125:        NULL,                   // ff63
        !          1126:        NULL,                   // ff64
        !          1127:        NULL,                   // ff65
        !          1128:        NULL,                   // ff66
        !          1129:        NULL,                   // ff67
        !          1130:        NULL,                   // ff68
        !          1131:        NULL,                   // ff69
        !          1132:        NULL,                   // ff6a
        !          1133:        NULL,                   // ff6b
        !          1134:        NULL,                   // ff6c
        !          1135:        NULL,                   // ff6d
        !          1136:        NULL,                   // ff6e
        !          1137:        NULL,                   // ff6f
        !          1138: 
        !          1139:        NULL,                   // ff70
        !          1140:        NULL,                   // ff71
        !          1141:        NULL,                   // ff72
        !          1142:        NULL,                   // ff73
        !          1143:        NULL,                   // ff74
        !          1144:        NULL,                   // ff75
        !          1145:        NULL,                   // ff76
        !          1146:        NULL,                   // ff77
        !          1147:        NULL,                   // ff78
        !          1148:        NULL,                   // ff79
        !          1149:        "_FFLUSH_SET",  // ff7a (Human68k ver.2)
        !          1150:        "_OS_PATCH",    // ff7b (Human68k ver.2)
        !          1151:        "_GETFCB",              // ff7c (Human68k ver.2)
        !          1152:        "_S_MALLOC",    // ff7d (Human68k ver.2)
        !          1153:        "_S_MFREE",             // ff7e (Human68k ver.2)
        !          1154:        "_S_PROCESS",   // ff7f (Human68k ver.2)
        !          1155: 
        !          1156:        "_SETPDB",              // ff80
        !          1157:        "_GETPDB",              // ff81
        !          1158:        "_SETENV",              // ff82
        !          1159:        "_GETENV",              // ff83
        !          1160:        "_VERIFYG",             // ff84
        !          1161:        "_COMMON",              // ff85
        !          1162:        "_RENAME",              // ff86
        !          1163:        "_FILEDATE",    // ff87
        !          1164:        "_MALLOC2",             // ff88
        !          1165:        NULL,                   // ff89
        !          1166:        "_MAKETMP",             // ff8a
        !          1167:        "_NEWFILE",             // ff8b
        !          1168:        "_LOCK",                // ff8c
        !          1169:        NULL,                   // ff8d
        !          1170:        NULL,                   // ff8e
        !          1171:        "_ASSIGN",              // ff8f
        !          1172: 
        !          1173:        NULL,                   // ff90
        !          1174:        NULL,                   // ff91
        !          1175:        NULL,                   // ff92
        !          1176:        NULL,                   // ff93
        !          1177:        NULL,                   // ff94
        !          1178:        NULL,                   // ff95
        !          1179:        NULL,                   // ff96
        !          1180:        NULL,                   // ff97
        !          1181:        NULL,                   // ff98
        !          1182:        NULL,                   // ff99
        !          1183:        NULL,                   // ff9a
        !          1184:        NULL,                   // ff9b
        !          1185:        NULL,                   // ff9c
        !          1186:        NULL,                   // ff9d
        !          1187:        NULL,                   // ff9e
        !          1188:        NULL,                   // ff9f
        !          1189: 
        !          1190:        NULL,                   // ffa0
        !          1191:        NULL,                   // ffa1
        !          1192:        NULL,                   // ffa2
        !          1193:        NULL,                   // ffa3
        !          1194:        NULL,                   // ffa4
        !          1195:        NULL,                   // ffa5
        !          1196:        NULL,                   // ffa6
        !          1197:        NULL,                   // ffa7
        !          1198:        NULL,                   // ffa8
        !          1199:        NULL,                   // ffa9
        !          1200:        "_FFLUSH_SET",  // ffaa
        !          1201:        "_OS_PATCH",    // ffab
        !          1202:        "_GETFCB",              // ffac
        !          1203:        "_S_MALLOC",    // ffad
        !          1204:        "_S_MFREE",             // ffae
        !          1205:        "_S_PROCESS",   // ffaf
        !          1206: 
        !          1207:        NULL,                   // ffb0
        !          1208:        NULL,                   // ffb1
        !          1209:        NULL,                   // ffb2
        !          1210:        NULL,                   // ffb3
        !          1211:        NULL,                   // ffb4
        !          1212:        NULL,                   // ffb5
        !          1213:        NULL,                   // ffb6
        !          1214:        NULL,                   // ffb7
        !          1215:        NULL,                   // ffb8
        !          1216:        NULL,                   // ffb9
        !          1217:        NULL,                   // ffba
        !          1218:        NULL,                   // ffbb
        !          1219:        NULL,                   // ffbc
        !          1220:        NULL,                   // ffbd
        !          1221:        NULL,                   // ffbe
        !          1222:        NULL,                   // ffbf
        !          1223: 
        !          1224:        NULL,                   // ffc0
        !          1225:        NULL,                   // ffc1
        !          1226:        NULL,                   // ffc2
        !          1227:        NULL,                   // ffc3
        !          1228:        NULL,                   // ffc4
        !          1229:        NULL,                   // ffc5
        !          1230:        NULL,                   // ffc6
        !          1231:        NULL,                   // ffc7
        !          1232:        NULL,                   // ffc8
        !          1233:        NULL,                   // ffc9
        !          1234:        NULL,                   // ffca
        !          1235:        NULL,                   // ffcb
        !          1236:        NULL,                   // ffcc
        !          1237:        NULL,                   // ffcd
        !          1238:        NULL,                   // ffce
        !          1239:        NULL,                   // ffcf
        !          1240: 
        !          1241:        NULL,                   // ffd0
        !          1242:        NULL,                   // ffd1
        !          1243:        NULL,                   // ffd2
        !          1244:        NULL,                   // ffd3
        !          1245:        NULL,                   // ffd4
        !          1246:        NULL,                   // ffd5
        !          1247:        NULL,                   // ffd6
        !          1248:        NULL,                   // ffd7
        !          1249:        NULL,                   // ffd8
        !          1250:        NULL,                   // ffd9
        !          1251:        NULL,                   // ffda
        !          1252:        NULL,                   // ffdb
        !          1253:        NULL,                   // ffdc
        !          1254:        NULL,                   // ffdd
        !          1255:        NULL,                   // ffde
        !          1256:        NULL,                   // ffdf
        !          1257: 
        !          1258:        NULL,                   // ffe0
        !          1259:        NULL,                   // ffe1
        !          1260:        NULL,                   // ffe2
        !          1261:        NULL,                   // ffe3
        !          1262:        NULL,                   // ffe4
        !          1263:        NULL,                   // ffe5
        !          1264:        NULL,                   // ffe6
        !          1265:        NULL,                   // ffe7
        !          1266:        NULL,                   // ffe8
        !          1267:        NULL,                   // ffe9
        !          1268:        NULL,                   // ffea
        !          1269:        NULL,                   // ffeb
        !          1270:        NULL,                   // ffec
        !          1271:        NULL,                   // ffed
        !          1272:        NULL,                   // ffee
        !          1273:        NULL,                   // ffef
        !          1274: 
        !          1275:        "_EXITVC",              // fff0
        !          1276:        "_CTRLVC",              // fff1
        !          1277:        "_ERRJVC",              // fff2
        !          1278:        "_DISKRED",             // fff3
        !          1279:        "_DISKWRT",             // fff4
        !          1280:        "_INDOSFLG",    // fff5
        !          1281:        "_SUPER_JSR",   // fff6
        !          1282:        "_BUS_ERR",             // fff7
        !          1283:        "_OPEN_PR",             // fff8
        !          1284:        "_KILL_PR",             // fff9
        !          1285:        "_GET_PR",              // fffa
        !          1286:        "_SUSPEND_PR",  // fffb
        !          1287:        "_SLEEP_PR",    // fffc
        !          1288:        "_SEND_PR",             // fffd
        !          1289:        "_TIME_PR",             // fffe
        !          1290:        "_CHANGE_PR",   // ffff
        !          1291: };
        !          1292: 
        !          1293: /*static*/ const char * const Disasm::x68k_fpcall[256] = {
        !          1294:        "__LMUL",               // fe00
        !          1295:        "__LDIV",               // fe01
        !          1296:        "__LMOD",               // fe02
        !          1297:        NULL,                   // fe03
        !          1298:        "__UMUL",               // fe04
        !          1299:        "__UDIV",               // fe05
        !          1300:        "__UMOD",               // fe06
        !          1301:        NULL,                   // fe07
        !          1302:        "__IMUL",               // fe08
        !          1303:        "__IDIV",               // fe09
        !          1304:        NULL,                   // fe0a
        !          1305:        NULL,                   // fe0b
        !          1306:        "__RANDOMIZE",  // fe0c
        !          1307:        "__SRAND",              // fe0d
        !          1308:        "__RAND",               // fe0e
        !          1309:        NULL,                   // fe0f
        !          1310: 
        !          1311:        "__STOL",               // fe10
        !          1312:        "__LTOS",               // fe11
        !          1313:        "__STOH",               // fe12
        !          1314:        "__HTOS",               // fe13
        !          1315:        "__STOO",               // fe14
        !          1316:        "__OTOS",               // fe15
        !          1317:        "__STOB",               // fe16
        !          1318:        "__BTOS",               // fe17
        !          1319:        "__IUSING",             // fe18
        !          1320:        NULL,                   // fe19
        !          1321:        "__LTOD",               // fe1a
        !          1322:        "__DTOL",               // fe1b
        !          1323:        "__LTOF",               // fe1c
        !          1324:        "__FTOL",               // fe1d
        !          1325:        "__FTOD",               // fe1e
        !          1326:        "__DTOF",               // fe1f
        !          1327: 
        !          1328:        "__VAL",                // fe20
        !          1329:        "__USING",              // fe21
        !          1330:        "__STOD",               // fe22
        !          1331:        "__DTOS",               // fe23
        !          1332:        "__ECVT",               // fe24
        !          1333:        "__FCVT",               // fe25
        !          1334:        "__GCVT",               // fe26
        !          1335:        NULL,                   // fe27
        !          1336:        "__DTST",               // fe28
        !          1337:        "__DCMP",               // fe29
        !          1338:        "__DNEG",               // fe2a
        !          1339:        "__DADD",               // fe2b
        !          1340:        "__DSUB",               // fe2c
        !          1341:        "__DMUL",               // fe2d
        !          1342:        "__DDIV",               // fe2e
        !          1343:        "__DMOD",               // fe2f
        !          1344: 
        !          1345:        "__DABS",               // fe30
        !          1346:        "__DCEIL",              // fe31
        !          1347:        "__DFIX",               // fe32
        !          1348:        "__DFLOOR",             // fe33
        !          1349:        "__DFRAC",              // fe34
        !          1350:        "__DSGN",               // fe35
        !          1351:        "__SIN",                // fe36
        !          1352:        "__COS",                // fe37
        !          1353:        "__TAN",                // fe38
        !          1354:        "__ATAN",               // fe39
        !          1355:        "__LOG",                // fe3a
        !          1356:        "__EXP",                // fe3b
        !          1357:        "__SQR",                // fe3c
        !          1358:        "__PI",                 // fe3d
        !          1359:        "__NPI",                // fe3e
        !          1360:        "__POWER",              // fe3f
        !          1361: 
        !          1362:        "__RND",                // fe40
        !          1363:        "__SINH",               // fe41
        !          1364:        "__COSH",               // fe42
        !          1365:        "__TANH",               // fe43
        !          1366:        "__ATANH",              // fe44
        !          1367:        "__ASIN",               // fe45
        !          1368:        "__ACOS",               // fe46
        !          1369:        "__LOG10",              // fe47
        !          1370:        "__LOG2",               // fe48
        !          1371:        "__DFREXP",             // fe49
        !          1372:        "__DLDEXP",             // fe4a
        !          1373:        "__DADDONE",    // fe4b
        !          1374:        "__DSUBONE",    // fe4c
        !          1375:        "__DDIVTWO",    // fe4d
        !          1376:        "__DIEECNV",    // fe4e
        !          1377:        "__IEEDCNV",    // fe4f
        !          1378: 
        !          1379:        "__FVAL",               // fe50
        !          1380:        "__FUSING",             // fe51
        !          1381:        "__STOF",               // fe52
        !          1382:        "__FTOS",               // fe53
        !          1383:        "__FECVT",              // fe54
        !          1384:        "__FFCVT",              // fe55
        !          1385:        "__FGCVT",              // fe56
        !          1386:        NULL,                   // fe57
        !          1387:        "__FTST",               // fe58
        !          1388:        "__FCMP",               // fe59
        !          1389:        "__FNEG",               // fe5a
        !          1390:        "__FADD",               // fe5b
        !          1391:        "__FSUB",               // fe5c
        !          1392:        "__FMUL",               // fe5d
        !          1393:        "__FDIV",               // fe5e
        !          1394:        "__FMOD",               // fe5f
        !          1395: 
        !          1396:        "__FABS",               // fe60
        !          1397:        "__FCEIL",              // fe61
        !          1398:        "__FFIX",               // fe62
        !          1399:        "__FFLOOR",             // fe63
        !          1400:        "__FFRAC",              // fe64
        !          1401:        "__FSGN",               // fe65
        !          1402:        "__FSIN",               // fe66
        !          1403:        "__FCOS",               // fe67
        !          1404:        "__FTAN",               // fe68
        !          1405:        "__FATAN",              // fe69
        !          1406:        "__FLOG",               // fe6a
        !          1407:        "__FEXP",               // fe6b
        !          1408:        "__FSQR",               // fe6c
        !          1409:        "__FPI",                // fe6d
        !          1410:        "__FNPI",               // fe6e
        !          1411:        "__FPOWER",             // fe6f
        !          1412: 
        !          1413:        "__FRND",               // fe70
        !          1414:        "__FSINH",              // fe71
        !          1415:        "__FCOSH",              // fe72
        !          1416:        "__FTANH",              // fe73
        !          1417:        "__FATANH",             // fe74
        !          1418:        "__FASIN",              // fe75
        !          1419:        "__FACOS",              // fe76
        !          1420:        "__FLOG10",             // fe77
        !          1421:        "__FLOG2",              // fe78
        !          1422:        "__FFREXP",             // fe79
        !          1423:        "__FLDEXP",             // fe7a
        !          1424:        "__FADDONE",    // fe7b
        !          1425:        "__FSUBONE",    // fe7c
        !          1426:        "__FDIVTWO",    // fe7d
        !          1427:        "__FIEECNV",    // fe7e
        !          1428:        "__IEEFCNV",    // fe7f
        !          1429: 
        !          1430:        NULL,                   // fe80
        !          1431:        NULL,                   // fe81
        !          1432:        NULL,                   // fe82
        !          1433:        NULL,                   // fe83
        !          1434:        NULL,                   // fe84
        !          1435:        NULL,                   // fe85
        !          1436:        NULL,                   // fe86
        !          1437:        NULL,                   // fe87
        !          1438:        NULL,                   // fe88
        !          1439:        NULL,                   // fe89
        !          1440:        NULL,                   // fe8a
        !          1441:        NULL,                   // fe8b
        !          1442:        NULL,                   // fe8c
        !          1443:        NULL,                   // fe8d
        !          1444:        NULL,                   // fe8e
        !          1445:        NULL,                   // fe8f
        !          1446: 
        !          1447:        NULL,                   // fe90
        !          1448:        NULL,                   // fe91
        !          1449:        NULL,                   // fe92
        !          1450:        NULL,                   // fe93
        !          1451:        NULL,                   // fe94
        !          1452:        NULL,                   // fe95
        !          1453:        NULL,                   // fe96
        !          1454:        NULL,                   // fe97
        !          1455:        NULL,                   // fe98
        !          1456:        NULL,                   // fe99
        !          1457:        NULL,                   // fe9a
        !          1458:        NULL,                   // fe9b
        !          1459:        NULL,                   // fe9c
        !          1460:        NULL,                   // fe9d
        !          1461:        NULL,                   // fe9e
        !          1462:        NULL,                   // fe9f
        !          1463: 
        !          1464:        NULL,                   // fea0
        !          1465:        NULL,                   // fea1
        !          1466:        NULL,                   // fea2
        !          1467:        NULL,                   // fea3
        !          1468:        NULL,                   // fea4
        !          1469:        NULL,                   // fea5
        !          1470:        NULL,                   // fea6
        !          1471:        NULL,                   // fea7
        !          1472:        NULL,                   // fea8
        !          1473:        NULL,                   // fea9
        !          1474:        NULL,                   // feaa
        !          1475:        NULL,                   // feab
        !          1476:        NULL,                   // feac
        !          1477:        NULL,                   // fead
        !          1478:        NULL,                   // feae
        !          1479:        NULL,                   // feaf
        !          1480: 
        !          1481:        NULL,                   // feb0
        !          1482:        NULL,                   // feb1
        !          1483:        NULL,                   // feb2
        !          1484:        NULL,                   // feb3
        !          1485:        NULL,                   // feb4
        !          1486:        NULL,                   // feb5
        !          1487:        NULL,                   // feb6
        !          1488:        NULL,                   // feb7
        !          1489:        NULL,                   // feb8
        !          1490:        NULL,                   // feb9
        !          1491:        NULL,                   // feba
        !          1492:        NULL,                   // febb
        !          1493:        NULL,                   // febc
        !          1494:        NULL,                   // febd
        !          1495:        NULL,                   // febe
        !          1496:        NULL,                   // febf
        !          1497: 
        !          1498:        NULL,                   // fec0
        !          1499:        NULL,                   // fec1
        !          1500:        NULL,                   // fec2
        !          1501:        NULL,                   // fec3
        !          1502:        NULL,                   // fec4
        !          1503:        NULL,                   // fec5
        !          1504:        NULL,                   // fec6
        !          1505:        NULL,                   // fec7
        !          1506:        NULL,                   // fec8
        !          1507:        NULL,                   // fec9
        !          1508:        NULL,                   // feca
        !          1509:        NULL,                   // fecb
        !          1510:        NULL,                   // fecc
        !          1511:        NULL,                   // fecd
        !          1512:        NULL,                   // fece
        !          1513:        NULL,                   // fecf
        !          1514: 
        !          1515:        NULL,                   // fed0
        !          1516:        NULL,                   // fed1
        !          1517:        NULL,                   // fed2
        !          1518:        NULL,                   // fed3
        !          1519:        NULL,                   // fed4
        !          1520:        NULL,                   // fed5
        !          1521:        NULL,                   // fed6
        !          1522:        NULL,                   // fed7
        !          1523:        NULL,                   // fed8
        !          1524:        NULL,                   // fed9
        !          1525:        NULL,                   // feda
        !          1526:        NULL,                   // fedb
        !          1527:        NULL,                   // fedc
        !          1528:        NULL,                   // fedd
        !          1529:        NULL,                   // fede
        !          1530:        NULL,                   // fedf
        !          1531: 
        !          1532:        "__CLMUL",              // fee0
        !          1533:        "__CLDIV",              // fee1
        !          1534:        "__CLMOD",              // fee2
        !          1535:        "__CUMUL",              // fee3
        !          1536:        "__CUDIV",              // fee4
        !          1537:        "__CUMOD",              // fee5
        !          1538:        "__CLTOD",              // fee6
        !          1539:        "__CDTOL",              // fee7
        !          1540:        "__CLTOF",              // fee8
        !          1541:        "__CFTOL",              // fee9
        !          1542:        "__CFTOD",              // feea
        !          1543:        "__CDTOF",              // feeb
        !          1544:        "__CDCMP",              // feec
        !          1545:        "__CDADD",              // feed
        !          1546:        "__CDSUB",              // feee
        !          1547:        "__CDMUL",              // feef
        !          1548: 
        !          1549:        "__CDDIV",              // fef0
        !          1550:        "__CDMOD",              // fef1
        !          1551:        "__CFCMP",              // fef2
        !          1552:        "__CFADD",              // fef3
        !          1553:        "__CFSUB",              // fef4
        !          1554:        "__CFMUL",              // fef5
        !          1555:        "__CFDIV",              // fef6
        !          1556:        "__CFMOD",              // fef7
        !          1557:        "__CDTST",              // fef8
        !          1558:        "__CFTST",              // fef9
        !          1559:        "__CDINC",              // fefa
        !          1560:        "__CFINC",              // fefb
        !          1561:        "__CDDEC",              // fefc
        !          1562:        "__CFDEC",              // fefd
        !          1563:        "__FEVARG",             // fefe
        !          1564:        "__FEVECS",             // feff
        !          1565: 
        !          1566: };
        !          1567: 
        !          1568: /*static*/ const char * const Disasm::x68k_iocscall[256] = {
        !          1569:        "_B_KEYINP",    // 7000
        !          1570:        "_B_KEYSNS",    // 7001
        !          1571:        "_B_SFTSNS",    // 7002
        !          1572:        "_KEY_INIT",    // 7003
        !          1573:        "_BITSNS",              // 7004
        !          1574:        "_SKEYSET",             // 7005
        !          1575:        "_LEDCTRL",             // 7006
        !          1576:        "_LEDSET",              // 7007
        !          1577:        "_KEYDLY",              // 7008
        !          1578:        "_KEYREP",              // 7009
        !          1579:        NULL,                   // 700a
        !          1580:        NULL,                   // 700b
        !          1581:        "_TVCTRL",              // 700c
        !          1582:        "_LEDMOD",              // 700d
        !          1583:        "_TGUSEMD",             // 700e
        !          1584:        "_DEFCHR",              // 700f
        !          1585: 
        !          1586:        "_CRTMOD",              // 7010
        !          1587:        "_CONTRAST",    // 7011
        !          1588:        "_HSVTORGB",    // 7012
        !          1589:        "_TPALET",              // 7013
        !          1590:        "_TPALET2",             // 7014
        !          1591:        "_TCOLOR",              // 7015
        !          1592:        "_FNTADR",              // 7016
        !          1593:        "_VRAMGET",             // 7017
        !          1594:        "_VRAMPUT",             // 7018
        !          1595:        "_FNTGET",              // 7019
        !          1596:        "_TEXTGET",             // 701a
        !          1597:        "_TEXTPUT",             // 701b
        !          1598:        "_CLIPPUT",             // 701c
        !          1599:        "_SCROLL",              // 701d
        !          1600:        "_B_CURON",             // 701e
        !          1601:        "_B_CUROFF",    // 701f
        !          1602: 
        !          1603:        "_B_PUTC",              // 7020
        !          1604:        "_B_PRINT",             // 7021
        !          1605:        "_B_COLOR",             // 7022
        !          1606:        "_B_LOCATE",    // 7023
        !          1607:        "_B_DOWN_S",    // 7024
        !          1608:        "_B_UP_S",              // 7025
        !          1609:        "_B_UP",                // 7026
        !          1610:        "_B_DOWN",              // 7027
        !          1611:        "_B_RIGHT",             // 7028
        !          1612:        "_B_LEFT",              // 7029
        !          1613:        "_B_CLR_ST",    // 702a
        !          1614:        "_B_ERA_ST",    // 702b
        !          1615:        "_B_INS",               // 702c
        !          1616:        "_B_DEL",               // 702d
        !          1617:        "_B_CONSOL",    // 702e
        !          1618:        "_B_PUTMES",    // 702f
        !          1619: 
        !          1620:        "_SET232C",             // 7030
        !          1621:        "_LOF232C",             // 7031
        !          1622:        "_INP232C",             // 7032
        !          1623:        "_ISNS232C",    // 7033
        !          1624:        "_OSNS232C",    // 7034
        !          1625:        "_OUT232C",             // 7035
        !          1626:        NULL,                   // 7036
        !          1627:        NULL,                   // 7037
        !          1628:        "_SETFNTADR",   // 7038
        !          1629:        NULL,                   // 7039
        !          1630:        NULL,                   // 703a
        !          1631:        "_JOYGET",              // 703b
        !          1632:        "_INIT_PRN",    // 703c
        !          1633:        "_SNSPRN",              // 703d
        !          1634:        "_OUTLPT",              // 703e
        !          1635:        "_OUTPRN",              // 703f
        !          1636: 
        !          1637:        "_B_SEEK",              // 7040
        !          1638:        "_B_VERIFY",    // 7041
        !          1639:        "_B_READDI",    // 7042
        !          1640:        "_B_DSKINI",    // 7043
        !          1641:        "_B_DRVSNS",    // 7044
        !          1642:        "_B_WRITE",             // 7045
        !          1643:        "_B_READ",              // 7046
        !          1644:        "_B_RECALI",    // 7047
        !          1645:        "_B_ASSIGN",    // 7048
        !          1646:        "_B_WRITED",    // 7049
        !          1647:        "_B_READID",    // 704a
        !          1648:        "_B_BADFMT",    // 704b
        !          1649:        "_B_READDL",    // 704c
        !          1650:        "_B_FORMAT",    // 704d
        !          1651:        "_B_DRVCHK",    // 704e
        !          1652:        "_B_EJECT",             // 704f
        !          1653: 
        !          1654:        "_DATEBCD",             // 7050
        !          1655:        "_DATESET",             // 7051
        !          1656:        "_TIMEBCD",             // 7052
        !          1657:        "_TIMESET",             // 7053
        !          1658:        "_DATEGET",             // 7054
        !          1659:        "_DATEBIN",             // 7055
        !          1660:        "_TIMEGET",             // 7056
        !          1661:        "_TIMEBIN",             // 7057
        !          1662:        "_DATECNV",             // 7058
        !          1663:        "_TIMECNV",             // 7059
        !          1664:        "_DATEASC",             // 705a
        !          1665:        "_TIMEASC",             // 705b
        !          1666:        "_DAYASC",              // 705c
        !          1667:        "_ALARMMOD",    // 705d
        !          1668:        "_ALARMSET",    // 705e
        !          1669:        "_ALARMGET",    // 705f
        !          1670: 
        !          1671:        "_ADPCMOUT",    // 7060
        !          1672:        "_ADPCMINP",    // 7061
        !          1673:        "_ADPCMAOT",    // 7062
        !          1674:        "_ADPCMAIN",    // 7063
        !          1675:        "_ADPCMLOT",    // 7064
        !          1676:        "_ADPCMLIN",    // 7065
        !          1677:        "_ADPCMSNS",    // 7066
        !          1678:        "_ADPCMMOD",    // 7067
        !          1679:        "_OPMSET",              // 7068
        !          1680:        "_OPMSNS",              // 7069
        !          1681:        "_OPMINTST",    // 706a
        !          1682:        "_TIMERDST",    // 706b
        !          1683:        "_VDISPST",             // 706c
        !          1684:        "_CRTCRAS",             // 706d
        !          1685:        "_HSYNCST",             // 706e
        !          1686:        "_PRNINTST",    // 706f
        !          1687: 
        !          1688:        "_MS_INIT",             // 7070
        !          1689:        "_MS_CURON",    // 7071
        !          1690:        "_MS_CUROF",    // 7072
        !          1691:        "_MS_STAT",             // 7073
        !          1692:        "_MS_GETDT",    // 7074
        !          1693:        "_MS_CURGT",    // 7075
        !          1694:        "_MS_CURST",    // 7076
        !          1695:        "_MS_LIMIT",    // 7077
        !          1696:        "_MS_OFFTM",    // 7078
        !          1697:        "_MS_ONTM",             // 7079
        !          1698:        "_MS_PATST",    // 707a
        !          1699:        "_MS_SEL",              // 707b
        !          1700:        "_MS_SEL2",             // 707c
        !          1701:        "_SKEY_MOD",    // 707d
        !          1702:        "_DENSNS",              // 707e
        !          1703:        "_ONTIME",              // 707f
        !          1704: 
        !          1705:        "_B_INTVCS",    // 7080
        !          1706:        "_B_SUPER",             // 7081
        !          1707:        "_B_BPEEK",             // 7082
        !          1708:        "_B_WPEEK",             // 7083
        !          1709:        "_B_LPEEK",             // 7084
        !          1710:        "_B_MEMSTR",    // 7085
        !          1711:        "_B_BPOKE",             // 7086
        !          1712:        "_B_WPOKE",             // 7087
        !          1713:        "_B_LPOKE",             // 7088
        !          1714:        "_B_MEMSET",    // 7089
        !          1715:        "_DMAMOVE",             // 708a
        !          1716:        "_DMAMOV_A",    // 708b
        !          1717:        "_DMAMOV_L",    // 708c
        !          1718:        "_DMAMODE",             // 708d
        !          1719:        "_BOOTINF",             // 708e
        !          1720:        "_ROMVER",              // 708f
        !          1721: 
        !          1722:        "_G_CLR_ON",    // 7090
        !          1723:        NULL,                   // 7091
        !          1724:        NULL,                   // 7092
        !          1725:        NULL,                   // 7093
        !          1726:        "_GPALET",              // 7094
        !          1727:        NULL,                   // 7095
        !          1728:        NULL,                   // 7096
        !          1729:        NULL,                   // 7097
        !          1730:        NULL,                   // 7098
        !          1731:        NULL,                   // 7099
        !          1732:        NULL,                   // 709a
        !          1733:        NULL,                   // 709b
        !          1734:        NULL,                   // 709c
        !          1735:        NULL,                   // 709d
        !          1736:        NULL,                   // 709e
        !          1737:        NULL,                   // 709f
        !          1738: 
        !          1739:        "_SFTJIS",              // 70a0
        !          1740:        "_JISSFT",              // 70a1
        !          1741:        "_AKCONV",              // 70a2
        !          1742:        "_RMACNV",              // 70a3
        !          1743:        "_DAKJOB",              // 70a4
        !          1744:        "_HANJOB",              // 70a5
        !          1745:        NULL,                   // 70a6
        !          1746:        NULL,                   // 70a7
        !          1747:        NULL,                   // 70a8
        !          1748:        NULL,                   // 70a9
        !          1749:        NULL,                   // 70aa
        !          1750:        NULL,                   // 70ab
        !          1751:        "_SYS_STAT",    // 70ac
        !          1752:        "_B_CONMOD",    // 70ad
        !          1753:        "_OS_CURON",    // 70ae
        !          1754:        "_OS_CUROF",    // 70af
        !          1755: 
        !          1756:        "_DRAWMODE",    // 70b0
        !          1757:        "_APAGE",               // 70b1
        !          1758:        "_VPAGE",               // 70b2
        !          1759:        "_HOME",                // 70b3
        !          1760:        "_WINDOW",              // 70b4
        !          1761:        "_WIPE",                // 70b5
        !          1762:        "_PSET",                // 70b6
        !          1763:        "_POINT",               // 70b7
        !          1764:        "_LINE",                // 70b8
        !          1765:        "_BOX",                 // 70b9
        !          1766:        "_FILL",                // 70ba
        !          1767:        "_CIRCLE",              // 70bb
        !          1768:        "_PAINT",               // 70bc
        !          1769:        "_SYMBOL",              // 70bd
        !          1770:        "_GETGRM",              // 70be
        !          1771:        "_PUTGRM",              // 70bf
        !          1772: 
        !          1773:        "_SP_INIT",             // 70c0
        !          1774:        "_SP_ON",               // 70c1
        !          1775:        "_SP_OFF",              // 70c2
        !          1776:        "_SP_CGCLR",    // 70c3
        !          1777:        "_SP_DEFCG",    // 70c4
        !          1778:        "_SP_GTPCG",    // 70c5
        !          1779:        "_SP_REGST",    // 70c6
        !          1780:        "_SP_REGGT",    // 70c7
        !          1781:        "_BGSCRLST",    // 70c8
        !          1782:        "_BGSCRLGT",    // 70c9
        !          1783:        "_BGCTRLST",    // 70ca
        !          1784:        "_BGCTRLGT",    // 70cb
        !          1785:        "_BGTEXTCL",    // 70cc
        !          1786:        "_BGTEXTST",    // 70cd
        !          1787:        "_BGTEXTGT",    // 70ce
        !          1788:        "_SPALET",              // 70cf
        !          1789: 
        !          1790:        NULL,                   // 70d0
        !          1791:        NULL,                   // 70d1
        !          1792:        NULL,                   // 70d2
        !          1793:        "_TXXLINE",             // 70d3
        !          1794:        "_TXYLINE",             // 70d4
        !          1795:        "_TXLINE",              // 70d5
        !          1796:        "_TXBOX",               // 70d6
        !          1797:        "_TXFILL",              // 70d7
        !          1798:        "_TXREV",               // 70d8
        !          1799:        NULL,                   // 70d9
        !          1800:        NULL,                   // 70da
        !          1801:        NULL,                   // 70db
        !          1802:        NULL,                   // 70dc
        !          1803:        NULL,                   // 70dd
        !          1804:        NULL,                   // 70de
        !          1805:        "_TXRASCPY",    // 70df
        !          1806: 
        !          1807:        NULL,                   // 70e0
        !          1808:        NULL,                   // 70e1
        !          1809:        NULL,                   // 70e2
        !          1810:        NULL,                   // 70e3
        !          1811:        NULL,                   // 70e4
        !          1812:        NULL,                   // 70e5
        !          1813:        NULL,                   // 70e6
        !          1814:        NULL,                   // 70e7
        !          1815:        NULL,                   // 70e8
        !          1816:        NULL,                   // 70e9
        !          1817:        NULL,                   // 70ea
        !          1818:        NULL,                   // 70eb
        !          1819:        NULL,                   // 70ec
        !          1820:        NULL,                   // 70ed
        !          1821:        NULL,                   // 70ee
        !          1822:        NULL,                   // 70ef
        !          1823: 
        !          1824:        "_OPMDRV",              // 70f0
        !          1825:        "_RSDRV",               // 70f1
        !          1826:        "_A_JOYGET",    // 70f2
        !          1827:        "_MUSICDRV",    // 70f3
        !          1828:        NULL,                   // 70f4
        !          1829:        "_SCSIDRV",             // 70f5
        !          1830:        NULL,                   // 70f6
        !          1831:        NULL,                   // 70f7
        !          1832:        NULL,                   // 70f8
        !          1833:        NULL,                   // 70f9
        !          1834:        NULL,                   // 70fa
        !          1835:        NULL,                   // 70fb
        !          1836:        NULL,                   // 70fc
        !          1837:        "_ABORTRST",    // 70fd
        !          1838:        "_IPLERR",              // 70fe
        !          1839:        "_ABORTJOB",    // 70ff
        !          1840: };
        !          1841: 
        !          1842: // ここから命令
        !          1843: 
        !          1844: // %0000_000000_mmmrrr ORI.B #<imm>,<ea>
        !          1845: // %0000_000000_111100 ORI.B #<imm>,CCR
        !          1846: OP_DEF(ori_b)
        !          1847: {
        !          1848:        name = "ori";
        !          1849:        size = Size::B;
        !          1850:        src = imm8();
        !          1851:        if ((ir[0] & 0x3f) == 0x3c) {
        !          1852:                dst = make_reg(Reg::CCR);
        !          1853:        } else {
        !          1854:                dst = make_ea();
        !          1855:        }
        !          1856: }
        !          1857: 
        !          1858: // %0000_000001_mmmrrr ORI.W #<imm>,<ea>
        !          1859: // %0000_000001_111100 ORI.W #<imm>,SR
        !          1860: OP_DEF(ori_w)
        !          1861: {
        !          1862:        name = "ori";
        !          1863:        size = Size::W;
        !          1864:        src = imm16();
        !          1865:        if ((ir[0] & 0x3f) == 0x3c) {
        !          1866:                dst = make_reg(Reg::SR);
        !          1867:        } else {
        !          1868:                dst = make_ea();
        !          1869:        }
        !          1870: }
        !          1871: 
        !          1872: // %0000_000010_mmmrrr ORI.L #<imm>,<ea>
        !          1873: OP_DEF(ori_l)
        !          1874: {
        !          1875:        name = "ori";
        !          1876:        size = Size::L;
        !          1877:        src = imm32();
        !          1878:        dst = make_ea();
        !          1879: }
        !          1880: 
        !          1881: void
        !          1882: Disasm::ops_cmp2chk2(Disasm::Size sz)
        !          1883: {
        !          1884:        fetch16();
        !          1885:        if ((ir[1] & 0x0800) == 0) {
        !          1886:                // CMP2.[BWL] <ea>,Rn
        !          1887:                name = "cmp2";
        !          1888:        } else {
        !          1889:                // CHK2.[BWL] <ea>,Rn
        !          1890:                name = "chk2";
        !          1891:        }
        !          1892:        size = sz;
        !          1893:        src = make_ea();
        !          1894:        dst = make_rn(ir[1] >> 12);
        !          1895: }
        !          1896: 
        !          1897: // %0000_000011_mmmrrr CMP2/CHK2.B <ea>,Rn
        !          1898: OP_DEF(cmp2chk2_b)
        !          1899: {
        !          1900:        ops_cmp2chk2(Size::B);
        !          1901: }
        !          1902: 
        !          1903: // B{TST,CHG,CLR,SET} と MOVEP のメイン部分
        !          1904: void
        !          1905: Disasm::ops_btst_movep()
        !          1906: {
        !          1907:        uint mr = (ir[0] >> 3) & 7;
        !          1908:        uint op = (ir[0] >> 6) & 3;
        !          1909: 
        !          1910:        if (mr == 0) {
        !          1911:                // B***.L Dx,Dy
        !          1912:                name = btst_names[op];
        !          1913:                size = Size::L;
        !          1914:                src = make_dn(ir[0] >> 9);
        !          1915:                dst = make_dn(ir[0]);
        !          1916:        } else if (mr == 1) {
        !          1917:                // MOVEP
        !          1918:                ops_movep();
        !          1919:        } else {
        !          1920:                // B***.B Dx,<ea>
        !          1921:                name = btst_names[op];
        !          1922:                size = Size::B;
        !          1923:                src = make_dn(ir[0] >> 9);
        !          1924:                dst = make_ea();
        !          1925:        }
        !          1926: }
        !          1927: 
        !          1928: // MOVEP
        !          1929: void
        !          1930: Disasm::ops_movep()
        !          1931: {
        !          1932:        name = "movep";
        !          1933:        uint mode = (ir[0] >> 6) & 3;
        !          1934:        __assume(mode <= 3);
        !          1935:        switch (mode) {
        !          1936:         case 0:        // MOVEP.W (d,Ay),Dx
        !          1937:                size = Size::W;
        !          1938:                src = "(" + addr16() + "," + make_an(ir[0]) + ")";
        !          1939:                dst = make_dn(ir[0] >> 9);
        !          1940:                break;
        !          1941:         case 1:        // MOVEP.L (d,Ay),Dx
        !          1942:                size = Size::L;
        !          1943:                src = "(" + addr16() + "," + make_an(ir[0]) + ")";
        !          1944:                dst = make_dn(ir[0] >> 9);
        !          1945:                break;
        !          1946:         case 2:        // MOVEP.W Dx,(d,Ay)
        !          1947:                size = Size::W;
        !          1948:                src = make_dn(ir[0] >> 9);
        !          1949:                dst = "(" + addr16() + "," + make_an(ir[0]) + ")";
        !          1950:                break;
        !          1951:         case 3:        // MOVEP.L Dx,(d,Ay)
        !          1952:                size = Size::L;
        !          1953:                src = make_dn(ir[0] >> 9);
        !          1954:                dst = "(" + addr16() + "," + make_an(ir[0]) + ")";
        !          1955:                break;
        !          1956:        }
        !          1957: }
        !          1958: 
        !          1959: // %0000_xxx100_000yyy BTST.L Dx,Dy
        !          1960: // %0000_xxx100_001yyy MOVEP.W (d,Ay),Dx
        !          1961: // %0000_xxx100_mmmrrr BTST.B Dx,<ea>
        !          1962: OP_DEF(btst_dn_ea)
        !          1963: {
        !          1964:        ops_btst_movep();
        !          1965: }
        !          1966: 
        !          1967: // %0000_xxx101_000yyy BCHG.L Dx,Dy
        !          1968: // %0000_xxx101_001yyy MOVEP.L (d,Ay),Dx
        !          1969: // %0000_xxx101_mmmrrr BCHG.B Dx,<ea>
        !          1970: OP_DEF(bchg_dn_ea)
        !          1971: {
        !          1972:        ops_btst_movep();
        !          1973: }
        !          1974: 
        !          1975: // %0000_xxx110_000yyy BCLR.L Dx,Dy
        !          1976: // %0000_xxx110_001yyy MOVEP.W Dx,(d,Ay)
        !          1977: // %0000_xxx110_mmmrrr BCLR.B Dx,<ea>
        !          1978: OP_DEF(bclr_dn_ea)
        !          1979: {
        !          1980:        ops_btst_movep();
        !          1981: }
        !          1982: 
        !          1983: // %0000_xxx111_000yyy BSET.L Dx,Dy
        !          1984: // %0000_xxx111_001yyy MOVEP.L Dx,(d,Ay)
        !          1985: // %0000_xxx111_mmmrrr BSET.B Dx,<ea>
        !          1986: OP_DEF(bset_dn_ea)
        !          1987: {
        !          1988:        ops_btst_movep();
        !          1989: }
        !          1990: 
        !          1991: // %0000_001000_mmmrrr ANDI.B #<imm>,<ea>
        !          1992: // %0000_001000_111100 ANDI.B #<imm>,CCR
        !          1993: OP_DEF(andi_b)
        !          1994: {
        !          1995:        name = "andi";
        !          1996:        size = Size::B;
        !          1997:        src = imm8();
        !          1998:        if ((ir[0] & 0x3f) == 0x3c) {
        !          1999:                dst = make_reg(Reg::CCR);
        !          2000:        } else {
        !          2001:                dst = make_ea();
        !          2002:        }
        !          2003: }
        !          2004: 
        !          2005: // %0000_001001_mmmrrr ANDI.W #<imm>,<ea>
        !          2006: // %0000_001001_111100 ANDI.W #<imm>,SR
        !          2007: OP_DEF(andi_w)
        !          2008: {
        !          2009:        name = "andi";
        !          2010:        size = Size::W;
        !          2011:        src = imm16();
        !          2012:        if ((ir[0] & 0x3f) == 0x3c) {
        !          2013:                dst = make_reg(Reg::SR);
        !          2014:        } else {
        !          2015:                dst = make_ea();
        !          2016:        }
        !          2017: }
        !          2018: 
        !          2019: // %0000_001010_mmmrrr ANDI.L #<imm>,<ea>
        !          2020: OP_DEF(andi_l)
        !          2021: {
        !          2022:        name = "andi";
        !          2023:        size = Size::L;
        !          2024:        src = imm32();
        !          2025:        dst = make_ea();
        !          2026: }
        !          2027: 
        !          2028: // %0000_001011_mmmrrr CMP2/CHK2.W <ea>,Rn
        !          2029: OP_DEF(cmp2chk2_w)
        !          2030: {
        !          2031:        ops_cmp2chk2(Size::W);
        !          2032: }
        !          2033: 
        !          2034: // %0000_010000_mmmrrr SUBI.B #<imm>,<ea>
        !          2035: OP_DEF(subi_b)
        !          2036: {
        !          2037:        name = "subi";
        !          2038:        size = Size::B;
        !          2039:        src = imm8();
        !          2040:        dst = make_ea();
        !          2041: }
        !          2042: 
        !          2043: // %0000_010001_mmmrrr SUBI.W #<imm>,<ea>
        !          2044: OP_DEF(subi_w)
        !          2045: {
        !          2046:        name = "subi";
        !          2047:        size = Size::W;
        !          2048:        src = imm16();
        !          2049:        dst = make_ea();
        !          2050: }
        !          2051: 
        !          2052: // %0000_010010_mmmrrr SUBI.L #<imm>,<ea>
        !          2053: OP_DEF(subi_l)
        !          2054: {
        !          2055:        name = "subi";
        !          2056:        size = Size::L;
        !          2057:        src = imm32();
        !          2058:        dst = make_ea();
        !          2059: }
        !          2060: 
        !          2061: // %0000_010011_mmmrrr CMP2/CHK2.L <ea>,Rn
        !          2062: OP_DEF(cmp2chk2_l)
        !          2063: {
        !          2064:        ops_cmp2chk2(Size::L);
        !          2065: }
        !          2066: 
        !          2067: // %0000_011000_mmmrrr ADDI.B #<imm>,<ea>
        !          2068: OP_DEF(addi_b)
        !          2069: {
        !          2070:        name = "addi";
        !          2071:        size = Size::B;
        !          2072:        src = imm8();
        !          2073:        dst = make_ea();
        !          2074: }
        !          2075: 
        !          2076: // %0000_011001_mmmrrr ADDI.W #<imm>,<ea>
        !          2077: OP_DEF(addi_w)
        !          2078: {
        !          2079:        name = "addi";
        !          2080:        size = Size::W;
        !          2081:        src = imm16();
        !          2082:        dst = make_ea();
        !          2083: }
        !          2084: 
        !          2085: // %0000_011010_mmmrrr ADDI.L #<imm>,<ea>
        !          2086: OP_DEF(addi_l)
        !          2087: {
        !          2088:        name = "addi";
        !          2089:        size = Size::L;
        !          2090:        src = imm32();
        !          2091:        dst = make_ea();
        !          2092: }
        !          2093: 
        !          2094: // BTST,BCHG,BCLR,BSET #<imm>,<ea> の共通部分。
        !          2095: void
        !          2096: Disasm::ops_btst_imm_ea()
        !          2097: {
        !          2098:        uint n = ir[0] & 0x3f;
        !          2099:        uint op = (ir[0] >> 6) & 3;
        !          2100: 
        !          2101:        fetch16();
        !          2102:        name = btst_names[op];
        !          2103:        if (n < 8) {
        !          2104:                size = Size::L;
        !          2105:                src = string_format("#%d", ir[1] & 31);
        !          2106:                dst = make_dn(n);
        !          2107:        } else {
        !          2108:                size = Size::B;
        !          2109:                src = string_format("#%d", ir[1] & 7);
        !          2110:                dst = make_ea();
        !          2111:        }
        !          2112: }
        !          2113: 
        !          2114: // %0000_100000_000yyy BTST.L #<imm>,Dy
        !          2115: // %0000_100000_mmmrrr BTST.B #<imm>,<ea>
        !          2116: OP_DEF(btst_imm_ea)
        !          2117: {
        !          2118:        ops_btst_imm_ea();
        !          2119: }
        !          2120: 
        !          2121: // %0000_100001_000yyy BCHG.L #<imm>,Dy
        !          2122: // %0000_100001_mmmrrr BCHG.B #<imm>,<ea>
        !          2123: OP_DEF(bchg_imm_ea)
        !          2124: {
        !          2125:        ops_btst_imm_ea();
        !          2126: }
        !          2127: 
        !          2128: // %0000_100010_000yyy BCLR.L #<imm>,Dy
        !          2129: // %0000_100010_mmmrrr BCLR.B #<imm>,<ea>
        !          2130: OP_DEF(bclr_imm_ea)
        !          2131: {
        !          2132:        ops_btst_imm_ea();
        !          2133: }
        !          2134: 
        !          2135: // %0000_100011_000yyy BSET.L #<imm>,Dy
        !          2136: // %0000_100011_mmmrrr BSET.B #<imm>,<ea>
        !          2137: OP_DEF(bset_imm_ea)
        !          2138: {
        !          2139:        ops_btst_imm_ea();
        !          2140: }
        !          2141: 
        !          2142: // %0000_101000_mmmrrr EORI.B #<imm>,<ea>
        !          2143: // %0000_101000_111100 EORI.B #<imm>,CCR
        !          2144: OP_DEF(eori_b)
        !          2145: {
        !          2146:        name = "eori";
        !          2147:        size = Size::B;
        !          2148:        src = imm8();
        !          2149:        if ((ir[0] & 0x3f) == 0x3c) {
        !          2150:                dst = make_reg(Reg::CCR);
        !          2151:        } else {
        !          2152:                dst = make_ea();
        !          2153:        }
        !          2154: }
        !          2155: 
        !          2156: // %0000_101001_mmmrrr EORI.W #<imm>,<ea>
        !          2157: // %0000_101001_111100 EORI.W #<imm>,SR
        !          2158: OP_DEF(eori_w)
        !          2159: {
        !          2160:        name = "eori";
        !          2161:        size = Size::W;
        !          2162:        src = imm16();
        !          2163:        if ((ir[0] & 0x3f) == 0x3c) {
        !          2164:                dst = make_reg(Reg::SR);
        !          2165:        } else {
        !          2166:                dst = make_ea();
        !          2167:        }
        !          2168: }
        !          2169: 
        !          2170: // %0000_101010_mmmrrr EORI.L #<imm>,<ea>
        !          2171: OP_DEF(eori_l)
        !          2172: {
        !          2173:        name = "eori";
        !          2174:        size = Size::L;
        !          2175:        src = imm32();
        !          2176:        dst = make_ea();
        !          2177: }
        !          2178: 
        !          2179: // CAS の共通部分
        !          2180: void
        !          2181: Disasm::ops_cas(Disasm::Size sz)
        !          2182: {
        !          2183:        fetch16();
        !          2184: 
        !          2185:        name = "cas";
        !          2186:        size = sz;
        !          2187:        uint dc = ir[1];
        !          2188:        uint du = ir[1] >> 6;
        !          2189:        src = make_dn(dc) + "," + make_dn(du);
        !          2190:        dst = make_ea();
        !          2191: }
        !          2192: 
        !          2193: // CAS2 の共通部分
        !          2194: void
        !          2195: Disasm::ops_cas2(Disasm::Size sz)
        !          2196: {
        !          2197:        name = "cas2";
        !          2198:        size = sz;
        !          2199:        fetch16();
        !          2200:        uint dc1 = ir[1] & 7;
        !          2201:        uint du1 = ir[1] >> 6;
        !          2202:        uint rn1 = ir[1] >> 12;
        !          2203:        fetch16();
        !          2204:        uint dc2 = ir[2] & 7;
        !          2205:        uint du2 = ir[2] >> 6;
        !          2206:        uint rn2 = ir[2] >> 12;
        !          2207:        src = make_dn(dc1) + ":" + make_dn(dc2) + ","
        !          2208:            + make_dn(du1) + ":" + make_dn(du2);
        !          2209:        dst = "(" + make_rn(rn1) + "):(" + make_rn(rn2) + ")";
        !          2210: }
        !          2211: 
        !          2212: // %0000_101011_mmmrrr CAS.B Dc,Du,<ea>
        !          2213: OP_DEF(cas_b)
        !          2214: {
        !          2215:        ops_cas(Size::B);
        !          2216: }
        !          2217: 
        !          2218: // %0000_110000_mmmrrr CMPI.B #<imm>,<ea>
        !          2219: OP_DEF(cmpi_b)
        !          2220: {
        !          2221:        name = "cmpi";
        !          2222:        size = Size::B;
        !          2223:        src = imm8();
        !          2224:        dst = make_ea();
        !          2225: }
        !          2226: 
        !          2227: // %0000_110001_mmmrrr CMPI.W #<imm>,<ea>
        !          2228: OP_DEF(cmpi_w)
        !          2229: {
        !          2230:        name = "cmpi";
        !          2231:        size = Size::W;
        !          2232:        src = imm16();
        !          2233:        dst = make_ea();
        !          2234: }
        !          2235: 
        !          2236: // %0000_110010_mmmrrr CMPI.L #<imm>,<ea>
        !          2237: OP_DEF(cmpi_l)
        !          2238: {
        !          2239:        name = "cmpi";
        !          2240:        size = Size::L;
        !          2241:        src = imm32();
        !          2242:        dst = make_ea();
        !          2243: }
        !          2244: 
        !          2245: // %0000_110011_mmmrrr CAS.W Dc,Du,<ea>
        !          2246: // %0000_110011_111100 CAS2.W Dc1:Dc2,Du1:Du2,(Rn1):(Rn2)
        !          2247: OP_DEF(cas_w)
        !          2248: {
        !          2249:        uint n = ir[0] & 0x3f;
        !          2250: 
        !          2251:        if (n == 0x3c) {
        !          2252:                // CAS2.W Dc1:Dc2,Du1:Du2,(Rn1):(Rn2)
        !          2253:                ops_cas2(Size::W);
        !          2254:        } else {
        !          2255:                // CAS.W Dc,Du,<ea>
        !          2256:                ops_cas(Size::W);
        !          2257:        }
        !          2258: }
        !          2259: 
        !          2260: // MOVES の共通部分
        !          2261: void
        !          2262: Disasm::ops_moves(Disasm::Size sz)
        !          2263: {
        !          2264:        fetch16();
        !          2265: 
        !          2266:        name = "moves";
        !          2267:        size = sz;
        !          2268:        if ((ir[1] & 0x0800) == 0) {
        !          2269:                // MOVES <ea>,Rn
        !          2270:                src = make_ea();
        !          2271:                dst = make_rn(ir[1] >> 12);
        !          2272:        } else {
        !          2273:                // MOVES Rn,<ea>
        !          2274:                src = make_rn(ir[1] >> 12);
        !          2275:                dst = make_ea();
        !          2276:        }
        !          2277: }
        !          2278: 
        !          2279: // %0000_111000_mmmrrr MOVES.B <ea>,Rn
        !          2280: OP_DEF(moves_b)
        !          2281: {
        !          2282:        ops_moves(Size::B);
        !          2283: }
        !          2284: 
        !          2285: // %0000_111001_mmmrrr MOVES.W <ea>,Rn
        !          2286: OP_DEF(moves_w)
        !          2287: {
        !          2288:        ops_moves(Size::W);
        !          2289: }
        !          2290: 
        !          2291: // %0000_111010_mmmrrr MOVES.L <ea>,Rn
        !          2292: OP_DEF(moves_l)
        !          2293: {
        !          2294:        ops_moves(Size::L);
        !          2295: }
        !          2296: 
        !          2297: // %0000_111011_mmmrrr CAS.L Dc,Du,<ea>
        !          2298: // %0000_111011_111100 CAS2.L Dc1:Dc2,Du1:Du2,(Rn1):(Rn2)
        !          2299: OP_DEF(cas_l)
        !          2300: {
        !          2301:        uint n = ir[0] & 0x3f;
        !          2302: 
        !          2303:        if (n == 0x3c) {
        !          2304:                // CAS2.L Dc1:Dc2,Du1:Du2,(Rn1):(Rn2)
        !          2305:                ops_cas2(Size::L);
        !          2306:        } else {
        !          2307:                // CAS.L Dc,Du,<ea>
        !          2308:                ops_cas(Size::L);
        !          2309:        }
        !          2310: }
        !          2311: 
        !          2312: // MOVE.{BWL} <src>,<dst> の共通部分
        !          2313: void
        !          2314: Disasm::ops_move(Disasm::Size sz)
        !          2315: {
        !          2316:        name = "move";
        !          2317:        size = sz;
        !          2318:        src = make_ea();
        !          2319:        uint dstea = ((ir[0] >> 9) & 7) | ((ir[0] >> 3) & 0x38);
        !          2320:        dst = make_ea(dstea);
        !          2321: }
        !          2322: 
        !          2323: // %0001_xxx000_mmmrrr MOVE.B <ea>,Dx
        !          2324: OP_DEF(move_b_ea_dn)
        !          2325: {
        !          2326:        ops_move(Size::B);
        !          2327: }
        !          2328: 
        !          2329: // %0001_xxx010_mmmrrr MOVE.B <ea>,(Ax)
        !          2330: OP_DEF(move_b_ea_anin)
        !          2331: {
        !          2332:        ops_move(Size::B);
        !          2333: }
        !          2334: 
        !          2335: // %0001_xxx011_mmmrrr MOVE.B <ea>,(Ax)+
        !          2336: OP_DEF(move_b_ea_anpi)
        !          2337: {
        !          2338:        ops_move(Size::B);
        !          2339: }
        !          2340: 
        !          2341: // %0001_xxx100_mmmrrr MOVE.B <ea>,-(Ax)
        !          2342: OP_DEF(move_b_ea_anpd)
        !          2343: {
        !          2344:        ops_move(Size::B);
        !          2345: }
        !          2346: 
        !          2347: // %0001_xxx101_mmmrrr MOVE.B <ea>,d16(Ax)
        !          2348: OP_DEF(move_b_ea_andi)
        !          2349: {
        !          2350:        ops_move(Size::B);
        !          2351: }
        !          2352: 
        !          2353: // %0001_xxx110_mmmrrr MOVE.B <ea>,(Ax,IX)
        !          2354: OP_DEF(move_b_ea_anix)
        !          2355: {
        !          2356:        ops_move(Size::B);
        !          2357: }
        !          2358: 
        !          2359: // %0001_000111_mmmrrr MOVE.B <ea>,Abs.W
        !          2360: OP_DEF(move_b_ea_absw)
        !          2361: {
        !          2362:        ops_move(Size::B);
        !          2363: }
        !          2364: 
        !          2365: // %0001_001111_mmmrrr MOVE.B <ea>,Abs.L
        !          2366: OP_DEF(move_b_ea_absl)
        !          2367: {
        !          2368:        ops_move(Size::B);
        !          2369: }
        !          2370: 
        !          2371: // %0010_xxx000_mmmrrr MOVE.L <ea>,Dx
        !          2372: OP_DEF(move_l_ea_dn)
        !          2373: {
        !          2374:        ops_move(Size::L);
        !          2375: }
        !          2376: 
        !          2377: // %0010_xxx001_mmmrrr MOVEA.L <ea>,Ax
        !          2378: OP_DEF(movea_l)
        !          2379: {
        !          2380:        name = "movea";
        !          2381:        size = Size::L;
        !          2382:        src = make_ea();
        !          2383:        dst = make_an(ir[0] >> 9);
        !          2384: }
        !          2385: 
        !          2386: // %0010_xxx010_mmmrrr MOVE.L <ea>,(Ax)
        !          2387: OP_DEF(move_l_ea_anin)
        !          2388: {
        !          2389:        ops_move(Size::L);
        !          2390: }
        !          2391: 
        !          2392: // %0010_xxx011_mmmrrr MOVE.L <ea>,(Ax)+
        !          2393: OP_DEF(move_l_ea_anpi)
        !          2394: {
        !          2395:        ops_move(Size::L);
        !          2396: }
        !          2397: 
        !          2398: // %0010_xxx100_mmmrrr MOVE.L <ea>,-(Ax)
        !          2399: OP_DEF(move_l_ea_anpd)
        !          2400: {
        !          2401:        ops_move(Size::L);
        !          2402: }
        !          2403: 
        !          2404: // %0010_xxx101_mmmrrr MOVE.L <ea>,d16(Ax)
        !          2405: OP_DEF(move_l_ea_andi)
        !          2406: {
        !          2407:        ops_move(Size::L);
        !          2408: }
        !          2409: 
        !          2410: // %0010_xxx110_mmmrrr MOVE.L <ea>,(Ax,IX)
        !          2411: OP_DEF(move_l_ea_anix)
        !          2412: {
        !          2413:        ops_move(Size::L);
        !          2414: }
        !          2415: 
        !          2416: // %0010_000111_mmmrrr MOVE.L <ea>,Abs.W
        !          2417: OP_DEF(move_l_ea_absw)
        !          2418: {
        !          2419:        ops_move(Size::L);
        !          2420: }
        !          2421: 
        !          2422: // %0010_001111_mmmrrr MOVE.L <ea>,Abs.L
        !          2423: OP_DEF(move_l_ea_absl)
        !          2424: {
        !          2425:        ops_move(Size::L);
        !          2426: }
        !          2427: 
        !          2428: // %0011_xxx000_mmmrrr MOVE.W <ea>,Dx
        !          2429: OP_DEF(move_w_ea_dn)
        !          2430: {
        !          2431:        ops_move(Size::W);
        !          2432: }
        !          2433: 
        !          2434: // %0011_xxx001_mmmrrr MOVEA.W <ea>,Ax
        !          2435: OP_DEF(movea_w)
        !          2436: {
        !          2437:        name = "movea";
        !          2438:        size = Size::W;
        !          2439:        src = make_ea();
        !          2440:        dst = make_an(ir[0] >> 9);
        !          2441: }
        !          2442: 
        !          2443: // %0011_xxx010_mmmrrr MOVE.W <ea>,(Ax)
        !          2444: OP_DEF(move_w_ea_anin)
        !          2445: {
        !          2446:        ops_move(Size::W);
        !          2447: }
        !          2448: 
        !          2449: // %0011_xxx011_mmmrrr MOVE.W <ea>,(Ax)+
        !          2450: OP_DEF(move_w_ea_anpi)
        !          2451: {
        !          2452:        ops_move(Size::W);
        !          2453: }
        !          2454: 
        !          2455: // %0011_xxx100_mmmrrr MOVE.W <ea>,-(Ax)
        !          2456: OP_DEF(move_w_ea_anpd)
        !          2457: {
        !          2458:        ops_move(Size::W);
        !          2459: }
        !          2460: 
        !          2461: // %0011_xxx101_mmmrrr MOVE.W <ea>,d16(Ax)
        !          2462: OP_DEF(move_w_ea_andi)
        !          2463: {
        !          2464:        ops_move(Size::W);
        !          2465: }
        !          2466: 
        !          2467: // %0011_xxx110_mmmrrr MOVE.W <ea>,(Ax,IX)
        !          2468: OP_DEF(move_w_ea_anix)
        !          2469: {
        !          2470:        ops_move(Size::W);
        !          2471: }
        !          2472: 
        !          2473: // %0011_000111_mmmrrr MOVE.W <ea>,Abs.W
        !          2474: OP_DEF(move_w_ea_absw)
        !          2475: {
        !          2476:        ops_move(Size::W);
        !          2477: }
        !          2478: 
        !          2479: // %0011_001111_mmmrrr MOVE.W <ea>,Abs.L
        !          2480: OP_DEF(move_w_ea_absl)
        !          2481: {
        !          2482:        ops_move(Size::W);
        !          2483: }
        !          2484: 
        !          2485: // %0100_000000_mmmrrr NEGX.B <ea>
        !          2486: OP_DEF(negx_b)
        !          2487: {
        !          2488:        name = "negx";
        !          2489:        size = Size::B;
        !          2490:        src = make_ea();
        !          2491: }
        !          2492: 
        !          2493: // %0100_000001_mmmrrr NEGX.W <ea>
        !          2494: OP_DEF(negx_w)
        !          2495: {
        !          2496:        name = "negx";
        !          2497:        size = Size::W;
        !          2498:        src = make_ea();
        !          2499: }
        !          2500: 
        !          2501: // %0100_000010_mmmrrr NEGX.L <ea>
        !          2502: OP_DEF(negx_l)
        !          2503: {
        !          2504:        name = "negx";
        !          2505:        size = Size::L;
        !          2506:        src = make_ea();
        !          2507: }
        !          2508: 
        !          2509: // %0100_000011_mmmrrr MOVE.W SR,<ea>
        !          2510: OP_DEF(move_sr_ea)
        !          2511: {
        !          2512:        name = "move";
        !          2513:        size = Size::W;
        !          2514:        src = make_reg(Reg::SR);
        !          2515:        dst = make_ea();
        !          2516: }
        !          2517: 
        !          2518: // %0100_xxx100_mmmrrr CHK.L <ea>,Dx
        !          2519: OP_DEF(chk_l)
        !          2520: {
        !          2521:        name = "chk";
        !          2522:        size = Size::L;
        !          2523:        src = make_ea();
        !          2524:        dst = make_dn(ir[0] >> 9);
        !          2525: }
        !          2526: 
        !          2527: // %0100_xxx110_mmmrrr CHK.W <ea>,Dx
        !          2528: OP_DEF(chk_w)
        !          2529: {
        !          2530:        name = "chk";
        !          2531:        size = Size::W;
        !          2532:        src = make_ea();
        !          2533:        dst = make_dn(ir[0] >> 9);
        !          2534: }
        !          2535: 
        !          2536: // %0100_xxx111_mmmrrr LEA.L <ea>,Ax
        !          2537: // %0100_100111_000yyy EXTB.L Dy
        !          2538: OP_DEF(lea)
        !          2539: {
        !          2540:        uint n = ir[0] & 0x3f;
        !          2541:        uint x = (ir[0] >> 9) & 7;
        !          2542:        if (n < 8) {
        !          2543:                if (x == 4) {
        !          2544:                        // EXTB.L Dy
        !          2545:                        name = "extb";
        !          2546:                        size = Size::L;
        !          2547:                        src = make_dn(ir[0]);
        !          2548:                } else {
        !          2549:                        OP_FUNC(illegal);
        !          2550:                }
        !          2551:        } else {
        !          2552:                // LEA.L <ea>,Ax
        !          2553:                name = "lea";
        !          2554:                size = Size::L;
        !          2555:                src = make_ea();
        !          2556:                dst = make_an(x);
        !          2557:        }
        !          2558: }
        !          2559: 
        !          2560: // %0100_001000_mmmrrr CLR.B <ea>
        !          2561: OP_DEF(clr_b)
        !          2562: {
        !          2563:        name = "clr";
        !          2564:        size = Size::B;
        !          2565:        src = make_ea();
        !          2566: }
        !          2567: 
        !          2568: // %0100_001001_mmmrrr CLR.W <ea>
        !          2569: OP_DEF(clr_w)
        !          2570: {
        !          2571:        name = "clr";
        !          2572:        size = Size::W;
        !          2573:        src = make_ea();
        !          2574: }
        !          2575: 
        !          2576: // %0100_001010_mmmrrr CLR.L <ea>
        !          2577: OP_DEF(clr_l)
        !          2578: {
        !          2579:        name = "clr";
        !          2580:        size = Size::L;
        !          2581:        src = make_ea();
        !          2582: }
        !          2583: 
        !          2584: // %0100_001011_mmmrrr MOVE.W CCR,<ea>
        !          2585: OP_DEF(move_ccr_ea)
        !          2586: {
        !          2587:        // MOVE to/from CCR のサイズは .W
        !          2588:        name = "move";
        !          2589:        size = Size::W;
        !          2590:        src = make_reg(Reg::CCR);
        !          2591:        dst = make_ea();
        !          2592: }
        !          2593: 
        !          2594: // %0100_010000_mmmrrr NEG.B <ea>
        !          2595: OP_DEF(neg_b)
        !          2596: {
        !          2597:        name = "neg";
        !          2598:        size = Size::B;
        !          2599:        src = make_ea();
        !          2600: }
        !          2601: 
        !          2602: // %0100_010001_mmmrrr NEG.W <ea>
        !          2603: OP_DEF(neg_w)
        !          2604: {
        !          2605:        name = "neg";
        !          2606:        size = Size::W;
        !          2607:        src = make_ea();
        !          2608: }
        !          2609: 
        !          2610: // %0100_010010_mmmrrr NEG.L <ea>
        !          2611: OP_DEF(neg_l)
        !          2612: {
        !          2613:        name = "neg";
        !          2614:        size = Size::L;
        !          2615:        src = make_ea();
        !          2616: }
        !          2617: 
        !          2618: // %0100_010011_mmmrrr MOVE.W <ea>,CCR
        !          2619: OP_DEF(move_ea_ccr)
        !          2620: {
        !          2621:        // MOVE to/from CCR のサイズは .W
        !          2622:        name = "move";
        !          2623:        size = Size::W;
        !          2624:        src = make_ea();
        !          2625:        dst = make_reg(Reg::CCR);
        !          2626: }
        !          2627: 
        !          2628: // %0100_011000_mmmrrr NOT.B <ea>
        !          2629: OP_DEF(not_b)
        !          2630: {
        !          2631:        name = "not";
        !          2632:        size = Size::B;
        !          2633:        src = make_ea();
        !          2634: }
        !          2635: 
        !          2636: // %0100_011001_mmmrrr NOT.W <ea>
        !          2637: OP_DEF(not_w)
        !          2638: {
        !          2639:        name = "not";
        !          2640:        size = Size::W;
        !          2641:        src = make_ea();
        !          2642: }
        !          2643: 
        !          2644: // %0100_011010_mmmrrr NOT.L <ea>
        !          2645: OP_DEF(not_l)
        !          2646: {
        !          2647:        name = "not";
        !          2648:        size = Size::L;
        !          2649:        src = make_ea();
        !          2650: }
        !          2651: 
        !          2652: // %0100_011011_mmmrrr MOVE.W <ea>,SR
        !          2653: OP_DEF(move_ea_sr)
        !          2654: {
        !          2655:        name = "move";
        !          2656:        size = Size::W;
        !          2657:        src = make_ea();
        !          2658:        dst = make_reg(Reg::SR);
        !          2659: }
        !          2660: 
        !          2661: // %0100_100000_mmmrrr NBCD.B <ea>
        !          2662: // %0100_100000_001yyy LINK.L Ay,#<imm>
        !          2663: OP_DEF(nbcd)
        !          2664: {
        !          2665:        uint mm = (ir[0] >> 3) & 7;
        !          2666: 
        !          2667:        if (mm == 1) {
        !          2668:                // LINK.L Ay,#<imm>
        !          2669:                name = "link";
        !          2670:                size = Size::L;
        !          2671:                src = make_an(ir[0]);
        !          2672:                dst = "#" + disp32();
        !          2673:        } else {
        !          2674:                // NBCD.B <ea>
        !          2675:                name = "nbcd";
        !          2676:                size = Size::B;
        !          2677:                src = make_ea();
        !          2678:        }
        !          2679: }
        !          2680: 
        !          2681: // %0100_100001_000yyy SWAP.W Dy
        !          2682: // %0100_100001_001nnn BKPT #<imm>
        !          2683: // %0100_100001_mmmrrr PEA.L <ea>
        !          2684: OP_DEF(pea)
        !          2685: {
        !          2686:        uint n = ir[0] & 0x3f;
        !          2687: 
        !          2688:        if (n < 8) {
        !          2689:                // SWAP.W Dy
        !          2690:                name = "swap";
        !          2691:                size = Size::W;
        !          2692:                src = make_dn(n);
        !          2693:        } else if (n < 16) {
        !          2694:                // BKPT #<imm>
        !          2695:                name = "bkpt";
        !          2696:                src = string_format("#%d", ir[0] & 7);
        !          2697:        } else {
        !          2698:                // PEA.L <ea>
        !          2699:                name = "pea";
        !          2700:                size = Size::L;
        !          2701:                src = make_ea();
        !          2702:        }
        !          2703: }
        !          2704: 
        !          2705: // MOVEM/EXT の共通部分
        !          2706: void
        !          2707: Disasm::ops_movem_ext(Disasm::Size sz)
        !          2708: {
        !          2709:        uint n = ir[0] & 0x3f;
        !          2710: 
        !          2711:        size = sz;
        !          2712:        if (n < 8) {
        !          2713:                // EXT.W Dy
        !          2714:                name = "ext";
        !          2715:                src = make_dn(ir[0]);
        !          2716:        } else {
        !          2717:                // MOVEM.W <list>,<ea>
        !          2718:                fetch16();
        !          2719:                name = "movem";
        !          2720:                src = make_reglist();
        !          2721:                dst = make_ea();
        !          2722:        }
        !          2723: }
        !          2724: 
        !          2725: // %0100_100010_000yyy EXT.W Dy
        !          2726: // %0100_100010_mmmrrr MOVEM.W <list>,<ea>
        !          2727: OP_DEF(movem_w_mem)
        !          2728: {
        !          2729:        ops_movem_ext(Size::W);
        !          2730: }
        !          2731: 
        !          2732: // %0100_100011_000yyy EXT.L Dy
        !          2733: // %0100_100011_mmmrrr MOVEM.L <list>,<ea>
        !          2734: OP_DEF(movem_l_mem)
        !          2735: {
        !          2736:        ops_movem_ext(Size::L);
        !          2737: }
        !          2738: 
        !          2739: // %0100_101000_mmmrrr TST.B <ea>
        !          2740: OP_DEF(tst_b)
        !          2741: {
        !          2742:        name = "tst";
        !          2743:        size = Size::B;
        !          2744:        src = make_ea();
        !          2745: }
        !          2746: 
        !          2747: // %0100_101001_mmmrrr TST.W <ea>
        !          2748: OP_DEF(tst_w)
        !          2749: {
        !          2750:        name = "tst";
        !          2751:        size = Size::W;
        !          2752:        src = make_ea();
        !          2753: }
        !          2754: 
        !          2755: // %0100_101010_mmmrrr TST.L <ea>
        !          2756: OP_DEF(tst_l)
        !          2757: {
        !          2758:        name = "tst";
        !          2759:        size = Size::L;
        !          2760:        src = make_ea();
        !          2761: }
        !          2762: 
        !          2763: // %0100_101011_mmmrrr TAS.B <ea>
        !          2764: // %0100_101011_111100 ILLEGAL
        !          2765: OP_DEF(tas)
        !          2766: {
        !          2767:        uint n = ir[0] & 0x3f;
        !          2768:        if (n == 0x3c) {
        !          2769:                // ILLEGAL
        !          2770:                name = "illegal";
        !          2771:        } else {
        !          2772:                // TAS.B <ea>
        !          2773:                name = "tas";
        !          2774:                size = Size::B;
        !          2775:                src = make_ea();
        !          2776:        }
        !          2777: }
        !          2778: 
        !          2779: // %0100_110000_mmmrrr MUL{U,S}.L <ea>,Dl
        !          2780: OP_DEF(mul)
        !          2781: {
        !          2782:        fetch16();
        !          2783: 
        !          2784:        if ((ir[1] & 0x0800) == 0) {
        !          2785:                name = "mulu";
        !          2786:        } else {
        !          2787:                name = "muls";
        !          2788:        }
        !          2789:        size = Size::L;
        !          2790:        src = make_ea();
        !          2791:        if ((ir[1] & 0x0400) == 0) {
        !          2792:                dst = make_dn(ir[1] >> 12);
        !          2793:        } else {
        !          2794:                dst = make_dn(ir[1]) + ":" + make_dn(ir[1] >> 12);
        !          2795:        }
        !          2796: }
        !          2797: 
        !          2798: // %0100_110001_mmmrrr DIV{U,UL,S,SL}.L <ea>,Dq
        !          2799: OP_DEF(div)
        !          2800: {
        !          2801:        fetch16();
        !          2802: 
        !          2803:        if ((ir[1] & 0x0800) == 0) {
        !          2804:                name = "divu";
        !          2805:        } else {
        !          2806:                name = "divs";
        !          2807:        }
        !          2808:        size = Size::L;
        !          2809:        src = make_ea();
        !          2810:        uint dr = ir[1] & 7;
        !          2811:        uint dq = (ir[1] >> 12) & 7;
        !          2812:        if ((ir[1] & 0x0400) == 0) {
        !          2813:                if (dr == dq) {
        !          2814:                        dst = make_dn(dr);
        !          2815:                } else {
        !          2816:                        dst = make_dn(dr) + ":" + make_dn(dq);
        !          2817:                }
        !          2818:        } else {
        !          2819:                name += "l";
        !          2820:                dst = make_dn(dr) + ":" + make_dn(dq);
        !          2821:        }
        !          2822: }
        !          2823: 
        !          2824: // %0100_110010_mmmrrr MOVEM.W <ea>,<list>
        !          2825: OP_DEF(movem_w)
        !          2826: {
        !          2827:        fetch16();
        !          2828:        name = "movem";
        !          2829:        size = Size::W;
        !          2830:        src = make_ea();
        !          2831:        dst = make_reglist();
        !          2832: }
        !          2833: 
        !          2834: // %0100_110011_mmmrrr MOVEM.L <ea>,<list>
        !          2835: OP_DEF(movem_l)
        !          2836: {
        !          2837:        fetch16();
        !          2838:        name = "movem";
        !          2839:        size = Size::L;
        !          2840:        src = make_ea();
        !          2841:        dst = make_reglist();
        !          2842: }
        !          2843: 
        !          2844: // %0100_111001_00nnnn TRAP #<vector>
        !          2845: // %0100_111001_010yyy LINK.W Ay,#<imm>
        !          2846: // %0100_111001_011yyy UNLK Ay
        !          2847: // %0100_111001_100yyy MOVE.L Ay,USP
        !          2848: // %0100_111001_101yyy MOVE.L USP,Ay
        !          2849: // %0100_111001_110000 RESET
        !          2850: // %0100_111001_110001 NOP
        !          2851: // %0100_111001_110010 STOP #<imm>
        !          2852: // %0100_111001_110011 RTE
        !          2853: // %0100_111001_110100 RTD #<imm>
        !          2854: // %0100_111001_110101 RTS
        !          2855: // %0100_111001_110110 TRAPV
        !          2856: // %0100_111001_110111 RTR
        !          2857: // %0100_111001_111010 MOVEC.L Rc,Rn
        !          2858: // %0100_111001_111011 MOVEC.L Rn,Rc
        !          2859: OP_DEF(trap)
        !          2860: {
        !          2861:        uint n = ir[0] & 0x3f;
        !          2862:        switch (n) {
        !          2863:         case 0x00 ... 0x0f:    // TRAP #<vector>
        !          2864:                name = "trap";
        !          2865:                src = string_format("#%d", n);
        !          2866:                break;
        !          2867:         case 0x10 ... 0x17:    // LINK.W Ay,#<imm>
        !          2868:                name = "link";
        !          2869:                size = Size::W;
        !          2870:                src = make_an(ir[0]);
        !          2871:                dst = "#" + disp16();
        !          2872:                break;
        !          2873:         case 0x18 ... 0x1f:    // UNLK Ay
        !          2874:                name = "unlk";
        !          2875:                src = make_an(ir[0]);
        !          2876:                break;
        !          2877:         case 0x20 ... 0x27:    // MOVE.L Ay,USP
        !          2878:                name = "move";
        !          2879:                size = Size::L;
        !          2880:                src = make_an(ir[0]);
        !          2881:                dst = make_reg(Reg::USP);
        !          2882:                break;
        !          2883:         case 0x28 ... 0x2f:    // MOVE.L USP,Ay
        !          2884:                name = "move";
        !          2885:                size = Size::L;
        !          2886:                src = make_reg(Reg::USP);
        !          2887:                dst = make_an(ir[0]);
        !          2888:                break;
        !          2889:         case 0x30:                             // RESET
        !          2890:                name = "reset";
        !          2891:                break;
        !          2892:         case 0x31:                             // NOP
        !          2893:                name = "nop";
        !          2894:                break;
        !          2895:         case 0x32:                             // STOP #<imm>
        !          2896:                name = "stop";
        !          2897:                src = imm16();
        !          2898:                break;
        !          2899:         case 0x33:                             // RTE
        !          2900:                name = "rte";
        !          2901:                break;
        !          2902:         case 0x34:                             // RTD #<imm>
        !          2903:                name = "rtd";
        !          2904:                src = imm16();
        !          2905:                break;
        !          2906:         case 0x35:                             // RTS
        !          2907:                name = "rts";
        !          2908:                break;
        !          2909:         case 0x36:                             // TRAPV
        !          2910:                name = "trapv";
        !          2911:                break;
        !          2912:         case 0x37:                             // RTR
        !          2913:                name = "rtr";
        !          2914:                break;
        !          2915:         case 0x3a:                             // MOVEC.L Rc,Rn
        !          2916:                fetch16();
        !          2917:                name = "movec";
        !          2918:                size = Size::L;
        !          2919:                src = make_movec();
        !          2920:                dst = make_rn(ir[1] >> 12);
        !          2921:                break;
        !          2922:         case 0x3b:                             // MOVEC.L Rn,Rc
        !          2923:                fetch16();
        !          2924:                name = "movec";
        !          2925:                size = Size::L;
        !          2926:                src = make_rn(ir[1] >> 12);
        !          2927:                dst = make_movec();
        !          2928:                break;
        !          2929:         default:
        !          2930:                OP_FUNC(illegal);
        !          2931:                break;
        !          2932:        }
        !          2933: }
        !          2934: 
        !          2935: // %0100_111010_mmmrrr JSR <ea>
        !          2936: OP_DEF(jsr)
        !          2937: {
        !          2938:        name = "jsr";
        !          2939:        src = make_ea();
        !          2940: }
        !          2941: 
        !          2942: // %0100_111011_mmmrrr JMP <ea>
        !          2943: OP_DEF(jmp)
        !          2944: {
        !          2945:        name = "jmp";
        !          2946:        src = make_ea();
        !          2947: }
        !          2948: 
        !          2949: // %0101_qqq000_mmmrrr ADDQ.B #qqq,<ea>
        !          2950: OP_DEF(addq_b)
        !          2951: {
        !          2952:        name = "addq";
        !          2953:        size = Size::B;
        !          2954:        src = make_q8();
        !          2955:        dst = make_ea();
        !          2956: }
        !          2957: 
        !          2958: // %0101_qqq001_mmmrrr ADDQ.W #qqq,<ea>
        !          2959: // %0101_qqq001_001yyy ADDQ.W #qqq,Ay (.Lと等価)
        !          2960: OP_DEF(addq_w)
        !          2961: {
        !          2962:        // ニーモニック上は ADDQ.W #q,Ay を分ける必要はない
        !          2963:        name = "addq";
        !          2964:        size = Size::W;
        !          2965:        src = make_q8();
        !          2966:        dst = make_ea();
        !          2967: }
        !          2968: 
        !          2969: // %0101_qqq010_mmmrrr ADDQ.L #qqq,<ea>
        !          2970: // %0101_qqq010_001yyy ADDQ.L #qqq,Ay
        !          2971: OP_DEF(addq_l)
        !          2972: {
        !          2973:        // ニーモニック上は ADDQ.L #q,Ay を分ける必要はない
        !          2974:        name = "addq";
        !          2975:        size = Size::L;
        !          2976:        src = make_q8();
        !          2977:        dst = make_ea();
        !          2978: }
        !          2979: 
        !          2980: // Scc/SF のメイン部分。
        !          2981: void
        !          2982: Disasm::ops_scc()
        !          2983: {
        !          2984:        uint n = ir[0] & 0x3f;
        !          2985:        uint cc = (ir[0] >> 8) & 15;
        !          2986:        switch (n) {
        !          2987:         case 0x00 ... 0x07:    // Scc.B Dn
        !          2988:         case 0x10 ... 0x39:    // Scc.B <ea>
        !          2989:                name = "s";
        !          2990:                name += conditions[cc];
        !          2991:                size = Size::B;
        !          2992:                src = make_ea();
        !          2993:                break;
        !          2994:         case 0x08 ... 0x0f:    // DBcc.W Dy,<label>
        !          2995:                if (cc == 1) {
        !          2996:                        name = "dbra";
        !          2997:                } else {
        !          2998:                        name = "db";
        !          2999:                        name += conditions[cc];
        !          3000:                }
        !          3001:                size = Size::W;
        !          3002:                src = make_dn(ir[0]);
        !          3003:                dst = addr32(pc0 + 2 + (int32)(int16)fetch16());
        !          3004:                break;
        !          3005:         case 0x3a:                             // TRAPcc.W #<imm>
        !          3006:                name = "trap";
        !          3007:                name += conditions[cc];
        !          3008:                size = Size::W;
        !          3009:                src = imm16();
        !          3010:                break;
        !          3011:         case 0x3b:                             // TRAPcc.L #<imm>
        !          3012:                name = "trap";
        !          3013:                name += conditions[cc];
        !          3014:                size = Size::L;
        !          3015:                src = imm32();
        !          3016:                break;
        !          3017:         case 0x3c:                             // TRAPcc
        !          3018:                name = "trap";
        !          3019:                name += conditions[cc];
        !          3020:                break;
        !          3021: 
        !          3022:         default:
        !          3023:                OP_FUNC(illegal);
        !          3024:                break;
        !          3025:        }
        !          3026: }
        !          3027: 
        !          3028: // %0101_000011_mmmrrr ST.B <ea>
        !          3029: // %0101_000011_001yyy DBT.W Dy,<label>
        !          3030: // %0101_000011_111010 TRAPT.W #<imm>
        !          3031: // %0101_000011_111011 TRAPT.L #<imm>
        !          3032: // %0101_000011_111100 TRAPT
        !          3033: OP_DEF(st)
        !          3034: {
        !          3035:        ops_scc();
        !          3036: }
        !          3037: 
        !          3038: // %0101_qqq100_mmmrrr SUBQ.B #qqq,<ea>
        !          3039: OP_DEF(subq_b)
        !          3040: {
        !          3041:        name = "subq";
        !          3042:        size = Size::B;
        !          3043:        src = make_q8();
        !          3044:        dst = make_ea();
        !          3045: }
        !          3046: 
        !          3047: // %0101_qqq101_mmmrrr SUBQ.W #qqq,<ea>
        !          3048: // %0101_qqq101_001yyy SUBQ.W #qqq,Ay (.Lと等価)
        !          3049: OP_DEF(subq_w)
        !          3050: {
        !          3051:        // ニーモニック上は SUBQ.W #q,Ay を分ける必要はない
        !          3052:        name = "subq";
        !          3053:        size = Size::W;
        !          3054:        src = make_q8();
        !          3055:        dst = make_ea();
        !          3056: }
        !          3057: 
        !          3058: // %0101_qqq110_mmmrrr SUBQ.L #qqq,<ea>
        !          3059: // %0101_qqq110_001yyy SUBQ.L #qqq,Ay
        !          3060: OP_DEF(subq_l)
        !          3061: {
        !          3062:        // ニーモニック上は SUBQ.L #q,Ay を分ける必要はない
        !          3063:        name = "subq";
        !          3064:        size = Size::L;
        !          3065:        src = make_q8();
        !          3066:        dst = make_ea();
        !          3067: }
        !          3068: 
        !          3069: // %0101_000111_mmmrrr SF.B <ea>
        !          3070: // %0101_000111_001yyy DBRA.W Dy,<label>
        !          3071: // %0101_000111_111010 TRAPF.W #<imm>
        !          3072: // %0101_000111_111011 TRAPF.L #<imm>
        !          3073: // %0101_000111_111100 TRAPF
        !          3074: OP_DEF(sf)
        !          3075: {
        !          3076:        ops_scc();
        !          3077: }
        !          3078: 
        !          3079: // %0101_001011_mmmrrr SHI.B <ea>
        !          3080: // %0101_001011_001yyy DBHI.W Dy,<label>
        !          3081: // %0101_001011_111010 TRAPHI.W #<imm>
        !          3082: // %0101_001011_111011 TRAPHI.L #<imm>
        !          3083: // %0101_001011_111100 TRAPHI
        !          3084: OP_DEF(shi)
        !          3085: {
        !          3086:        ops_scc();
        !          3087: }
        !          3088: 
        !          3089: // %0101_001111_mmmrrr SLS.B <ea>
        !          3090: // %0101_001111_001yyy DBLS.W Dy,<label>
        !          3091: // %0101_001111_111010 TRAPLS.W #<imm>
        !          3092: // %0101_001111_111011 TRAPLS.L #<imm>
        !          3093: // %0101_001111_111100 TRAPLS
        !          3094: OP_DEF(sls)
        !          3095: {
        !          3096:        ops_scc();
        !          3097: }
        !          3098: 
        !          3099: // %0101_010011_mmmrrr SCC.B <ea>
        !          3100: // %0101_010011_001yyy DBCC.W Dy,<label>
        !          3101: // %0101_010011_111010 TRAPCC.W #<imm>
        !          3102: // %0101_010011_111011 TRAPCC.L #<imm>
        !          3103: // %0101_010011_111100 TRAPCC
        !          3104: OP_DEF(scc)
        !          3105: {
        !          3106:        ops_scc();
        !          3107: }
        !          3108: 
        !          3109: // %0101_010111_mmmrrr SCS.B <ea>
        !          3110: // %0101_010111_001yyy DBCS.W Dy,<label>
        !          3111: // %0101_010111_111010 TRAPCS.W #<imm>
        !          3112: // %0101_010111_111011 TRAPCS.L #<imm>
        !          3113: // %0101_010111_111100 TRAPCS
        !          3114: OP_DEF(scs)
        !          3115: {
        !          3116:        ops_scc();
        !          3117: }
        !          3118: 
        !          3119: // %0101_011011_mmmrrr SNE.B <ea>
        !          3120: // %0101_011011_001yyy DBNE.W Dy,<label>
        !          3121: // %0101_011011_111010 TRAPNE.W #<imm>
        !          3122: // %0101_011011_111011 TRAPNE.L #<imm>
        !          3123: // %0101_011011_111100 TRAPNE
        !          3124: OP_DEF(sne)
        !          3125: {
        !          3126:        ops_scc();
        !          3127: }
        !          3128: 
        !          3129: // %0101_011111_mmmrrr SEQ.B <ea>
        !          3130: // %0101_011111_001yyy DBEQ.W Dy,<label>
        !          3131: // %0101_011111_111010 TRAPEQ.W #<imm>
        !          3132: // %0101_011111_111011 TRAPEQ.L #<imm>
        !          3133: // %0101_011111_111100 TRAPEQ
        !          3134: OP_DEF(seq)
        !          3135: {
        !          3136:        ops_scc();
        !          3137: }
        !          3138: 
        !          3139: // %0101_100011_mmmrrr SVC.B <ea>
        !          3140: // %0101_100011_001yyy DBVC.W Dy,<label>
        !          3141: // %0101_100011_111010 TRAPVC.W #<imm>
        !          3142: // %0101_100011_111011 TRAPVC.L #<imm>
        !          3143: // %0101_100011_111100 TRAPVC
        !          3144: OP_DEF(svc)
        !          3145: {
        !          3146:        ops_scc();
        !          3147: }
        !          3148: 
        !          3149: // %0101_100111_mmmrrr SVS.B <ea>
        !          3150: // %0101_100111_001yyy DBVS.W Dy,<label>
        !          3151: // %0101_100111_111010 TRAPVS.W #<imm>
        !          3152: // %0101_100111_111011 TRAPVS.L #<imm>
        !          3153: // %0101_100111_111100 TRAPVS
        !          3154: OP_DEF(svs)
        !          3155: {
        !          3156:        ops_scc();
        !          3157: }
        !          3158: 
        !          3159: // %0101_101011_mmmrrr SPL.B <ea>
        !          3160: // %0101_101011_001yyy DBPL.W Dy,<label>
        !          3161: // %0101_101011_111010 TRAPPL.W #<imm>
        !          3162: // %0101_101011_111011 TRAPPL.L #<imm>
        !          3163: // %0101_101011_111100 TRAPPL
        !          3164: OP_DEF(spl)
        !          3165: {
        !          3166:        ops_scc();
        !          3167: }
        !          3168: 
        !          3169: // %0101_101111_mmmrrr SMI.B <ea>
        !          3170: // %0101_101111_001yyy DBMI.W Dy,<label>
        !          3171: // %0101_101111_111010 TRAPMI.W #<imm>
        !          3172: // %0101_101111_111011 TRAPMI.L #<imm>
        !          3173: // %0101_101111_111100 TRAPMI
        !          3174: OP_DEF(smi)
        !          3175: {
        !          3176:        ops_scc();
        !          3177: }
        !          3178: 
        !          3179: // %0101_110011_mmmrrr SGE.B <ea>
        !          3180: // %0101_110011_001yyy DBGE.W Dy,<label>
        !          3181: // %0101_110011_111010 TRAPGE.W #<imm>
        !          3182: // %0101_110011_111011 TRAPGE.L #<imm>
        !          3183: // %0101_110011_111100 TRAPGE
        !          3184: OP_DEF(sge)
        !          3185: {
        !          3186:        ops_scc();
        !          3187: }
        !          3188: 
        !          3189: // %0101_110111_mmmrrr SLT.B <ea>
        !          3190: // %0101_110111_001yyy DBLT.W Dy,<label>
        !          3191: // %0101_110111_111010 TRAPLT.W #<imm>
        !          3192: // %0101_110111_111011 TRAPLT.L #<imm>
        !          3193: // %0101_110111_111100 TRAPLT
        !          3194: OP_DEF(slt)
        !          3195: {
        !          3196:        ops_scc();
        !          3197: }
        !          3198: 
        !          3199: // %0101_111011_mmmrrr SGT.B <ea>
        !          3200: // %0101_111011_001yyy DBGT.W Dy,<label>
        !          3201: // %0101_111011_111010 TRAPGT.W #<imm>
        !          3202: // %0101_111011_111011 TRAPGT.L #<imm>
        !          3203: // %0101_111011_111100 TRAPGT
        !          3204: OP_DEF(sgt)
        !          3205: {
        !          3206:        ops_scc();
        !          3207: }
        !          3208: 
        !          3209: // %0101_111111_mmmrrr SLE.B <ea>
        !          3210: // %0101_111111_001yyy DBLE.W Dy,<label>
        !          3211: // %0101_111111_111010 TRAPLE.W #<imm>
        !          3212: // %0101_111111_111011 TRAPLE.L #<imm>
        !          3213: // %0101_111111_111100 TRAPLE
        !          3214: OP_DEF(sle)
        !          3215: {
        !          3216:        ops_scc();
        !          3217: }
        !          3218: 
        !          3219: 
        !          3220: // BRA/BSR/Bcc の共通部分。
        !          3221: void
        !          3222: Disasm::ops_bcc()
        !          3223: {
        !          3224:        uint cond = (ir[0] >> 8) & 0x0f;
        !          3225:        uint32 disp = ir[0] & 0xff;
        !          3226: 
        !          3227:        switch (cond) {
        !          3228:         case 0:        name = "bra";   break;
        !          3229:         case 1:        name = "bsr";   break;
        !          3230:         default:
        !          3231:                name = "b";
        !          3232:                name += conditions[cond];
        !          3233:                break;
        !          3234:        }
        !          3235: 
        !          3236:        if (disp == 0) {
        !          3237:                // Bxx.W <label>
        !          3238:                size = Size::W;
        !          3239:                disp = (int32)(int16)fetch16();
        !          3240:        } else if (disp == 0xff) {
        !          3241:                // Bxx.L <label>
        !          3242:                size = Size::L;
        !          3243:                disp = (int32)fetch32();
        !          3244:        } else {
        !          3245:                // Bxx.B <label>
        !          3246:                size = Size::B;
        !          3247:                disp = (int32)(int8)disp;
        !          3248:        }
        !          3249:        src = addr32(pc0 + 2 + disp);
        !          3250: }
        !          3251: 
        !          3252: // %0110_000000_000000 BRA.W <label>
        !          3253: // %0110_0000nn_nnnnnn BRA.B <label>
        !          3254: // %0110_000011_111111 BRA.L <label>
        !          3255: OP_DEF(bra)
        !          3256: {
        !          3257:        ops_bcc();
        !          3258: }
        !          3259: 
        !          3260: // %0110_000100_000000 BSR.W <label>
        !          3261: // %0110_0001nn_nnnnnn BSR.B <label>
        !          3262: // %0110_000111_111111 BSR.L <label>
        !          3263: OP_DEF(bsr)
        !          3264: {
        !          3265:        ops_bcc();
        !          3266: }
        !          3267: 
        !          3268: // %0110_001000_000000 BHI.W <label>
        !          3269: // %0110_0010nn_nnnnnn BHI.B <label>
        !          3270: // %0110_001011_111111 BHI.L <label>
        !          3271: OP_DEF(bhi)
        !          3272: {
        !          3273:        ops_bcc();
        !          3274: }
        !          3275: 
        !          3276: // %0110_001100_000000 BLS.W <label>
        !          3277: // %0110_0011nn_nnnnnn BLS.B <label>
        !          3278: // %0110_001111_111111 BLS.L <label>
        !          3279: OP_DEF(bls)
        !          3280: {
        !          3281:        ops_bcc();
        !          3282: }
        !          3283: 
        !          3284: // %0110_010000_000000 BCC.W <label>
        !          3285: // %0110_0100nn_nnnnnn BCC.B <label>
        !          3286: // %0110_010011_111111 BCC.L <label>
        !          3287: OP_DEF(bcc)
        !          3288: {
        !          3289:        ops_bcc();
        !          3290: }
        !          3291: 
        !          3292: // %0110_010100_000000 BCS.W <label>
        !          3293: // %0110_0101nn_nnnnnn BCS.B <label>
        !          3294: // %0110_010111_111111 BCS.L <label>
        !          3295: OP_DEF(bcs)
        !          3296: {
        !          3297:        ops_bcc();
        !          3298: }
        !          3299: 
        !          3300: // %0110_011000_000000 BNE.W <label>
        !          3301: // %0110_0110nn_nnnnnn BNE.B <label>
        !          3302: // %0110_011011_111111 BNE.L <label>
        !          3303: OP_DEF(bne)
        !          3304: {
        !          3305:        ops_bcc();
        !          3306: }
        !          3307: 
        !          3308: // %0110_011100_000000 BEQ.W <label>
        !          3309: // %0110_0111nn_nnnnnn BEQ.B <label>
        !          3310: // %0110_011111_111111 BEQ.L <label>
        !          3311: OP_DEF(beq)
        !          3312: {
        !          3313:        ops_bcc();
        !          3314: }
        !          3315: 
        !          3316: // %0110_100000_000000 BVC.W <label>
        !          3317: // %0110_1000nn_nnnnnn BVC.B <label>
        !          3318: // %0110_100011_111111 BVC.L <label>
        !          3319: OP_DEF(bvc)
        !          3320: {
        !          3321:        ops_bcc();
        !          3322: }
        !          3323: 
        !          3324: // %0110_100100_000000 BVS.W <label>
        !          3325: // %0110_1001nn_nnnnnn BVS.B <label>
        !          3326: // %0110_100111_111111 BVS.L <label>
        !          3327: OP_DEF(bvs)
        !          3328: {
        !          3329:        ops_bcc();
        !          3330: }
        !          3331: 
        !          3332: // %0110_101000_000000 BPL.W <label>
        !          3333: // %0110_1010nn_nnnnnn BPL.B <label>
        !          3334: // %0110_101011_111111 BPL.L <label>
        !          3335: OP_DEF(bpl)
        !          3336: {
        !          3337:        ops_bcc();
        !          3338: }
        !          3339: 
        !          3340: // %0110_101100_000000 BMI.W <label>
        !          3341: // %0110_1011nn_nnnnnn BMI.B <label>
        !          3342: // %0110_101111_111111 BMI.L <label>
        !          3343: OP_DEF(bmi)
        !          3344: {
        !          3345:        ops_bcc();
        !          3346: }
        !          3347: 
        !          3348: // %0110_110000_000000 BGE.W <label>
        !          3349: // %0110_1100nn_nnnnnn BGE.B <label>
        !          3350: // %0110_110011_111111 BGE.L <label>
        !          3351: OP_DEF(bge)
        !          3352: {
        !          3353:        ops_bcc();
        !          3354: }
        !          3355: 
        !          3356: // %0110_110100_000000 BLT.W <label>
        !          3357: // %0110_1101nn_nnnnnn BLT.B <label>
        !          3358: // %0110_110111_111111 BLT.L <label>
        !          3359: OP_DEF(blt)
        !          3360: {
        !          3361:        ops_bcc();
        !          3362: }
        !          3363: 
        !          3364: // %0110_111000_000000 BGT.W <label>
        !          3365: // %0110_1110nn_nnnnnn BGT.B <label>
        !          3366: // %0110_111011_111111 BGT.L <label>
        !          3367: OP_DEF(bgt)
        !          3368: {
        !          3369:        ops_bcc();
        !          3370: }
        !          3371: 
        !          3372: // %0110_111100_000000 BLE.W <label>
        !          3373: // %0110_1111nn_nnnnnn BLE.B <label>
        !          3374: // %0110_111111_111111 BLE.L <label>
        !          3375: OP_DEF(ble)
        !          3376: {
        !          3377:        ops_bcc();
        !          3378: }
        !          3379: 
        !          3380: // %0111_xxx0nn_nnnnnn MOVEQ.L #<imm>,Dx
        !          3381: OP_DEF(moveq)
        !          3382: {
        !          3383:        uint8 val = ir[0] & 0xff;
        !          3384: 
        !          3385:        // IOCS コールを表示する。XXX 機種判定はまだしてない
        !          3386:        // IOCS コールは大抵
        !          3387:        //  70NN moveq.l #nn,d0
        !          3388:        //  4e4f trap #15
        !          3389:        // という命令列になっているので、これを検出する。
        !          3390:        uint16 next = peek16();
        !          3391:        if (next == 0x4e4f) {
        !          3392:                // IOCS コールと確定したら TRAP のワードも取り出しておく
        !          3393:                fetch16();
        !          3394:                name = "IOCS";
        !          3395:                src = x68k_iocscall[(uint)val] ?: "<undefined>";
        !          3396:                return;
        !          3397:        }
        !          3398: 
        !          3399:        name = "moveq";
        !          3400:        size = Size::L;
        !          3401:        // 負数なら 32bit で書いてみるか
        !          3402:        if ((val & 0x80)) {
        !          3403:                src = "#" + hex32((int32)(int8)val);
        !          3404:        } else {
        !          3405:                src = "#" + hex8(val);
        !          3406:        }
        !          3407:        dst = make_dn(ir[0] >> 9);
        !          3408: }
        !          3409: 
        !          3410: // %1000_xxx000_mmmrrr OR.B <ea>,Dx
        !          3411: OP_DEF(or_b_ea_dn)
        !          3412: {
        !          3413:        name = "or";
        !          3414:        size = Size::B;
        !          3415:        src = make_ea();
        !          3416:        dst = make_dn(ir[0] >> 9);
        !          3417: }
        !          3418: 
        !          3419: // %1000_xxx001_mmmrrr OR.W <ea>,Dx
        !          3420: OP_DEF(or_w_ea_dn)
        !          3421: {
        !          3422:        name = "or";
        !          3423:        size = Size::W;
        !          3424:        src = make_ea();
        !          3425:        dst = make_dn(ir[0] >> 9);
        !          3426: }
        !          3427: 
        !          3428: // %1000_xxx010_mmmrrr OR.L <ea>,Dx
        !          3429: OP_DEF(or_l_ea_dn)
        !          3430: {
        !          3431:        name = "or";
        !          3432:        size = Size::L;
        !          3433:        src = make_ea();
        !          3434:        dst = make_dn(ir[0] >> 9);
        !          3435: }
        !          3436: 
        !          3437: // %1000_xxx011_mmmrrr DIVU.W <ea>,Dx
        !          3438: OP_DEF(divu_w)
        !          3439: {
        !          3440:        name = "divu";
        !          3441:        size = Size::W;
        !          3442:        src = make_ea();
        !          3443:        dst = make_dn(ir[0] >> 9);
        !          3444: }
        !          3445: 
        !          3446: // %1000_xxx100_000yyy SBCD.B Dy,Dx
        !          3447: // %1000_xxx100_001yyy SBCD.B -(Ay),-(Ax)
        !          3448: // %1000_xxx100_mmmrrr OR.B Dx,<ea>
        !          3449: OP_DEF(or_b_dn_ea)
        !          3450: {
        !          3451:        uint n = ir[0] & 0x3f;
        !          3452:        uint x = ir[0] >> 9;
        !          3453: 
        !          3454:        if (n < 8) {
        !          3455:                // SBCD.B Dy,Dx
        !          3456:                name = "sbcd";
        !          3457:                size = Size::B;
        !          3458:                src = make_dn(n);
        !          3459:                dst = make_dn(x);
        !          3460:        } else if (n < 16) {
        !          3461:                // SBCD.B -(Ay),-(An)
        !          3462:                name = "sbcd";
        !          3463:                size = Size::B;
        !          3464:                src = make_anpd(n);
        !          3465:                dst = make_anpd(x);
        !          3466:        } else {
        !          3467:                // OR.B Dx,<ea>
        !          3468:                name = "or";
        !          3469:                size = Size::B;
        !          3470:                src = make_dn(x);
        !          3471:                dst = make_ea();
        !          3472:        }
        !          3473: }
        !          3474: 
        !          3475: // %1000_xxx101_000yyy PACK Dy,Dx,#<imm>
        !          3476: // %1000_xxx101_001yyy PACK -(Ay),-(Ax),#<imm>
        !          3477: // %1000_xxx101_mmmrrr OR.W Dx,<ea>
        !          3478: OP_DEF(or_w_dn_ea)
        !          3479: {
        !          3480:        uint n = ir[0] & 0x3f;
        !          3481:        uint x = ir[0] >> 9;
        !          3482: 
        !          3483:        if (n < 8) {
        !          3484:                name = "pack";
        !          3485:                src = make_dn(n) + "," + make_dn(x);
        !          3486:                dst = imm16();
        !          3487:        } else if (n < 16) {
        !          3488:                name = "pack";
        !          3489:                src = make_anpd(n) + "," + make_anpd(x);
        !          3490:                dst = imm16();
        !          3491:        } else {
        !          3492:                // OR.W Dx,<ea>
        !          3493:                name = "or";
        !          3494:                size = Size::W;
        !          3495:                src = make_dn(x);
        !          3496:                dst = make_ea();
        !          3497:        }
        !          3498: }
        !          3499: 
        !          3500: // %1000_xxx110_000yyy UNPK Dy,Dx,#<imm>
        !          3501: // %1000_xxx110_001yyy UNPK -(Ay),-(Ax),#<imm>
        !          3502: // %1000_xxx110_mmmrrr OR.L Dx,<ea>
        !          3503: OP_DEF(or_l_dn_ea)
        !          3504: {
        !          3505:        uint n = ir[0] & 0x3f;
        !          3506:        uint x = ir[0] >> 9;
        !          3507: 
        !          3508:        if (n < 8) {
        !          3509:                name = "unpk";
        !          3510:                src = make_dn(n) + "," + make_dn(x);
        !          3511:                dst = imm16();
        !          3512:        } else if (n < 16) {
        !          3513:                name = "unpk";
        !          3514:                src = make_anpd(n) + "," + make_anpd(x);
        !          3515:                dst = imm16();
        !          3516:        } else {
        !          3517:                // OR.L Dx,<ea>
        !          3518:                name = "or";
        !          3519:                size = Size::L;
        !          3520:                src = make_dn(x);
        !          3521:                dst = make_ea();
        !          3522:        }
        !          3523: }
        !          3524: 
        !          3525: // %1000_xxx111_mmmrrr DIVS.W <ea>,Dx
        !          3526: OP_DEF(divs_w)
        !          3527: {
        !          3528:        name = "divs";
        !          3529:        size = Size::W;
        !          3530:        src = make_ea();
        !          3531:        dst = make_dn(ir[0] >> 9);
        !          3532: }
        !          3533: 
        !          3534: // %1001_xxx000_mmmrrr SUB.B <ea>,Dx
        !          3535: OP_DEF(sub_b_ea_dn)
        !          3536: {
        !          3537:        name = "sub";
        !          3538:        size = Size::B;
        !          3539:        src = make_ea();
        !          3540:        dst = make_dn(ir[0] >> 9);
        !          3541: }
        !          3542: 
        !          3543: // %1001_xxx001_mmmrrr SUB.W <ea>,Dx
        !          3544: OP_DEF(sub_w_ea_dn)
        !          3545: {
        !          3546:        name = "sub";
        !          3547:        size = Size::W;
        !          3548:        src = make_ea();
        !          3549:        dst = make_dn(ir[0] >> 9);
        !          3550: }
        !          3551: 
        !          3552: // %1001_xxx010_mmmrrr SUB.L <ea>,Dx
        !          3553: OP_DEF(sub_l_ea_dn)
        !          3554: {
        !          3555:        name = "sub";
        !          3556:        size = Size::L;
        !          3557:        src = make_ea();
        !          3558:        dst = make_dn(ir[0] >> 9);
        !          3559: }
        !          3560: 
        !          3561: // %1001_xxx011_mmmrrr SUBA.W <ea>,Ax
        !          3562: OP_DEF(suba_w)
        !          3563: {
        !          3564:        name = "suba";
        !          3565:        size = Size::W;
        !          3566:        src = make_ea();
        !          3567:        dst = make_an(ir[0] >> 9);
        !          3568: }
        !          3569: 
        !          3570: // SUB の共通部分
        !          3571: void
        !          3572: Disasm::ops_sub(Disasm::Size sz)
        !          3573: {
        !          3574:        uint n = ir[0] & 0x3f;
        !          3575:        uint x = ir[0] >> 9;
        !          3576: 
        !          3577:        size = sz;
        !          3578:        if (n < 8) {
        !          3579:                // SUBX.B Dy,Dx
        !          3580:                name = "subx";
        !          3581:                src = make_dn(n);
        !          3582:                dst = make_dn(x);
        !          3583:        } else if (n < 16) {
        !          3584:                // SUBX.B -(Ay),-(Ax)
        !          3585:                name = "subx";
        !          3586:                src = make_anpd(n);
        !          3587:                dst = make_anpd(x);
        !          3588:        } else {
        !          3589:                // SUB.B Dx,<ea>
        !          3590:                name = "sub";
        !          3591:                src = make_dn(x);
        !          3592:                dst = make_ea();
        !          3593:        }
        !          3594: }
        !          3595: 
        !          3596: // %1001_xxx100_000yyy SUBX.B Dy,Dx
        !          3597: // %1001_xxx100_001yyy SUBX.B -(Ay),-(Ax)
        !          3598: // %1001_xxx100_mmmrrr SUB.B Dx,<ea>
        !          3599: OP_DEF(sub_b_dn_ea)
        !          3600: {
        !          3601:        ops_sub(Size::B);
        !          3602: }
        !          3603: 
        !          3604: // %1001_xxx101_000yyy SUBX.W Dy,Dx
        !          3605: // %1001_xxx101_001yyy SUBX.W -(Ay),-(Ax)
        !          3606: // %1001_xxx101_mmmrrr SUB.W Dx,<ea>
        !          3607: OP_DEF(sub_w_dn_ea)
        !          3608: {
        !          3609:        ops_sub(Size::W);
        !          3610: }
        !          3611: 
        !          3612: // %1001_xxx110_000yyy SUBX.L Dy,Dx
        !          3613: // %1001_xxx110_001yyy SUBX.L -(Ay),-(Ax)
        !          3614: // %1001_xxx110_mmmrrr SUB.L Dx,<ea>
        !          3615: OP_DEF(sub_l_dn_ea)
        !          3616: {
        !          3617:        ops_sub(Size::L);
        !          3618: }
        !          3619: 
        !          3620: // %1001_xxx111_mmmrrr SUBA.L <ea>,Ax
        !          3621: OP_DEF(suba_l)
        !          3622: {
        !          3623:        name = "suba";
        !          3624:        size = Size::L;
        !          3625:        src = make_ea();
        !          3626:        dst = make_an(ir[0] >> 9);
        !          3627: }
        !          3628: 
        !          3629: // %1010_nnnnnn_nnnnnn A-Line
        !          3630: OP_DEF(aline)
        !          3631: {
        !          3632:        name = "<unknown A-Line trap>";
        !          3633: }
        !          3634: 
        !          3635: // %1011_xxx000_mmmrrr CMP.B <ea>,Dx
        !          3636: OP_DEF(cmp_b)
        !          3637: {
        !          3638:        name = "cmp";
        !          3639:        size = Size::B;
        !          3640:        src = make_ea();
        !          3641:        dst = make_dn(ir[0] >> 9);
        !          3642: }
        !          3643: 
        !          3644: // %1011_xxx001_mmmrrr CMP.W <ea>,Dx
        !          3645: OP_DEF(cmp_w)
        !          3646: {
        !          3647:        name = "cmp";
        !          3648:        size = Size::W;
        !          3649:        src = make_ea();
        !          3650:        dst = make_dn(ir[0] >> 9);
        !          3651: }
        !          3652: 
        !          3653: // %1011_xxx010_mmmrrr CMP.L <ea>,Dx
        !          3654: OP_DEF(cmp_l)
        !          3655: {
        !          3656:        name = "cmp";
        !          3657:        size = Size::L;
        !          3658:        src = make_ea();
        !          3659:        dst = make_dn(ir[0] >> 9);
        !          3660: }
        !          3661: 
        !          3662: // %1011_xxx011_mmmrrr CMPA.W <ea>,Ax
        !          3663: OP_DEF(cmpa_w)
        !          3664: {
        !          3665:        name = "cmpa";
        !          3666:        size = Size::W;
        !          3667:        src = make_ea();
        !          3668:        dst = make_an(ir[0] >> 9);
        !          3669: }
        !          3670: 
        !          3671: void
        !          3672: Disasm::ops_eor_cmpm(Disasm::Size sz)
        !          3673: {
        !          3674:        size = sz;
        !          3675: 
        !          3676:        uint mm = (ir[0] >> 3) & 7;
        !          3677:        if (mm == 1) {
        !          3678:                // CMPM.x (Ay)+,(Ax)+
        !          3679:                name = "cmpm";
        !          3680:                src = make_anpi(ir[0]);
        !          3681:                dst = make_anpi(ir[0] >> 9);
        !          3682:        } else {
        !          3683:                // EOR.x Dx,<ea>
        !          3684:                name = "eor";
        !          3685:                src = make_dn(ir[0] >> 9);
        !          3686:                dst = make_ea();
        !          3687:        }
        !          3688: }
        !          3689: 
        !          3690: // %1011_xxx100_mmmrrr EOR.B Dx,<ea>
        !          3691: // %1011_xxx100_001yyy CMPM.B (Ay)+,(Ax)+
        !          3692: OP_DEF(eor_b)
        !          3693: {
        !          3694:        ops_eor_cmpm(Size::B);
        !          3695: }
        !          3696: 
        !          3697: // %1011_xxx101_mmmrrr EOR.W Dx,<ea>
        !          3698: // %1011_xxx101_001yyy CMPM.W (Ay)+,(Ax)+
        !          3699: OP_DEF(eor_w)
        !          3700: {
        !          3701:        ops_eor_cmpm(Size::W);
        !          3702: }
        !          3703: 
        !          3704: // %1011_xxx110_mmmrrr EOR.L Dx,<ea>
        !          3705: // %1011_xxx110_001yyy CMPM.L (Ay)+,(Ax)+
        !          3706: OP_DEF(eor_l)
        !          3707: {
        !          3708:        ops_eor_cmpm(Size::L);
        !          3709: }
        !          3710: 
        !          3711: // %1011_xxx111_mmmrrr CMPA.L <ea>,Ax
        !          3712: OP_DEF(cmpa_l)
        !          3713: {
        !          3714:        name = "cmpa";
        !          3715:        size = Size::L;
        !          3716:        src = make_ea();
        !          3717:        dst = make_an(ir[0] >> 9);
        !          3718: }
        !          3719: 
        !          3720: // %1100_xxx000_mmmrrr AND.B <ea>,Dx
        !          3721: OP_DEF(and_b_ea_dn)
        !          3722: {
        !          3723:        name = "and";
        !          3724:        size = Size::B;
        !          3725:        src = make_ea();
        !          3726:        dst = make_dn(ir[0] >> 9);
        !          3727: }
        !          3728: 
        !          3729: // %1100_xxx001_mmmrrr AND.W <ea>,Dx
        !          3730: OP_DEF(and_w_ea_dn)
        !          3731: {
        !          3732:        name = "and";
        !          3733:        size = Size::W;
        !          3734:        src = make_ea();
        !          3735:        dst = make_dn(ir[0] >> 9);
        !          3736: }
        !          3737: 
        !          3738: // %1100_xxx010_mmmrrr AND.L <ea>,Dx
        !          3739: OP_DEF(and_l_ea_dn)
        !          3740: {
        !          3741:        name = "and";
        !          3742:        size = Size::L;
        !          3743:        src = make_ea();
        !          3744:        dst = make_dn(ir[0] >> 9);
        !          3745: }
        !          3746: 
        !          3747: // %1100_xxx011_mmmrrr MULU.W <ea>,Dx
        !          3748: OP_DEF(mulu_w)
        !          3749: {
        !          3750:        name = "mulu";
        !          3751:        size = Size::W;
        !          3752:        src = make_ea();
        !          3753:        dst = make_dn(ir[0] >> 9);
        !          3754: }
        !          3755: 
        !          3756: // %1100_xxx100_000yyy ABCD.B Dy,Dx
        !          3757: // %1100_xxx100_001yyy ABCD.B -(Ay),-(Ax)
        !          3758: // %1100_xxx100_mmmrrr AND.B Dx,<ea>
        !          3759: OP_DEF(and_b_dn_ea)
        !          3760: {
        !          3761:        uint n = ir[0] & 0x3f;
        !          3762:        uint x = ir[0] >> 9;
        !          3763: 
        !          3764:        if (n < 8) {
        !          3765:                // ABCD.B Dy,Dx
        !          3766:                name = "abcd";
        !          3767:                size = Size::B;
        !          3768:                src = make_dn(n);
        !          3769:                dst = make_dn(x);
        !          3770:        } else if (n < 16) {
        !          3771:                // ABCD.B -(Ay),-(Ax)
        !          3772:                name = "abcd";
        !          3773:                size = Size::B;
        !          3774:                src = make_anpd(n);
        !          3775:                dst = make_anpd(x);
        !          3776:        } else {
        !          3777:                // AND.B Dx,<ea>
        !          3778:                name = "and";
        !          3779:                size = Size::B;
        !          3780:                src = make_dn(x);
        !          3781:                dst = make_ea();
        !          3782:        }
        !          3783: }
        !          3784: 
        !          3785: // %1100_xxx101_000yyy EXG.L Dx,Dy
        !          3786: // %1100_xxx101_001yyy EXG.L Ax,Ay
        !          3787: // %1100_xxx101_mmmrrr AND.W Dx,<ea>
        !          3788: OP_DEF(and_w_dn_ea)
        !          3789: {
        !          3790:        uint n = ir[0] & 0x3f;
        !          3791:        uint x = ir[0] >> 9;
        !          3792: 
        !          3793:        if (n < 8) {
        !          3794:                // EXG.L Dx,Dy
        !          3795:                name = "exg";
        !          3796:                size = Size::L;
        !          3797:                src = make_dn(x);
        !          3798:                dst = make_dn(n);
        !          3799:        } else if (n < 16) {
        !          3800:                // EXG.L Ax,Ay
        !          3801:                name = "exg";
        !          3802:                size = Size::L;
        !          3803:                src = make_an(x);
        !          3804:                dst = make_an(n);
        !          3805:        } else {
        !          3806:                // AND.W Dx,<ea>
        !          3807:                name = "and";
        !          3808:                size = Size::W;
        !          3809:                src = make_dn(x);
        !          3810:                dst = make_ea();
        !          3811:        }
        !          3812: }
        !          3813: 
        !          3814: // %1100_xxx110_001yyy EXG.L Dx,Ay
        !          3815: // %1100_xxx110_mmmrrr AND.L Dx,<ea>
        !          3816: OP_DEF(and_l_dn_ea)
        !          3817: {
        !          3818:        uint mm = (ir[0] >> 3) & 7;
        !          3819: 
        !          3820:        if (mm == 1) {
        !          3821:                // EXG.L Dx,Ay
        !          3822:                name = "exg";
        !          3823:                size = Size::L;
        !          3824:                src = make_dn(ir[0] >> 9);
        !          3825:                dst = make_an(ir[0]);
        !          3826:        } else {
        !          3827:                // AND.L Dx,<ea>
        !          3828:                name = "and";
        !          3829:                size = Size::L;
        !          3830:                src = make_dn(ir[0] >> 9);
        !          3831:                dst = make_ea();
        !          3832:        }
        !          3833: }
        !          3834: 
        !          3835: // %1100_xxx111_mmmrrr MULS.W <ea>,Dx
        !          3836: OP_DEF(muls_w)
        !          3837: {
        !          3838:        name = "muls";
        !          3839:        size = Size::W;
        !          3840:        src = make_ea();
        !          3841:        dst = make_dn(ir[0] >> 9);
        !          3842: }
        !          3843: 
        !          3844: // %1101_xxx000_mmmrrr ADD.B <ea>,Dx
        !          3845: OP_DEF(add_b_ea_dn)
        !          3846: {
        !          3847:        name = "add";
        !          3848:        size = Size::B;
        !          3849:        src = make_ea();
        !          3850:        dst = make_dn(ir[0] >> 9);
        !          3851: }
        !          3852: 
        !          3853: // %1101_xxx001_mmmrrr ADD.W <ea>,Dx
        !          3854: OP_DEF(add_w_ea_dn)
        !          3855: {
        !          3856:        name = "add";
        !          3857:        size = Size::W;
        !          3858:        src = make_ea();
        !          3859:        dst = make_dn(ir[0] >> 9);
        !          3860: }
        !          3861: 
        !          3862: // %1101_xxx010_mmmrrr ADD.L <ea>,Dx
        !          3863: OP_DEF(add_l_ea_dn)
        !          3864: {
        !          3865:        name = "add";
        !          3866:        size = Size::L;
        !          3867:        src = make_ea();
        !          3868:        dst = make_dn(ir[0] >> 9);
        !          3869: }
        !          3870: 
        !          3871: // %1101_xxx011_mmmrrr ADDA.W <ea>,Ax
        !          3872: OP_DEF(adda_w)
        !          3873: {
        !          3874:        name = "adda";
        !          3875:        size = Size::W;
        !          3876:        src = make_ea();
        !          3877:        dst = make_an(ir[0] >> 9);
        !          3878: }
        !          3879: 
        !          3880: // ADD の共通部分
        !          3881: void
        !          3882: Disasm::ops_add(Disasm::Size sz)
        !          3883: {
        !          3884:        uint n = ir[0] & 0x3f;
        !          3885:        uint x = ir[0] >> 9;
        !          3886: 
        !          3887:        size = sz;
        !          3888:        if (n < 8) {
        !          3889:                // ADDX.B Dy,Dx
        !          3890:                name = "addx";
        !          3891:                src = make_dn(n);
        !          3892:                dst = make_dn(x);
        !          3893:        } else if (n < 16) {
        !          3894:                // ADDX.B -(Ay),-(Ax)
        !          3895:                name = "addx";
        !          3896:                src = make_anpd(n);
        !          3897:                dst = make_anpd(x);
        !          3898:        } else {
        !          3899:                // ADD.B Dx,<ea>
        !          3900:                name = "add";
        !          3901:                src = make_dn(x);
        !          3902:                dst = make_ea();
        !          3903:        }
        !          3904: }
        !          3905: 
        !          3906: // %1101_xxx100_000yyy ADDX.B Dy,Dx
        !          3907: // %1101_xxx100_001yyy ADDX.B -(Ay),-(Ax)
        !          3908: // %1101_xxx100_mmmrrr ADD.B Dx,<ea>
        !          3909: OP_DEF(add_b_dn_ea)
        !          3910: {
        !          3911:        ops_add(Size::B);
        !          3912: }
        !          3913: 
        !          3914: // %1101_xxx101_000yyy ADDX.W Dy,Dx
        !          3915: // %1101_xxx101_001yyy ADDX.W -(Ay),-(Ax)
        !          3916: // %1101_xxx101_mmmrrr ADD.W Dx,<ea>
        !          3917: OP_DEF(add_w_dn_ea)
        !          3918: {
        !          3919:        ops_add(Size::W);
        !          3920: }
        !          3921: 
        !          3922: // %1101_xxx110_000yyy ADDX.L Dy,Dx
        !          3923: // %1101_xxx110_001yyy ADDX.L -(Ay),-(Ax)
        !          3924: // %1101_xxx110_mmmrrr ADD.L Dx,<ea>
        !          3925: OP_DEF(add_l_dn_ea)
        !          3926: {
        !          3927:        ops_add(Size::L);
        !          3928: }
        !          3929: 
        !          3930: // %1101_xxx111_mmmrrr ADDA.L <ea>,Ax
        !          3931: OP_DEF(adda_l)
        !          3932: {
        !          3933:        name = "adda";
        !          3934:        size = Size::L;
        !          3935:        src = make_ea();
        !          3936:        dst = make_an(ir[0] >> 9);
        !          3937: }
        !          3938: 
        !          3939: // シフト・ローテート系の共通部分
        !          3940: void
        !          3941: Disasm::ops_rotate(std::string dir, Disasm::Size sz)
        !          3942: {
        !          3943:        uint xx = ir[0] >> 9;
        !          3944:        uint mm = (ir[0] >> 3) & 7;
        !          3945: 
        !          3946:        size = sz;
        !          3947:        dst = make_dn(ir[0]);
        !          3948:        switch (mm) {
        !          3949:         case 0:                // AS* #qqq,Dy
        !          3950:                name = "as" + dir;
        !          3951:                src = make_q8();
        !          3952:                break;
        !          3953:         case 1:                // LS* #qqq,Dy
        !          3954:                name = "ls" + dir;
        !          3955:                src = make_q8();
        !          3956:                break;
        !          3957:         case 2:                // ROX* #qqq,Dy
        !          3958:                name = "rox" + dir;
        !          3959:                src = make_q8();
        !          3960:                break;
        !          3961:         case 3:                // RO* #qqq,Dy
        !          3962:                name = "ro" + dir;
        !          3963:                src = make_q8();
        !          3964:                break;
        !          3965:         case 4:                // AS* Dx,Dy
        !          3966:                name = "as" + dir;
        !          3967:                src = make_dn(xx);
        !          3968:                break;
        !          3969:         case 5:                // LS* Dx,Dy
        !          3970:                name = "ls" + dir;
        !          3971:                src = make_dn(xx);
        !          3972:                break;
        !          3973:         case 6:                // ROX* Dx,Dy
        !          3974:                name = "rox" + dir;
        !          3975:                src = make_dn(xx);
        !          3976:                break;
        !          3977:         case 7:                // RO* Dx,Dy
        !          3978:                name = "ro" + dir;
        !          3979:                src = make_dn(xx);
        !          3980:                break;
        !          3981:         default:
        !          3982:                __unreachable();
        !          3983:        }
        !          3984: }
        !          3985: 
        !          3986: // %1110_qqq000_000yyy ASR.B #qqq,Dy
        !          3987: // %1110_qqq000_001yyy LSR.B #qqq,Dy
        !          3988: // %1110_qqq000_010yyy ROXR.B #qqq,Dy
        !          3989: // %1110_qqq000_011yyy ROR.B #qqq,Dy
        !          3990: // %1110_xxx000_100yyy ASR.B Dx,Dy
        !          3991: // %1110_xxx000_101yyy LSR.B Dx,Dy
        !          3992: // %1110_xxx000_110yyy ROXR.B Dx,Dy
        !          3993: // %1110_xxx000_111yyy ROR.B Dx,Dy
        !          3994: OP_DEF(asr_b_imm)
        !          3995: {
        !          3996:        ops_rotate("r", Size::B);
        !          3997: }
        !          3998: 
        !          3999: // %1110_qqq001_000yyy ASR.W #qqq,Dy
        !          4000: // %1110_qqq001_001yyy LSR.W #qqq,Dy
        !          4001: // %1110_qqq001_010yyy ROXR.W #qqq,Dy
        !          4002: // %1110_qqq001_011yyy ROR.W #qqq,Dy
        !          4003: // %1110_xxx001_100yyy ASR.W Dx,Dy
        !          4004: // %1110_xxx001_101yyy LSR.W Dx,Dy
        !          4005: // %1110_xxx001_110yyy ROXR.W Dx,Dy
        !          4006: // %1110_xxx001_111yyy ROR.W Dx,Dy
        !          4007: OP_DEF(asr_w_imm)
        !          4008: {
        !          4009:        ops_rotate("r", Size::W);
        !          4010: }
        !          4011: 
        !          4012: // %1110_qqq010_000yyy ASR.L #qqq,Dy
        !          4013: // %1110_qqq010_001yyy LSR.L #qqq,Dy
        !          4014: // %1110_qqq010_010yyy ROXR.L #qqq,Dy
        !          4015: // %1110_qqq010_011yyy ROR.L #qqq,Dy
        !          4016: // %1110_xxx010_100yyy ASR.L Dx,Dy
        !          4017: // %1110_xxx010_101yyy LSR.L Dx,Dy
        !          4018: // %1110_xxx010_110yyy ROXR.L Dx,Dy
        !          4019: // %1110_xxx010_111yyy ROR.L Dx,Dy
        !          4020: OP_DEF(asr_l_imm)
        !          4021: {
        !          4022:        ops_rotate("r", Size::L);
        !          4023: }
        !          4024: 
        !          4025: // %1110_000011_mmmrrr ASR.W <ea>
        !          4026: OP_DEF(asr_w)
        !          4027: {
        !          4028:        name = "asr";
        !          4029:        size = Size::W;
        !          4030:        src = make_ea();
        !          4031: }
        !          4032: 
        !          4033: // %1110_qqq100_000yyy ASL.B #qqq,Dy
        !          4034: // %1110_qqq100_001yyy LSL.B #qqq,Dy
        !          4035: // %1110_qqq100_010yyy ROXL.B #qqq,Dy
        !          4036: // %1110_qqq100_011yyy ROL.B #qqq,Dy
        !          4037: // %1110_xxx100_100yyy ASL.B Dx,Dy
        !          4038: // %1110_xxx100_101yyy LSL.B Dx,Dy
        !          4039: // %1110_xxx100_110yyy ROXL.B Dx,Dy
        !          4040: // %1110_xxx100_111yyy ROL.B Dx,Dy
        !          4041: OP_DEF(asl_b_imm)
        !          4042: {
        !          4043:        ops_rotate("l", Size::B);
        !          4044: }
        !          4045: 
        !          4046: // %1110_qqq101_000yyy ASL.W #qqq,Dy
        !          4047: // %1110_qqq101_001yyy LSL.W #qqq,Dy
        !          4048: // %1110_qqq101_010yyy ROXL.W #qqq,Dy
        !          4049: // %1110_qqq101_011yyy ROL.W #qqq,Dy
        !          4050: // %1110_xxx101_100yyy ASL.W Dx,Dy
        !          4051: // %1110_xxx101_101yyy LSL.W Dx,Dy
        !          4052: // %1110_xxx101_110yyy ROXL.W Dx,Dy
        !          4053: // %1110_xxx101_111yyy ROL.W Dx,Dy
        !          4054: OP_DEF(asl_w_imm)
        !          4055: {
        !          4056:        ops_rotate("l", Size::W);
        !          4057: }
        !          4058: 
        !          4059: // %1110_qqq110_000yyy ASL.L #qqq,Dy
        !          4060: // %1110_qqq110_001yyy LSL.L #qqq,Dy
        !          4061: // %1110_qqq110_010yyy ROXL.L #qqq,Dy
        !          4062: // %1110_qqq110_011yyy ROL.L #qqq,Dy
        !          4063: // %1110_xxx110_100yyy ASL.L Dx,Dy
        !          4064: // %1110_xxx110_101yyy LSL.L Dx,Dy
        !          4065: // %1110_xxx110_110yyy ROXL.L Dx,Dy
        !          4066: // %1110_xxx110_111yyy ROL.L Dx,Dy
        !          4067: OP_DEF(asl_l_imm)
        !          4068: {
        !          4069:        ops_rotate("l", Size::L);
        !          4070: }
        !          4071: 
        !          4072: // %1110_000111_mmmrrr ASL.W <ea>
        !          4073: OP_DEF(asl_w)
        !          4074: {
        !          4075:        name = "asl";
        !          4076:        size = Size::W;
        !          4077:        src = make_ea();
        !          4078: }
        !          4079: 
        !          4080: // %1110_001011_mmmrrr LSR.W <ea>
        !          4081: OP_DEF(lsr_w)
        !          4082: {
        !          4083:        name = "lsr";
        !          4084:        size = Size::W;
        !          4085:        src = make_ea();
        !          4086: }
        !          4087: 
        !          4088: // %1110_001111_mmmrrr LSL.W <ea>
        !          4089: OP_DEF(lsl_w)
        !          4090: {
        !          4091:        name = "lsl";
        !          4092:        size = Size::W;
        !          4093:        src = make_ea();
        !          4094: }
        !          4095: 
        !          4096: // %1110_010011_mmmrrr ROXR.W <ea>
        !          4097: OP_DEF(roxr_w)
        !          4098: {
        !          4099:        name = "roxr";
        !          4100:        size = Size::W;
        !          4101:        src = make_ea();
        !          4102: }
        !          4103: 
        !          4104: // %1110_010111_mmmrrr ROXL.W <ea>
        !          4105: OP_DEF(roxl_w)
        !          4106: {
        !          4107:        name = "roxl";
        !          4108:        size = Size::W;
        !          4109:        src = make_ea();
        !          4110: }
        !          4111: 
        !          4112: // %1110_011011_mmmrrr ROR.W <ea>
        !          4113: OP_DEF(ror_w)
        !          4114: {
        !          4115:        name = "ror";
        !          4116:        size = Size::W;
        !          4117:        src = make_ea();
        !          4118: }
        !          4119: 
        !          4120: // %1110_011111_mmmrrr ROL.W <ea>
        !          4121: OP_DEF(rol_w)
        !          4122: {
        !          4123:        name = "rol";
        !          4124:        size = Size::W;
        !          4125:        src = make_ea();
        !          4126: }
        !          4127: 
        !          4128: // %1110_100011_mmmrrr BFTST <ea>{#o:#w}
        !          4129: OP_DEF(bftst)
        !          4130: {
        !          4131:        fetch16();
        !          4132:        name = "bftst";
        !          4133:        src = make_ea() + make_bf();
        !          4134: }
        !          4135: 
        !          4136: // %1110_100111_mmmrrr BFEXTU <ea>{#o:#w},Dn
        !          4137: OP_DEF(bfextu)
        !          4138: {
        !          4139:        fetch16();
        !          4140:        name = "bfextu";
        !          4141:        src = make_ea() + make_bf();
        !          4142:        dst = make_dn(ir[1] >> 12);
        !          4143: }
        !          4144: 
        !          4145: // %1110_101011_mmmrrr BFCHG <ea>{#o:#w}
        !          4146: OP_DEF(bfchg)
        !          4147: {
        !          4148:        fetch16();
        !          4149:        name = "bfchg";
        !          4150:        src = make_ea() + make_bf();
        !          4151: }
        !          4152: 
        !          4153: // %1110_101111_mmmrrr BFEXTS <ea>{#o:#w},Dn
        !          4154: OP_DEF(bfexts)
        !          4155: {
        !          4156:        fetch16();
        !          4157:        name = "bfexts";
        !          4158:        src = make_ea() + make_bf();
        !          4159:        dst = make_dn(ir[1] >> 12);
        !          4160: }
        !          4161: 
        !          4162: // %1110_110011_mmmrrr BFCLR <ea>{#o:#w}
        !          4163: OP_DEF(bfclr)
        !          4164: {
        !          4165:        fetch16();
        !          4166:        name = "bfclr";
        !          4167:        src = make_ea() + make_bf();
        !          4168: }
        !          4169: 
        !          4170: // %1110_110111_mmmrrr BFFFO <ea>{#o:#w},Dn
        !          4171: OP_DEF(bfffo)
        !          4172: {
        !          4173:        fetch16();
        !          4174:        name = "bfffo";
        !          4175:        src = make_ea() + make_bf();
        !          4176:        dst = make_dn(ir[1] >> 12);
        !          4177: }
        !          4178: 
        !          4179: // %1110_111011_mmmrrr BFSET <ea>{#o:#w}
        !          4180: OP_DEF(bfset)
        !          4181: {
        !          4182:        fetch16();
        !          4183:        name = "bfset";
        !          4184:        src = make_ea() + make_bf();
        !          4185: }
        !          4186: 
        !          4187: // %1110_111111_mmmrrr BFINS Dn,<ea>{#o:#w}
        !          4188: OP_DEF(bfins)
        !          4189: {
        !          4190:        fetch16();
        !          4191:        name = "bfins";
        !          4192:        dst = make_ea() + make_bf();
        !          4193:        src = make_dn(ir[1] >> 12);
        !          4194: }
        !          4195: 
        !          4196: // PMOVE* の共通部分
        !          4197: void
        !          4198: Disasm::ops_pmove(Reg reg, Disasm::Size sz)
        !          4199: {
        !          4200:        if ((ir[1] & 0x0100) == 0) {
        !          4201:                name = "pmove";
        !          4202:        } else {
        !          4203:                name = "pmovefd";
        !          4204:        }
        !          4205:        size = sz;
        !          4206:        if ((ir[1] & 0x0200) == 0) {
        !          4207:                src = make_ea();
        !          4208:                dst = make_reg(reg);
        !          4209:        } else {
        !          4210:                src = make_reg(reg);
        !          4211:                dst = make_ea();
        !          4212:        }
        !          4213: }
        !          4214: 
        !          4215: // %1111_000nnn_nnnnnn MMU_OP
        !          4216: OP_DEF(mmuop)
        !          4217: {
        !          4218:        uint16 ext = fetch16();
        !          4219:        switch (ext >> 8) {
        !          4220:         case 0x08:     // PMOVE.L   <ea>,TT0
        !          4221:         case 0x09:     // PMOVEFD.L <ea>,TT0
        !          4222:         case 0x0a:     // PMOVE.L   TT0,<ea>
        !          4223:                ops_pmove(Reg::TT0, Size::L);
        !          4224:                break;
        !          4225:         case 0x0c: // PMOVE.L   <ea>,TT1
        !          4226:         case 0x0d: // PMOVEFD.L <ea>,TT1
        !          4227:         case 0x0e:     // PMOVE.L   TT1,<ea>
        !          4228:                ops_pmove(Reg::TT1, Size::L);
        !          4229:                break;
        !          4230:         case 0x40: // PMOVE.L   <ea>,TC
        !          4231:         case 0x41: // PMOVEFD.L <ea>,TC
        !          4232:         case 0x42:     // PMOVE.L   TC,<ea>
        !          4233:                ops_pmove(Reg::TC, Size::L);
        !          4234:                break;
        !          4235:         case 0x48:     // PMOVE.Q   <ea>,SRP
        !          4236:         case 0x49:     // PMOVEFD.Q <ea>,SRP
        !          4237:         case 0x4a:     // PMOVE.Q   SRP,<ea>
        !          4238:                ops_pmove(Reg::SRP, Size::Q);
        !          4239:                break;
        !          4240:         case 0x4c: // PMOVE.Q   <ea>,CRP
        !          4241:         case 0x4d: // PMOVEFD.Q <ea>,CRP
        !          4242:         case 0x4e: // PMOVE.Q   CRP,<ea>
        !          4243:                ops_pmove(Reg::CRP, Size::Q);
        !          4244:                break;
        !          4245:         case 0x60: // PMOVE.W   <ea>,MMUSR
        !          4246:         case 0x61: // PMOVEFD.W <ea>,MMUSR
        !          4247:         case 0x62:     // PMOVE.W   MMUSR,<ea>
        !          4248:                ops_pmove(Reg::MMUSR, Size::W);
        !          4249:                break;
        !          4250: 
        !          4251:         case 0x20:     // PLOADW <fc>,<ea>
        !          4252:         case 0x22:     // PLOADR <fc>,<ea>
        !          4253:                if ((ext & 0x0200) == 0) {
        !          4254:                        name = "ploadw";
        !          4255:                } else {
        !          4256:                        name = "ploadr";
        !          4257:                }
        !          4258:                src = make_fc();
        !          4259:                dst = make_ea();
        !          4260:                break;
        !          4261: 
        !          4262:         case 0x24:     // PFLUSHA
        !          4263:                name = "pflusha";
        !          4264:                break;
        !          4265: 
        !          4266:         case 0x38:     // PFLUSH <fc>,#<mask>,<ea>
        !          4267:                dst = make_ea();
        !          4268:                FALLTHROUGH;
        !          4269:         case 0x30:     // PFLUSH <fc>,#<mask>
        !          4270:                name = "pflush";
        !          4271:                src = make_fc() + string_format(",#%d", (ir[1] >> 5) & 7);
        !          4272:                break;
        !          4273: 
        !          4274:         case 0x81:     // PTESTW <fc>,<ea>,#0,An
        !          4275:         case 0x85:     // PTESTW <fc>,<ea>,#1,An
        !          4276:         case 0x89:     // PTESTW <fc>,<ea>,#2,An
        !          4277:         case 0x8d:     // PTESTW <fc>,<ea>,#3,An
        !          4278:         case 0x91:     // PTESTW <fc>,<ea>,#4,An
        !          4279:         case 0x95:     // PTESTW <fc>,<ea>,#5,An
        !          4280:         case 0x99:     // PTESTW <fc>,<ea>,#6,An
        !          4281:         case 0x9d:     // PTESTW <fc>,<ea>,#7,An
        !          4282:         case 0x83:     // PTESTR <fc>,<ea>,#0,An
        !          4283:         case 0x87:     // PTESTR <fc>,<ea>,#1,An
        !          4284:         case 0x8b:     // PTESTR <fc>,<ea>,#2,An
        !          4285:         case 0x8f:     // PTESTR <fc>,<ea>,#3,An
        !          4286:         case 0x93:     // PTESTR <fc>,<ea>,#4,An
        !          4287:         case 0x97:     // PTESTR <fc>,<ea>,#5,An
        !          4288:         case 0x9b:     // PTESTR <fc>,<ea>,#6,An
        !          4289:         case 0x9f:     // PTESTR <fc>,<ea>,#7,An
        !          4290:                dst = make_an(ir[1] >> 5);
        !          4291:                FALLTHROUGH;
        !          4292:         case 0x80:     // PTESTW <fc>,<ea>,#0
        !          4293:         case 0x84:     // PTESTW <fc>,<ea>,#1
        !          4294:         case 0x88:     // PTESTW <fc>,<ea>,#2
        !          4295:         case 0x8c:     // PTESTW <fc>,<ea>,#3
        !          4296:         case 0x90:     // PTESTW <fc>,<ea>,#4
        !          4297:         case 0x94:     // PTESTW <fc>,<ea>,#5
        !          4298:         case 0x98:     // PTESTW <fc>,<ea>,#6
        !          4299:         case 0x9c:     // PTESTW <fc>,<ea>,#7
        !          4300:         case 0x82:     // PTESTR <fc>,<ea>,#0
        !          4301:         case 0x86:     // PTESTR <fc>,<ea>,#1
        !          4302:         case 0x8a:     // PTESTR <fc>,<ea>,#2
        !          4303:         case 0x8e:     // PTESTR <fc>,<ea>,#3
        !          4304:         case 0x92:     // PTESTR <fc>,<ea>,#4
        !          4305:         case 0x96:     // PTESTR <fc>,<ea>,#5
        !          4306:         case 0x9a:     // PTESTR <fc>,<ea>,#6
        !          4307:         case 0x9e:     // PTESTR <fc>,<ea>,#7
        !          4308:                if ((ext & 0x0200) == 0) {
        !          4309:                        name = "ptestw";
        !          4310:                } else {
        !          4311:                        name = "ptestr";
        !          4312:                }
        !          4313:                src = make_fc() + "," + make_ea()
        !          4314:                    + string_format(",#%d", (ext >> 10) & 7);
        !          4315:                break;
        !          4316: 
        !          4317:         default:
        !          4318:                OP_FUNC(illegal);
        !          4319:                break;
        !          4320:        }
        !          4321: }
        !          4322: 
        !          4323: // %1111_001000_nnnnnn FPGEN
        !          4324: OP_DEF(fpgen)
        !          4325: {
        !          4326:        uint16 ext = fetch16();
        !          4327: 
        !          4328:        switch (ext >> 13) {
        !          4329:         case 0:
        !          4330:                ops_fpgen_fpn_fpn();
        !          4331:                break;
        !          4332:         case 2:
        !          4333:                ops_fpgen_ea_fpn();
        !          4334:                break;
        !          4335:         case 3:
        !          4336:                ops_fmove_fpn_ea();
        !          4337:                break;
        !          4338:         case 4:
        !          4339:                ops_fmovem_ea_ctl();
        !          4340:                break;
        !          4341:         case 5:
        !          4342:                ops_fmovem_ctl_ea();
        !          4343:                break;
        !          4344:         case 6:
        !          4345:                ops_fmovem_ea_fpn();
        !          4346:                break;
        !          4347:         case 7:
        !          4348:                ops_fmovem_fpn_ea();
        !          4349:                break;
        !          4350:        }
        !          4351: }
        !          4352: 
        !          4353: // FPgen <fpn>,<fpn>
        !          4354: void
        !          4355: Disasm::ops_fpgen_fpn_fpn()
        !          4356: {
        !          4357:        uint sn = (ir[1] >> 10) & 7;
        !          4358:        uint dn = (ir[1] >> 7) & 7;
        !          4359:        uint mode = ir[1] & 0x7f;
        !          4360: 
        !          4361:        // FSINCOS だけ形式が違うので先に処理
        !          4362:        if (0x30 <= mode && mode < 0x38) {
        !          4363:                name = "fsincos";
        !          4364:                size = Size::X;
        !          4365:                src = make_fpn(sn);
        !          4366:                dst = make_fpn(ir[1]) + ":" + make_fpn(dn);
        !          4367:                return;
        !          4368:        }
        !          4369: 
        !          4370:        // FSINCOS 以外は全部同じ書式
        !          4371:        name = fpgen_names[mode];
        !          4372:        if (name.empty()) {
        !          4373:                OP_FUNC(illegal);
        !          4374:                return;
        !          4375:        }
        !          4376:        size = Size::X;
        !          4377:        src = make_fpn(sn);
        !          4378:        // FSIN FPm,FPm のように src, dst が同じ場合は FSIN FPm と書くが、
        !          4379:        // FMOVE FPm,FPm は src, dst が同じであっても FMOVE FPm,FPm と表記する。
        !          4380:        if (mode == 0x00/*FMOVE*/ || sn != dn) {
        !          4381:                dst = make_fpn(dn);
        !          4382:        }
        !          4383: }
        !          4384: 
        !          4385: // FPgen <ea>,<reg>
        !          4386: void
        !          4387: Disasm::ops_fpgen_ea_fpn()
        !          4388: {
        !          4389:        uint sz = (ir[1] >> 10) & 7;
        !          4390:        uint dn = (ir[1] >> 7) & 7;
        !          4391:        uint mode = ir[1] & 0x7f;
        !          4392: 
        !          4393:        if (sz == 7) {
        !          4394:                // ここに FMOVECR
        !          4395:                ops_fmovecr();
        !          4396:                return;
        !          4397:        }
        !          4398: 
        !          4399:        name = fpgen_names[mode];
        !          4400:        if (name.empty()) {
        !          4401:                OP_FUNC(illegal);
        !          4402:                return;
        !          4403:        }
        !          4404:        size = (Size)sz;
        !          4405:        src = make_ea();
        !          4406:        dst = make_fpn(dn);
        !          4407: }
        !          4408: 
        !          4409: // FMOVECR
        !          4410: void
        !          4411: Disasm::ops_fmovecr()
        !          4412: {
        !          4413:        uint dn = (ir[1] >> 7) & 7;
        !          4414:        uint offset = ir[1] & 0x7f;
        !          4415:        std::string text;
        !          4416: 
        !          4417:        name = "fmovecr";
        !          4418:        size = Size::X;
        !          4419:        src = "#" + hex8(offset);
        !          4420:        // 定数だけじゃ分かりづらいので内容も表示も表示してみるのはどうか。
        !          4421:        switch (offset) {
        !          4422:         case 0:
        !          4423:                src += "<pi>";
        !          4424:                break;
        !          4425:         case 0x0b ... 0x0f:
        !          4426:                src += fmovecr_text[offset - 0x0b];
        !          4427:                break;
        !          4428:         case 0x30 ... 0x3f:
        !          4429:                src += fmovecr_text[offset - 0x30 + 5];
        !          4430:                break;
        !          4431:         default:
        !          4432:                break;
        !          4433:        }
        !          4434:        dst = make_fpn(dn);
        !          4435: }
        !          4436: 
        !          4437: // FMOVE <fpn>,<ea>
        !          4438: void
        !          4439: Disasm::ops_fmove_fpn_ea()
        !          4440: {
        !          4441:        uint sz = (ir[1] >> 10) & 7;
        !          4442:        uint sn = (ir[1] >> 7) & 7;
        !          4443:        uint mode = ir[1] & 0x7f;
        !          4444: 
        !          4445:        name = "fmove";
        !          4446:        size = (Size)sz;
        !          4447:        src = make_fpn(sn);
        !          4448:        dst = make_ea();
        !          4449:        if (sz == Size::P) {
        !          4450:                // static k-factor
        !          4451:                int k;
        !          4452:                // 7bit (符号なし)数を符号付き数に変える
        !          4453:                if ((mode & 0x40)) {
        !          4454:                        k = (int8)(mode | 0x80);
        !          4455:                } else {
        !          4456:                        k = mode;
        !          4457:                }
        !          4458:                dst += string_format("{#%d}", k);
        !          4459:        } else if (sz == Size::Pk) {
        !          4460:                // dynamic k-factor
        !          4461:                dst += "{" + make_dn(mode >> 4) + "}";
        !          4462:        }
        !          4463: }
        !          4464: 
        !          4465: void
        !          4466: Disasm::ops_fmovem_ea_ctl()
        !          4467: {
        !          4468:        uint n;
        !          4469: 
        !          4470:        n = make_fpctls(dst);
        !          4471:        if (n == 1) {
        !          4472:                name = "fmove";
        !          4473:        } else {
        !          4474:                name = "fmovem";
        !          4475:        }
        !          4476:        size = Size::L;
        !          4477: 
        !          4478:        src = make_ea();
        !          4479:        // #imm が複数ある場合
        !          4480:        if ((ir[0] & 0x3f) == 0x3c && n > 1) {
        !          4481:                for (int i = 1; i < n; i++) {
        !          4482:                        src += "/";
        !          4483:                        src += imm32();
        !          4484:                }
        !          4485:        }
        !          4486: }
        !          4487: 
        !          4488: void
        !          4489: Disasm::ops_fmovem_ctl_ea()
        !          4490: {
        !          4491:        uint n;
        !          4492: 
        !          4493:        n = make_fpctls(src);
        !          4494:        if (n == 1) {
        !          4495:                name = "fmove";
        !          4496:        } else {
        !          4497:                name = "fmovem";
        !          4498:        }
        !          4499:        size = Size::L;
        !          4500:        dst = make_ea();
        !          4501: }
        !          4502: 
        !          4503: void
        !          4504: Disasm::ops_fmovem_ea_fpn()
        !          4505: {
        !          4506:        name = "fmovem";
        !          4507:        size = Size::X;
        !          4508:        src = make_ea();
        !          4509:        if ((ir[1] & 0x1800) == 0x1800) {
        !          4510:                // dynamic list
        !          4511:                dst = make_dn(ir[1] >> 4);
        !          4512:        } else {
        !          4513:                dst = make_fpnlist();
        !          4514:        }
        !          4515: }
        !          4516: 
        !          4517: void
        !          4518: Disasm::ops_fmovem_fpn_ea()
        !          4519: {
        !          4520:        name = "fmovem";
        !          4521:        size = Size::X;
        !          4522:        if ((ir[1] & 0x1800) == 0x1800) {
        !          4523:                // dynamic list
        !          4524:                src = make_dn(ir[1] >> 4);
        !          4525:        } else {
        !          4526:                src = make_fpnlist();
        !          4527:        }
        !          4528:        dst = make_ea();
        !          4529: }
        !          4530: 
        !          4531: // %1111_001001_nnnnnn FScc.B <ea>
        !          4532: // %1111_001001_001yyy FDBcc Dy,<label>
        !          4533: // %1111_001001_111010 FTRAPcc.W #<imm>
        !          4534: // %1111_001001_111011 FTRAPcc.L #<imm>
        !          4535: // %1111_001001_111100 FTRAPcc
        !          4536: OP_DEF(fxcc)
        !          4537: {
        !          4538:        uint n = ir[0] & 0x3f;
        !          4539: 
        !          4540:        fetch16();
        !          4541:        switch (n) {
        !          4542:         case 0x00 ... 0x07:    // FScc
        !          4543:         case 0x10 ... 0x39:
        !          4544:                name = "fs" + make_fpcc(ir[1]);
        !          4545:                size = Size::B;
        !          4546:                src = make_ea();
        !          4547:                break;
        !          4548:         case 0x08 ... 0x0f:    // FDBcc
        !          4549:                name = "fdb" + make_fpcc(ir[1]);
        !          4550:                src = make_dn(ir[0]);
        !          4551:                dst = addr32(pc0 + 2 + (int32)(int16)fetch16());
        !          4552:                break;
        !          4553:         case 0x3a:                             // FTRAPcc.W #<imm>
        !          4554:                name = "ftrap" + make_fpcc(ir[1]);
        !          4555:                size = Size::W;
        !          4556:                src = imm16();
        !          4557:                break;
        !          4558:         case 0x3b:                             // FTRAPcc.L #<imm>
        !          4559:                name = "ftrap" + make_fpcc(ir[1]);
        !          4560:                size = Size::L;
        !          4561:                src = imm32();
        !          4562:                break;
        !          4563:         case 0x3c:                             // FTRAPcc
        !          4564:                name = "ftrap" + make_fpcc(ir[1]);
        !          4565:                break;
        !          4566:         default:
        !          4567:                OP_FUNC(illegal);
        !          4568:                break;
        !          4569:        }
        !          4570: }
        !          4571: 
        !          4572: // %1111_001010_nnnnnn FBcc.W <label>
        !          4573: OP_DEF(fbcc_w)
        !          4574: {
        !          4575:        int32 disp = (int32)(int16)fetch16();
        !          4576: 
        !          4577:        if ((ir[0] & 0x3f) == 0 && disp == 0) {
        !          4578:                // FBF.W +$0000 のみ FNOP
        !          4579:                name = "fnop";
        !          4580:                return;
        !          4581:        }
        !          4582:        name = "fb" + make_fpcc(ir[0]);
        !          4583:        size = Size::W;
        !          4584:        src = addr32(pc0 + 2 + disp);
        !          4585: }
        !          4586: 
        !          4587: // %1111_001011_nnnnnn FBcc.L <label>
        !          4588: OP_DEF(fbcc_l)
        !          4589: {
        !          4590:        name = "fb" + make_fpcc(ir[0]);
        !          4591:        size = Size::L;
        !          4592:        src = addr32(pc0 + 2 + (int32)fetch32());
        !          4593: }
        !          4594: 
        !          4595: // %1111_001100_nnnnnn FSAVE <ea>
        !          4596: OP_DEF(fsave)
        !          4597: {
        !          4598:        name = "fsave";
        !          4599:        src = make_ea();
        !          4600: }
        !          4601: 
        !          4602: // %1111_001101_nnnnnn FRESTORE <ea>
        !          4603: OP_DEF(frestore)
        !          4604: {
        !          4605:        name = "frestore";
        !          4606:        src = make_ea();
        !          4607: }
        !          4608: 
        !          4609: // %1111_nnnnnn_nnnnnn F-Line
        !          4610: OP_DEF(fline)
        !          4611: {
        !          4612:        // XXX x68k/Human68k 判定するか
        !          4613:        if ((ir[0] & 0xff00) == 0xff00) {
        !          4614:                uint dosno = ir[0] & 0xff;
        !          4615:                name = "DOS";
        !          4616:                src = x68k_doscall[dosno] ?: "<undefined>";
        !          4617:        } else if ((ir[0] & 0xff00) == 0xfe00) {
        !          4618:                uint n = ir[0] & 0xff;
        !          4619:                name = "FPACK";
        !          4620:                src = x68k_fpcall[n] ?: "<undefined>";
        !          4621:        } else {
        !          4622:                name = "<unknown F-Line trap>";
        !          4623:        }
        !          4624: }
        !          4625: 
        !          4626: // illegal instructions
        !          4627: OP_DEF(illegal)
        !          4628: {
        !          4629:        name = "<illegal instruction>";
        !          4630: }

unix.superglobalmegacorp.com

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