MC68000.java
     1: //========================================================================================
     2: //  MC68000.java
     3: //    en:MC68000 core
     4: //    ja:MC68000コア
     5: //  Copyright (C) 2003-2017 Makoto Kamada
     6: //
     7: //  This file is part of the XEiJ (X68000 Emulator in Java).
     8: //  You can use, modify and redistribute the XEiJ if the conditions are met.
     9: //  Read the XEiJ License for more details.
    10: //  http://stdkmd.com/xeij/
    11: //========================================================================================
    12: 
    13: package xeij;
    14: 
    15: import java.lang.*;  //Boolean,Character,Class,Comparable,Double,Exception,Float,IllegalArgumentException,Integer,Long,Math,Number,Object,Runnable,SecurityException,String,StringBuilder,System
    16: 
    17: public class MC68000 {
    18: 
    19:   public static void mpuCore () {
    20: 
    21:     //コアメーター計測開始
    22:     long nanoStart = System.nanoTime ();
    23: 
    24:     XEiJ.busSuper (RP5C15.rtcFirst, 0x00e8a000, 0x00e8c000);  //RTC RTC
    25:     //XEiJ.busSuperMap[0x00e8a000 >>> XEiJ.BUS_PAGE_BITS] = RP5C15.rtcFirst;
    26: 
    27:     if (Profiling.PFF_ON) {
    28:       if (Profiling.pffStage == Profiling.PFF_STAGE_START) {
    29:         Profiling.pffClear ();
    30:       } else if (Profiling.pffStage == Profiling.PFF_STAGE_STOP) {
    31:         Profiling.pffReport ();
    32:       }
    33:     }
    34: 
    35:     //例外ループ
    36:     //  別のメソッドで検出された例外を命令ループの外側でcatchすることで命令ループを高速化する
    37:   errorLoop:
    38:     while (XEiJ.mpuClockTime < XEiJ.mpuClockLimit) {
    39:       try {
    40:         //命令ループ
    41:         while (XEiJ.mpuClockTime < XEiJ.mpuClockLimit) {
    42:           int t;
    43:           //命令を実行する
    44:           XEiJ.mpuTraceFlag = XEiJ.regSRT1;  //命令実行前のsrT1
    45:           XEiJ.mpuCycleCount = 0;  //第1オペコードからROMのアクセスウエイトを有効にする。命令のサイクル数はすべてXEiJ.mpuCycleCount+=~で加えること
    46:           XEiJ.regPC0 = t = XEiJ.regPC;  //命令の先頭アドレス
    47:           XEiJ.regPC = t + 2;
    48:           XEiJ.regOC = (InstructionBreakPoint.IBP_ON ? InstructionBreakPoint.ibpOp1MemoryMap : DataBreakPoint.DBP_ON ? XEiJ.regSRS != 0 ? XEiJ.busSuperMap : XEiJ.busUserMap : XEiJ.busMemoryMap)[t >>> XEiJ.BUS_PAGE_BITS].mmdRwz (t);  //第1オペコード。必ずゼロ拡張すること。pcに奇数が入っていることはないのでアドレスエラーのチェックを省略する
    49: 
    50:           //命令の処理
    51:           //  第1オペコードの上位10bitで分岐する
    52:           //  分岐方法
    53:           //    XEiJ.IRP_STATIC
    54:           //      手順
    55:           //        命令の処理をstaticメソッドに書く
    56:           //        switch(XEiJ.regOC>>>6)で分岐してirpXXX()で呼び出す
    57:           //          Javaはメソッドのサイズに制限があるためswitch(XEiJ.regOC>>>6)の中にすべての命令の処理を書くことができない
    58:           //          C言語のときはswitchの中にすべての命令の処理を書くことができる
    59:           //      利点
    60:           //        速い
    61:           //    XEiJ.IRP_ENUM_DIRECT
    62:           //      手順
    63:           //        命令の処理をenum bodyのメソッドに書く
    64:           //        switch(XEiJ.regOC>>>6)で分岐してIRP.XXX.exec()で呼び出す
    65:           //      欠点
    66:           //        XEiJ.IRP_STATICよりも遅い
    67:           //          staticなメソッドを直接呼び出せることに変わりないはずだが、インライン展開などの最適化が弱くなるのかも知れない
    68:           //        XEiJ.IRP_STATICと共存させようとすると命令の処理を2回書かなければならず管理が面倒になる
    69:           //    XEiJ.IRP_ENUM_INDIRECT
    70:           //      手順
    71:           //        命令の処理をenum bodyのメソッドに書く
    72:           //        XEiJ.regOCの上位10bit→enum値の配列を用意する
    73:           //        IRPMAP.IRPMAP0[XEiJ.regOC>>>6].exec()で呼び出す
    74:           //          C言語のときは関数を指すポインタの配列が使えるのでIRPMAP0[XEiJ.regOC>>>6]()で済む
    75:           //      利点
    76:           //        命令の処理を動的に組み替えることができる
    77:           //      欠点
    78:           //        XEiJ.IRP_ENUM_DIRECTよりも遅い
    79:           //          配列参照による多分岐とenum bodyのメソッドの動的呼び出しによる多分岐の2段階になる
    80:           //        XEiJ.IRP_STATICと共存させようとすると命令の処理を2回書かなければならず管理が面倒になる
    81:           //        enum値の配列の初期化コードが大きくなるのでクラスを分ける必要がある
    82:         irpSwitch:
    83:           switch (XEiJ.regOC >>> 6) {  //第1オペコードの上位10ビット。XEiJ.regOCはゼロ拡張されているので0b1111_111_111&を省略
    84: 
    85:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
    86:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
    87:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
    88:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
    89:             //ORI.B #<data>,<ea>                              |-|012346|-|-UUUU|-**00|D M+-WXZ  |0000_000_000_mmm_rrr-{data}
    90:             //OR.B #<data>,<ea>                               |A|012346|-|-UUUU|-**00|  M+-WXZ  |0000_000_000_mmm_rrr-{data}  [ORI.B #<data>,<ea>]
    91:             //ORI.B #<data>,CCR                               |-|012346|-|*****|*****|          |0000_000_000_111_100-{data}
    92:           case 0b0000_000_000:
    93:             irpOriByte ();
    94:             break irpSwitch;
    95: 
    96:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
    97:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
    98:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
    99:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   100:             //ORI.W #<data>,<ea>                              |-|012346|-|-UUUU|-**00|D M+-WXZ  |0000_000_001_mmm_rrr-{data}
   101:             //OR.W #<data>,<ea>                               |A|012346|-|-UUUU|-**00|  M+-WXZ  |0000_000_001_mmm_rrr-{data}  [ORI.W #<data>,<ea>]
   102:             //ORI.W #<data>,SR                                |-|012346|P|*****|*****|          |0000_000_001_111_100-{data}
   103:           case 0b0000_000_001:
   104:             irpOriWord ();
   105:             break irpSwitch;
   106: 
   107:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   108:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   109:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   110:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   111:             //ORI.L #<data>,<ea>                              |-|012346|-|-UUUU|-**00|D M+-WXZ  |0000_000_010_mmm_rrr-{data}
   112:             //OR.L #<data>,<ea>                               |A|012346|-|-UUUU|-**00|  M+-WXZ  |0000_000_010_mmm_rrr-{data}  [ORI.L #<data>,<ea>]
   113:           case 0b0000_000_010:
   114:             irpOriLong ();
   115:             break irpSwitch;
   116: 
   117:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   118:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   119:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   120:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   121:             //BITREV.L Dr                                     |-|------|-|-----|-----|D         |0000_000_011_000_rrr (ISA_C)
   122:           case 0b0000_000_011:
   123:             irpCmp2Chk2Byte ();
   124:             break irpSwitch;
   125: 
   126:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   127:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   128:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   129:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   130:             //BTST.L Dq,Dr                                    |-|012346|-|--U--|--*--|D         |0000_qqq_100_000_rrr
   131:             //MOVEP.W (d16,Ar),Dq                             |-|01234S|-|-----|-----|          |0000_qqq_100_001_rrr-{data}
   132:             //BTST.B Dq,<ea>                                  |-|012346|-|--U--|--*--|  M+-WXZPI|0000_qqq_100_mmm_rrr
   133:           case 0b0000_000_100:
   134:           case 0b0000_001_100:
   135:           case 0b0000_010_100:
   136:           case 0b0000_011_100:
   137:           case 0b0000_100_100:
   138:           case 0b0000_101_100:
   139:           case 0b0000_110_100:
   140:           case 0b0000_111_100:
   141:             irpBtstReg ();
   142:             break irpSwitch;
   143: 
   144:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   145:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   146:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   147:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   148:             //BCHG.L Dq,Dr                                    |-|012346|-|--U--|--*--|D         |0000_qqq_101_000_rrr
   149:             //MOVEP.L (d16,Ar),Dq                             |-|01234S|-|-----|-----|          |0000_qqq_101_001_rrr-{data}
   150:             //BCHG.B Dq,<ea>                                  |-|012346|-|--U--|--*--|  M+-WXZ  |0000_qqq_101_mmm_rrr
   151:           case 0b0000_000_101:
   152:           case 0b0000_001_101:
   153:           case 0b0000_010_101:
   154:           case 0b0000_011_101:
   155:           case 0b0000_100_101:
   156:           case 0b0000_101_101:
   157:           case 0b0000_110_101:
   158:           case 0b0000_111_101:
   159:             irpBchgReg ();
   160:             break irpSwitch;
   161: 
   162:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   163:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   164:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   165:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   166:             //BCLR.L Dq,Dr                                    |-|012346|-|--U--|--*--|D         |0000_qqq_110_000_rrr
   167:             //MOVEP.W Dq,(d16,Ar)                             |-|01234S|-|-----|-----|          |0000_qqq_110_001_rrr-{data}
   168:             //BCLR.B Dq,<ea>                                  |-|012346|-|--U--|--*--|  M+-WXZ  |0000_qqq_110_mmm_rrr
   169:           case 0b0000_000_110:
   170:           case 0b0000_001_110:
   171:           case 0b0000_010_110:
   172:           case 0b0000_011_110:
   173:           case 0b0000_100_110:
   174:           case 0b0000_101_110:
   175:           case 0b0000_110_110:
   176:           case 0b0000_111_110:
   177:             irpBclrReg ();
   178:             break irpSwitch;
   179: 
   180:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   181:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   182:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   183:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   184:             //BSET.L Dq,Dr                                    |-|012346|-|--U--|--*--|D         |0000_qqq_111_000_rrr
   185:             //MOVEP.L Dq,(d16,Ar)                             |-|01234S|-|-----|-----|          |0000_qqq_111_001_rrr-{data}
   186:             //BSET.B Dq,<ea>                                  |-|012346|-|--U--|--*--|  M+-WXZ  |0000_qqq_111_mmm_rrr
   187:           case 0b0000_000_111:
   188:           case 0b0000_001_111:
   189:           case 0b0000_010_111:
   190:           case 0b0000_011_111:
   191:           case 0b0000_100_111:
   192:           case 0b0000_101_111:
   193:           case 0b0000_110_111:
   194:           case 0b0000_111_111:
   195:             irpBsetReg ();
   196:             break irpSwitch;
   197: 
   198:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   199:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   200:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   201:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   202:             //ANDI.B #<data>,<ea>                             |-|012346|-|-UUUU|-**00|D M+-WXZ  |0000_001_000_mmm_rrr-{data}
   203:             //AND.B #<data>,<ea>                              |A|012346|-|-UUUU|-**00|  M+-WXZ  |0000_001_000_mmm_rrr-{data}  [ANDI.B #<data>,<ea>]
   204:             //ANDI.B #<data>,CCR                              |-|012346|-|*****|*****|          |0000_001_000_111_100-{data}
   205:           case 0b0000_001_000:
   206:             irpAndiByte ();
   207:             break irpSwitch;
   208: 
   209:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   210:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   211:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   212:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   213:             //ANDI.W #<data>,<ea>                             |-|012346|-|-UUUU|-**00|D M+-WXZ  |0000_001_001_mmm_rrr-{data}
   214:             //AND.W #<data>,<ea>                              |A|012346|-|-UUUU|-**00|  M+-WXZ  |0000_001_001_mmm_rrr-{data}  [ANDI.W #<data>,<ea>]
   215:             //ANDI.W #<data>,SR                               |-|012346|P|*****|*****|          |0000_001_001_111_100-{data}
   216:           case 0b0000_001_001:
   217:             irpAndiWord ();
   218:             break irpSwitch;
   219: 
   220:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   221:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   222:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   223:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   224:             //ANDI.L #<data>,<ea>                             |-|012346|-|-UUUU|-**00|D M+-WXZ  |0000_001_010_mmm_rrr-{data}
   225:             //AND.L #<data>,<ea>                              |A|012346|-|-UUUU|-**00|  M+-WXZ  |0000_001_010_mmm_rrr-{data}  [ANDI.L #<data>,<ea>]
   226:           case 0b0000_001_010:
   227:             irpAndiLong ();
   228:             break irpSwitch;
   229: 
   230:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   231:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   232:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   233:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   234:             //BYTEREV.L Dr                                    |-|------|-|-----|-----|D         |0000_001_011_000_rrr (ISA_C)
   235:           case 0b0000_001_011:
   236:             irpCmp2Chk2Word ();
   237:             break irpSwitch;
   238: 
   239:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   240:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   241:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   242:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   243:             //SUBI.B #<data>,<ea>                             |-|012346|-|UUUUU|*****|D M+-WXZ  |0000_010_000_mmm_rrr-{data}
   244:             //SUB.B #<data>,<ea>                              |A|012346|-|UUUUU|*****|  M+-WXZ  |0000_010_000_mmm_rrr-{data}  [SUBI.B #<data>,<ea>]
   245:           case 0b0000_010_000:
   246:             irpSubiByte ();
   247:             break irpSwitch;
   248: 
   249:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   250:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   251:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   252:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   253:             //SUBI.W #<data>,<ea>                             |-|012346|-|UUUUU|*****|D M+-WXZ  |0000_010_001_mmm_rrr-{data}
   254:             //SUB.W #<data>,<ea>                              |A|012346|-|UUUUU|*****|  M+-WXZ  |0000_010_001_mmm_rrr-{data}  [SUBI.W #<data>,<ea>]
   255:           case 0b0000_010_001:
   256:             irpSubiWord ();
   257:             break irpSwitch;
   258: 
   259:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   260:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   261:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   262:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   263:             //SUBI.L #<data>,<ea>                             |-|012346|-|UUUUU|*****|D M+-WXZ  |0000_010_010_mmm_rrr-{data}
   264:             //SUB.L #<data>,<ea>                              |A|012346|-|UUUUU|*****|  M+-WXZ  |0000_010_010_mmm_rrr-{data}  [SUBI.L #<data>,<ea>]
   265:           case 0b0000_010_010:
   266:             irpSubiLong ();
   267:             break irpSwitch;
   268: 
   269:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   270:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   271:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   272:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   273:             //FF1.L Dr                                        |-|------|-|-UUUU|-**00|D         |0000_010_011_000_rrr (ISA_C)
   274:           case 0b0000_010_011:
   275:             irpCmp2Chk2Long ();
   276:             break irpSwitch;
   277: 
   278:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   279:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   280:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   281:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   282:             //ADDI.B #<data>,<ea>                             |-|012346|-|UUUUU|*****|D M+-WXZ  |0000_011_000_mmm_rrr-{data}
   283:           case 0b0000_011_000:
   284:             irpAddiByte ();
   285:             break irpSwitch;
   286: 
   287:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   288:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   289:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   290:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   291:             //ADDI.W #<data>,<ea>                             |-|012346|-|UUUUU|*****|D M+-WXZ  |0000_011_001_mmm_rrr-{data}
   292:           case 0b0000_011_001:
   293:             irpAddiWord ();
   294:             break irpSwitch;
   295: 
   296:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   297:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   298:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   299:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   300:             //ADDI.L #<data>,<ea>                             |-|012346|-|UUUUU|*****|D M+-WXZ  |0000_011_010_mmm_rrr-{data}
   301:           case 0b0000_011_010:
   302:             irpAddiLong ();
   303:             break irpSwitch;
   304: 
   305:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   306:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   307:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   308:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   309:             //BTST.L #<data>,Dr                               |-|012346|-|--U--|--*--|D         |0000_100_000_000_rrr-{data}
   310:             //BTST.B #<data>,<ea>                             |-|012346|-|--U--|--*--|  M+-WXZP |0000_100_000_mmm_rrr-{data}
   311:           case 0b0000_100_000:
   312:             irpBtstImm ();
   313:             break irpSwitch;
   314: 
   315:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   316:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   317:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   318:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   319:             //BCHG.L #<data>,Dr                               |-|012346|-|--U--|--*--|D         |0000_100_001_000_rrr-{data}
   320:             //BCHG.B #<data>,<ea>                             |-|012346|-|--U--|--*--|  M+-WXZ  |0000_100_001_mmm_rrr-{data}
   321:           case 0b0000_100_001:
   322:             irpBchgImm ();
   323:             break irpSwitch;
   324: 
   325:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   326:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   327:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   328:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   329:             //BCLR.L #<data>,Dr                               |-|012346|-|--U--|--*--|D         |0000_100_010_000_rrr-{data}
   330:             //BCLR.B #<data>,<ea>                             |-|012346|-|--U--|--*--|  M+-WXZ  |0000_100_010_mmm_rrr-{data}
   331:           case 0b0000_100_010:
   332:             irpBclrImm ();
   333:             break irpSwitch;
   334: 
   335:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   336:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   337:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   338:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   339:             //BSET.L #<data>,Dr                               |-|012346|-|--U--|--*--|D         |0000_100_011_000_rrr-{data}
   340:             //BSET.B #<data>,<ea>                             |-|012346|-|--U--|--*--|  M+-WXZ  |0000_100_011_mmm_rrr-{data}
   341:           case 0b0000_100_011:
   342:             irpBsetImm ();
   343:             break irpSwitch;
   344: 
   345:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   346:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   347:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   348:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   349:             //EORI.B #<data>,<ea>                             |-|012346|-|-UUUU|-**00|D M+-WXZ  |0000_101_000_mmm_rrr-{data}
   350:             //EOR.B #<data>,<ea>                              |A|012346|-|-UUUU|-**00|D M+-WXZ  |0000_101_000_mmm_rrr-{data}  [EORI.B #<data>,<ea>]
   351:             //EORI.B #<data>,CCR                              |-|012346|-|*****|*****|          |0000_101_000_111_100-{data}
   352:           case 0b0000_101_000:
   353:             irpEoriByte ();
   354:             break irpSwitch;
   355: 
   356:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   357:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   358:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   359:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   360:             //EORI.W #<data>,<ea>                             |-|012346|-|-UUUU|-**00|D M+-WXZ  |0000_101_001_mmm_rrr-{data}
   361:             //EOR.W #<data>,<ea>                              |A|012346|-|-UUUU|-**00|D M+-WXZ  |0000_101_001_mmm_rrr-{data}  [EORI.W #<data>,<ea>]
   362:             //EORI.W #<data>,SR                               |-|012346|P|*****|*****|          |0000_101_001_111_100-{data}
   363:           case 0b0000_101_001:
   364:             irpEoriWord ();
   365:             break irpSwitch;
   366: 
   367:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   368:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   369:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   370:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   371:             //EORI.L #<data>,<ea>                             |-|012346|-|-UUUU|-**00|D M+-WXZ  |0000_101_010_mmm_rrr-{data}
   372:             //EOR.L #<data>,<ea>                              |A|012346|-|-UUUU|-**00|D M+-WXZ  |0000_101_010_mmm_rrr-{data}  [EORI.L #<data>,<ea>]
   373:           case 0b0000_101_010:
   374:             irpEoriLong ();
   375:             break irpSwitch;
   376: 
   377:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   378:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   379:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   380:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   381:             //CMPI.B #<data>,<ea>                             |-|01----|-|-UUUU|-****|D M+-WXZ  |0000_110_000_mmm_rrr-{data}
   382:             //CMP.B #<data>,<ea>                              |A|01----|-|-UUUU|-****|  M+-WXZ  |0000_110_000_mmm_rrr-{data}  [CMPI.B #<data>,<ea>]
   383:           case 0b0000_110_000:
   384:             irpCmpiByte ();
   385:             break irpSwitch;
   386: 
   387:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   388:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   389:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   390:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   391:             //CMPI.W #<data>,<ea>                             |-|01----|-|-UUUU|-****|D M+-WXZ  |0000_110_001_mmm_rrr-{data}
   392:             //CMP.W #<data>,<ea>                              |A|01----|-|-UUUU|-****|  M+-WXZ  |0000_110_001_mmm_rrr-{data}  [CMPI.W #<data>,<ea>]
   393:           case 0b0000_110_001:
   394:             irpCmpiWord ();
   395:             break irpSwitch;
   396: 
   397:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   398:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   399:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   400:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   401:             //CMPI.L #<data>,<ea>                             |-|01----|-|-UUUU|-****|D M+-WXZ  |0000_110_010_mmm_rrr-{data}
   402:             //CMP.L #<data>,<ea>                              |A|01----|-|-UUUU|-****|  M+-WXZ  |0000_110_010_mmm_rrr-{data}  [CMPI.L #<data>,<ea>]
   403:           case 0b0000_110_010:
   404:             irpCmpiLong ();
   405:             break irpSwitch;
   406: 
   407:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   408:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   409:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   410:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   411:             //MOVE.B <ea>,Dq                                  |-|012346|-|-UUUU|-**00|D M+-WXZPI|0001_qqq_000_mmm_rrr
   412:           case 0b0001_000_000:
   413:           case 0b0001_001_000:
   414:           case 0b0001_010_000:
   415:           case 0b0001_011_000:
   416:           case 0b0001_100_000:
   417:           case 0b0001_101_000:
   418:           case 0b0001_110_000:
   419:           case 0b0001_111_000:
   420:             irpMoveToDRByte ();
   421:             break irpSwitch;
   422: 
   423:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   424:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   425:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   426:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   427:             //MOVE.B <ea>,(Aq)                                |-|012346|-|-UUUU|-**00|D M+-WXZPI|0001_qqq_010_mmm_rrr
   428:           case 0b0001_000_010:
   429:           case 0b0001_001_010:
   430:           case 0b0001_010_010:
   431:           case 0b0001_011_010:
   432:           case 0b0001_100_010:
   433:           case 0b0001_101_010:
   434:           case 0b0001_110_010:
   435:           case 0b0001_111_010:
   436:             irpMoveToMMByte ();
   437:             break irpSwitch;
   438: 
   439:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   440:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   441:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   442:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   443:             //MOVE.B <ea>,(Aq)+                               |-|012346|-|-UUUU|-**00|D M+-WXZPI|0001_qqq_011_mmm_rrr
   444:           case 0b0001_000_011:
   445:           case 0b0001_001_011:
   446:           case 0b0001_010_011:
   447:           case 0b0001_011_011:
   448:           case 0b0001_100_011:
   449:           case 0b0001_101_011:
   450:           case 0b0001_110_011:
   451:           case 0b0001_111_011:
   452:             irpMoveToMPByte ();
   453:             break irpSwitch;
   454: 
   455:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   456:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   457:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   458:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   459:             //MOVE.B <ea>,-(Aq)                               |-|012346|-|-UUUU|-**00|D M+-WXZPI|0001_qqq_100_mmm_rrr
   460:           case 0b0001_000_100:
   461:           case 0b0001_001_100:
   462:           case 0b0001_010_100:
   463:           case 0b0001_011_100:
   464:           case 0b0001_100_100:
   465:           case 0b0001_101_100:
   466:           case 0b0001_110_100:
   467:           case 0b0001_111_100:
   468:             irpMoveToMNByte ();
   469:             break irpSwitch;
   470: 
   471:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   472:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   473:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   474:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   475:             //MOVE.B <ea>,(d16,Aq)                            |-|012346|-|-UUUU|-**00|D M+-WXZPI|0001_qqq_101_mmm_rrr
   476:           case 0b0001_000_101:
   477:           case 0b0001_001_101:
   478:           case 0b0001_010_101:
   479:           case 0b0001_011_101:
   480:           case 0b0001_100_101:
   481:           case 0b0001_101_101:
   482:           case 0b0001_110_101:
   483:           case 0b0001_111_101:
   484:             irpMoveToMWByte ();
   485:             break irpSwitch;
   486: 
   487:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   488:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   489:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   490:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   491:             //MOVE.B <ea>,(d8,Aq,Rn.wl)                       |-|012346|-|-UUUU|-**00|D M+-WXZPI|0001_qqq_110_mmm_rrr
   492:           case 0b0001_000_110:
   493:           case 0b0001_001_110:
   494:           case 0b0001_010_110:
   495:           case 0b0001_011_110:
   496:           case 0b0001_100_110:
   497:           case 0b0001_101_110:
   498:           case 0b0001_110_110:
   499:           case 0b0001_111_110:
   500:             irpMoveToMXByte ();
   501:             break irpSwitch;
   502: 
   503:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   504:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   505:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   506:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   507:             //MOVE.B <ea>,(xxx).W                             |-|012346|-|-UUUU|-**00|D M+-WXZPI|0001_000_111_mmm_rrr
   508:           case 0b0001_000_111:
   509:             irpMoveToZWByte ();
   510:             break irpSwitch;
   511: 
   512:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   513:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   514:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   515:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   516:             //MOVE.B <ea>,(xxx).L                             |-|012346|-|-UUUU|-**00|D M+-WXZPI|0001_001_111_mmm_rrr
   517:           case 0b0001_001_111:
   518:             irpMoveToZLByte ();
   519:             break irpSwitch;
   520: 
   521:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   522:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   523:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   524:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   525:             //MOVE.L <ea>,Dq                                  |-|012346|-|-UUUU|-**00|DAM+-WXZPI|0010_qqq_000_mmm_rrr
   526:           case 0b0010_000_000:
   527:           case 0b0010_001_000:
   528:           case 0b0010_010_000:
   529:           case 0b0010_011_000:
   530:           case 0b0010_100_000:
   531:           case 0b0010_101_000:
   532:           case 0b0010_110_000:
   533:           case 0b0010_111_000:
   534:             irpMoveToDRLong ();
   535:             break irpSwitch;
   536: 
   537:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   538:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   539:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   540:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   541:             //MOVEA.L <ea>,Aq                                 |-|012346|-|-----|-----|DAM+-WXZPI|0010_qqq_001_mmm_rrr
   542:             //MOVE.L <ea>,Aq                                  |A|012346|-|-----|-----|DAM+-WXZPI|0010_qqq_001_mmm_rrr [MOVEA.L <ea>,Aq]
   543:           case 0b0010_000_001:
   544:           case 0b0010_001_001:
   545:           case 0b0010_010_001:
   546:           case 0b0010_011_001:
   547:           case 0b0010_100_001:
   548:           case 0b0010_101_001:
   549:           case 0b0010_110_001:
   550:           case 0b0010_111_001:
   551:             irpMoveaLong ();
   552:             break irpSwitch;
   553: 
   554:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   555:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   556:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   557:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   558:             //MOVE.L <ea>,(Aq)                                |-|012346|-|-UUUU|-**00|DAM+-WXZPI|0010_qqq_010_mmm_rrr
   559:           case 0b0010_000_010:
   560:           case 0b0010_001_010:
   561:           case 0b0010_010_010:
   562:           case 0b0010_011_010:
   563:           case 0b0010_100_010:
   564:           case 0b0010_101_010:
   565:           case 0b0010_110_010:
   566:           case 0b0010_111_010:
   567:             irpMoveToMMLong ();
   568:             break irpSwitch;
   569: 
   570:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   571:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   572:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   573:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   574:             //MOVE.L <ea>,(Aq)+                               |-|012346|-|-UUUU|-**00|DAM+-WXZPI|0010_qqq_011_mmm_rrr
   575:           case 0b0010_000_011:
   576:           case 0b0010_001_011:
   577:           case 0b0010_010_011:
   578:           case 0b0010_011_011:
   579:           case 0b0010_100_011:
   580:           case 0b0010_101_011:
   581:           case 0b0010_110_011:
   582:           case 0b0010_111_011:
   583:             irpMoveToMPLong ();
   584:             break irpSwitch;
   585: 
   586:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   587:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   588:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   589:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   590:             //MOVE.L <ea>,-(Aq)                               |-|012346|-|-UUUU|-**00|DAM+-WXZPI|0010_qqq_100_mmm_rrr
   591:           case 0b0010_000_100:
   592:           case 0b0010_001_100:
   593:           case 0b0010_010_100:
   594:           case 0b0010_011_100:
   595:           case 0b0010_100_100:
   596:           case 0b0010_101_100:
   597:           case 0b0010_110_100:
   598:           case 0b0010_111_100:
   599:             irpMoveToMNLong ();
   600:             break irpSwitch;
   601: 
   602:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   603:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   604:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   605:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   606:             //MOVE.L <ea>,(d16,Aq)                            |-|012346|-|-UUUU|-**00|DAM+-WXZPI|0010_qqq_101_mmm_rrr
   607:           case 0b0010_000_101:
   608:           case 0b0010_001_101:
   609:           case 0b0010_010_101:
   610:           case 0b0010_011_101:
   611:           case 0b0010_100_101:
   612:           case 0b0010_101_101:
   613:           case 0b0010_110_101:
   614:           case 0b0010_111_101:
   615:             irpMoveToMWLong ();
   616:             break irpSwitch;
   617: 
   618:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   619:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   620:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   621:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   622:             //MOVE.L <ea>,(d8,Aq,Rn.wl)                       |-|012346|-|-UUUU|-**00|DAM+-WXZPI|0010_qqq_110_mmm_rrr
   623:           case 0b0010_000_110:
   624:           case 0b0010_001_110:
   625:           case 0b0010_010_110:
   626:           case 0b0010_011_110:
   627:           case 0b0010_100_110:
   628:           case 0b0010_101_110:
   629:           case 0b0010_110_110:
   630:           case 0b0010_111_110:
   631:             irpMoveToMXLong ();
   632:             break irpSwitch;
   633: 
   634:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   635:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   636:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   637:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   638:             //MOVE.L <ea>,(xxx).W                             |-|012346|-|-UUUU|-**00|DAM+-WXZPI|0010_000_111_mmm_rrr
   639:           case 0b0010_000_111:
   640:             irpMoveToZWLong ();
   641:             break irpSwitch;
   642: 
   643:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   644:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   645:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   646:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   647:             //MOVE.L <ea>,(xxx).L                             |-|012346|-|-UUUU|-**00|DAM+-WXZPI|0010_001_111_mmm_rrr
   648:           case 0b0010_001_111:
   649:             irpMoveToZLLong ();
   650:             break irpSwitch;
   651: 
   652:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   653:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   654:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   655:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   656:             //MOVE.W <ea>,Dq                                  |-|012346|-|-UUUU|-**00|DAM+-WXZPI|0011_qqq_000_mmm_rrr
   657:           case 0b0011_000_000:
   658:           case 0b0011_001_000:
   659:           case 0b0011_010_000:
   660:           case 0b0011_011_000:
   661:           case 0b0011_100_000:
   662:           case 0b0011_101_000:
   663:           case 0b0011_110_000:
   664:           case 0b0011_111_000:
   665:             irpMoveToDRWord ();
   666:             break irpSwitch;
   667: 
   668:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   669:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   670:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   671:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   672:             //MOVEA.W <ea>,Aq                                 |-|012346|-|-----|-----|DAM+-WXZPI|0011_qqq_001_mmm_rrr
   673:             //MOVE.W <ea>,Aq                                  |A|012346|-|-----|-----|DAM+-WXZPI|0011_qqq_001_mmm_rrr [MOVEA.W <ea>,Aq]
   674:           case 0b0011_000_001:
   675:           case 0b0011_001_001:
   676:           case 0b0011_010_001:
   677:           case 0b0011_011_001:
   678:           case 0b0011_100_001:
   679:           case 0b0011_101_001:
   680:           case 0b0011_110_001:
   681:           case 0b0011_111_001:
   682:             irpMoveaWord ();
   683:             break irpSwitch;
   684: 
   685:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   686:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   687:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   688:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   689:             //MOVE.W <ea>,(Aq)                                |-|012346|-|-UUUU|-**00|DAM+-WXZPI|0011_qqq_010_mmm_rrr
   690:           case 0b0011_000_010:
   691:           case 0b0011_001_010:
   692:           case 0b0011_010_010:
   693:           case 0b0011_011_010:
   694:           case 0b0011_100_010:
   695:           case 0b0011_101_010:
   696:           case 0b0011_110_010:
   697:           case 0b0011_111_010:
   698:             irpMoveToMMWord ();
   699:             break irpSwitch;
   700: 
   701:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   702:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   703:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   704:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   705:             //MOVE.W <ea>,(Aq)+                               |-|012346|-|-UUUU|-**00|DAM+-WXZPI|0011_qqq_011_mmm_rrr
   706:           case 0b0011_000_011:
   707:           case 0b0011_001_011:
   708:           case 0b0011_010_011:
   709:           case 0b0011_011_011:
   710:           case 0b0011_100_011:
   711:           case 0b0011_101_011:
   712:           case 0b0011_110_011:
   713:           case 0b0011_111_011:
   714:             irpMoveToMPWord ();
   715:             break irpSwitch;
   716: 
   717:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   718:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   719:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   720:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   721:             //MOVE.W <ea>,-(Aq)                               |-|012346|-|-UUUU|-**00|DAM+-WXZPI|0011_qqq_100_mmm_rrr
   722:           case 0b0011_000_100:
   723:           case 0b0011_001_100:
   724:           case 0b0011_010_100:
   725:           case 0b0011_011_100:
   726:           case 0b0011_100_100:
   727:           case 0b0011_101_100:
   728:           case 0b0011_110_100:
   729:           case 0b0011_111_100:
   730:             irpMoveToMNWord ();
   731:             break irpSwitch;
   732: 
   733:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   734:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   735:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   736:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   737:             //MOVE.W <ea>,(d16,Aq)                            |-|012346|-|-UUUU|-**00|DAM+-WXZPI|0011_qqq_101_mmm_rrr
   738:           case 0b0011_000_101:
   739:           case 0b0011_001_101:
   740:           case 0b0011_010_101:
   741:           case 0b0011_011_101:
   742:           case 0b0011_100_101:
   743:           case 0b0011_101_101:
   744:           case 0b0011_110_101:
   745:           case 0b0011_111_101:
   746:             irpMoveToMWWord ();
   747:             break irpSwitch;
   748: 
   749:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   750:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   751:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   752:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   753:             //MOVE.W <ea>,(d8,Aq,Rn.wl)                       |-|012346|-|-UUUU|-**00|DAM+-WXZPI|0011_qqq_110_mmm_rrr
   754:           case 0b0011_000_110:
   755:           case 0b0011_001_110:
   756:           case 0b0011_010_110:
   757:           case 0b0011_011_110:
   758:           case 0b0011_100_110:
   759:           case 0b0011_101_110:
   760:           case 0b0011_110_110:
   761:           case 0b0011_111_110:
   762:             irpMoveToMXWord ();
   763:             break irpSwitch;
   764: 
   765:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   766:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   767:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   768:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   769:             //MOVE.W <ea>,(xxx).W                             |-|012346|-|-UUUU|-**00|DAM+-WXZPI|0011_000_111_mmm_rrr
   770:           case 0b0011_000_111:
   771:             irpMoveToZWWord ();
   772:             break irpSwitch;
   773: 
   774:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   775:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   776:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   777:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   778:             //MOVE.W <ea>,(xxx).L                             |-|012346|-|-UUUU|-**00|DAM+-WXZPI|0011_001_111_mmm_rrr
   779:           case 0b0011_001_111:
   780:             irpMoveToZLWord ();
   781:             break irpSwitch;
   782: 
   783:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   784:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   785:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   786:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   787:             //NEGX.B <ea>                                     |-|012346|-|*UUUU|*****|D M+-WXZ  |0100_000_000_mmm_rrr
   788:           case 0b0100_000_000:
   789:             irpNegxByte ();
   790:             break irpSwitch;
   791: 
   792:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   793:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   794:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   795:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   796:             //NEGX.W <ea>                                     |-|012346|-|*UUUU|*****|D M+-WXZ  |0100_000_001_mmm_rrr
   797:           case 0b0100_000_001:
   798:             irpNegxWord ();
   799:             break irpSwitch;
   800: 
   801:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   802:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   803:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   804:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   805:             //NEGX.L <ea>                                     |-|012346|-|*UUUU|*****|D M+-WXZ  |0100_000_010_mmm_rrr
   806:           case 0b0100_000_010:
   807:             irpNegxLong ();
   808:             break irpSwitch;
   809: 
   810:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   811:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   812:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   813:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   814:             //MOVE.W SR,<ea>                                  |-|0-----|-|*****|-----|D M+-WXZ  |0100_000_011_mmm_rrr (68000 and 68008 read before move)
   815:           case 0b0100_000_011:
   816:             irpMoveFromSR ();
   817:             break irpSwitch;
   818: 
   819:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   820:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   821:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   822:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   823:             //CHK.W <ea>,Dq                                   |-|012346|-|-UUUU|-*UUU|D M+-WXZPI|0100_qqq_110_mmm_rrr
   824:           case 0b0100_000_110:
   825:           case 0b0100_001_110:
   826:           case 0b0100_010_110:
   827:           case 0b0100_011_110:
   828:           case 0b0100_100_110:
   829:           case 0b0100_101_110:
   830:           case 0b0100_110_110:
   831:           case 0b0100_111_110:
   832:             irpChkWord ();
   833:             break irpSwitch;
   834: 
   835:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   836:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   837:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   838:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   839:             //LEA.L <ea>,Aq                                   |-|012346|-|-----|-----|  M  WXZP |0100_qqq_111_mmm_rrr
   840:           case 0b0100_000_111:
   841:           case 0b0100_001_111:
   842:           case 0b0100_010_111:
   843:           case 0b0100_011_111:
   844:           case 0b0100_100_111:
   845:           case 0b0100_101_111:
   846:           case 0b0100_110_111:
   847:           case 0b0100_111_111:
   848:             irpLea ();
   849:             break irpSwitch;
   850: 
   851:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   852:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   853:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   854:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   855:             //CLR.B <ea>                                      |-|012346|-|-UUUU|-0100|D M+-WXZ  |0100_001_000_mmm_rrr (68000 and 68008 read before clear)
   856:           case 0b0100_001_000:
   857:             irpClrByte ();
   858:             break irpSwitch;
   859: 
   860:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   861:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   862:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   863:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   864:             //CLR.W <ea>                                      |-|012346|-|-UUUU|-0100|D M+-WXZ  |0100_001_001_mmm_rrr (68000 and 68008 read before clear)
   865:           case 0b0100_001_001:
   866:             irpClrWord ();
   867:             break irpSwitch;
   868: 
   869:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   870:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   871:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   872:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   873:             //CLR.L <ea>                                      |-|012346|-|-UUUU|-0100|D M+-WXZ  |0100_001_010_mmm_rrr (68000 and 68008 read before clear)
   874:           case 0b0100_001_010:
   875:             irpClrLong ();
   876:             break irpSwitch;
   877: 
   878:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   879:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   880:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   881:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   882:             //NEG.B <ea>                                      |-|012346|-|UUUUU|*****|D M+-WXZ  |0100_010_000_mmm_rrr
   883:           case 0b0100_010_000:
   884:             irpNegByte ();
   885:             break irpSwitch;
   886: 
   887:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   888:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   889:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   890:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   891:             //NEG.W <ea>                                      |-|012346|-|UUUUU|*****|D M+-WXZ  |0100_010_001_mmm_rrr
   892:           case 0b0100_010_001:
   893:             irpNegWord ();
   894:             break irpSwitch;
   895: 
   896:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   897:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   898:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   899:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   900:             //NEG.L <ea>                                      |-|012346|-|UUUUU|*****|D M+-WXZ  |0100_010_010_mmm_rrr
   901:           case 0b0100_010_010:
   902:             irpNegLong ();
   903:             break irpSwitch;
   904: 
   905:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   906:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   907:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   908:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   909:             //MOVE.W <ea>,CCR                                 |-|012346|-|UUUUU|*****|D M+-WXZPI|0100_010_011_mmm_rrr
   910:           case 0b0100_010_011:
   911:             irpMoveToCCR ();
   912:             break irpSwitch;
   913: 
   914:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   915:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   916:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   917:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   918:             //NOT.B <ea>                                      |-|012346|-|-UUUU|-**00|D M+-WXZ  |0100_011_000_mmm_rrr
   919:           case 0b0100_011_000:
   920:             irpNotByte ();
   921:             break irpSwitch;
   922: 
   923:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   924:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   925:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   926:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   927:             //NOT.W <ea>                                      |-|012346|-|-UUUU|-**00|D M+-WXZ  |0100_011_001_mmm_rrr
   928:           case 0b0100_011_001:
   929:             irpNotWord ();
   930:             break irpSwitch;
   931: 
   932:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   933:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   934:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   935:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   936:             //NOT.L <ea>                                      |-|012346|-|-UUUU|-**00|D M+-WXZ  |0100_011_010_mmm_rrr
   937:           case 0b0100_011_010:
   938:             irpNotLong ();
   939:             break irpSwitch;
   940: 
   941:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   942:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   943:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   944:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   945:             //MOVE.W <ea>,SR                                  |-|012346|P|UUUUU|*****|D M+-WXZPI|0100_011_011_mmm_rrr
   946:           case 0b0100_011_011:
   947:             irpMoveToSR ();
   948:             break irpSwitch;
   949: 
   950:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   951:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   952:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   953:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   954:             //NBCD.B <ea>                                     |-|012346|-|UUUUU|*U*U*|D M+-WXZ  |0100_100_000_mmm_rrr
   955:           case 0b0100_100_000:
   956:             irpNbcd ();
   957:             break irpSwitch;
   958: 
   959:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   960:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   961:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   962:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   963:             //SWAP.W Dr                                       |-|012346|-|-UUUU|-**00|D         |0100_100_001_000_rrr
   964:             //PEA.L <ea>                                      |-|012346|-|-----|-----|  M  WXZP |0100_100_001_mmm_rrr
   965:           case 0b0100_100_001:
   966:             irpPea ();
   967:             break irpSwitch;
   968: 
   969:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   970:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   971:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   972:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   973:             //EXT.W Dr                                        |-|012346|-|-UUUU|-**00|D         |0100_100_010_000_rrr
   974:             //MOVEM.W <list>,<ea>                             |-|012346|-|-----|-----|  M -WXZ  |0100_100_010_mmm_rrr-llllllllllllllll
   975:           case 0b0100_100_010:
   976:             irpMovemToMemWord ();
   977:             break irpSwitch;
   978: 
   979:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   980:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   981:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   982:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   983:             //EXT.L Dr                                        |-|012346|-|-UUUU|-**00|D         |0100_100_011_000_rrr
   984:             //MOVEM.L <list>,<ea>                             |-|012346|-|-----|-----|  M -WXZ  |0100_100_011_mmm_rrr-llllllllllllllll
   985:           case 0b0100_100_011:
   986:             irpMovemToMemLong ();
   987:             break irpSwitch;
   988: 
   989:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   990:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
   991:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
   992:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   993:             //TST.B <ea>                                      |-|012346|-|-UUUU|-**00|D M+-WXZ  |0100_101_000_mmm_rrr
   994:           case 0b0100_101_000:
   995:             irpTstByte ();
   996:             break irpSwitch;
   997: 
   998:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
   999:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1000:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1001:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1002:             //TST.W <ea>                                      |-|012346|-|-UUUU|-**00|D M+-WXZ  |0100_101_001_mmm_rrr
  1003:           case 0b0100_101_001:
  1004:             irpTstWord ();
  1005:             break irpSwitch;
  1006: 
  1007:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1008:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1009:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1010:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1011:             //TST.L <ea>                                      |-|012346|-|-UUUU|-**00|D M+-WXZ  |0100_101_010_mmm_rrr
  1012:           case 0b0100_101_010:
  1013:             irpTstLong ();
  1014:             break irpSwitch;
  1015: 
  1016:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1017:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1018:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1019:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1020:             //TAS.B <ea>                                      |-|012346|-|-UUUU|-**00|D M+-WXZ  |0100_101_011_mmm_rrr
  1021:             //ILLEGAL                                         |-|012346|-|-----|-----|          |0100_101_011_111_100
  1022:           case 0b0100_101_011:
  1023:             irpTas ();
  1024:             break irpSwitch;
  1025: 
  1026:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1027:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1028:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1029:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1030:             //SATS.L Dr                                       |-|------|-|-UUUU|-**00|D         |0100_110_010_000_rrr (ISA_B)
  1031:             //MOVEM.W <ea>,<list>                             |-|012346|-|-----|-----|  M+ WXZP |0100_110_010_mmm_rrr-llllllllllllllll
  1032:           case 0b0100_110_010:
  1033:             irpMovemToRegWord ();
  1034:             break irpSwitch;
  1035: 
  1036:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1037:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1038:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1039:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1040:             //MOVEM.L <ea>,<list>                             |-|012346|-|-----|-----|  M+ WXZP |0100_110_011_mmm_rrr-llllllllllllllll
  1041:           case 0b0100_110_011:
  1042:             irpMovemToRegLong ();
  1043:             break irpSwitch;
  1044: 
  1045:           case 0b0100_111_001:
  1046:             switch (XEiJ.regOC & 0b111_111) {
  1047: 
  1048:               //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1049:               //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1050:               //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1051:               //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1052:               //TRAP #<vector>                                  |-|012346|-|-----|-----|          |0100_111_001_00v_vvv
  1053:             case 0b000_000:
  1054:             case 0b000_001:
  1055:             case 0b000_010:
  1056:             case 0b000_011:
  1057:             case 0b000_100:
  1058:             case 0b000_101:
  1059:             case 0b000_110:
  1060:             case 0b000_111:
  1061:             case 0b001_000:
  1062:             case 0b001_001:
  1063:             case 0b001_010:
  1064:             case 0b001_011:
  1065:             case 0b001_100:
  1066:             case 0b001_101:
  1067:             case 0b001_110:
  1068:               irpTrap ();
  1069:               break irpSwitch;
  1070:             case 0b001_111:
  1071:               irpTrap15 ();
  1072:               break irpSwitch;
  1073: 
  1074:               //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1075:               //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1076:               //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1077:               //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1078:               //LINK.W Ar,#<data>                               |-|012346|-|-----|-----|          |0100_111_001_010_rrr-{data}
  1079:             case 0b010_000:
  1080:             case 0b010_001:
  1081:             case 0b010_010:
  1082:             case 0b010_011:
  1083:             case 0b010_100:
  1084:             case 0b010_101:
  1085:             case 0b010_110:
  1086:             case 0b010_111:
  1087:               irpLinkWord ();
  1088:               break irpSwitch;
  1089: 
  1090:               //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1091:               //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1092:               //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1093:               //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1094:               //UNLK Ar                                         |-|012346|-|-----|-----|          |0100_111_001_011_rrr
  1095:             case 0b011_000:
  1096:             case 0b011_001:
  1097:             case 0b011_010:
  1098:             case 0b011_011:
  1099:             case 0b011_100:
  1100:             case 0b011_101:
  1101:             case 0b011_110:
  1102:             case 0b011_111:
  1103:               irpUnlk ();
  1104:               break irpSwitch;
  1105: 
  1106:               //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1107:               //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1108:               //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1109:               //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1110:               //MOVE.L Ar,USP                                   |-|012346|P|-----|-----|          |0100_111_001_100_rrr
  1111:             case 0b100_000:
  1112:             case 0b100_001:
  1113:             case 0b100_010:
  1114:             case 0b100_011:
  1115:             case 0b100_100:
  1116:             case 0b100_101:
  1117:             case 0b100_110:
  1118:             case 0b100_111:
  1119:               irpMoveToUsp ();
  1120:               break irpSwitch;
  1121: 
  1122:               //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1123:               //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1124:               //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1125:               //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1126:               //MOVE.L USP,Ar                                   |-|012346|P|-----|-----|          |0100_111_001_101_rrr
  1127:             case 0b101_000:
  1128:             case 0b101_001:
  1129:             case 0b101_010:
  1130:             case 0b101_011:
  1131:             case 0b101_100:
  1132:             case 0b101_101:
  1133:             case 0b101_110:
  1134:             case 0b101_111:
  1135:               irpMoveFromUsp ();
  1136:               break irpSwitch;
  1137: 
  1138:               //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1139:               //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1140:               //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1141:               //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1142:               //RESET                                           |-|012346|P|-----|-----|          |0100_111_001_110_000
  1143:             case 0b110_000:
  1144:               irpReset ();
  1145:               break irpSwitch;
  1146: 
  1147:               //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1148:               //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1149:               //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1150:               //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1151:               //NOP                                             |-|012346|-|-----|-----|          |0100_111_001_110_001
  1152:             case 0b110_001:
  1153:               irpNop ();
  1154:               break irpSwitch;
  1155: 
  1156:               //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1157:               //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1158:               //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1159:               //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1160:               //STOP #<data>                                    |-|012346|P|UUUUU|*****|          |0100_111_001_110_010-{data}
  1161:             case 0b110_010:
  1162:               irpStop ();
  1163:               break irpSwitch;
  1164: 
  1165:               //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1166:               //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1167:               //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1168:               //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1169:               //RTE                                             |-|012346|P|UUUUU|*****|          |0100_111_001_110_011
  1170:             case 0b110_011:
  1171:               irpRte ();
  1172:               break irpSwitch;
  1173: 
  1174:               //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1175:               //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1176:               //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1177:               //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1178:               //RTS                                             |-|012346|-|-----|-----|          |0100_111_001_110_101
  1179:             case 0b110_101:
  1180:               irpRts ();
  1181:               break irpSwitch;
  1182: 
  1183:               //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1184:               //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1185:               //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1186:               //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1187:               //TRAPV                                           |-|012346|-|---*-|-----|          |0100_111_001_110_110
  1188:             case 0b110_110:
  1189:               irpTrapv ();
  1190:               break irpSwitch;
  1191: 
  1192:               //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1193:               //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1194:               //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1195:               //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1196:               //RTR                                             |-|012346|-|UUUUU|*****|          |0100_111_001_110_111
  1197:             case 0b110_111:
  1198:               irpRtr ();
  1199:               break irpSwitch;
  1200: 
  1201:             default:
  1202:               irpIllegal ();
  1203: 
  1204:             }  //switch XEiJ.regOC & 0b111_111
  1205:             break irpSwitch;
  1206: 
  1207:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1208:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1209:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1210:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1211:             //JSR <ea>                                        |-|012346|-|-----|-----|  M  WXZP |0100_111_010_mmm_rrr
  1212:             //JBSR.L <label>                                  |A|012346|-|-----|-----|          |0100_111_010_111_001-{address}       [JSR <label>]
  1213:           case 0b0100_111_010:
  1214:             irpJsr ();
  1215:             break irpSwitch;
  1216: 
  1217:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1218:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1219:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1220:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1221:             //JMP <ea>                                        |-|012346|-|-----|-----|  M  WXZP |0100_111_011_mmm_rrr
  1222:             //JBRA.L <label>                                  |A|012346|-|-----|-----|          |0100_111_011_111_001-{address}       [JMP <label>]
  1223:           case 0b0100_111_011:
  1224:             irpJmp ();
  1225:             break irpSwitch;
  1226: 
  1227:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1228:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1229:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1230:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1231:             //ADDQ.B #<data>,<ea>                             |-|012346|-|UUUUU|*****|D M+-WXZ  |0101_qqq_000_mmm_rrr
  1232:             //INC.B <ea>                                      |A|012346|-|UUUUU|*****|D M+-WXZ  |0101_001_000_mmm_rrr [ADDQ.B #1,<ea>]
  1233:           case 0b0101_000_000:
  1234:           case 0b0101_001_000:
  1235:           case 0b0101_010_000:
  1236:           case 0b0101_011_000:
  1237:           case 0b0101_100_000:
  1238:           case 0b0101_101_000:
  1239:           case 0b0101_110_000:
  1240:           case 0b0101_111_000:
  1241:             irpAddqByte ();
  1242:             break irpSwitch;
  1243: 
  1244:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1245:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1246:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1247:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1248:             //ADDQ.W #<data>,<ea>                             |-|012346|-|UUUUU|*****|D M+-WXZ  |0101_qqq_001_mmm_rrr
  1249:             //ADDQ.W #<data>,Ar                               |-|012346|-|-----|-----| A        |0101_qqq_001_001_rrr
  1250:             //INC.W <ea>                                      |A|012346|-|UUUUU|*****|D M+-WXZ  |0101_001_001_mmm_rrr [ADDQ.W #1,<ea>]
  1251:             //INC.W Ar                                        |A|012346|-|-----|-----| A        |0101_001_001_001_rrr [ADDQ.W #1,Ar]
  1252:           case 0b0101_000_001:
  1253:           case 0b0101_001_001:
  1254:           case 0b0101_010_001:
  1255:           case 0b0101_011_001:
  1256:           case 0b0101_100_001:
  1257:           case 0b0101_101_001:
  1258:           case 0b0101_110_001:
  1259:           case 0b0101_111_001:
  1260:             irpAddqWord ();
  1261:             break irpSwitch;
  1262: 
  1263:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1264:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1265:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1266:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1267:             //ADDQ.L #<data>,<ea>                             |-|012346|-|UUUUU|*****|D M+-WXZ  |0101_qqq_010_mmm_rrr
  1268:             //ADDQ.L #<data>,Ar                               |-|012346|-|-----|-----| A        |0101_qqq_010_001_rrr
  1269:             //INC.L <ea>                                      |A|012346|-|UUUUU|*****|D M+-WXZ  |0101_001_010_mmm_rrr [ADDQ.L #1,<ea>]
  1270:             //INC.L Ar                                        |A|012346|-|-----|-----| A        |0101_001_010_001_rrr [ADDQ.L #1,Ar]
  1271:           case 0b0101_000_010:
  1272:           case 0b0101_001_010:
  1273:           case 0b0101_010_010:
  1274:           case 0b0101_011_010:
  1275:           case 0b0101_100_010:
  1276:           case 0b0101_101_010:
  1277:           case 0b0101_110_010:
  1278:           case 0b0101_111_010:
  1279:             irpAddqLong ();
  1280:             break irpSwitch;
  1281: 
  1282:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1283:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1284:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1285:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1286:             //ST.B <ea>                                       |-|012346|-|-----|-----|D M+-WXZ  |0101_000_011_mmm_rrr
  1287:             //SNF.B <ea>                                      |A|012346|-|-----|-----|D M+-WXZ  |0101_000_011_mmm_rrr [ST.B <ea>]
  1288:             //DBT.W Dr,<label>                                |-|012346|-|-----|-----|          |0101_000_011_001_rrr-{offset}
  1289:             //DBNF.W Dr,<label>                               |A|012346|-|-----|-----|          |0101_000_011_001_rrr-{offset}        [DBT.W Dr,<label>]
  1290:           case 0b0101_000_011:
  1291:             irpSt ();
  1292:             break irpSwitch;
  1293: 
  1294:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1295:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1296:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1297:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1298:             //SUBQ.B #<data>,<ea>                             |-|012346|-|UUUUU|*****|D M+-WXZ  |0101_qqq_100_mmm_rrr
  1299:             //DEC.B <ea>                                      |A|012346|-|UUUUU|*****|D M+-WXZ  |0101_001_100_mmm_rrr [SUBQ.B #1,<ea>]
  1300:           case 0b0101_000_100:
  1301:           case 0b0101_001_100:
  1302:           case 0b0101_010_100:
  1303:           case 0b0101_011_100:
  1304:           case 0b0101_100_100:
  1305:           case 0b0101_101_100:
  1306:           case 0b0101_110_100:
  1307:           case 0b0101_111_100:
  1308:             irpSubqByte ();
  1309:             break irpSwitch;
  1310: 
  1311:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1312:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1313:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1314:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1315:             //SUBQ.W #<data>,<ea>                             |-|012346|-|UUUUU|*****|D M+-WXZ  |0101_qqq_101_mmm_rrr
  1316:             //SUBQ.W #<data>,Ar                               |-|012346|-|-----|-----| A        |0101_qqq_101_001_rrr
  1317:             //DEC.W <ea>                                      |A|012346|-|UUUUU|*****|D M+-WXZ  |0101_001_101_mmm_rrr [SUBQ.W #1,<ea>]
  1318:             //DEC.W Ar                                        |A|012346|-|-----|-----| A        |0101_001_101_001_rrr [SUBQ.W #1,Ar]
  1319:           case 0b0101_000_101:
  1320:           case 0b0101_001_101:
  1321:           case 0b0101_010_101:
  1322:           case 0b0101_011_101:
  1323:           case 0b0101_100_101:
  1324:           case 0b0101_101_101:
  1325:           case 0b0101_110_101:
  1326:           case 0b0101_111_101:
  1327:             irpSubqWord ();
  1328:             break irpSwitch;
  1329: 
  1330:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1331:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1332:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1333:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1334:             //SUBQ.L #<data>,<ea>                             |-|012346|-|UUUUU|*****|D M+-WXZ  |0101_qqq_110_mmm_rrr
  1335:             //SUBQ.L #<data>,Ar                               |-|012346|-|-----|-----| A        |0101_qqq_110_001_rrr
  1336:             //DEC.L <ea>                                      |A|012346|-|UUUUU|*****|D M+-WXZ  |0101_001_110_mmm_rrr [SUBQ.L #1,<ea>]
  1337:             //DEC.L Ar                                        |A|012346|-|-----|-----| A        |0101_001_110_001_rrr [SUBQ.L #1,Ar]
  1338:           case 0b0101_000_110:
  1339:           case 0b0101_001_110:
  1340:           case 0b0101_010_110:
  1341:           case 0b0101_011_110:
  1342:           case 0b0101_100_110:
  1343:           case 0b0101_101_110:
  1344:           case 0b0101_110_110:
  1345:           case 0b0101_111_110:
  1346:             irpSubqLong ();
  1347:             break irpSwitch;
  1348: 
  1349:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1350:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1351:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1352:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1353:             //SF.B <ea>                                       |-|012346|-|-----|-----|D M+-WXZ  |0101_000_111_mmm_rrr
  1354:             //SNT.B <ea>                                      |A|012346|-|-----|-----|D M+-WXZ  |0101_000_111_mmm_rrr [SF.B <ea>]
  1355:             //DBF.W Dr,<label>                                |-|012346|-|-----|-----|          |0101_000_111_001_rrr-{offset}
  1356:             //DBNT.W Dr,<label>                               |A|012346|-|-----|-----|          |0101_000_111_001_rrr-{offset}        [DBF.W Dr,<label>]
  1357:             //DBRA.W Dr,<label>                               |A|012346|-|-----|-----|          |0101_000_111_001_rrr-{offset}        [DBF.W Dr,<label>]
  1358:           case 0b0101_000_111:
  1359:             irpSf ();
  1360:             break irpSwitch;
  1361: 
  1362:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1363:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1364:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1365:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1366:             //SHI.B <ea>                                      |-|012346|-|--*-*|-----|D M+-WXZ  |0101_001_011_mmm_rrr
  1367:             //SNLS.B <ea>                                     |A|012346|-|--*-*|-----|D M+-WXZ  |0101_001_011_mmm_rrr [SHI.B <ea>]
  1368:             //DBHI.W Dr,<label>                               |-|012346|-|--*-*|-----|          |0101_001_011_001_rrr-{offset}
  1369:             //DBNLS.W Dr,<label>                              |A|012346|-|--*-*|-----|          |0101_001_011_001_rrr-{offset}        [DBHI.W Dr,<label>]
  1370:           case 0b0101_001_011:
  1371:             irpShi ();
  1372:             break irpSwitch;
  1373: 
  1374:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1375:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1376:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1377:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1378:             //SLS.B <ea>                                      |-|012346|-|--*-*|-----|D M+-WXZ  |0101_001_111_mmm_rrr
  1379:             //SNHI.B <ea>                                     |A|012346|-|--*-*|-----|D M+-WXZ  |0101_001_111_mmm_rrr [SLS.B <ea>]
  1380:             //DBLS.W Dr,<label>                               |-|012346|-|--*-*|-----|          |0101_001_111_001_rrr-{offset}
  1381:             //DBNHI.W Dr,<label>                              |A|012346|-|--*-*|-----|          |0101_001_111_001_rrr-{offset}        [DBLS.W Dr,<label>]
  1382:           case 0b0101_001_111:
  1383:             irpSls ();
  1384:             break irpSwitch;
  1385: 
  1386:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1387:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1388:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1389:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1390:             //SCC.B <ea>                                      |-|012346|-|----*|-----|D M+-WXZ  |0101_010_011_mmm_rrr
  1391:             //SHS.B <ea>                                      |A|012346|-|----*|-----|D M+-WXZ  |0101_010_011_mmm_rrr [SCC.B <ea>]
  1392:             //SNCS.B <ea>                                     |A|012346|-|----*|-----|D M+-WXZ  |0101_010_011_mmm_rrr [SCC.B <ea>]
  1393:             //SNLO.B <ea>                                     |A|012346|-|----*|-----|D M+-WXZ  |0101_010_011_mmm_rrr [SCC.B <ea>]
  1394:             //DBCC.W Dr,<label>                               |-|012346|-|----*|-----|          |0101_010_011_001_rrr-{offset}
  1395:             //DBHS.W Dr,<label>                               |A|012346|-|----*|-----|          |0101_010_011_001_rrr-{offset}        [DBCC.W Dr,<label>]
  1396:             //DBNCS.W Dr,<label>                              |A|012346|-|----*|-----|          |0101_010_011_001_rrr-{offset}        [DBCC.W Dr,<label>]
  1397:             //DBNLO.W Dr,<label>                              |A|012346|-|----*|-----|          |0101_010_011_001_rrr-{offset}        [DBCC.W Dr,<label>]
  1398:           case 0b0101_010_011:
  1399:             irpShs ();
  1400:             break irpSwitch;
  1401: 
  1402:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1403:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1404:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1405:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1406:             //SCS.B <ea>                                      |-|012346|-|----*|-----|D M+-WXZ  |0101_010_111_mmm_rrr
  1407:             //SLO.B <ea>                                      |A|012346|-|----*|-----|D M+-WXZ  |0101_010_111_mmm_rrr [SCS.B <ea>]
  1408:             //SNCC.B <ea>                                     |A|012346|-|----*|-----|D M+-WXZ  |0101_010_111_mmm_rrr [SCS.B <ea>]
  1409:             //SNHS.B <ea>                                     |A|012346|-|----*|-----|D M+-WXZ  |0101_010_111_mmm_rrr [SCS.B <ea>]
  1410:             //DBCS.W Dr,<label>                               |-|012346|-|----*|-----|          |0101_010_111_001_rrr-{offset}
  1411:             //DBLO.W Dr,<label>                               |A|012346|-|----*|-----|          |0101_010_111_001_rrr-{offset}        [DBCS.W Dr,<label>]
  1412:             //DBNCC.W Dr,<label>                              |A|012346|-|----*|-----|          |0101_010_111_001_rrr-{offset}        [DBCS.W Dr,<label>]
  1413:             //DBNHS.W Dr,<label>                              |A|012346|-|----*|-----|          |0101_010_111_001_rrr-{offset}        [DBCS.W Dr,<label>]
  1414:           case 0b0101_010_111:
  1415:             irpSlo ();
  1416:             break irpSwitch;
  1417: 
  1418:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1419:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1420:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1421:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1422:             //SNE.B <ea>                                      |-|012346|-|--*--|-----|D M+-WXZ  |0101_011_011_mmm_rrr
  1423:             //SNEQ.B <ea>                                     |A|012346|-|--*--|-----|D M+-WXZ  |0101_011_011_mmm_rrr [SNE.B <ea>]
  1424:             //SNZ.B <ea>                                      |A|012346|-|--*--|-----|D M+-WXZ  |0101_011_011_mmm_rrr [SNE.B <ea>]
  1425:             //SNZE.B <ea>                                     |A|012346|-|--*--|-----|D M+-WXZ  |0101_011_011_mmm_rrr [SNE.B <ea>]
  1426:             //DBNE.W Dr,<label>                               |-|012346|-|--*--|-----|          |0101_011_011_001_rrr-{offset}
  1427:             //DBNEQ.W Dr,<label>                              |A|012346|-|--*--|-----|          |0101_011_011_001_rrr-{offset}        [DBNE.W Dr,<label>]
  1428:             //DBNZ.W Dr,<label>                               |A|012346|-|--*--|-----|          |0101_011_011_001_rrr-{offset}        [DBNE.W Dr,<label>]
  1429:             //DBNZE.W Dr,<label>                              |A|012346|-|--*--|-----|          |0101_011_011_001_rrr-{offset}        [DBNE.W Dr,<label>]
  1430:           case 0b0101_011_011:
  1431:             irpSne ();
  1432:             break irpSwitch;
  1433: 
  1434:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1435:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1436:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1437:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1438:             //SEQ.B <ea>                                      |-|012346|-|--*--|-----|D M+-WXZ  |0101_011_111_mmm_rrr
  1439:             //SNNE.B <ea>                                     |A|012346|-|--*--|-----|D M+-WXZ  |0101_011_111_mmm_rrr [SEQ.B <ea>]
  1440:             //SNNZ.B <ea>                                     |A|012346|-|--*--|-----|D M+-WXZ  |0101_011_111_mmm_rrr [SEQ.B <ea>]
  1441:             //SZE.B <ea>                                      |A|012346|-|--*--|-----|D M+-WXZ  |0101_011_111_mmm_rrr [SEQ.B <ea>]
  1442:             //DBEQ.W Dr,<label>                               |-|012346|-|--*--|-----|          |0101_011_111_001_rrr-{offset}
  1443:             //DBNNE.W Dr,<label>                              |A|012346|-|--*--|-----|          |0101_011_111_001_rrr-{offset}        [DBEQ.W Dr,<label>]
  1444:             //DBNNZ.W Dr,<label>                              |A|012346|-|--*--|-----|          |0101_011_111_001_rrr-{offset}        [DBEQ.W Dr,<label>]
  1445:             //DBZE.W Dr,<label>                               |A|012346|-|--*--|-----|          |0101_011_111_001_rrr-{offset}        [DBEQ.W Dr,<label>]
  1446:           case 0b0101_011_111:
  1447:             irpSeq ();
  1448:             break irpSwitch;
  1449: 
  1450:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1451:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1452:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1453:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1454:             //SVC.B <ea>                                      |-|012346|-|---*-|-----|D M+-WXZ  |0101_100_011_mmm_rrr
  1455:             //SNVS.B <ea>                                     |A|012346|-|---*-|-----|D M+-WXZ  |0101_100_011_mmm_rrr [SVC.B <ea>]
  1456:             //DBVC.W Dr,<label>                               |-|012346|-|---*-|-----|          |0101_100_011_001_rrr-{offset}
  1457:             //DBNVS.W Dr,<label>                              |A|012346|-|---*-|-----|          |0101_100_011_001_rrr-{offset}        [DBVC.W Dr,<label>]
  1458:           case 0b0101_100_011:
  1459:             irpSvc ();
  1460:             break irpSwitch;
  1461: 
  1462:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1463:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1464:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1465:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1466:             //SVS.B <ea>                                      |-|012346|-|---*-|-----|D M+-WXZ  |0101_100_111_mmm_rrr
  1467:             //SNVC.B <ea>                                     |A|012346|-|---*-|-----|D M+-WXZ  |0101_100_111_mmm_rrr [SVS.B <ea>]
  1468:             //DBVS.W Dr,<label>                               |-|012346|-|---*-|-----|          |0101_100_111_001_rrr-{offset}
  1469:             //DBNVC.W Dr,<label>                              |A|012346|-|---*-|-----|          |0101_100_111_001_rrr-{offset}        [DBVS.W Dr,<label>]
  1470:           case 0b0101_100_111:
  1471:             irpSvs ();
  1472:             break irpSwitch;
  1473: 
  1474:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1475:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1476:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1477:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1478:             //SPL.B <ea>                                      |-|012346|-|-*---|-----|D M+-WXZ  |0101_101_011_mmm_rrr
  1479:             //SNMI.B <ea>                                     |A|012346|-|-*---|-----|D M+-WXZ  |0101_101_011_mmm_rrr [SPL.B <ea>]
  1480:             //DBPL.W Dr,<label>                               |-|012346|-|-*---|-----|          |0101_101_011_001_rrr-{offset}
  1481:             //DBNMI.W Dr,<label>                              |A|012346|-|-*---|-----|          |0101_101_011_001_rrr-{offset}        [DBPL.W Dr,<label>]
  1482:           case 0b0101_101_011:
  1483:             irpSpl ();
  1484:             break irpSwitch;
  1485: 
  1486:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1487:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1488:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1489:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1490:             //SMI.B <ea>                                      |-|012346|-|-*---|-----|D M+-WXZ  |0101_101_111_mmm_rrr
  1491:             //SNPL.B <ea>                                     |A|012346|-|-*---|-----|D M+-WXZ  |0101_101_111_mmm_rrr [SMI.B <ea>]
  1492:             //DBMI.W Dr,<label>                               |-|012346|-|-*---|-----|          |0101_101_111_001_rrr-{offset}
  1493:             //DBNPL.W Dr,<label>                              |A|012346|-|-*---|-----|          |0101_101_111_001_rrr-{offset}        [DBMI.W Dr,<label>]
  1494:           case 0b0101_101_111:
  1495:             irpSmi ();
  1496:             break irpSwitch;
  1497: 
  1498:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1499:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1500:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1501:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1502:             //SGE.B <ea>                                      |-|012346|-|-*-*-|-----|D M+-WXZ  |0101_110_011_mmm_rrr
  1503:             //SNLT.B <ea>                                     |A|012346|-|-*-*-|-----|D M+-WXZ  |0101_110_011_mmm_rrr [SGE.B <ea>]
  1504:             //DBGE.W Dr,<label>                               |-|012346|-|-*-*-|-----|          |0101_110_011_001_rrr-{offset}
  1505:             //DBNLT.W Dr,<label>                              |A|012346|-|-*-*-|-----|          |0101_110_011_001_rrr-{offset}        [DBGE.W Dr,<label>]
  1506:           case 0b0101_110_011:
  1507:             irpSge ();
  1508:             break irpSwitch;
  1509: 
  1510:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1511:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1512:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1513:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1514:             //SLT.B <ea>                                      |-|012346|-|-*-*-|-----|D M+-WXZ  |0101_110_111_mmm_rrr
  1515:             //SNGE.B <ea>                                     |A|012346|-|-*-*-|-----|D M+-WXZ  |0101_110_111_mmm_rrr [SLT.B <ea>]
  1516:             //DBLT.W Dr,<label>                               |-|012346|-|-*-*-|-----|          |0101_110_111_001_rrr-{offset}
  1517:             //DBNGE.W Dr,<label>                              |A|012346|-|-*-*-|-----|          |0101_110_111_001_rrr-{offset}        [DBLT.W Dr,<label>]
  1518:           case 0b0101_110_111:
  1519:             irpSlt ();
  1520:             break irpSwitch;
  1521: 
  1522:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1523:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1524:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1525:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1526:             //SGT.B <ea>                                      |-|012346|-|-***-|-----|D M+-WXZ  |0101_111_011_mmm_rrr
  1527:             //SNLE.B <ea>                                     |A|012346|-|-***-|-----|D M+-WXZ  |0101_111_011_mmm_rrr [SGT.B <ea>]
  1528:             //DBGT.W Dr,<label>                               |-|012346|-|-***-|-----|          |0101_111_011_001_rrr-{offset}
  1529:             //DBNLE.W Dr,<label>                              |A|012346|-|-***-|-----|          |0101_111_011_001_rrr-{offset}        [DBGT.W Dr,<label>]
  1530:           case 0b0101_111_011:
  1531:             irpSgt ();
  1532:             break irpSwitch;
  1533: 
  1534:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1535:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1536:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1537:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1538:             //SLE.B <ea>                                      |-|012346|-|-***-|-----|D M+-WXZ  |0101_111_111_mmm_rrr
  1539:             //SNGT.B <ea>                                     |A|012346|-|-***-|-----|D M+-WXZ  |0101_111_111_mmm_rrr [SLE.B <ea>]
  1540:             //DBLE.W Dr,<label>                               |-|012346|-|-***-|-----|          |0101_111_111_001_rrr-{offset}
  1541:             //DBNGT.W Dr,<label>                              |A|012346|-|-***-|-----|          |0101_111_111_001_rrr-{offset}        [DBLE.W Dr,<label>]
  1542:           case 0b0101_111_111:
  1543:             irpSle ();
  1544:             break irpSwitch;
  1545: 
  1546:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1547:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1548:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1549:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1550:             //BRA.W <label>                                   |-|012346|-|-----|-----|          |0110_000_000_000_000-{offset}
  1551:             //JBRA.W <label>                                  |A|012346|-|-----|-----|          |0110_000_000_000_000-{offset}        [BRA.W <label>]
  1552:             //BRA.S <label>                                   |-|012346|-|-----|-----|          |0110_000_000_sss_sss (s is not equal to 0)
  1553:             //JBRA.S <label>                                  |A|012346|-|-----|-----|          |0110_000_000_sss_sss (s is not equal to 0)   [BRA.S <label>]
  1554:           case 0b0110_000_000:
  1555:             irpBrasw ();
  1556:             break irpSwitch;
  1557: 
  1558:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1559:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1560:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1561:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1562:             //BRA.S <label>                                   |-|012346|-|-----|-----|          |0110_000_001_sss_sss
  1563:             //JBRA.S <label>                                  |A|012346|-|-----|-----|          |0110_000_001_sss_sss [BRA.S <label>]
  1564:           case 0b0110_000_001:
  1565:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1566:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1567:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1568:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1569:             //BRA.S <label>                                   |-|012346|-|-----|-----|          |0110_000_010_sss_sss
  1570:             //JBRA.S <label>                                  |A|012346|-|-----|-----|          |0110_000_010_sss_sss [BRA.S <label>]
  1571:           case 0b0110_000_010:
  1572:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1573:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1574:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1575:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1576:             //BRA.S <label>                                   |-|01----|-|-----|-----|          |0110_000_011_sss_sss
  1577:             //JBRA.S <label>                                  |A|01----|-|-----|-----|          |0110_000_011_sss_sss [BRA.S <label>]
  1578:           case 0b0110_000_011:
  1579:             irpBras ();
  1580:             break irpSwitch;
  1581: 
  1582:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1583:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1584:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1585:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1586:             //BSR.W <label>                                   |-|012346|-|-----|-----|          |0110_000_100_000_000-{offset}
  1587:             //JBSR.W <label>                                  |A|012346|-|-----|-----|          |0110_000_100_000_000-{offset}        [BSR.W <label>]
  1588:             //BSR.S <label>                                   |-|012346|-|-----|-----|          |0110_000_100_sss_sss (s is not equal to 0)
  1589:             //JBSR.S <label>                                  |A|012346|-|-----|-----|          |0110_000_100_sss_sss (s is not equal to 0)   [BSR.S <label>]
  1590:           case 0b0110_000_100:
  1591:             irpBsrsw ();
  1592:             break irpSwitch;
  1593: 
  1594:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1595:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1596:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1597:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1598:             //BSR.S <label>                                   |-|012346|-|-----|-----|          |0110_000_101_sss_sss
  1599:             //JBSR.S <label>                                  |A|012346|-|-----|-----|          |0110_000_101_sss_sss [BSR.S <label>]
  1600:           case 0b0110_000_101:
  1601:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1602:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1603:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1604:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1605:             //BSR.S <label>                                   |-|012346|-|-----|-----|          |0110_000_110_sss_sss
  1606:             //JBSR.S <label>                                  |A|012346|-|-----|-----|          |0110_000_110_sss_sss [BSR.S <label>]
  1607:           case 0b0110_000_110:
  1608:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1609:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1610:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1611:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1612:             //BSR.S <label>                                   |-|01----|-|-----|-----|          |0110_000_111_sss_sss
  1613:             //JBSR.S <label>                                  |A|01----|-|-----|-----|          |0110_000_111_sss_sss [BSR.S <label>]
  1614:           case 0b0110_000_111:
  1615:             irpBsrs ();
  1616:             break irpSwitch;
  1617: 
  1618:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1619:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1620:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1621:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1622:             //BHI.W <label>                                   |-|012346|-|--*-*|-----|          |0110_001_000_000_000-{offset}
  1623:             //BNLS.W <label>                                  |A|012346|-|--*-*|-----|          |0110_001_000_000_000-{offset}        [BHI.W <label>]
  1624:             //JBHI.W <label>                                  |A|012346|-|--*-*|-----|          |0110_001_000_000_000-{offset}        [BHI.W <label>]
  1625:             //JBNLS.W <label>                                 |A|012346|-|--*-*|-----|          |0110_001_000_000_000-{offset}        [BHI.W <label>]
  1626:             //BHI.S <label>                                   |-|012346|-|--*-*|-----|          |0110_001_000_sss_sss (s is not equal to 0)
  1627:             //BNLS.S <label>                                  |A|012346|-|--*-*|-----|          |0110_001_000_sss_sss (s is not equal to 0)   [BHI.S <label>]
  1628:             //JBHI.S <label>                                  |A|012346|-|--*-*|-----|          |0110_001_000_sss_sss (s is not equal to 0)   [BHI.S <label>]
  1629:             //JBNLS.S <label>                                 |A|012346|-|--*-*|-----|          |0110_001_000_sss_sss (s is not equal to 0)   [BHI.S <label>]
  1630:             //JBLS.L <label>                                  |A|012346|-|--*-*|-----|          |0110_001_000_000_110-0100111011111001-{address}      [BHI.S (*)+8;JMP <label>]
  1631:             //JBNHI.L <label>                                 |A|012346|-|--*-*|-----|          |0110_001_000_000_110-0100111011111001-{address}      [BHI.S (*)+8;JMP <label>]
  1632:           case 0b0110_001_000:
  1633:             irpBhisw ();
  1634:             break irpSwitch;
  1635: 
  1636:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1637:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1638:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1639:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1640:             //BHI.S <label>                                   |-|012346|-|--*-*|-----|          |0110_001_001_sss_sss
  1641:             //BNLS.S <label>                                  |A|012346|-|--*-*|-----|          |0110_001_001_sss_sss [BHI.S <label>]
  1642:             //JBHI.S <label>                                  |A|012346|-|--*-*|-----|          |0110_001_001_sss_sss [BHI.S <label>]
  1643:             //JBNLS.S <label>                                 |A|012346|-|--*-*|-----|          |0110_001_001_sss_sss [BHI.S <label>]
  1644:           case 0b0110_001_001:
  1645:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1646:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1647:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1648:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1649:             //BHI.S <label>                                   |-|012346|-|--*-*|-----|          |0110_001_010_sss_sss
  1650:             //BNLS.S <label>                                  |A|012346|-|--*-*|-----|          |0110_001_010_sss_sss [BHI.S <label>]
  1651:             //JBHI.S <label>                                  |A|012346|-|--*-*|-----|          |0110_001_010_sss_sss [BHI.S <label>]
  1652:             //JBNLS.S <label>                                 |A|012346|-|--*-*|-----|          |0110_001_010_sss_sss [BHI.S <label>]
  1653:           case 0b0110_001_010:
  1654:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1655:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1656:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1657:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1658:             //BHI.S <label>                                   |-|01----|-|--*-*|-----|          |0110_001_011_sss_sss
  1659:             //BNLS.S <label>                                  |A|01----|-|--*-*|-----|          |0110_001_011_sss_sss [BHI.S <label>]
  1660:             //JBHI.S <label>                                  |A|01----|-|--*-*|-----|          |0110_001_011_sss_sss [BHI.S <label>]
  1661:             //JBNLS.S <label>                                 |A|01----|-|--*-*|-----|          |0110_001_011_sss_sss [BHI.S <label>]
  1662:           case 0b0110_001_011:
  1663:             irpBhis ();
  1664:             break irpSwitch;
  1665: 
  1666:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1667:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1668:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1669:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1670:             //BLS.W <label>                                   |-|012346|-|--*-*|-----|          |0110_001_100_000_000-{offset}
  1671:             //BNHI.W <label>                                  |A|012346|-|--*-*|-----|          |0110_001_100_000_000-{offset}        [BLS.W <label>]
  1672:             //JBLS.W <label>                                  |A|012346|-|--*-*|-----|          |0110_001_100_000_000-{offset}        [BLS.W <label>]
  1673:             //JBNHI.W <label>                                 |A|012346|-|--*-*|-----|          |0110_001_100_000_000-{offset}        [BLS.W <label>]
  1674:             //BLS.S <label>                                   |-|012346|-|--*-*|-----|          |0110_001_100_sss_sss (s is not equal to 0)
  1675:             //BNHI.S <label>                                  |A|012346|-|--*-*|-----|          |0110_001_100_sss_sss (s is not equal to 0)   [BLS.S <label>]
  1676:             //JBLS.S <label>                                  |A|012346|-|--*-*|-----|          |0110_001_100_sss_sss (s is not equal to 0)   [BLS.S <label>]
  1677:             //JBNHI.S <label>                                 |A|012346|-|--*-*|-----|          |0110_001_100_sss_sss (s is not equal to 0)   [BLS.S <label>]
  1678:             //JBHI.L <label>                                  |A|012346|-|--*-*|-----|          |0110_001_100_000_110-0100111011111001-{address}      [BLS.S (*)+8;JMP <label>]
  1679:             //JBNLS.L <label>                                 |A|012346|-|--*-*|-----|          |0110_001_100_000_110-0100111011111001-{address}      [BLS.S (*)+8;JMP <label>]
  1680:           case 0b0110_001_100:
  1681:             irpBlssw ();
  1682:             break irpSwitch;
  1683: 
  1684:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1685:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1686:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1687:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1688:             //BLS.S <label>                                   |-|012346|-|--*-*|-----|          |0110_001_101_sss_sss
  1689:             //BNHI.S <label>                                  |A|012346|-|--*-*|-----|          |0110_001_101_sss_sss [BLS.S <label>]
  1690:             //JBLS.S <label>                                  |A|012346|-|--*-*|-----|          |0110_001_101_sss_sss [BLS.S <label>]
  1691:             //JBNHI.S <label>                                 |A|012346|-|--*-*|-----|          |0110_001_101_sss_sss [BLS.S <label>]
  1692:           case 0b0110_001_101:
  1693:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1694:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1695:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1696:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1697:             //BLS.S <label>                                   |-|012346|-|--*-*|-----|          |0110_001_110_sss_sss
  1698:             //BNHI.S <label>                                  |A|012346|-|--*-*|-----|          |0110_001_110_sss_sss [BLS.S <label>]
  1699:             //JBLS.S <label>                                  |A|012346|-|--*-*|-----|          |0110_001_110_sss_sss [BLS.S <label>]
  1700:             //JBNHI.S <label>                                 |A|012346|-|--*-*|-----|          |0110_001_110_sss_sss [BLS.S <label>]
  1701:           case 0b0110_001_110:
  1702:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1703:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1704:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1705:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1706:             //BLS.S <label>                                   |-|01----|-|--*-*|-----|          |0110_001_111_sss_sss
  1707:             //BNHI.S <label>                                  |A|01----|-|--*-*|-----|          |0110_001_111_sss_sss [BLS.S <label>]
  1708:             //JBLS.S <label>                                  |A|01----|-|--*-*|-----|          |0110_001_111_sss_sss [BLS.S <label>]
  1709:             //JBNHI.S <label>                                 |A|01----|-|--*-*|-----|          |0110_001_111_sss_sss [BLS.S <label>]
  1710:           case 0b0110_001_111:
  1711:             irpBlss ();
  1712:             break irpSwitch;
  1713: 
  1714:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1715:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1716:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1717:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1718:             //BCC.W <label>                                   |-|012346|-|----*|-----|          |0110_010_000_000_000-{offset}
  1719:             //BHS.W <label>                                   |A|012346|-|----*|-----|          |0110_010_000_000_000-{offset}        [BCC.W <label>]
  1720:             //BNCS.W <label>                                  |A|012346|-|----*|-----|          |0110_010_000_000_000-{offset}        [BCC.W <label>]
  1721:             //BNLO.W <label>                                  |A|012346|-|----*|-----|          |0110_010_000_000_000-{offset}        [BCC.W <label>]
  1722:             //JBCC.W <label>                                  |A|012346|-|----*|-----|          |0110_010_000_000_000-{offset}        [BCC.W <label>]
  1723:             //JBHS.W <label>                                  |A|012346|-|----*|-----|          |0110_010_000_000_000-{offset}        [BCC.W <label>]
  1724:             //JBNCS.W <label>                                 |A|012346|-|----*|-----|          |0110_010_000_000_000-{offset}        [BCC.W <label>]
  1725:             //JBNLO.W <label>                                 |A|012346|-|----*|-----|          |0110_010_000_000_000-{offset}        [BCC.W <label>]
  1726:             //BCC.S <label>                                   |-|012346|-|----*|-----|          |0110_010_000_sss_sss (s is not equal to 0)
  1727:             //BHS.S <label>                                   |A|012346|-|----*|-----|          |0110_010_000_sss_sss (s is not equal to 0)   [BCC.S <label>]
  1728:             //BNCS.S <label>                                  |A|012346|-|----*|-----|          |0110_010_000_sss_sss (s is not equal to 0)   [BCC.S <label>]
  1729:             //BNLO.S <label>                                  |A|012346|-|----*|-----|          |0110_010_000_sss_sss (s is not equal to 0)   [BCC.S <label>]
  1730:             //JBCC.S <label>                                  |A|012346|-|----*|-----|          |0110_010_000_sss_sss (s is not equal to 0)   [BCC.S <label>]
  1731:             //JBHS.S <label>                                  |A|012346|-|----*|-----|          |0110_010_000_sss_sss (s is not equal to 0)   [BCC.S <label>]
  1732:             //JBNCS.S <label>                                 |A|012346|-|----*|-----|          |0110_010_000_sss_sss (s is not equal to 0)   [BCC.S <label>]
  1733:             //JBNLO.S <label>                                 |A|012346|-|----*|-----|          |0110_010_000_sss_sss (s is not equal to 0)   [BCC.S <label>]
  1734:             //JBCS.L <label>                                  |A|012346|-|----*|-----|          |0110_010_000_000_110-0100111011111001-{address}      [BCC.S (*)+8;JMP <label>]
  1735:             //JBLO.L <label>                                  |A|012346|-|----*|-----|          |0110_010_000_000_110-0100111011111001-{address}      [BCC.S (*)+8;JMP <label>]
  1736:             //JBNCC.L <label>                                 |A|012346|-|----*|-----|          |0110_010_000_000_110-0100111011111001-{address}      [BCC.S (*)+8;JMP <label>]
  1737:             //JBNHS.L <label>                                 |A|012346|-|----*|-----|          |0110_010_000_000_110-0100111011111001-{address}      [BCC.S (*)+8;JMP <label>]
  1738:           case 0b0110_010_000:
  1739:             irpBhssw ();
  1740:             break irpSwitch;
  1741: 
  1742:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1743:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1744:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1745:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1746:             //BCC.S <label>                                   |-|012346|-|----*|-----|          |0110_010_001_sss_sss
  1747:             //BHS.S <label>                                   |A|012346|-|----*|-----|          |0110_010_001_sss_sss [BCC.S <label>]
  1748:             //BNCS.S <label>                                  |A|012346|-|----*|-----|          |0110_010_001_sss_sss [BCC.S <label>]
  1749:             //BNLO.S <label>                                  |A|012346|-|----*|-----|          |0110_010_001_sss_sss [BCC.S <label>]
  1750:             //JBCC.S <label>                                  |A|012346|-|----*|-----|          |0110_010_001_sss_sss [BCC.S <label>]
  1751:             //JBHS.S <label>                                  |A|012346|-|----*|-----|          |0110_010_001_sss_sss [BCC.S <label>]
  1752:             //JBNCS.S <label>                                 |A|012346|-|----*|-----|          |0110_010_001_sss_sss [BCC.S <label>]
  1753:             //JBNLO.S <label>                                 |A|012346|-|----*|-----|          |0110_010_001_sss_sss [BCC.S <label>]
  1754:           case 0b0110_010_001:
  1755:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1756:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1757:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1758:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1759:             //BCC.S <label>                                   |-|012346|-|----*|-----|          |0110_010_010_sss_sss
  1760:             //BHS.S <label>                                   |A|012346|-|----*|-----|          |0110_010_010_sss_sss [BCC.S <label>]
  1761:             //BNCS.S <label>                                  |A|012346|-|----*|-----|          |0110_010_010_sss_sss [BCC.S <label>]
  1762:             //BNLO.S <label>                                  |A|012346|-|----*|-----|          |0110_010_010_sss_sss [BCC.S <label>]
  1763:             //JBCC.S <label>                                  |A|012346|-|----*|-----|          |0110_010_010_sss_sss [BCC.S <label>]
  1764:             //JBHS.S <label>                                  |A|012346|-|----*|-----|          |0110_010_010_sss_sss [BCC.S <label>]
  1765:             //JBNCS.S <label>                                 |A|012346|-|----*|-----|          |0110_010_010_sss_sss [BCC.S <label>]
  1766:             //JBNLO.S <label>                                 |A|012346|-|----*|-----|          |0110_010_010_sss_sss [BCC.S <label>]
  1767:           case 0b0110_010_010:
  1768:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1769:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1770:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1771:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1772:             //BCC.S <label>                                   |-|01----|-|----*|-----|          |0110_010_011_sss_sss
  1773:             //BHS.S <label>                                   |A|01----|-|----*|-----|          |0110_010_011_sss_sss [BCC.S <label>]
  1774:             //BNCS.S <label>                                  |A|01----|-|----*|-----|          |0110_010_011_sss_sss [BCC.S <label>]
  1775:             //BNLO.S <label>                                  |A|01----|-|----*|-----|          |0110_010_011_sss_sss [BCC.S <label>]
  1776:             //JBCC.S <label>                                  |A|01----|-|----*|-----|          |0110_010_011_sss_sss [BCC.S <label>]
  1777:             //JBHS.S <label>                                  |A|01----|-|----*|-----|          |0110_010_011_sss_sss [BCC.S <label>]
  1778:             //JBNCS.S <label>                                 |A|01----|-|----*|-----|          |0110_010_011_sss_sss [BCC.S <label>]
  1779:             //JBNLO.S <label>                                 |A|01----|-|----*|-----|          |0110_010_011_sss_sss [BCC.S <label>]
  1780:           case 0b0110_010_011:
  1781:             irpBhss ();
  1782:             break irpSwitch;
  1783: 
  1784:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1785:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1786:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1787:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1788:             //BCS.W <label>                                   |-|012346|-|----*|-----|          |0110_010_100_000_000-{offset}
  1789:             //BLO.W <label>                                   |A|012346|-|----*|-----|          |0110_010_100_000_000-{offset}        [BCS.W <label>]
  1790:             //BNCC.W <label>                                  |A|012346|-|----*|-----|          |0110_010_100_000_000-{offset}        [BCS.W <label>]
  1791:             //BNHS.W <label>                                  |A|012346|-|----*|-----|          |0110_010_100_000_000-{offset}        [BCS.W <label>]
  1792:             //JBCS.W <label>                                  |A|012346|-|----*|-----|          |0110_010_100_000_000-{offset}        [BCS.W <label>]
  1793:             //JBLO.W <label>                                  |A|012346|-|----*|-----|          |0110_010_100_000_000-{offset}        [BCS.W <label>]
  1794:             //JBNCC.W <label>                                 |A|012346|-|----*|-----|          |0110_010_100_000_000-{offset}        [BCS.W <label>]
  1795:             //JBNHS.W <label>                                 |A|012346|-|----*|-----|          |0110_010_100_000_000-{offset}        [BCS.W <label>]
  1796:             //BCS.S <label>                                   |-|012346|-|----*|-----|          |0110_010_100_sss_sss (s is not equal to 0)
  1797:             //BLO.S <label>                                   |A|012346|-|----*|-----|          |0110_010_100_sss_sss (s is not equal to 0)   [BCS.S <label>]
  1798:             //BNCC.S <label>                                  |A|012346|-|----*|-----|          |0110_010_100_sss_sss (s is not equal to 0)   [BCS.S <label>]
  1799:             //BNHS.S <label>                                  |A|012346|-|----*|-----|          |0110_010_100_sss_sss (s is not equal to 0)   [BCS.S <label>]
  1800:             //JBCS.S <label>                                  |A|012346|-|----*|-----|          |0110_010_100_sss_sss (s is not equal to 0)   [BCS.S <label>]
  1801:             //JBLO.S <label>                                  |A|012346|-|----*|-----|          |0110_010_100_sss_sss (s is not equal to 0)   [BCS.S <label>]
  1802:             //JBNCC.S <label>                                 |A|012346|-|----*|-----|          |0110_010_100_sss_sss (s is not equal to 0)   [BCS.S <label>]
  1803:             //JBNHS.S <label>                                 |A|012346|-|----*|-----|          |0110_010_100_sss_sss (s is not equal to 0)   [BCS.S <label>]
  1804:             //JBCC.L <label>                                  |A|012346|-|----*|-----|          |0110_010_100_000_110-0100111011111001-{address}      [BCS.S (*)+8;JMP <label>]
  1805:             //JBHS.L <label>                                  |A|012346|-|----*|-----|          |0110_010_100_000_110-0100111011111001-{address}      [BCS.S (*)+8;JMP <label>]
  1806:             //JBNCS.L <label>                                 |A|012346|-|----*|-----|          |0110_010_100_000_110-0100111011111001-{address}      [BCS.S (*)+8;JMP <label>]
  1807:             //JBNLO.L <label>                                 |A|012346|-|----*|-----|          |0110_010_100_000_110-0100111011111001-{address}      [BCS.S (*)+8;JMP <label>]
  1808:           case 0b0110_010_100:
  1809:             irpBlosw ();
  1810:             break irpSwitch;
  1811: 
  1812:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1813:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1814:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1815:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1816:             //BCS.S <label>                                   |-|012346|-|----*|-----|          |0110_010_101_sss_sss
  1817:             //BLO.S <label>                                   |A|012346|-|----*|-----|          |0110_010_101_sss_sss [BCS.S <label>]
  1818:             //BNCC.S <label>                                  |A|012346|-|----*|-----|          |0110_010_101_sss_sss [BCS.S <label>]
  1819:             //BNHS.S <label>                                  |A|012346|-|----*|-----|          |0110_010_101_sss_sss [BCS.S <label>]
  1820:             //JBCS.S <label>                                  |A|012346|-|----*|-----|          |0110_010_101_sss_sss [BCS.S <label>]
  1821:             //JBLO.S <label>                                  |A|012346|-|----*|-----|          |0110_010_101_sss_sss [BCS.S <label>]
  1822:             //JBNCC.S <label>                                 |A|012346|-|----*|-----|          |0110_010_101_sss_sss [BCS.S <label>]
  1823:             //JBNHS.S <label>                                 |A|012346|-|----*|-----|          |0110_010_101_sss_sss [BCS.S <label>]
  1824:           case 0b0110_010_101:
  1825:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1826:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1827:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1828:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1829:             //BCS.S <label>                                   |-|012346|-|----*|-----|          |0110_010_110_sss_sss
  1830:             //BLO.S <label>                                   |A|012346|-|----*|-----|          |0110_010_110_sss_sss [BCS.S <label>]
  1831:             //BNCC.S <label>                                  |A|012346|-|----*|-----|          |0110_010_110_sss_sss [BCS.S <label>]
  1832:             //BNHS.S <label>                                  |A|012346|-|----*|-----|          |0110_010_110_sss_sss [BCS.S <label>]
  1833:             //JBCS.S <label>                                  |A|012346|-|----*|-----|          |0110_010_110_sss_sss [BCS.S <label>]
  1834:             //JBLO.S <label>                                  |A|012346|-|----*|-----|          |0110_010_110_sss_sss [BCS.S <label>]
  1835:             //JBNCC.S <label>                                 |A|012346|-|----*|-----|          |0110_010_110_sss_sss [BCS.S <label>]
  1836:             //JBNHS.S <label>                                 |A|012346|-|----*|-----|          |0110_010_110_sss_sss [BCS.S <label>]
  1837:           case 0b0110_010_110:
  1838:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1839:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1840:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1841:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1842:             //BCS.S <label>                                   |-|01----|-|----*|-----|          |0110_010_111_sss_sss
  1843:             //BLO.S <label>                                   |A|01----|-|----*|-----|          |0110_010_111_sss_sss [BCS.S <label>]
  1844:             //BNCC.S <label>                                  |A|01----|-|----*|-----|          |0110_010_111_sss_sss [BCS.S <label>]
  1845:             //BNHS.S <label>                                  |A|01----|-|----*|-----|          |0110_010_111_sss_sss [BCS.S <label>]
  1846:             //JBCS.S <label>                                  |A|01----|-|----*|-----|          |0110_010_111_sss_sss [BCS.S <label>]
  1847:             //JBLO.S <label>                                  |A|01----|-|----*|-----|          |0110_010_111_sss_sss [BCS.S <label>]
  1848:             //JBNCC.S <label>                                 |A|01----|-|----*|-----|          |0110_010_111_sss_sss [BCS.S <label>]
  1849:             //JBNHS.S <label>                                 |A|01----|-|----*|-----|          |0110_010_111_sss_sss [BCS.S <label>]
  1850:           case 0b0110_010_111:
  1851:             irpBlos ();
  1852:             break irpSwitch;
  1853: 
  1854:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1855:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1856:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1857:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1858:             //BNE.W <label>                                   |-|012346|-|--*--|-----|          |0110_011_000_000_000-{offset}
  1859:             //BNEQ.W <label>                                  |A|012346|-|--*--|-----|          |0110_011_000_000_000-{offset}        [BNE.W <label>]
  1860:             //BNZ.W <label>                                   |A|012346|-|--*--|-----|          |0110_011_000_000_000-{offset}        [BNE.W <label>]
  1861:             //BNZE.W <label>                                  |A|012346|-|--*--|-----|          |0110_011_000_000_000-{offset}        [BNE.W <label>]
  1862:             //JBNE.W <label>                                  |A|012346|-|--*--|-----|          |0110_011_000_000_000-{offset}        [BNE.W <label>]
  1863:             //JBNEQ.W <label>                                 |A|012346|-|--*--|-----|          |0110_011_000_000_000-{offset}        [BNE.W <label>]
  1864:             //JBNZ.W <label>                                  |A|012346|-|--*--|-----|          |0110_011_000_000_000-{offset}        [BNE.W <label>]
  1865:             //JBNZE.W <label>                                 |A|012346|-|--*--|-----|          |0110_011_000_000_000-{offset}        [BNE.W <label>]
  1866:             //BNE.S <label>                                   |-|012346|-|--*--|-----|          |0110_011_000_sss_sss (s is not equal to 0)
  1867:             //BNEQ.S <label>                                  |A|012346|-|--*--|-----|          |0110_011_000_sss_sss (s is not equal to 0)   [BNE.S <label>]
  1868:             //BNZ.S <label>                                   |A|012346|-|--*--|-----|          |0110_011_000_sss_sss (s is not equal to 0)   [BNE.S <label>]
  1869:             //BNZE.S <label>                                  |A|012346|-|--*--|-----|          |0110_011_000_sss_sss (s is not equal to 0)   [BNE.S <label>]
  1870:             //JBNE.S <label>                                  |A|012346|-|--*--|-----|          |0110_011_000_sss_sss (s is not equal to 0)   [BNE.S <label>]
  1871:             //JBNEQ.S <label>                                 |A|012346|-|--*--|-----|          |0110_011_000_sss_sss (s is not equal to 0)   [BNE.S <label>]
  1872:             //JBNZ.S <label>                                  |A|012346|-|--*--|-----|          |0110_011_000_sss_sss (s is not equal to 0)   [BNE.S <label>]
  1873:             //JBNZE.S <label>                                 |A|012346|-|--*--|-----|          |0110_011_000_sss_sss (s is not equal to 0)   [BNE.S <label>]
  1874:             //JBEQ.L <label>                                  |A|012346|-|--*--|-----|          |0110_011_000_000_110-0100111011111001-{address}      [BNE.S (*)+8;JMP <label>]
  1875:             //JBNEQ.L <label>                                 |A|012346|-|--*--|-----|          |0110_011_000_000_110-0100111011111001-{address}      [BNE.S (*)+8;JMP <label>]
  1876:             //JBNNE.L <label>                                 |A|012346|-|--*--|-----|          |0110_011_000_000_110-0100111011111001-{address}      [BNE.S (*)+8;JMP <label>]
  1877:             //JBNNZ.L <label>                                 |A|012346|-|--*--|-----|          |0110_011_000_000_110-0100111011111001-{address}      [BNE.S (*)+8;JMP <label>]
  1878:             //JBNZ.L <label>                                  |A|012346|-|--*--|-----|          |0110_011_000_000_110-0100111011111001-{address}      [BNE.S (*)+8;JMP <label>]
  1879:             //JBNZE.L <label>                                 |A|012346|-|--*--|-----|          |0110_011_000_000_110-0100111011111001-{address}      [BNE.S (*)+8;JMP <label>]
  1880:             //JBZE.L <label>                                  |A|012346|-|--*--|-----|          |0110_011_000_000_110-0100111011111001-{address}      [BNE.S (*)+8;JMP <label>]
  1881:           case 0b0110_011_000:
  1882:             irpBnesw ();
  1883:             break irpSwitch;
  1884: 
  1885:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1886:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1887:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1888:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1889:             //BNE.S <label>                                   |-|012346|-|--*--|-----|          |0110_011_001_sss_sss
  1890:             //BNEQ.S <label>                                  |A|012346|-|--*--|-----|          |0110_011_001_sss_sss [BNE.S <label>]
  1891:             //BNZ.S <label>                                   |A|012346|-|--*--|-----|          |0110_011_001_sss_sss [BNE.S <label>]
  1892:             //BNZE.S <label>                                  |A|012346|-|--*--|-----|          |0110_011_001_sss_sss [BNE.S <label>]
  1893:             //JBNE.S <label>                                  |A|012346|-|--*--|-----|          |0110_011_001_sss_sss [BNE.S <label>]
  1894:             //JBNEQ.S <label>                                 |A|012346|-|--*--|-----|          |0110_011_001_sss_sss [BNE.S <label>]
  1895:             //JBNZ.S <label>                                  |A|012346|-|--*--|-----|          |0110_011_001_sss_sss [BNE.S <label>]
  1896:             //JBNZE.S <label>                                 |A|012346|-|--*--|-----|          |0110_011_001_sss_sss [BNE.S <label>]
  1897:           case 0b0110_011_001:
  1898:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1899:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1900:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1901:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1902:             //BNE.S <label>                                   |-|012346|-|--*--|-----|          |0110_011_010_sss_sss
  1903:             //BNEQ.S <label>                                  |A|012346|-|--*--|-----|          |0110_011_010_sss_sss [BNE.S <label>]
  1904:             //BNZ.S <label>                                   |A|012346|-|--*--|-----|          |0110_011_010_sss_sss [BNE.S <label>]
  1905:             //BNZE.S <label>                                  |A|012346|-|--*--|-----|          |0110_011_010_sss_sss [BNE.S <label>]
  1906:             //JBNE.S <label>                                  |A|012346|-|--*--|-----|          |0110_011_010_sss_sss [BNE.S <label>]
  1907:             //JBNEQ.S <label>                                 |A|012346|-|--*--|-----|          |0110_011_010_sss_sss [BNE.S <label>]
  1908:             //JBNZ.S <label>                                  |A|012346|-|--*--|-----|          |0110_011_010_sss_sss [BNE.S <label>]
  1909:             //JBNZE.S <label>                                 |A|012346|-|--*--|-----|          |0110_011_010_sss_sss [BNE.S <label>]
  1910:           case 0b0110_011_010:
  1911:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1912:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1913:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1914:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1915:             //BNE.S <label>                                   |-|01----|-|--*--|-----|          |0110_011_011_sss_sss
  1916:             //BNEQ.S <label>                                  |A|01----|-|--*--|-----|          |0110_011_011_sss_sss [BNE.S <label>]
  1917:             //BNZ.S <label>                                   |A|01----|-|--*--|-----|          |0110_011_011_sss_sss [BNE.S <label>]
  1918:             //BNZE.S <label>                                  |A|01----|-|--*--|-----|          |0110_011_011_sss_sss [BNE.S <label>]
  1919:             //JBNE.S <label>                                  |A|01----|-|--*--|-----|          |0110_011_011_sss_sss [BNE.S <label>]
  1920:             //JBNEQ.S <label>                                 |A|01----|-|--*--|-----|          |0110_011_011_sss_sss [BNE.S <label>]
  1921:             //JBNZ.S <label>                                  |A|01----|-|--*--|-----|          |0110_011_011_sss_sss [BNE.S <label>]
  1922:             //JBNZE.S <label>                                 |A|01----|-|--*--|-----|          |0110_011_011_sss_sss [BNE.S <label>]
  1923:           case 0b0110_011_011:
  1924:             irpBnes ();
  1925:             break irpSwitch;
  1926: 
  1927:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1928:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1929:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1930:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1931:             //BEQ.W <label>                                   |-|012346|-|--*--|-----|          |0110_011_100_000_000-{offset}
  1932:             //BNNE.W <label>                                  |A|012346|-|--*--|-----|          |0110_011_100_000_000-{offset}        [BEQ.W <label>]
  1933:             //BNNZ.W <label>                                  |A|012346|-|--*--|-----|          |0110_011_100_000_000-{offset}        [BEQ.W <label>]
  1934:             //BZE.W <label>                                   |A|012346|-|--*--|-----|          |0110_011_100_000_000-{offset}        [BEQ.W <label>]
  1935:             //JBEQ.W <label>                                  |A|012346|-|--*--|-----|          |0110_011_100_000_000-{offset}        [BEQ.W <label>]
  1936:             //JBNNE.W <label>                                 |A|012346|-|--*--|-----|          |0110_011_100_000_000-{offset}        [BEQ.W <label>]
  1937:             //JBNNZ.W <label>                                 |A|012346|-|--*--|-----|          |0110_011_100_000_000-{offset}        [BEQ.W <label>]
  1938:             //JBZE.W <label>                                  |A|012346|-|--*--|-----|          |0110_011_100_000_000-{offset}        [BEQ.W <label>]
  1939:             //BEQ.S <label>                                   |-|012346|-|--*--|-----|          |0110_011_100_sss_sss (s is not equal to 0)
  1940:             //BNNE.S <label>                                  |A|012346|-|--*--|-----|          |0110_011_100_sss_sss (s is not equal to 0)   [BEQ.S <label>]
  1941:             //BNNZ.S <label>                                  |A|012346|-|--*--|-----|          |0110_011_100_sss_sss (s is not equal to 0)   [BEQ.S <label>]
  1942:             //BZE.S <label>                                   |A|012346|-|--*--|-----|          |0110_011_100_sss_sss (s is not equal to 0)   [BEQ.S <label>]
  1943:             //JBEQ.S <label>                                  |A|012346|-|--*--|-----|          |0110_011_100_sss_sss (s is not equal to 0)   [BEQ.S <label>]
  1944:             //JBNNE.S <label>                                 |A|012346|-|--*--|-----|          |0110_011_100_sss_sss (s is not equal to 0)   [BEQ.S <label>]
  1945:             //JBNNZ.S <label>                                 |A|012346|-|--*--|-----|          |0110_011_100_sss_sss (s is not equal to 0)   [BEQ.S <label>]
  1946:             //JBZE.S <label>                                  |A|012346|-|--*--|-----|          |0110_011_100_sss_sss (s is not equal to 0)   [BEQ.S <label>]
  1947:             //JBNE.L <label>                                  |A|012346|-|--*--|-----|          |0110_011_100_000_110-0100111011111001-{address}      [BEQ.S (*)+8;JMP <label>]
  1948:           case 0b0110_011_100:
  1949:             irpBeqsw ();
  1950:             break irpSwitch;
  1951: 
  1952:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1953:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1954:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1955:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1956:             //BEQ.S <label>                                   |-|012346|-|--*--|-----|          |0110_011_101_sss_sss
  1957:             //BNNE.S <label>                                  |A|012346|-|--*--|-----|          |0110_011_101_sss_sss [BEQ.S <label>]
  1958:             //BNNZ.S <label>                                  |A|012346|-|--*--|-----|          |0110_011_101_sss_sss [BEQ.S <label>]
  1959:             //BZE.S <label>                                   |A|012346|-|--*--|-----|          |0110_011_101_sss_sss [BEQ.S <label>]
  1960:             //JBEQ.S <label>                                  |A|012346|-|--*--|-----|          |0110_011_101_sss_sss [BEQ.S <label>]
  1961:             //JBNNE.S <label>                                 |A|012346|-|--*--|-----|          |0110_011_101_sss_sss [BEQ.S <label>]
  1962:             //JBNNZ.S <label>                                 |A|012346|-|--*--|-----|          |0110_011_101_sss_sss [BEQ.S <label>]
  1963:             //JBZE.S <label>                                  |A|012346|-|--*--|-----|          |0110_011_101_sss_sss [BEQ.S <label>]
  1964:           case 0b0110_011_101:
  1965:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1966:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1967:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1968:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1969:             //BEQ.S <label>                                   |-|012346|-|--*--|-----|          |0110_011_110_sss_sss
  1970:             //BNNE.S <label>                                  |A|012346|-|--*--|-----|          |0110_011_110_sss_sss [BEQ.S <label>]
  1971:             //BNNZ.S <label>                                  |A|012346|-|--*--|-----|          |0110_011_110_sss_sss [BEQ.S <label>]
  1972:             //BZE.S <label>                                   |A|012346|-|--*--|-----|          |0110_011_110_sss_sss [BEQ.S <label>]
  1973:             //JBEQ.S <label>                                  |A|012346|-|--*--|-----|          |0110_011_110_sss_sss [BEQ.S <label>]
  1974:             //JBNNE.S <label>                                 |A|012346|-|--*--|-----|          |0110_011_110_sss_sss [BEQ.S <label>]
  1975:             //JBNNZ.S <label>                                 |A|012346|-|--*--|-----|          |0110_011_110_sss_sss [BEQ.S <label>]
  1976:             //JBZE.S <label>                                  |A|012346|-|--*--|-----|          |0110_011_110_sss_sss [BEQ.S <label>]
  1977:           case 0b0110_011_110:
  1978:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1979:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1980:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1981:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1982:             //BEQ.S <label>                                   |-|01----|-|--*--|-----|          |0110_011_111_sss_sss
  1983:             //BNNE.S <label>                                  |A|01----|-|--*--|-----|          |0110_011_111_sss_sss [BEQ.S <label>]
  1984:             //BNNZ.S <label>                                  |A|01----|-|--*--|-----|          |0110_011_111_sss_sss [BEQ.S <label>]
  1985:             //BZE.S <label>                                   |A|01----|-|--*--|-----|          |0110_011_111_sss_sss [BEQ.S <label>]
  1986:             //JBEQ.S <label>                                  |A|01----|-|--*--|-----|          |0110_011_111_sss_sss [BEQ.S <label>]
  1987:             //JBNNE.S <label>                                 |A|01----|-|--*--|-----|          |0110_011_111_sss_sss [BEQ.S <label>]
  1988:             //JBNNZ.S <label>                                 |A|01----|-|--*--|-----|          |0110_011_111_sss_sss [BEQ.S <label>]
  1989:             //JBZE.S <label>                                  |A|01----|-|--*--|-----|          |0110_011_111_sss_sss [BEQ.S <label>]
  1990:           case 0b0110_011_111:
  1991:             irpBeqs ();
  1992:             break irpSwitch;
  1993: 
  1994:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1995:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  1996:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  1997:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  1998:             //BVC.W <label>                                   |-|012346|-|---*-|-----|          |0110_100_000_000_000-{offset}
  1999:             //BNVS.W <label>                                  |A|012346|-|---*-|-----|          |0110_100_000_000_000-{offset}        [BVC.W <label>]
  2000:             //JBNVS.W <label>                                 |A|012346|-|---*-|-----|          |0110_100_000_000_000-{offset}        [BVC.W <label>]
  2001:             //JBVC.W <label>                                  |A|012346|-|---*-|-----|          |0110_100_000_000_000-{offset}        [BVC.W <label>]
  2002:             //BVC.S <label>                                   |-|012346|-|---*-|-----|          |0110_100_000_sss_sss (s is not equal to 0)
  2003:             //BNVS.S <label>                                  |A|012346|-|---*-|-----|          |0110_100_000_sss_sss (s is not equal to 0)   [BVC.S <label>]
  2004:             //JBNVS.S <label>                                 |A|012346|-|---*-|-----|          |0110_100_000_sss_sss (s is not equal to 0)   [BVC.S <label>]
  2005:             //JBVC.S <label>                                  |A|012346|-|---*-|-----|          |0110_100_000_sss_sss (s is not equal to 0)   [BVC.S <label>]
  2006:             //JBNVC.L <label>                                 |A|012346|-|---*-|-----|          |0110_100_000_000_110-0100111011111001-{address}      [BVC.S (*)+8;JMP <label>]
  2007:             //JBVS.L <label>                                  |A|012346|-|---*-|-----|          |0110_100_000_000_110-0100111011111001-{address}      [BVC.S (*)+8;JMP <label>]
  2008:           case 0b0110_100_000:
  2009:             irpBvcsw ();
  2010:             break irpSwitch;
  2011: 
  2012:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2013:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  2014:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  2015:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2016:             //BVC.S <label>                                   |-|012346|-|---*-|-----|          |0110_100_001_sss_sss
  2017:             //BNVS.S <label>                                  |A|012346|-|---*-|-----|          |0110_100_001_sss_sss [BVC.S <label>]
  2018:             //JBNVS.S <label>                                 |A|012346|-|---*-|-----|          |0110_100_001_sss_sss [BVC.S <label>]
  2019:             //JBVC.S <label>                                  |A|012346|-|---*-|-----|          |0110_100_001_sss_sss [BVC.S <label>]
  2020:           case 0b0110_100_001:
  2021:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2022:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  2023:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  2024:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2025:             //BVC.S <label>                                   |-|012346|-|---*-|-----|          |0110_100_010_sss_sss
  2026:             //BNVS.S <label>                                  |A|012346|-|---*-|-----|          |0110_100_010_sss_sss [BVC.S <label>]
  2027:             //JBNVS.S <label>                                 |A|012346|-|---*-|-----|          |0110_100_010_sss_sss [BVC.S <label>]
  2028:             //JBVC.S <label>                                  |A|012346|-|---*-|-----|          |0110_100_010_sss_sss [BVC.S <label>]
  2029:           case 0b0110_100_010:
  2030:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2031:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  2032:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  2033:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2034:             //BVC.S <label>                                   |-|01----|-|---*-|-----|          |0110_100_011_sss_sss
  2035:             //BNVS.S <label>                                  |A|01----|-|---*-|-----|          |0110_100_011_sss_sss [BVC.S <label>]
  2036:             //JBNVS.S <label>                                 |A|01----|-|---*-|-----|          |0110_100_011_sss_sss [BVC.S <label>]
  2037:             //JBVC.S <label>                                  |A|01----|-|---*-|-----|          |0110_100_011_sss_sss [BVC.S <label>]
  2038:           case 0b0110_100_011:
  2039:             irpBvcs ();
  2040:             break irpSwitch;
  2041: 
  2042:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2043:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  2044:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  2045:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2046:             //BVS.W <label>                                   |-|012346|-|---*-|-----|          |0110_100_100_000_000-{offset}
  2047:             //BNVC.W <label>                                  |A|012346|-|---*-|-----|          |0110_100_100_000_000-{offset}        [BVS.W <label>]
  2048:             //JBNVC.W <label>                                 |A|012346|-|---*-|-----|          |0110_100_100_000_000-{offset}        [BVS.W <label>]
  2049:             //JBVS.W <label>                                  |A|012346|-|---*-|-----|          |0110_100_100_000_000-{offset}        [BVS.W <label>]
  2050:             //BVS.S <label>                                   |-|012346|-|---*-|-----|          |0110_100_100_sss_sss (s is not equal to 0)
  2051:             //BNVC.S <label>                                  |A|012346|-|---*-|-----|          |0110_100_100_sss_sss (s is not equal to 0)   [BVS.S <label>]
  2052:             //JBNVC.S <label>                                 |A|012346|-|---*-|-----|          |0110_100_100_sss_sss (s is not equal to 0)   [BVS.S <label>]
  2053:             //JBVS.S <label>                                  |A|012346|-|---*-|-----|          |0110_100_100_sss_sss (s is not equal to 0)   [BVS.S <label>]
  2054:             //JBNVS.L <label>                                 |A|012346|-|---*-|-----|          |0110_100_100_000_110-0100111011111001-{address}      [BVS.S (*)+8;JMP <label>]
  2055:             //JBVC.L <label>                                  |A|012346|-|---*-|-----|          |0110_100_100_000_110-0100111011111001-{address}      [BVS.S (*)+8;JMP <label>]
  2056:           case 0b0110_100_100:
  2057:             irpBvssw ();
  2058:             break irpSwitch;
  2059: 
  2060:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2061:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  2062:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  2063:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2064:             //BVS.S <label>                                   |-|012346|-|---*-|-----|          |0110_100_101_sss_sss
  2065:             //BNVC.S <label>                                  |A|012346|-|---*-|-----|          |0110_100_101_sss_sss [BVS.S <label>]
  2066:             //JBNVC.S <label>                                 |A|012346|-|---*-|-----|          |0110_100_101_sss_sss [BVS.S <label>]
  2067:             //JBVS.S <label>                                  |A|012346|-|---*-|-----|          |0110_100_101_sss_sss [BVS.S <label>]
  2068:           case 0b0110_100_101:
  2069:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2070:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  2071:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  2072:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2073:             //BVS.S <label>                                   |-|012346|-|---*-|-----|          |0110_100_110_sss_sss
  2074:             //BNVC.S <label>                                  |A|012346|-|---*-|-----|          |0110_100_110_sss_sss [BVS.S <label>]
  2075:             //JBNVC.S <label>                                 |A|012346|-|---*-|-----|          |0110_100_110_sss_sss [BVS.S <label>]
  2076:             //JBVS.S <label>                                  |A|012346|-|---*-|-----|          |0110_100_110_sss_sss [BVS.S <label>]
  2077:           case 0b0110_100_110:
  2078:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2079:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  2080:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  2081:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2082:             //BVS.S <label>                                   |-|01----|-|---*-|-----|          |0110_100_111_sss_sss
  2083:             //BNVC.S <label>                                  |A|01----|-|---*-|-----|          |0110_100_111_sss_sss [BVS.S <label>]
  2084:             //JBNVC.S <label>                                 |A|01----|-|---*-|-----|          |0110_100_111_sss_sss [BVS.S <label>]
  2085:             //JBVS.S <label>                                  |A|01----|-|---*-|-----|          |0110_100_111_sss_sss [BVS.S <label>]
  2086:           case 0b0110_100_111:
  2087:             irpBvss ();
  2088:             break irpSwitch;
  2089: 
  2090:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2091:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  2092:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  2093:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2094:             //BPL.W <label>                                   |-|012346|-|-*---|-----|          |0110_101_000_000_000-{offset}
  2095:             //BNMI.W <label>                                  |A|012346|-|-*---|-----|          |0110_101_000_000_000-{offset}        [BPL.W <label>]
  2096:             //JBNMI.W <label>                                 |A|012346|-|-*---|-----|          |0110_101_000_000_000-{offset}        [BPL.W <label>]
  2097:             //JBPL.W <label>                                  |A|012346|-|-*---|-----|          |0110_101_000_000_000-{offset}        [BPL.W <label>]
  2098:             //BPL.S <label>                                   |-|012346|-|-*---|-----|          |0110_101_000_sss_sss (s is not equal to 0)
  2099:             //BNMI.S <label>                                  |A|012346|-|-*---|-----|          |0110_101_000_sss_sss (s is not equal to 0)   [BPL.S <label>]
  2100:             //JBNMI.S <label>                                 |A|012346|-|-*---|-----|          |0110_101_000_sss_sss (s is not equal to 0)   [BPL.S <label>]
  2101:             //JBPL.S <label>                                  |A|012346|-|-*---|-----|          |0110_101_000_sss_sss (s is not equal to 0)   [BPL.S <label>]
  2102:             //JBMI.L <label>                                  |A|012346|-|-*---|-----|          |0110_101_000_000_110-0100111011111001-{address}      [BPL.S (*)+8;JMP <label>]
  2103:             //JBNPL.L <label>                                 |A|012346|-|-*---|-----|          |0110_101_000_000_110-0100111011111001-{address}      [BPL.S (*)+8;JMP <label>]
  2104:           case 0b0110_101_000:
  2105:             irpBplsw ();
  2106:             break irpSwitch;
  2107: 
  2108:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2109:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  2110:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  2111:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2112:             //BPL.S <label>                                   |-|012346|-|-*---|-----|          |0110_101_001_sss_sss
  2113:             //BNMI.S <label>                                  |A|012346|-|-*---|-----|          |0110_101_001_sss_sss [BPL.S <label>]
  2114:             //JBNMI.S <label>                                 |A|012346|-|-*---|-----|          |0110_101_001_sss_sss [BPL.S <label>]
  2115:             //JBPL.S <label>                                  |A|012346|-|-*---|-----|          |0110_101_001_sss_sss [BPL.S <label>]
  2116:           case 0b0110_101_001:
  2117:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2118:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  2119:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  2120:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2121:             //BPL.S <label>                                   |-|012346|-|-*---|-----|          |0110_101_010_sss_sss
  2122:             //BNMI.S <label>                                  |A|012346|-|-*---|-----|          |0110_101_010_sss_sss [BPL.S <label>]
  2123:             //JBNMI.S <label>                                 |A|012346|-|-*---|-----|          |0110_101_010_sss_sss [BPL.S <label>]
  2124:             //JBPL.S <label>                                  |A|012346|-|-*---|-----|          |0110_101_010_sss_sss [BPL.S <label>]
  2125:           case 0b0110_101_010:
  2126:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2127:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  2128:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  2129:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2130:             //BPL.S <label>                                   |-|01----|-|-*---|-----|          |0110_101_011_sss_sss
  2131:             //BNMI.S <label>                                  |A|01----|-|-*---|-----|          |0110_101_011_sss_sss [BPL.S <label>]
  2132:             //JBNMI.S <label>                                 |A|01----|-|-*---|-----|          |0110_101_011_sss_sss [BPL.S <label>]
  2133:             //JBPL.S <label>                                  |A|01----|-|-*---|-----|          |0110_101_011_sss_sss [BPL.S <label>]
  2134:           case 0b0110_101_011:
  2135:             irpBpls ();
  2136:             break irpSwitch;
  2137: 
  2138:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2139:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  2140:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  2141:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2142:             //BMI.W <label>                                   |-|012346|-|-*---|-----|          |0110_101_100_000_000-{offset}
  2143:             //BNPL.W <label>                                  |A|012346|-|-*---|-----|          |0110_101_100_000_000-{offset}        [BMI.W <label>]
  2144:             //JBMI.W <label>                                  |A|012346|-|-*---|-----|          |0110_101_100_000_000-{offset}        [BMI.W <label>]
  2145:             //JBNPL.W <label>                                 |A|012346|-|-*---|-----|          |0110_101_100_000_000-{offset}        [BMI.W <label>]
  2146:             //BMI.S <label>                                   |-|012346|-|-*---|-----|          |0110_101_100_sss_sss (s is not equal to 0)
  2147:             //BNPL.S <label>                                  |A|012346|-|-*---|-----|          |0110_101_100_sss_sss (s is not equal to 0)   [BMI.S <label>]
  2148:             //JBMI.S <label>                                  |A|012346|-|-*---|-----|          |0110_101_100_sss_sss (s is not equal to 0)   [BMI.S <label>]
  2149:             //JBNPL.S <label>                                 |A|012346|-|-*---|-----|          |0110_101_100_sss_sss (s is not equal to 0)   [BMI.S <label>]
  2150:             //JBNMI.L <label>                                 |A|012346|-|-*---|-----|          |0110_101_100_000_110-0100111011111001-{address}      [BMI.S (*)+8;JMP <label>]
  2151:             //JBPL.L <label>                                  |A|012346|-|-*---|-----|          |0110_101_100_000_110-0100111011111001-{address}      [BMI.S (*)+8;JMP <label>]
  2152:           case 0b0110_101_100:
  2153:             irpBmisw ();
  2154:             break irpSwitch;
  2155: 
  2156:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2157:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  2158:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  2159:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2160:             //BMI.S <label>                                   |-|012346|-|-*---|-----|          |0110_101_101_sss_sss
  2161:             //BNPL.S <label>                                  |A|012346|-|-*---|-----|          |0110_101_101_sss_sss [BMI.S <label>]
  2162:             //JBMI.S <label>                                  |A|012346|-|-*---|-----|          |0110_101_101_sss_sss [BMI.S <label>]
  2163:             //JBNPL.S <label>                                 |A|012346|-|-*---|-----|          |0110_101_101_sss_sss [BMI.S <label>]
  2164:           case 0b0110_101_101:
  2165:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2166:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  2167:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  2168:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2169:             //BMI.S <label>                                   |-|012346|-|-*---|-----|          |0110_101_110_sss_sss
  2170:             //BNPL.S <label>                                  |A|012346|-|-*---|-----|          |0110_101_110_sss_sss [BMI.S <label>]
  2171:             //JBMI.S <label>                                  |A|012346|-|-*---|-----|          |0110_101_110_sss_sss [BMI.S <label>]
  2172:             //JBNPL.S <label>                                 |A|012346|-|-*---|-----|          |0110_101_110_sss_sss [BMI.S <label>]
  2173:           case 0b0110_101_110:
  2174:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2175:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  2176:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  2177:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2178:             //BMI.S <label>                                   |-|01----|-|-*---|-----|          |0110_101_111_sss_sss
  2179:             //BNPL.S <label>                                  |A|01----|-|-*---|-----|          |0110_101_111_sss_sss [BMI.S <label>]
  2180:             //JBMI.S <label>                                  |A|01----|-|-*---|-----|          |0110_101_111_sss_sss [BMI.S <label>]
  2181:             //JBNPL.S <label>                                 |A|01----|-|-*---|-----|          |0110_101_111_sss_sss [BMI.S <label>]
  2182:           case 0b0110_101_111:
  2183:             irpBmis ();
  2184:             break irpSwitch;
  2185: 
  2186:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2187:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  2188:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  2189:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2190:             //BGE.W <label>                                   |-|012346|-|-*-*-|-----|          |0110_110_000_000_000-{offset}
  2191:             //BNLT.W <label>                                  |A|012346|-|-*-*-|-----|          |0110_110_000_000_000-{offset}        [BGE.W <label>]
  2192:             //JBGE.W <label>                                  |A|012346|-|-*-*-|-----|          |0110_110_000_000_000-{offset}        [BGE.W <label>]
  2193:             //JBNLT.W <label>                                 |A|012346|-|-*-*-|-----|          |0110_110_000_000_000-{offset}        [BGE.W <label>]
  2194:             //BGE.S <label>                                   |-|012346|-|-*-*-|-----|          |0110_110_000_sss_sss (s is not equal to 0)
  2195:             //BNLT.S <label>                                  |A|012346|-|-*-*-|-----|          |0110_110_000_sss_sss (s is not equal to 0)   [BGE.S <label>]
  2196:             //JBGE.S <label>                                  |A|012346|-|-*-*-|-----|          |0110_110_000_sss_sss (s is not equal to 0)   [BGE.S <label>]
  2197:             //JBNLT.S <label>                                 |A|012346|-|-*-*-|-----|          |0110_110_000_sss_sss (s is not equal to 0)   [BGE.S <label>]
  2198:             //JBLT.L <label>                                  |A|012346|-|-*-*-|-----|          |0110_110_000_000_110-0100111011111001-{address}      [BGE.S (*)+8;JMP <label>]
  2199:             //JBNGE.L <label>                                 |A|012346|-|-*-*-|-----|          |0110_110_000_000_110-0100111011111001-{address}      [BGE.S (*)+8;JMP <label>]
  2200:           case 0b0110_110_000:
  2201:             irpBgesw ();
  2202:             break irpSwitch;
  2203: 
  2204:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2205:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  2206:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  2207:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2208:             //BGE.S <label>                                   |-|012346|-|-*-*-|-----|          |0110_110_001_sss_sss
  2209:             //BNLT.S <label>                                  |A|012346|-|-*-*-|-----|          |0110_110_001_sss_sss [BGE.S <label>]
  2210:             //JBGE.S <label>                                  |A|012346|-|-*-*-|-----|          |0110_110_001_sss_sss [BGE.S <label>]
  2211:             //JBNLT.S <label>                                 |A|012346|-|-*-*-|-----|          |0110_110_001_sss_sss [BGE.S <label>]
  2212:           case 0b0110_110_001:
  2213:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2214:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  2215:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  2216:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2217:             //BGE.S <label>                                   |-|012346|-|-*-*-|-----|          |0110_110_010_sss_sss
  2218:             //BNLT.S <label>                                  |A|012346|-|-*-*-|-----|          |0110_110_010_sss_sss [BGE.S <label>]
  2219:             //JBGE.S <label>                                  |A|012346|-|-*-*-|-----|          |0110_110_010_sss_sss [BGE.S <label>]
  2220:             //JBNLT.S <label>                                 |A|012346|-|-*-*-|-----|          |0110_110_010_sss_sss [BGE.S <label>]
  2221:           case 0b0110_110_010:
  2222:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2223:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  2224:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  2225:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2226:             //BGE.S <label>                                   |-|01----|-|-*-*-|-----|          |0110_110_011_sss_sss
  2227:             //BNLT.S <label>                                  |A|01----|-|-*-*-|-----|          |0110_110_011_sss_sss [BGE.S <label>]
  2228:             //JBGE.S <label>                                  |A|01----|-|-*-*-|-----|          |0110_110_011_sss_sss [BGE.S <label>]
  2229:             //JBNLT.S <label>                                 |A|01----|-|-*-*-|-----|          |0110_110_011_sss_sss [BGE.S <label>]
  2230:           case 0b0110_110_011:
  2231:             irpBges ();
  2232:             break irpSwitch;
  2233: 
  2234:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2235:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  2236:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  2237:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2238:             //BLT.W <label>                                   |-|012346|-|-*-*-|-----|          |0110_110_100_000_000-{offset}
  2239:             //BNGE.W <label>                                  |A|012346|-|-*-*-|-----|          |0110_110_100_000_000-{offset}        [BLT.W <label>]
  2240:             //JBLT.W <label>                                  |A|012346|-|-*-*-|-----|          |0110_110_100_000_000-{offset}        [BLT.W <label>]
  2241:             //JBNGE.W <label>                                 |A|012346|-|-*-*-|-----|          |0110_110_100_000_000-{offset}        [BLT.W <label>]
  2242:             //BLT.S <label>                                   |-|012346|-|-*-*-|-----|          |0110_110_100_sss_sss (s is not equal to 0)
  2243:             //BNGE.S <label>                                  |A|012346|-|-*-*-|-----|          |0110_110_100_sss_sss (s is not equal to 0)   [BLT.S <label>]
  2244:             //JBLT.S <label>                                  |A|012346|-|-*-*-|-----|          |0110_110_100_sss_sss (s is not equal to 0)   [BLT.S <label>]
  2245:             //JBNGE.S <label>                                 |A|012346|-|-*-*-|-----|          |0110_110_100_sss_sss (s is not equal to 0)   [BLT.S <label>]
  2246:             //JBGE.L <label>                                  |A|012346|-|-*-*-|-----|          |0110_110_100_000_110-0100111011111001-{address}      [BLT.S (*)+8;JMP <label>]
  2247:             //JBNLT.L <label>                                 |A|012346|-|-*-*-|-----|          |0110_110_100_000_110-0100111011111001-{address}      [BLT.S (*)+8;JMP <label>]
  2248:           case 0b0110_110_100:
  2249:             irpBltsw ();
  2250:             break irpSwitch;
  2251: 
  2252:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2253:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  2254:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  2255:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2256:             //BLT.S <label>                                   |-|012346|-|-*-*-|-----|          |0110_110_101_sss_sss
  2257:             //BNGE.S <label>                                  |A|012346|-|-*-*-|-----|          |0110_110_101_sss_sss [BLT.S <label>]
  2258:             //JBLT.S <label>                                  |A|012346|-|-*-*-|-----|          |0110_110_101_sss_sss [BLT.S <label>]
  2259:             //JBNGE.S <label>                                 |A|012346|-|-*-*-|-----|          |0110_110_101_sss_sss [BLT.S <label>]
  2260:           case 0b0110_110_101:
  2261:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2262:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  2263:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  2264:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2265:             //BLT.S <label>                                   |-|012346|-|-*-*-|-----|          |0110_110_110_sss_sss
  2266:             //BNGE.S <label>                                  |A|012346|-|-*-*-|-----|          |0110_110_110_sss_sss [BLT.S <label>]
  2267:             //JBLT.S <label>                                  |A|012346|-|-*-*-|-----|          |0110_110_110_sss_sss [BLT.S <label>]
  2268:             //JBNGE.S <label>                                 |A|012346|-|-*-*-|-----|          |0110_110_110_sss_sss [BLT.S <label>]
  2269:           case 0b0110_110_110:
  2270:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2271:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  2272:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  2273:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2274:             //BLT.S <label>                                   |-|01----|-|-*-*-|-----|          |0110_110_111_sss_sss
  2275:             //BNGE.S <label>                                  |A|01----|-|-*-*-|-----|          |0110_110_111_sss_sss [BLT.S <label>]
  2276:             //JBLT.S <label>                                  |A|01----|-|-*-*-|-----|          |0110_110_111_sss_sss [BLT.S <label>]
  2277:             //JBNGE.S <label>                                 |A|01----|-|-*-*-|-----|          |0110_110_111_sss_sss [BLT.S <label>]
  2278:           case 0b0110_110_111:
  2279:             irpBlts ();
  2280:             break irpSwitch;
  2281: 
  2282:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2283:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  2284:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  2285:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2286:             //BGT.W <label>                                   |-|012346|-|-***-|-----|          |0110_111_000_000_000-{offset}
  2287:             //BNLE.W <label>                                  |A|012346|-|-***-|-----|          |0110_111_000_000_000-{offset}        [BGT.W <label>]
  2288:             //JBGT.W <label>                                  |A|012346|-|-***-|-----|          |0110_111_000_000_000-{offset}        [BGT.W <label>]
  2289:             //JBNLE.W <label>                                 |A|012346|-|-***-|-----|          |0110_111_000_000_000-{offset}        [BGT.W <label>]
  2290:             //BGT.S <label>                                   |-|012346|-|-***-|-----|          |0110_111_000_sss_sss (s is not equal to 0)
  2291:             //BNLE.S <label>                                  |A|012346|-|-***-|-----|          |0110_111_000_sss_sss (s is not equal to 0)   [BGT.S <label>]
  2292:             //JBGT.S <label>                                  |A|012346|-|-***-|-----|          |0110_111_000_sss_sss (s is not equal to 0)   [BGT.S <label>]
  2293:             //JBNLE.S <label>                                 |A|012346|-|-***-|-----|          |0110_111_000_sss_sss (s is not equal to 0)   [BGT.S <label>]
  2294:             //JBLE.L <label>                                  |A|012346|-|-***-|-----|          |0110_111_000_000_110-0100111011111001-{address}      [BGT.S (*)+8;JMP <label>]
  2295:             //JBNGT.L <label>                                 |A|012346|-|-***-|-----|          |0110_111_000_000_110-0100111011111001-{address}      [BGT.S (*)+8;JMP <label>]
  2296:           case 0b0110_111_000:
  2297:             irpBgtsw ();
  2298:             break irpSwitch;
  2299: 
  2300:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2301:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  2302:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  2303:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2304:             //BGT.S <label>                                   |-|012346|-|-***-|-----|          |0110_111_001_sss_sss
  2305:             //BNLE.S <label>                                  |A|012346|-|-***-|-----|          |0110_111_001_sss_sss [BGT.S <label>]
  2306:             //JBGT.S <label>                                  |A|012346|-|-***-|-----|          |0110_111_001_sss_sss [BGT.S <label>]
  2307:             //JBNLE.S <label>                                 |A|012346|-|-***-|-----|          |0110_111_001_sss_sss [BGT.S <label>]
  2308:           case 0b0110_111_001:
  2309:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2310:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  2311:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  2312:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2313:             //BGT.S <label>                                   |-|012346|-|-***-|-----|          |0110_111_010_sss_sss
  2314:             //BNLE.S <label>                                  |A|012346|-|-***-|-----|          |0110_111_010_sss_sss [BGT.S <label>]
  2315:             //JBGT.S <label>                                  |A|012346|-|-***-|-----|          |0110_111_010_sss_sss [BGT.S <label>]
  2316:             //JBNLE.S <label>                                 |A|012346|-|-***-|-----|          |0110_111_010_sss_sss [BGT.S <label>]
  2317:           case 0b0110_111_010:
  2318:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2319:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  2320:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  2321:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2322:             //BGT.S <label>                                   |-|01----|-|-***-|-----|          |0110_111_011_sss_sss
  2323:             //BNLE.S <label>                                  |A|01----|-|-***-|-----|          |0110_111_011_sss_sss [BGT.S <label>]
  2324:             //JBGT.S <label>                                  |A|01----|-|-***-|-----|          |0110_111_011_sss_sss [BGT.S <label>]
  2325:             //JBNLE.S <label>                                 |A|01----|-|-***-|-----|          |0110_111_011_sss_sss [BGT.S <label>]
  2326:           case 0b0110_111_011:
  2327:             irpBgts ();
  2328:             break irpSwitch;
  2329: 
  2330:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2331:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  2332:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  2333:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2334:             //BLE.W <label>                                   |-|012346|-|-***-|-----|          |0110_111_100_000_000-{offset}
  2335:             //BNGT.W <label>                                  |A|012346|-|-***-|-----|          |0110_111_100_000_000-{offset}        [BLE.W <label>]
  2336:             //JBLE.W <label>                                  |A|012346|-|-***-|-----|          |0110_111_100_000_000-{offset}        [BLE.W <label>]
  2337:             //JBNGT.W <label>                                 |A|012346|-|-***-|-----|          |0110_111_100_000_000-{offset}        [BLE.W <label>]
  2338:             //BLE.S <label>                                   |-|012346|-|-***-|-----|          |0110_111_100_sss_sss (s is not equal to 0)
  2339:             //BNGT.S <label>                                  |A|012346|-|-***-|-----|          |0110_111_100_sss_sss (s is not equal to 0)   [BLE.S <label>]
  2340:             //JBLE.S <label>                                  |A|012346|-|-***-|-----|          |0110_111_100_sss_sss (s is not equal to 0)   [BLE.S <label>]
  2341:             //JBNGT.S <label>                                 |A|012346|-|-***-|-----|          |0110_111_100_sss_sss (s is not equal to 0)   [BLE.S <label>]
  2342:             //JBGT.L <label>                                  |A|012346|-|-***-|-----|          |0110_111_100_000_110-0100111011111001-{address}      [BLE.S (*)+8;JMP <label>]
  2343:             //JBNLE.L <label>                                 |A|012346|-|-***-|-----|          |0110_111_100_000_110-0100111011111001-{address}      [BLE.S (*)+8;JMP <label>]
  2344:           case 0b0110_111_100:
  2345:             irpBlesw ();
  2346:             break irpSwitch;
  2347: 
  2348:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2349:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  2350:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  2351:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2352:             //BLE.S <label>                                   |-|012346|-|-***-|-----|          |0110_111_101_sss_sss
  2353:             //BNGT.S <label>                                  |A|012346|-|-***-|-----|          |0110_111_101_sss_sss [BLE.S <label>]
  2354:             //JBLE.S <label>                                  |A|012346|-|-***-|-----|          |0110_111_101_sss_sss [BLE.S <label>]
  2355:             //JBNGT.S <label>                                 |A|012346|-|-***-|-----|          |0110_111_101_sss_sss [BLE.S <label>]
  2356:           case 0b0110_111_101:
  2357:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2358:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  2359:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  2360:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2361:             //BLE.S <label>                                   |-|012346|-|-***-|-----|          |0110_111_110_sss_sss
  2362:             //BNGT.S <label>                                  |A|012346|-|-***-|-----|          |0110_111_110_sss_sss [BLE.S <label>]
  2363:             //JBLE.S <label>                                  |A|012346|-|-***-|-----|          |0110_111_110_sss_sss [BLE.S <label>]
  2364:             //JBNGT.S <label>                                 |A|012346|-|-***-|-----|          |0110_111_110_sss_sss [BLE.S <label>]
  2365:           case 0b0110_111_110:
  2366:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2367:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  2368:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  2369:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2370:             //BLE.S <label>                                   |-|01----|-|-***-|-----|          |0110_111_111_sss_sss
  2371:             //BNGT.S <label>                                  |A|01----|-|-***-|-----|          |0110_111_111_sss_sss [BLE.S <label>]
  2372:             //JBLE.S <label>                                  |A|01----|-|-***-|-----|          |0110_111_111_sss_sss [BLE.S <label>]
  2373:             //JBNGT.S <label>                                 |A|01----|-|-***-|-----|          |0110_111_111_sss_sss [BLE.S <label>]
  2374:           case 0b0110_111_111:
  2375:             irpBles ();
  2376:             break irpSwitch;
  2377: 
  2378:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2379:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  2380:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  2381:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2382:             //IOCS <name>                                     |A|012346|-|UUUUU|UUUUU|          |0111_000_0dd_ddd_ddd-0100111001001111        [MOVEQ.L #<data>,D0;TRAP #15]
  2383:             //MOVEQ.L #<data>,Dq                              |-|012346|-|-UUUU|-**00|          |0111_qqq_0dd_ddd_ddd
  2384:           case 0b0111_000_000:
  2385:           case 0b0111_000_001:
  2386:           case 0b0111_000_010:
  2387:           case 0b0111_000_011:
  2388:           case 0b0111_001_000:
  2389:           case 0b0111_001_001:
  2390:           case 0b0111_001_010:
  2391:           case 0b0111_001_011:
  2392:           case 0b0111_010_000:
  2393:           case 0b0111_010_001:
  2394:           case 0b0111_010_010:
  2395:           case 0b0111_010_011:
  2396:           case 0b0111_011_000:
  2397:           case 0b0111_011_001:
  2398:           case 0b0111_011_010:
  2399:           case 0b0111_011_011:
  2400:           case 0b0111_100_000:
  2401:           case 0b0111_100_001:
  2402:           case 0b0111_100_010:
  2403:           case 0b0111_100_011:
  2404:           case 0b0111_101_000:
  2405:           case 0b0111_101_001:
  2406:           case 0b0111_101_010:
  2407:           case 0b0111_101_011:
  2408:           case 0b0111_110_000:
  2409:           case 0b0111_110_001:
  2410:           case 0b0111_110_010:
  2411:           case 0b0111_110_011:
  2412:           case 0b0111_111_000:
  2413:           case 0b0111_111_001:
  2414:           case 0b0111_111_010:
  2415:           case 0b0111_111_011:
  2416:             irpMoveq ();
  2417:             break irpSwitch;
  2418: 
  2419:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2420:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  2421:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  2422:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2423:             //MVS.B <ea>,Dq                                   |-|------|-|-UUUU|-**00|D M+-WXZPI|0111_qqq_100_mmm_rrr (ISA_B)
  2424:           case 0b0111_000_100:
  2425:           case 0b0111_001_100:
  2426:           case 0b0111_010_100:
  2427:           case 0b0111_011_100:
  2428:           case 0b0111_100_100:
  2429:           case 0b0111_101_100:
  2430:           case 0b0111_110_100:
  2431:           case 0b0111_111_100:
  2432:             irpMvsByte ();
  2433:             break irpSwitch;
  2434: 
  2435:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2436:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  2437:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  2438:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2439:             //MVS.W <ea>,Dq                                   |-|------|-|-UUUU|-**00|D M+-WXZPI|0111_qqq_101_mmm_rrr (ISA_B)
  2440:           case 0b0111_000_101:
  2441:           case 0b0111_001_101:
  2442:           case 0b0111_010_101:
  2443:           case 0b0111_011_101:
  2444:           case 0b0111_100_101:
  2445:           case 0b0111_101_101:
  2446:           case 0b0111_110_101:
  2447:           case 0b0111_111_101:
  2448:             irpMvsWord ();
  2449:             break irpSwitch;
  2450: 
  2451:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2452:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  2453:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  2454:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2455:             //MVZ.B <ea>,Dq                                   |-|------|-|-UUUU|-0*00|D M+-WXZPI|0111_qqq_110_mmm_rrr (ISA_B)
  2456:           case 0b0111_000_110:
  2457:           case 0b0111_001_110:
  2458:           case 0b0111_010_110:
  2459:           case 0b0111_011_110:
  2460:           case 0b0111_100_110:
  2461:           case 0b0111_101_110:
  2462:           case 0b0111_110_110:
  2463:           case 0b0111_111_110:
  2464:             irpMvzByte ();
  2465:             break irpSwitch;
  2466: 
  2467:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2468:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  2469:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  2470:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2471:             //MVZ.W <ea>,Dq                                   |-|------|-|-UUUU|-0*00|D M+-WXZPI|0111_qqq_111_mmm_rrr (ISA_B)
  2472:           case 0b0111_000_111:
  2473:           case 0b0111_001_111:
  2474:           case 0b0111_010_111:
  2475:           case 0b0111_011_111:
  2476:           case 0b0111_100_111:
  2477:           case 0b0111_101_111:
  2478:           case 0b0111_110_111:
  2479:           case 0b0111_111_111:
  2480:             irpMvzWord ();
  2481:             break irpSwitch;
  2482: 
  2483:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2484:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  2485:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  2486:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2487:             //OR.B <ea>,Dq                                    |-|012346|-|-UUUU|-**00|D M+-WXZPI|1000_qqq_000_mmm_rrr
  2488:           case 0b1000_000_000:
  2489:           case 0b1000_001_000:
  2490:           case 0b1000_010_000:
  2491:           case 0b1000_011_000:
  2492:           case 0b1000_100_000:
  2493:           case 0b1000_101_000:
  2494:           case 0b1000_110_000:
  2495:           case 0b1000_111_000:
  2496:             irpOrToRegByte ();
  2497:             break irpSwitch;
  2498: 
  2499:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2500:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  2501:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  2502:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2503:             //OR.W <ea>,Dq                                    |-|012346|-|-UUUU|-**00|D M+-WXZPI|1000_qqq_001_mmm_rrr
  2504:           case 0b1000_000_001:
  2505:           case 0b1000_001_001:
  2506:           case 0b1000_010_001:
  2507:           case 0b1000_011_001:
  2508:           case 0b1000_100_001:
  2509:           case 0b1000_101_001:
  2510:           case 0b1000_110_001:
  2511:           case 0b1000_111_001:
  2512:             irpOrToRegWord ();
  2513:             break irpSwitch;
  2514: 
  2515:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2516:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  2517:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  2518:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2519:             //OR.L <ea>,Dq                                    |-|012346|-|-UUUU|-**00|D M+-WXZPI|1000_qqq_010_mmm_rrr
  2520:           case 0b1000_000_010:
  2521:           case 0b1000_001_010:
  2522:           case 0b1000_010_010:
  2523:           case 0b1000_011_010:
  2524:           case 0b1000_100_010:
  2525:           case 0b1000_101_010:
  2526:           case 0b1000_110_010:
  2527:           case 0b1000_111_010:
  2528:             irpOrToRegLong ();
  2529:             break irpSwitch;
  2530: 
  2531:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2532:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  2533:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  2534:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2535:             //DIVU.W <ea>,Dq                                  |-|012346|-|-UUUU|-***0|D M+-WXZPI|1000_qqq_011_mmm_rrr
  2536:           case 0b1000_000_011:
  2537:           case 0b1000_001_011:
  2538:           case 0b1000_010_011:
  2539:           case 0b1000_011_011:
  2540:           case 0b1000_100_011:
  2541:           case 0b1000_101_011:
  2542:           case 0b1000_110_011:
  2543:           case 0b1000_111_011:
  2544:             irpDivuWord ();
  2545:             break irpSwitch;
  2546: 
  2547:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2548:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  2549:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  2550:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2551:             //SBCD.B Dr,Dq                                    |-|012346|-|UUUUU|*U*U*|          |1000_qqq_100_000_rrr
  2552:             //SBCD.B -(Ar),-(Aq)                              |-|012346|-|UUUUU|*U*U*|          |1000_qqq_100_001_rrr
  2553:             //OR.B Dq,<ea>                                    |-|012346|-|-UUUU|-**00|  M+-WXZ  |1000_qqq_100_mmm_rrr
  2554:           case 0b1000_000_100:
  2555:           case 0b1000_001_100:
  2556:           case 0b1000_010_100:
  2557:           case 0b1000_011_100:
  2558:           case 0b1000_100_100:
  2559:           case 0b1000_101_100:
  2560:           case 0b1000_110_100:
  2561:           case 0b1000_111_100:
  2562:             irpOrToMemByte ();
  2563:             break irpSwitch;
  2564: 
  2565:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2566:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  2567:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  2568:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2569:             //OR.W Dq,<ea>                                    |-|012346|-|-UUUU|-**00|  M+-WXZ  |1000_qqq_101_mmm_rrr
  2570:           case 0b1000_000_101:
  2571:           case 0b1000_001_101:
  2572:           case 0b1000_010_101:
  2573:           case 0b1000_011_101:
  2574:           case 0b1000_100_101:
  2575:           case 0b1000_101_101:
  2576:           case 0b1000_110_101:
  2577:           case 0b1000_111_101:
  2578:             irpOrToMemWord ();
  2579:             break irpSwitch;
  2580: 
  2581:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2582:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  2583:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  2584:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2585:             //OR.L Dq,<ea>                                    |-|012346|-|-UUUU|-**00|  M+-WXZ  |1000_qqq_110_mmm_rrr
  2586:           case 0b1000_000_110:
  2587:           case 0b1000_001_110:
  2588:           case 0b1000_010_110:
  2589:           case 0b1000_011_110:
  2590:           case 0b1000_100_110:
  2591:           case 0b1000_101_110:
  2592:           case 0b1000_110_110:
  2593:           case 0b1000_111_110:
  2594:             irpOrToMemLong ();
  2595:             break irpSwitch;
  2596: 
  2597:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2598:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  2599:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  2600:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2601:             //DIVS.W <ea>,Dq                                  |-|012346|-|-UUUU|-***0|D M+-WXZPI|1000_qqq_111_mmm_rrr
  2602:           case 0b1000_000_111:
  2603:           case 0b1000_001_111:
  2604:           case 0b1000_010_111:
  2605:           case 0b1000_011_111:
  2606:           case 0b1000_100_111:
  2607:           case 0b1000_101_111:
  2608:           case 0b1000_110_111:
  2609:           case 0b1000_111_111:
  2610:             irpDivsWord ();
  2611:             break irpSwitch;
  2612: 
  2613:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2614:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  2615:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  2616:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2617:             //SUB.B <ea>,Dq                                   |-|012346|-|UUUUU|*****|D M+-WXZPI|1001_qqq_000_mmm_rrr
  2618:           case 0b1001_000_000:
  2619:           case 0b1001_001_000:
  2620:           case 0b1001_010_000:
  2621:           case 0b1001_011_000:
  2622:           case 0b1001_100_000:
  2623:           case 0b1001_101_000:
  2624:           case 0b1001_110_000:
  2625:           case 0b1001_111_000:
  2626:             irpSubToRegByte ();
  2627:             break irpSwitch;
  2628: 
  2629:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2630:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  2631:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  2632:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2633:             //SUB.W <ea>,Dq                                   |-|012346|-|UUUUU|*****|DAM+-WXZPI|1001_qqq_001_mmm_rrr
  2634:           case 0b1001_000_001:
  2635:           case 0b1001_001_001:
  2636:           case 0b1001_010_001:
  2637:           case 0b1001_011_001:
  2638:           case 0b1001_100_001:
  2639:           case 0b1001_101_001:
  2640:           case 0b1001_110_001:
  2641:           case 0b1001_111_001:
  2642:             irpSubToRegWord ();
  2643:             break irpSwitch;
  2644: 
  2645:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2646:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  2647:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  2648:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2649:             //SUB.L <ea>,Dq                                   |-|012346|-|UUUUU|*****|DAM+-WXZPI|1001_qqq_010_mmm_rrr
  2650:           case 0b1001_000_010:
  2651:           case 0b1001_001_010:
  2652:           case 0b1001_010_010:
  2653:           case 0b1001_011_010:
  2654:           case 0b1001_100_010:
  2655:           case 0b1001_101_010:
  2656:           case 0b1001_110_010:
  2657:           case 0b1001_111_010:
  2658:             irpSubToRegLong ();
  2659:             break irpSwitch;
  2660: 
  2661:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2662:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  2663:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  2664:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2665:             //SUBA.W <ea>,Aq                                  |-|012346|-|-----|-----|DAM+-WXZPI|1001_qqq_011_mmm_rrr
  2666:             //SUB.W <ea>,Aq                                   |A|012346|-|-----|-----|DAM+-WXZPI|1001_qqq_011_mmm_rrr [SUBA.W <ea>,Aq]
  2667:             //CLR.W Ar                                        |A|012346|-|-----|-----| A        |1001_rrr_011_001_rrr [SUBA.W Ar,Ar]
  2668:           case 0b1001_000_011:
  2669:           case 0b1001_001_011:
  2670:           case 0b1001_010_011:
  2671:           case 0b1001_011_011:
  2672:           case 0b1001_100_011:
  2673:           case 0b1001_101_011:
  2674:           case 0b1001_110_011:
  2675:           case 0b1001_111_011:
  2676:             irpSubaWord ();
  2677:             break irpSwitch;
  2678: 
  2679:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2680:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  2681:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  2682:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2683:             //SUBX.B Dr,Dq                                    |-|012346|-|*UUUU|*****|          |1001_qqq_100_000_rrr
  2684:             //SUBX.B -(Ar),-(Aq)                              |-|012346|-|*UUUU|*****|          |1001_qqq_100_001_rrr
  2685:             //SUB.B Dq,<ea>                                   |-|012346|-|UUUUU|*****|  M+-WXZ  |1001_qqq_100_mmm_rrr
  2686:           case 0b1001_000_100:
  2687:           case 0b1001_001_100:
  2688:           case 0b1001_010_100:
  2689:           case 0b1001_011_100:
  2690:           case 0b1001_100_100:
  2691:           case 0b1001_101_100:
  2692:           case 0b1001_110_100:
  2693:           case 0b1001_111_100:
  2694:             irpSubToMemByte ();
  2695:             break irpSwitch;
  2696: 
  2697:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2698:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  2699:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  2700:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2701:             //SUBX.W Dr,Dq                                    |-|012346|-|*UUUU|*****|          |1001_qqq_101_000_rrr
  2702:             //SUBX.W -(Ar),-(Aq)                              |-|012346|-|*UUUU|*****|          |1001_qqq_101_001_rrr
  2703:             //SUB.W Dq,<ea>                                   |-|012346|-|UUUUU|*****|  M+-WXZ  |1001_qqq_101_mmm_rrr
  2704:           case 0b1001_000_101:
  2705:           case 0b1001_001_101:
  2706:           case 0b1001_010_101:
  2707:           case 0b1001_011_101:
  2708:           case 0b1001_100_101:
  2709:           case 0b1001_101_101:
  2710:           case 0b1001_110_101:
  2711:           case 0b1001_111_101:
  2712:             irpSubToMemWord ();
  2713:             break irpSwitch;
  2714: 
  2715:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2716:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  2717:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  2718:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2719:             //SUBX.L Dr,Dq                                    |-|012346|-|*UUUU|*****|          |1001_qqq_110_000_rrr
  2720:             //SUBX.L -(Ar),-(Aq)                              |-|012346|-|*UUUU|*****|          |1001_qqq_110_001_rrr
  2721:             //SUB.L Dq,<ea>                                   |-|012346|-|UUUUU|*****|  M+-WXZ  |1001_qqq_110_mmm_rrr
  2722:           case 0b1001_000_110:
  2723:           case 0b1001_001_110:
  2724:           case 0b1001_010_110:
  2725:           case 0b1001_011_110:
  2726:           case 0b1001_100_110:
  2727:           case 0b1001_101_110:
  2728:           case 0b1001_110_110:
  2729:           case 0b1001_111_110:
  2730:             irpSubToMemLong ();
  2731:             break irpSwitch;
  2732: 
  2733:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2734:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  2735:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  2736:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2737:             //SUBA.L <ea>,Aq                                  |-|012346|-|-----|-----|DAM+-WXZPI|1001_qqq_111_mmm_rrr
  2738:             //SUB.L <ea>,Aq                                   |A|012346|-|-----|-----|DAM+-WXZPI|1001_qqq_111_mmm_rrr [SUBA.L <ea>,Aq]
  2739:             //CLR.L Ar                                        |A|012346|-|-----|-----| A        |1001_rrr_111_001_rrr [SUBA.L Ar,Ar]
  2740:           case 0b1001_000_111:
  2741:           case 0b1001_001_111:
  2742:           case 0b1001_010_111:
  2743:           case 0b1001_011_111:
  2744:           case 0b1001_100_111:
  2745:           case 0b1001_101_111:
  2746:           case 0b1001_110_111:
  2747:           case 0b1001_111_111:
  2748:             irpSubaLong ();
  2749:             break irpSwitch;
  2750: 
  2751:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2752:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  2753:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  2754:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2755:             //SXCALL <name>                                   |A|012346|-|UUUUU|*****|          |1010_0dd_ddd_ddd_ddd [ALINE #<data>]
  2756:           case 0b1010_000_000:
  2757:           case 0b1010_000_001:
  2758:           case 0b1010_000_010:
  2759:           case 0b1010_000_011:
  2760:           case 0b1010_000_100:
  2761:           case 0b1010_000_101:
  2762:           case 0b1010_000_110:
  2763:           case 0b1010_000_111:
  2764:           case 0b1010_001_000:
  2765:           case 0b1010_001_001:
  2766:           case 0b1010_001_010:
  2767:           case 0b1010_001_011:
  2768:           case 0b1010_001_100:
  2769:           case 0b1010_001_101:
  2770:           case 0b1010_001_110:
  2771:           case 0b1010_001_111:
  2772:           case 0b1010_010_000:
  2773:           case 0b1010_010_001:
  2774:           case 0b1010_010_010:
  2775:           case 0b1010_010_011:
  2776:           case 0b1010_010_100:
  2777:           case 0b1010_010_101:
  2778:           case 0b1010_010_110:
  2779:           case 0b1010_010_111:
  2780:           case 0b1010_011_000:
  2781:           case 0b1010_011_001:
  2782:           case 0b1010_011_010:
  2783:           case 0b1010_011_011:
  2784:           case 0b1010_011_100:
  2785:           case 0b1010_011_101:
  2786:           case 0b1010_011_110:
  2787:           case 0b1010_011_111:
  2788:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2789:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  2790:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  2791:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2792:             //ALINE #<data>                                   |-|012346|-|UUUUU|*****|          |1010_ddd_ddd_ddd_ddd (line 1010 emulator)
  2793:           case 0b1010_100_000:
  2794:           case 0b1010_100_001:
  2795:           case 0b1010_100_010:
  2796:           case 0b1010_100_011:
  2797:           case 0b1010_100_100:
  2798:           case 0b1010_100_101:
  2799:           case 0b1010_100_110:
  2800:           case 0b1010_100_111:
  2801:           case 0b1010_101_000:
  2802:           case 0b1010_101_001:
  2803:           case 0b1010_101_010:
  2804:           case 0b1010_101_011:
  2805:           case 0b1010_101_100:
  2806:           case 0b1010_101_101:
  2807:           case 0b1010_101_110:
  2808:           case 0b1010_101_111:
  2809:           case 0b1010_110_000:
  2810:           case 0b1010_110_001:
  2811:           case 0b1010_110_010:
  2812:           case 0b1010_110_011:
  2813:           case 0b1010_110_100:
  2814:           case 0b1010_110_101:
  2815:           case 0b1010_110_110:
  2816:           case 0b1010_110_111:
  2817:           case 0b1010_111_000:
  2818:           case 0b1010_111_001:
  2819:           case 0b1010_111_010:
  2820:           case 0b1010_111_011:
  2821:           case 0b1010_111_100:
  2822:           case 0b1010_111_101:
  2823:           case 0b1010_111_110:
  2824:           case 0b1010_111_111:
  2825:             irpAline ();
  2826:             break irpSwitch;
  2827: 
  2828:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2829:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  2830:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  2831:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2832:             //CMP.B <ea>,Dq                                   |-|012346|-|-UUUU|-****|D M+-WXZPI|1011_qqq_000_mmm_rrr
  2833:           case 0b1011_000_000:
  2834:           case 0b1011_001_000:
  2835:           case 0b1011_010_000:
  2836:           case 0b1011_011_000:
  2837:           case 0b1011_100_000:
  2838:           case 0b1011_101_000:
  2839:           case 0b1011_110_000:
  2840:           case 0b1011_111_000:
  2841:             irpCmpByte ();
  2842:             break irpSwitch;
  2843: 
  2844:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2845:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  2846:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  2847:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2848:             //CMP.W <ea>,Dq                                   |-|012346|-|-UUUU|-****|DAM+-WXZPI|1011_qqq_001_mmm_rrr
  2849:           case 0b1011_000_001:
  2850:           case 0b1011_001_001:
  2851:           case 0b1011_010_001:
  2852:           case 0b1011_011_001:
  2853:           case 0b1011_100_001:
  2854:           case 0b1011_101_001:
  2855:           case 0b1011_110_001:
  2856:           case 0b1011_111_001:
  2857:             irpCmpWord ();
  2858:             break irpSwitch;
  2859: 
  2860:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2861:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  2862:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  2863:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2864:             //CMP.L <ea>,Dq                                   |-|012346|-|-UUUU|-****|DAM+-WXZPI|1011_qqq_010_mmm_rrr
  2865:           case 0b1011_000_010:
  2866:           case 0b1011_001_010:
  2867:           case 0b1011_010_010:
  2868:           case 0b1011_011_010:
  2869:           case 0b1011_100_010:
  2870:           case 0b1011_101_010:
  2871:           case 0b1011_110_010:
  2872:           case 0b1011_111_010:
  2873:             irpCmpLong ();
  2874:             break irpSwitch;
  2875: 
  2876:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2877:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  2878:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  2879:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2880:             //CMPA.W <ea>,Aq                                  |-|012346|-|-UUUU|-****|DAM+-WXZPI|1011_qqq_011_mmm_rrr
  2881:             //CMP.W <ea>,Aq                                   |A|012346|-|-UUUU|-****|DAM+-WXZPI|1011_qqq_011_mmm_rrr [CMPA.W <ea>,Aq]
  2882:           case 0b1011_000_011:
  2883:           case 0b1011_001_011:
  2884:           case 0b1011_010_011:
  2885:           case 0b1011_011_011:
  2886:           case 0b1011_100_011:
  2887:           case 0b1011_101_011:
  2888:           case 0b1011_110_011:
  2889:           case 0b1011_111_011:
  2890:             irpCmpaWord ();
  2891:             break irpSwitch;
  2892: 
  2893:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2894:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  2895:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  2896:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2897:             //EOR.B Dq,<ea>                                   |-|012346|-|-UUUU|-**00|D M+-WXZ  |1011_qqq_100_mmm_rrr
  2898:             //CMPM.B (Ar)+,(Aq)+                              |-|012346|-|-UUUU|-****|          |1011_qqq_100_001_rrr
  2899:           case 0b1011_000_100:
  2900:           case 0b1011_001_100:
  2901:           case 0b1011_010_100:
  2902:           case 0b1011_011_100:
  2903:           case 0b1011_100_100:
  2904:           case 0b1011_101_100:
  2905:           case 0b1011_110_100:
  2906:           case 0b1011_111_100:
  2907:             irpEorByte ();
  2908:             break irpSwitch;
  2909: 
  2910:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2911:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  2912:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  2913:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2914:             //EOR.W Dq,<ea>                                   |-|012346|-|-UUUU|-**00|D M+-WXZ  |1011_qqq_101_mmm_rrr
  2915:             //CMPM.W (Ar)+,(Aq)+                              |-|012346|-|-UUUU|-****|          |1011_qqq_101_001_rrr
  2916:           case 0b1011_000_101:
  2917:           case 0b1011_001_101:
  2918:           case 0b1011_010_101:
  2919:           case 0b1011_011_101:
  2920:           case 0b1011_100_101:
  2921:           case 0b1011_101_101:
  2922:           case 0b1011_110_101:
  2923:           case 0b1011_111_101:
  2924:             irpEorWord ();
  2925:             break irpSwitch;
  2926: 
  2927:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2928:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  2929:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  2930:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2931:             //EOR.L Dq,<ea>                                   |-|012346|-|-UUUU|-**00|D M+-WXZ  |1011_qqq_110_mmm_rrr
  2932:             //CMPM.L (Ar)+,(Aq)+                              |-|012346|-|-UUUU|-****|          |1011_qqq_110_001_rrr
  2933:           case 0b1011_000_110:
  2934:           case 0b1011_001_110:
  2935:           case 0b1011_010_110:
  2936:           case 0b1011_011_110:
  2937:           case 0b1011_100_110:
  2938:           case 0b1011_101_110:
  2939:           case 0b1011_110_110:
  2940:           case 0b1011_111_110:
  2941:             irpEorLong ();
  2942:             break irpSwitch;
  2943: 
  2944:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2945:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  2946:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  2947:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2948:             //CMPA.L <ea>,Aq                                  |-|012346|-|-UUUU|-****|DAM+-WXZPI|1011_qqq_111_mmm_rrr
  2949:             //CMP.L <ea>,Aq                                   |A|012346|-|-UUUU|-****|DAM+-WXZPI|1011_qqq_111_mmm_rrr [CMPA.L <ea>,Aq]
  2950:           case 0b1011_000_111:
  2951:           case 0b1011_001_111:
  2952:           case 0b1011_010_111:
  2953:           case 0b1011_011_111:
  2954:           case 0b1011_100_111:
  2955:           case 0b1011_101_111:
  2956:           case 0b1011_110_111:
  2957:           case 0b1011_111_111:
  2958:             irpCmpaLong ();
  2959:             break irpSwitch;
  2960: 
  2961:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2962:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  2963:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  2964:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2965:             //AND.B <ea>,Dq                                   |-|012346|-|-UUUU|-**00|D M+-WXZPI|1100_qqq_000_mmm_rrr
  2966:           case 0b1100_000_000:
  2967:           case 0b1100_001_000:
  2968:           case 0b1100_010_000:
  2969:           case 0b1100_011_000:
  2970:           case 0b1100_100_000:
  2971:           case 0b1100_101_000:
  2972:           case 0b1100_110_000:
  2973:           case 0b1100_111_000:
  2974:             irpAndToRegByte ();
  2975:             break irpSwitch;
  2976: 
  2977:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2978:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  2979:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  2980:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2981:             //AND.W <ea>,Dq                                   |-|012346|-|-UUUU|-**00|D M+-WXZPI|1100_qqq_001_mmm_rrr
  2982:           case 0b1100_000_001:
  2983:           case 0b1100_001_001:
  2984:           case 0b1100_010_001:
  2985:           case 0b1100_011_001:
  2986:           case 0b1100_100_001:
  2987:           case 0b1100_101_001:
  2988:           case 0b1100_110_001:
  2989:           case 0b1100_111_001:
  2990:             irpAndToRegWord ();
  2991:             break irpSwitch;
  2992: 
  2993:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2994:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  2995:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  2996:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  2997:             //AND.L <ea>,Dq                                   |-|012346|-|-UUUU|-**00|D M+-WXZPI|1100_qqq_010_mmm_rrr
  2998:           case 0b1100_000_010:
  2999:           case 0b1100_001_010:
  3000:           case 0b1100_010_010:
  3001:           case 0b1100_011_010:
  3002:           case 0b1100_100_010:
  3003:           case 0b1100_101_010:
  3004:           case 0b1100_110_010:
  3005:           case 0b1100_111_010:
  3006:             irpAndToRegLong ();
  3007:             break irpSwitch;
  3008: 
  3009:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  3010:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  3011:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  3012:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  3013:             //MULU.W <ea>,Dq                                  |-|012346|-|-UUUU|-***0|D M+-WXZPI|1100_qqq_011_mmm_rrr
  3014:           case 0b1100_000_011:
  3015:           case 0b1100_001_011:
  3016:           case 0b1100_010_011:
  3017:           case 0b1100_011_011:
  3018:           case 0b1100_100_011:
  3019:           case 0b1100_101_011:
  3020:           case 0b1100_110_011:
  3021:           case 0b1100_111_011:
  3022:             irpMuluWord ();
  3023:             break irpSwitch;
  3024: 
  3025:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  3026:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  3027:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  3028:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  3029:             //ABCD.B Dr,Dq                                    |-|012346|-|UUUUU|*U*U*|          |1100_qqq_100_000_rrr
  3030:             //ABCD.B -(Ar),-(Aq)                              |-|012346|-|UUUUU|*U*U*|          |1100_qqq_100_001_rrr
  3031:             //AND.B Dq,<ea>                                   |-|012346|-|-UUUU|-**00|  M+-WXZ  |1100_qqq_100_mmm_rrr
  3032:           case 0b1100_000_100:
  3033:           case 0b1100_001_100:
  3034:           case 0b1100_010_100:
  3035:           case 0b1100_011_100:
  3036:           case 0b1100_100_100:
  3037:           case 0b1100_101_100:
  3038:           case 0b1100_110_100:
  3039:           case 0b1100_111_100:
  3040:             irpAndToMemByte ();
  3041:             break irpSwitch;
  3042: 
  3043:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  3044:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  3045:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  3046:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  3047:             //EXG.L Dq,Dr                                     |-|012346|-|-----|-----|          |1100_qqq_101_000_rrr
  3048:             //EXG.L Aq,Ar                                     |-|012346|-|-----|-----|          |1100_qqq_101_001_rrr
  3049:             //AND.W Dq,<ea>                                   |-|012346|-|-UUUU|-**00|  M+-WXZ  |1100_qqq_101_mmm_rrr
  3050:           case 0b1100_000_101:
  3051:           case 0b1100_001_101:
  3052:           case 0b1100_010_101:
  3053:           case 0b1100_011_101:
  3054:           case 0b1100_100_101:
  3055:           case 0b1100_101_101:
  3056:           case 0b1100_110_101:
  3057:           case 0b1100_111_101:
  3058:             irpAndToMemWord ();
  3059:             break irpSwitch;
  3060: 
  3061:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  3062:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  3063:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  3064:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  3065:             //EXG.L Dq,Ar                                     |-|012346|-|-----|-----|          |1100_qqq_110_001_rrr
  3066:             //AND.L Dq,<ea>                                   |-|012346|-|-UUUU|-**00|  M+-WXZ  |1100_qqq_110_mmm_rrr
  3067:           case 0b1100_000_110:
  3068:           case 0b1100_001_110:
  3069:           case 0b1100_010_110:
  3070:           case 0b1100_011_110:
  3071:           case 0b1100_100_110:
  3072:           case 0b1100_101_110:
  3073:           case 0b1100_110_110:
  3074:           case 0b1100_111_110:
  3075:             irpAndToMemLong ();
  3076:             break irpSwitch;
  3077: 
  3078:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  3079:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  3080:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  3081:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  3082:             //MULS.W <ea>,Dq                                  |-|012346|-|-UUUU|-***0|D M+-WXZPI|1100_qqq_111_mmm_rrr
  3083:           case 0b1100_000_111:
  3084:           case 0b1100_001_111:
  3085:           case 0b1100_010_111:
  3086:           case 0b1100_011_111:
  3087:           case 0b1100_100_111:
  3088:           case 0b1100_101_111:
  3089:           case 0b1100_110_111:
  3090:           case 0b1100_111_111:
  3091:             irpMulsWord ();
  3092:             break irpSwitch;
  3093: 
  3094:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  3095:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  3096:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  3097:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  3098:             //ADD.B <ea>,Dq                                   |-|012346|-|UUUUU|*****|D M+-WXZPI|1101_qqq_000_mmm_rrr
  3099:           case 0b1101_000_000:
  3100:           case 0b1101_001_000:
  3101:           case 0b1101_010_000:
  3102:           case 0b1101_011_000:
  3103:           case 0b1101_100_000:
  3104:           case 0b1101_101_000:
  3105:           case 0b1101_110_000:
  3106:           case 0b1101_111_000:
  3107:             irpAddToRegByte ();
  3108:             break irpSwitch;
  3109: 
  3110:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  3111:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  3112:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  3113:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  3114:             //ADD.W <ea>,Dq                                   |-|012346|-|UUUUU|*****|DAM+-WXZPI|1101_qqq_001_mmm_rrr
  3115:           case 0b1101_000_001:
  3116:           case 0b1101_001_001:
  3117:           case 0b1101_010_001:
  3118:           case 0b1101_011_001:
  3119:           case 0b1101_100_001:
  3120:           case 0b1101_101_001:
  3121:           case 0b1101_110_001:
  3122:           case 0b1101_111_001:
  3123:             irpAddToRegWord ();
  3124:             break irpSwitch;
  3125: 
  3126:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  3127:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  3128:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  3129:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  3130:             //ADD.L <ea>,Dq                                   |-|012346|-|UUUUU|*****|DAM+-WXZPI|1101_qqq_010_mmm_rrr
  3131:           case 0b1101_000_010:
  3132:           case 0b1101_001_010:
  3133:           case 0b1101_010_010:
  3134:           case 0b1101_011_010:
  3135:           case 0b1101_100_010:
  3136:           case 0b1101_101_010:
  3137:           case 0b1101_110_010:
  3138:           case 0b1101_111_010:
  3139:             irpAddToRegLong ();
  3140:             break irpSwitch;
  3141: 
  3142:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  3143:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  3144:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  3145:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  3146:             //ADDA.W <ea>,Aq                                  |-|012346|-|-----|-----|DAM+-WXZPI|1101_qqq_011_mmm_rrr
  3147:             //ADD.W <ea>,Aq                                   |A|012346|-|-----|-----|DAM+-WXZPI|1101_qqq_011_mmm_rrr [ADDA.W <ea>,Aq]
  3148:           case 0b1101_000_011:
  3149:           case 0b1101_001_011:
  3150:           case 0b1101_010_011:
  3151:           case 0b1101_011_011:
  3152:           case 0b1101_100_011:
  3153:           case 0b1101_101_011:
  3154:           case 0b1101_110_011:
  3155:           case 0b1101_111_011:
  3156:             irpAddaWord ();
  3157:             break irpSwitch;
  3158: 
  3159:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  3160:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  3161:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  3162:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  3163:             //ADDX.B Dr,Dq                                    |-|012346|-|*UUUU|*****|          |1101_qqq_100_000_rrr
  3164:             //ADDX.B -(Ar),-(Aq)                              |-|012346|-|*UUUU|*****|          |1101_qqq_100_001_rrr
  3165:             //ADD.B Dq,<ea>                                   |-|012346|-|UUUUU|*****|  M+-WXZ  |1101_qqq_100_mmm_rrr
  3166:           case 0b1101_000_100:
  3167:           case 0b1101_001_100:
  3168:           case 0b1101_010_100:
  3169:           case 0b1101_011_100:
  3170:           case 0b1101_100_100:
  3171:           case 0b1101_101_100:
  3172:           case 0b1101_110_100:
  3173:           case 0b1101_111_100:
  3174:             irpAddToMemByte ();
  3175:             break irpSwitch;
  3176: 
  3177:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  3178:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  3179:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  3180:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  3181:             //ADDX.W Dr,Dq                                    |-|012346|-|*UUUU|*****|          |1101_qqq_101_000_rrr
  3182:             //ADDX.W -(Ar),-(Aq)                              |-|012346|-|*UUUU|*****|          |1101_qqq_101_001_rrr
  3183:             //ADD.W Dq,<ea>                                   |-|012346|-|UUUUU|*****|  M+-WXZ  |1101_qqq_101_mmm_rrr
  3184:           case 0b1101_000_101:
  3185:           case 0b1101_001_101:
  3186:           case 0b1101_010_101:
  3187:           case 0b1101_011_101:
  3188:           case 0b1101_100_101:
  3189:           case 0b1101_101_101:
  3190:           case 0b1101_110_101:
  3191:           case 0b1101_111_101:
  3192:             irpAddToMemWord ();
  3193:             break irpSwitch;
  3194: 
  3195:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  3196:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  3197:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  3198:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  3199:             //ADDX.L Dr,Dq                                    |-|012346|-|*UUUU|*****|          |1101_qqq_110_000_rrr
  3200:             //ADDX.L -(Ar),-(Aq)                              |-|012346|-|*UUUU|*****|          |1101_qqq_110_001_rrr
  3201:             //ADD.L Dq,<ea>                                   |-|012346|-|UUUUU|*****|  M+-WXZ  |1101_qqq_110_mmm_rrr
  3202:           case 0b1101_000_110:
  3203:           case 0b1101_001_110:
  3204:           case 0b1101_010_110:
  3205:           case 0b1101_011_110:
  3206:           case 0b1101_100_110:
  3207:           case 0b1101_101_110:
  3208:           case 0b1101_110_110:
  3209:           case 0b1101_111_110:
  3210:             irpAddToMemLong ();
  3211:             break irpSwitch;
  3212: 
  3213:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  3214:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  3215:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  3216:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  3217:             //ADDA.L <ea>,Aq                                  |-|012346|-|-----|-----|DAM+-WXZPI|1101_qqq_111_mmm_rrr
  3218:             //ADD.L <ea>,Aq                                   |A|012346|-|-----|-----|DAM+-WXZPI|1101_qqq_111_mmm_rrr [ADDA.L <ea>,Aq]
  3219:           case 0b1101_000_111:
  3220:           case 0b1101_001_111:
  3221:           case 0b1101_010_111:
  3222:           case 0b1101_011_111:
  3223:           case 0b1101_100_111:
  3224:           case 0b1101_101_111:
  3225:           case 0b1101_110_111:
  3226:           case 0b1101_111_111:
  3227:             irpAddaLong ();
  3228:             break irpSwitch;
  3229: 
  3230:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  3231:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  3232:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  3233:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  3234:             //ASR.B #<data>,Dr                                |-|012346|-|UUUUU|***0*|          |1110_qqq_000_000_rrr
  3235:             //LSR.B #<data>,Dr                                |-|012346|-|UUUUU|***0*|          |1110_qqq_000_001_rrr
  3236:             //ROXR.B #<data>,Dr                               |-|012346|-|*UUUU|***0*|          |1110_qqq_000_010_rrr
  3237:             //ROR.B #<data>,Dr                                |-|012346|-|-UUUU|-**0*|          |1110_qqq_000_011_rrr
  3238:             //ASR.B Dq,Dr                                     |-|012346|-|UUUUU|***0*|          |1110_qqq_000_100_rrr
  3239:             //LSR.B Dq,Dr                                     |-|012346|-|UUUUU|***0*|          |1110_qqq_000_101_rrr
  3240:             //ROXR.B Dq,Dr                                    |-|012346|-|*UUUU|***0*|          |1110_qqq_000_110_rrr
  3241:             //ROR.B Dq,Dr                                     |-|012346|-|-UUUU|-**0*|          |1110_qqq_000_111_rrr
  3242:             //ASR.B Dr                                        |A|012346|-|UUUUU|***0*|          |1110_001_000_000_rrr [ASR.B #1,Dr]
  3243:             //LSR.B Dr                                        |A|012346|-|UUUUU|***0*|          |1110_001_000_001_rrr [LSR.B #1,Dr]
  3244:             //ROXR.B Dr                                       |A|012346|-|*UUUU|***0*|          |1110_001_000_010_rrr [ROXR.B #1,Dr]
  3245:             //ROR.B Dr                                        |A|012346|-|-UUUU|-**0*|          |1110_001_000_011_rrr [ROR.B #1,Dr]
  3246:           case 0b1110_000_000:
  3247:           case 0b1110_001_000:
  3248:           case 0b1110_010_000:
  3249:           case 0b1110_011_000:
  3250:           case 0b1110_100_000:
  3251:           case 0b1110_101_000:
  3252:           case 0b1110_110_000:
  3253:           case 0b1110_111_000:
  3254:             irpXxrToRegByte ();
  3255:             break irpSwitch;
  3256: 
  3257:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  3258:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  3259:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  3260:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  3261:             //ASR.W #<data>,Dr                                |-|012346|-|UUUUU|***0*|          |1110_qqq_001_000_rrr
  3262:             //LSR.W #<data>,Dr                                |-|012346|-|UUUUU|***0*|          |1110_qqq_001_001_rrr
  3263:             //ROXR.W #<data>,Dr                               |-|012346|-|*UUUU|***0*|          |1110_qqq_001_010_rrr
  3264:             //ROR.W #<data>,Dr                                |-|012346|-|-UUUU|-**0*|          |1110_qqq_001_011_rrr
  3265:             //ASR.W Dq,Dr                                     |-|012346|-|UUUUU|***0*|          |1110_qqq_001_100_rrr
  3266:             //LSR.W Dq,Dr                                     |-|012346|-|UUUUU|***0*|          |1110_qqq_001_101_rrr
  3267:             //ROXR.W Dq,Dr                                    |-|012346|-|*UUUU|***0*|          |1110_qqq_001_110_rrr
  3268:             //ROR.W Dq,Dr                                     |-|012346|-|-UUUU|-**0*|          |1110_qqq_001_111_rrr
  3269:             //ASR.W Dr                                        |A|012346|-|UUUUU|***0*|          |1110_001_001_000_rrr [ASR.W #1,Dr]
  3270:             //LSR.W Dr                                        |A|012346|-|UUUUU|***0*|          |1110_001_001_001_rrr [LSR.W #1,Dr]
  3271:             //ROXR.W Dr                                       |A|012346|-|*UUUU|***0*|          |1110_001_001_010_rrr [ROXR.W #1,Dr]
  3272:             //ROR.W Dr                                        |A|012346|-|-UUUU|-**0*|          |1110_001_001_011_rrr [ROR.W #1,Dr]
  3273:           case 0b1110_000_001:
  3274:           case 0b1110_001_001:
  3275:           case 0b1110_010_001:
  3276:           case 0b1110_011_001:
  3277:           case 0b1110_100_001:
  3278:           case 0b1110_101_001:
  3279:           case 0b1110_110_001:
  3280:           case 0b1110_111_001:
  3281:             irpXxrToRegWord ();
  3282:             break irpSwitch;
  3283: 
  3284:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  3285:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  3286:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  3287:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  3288:             //ASR.L #<data>,Dr                                |-|012346|-|UUUUU|***0*|          |1110_qqq_010_000_rrr
  3289:             //LSR.L #<data>,Dr                                |-|012346|-|UUUUU|***0*|          |1110_qqq_010_001_rrr
  3290:             //ROXR.L #<data>,Dr                               |-|012346|-|*UUUU|***0*|          |1110_qqq_010_010_rrr
  3291:             //ROR.L #<data>,Dr                                |-|012346|-|-UUUU|-**0*|          |1110_qqq_010_011_rrr
  3292:             //ASR.L Dq,Dr                                     |-|012346|-|UUUUU|***0*|          |1110_qqq_010_100_rrr
  3293:             //LSR.L Dq,Dr                                     |-|012346|-|UUUUU|***0*|          |1110_qqq_010_101_rrr
  3294:             //ROXR.L Dq,Dr                                    |-|012346|-|*UUUU|***0*|          |1110_qqq_010_110_rrr
  3295:             //ROR.L Dq,Dr                                     |-|012346|-|-UUUU|-**0*|          |1110_qqq_010_111_rrr
  3296:             //ASR.L Dr                                        |A|012346|-|UUUUU|***0*|          |1110_001_010_000_rrr [ASR.L #1,Dr]
  3297:             //LSR.L Dr                                        |A|012346|-|UUUUU|***0*|          |1110_001_010_001_rrr [LSR.L #1,Dr]
  3298:             //ROXR.L Dr                                       |A|012346|-|*UUUU|***0*|          |1110_001_010_010_rrr [ROXR.L #1,Dr]
  3299:             //ROR.L Dr                                        |A|012346|-|-UUUU|-**0*|          |1110_001_010_011_rrr [ROR.L #1,Dr]
  3300:           case 0b1110_000_010:
  3301:           case 0b1110_001_010:
  3302:           case 0b1110_010_010:
  3303:           case 0b1110_011_010:
  3304:           case 0b1110_100_010:
  3305:           case 0b1110_101_010:
  3306:           case 0b1110_110_010:
  3307:           case 0b1110_111_010:
  3308:             irpXxrToRegLong ();
  3309:             break irpSwitch;
  3310: 
  3311:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  3312:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  3313:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  3314:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  3315:             //ASR.W <ea>                                      |-|012346|-|UUUUU|***0*|  M+-WXZ  |1110_000_011_mmm_rrr
  3316:           case 0b1110_000_011:
  3317:             irpAsrToMem ();
  3318:             break irpSwitch;
  3319: 
  3320:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  3321:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  3322:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  3323:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  3324:             //ASL.B #<data>,Dr                                |-|012346|-|UUUUU|*****|          |1110_qqq_100_000_rrr
  3325:             //LSL.B #<data>,Dr                                |-|012346|-|UUUUU|***0*|          |1110_qqq_100_001_rrr
  3326:             //ROXL.B #<data>,Dr                               |-|012346|-|*UUUU|***0*|          |1110_qqq_100_010_rrr
  3327:             //ROL.B #<data>,Dr                                |-|012346|-|-UUUU|-**0*|          |1110_qqq_100_011_rrr
  3328:             //ASL.B Dq,Dr                                     |-|012346|-|UUUUU|*****|          |1110_qqq_100_100_rrr
  3329:             //LSL.B Dq,Dr                                     |-|012346|-|UUUUU|***0*|          |1110_qqq_100_101_rrr
  3330:             //ROXL.B Dq,Dr                                    |-|012346|-|*UUUU|***0*|          |1110_qqq_100_110_rrr
  3331:             //ROL.B Dq,Dr                                     |-|012346|-|-UUUU|-**0*|          |1110_qqq_100_111_rrr
  3332:             //ASL.B Dr                                        |A|012346|-|UUUUU|*****|          |1110_001_100_000_rrr [ASL.B #1,Dr]
  3333:             //LSL.B Dr                                        |A|012346|-|UUUUU|***0*|          |1110_001_100_001_rrr [LSL.B #1,Dr]
  3334:             //ROXL.B Dr                                       |A|012346|-|*UUUU|***0*|          |1110_001_100_010_rrr [ROXL.B #1,Dr]
  3335:             //ROL.B Dr                                        |A|012346|-|-UUUU|-**0*|          |1110_001_100_011_rrr [ROL.B #1,Dr]
  3336:           case 0b1110_000_100:
  3337:           case 0b1110_001_100:
  3338:           case 0b1110_010_100:
  3339:           case 0b1110_011_100:
  3340:           case 0b1110_100_100:
  3341:           case 0b1110_101_100:
  3342:           case 0b1110_110_100:
  3343:           case 0b1110_111_100:
  3344:             irpXxlToRegByte ();
  3345:             break irpSwitch;
  3346: 
  3347:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  3348:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  3349:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  3350:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  3351:             //ASL.W #<data>,Dr                                |-|012346|-|UUUUU|*****|          |1110_qqq_101_000_rrr
  3352:             //LSL.W #<data>,Dr                                |-|012346|-|UUUUU|***0*|          |1110_qqq_101_001_rrr
  3353:             //ROXL.W #<data>,Dr                               |-|012346|-|*UUUU|***0*|          |1110_qqq_101_010_rrr
  3354:             //ROL.W #<data>,Dr                                |-|012346|-|-UUUU|-**0*|          |1110_qqq_101_011_rrr
  3355:             //ASL.W Dq,Dr                                     |-|012346|-|UUUUU|*****|          |1110_qqq_101_100_rrr
  3356:             //LSL.W Dq,Dr                                     |-|012346|-|UUUUU|***0*|          |1110_qqq_101_101_rrr
  3357:             //ROXL.W Dq,Dr                                    |-|012346|-|*UUUU|***0*|          |1110_qqq_101_110_rrr
  3358:             //ROL.W Dq,Dr                                     |-|012346|-|-UUUU|-**0*|          |1110_qqq_101_111_rrr
  3359:             //ASL.W Dr                                        |A|012346|-|UUUUU|*****|          |1110_001_101_000_rrr [ASL.W #1,Dr]
  3360:             //LSL.W Dr                                        |A|012346|-|UUUUU|***0*|          |1110_001_101_001_rrr [LSL.W #1,Dr]
  3361:             //ROXL.W Dr                                       |A|012346|-|*UUUU|***0*|          |1110_001_101_010_rrr [ROXL.W #1,Dr]
  3362:             //ROL.W Dr                                        |A|012346|-|-UUUU|-**0*|          |1110_001_101_011_rrr [ROL.W #1,Dr]
  3363:           case 0b1110_000_101:
  3364:           case 0b1110_001_101:
  3365:           case 0b1110_010_101:
  3366:           case 0b1110_011_101:
  3367:           case 0b1110_100_101:
  3368:           case 0b1110_101_101:
  3369:           case 0b1110_110_101:
  3370:           case 0b1110_111_101:
  3371:             irpXxlToRegWord ();
  3372:             break irpSwitch;
  3373: 
  3374:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  3375:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  3376:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  3377:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  3378:             //ASL.L #<data>,Dr                                |-|012346|-|UUUUU|*****|          |1110_qqq_110_000_rrr
  3379:             //LSL.L #<data>,Dr                                |-|012346|-|UUUUU|***0*|          |1110_qqq_110_001_rrr
  3380:             //ROXL.L #<data>,Dr                               |-|012346|-|*UUUU|***0*|          |1110_qqq_110_010_rrr
  3381:             //ROL.L #<data>,Dr                                |-|012346|-|-UUUU|-**0*|          |1110_qqq_110_011_rrr
  3382:             //ASL.L Dq,Dr                                     |-|012346|-|UUUUU|*****|          |1110_qqq_110_100_rrr
  3383:             //LSL.L Dq,Dr                                     |-|012346|-|UUUUU|***0*|          |1110_qqq_110_101_rrr
  3384:             //ROXL.L Dq,Dr                                    |-|012346|-|*UUUU|***0*|          |1110_qqq_110_110_rrr
  3385:             //ROL.L Dq,Dr                                     |-|012346|-|-UUUU|-**0*|          |1110_qqq_110_111_rrr
  3386:             //ASL.L Dr                                        |A|012346|-|UUUUU|*****|          |1110_001_110_000_rrr [ASL.L #1,Dr]
  3387:             //LSL.L Dr                                        |A|012346|-|UUUUU|***0*|          |1110_001_110_001_rrr [LSL.L #1,Dr]
  3388:             //ROXL.L Dr                                       |A|012346|-|*UUUU|***0*|          |1110_001_110_010_rrr [ROXL.L #1,Dr]
  3389:             //ROL.L Dr                                        |A|012346|-|-UUUU|-**0*|          |1110_001_110_011_rrr [ROL.L #1,Dr]
  3390:           case 0b1110_000_110:
  3391:           case 0b1110_001_110:
  3392:           case 0b1110_010_110:
  3393:           case 0b1110_011_110:
  3394:           case 0b1110_100_110:
  3395:           case 0b1110_101_110:
  3396:           case 0b1110_110_110:
  3397:           case 0b1110_111_110:
  3398:             irpXxlToRegLong ();
  3399:             break irpSwitch;
  3400: 
  3401:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  3402:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  3403:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  3404:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  3405:             //ASL.W <ea>                                      |-|012346|-|UUUUU|*****|  M+-WXZ  |1110_000_111_mmm_rrr
  3406:           case 0b1110_000_111:
  3407:             irpAslToMem ();
  3408:             break irpSwitch;
  3409: 
  3410:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  3411:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  3412:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  3413:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  3414:             //LSR.W <ea>                                      |-|012346|-|UUUUU|*0*0*|  M+-WXZ  |1110_001_011_mmm_rrr
  3415:           case 0b1110_001_011:
  3416:             irpLsrToMem ();
  3417:             break irpSwitch;
  3418: 
  3419:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  3420:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  3421:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  3422:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  3423:             //LSL.W <ea>                                      |-|012346|-|UUUUU|***0*|  M+-WXZ  |1110_001_111_mmm_rrr
  3424:           case 0b1110_001_111:
  3425:             irpLslToMem ();
  3426:             break irpSwitch;
  3427: 
  3428:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  3429:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  3430:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  3431:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  3432:             //ROXR.W <ea>                                     |-|012346|-|*UUUU|***0*|  M+-WXZ  |1110_010_011_mmm_rrr
  3433:           case 0b1110_010_011:
  3434:             irpRoxrToMem ();
  3435:             break irpSwitch;
  3436: 
  3437:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  3438:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  3439:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  3440:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  3441:             //ROXL.W <ea>                                     |-|012346|-|*UUUU|***0*|  M+-WXZ  |1110_010_111_mmm_rrr
  3442:           case 0b1110_010_111:
  3443:             irpRoxlToMem ();
  3444:             break irpSwitch;
  3445: 
  3446:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  3447:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  3448:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  3449:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  3450:             //ROR.W <ea>                                      |-|012346|-|-UUUU|-**0*|  M+-WXZ  |1110_011_011_mmm_rrr
  3451:           case 0b1110_011_011:
  3452:             irpRorToMem ();
  3453:             break irpSwitch;
  3454: 
  3455:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  3456:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  3457:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  3458:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  3459:             //ROL.W <ea>                                      |-|012346|-|-UUUU|-**0*|  M+-WXZ  |1110_011_111_mmm_rrr
  3460:           case 0b1110_011_111:
  3461:             irpRolToMem ();
  3462:             break irpSwitch;
  3463: 
  3464:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  3465:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  3466:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  3467:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  3468:             //FPACK <data>                                    |A|012346|-|UUUUU|*****|          |1111_111_0dd_ddd_ddd [FLINE #<data>]
  3469:           case 0b1111_111_000:
  3470:           case 0b1111_111_001:
  3471:           case 0b1111_111_010:
  3472:           case 0b1111_111_011:
  3473:             irpFpack ();
  3474:             break irpSwitch;
  3475: 
  3476:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  3477:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  3478:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  3479:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  3480:             //DOS <data>                                      |A|012346|-|UUUUU|UUUUU|          |1111_111_1dd_ddd_ddd [FLINE #<data>]
  3481:           case 0b1111_111_100:
  3482:           case 0b1111_111_101:
  3483:           case 0b1111_111_110:
  3484:           case 0b1111_111_111:
  3485:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  3486:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  3487:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  3488:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  3489:             //FLINE #<data>                                   |-|012346|-|UUUUU|UUUUU|          |1111_ddd_ddd_ddd_ddd (line 1111 emulator)
  3490:           case 0b1111_000_000:
  3491:           case 0b1111_000_001:
  3492:           case 0b1111_000_010:
  3493:           case 0b1111_000_011:
  3494:           case 0b1111_000_100:
  3495:           case 0b1111_000_101:
  3496:           case 0b1111_000_110:
  3497:           case 0b1111_000_111:
  3498:           case 0b1111_001_000:
  3499:           case 0b1111_001_001:
  3500:           case 0b1111_001_010:
  3501:           case 0b1111_001_011:
  3502:           case 0b1111_001_100:
  3503:           case 0b1111_001_101:
  3504:           case 0b1111_001_110:
  3505:           case 0b1111_001_111:
  3506:           case 0b1111_010_000:
  3507:           case 0b1111_010_001:
  3508:           case 0b1111_010_010:
  3509:           case 0b1111_010_011:
  3510:           case 0b1111_010_100:
  3511:           case 0b1111_010_101:
  3512:           case 0b1111_010_110:
  3513:           case 0b1111_010_111:
  3514:           case 0b1111_011_000:
  3515:           case 0b1111_011_001:
  3516:           case 0b1111_011_010:
  3517:           case 0b1111_011_011:
  3518:           case 0b1111_011_100:
  3519:           case 0b1111_011_101:
  3520:           case 0b1111_011_110:
  3521:           case 0b1111_011_111:
  3522:           case 0b1111_100_000:
  3523:           case 0b1111_100_001:
  3524:           case 0b1111_100_010:
  3525:           case 0b1111_100_011:
  3526:           case 0b1111_100_100:
  3527:           case 0b1111_100_101:
  3528:           case 0b1111_100_110:
  3529:           case 0b1111_100_111:
  3530:           case 0b1111_101_000:
  3531:           case 0b1111_101_001:
  3532:           case 0b1111_101_010:
  3533:           case 0b1111_101_011:
  3534:           case 0b1111_101_100:
  3535:           case 0b1111_101_101:
  3536:           case 0b1111_101_110:
  3537:           case 0b1111_101_111:
  3538:           case 0b1111_110_000:
  3539:           case 0b1111_110_001:
  3540:           case 0b1111_110_010:
  3541:           case 0b1111_110_011:
  3542:           case 0b1111_110_100:
  3543:           case 0b1111_110_101:
  3544:           case 0b1111_110_110:
  3545:           case 0b1111_110_111:
  3546:             irpFline ();
  3547:             break irpSwitch;
  3548: 
  3549:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  3550:             //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  3551:             //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  3552:             //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  3553:             //HFSBOOT                                         |-|012346|-|-----|-----|          |0100_111_000_000_000
  3554:             //HFSINST                                         |-|012346|-|-----|-----|          |0100_111_000_000_001
  3555:             //HFSSTR                                          |-|012346|-|-----|-----|          |0100_111_000_000_010
  3556:             //HFSINT                                          |-|012346|-|-----|-----|          |0100_111_000_000_011
  3557:             //EMXNOP                                          |-|012346|-|-----|-----|          |0100_111_000_000_100
  3558:           case 0b0100_111_000:
  3559:             irpEmx ();
  3560:             break;
  3561: 
  3562:           default:
  3563:             irpIllegal ();
  3564: 
  3565:           }  //switch XEiJ.regOC >>> 6
  3566: 
  3567:           //トレース例外
  3568:           //  命令実行前にsrのTビットがセットされていたとき命令実行後にトレース例外が発生する
  3569:           //  トレース例外の発動は命令の機能拡張であり、他の例外処理で命令が中断されたときはトレース例外は発生しない
  3570:           //  命令例外はトレース例外の前に、割り込み例外はトレース例外の後に処理される
  3571:           //  未実装命令のエミュレーションルーチンはrteの直前にsrのTビットを復元することで未実装命令が1個の命令としてトレースされたように見せる
  3572:           //    ;DOSコールの終了
  3573:           //    ~008616:
  3574:           //            btst.b  #$07,(sp)
  3575:           //            bne.s   ~00861E
  3576:           //            rte
  3577:           //    ~00861E:
  3578:           //            ori.w   #$8000,sr
  3579:           //            rte
  3580:           if (XEiJ.mpuTraceFlag != 0) {  //命令実行前にsrのTビットがセットされていた
  3581:             XEiJ.mpuCycleCount += 34;
  3582:             irpException (M68kException.M6E_TRACE, XEiJ.regPC, XEiJ.regSRT1 | XEiJ.regSRS | XEiJ.regSRI | XEiJ.regCCR);  //pcは次の命令
  3583:           }
  3584:           //クロックをカウントアップする
  3585:           //  オペランドをアクセスした時点ではまだXEiJ.mpuClockTimeが更新されていないのでXEiJ.mpuClockTime<xxxClock
  3586:           //  xxxTickを呼び出すときはXEiJ.mpuClockTime>=xxxClock
  3587:           XEiJ.mpuClockTime += XEiJ.mpuModifiedUnit * XEiJ.mpuCycleCount;
  3588:           //デバイスを呼び出す
  3589:           TickerQueue.tkqRun (XEiJ.mpuClockTime);
  3590:           //割り込みを受け付ける
  3591:           if ((t = XEiJ.mpuIMR & XEiJ.mpuIRR) != 0) {  //マスクされているレベルよりも高くて受け付けていない割り込みがあるとき
  3592:             if (XEiJ.MPU_INTERRUPT_SWITCH) {
  3593:               switch (t) {
  3594:               case 0b00000001:
  3595:               case 0b00000011:
  3596:               case 0b00000101:
  3597:               case 0b00000111:
  3598:               case 0b00001001:
  3599:               case 0b00001011:
  3600:               case 0b00001101:
  3601:               case 0b00001111:
  3602:               case 0b00010001:
  3603:               case 0b00010011:
  3604:               case 0b00010101:
  3605:               case 0b00010111:
  3606:               case 0b00011001:
  3607:               case 0b00011011:
  3608:               case 0b00011101:
  3609:               case 0b00011111:
  3610:               case 0b00100001:
  3611:               case 0b00100011:
  3612:               case 0b00100101:
  3613:               case 0b00100111:
  3614:               case 0b00101001:
  3615:               case 0b00101011:
  3616:               case 0b00101101:
  3617:               case 0b00101111:
  3618:               case 0b00110001:
  3619:               case 0b00110011:
  3620:               case 0b00110101:
  3621:               case 0b00110111:
  3622:               case 0b00111001:
  3623:               case 0b00111011:
  3624:               case 0b00111101:
  3625:               case 0b00111111:
  3626:               case 0b01000001:
  3627:               case 0b01000011:
  3628:               case 0b01000101:
  3629:               case 0b01000111:
  3630:               case 0b01001001:
  3631:               case 0b01001011:
  3632:               case 0b01001101:
  3633:               case 0b01001111:
  3634:               case 0b01010001:
  3635:               case 0b01010011:
  3636:               case 0b01010101:
  3637:               case 0b01010111:
  3638:               case 0b01011001:
  3639:               case 0b01011011:
  3640:               case 0b01011101:
  3641:               case 0b01011111:
  3642:               case 0b01100001:
  3643:               case 0b01100011:
  3644:               case 0b01100101:
  3645:               case 0b01100111:
  3646:               case 0b01101001:
  3647:               case 0b01101011:
  3648:               case 0b01101101:
  3649:               case 0b01101111:
  3650:               case 0b01110001:
  3651:               case 0b01110011:
  3652:               case 0b01110101:
  3653:               case 0b01110111:
  3654:               case 0b01111001:
  3655:               case 0b01111011:
  3656:               case 0b01111101:
  3657:               case 0b01111111:
  3658:               case 0b10000001:
  3659:               case 0b10000011:
  3660:               case 0b10000101:
  3661:               case 0b10000111:
  3662:               case 0b10001001:
  3663:               case 0b10001011:
  3664:               case 0b10001101:
  3665:               case 0b10001111:
  3666:               case 0b10010001:
  3667:               case 0b10010011:
  3668:               case 0b10010101:
  3669:               case 0b10010111:
  3670:               case 0b10011001:
  3671:               case 0b10011011:
  3672:               case 0b10011101:
  3673:               case 0b10011111:
  3674:               case 0b10100001:
  3675:               case 0b10100011:
  3676:               case 0b10100101:
  3677:               case 0b10100111:
  3678:               case 0b10101001:
  3679:               case 0b10101011:
  3680:               case 0b10101101:
  3681:               case 0b10101111:
  3682:               case 0b10110001:
  3683:               case 0b10110011:
  3684:               case 0b10110101:
  3685:               case 0b10110111:
  3686:               case 0b10111001:
  3687:               case 0b10111011:
  3688:               case 0b10111101:
  3689:               case 0b10111111:
  3690:               case 0b11000001:
  3691:               case 0b11000011:
  3692:               case 0b11000101:
  3693:               case 0b11000111:
  3694:               case 0b11001001:
  3695:               case 0b11001011:
  3696:               case 0b11001101:
  3697:               case 0b11001111:
  3698:               case 0b11010001:
  3699:               case 0b11010011:
  3700:               case 0b11010101:
  3701:               case 0b11010111:
  3702:               case 0b11011001:
  3703:               case 0b11011011:
  3704:               case 0b11011101:
  3705:               case 0b11011111:
  3706:               case 0b11100001:
  3707:               case 0b11100011:
  3708:               case 0b11100101:
  3709:               case 0b11100111:
  3710:               case 0b11101001:
  3711:               case 0b11101011:
  3712:               case 0b11101101:
  3713:               case 0b11101111:
  3714:               case 0b11110001:
  3715:               case 0b11110011:
  3716:               case 0b11110101:
  3717:               case 0b11110111:
  3718:               case 0b11111001:
  3719:               case 0b11111011:
  3720:               case 0b11111101:
  3721:               case 0b11111111:
  3722:                 //レベル7
  3723:                 XEiJ.mpuIRR &= ~XEiJ.MPU_SYS_INTERRUPT_MASK;  //割り込みを受け付ける
  3724:                 if ((t = XEiJ.sysAcknowledge ()) != 0) {  //デバイスにベクタ番号を要求して割り込み処理中の状態になったとき
  3725:                   irpInterrupt (t, XEiJ.MPU_SYS_INTERRUPT_LEVEL);  //割り込み処理を開始する
  3726:                 }
  3727:                 break;
  3728:               case 0b00000010:
  3729:               case 0b00000110:
  3730:               case 0b00001010:
  3731:               case 0b00001110:
  3732:               case 0b00010010:
  3733:               case 0b00010110:
  3734:               case 0b00011010:
  3735:               case 0b00011110:
  3736:               case 0b00100010:
  3737:               case 0b00100110:
  3738:               case 0b00101010:
  3739:               case 0b00101110:
  3740:               case 0b00110010:
  3741:               case 0b00110110:
  3742:               case 0b00111010:
  3743:               case 0b00111110:
  3744:               case 0b01000010:
  3745:               case 0b01000110:
  3746:               case 0b01001010:
  3747:               case 0b01001110:
  3748:               case 0b01010010:
  3749:               case 0b01010110:
  3750:               case 0b01011010:
  3751:               case 0b01011110:
  3752:               case 0b01100010:
  3753:               case 0b01100110:
  3754:               case 0b01101010:
  3755:               case 0b01101110:
  3756:               case 0b01110010:
  3757:               case 0b01110110:
  3758:               case 0b01111010:
  3759:               case 0b01111110:
  3760:               case 0b10000010:
  3761:               case 0b10000110:
  3762:               case 0b10001010:
  3763:               case 0b10001110:
  3764:               case 0b10010010:
  3765:               case 0b10010110:
  3766:               case 0b10011010:
  3767:               case 0b10011110:
  3768:               case 0b10100010:
  3769:               case 0b10100110:
  3770:               case 0b10101010:
  3771:               case 0b10101110:
  3772:               case 0b10110010:
  3773:               case 0b10110110:
  3774:               case 0b10111010:
  3775:               case 0b10111110:
  3776:               case 0b11000010:
  3777:               case 0b11000110:
  3778:               case 0b11001010:
  3779:               case 0b11001110:
  3780:               case 0b11010010:
  3781:               case 0b11010110:
  3782:               case 0b11011010:
  3783:               case 0b11011110:
  3784:               case 0b11100010:
  3785:               case 0b11100110:
  3786:               case 0b11101010:
  3787:               case 0b11101110:
  3788:               case 0b11110010:
  3789:               case 0b11110110:
  3790:               case 0b11111010:
  3791:               case 0b11111110:
  3792:                 //レベル6
  3793:                 XEiJ.mpuIRR &= ~XEiJ.MPU_MFP_INTERRUPT_MASK;  //割り込みを受け付ける
  3794:                 if ((t = MC68901.mfpAcknowledge ()) != 0) {  //デバイスにベクタ番号を要求して割り込み処理中の状態になったとき
  3795:                   irpInterrupt (t, XEiJ.MPU_MFP_INTERRUPT_LEVEL);  //割り込み処理を開始する
  3796:                 }
  3797:                 break;
  3798:               case 0b00000100:
  3799:               case 0b00001100:
  3800:               case 0b00010100:
  3801:               case 0b00011100:
  3802:               case 0b00100100:
  3803:               case 0b00101100:
  3804:               case 0b00110100:
  3805:               case 0b00111100:
  3806:               case 0b01000100:
  3807:               case 0b01001100:
  3808:               case 0b01010100:
  3809:               case 0b01011100:
  3810:               case 0b01100100:
  3811:               case 0b01101100:
  3812:               case 0b01110100:
  3813:               case 0b01111100:
  3814:               case 0b10000100:
  3815:               case 0b10001100:
  3816:               case 0b10010100:
  3817:               case 0b10011100:
  3818:               case 0b10100100:
  3819:               case 0b10101100:
  3820:               case 0b10110100:
  3821:               case 0b10111100:
  3822:               case 0b11000100:
  3823:               case 0b11001100:
  3824:               case 0b11010100:
  3825:               case 0b11011100:
  3826:               case 0b11100100:
  3827:               case 0b11101100:
  3828:               case 0b11110100:
  3829:               case 0b11111100:
  3830:                 //レベル5
  3831:                 XEiJ.mpuIRR &= ~XEiJ.MPU_SCC_INTERRUPT_MASK;  //割り込みを受け付ける
  3832:                 if ((t = Z8530.sccAcknowledge ()) != 0) {  //デバイスにベクタ番号を要求して割り込み処理中の状態になったとき
  3833:                   irpInterrupt (t, XEiJ.MPU_SCC_INTERRUPT_LEVEL);  //割り込み処理を開始する
  3834:                 }
  3835:                 break;
  3836:               case 0b00010000:
  3837:               case 0b00110000:
  3838:               case 0b01010000:
  3839:               case 0b01110000:
  3840:               case 0b10010000:
  3841:               case 0b10110000:
  3842:               case 0b11010000:
  3843:               case 0b11110000:
  3844:                 //レベル3
  3845:                 XEiJ.mpuIRR &= ~XEiJ.MPU_DMA_INTERRUPT_MASK;  //割り込みを受け付ける
  3846:                 if ((t = HD63450.dmaAcknowledge ()) != 0) {  //デバイスにベクタ番号を要求して割り込み処理中の状態になったとき
  3847:                   irpInterrupt (t, XEiJ.MPU_DMA_INTERRUPT_LEVEL);  //割り込み処理を開始する
  3848:                 }
  3849:                 break;
  3850:               case 0b00100000:
  3851:               case 0b01100000:
  3852:               case 0b10100000:
  3853:               case 0b11100000:
  3854:                 //レベル2
  3855:                 XEiJ.mpuIRR &= ~XEiJ.MPU_EB2_INTERRUPT_MASK;  //割り込みを受け付ける
  3856:                 if ((t = XEiJ.eb2Acknowledge ()) != 0) {  //デバイスにベクタ番号を要求して割り込み処理中の状態になったとき
  3857:                   irpInterrupt (t, XEiJ.MPU_EB2_INTERRUPT_LEVEL);  //割り込み処理を開始する
  3858:                 }
  3859:                 break;
  3860:               case 0b01000000:
  3861:               case 0b11000000:
  3862:                 //レベル1
  3863:                 XEiJ.mpuIRR &= ~XEiJ.MPU_IOI_INTERRUPT_MASK;  //割り込みを受け付ける
  3864:                 if ((t = IOInterrupt.ioiAcknowledge ()) != 0) {  //デバイスにベクタ番号を要求して割り込み処理中の状態になったとき
  3865:                   irpInterrupt (t, XEiJ.MPU_IOI_INTERRUPT_LEVEL);  //割り込み処理を開始する
  3866:                 }
  3867:                 break;
  3868:               }
  3869:             } else {
  3870:               t &= -t;
  3871:               //  x&=-xはxの最下位の1のビットだけを残す演算
  3872:               //  すなわちマスクされているレベルよりも高くて受け付けていない割り込みの中で最高レベルの割り込みのビットだけが残る
  3873:               //  最高レベルの割り込みのビットしか残っていないので、割り込みの有無をレベルの高い順ではなく使用頻度の高い順に調べられる
  3874:               //  MFPやDMAの割り込みがかかる度にそれより優先度の高いインタラプトスイッチが押されていないかどうかを確かめる必要がない
  3875:               if (t == XEiJ.MPU_MFP_INTERRUPT_MASK) {
  3876:                 XEiJ.mpuIRR &= ~XEiJ.MPU_MFP_INTERRUPT_MASK;  //割り込みを受け付ける
  3877:                 if ((t = MC68901.mfpAcknowledge ()) != 0) {  //デバイスにベクタ番号を要求して割り込み処理中の状態になったとき
  3878:                   irpInterrupt (t, XEiJ.MPU_MFP_INTERRUPT_LEVEL);  //割り込み処理を開始する
  3879:                 }
  3880:               } else if (t == XEiJ.MPU_DMA_INTERRUPT_MASK) {
  3881:                 XEiJ.mpuIRR &= ~XEiJ.MPU_DMA_INTERRUPT_MASK;  //割り込みを受け付ける
  3882:                 if ((t = HD63450.dmaAcknowledge ()) != 0) {  //デバイスにベクタ番号を要求して割り込み処理中の状態になったとき
  3883:                   irpInterrupt (t, XEiJ.MPU_DMA_INTERRUPT_LEVEL);  //割り込み処理を開始する
  3884:                 }
  3885:               } else if (t == XEiJ.MPU_SCC_INTERRUPT_MASK) {
  3886:                 XEiJ.mpuIRR &= ~XEiJ.MPU_SCC_INTERRUPT_MASK;  //割り込みを受け付ける
  3887:                 if ((t = Z8530.sccAcknowledge ()) != 0) {  //デバイスにベクタ番号を要求して割り込み処理中の状態になったとき
  3888:                   irpInterrupt (t, XEiJ.MPU_SCC_INTERRUPT_LEVEL);  //割り込み処理を開始する
  3889:                 }
  3890:               } else if (t == XEiJ.MPU_IOI_INTERRUPT_MASK) {
  3891:                 XEiJ.mpuIRR &= ~XEiJ.MPU_IOI_INTERRUPT_MASK;  //割り込みを受け付ける
  3892:                 if ((t = IOInterrupt.ioiAcknowledge ()) != 0) {  //デバイスにベクタ番号を要求して割り込み処理中の状態になったとき
  3893:                   irpInterrupt (t, XEiJ.MPU_IOI_INTERRUPT_LEVEL);  //割り込み処理を開始する
  3894:                 }
  3895:               } else if (t == XEiJ.MPU_EB2_INTERRUPT_MASK) {
  3896:                 XEiJ.mpuIRR &= ~XEiJ.MPU_EB2_INTERRUPT_MASK;  //割り込みを受け付ける
  3897:                 if ((t = XEiJ.eb2Acknowledge ()) != 0) {  //デバイスにベクタ番号を要求して割り込み処理中の状態になったとき
  3898:                   irpInterrupt (t, XEiJ.MPU_EB2_INTERRUPT_LEVEL);  //割り込み処理を開始する
  3899:                 }
  3900:               } else if (t == XEiJ.MPU_SYS_INTERRUPT_MASK) {
  3901:                 XEiJ.mpuIRR &= ~XEiJ.MPU_SYS_INTERRUPT_MASK;  //割り込みを受け付ける
  3902:                 if ((t = XEiJ.sysAcknowledge ()) != 0) {  //デバイスにベクタ番号を要求して割り込み処理中の状態になったとき
  3903:                   irpInterrupt (t, XEiJ.MPU_SYS_INTERRUPT_LEVEL);  //割り込み処理を開始する
  3904:                 }
  3905:               }
  3906:             }
  3907:           }  //if t!=0
  3908:           if (MC68901.MFP_DELAYED_INTERRUPT) {
  3909:             XEiJ.mpuIRR |= XEiJ.mpuDIRR;  //遅延割り込み要求
  3910:             XEiJ.mpuDIRR = 0;
  3911:           }
  3912:         }  //命令ループ
  3913:       } catch (M68kException e) {
  3914:         if (M68kException.m6eNumber < 0) {  //命令ブレークポイントによる停止
  3915:           XEiJ.regPC = XEiJ.regPC0;
  3916:           XEiJ.mpuStop1 (null);  //"Instruction Break Point"
  3917:           break errorLoop;
  3918:         }
  3919:         //例外処理
  3920:         //  ここで処理するのはベクタ番号が2~31の例外に限る。TRAP #n命令はインライン展開する
  3921:         //  例外処理のサイクル数はXEiJ.BUS_ERRORとADDRESS_ERROR以外は34になっているので必要ならば補正してからthrowする
  3922:         //  使用頻度が高いと思われる例外はインライン展開するのでここには来ない
  3923:         //    例外処理をインライン展開する場合はMC68000とMC68030のコードを分けなければならずコードが冗長になる
  3924:         //    使用頻度が低いと思われる例外はインライン展開しない
  3925:         //  セーブされるpcは以下の例外は命令の先頭、これ以外は次の命令
  3926:         //     2  XEiJ.BUS_ERROR
  3927:         //     3  ADDRESS_ERROR
  3928:         //     4  ILLEGAL_INSTRUCTION
  3929:         //     8  PRIVILEGE_VIOLATION
  3930:         //    10  LINE_1010_EMULATOR
  3931:         //    11  LINE_1111_EMULATOR
  3932:         //                                      fedcba9876543210fedcba9876543210
  3933:         //if ((1 << M68kException.m6eNumber & 0b00000000000000000000110100011100) != 0) {
  3934:         //    0123456789abcdef0123456789abcdef
  3935:         if (0b00111000101100000000000000000000 << M68kException.m6eNumber < 0) {
  3936:           XEiJ.regPC = XEiJ.regPC0;  //セーブされるpcは命令の先頭
  3937:         }
  3938:         try {
  3939:           int save_sr = XEiJ.regSRT1 | XEiJ.regSRS | XEiJ.regSRI | XEiJ.regCCR;
  3940:           int sp = XEiJ.regRn[15];
  3941:           XEiJ.regSRT1 = 0;  //srのTビットを消す
  3942:           if (XEiJ.regSRS == 0) {  //ユーザモードのとき
  3943:             XEiJ.regSRS = XEiJ.REG_SR_S;  //スーパーバイザモードへ移行する
  3944:             XEiJ.mpuUSP = sp;  //USPを保存
  3945:             sp = XEiJ.mpuISP;  //SSPを復元
  3946:             if (DataBreakPoint.DBP_ON) {
  3947:               DataBreakPoint.dbpMemoryMap = DataBreakPoint.dbpSuperMap;  //スーパーバイザメモリマップに切り替える
  3948:             } else {
  3949:               XEiJ.busMemoryMap = XEiJ.busSuperMap;  //スーパーバイザメモリマップに切り替える
  3950:             }
  3951:             if (InstructionBreakPoint.IBP_ON) {
  3952:               InstructionBreakPoint.ibpOp1MemoryMap = InstructionBreakPoint.ibpOp1SuperMap;
  3953:             }
  3954:           }
  3955:           if (M68kException.m6eNumber <= M68kException.M6E_ADDRESS_ERROR) {
  3956:             //ホストファイルシステムのデバイスコマンドを強制終了させる
  3957:             HFS.hfsState = HFS.HFS_STATE_IDLE;
  3958:             XEiJ.mpuClockTime += 50 * XEiJ.mpuModifiedUnit;
  3959:             XEiJ.regRn[15] = sp -= 14;
  3960:             XEiJ.busWl (sp + 10, XEiJ.regPC);  //pushl。pcをプッシュする
  3961:             XEiJ.busWw (sp + 8, save_sr);  //pushw。srをプッシュする
  3962:             XEiJ.busWw (sp + 6, 0);  //instruction register。未定義
  3963:             XEiJ.busWl (sp + 2, M68kException.m6eAddress);  //access address
  3964:             XEiJ.busWw (sp, M68kException.m6eDirection << 4);  //r/w,i/n,fc。r/wのみ
  3965:           } else {
  3966:             XEiJ.mpuClockTime += 34 * XEiJ.mpuModifiedUnit;
  3967:             XEiJ.regRn[15] = sp -= 6;
  3968:             XEiJ.busWl (sp + 2, XEiJ.regPC);  //pushl。pcをプッシュする
  3969:             XEiJ.busWw (sp, save_sr);  //pushw。srをプッシュする
  3970:           }
  3971:           irpSetPC (XEiJ.busRlsf (M68kException.m6eNumber << 2));  //例外ベクタを取り出してジャンプする
  3972:           if (XEiJ.dbgStopOnError) {  //エラーで停止する場合
  3973:             if (XEiJ.dbgDoStopOnError ()) {
  3974:               break errorLoop;
  3975:             }
  3976:           }
  3977:         } catch (M68kException ee) {  //ダブルバスフォルト
  3978:           XEiJ.dbgDoubleBusFault ();
  3979:           break errorLoop;
  3980:         }
  3981:       }  //catch M68kException
  3982:     }  //例外ループ
  3983: 
  3984:     //  通常
  3985:     //    pc0  最後に実行した命令
  3986:     //    pc  次に実行する命令
  3987:     //  バスエラー、アドレスエラー、不当命令、特権違反で停止したとき
  3988:     //    pc0  エラーを発生させた命令
  3989:     //    pc  例外処理ルーチンの先頭
  3990:     //  ダブルバスフォルトで停止したとき
  3991:     //    pc0  エラーを発生させた命令
  3992:     //    pc  エラーを発生させた命令
  3993:     //  命令ブレークポイントで停止したとき
  3994:     //    pc0  命令ブレークポイントが設定された、次に実行する命令
  3995:     //    pc  命令ブレークポイントが設定された、次に実行する命令
  3996:     //  データブレークポイントで停止したとき
  3997:     //    pc0  データを書き換えた、最後に実行した命令
  3998:     //    pc  次に実行する命令
  3999: 
  4000:     //分岐ログに停止レコードを記録する
  4001:     if (BranchLog.BLG_ON) {
  4002:       //BranchLog.blgStop ();
  4003:       int i = (char) BranchLog.blgNewestRecord << BranchLog.BLG_RECORD_SHIFT;
  4004:       BranchLog.blgArray[i] = BranchLog.blgHead | BranchLog.blgSuper;
  4005:       BranchLog.blgArray[i + 1] = XEiJ.regPC;  //次に実行する命令
  4006:     }
  4007: 
  4008:     //デバッグウインドウを更新する
  4009:     if (XEiJ.dbgVisibleMask != 0) {  //デバッグ関連ウインドウが表示されている
  4010:       XEiJ.dbgUpdate ();
  4011:     }
  4012: 
  4013:     //コアメーター計測終了
  4014:     long nanoEnd = System.nanoTime ();
  4015:     Indicator.indTotalNano += nanoEnd - nanoStart;
  4016:     if (--Indicator.indCount == 0) {
  4017:       Indicator.indUpdate (nanoEnd);
  4018:     }
  4019: 
  4020:   }  //mpuCore()
  4021: 
  4022: 
  4023: 
  4024:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  4025:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  4026:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  4027:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  4028:   //ORI.B #<data>,<ea>                              |-|012346|-|-UUUU|-**00|D M+-WXZ  |0000_000_000_mmm_rrr-{data}
  4029:   //OR.B #<data>,<ea>                               |A|012346|-|-UUUU|-**00|  M+-WXZ  |0000_000_000_mmm_rrr-{data}  [ORI.B #<data>,<ea>]
  4030:   //ORI.B #<data>,CCR                               |-|012346|-|*****|*****|          |0000_000_000_111_100-{data}
  4031:   public static void irpOriByte () throws M68kException {
  4032:     if (Profiling.PFF_ON) {
  4033:       Profiling.pffStart[Profiling.PRF.irpOriByte.ordinal ()] = System.nanoTime ();
  4034:     }
  4035:     int ea = XEiJ.regOC & 63;
  4036:     int z;
  4037:     if (XEiJ.MPU_COMPOUND_POSTINCREMENT) {
  4038:       z = XEiJ.busRbs ((XEiJ.regPC += 2) - 1);  //pcbs
  4039:     } else {
  4040:       z = XEiJ.regPC;
  4041:       XEiJ.regPC = z + 2;
  4042:       z = XEiJ.busRbs (z + 1);  //pcbs
  4043:     }
  4044:     if (ea < XEiJ.EA_AR) {  //ORI.B #<data>,Dr
  4045:       if (XEiJ.DBG_ORI_BYTE_ZERO_D0) {
  4046:         if (z == 0 && ea == 0 && XEiJ.dbgOriByteZeroD0) {  //ORI.B #$00,D0
  4047:           M68kException.m6eNumber = M68kException.M6E_ILLEGAL_INSTRUCTION;
  4048:           throw M68kException.m6eSignal;
  4049:         }
  4050:       }
  4051:       XEiJ.mpuCycleCount += 8;
  4052:       z = XEiJ.regRn[ea] |= 255 & z;  //0拡張してからOR
  4053:       XEiJ.regCCR = XEiJ.regCCR & XEiJ.REG_CCR_X | XEiJ.MPU_TSTB_TABLE[255 & z];  //ccr_tst_byte
  4054:     } else if (ea == XEiJ.EA_IM) {  //ORI.B #<data>,CCR
  4055:       XEiJ.mpuCycleCount += 20;
  4056:       XEiJ.regCCR |= XEiJ.REG_CCR_MASK & z;
  4057:     } else {  //ORI.B #<data>,<mem>
  4058:       XEiJ.mpuCycleCount += 12;
  4059:       int a = efaMltByte (ea);
  4060:       XEiJ.busWb (a, z |= XEiJ.busRbs (a));
  4061:       XEiJ.regCCR = XEiJ.regCCR & XEiJ.REG_CCR_X | XEiJ.MPU_TSTB_TABLE[255 & z];  //ccr_tst_byte
  4062:     }
  4063:     if (Profiling.PFF_ON) {
  4064:       Profiling.pffTotal[Profiling.PRF.irpOriByte.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpOriByte.ordinal ()];
  4065:       Profiling.pffCount[Profiling.PRF.irpOriByte.ordinal ()]++;
  4066:     }
  4067:   }  //irpOriByte
  4068: 
  4069:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  4070:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  4071:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  4072:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  4073:   //ORI.W #<data>,<ea>                              |-|012346|-|-UUUU|-**00|D M+-WXZ  |0000_000_001_mmm_rrr-{data}
  4074:   //OR.W #<data>,<ea>                               |A|012346|-|-UUUU|-**00|  M+-WXZ  |0000_000_001_mmm_rrr-{data}  [ORI.W #<data>,<ea>]
  4075:   //ORI.W #<data>,SR                                |-|012346|P|*****|*****|          |0000_000_001_111_100-{data}
  4076:   public static void irpOriWord () throws M68kException {
  4077:     if (Profiling.PFF_ON) {
  4078:       Profiling.pffStart[Profiling.PRF.irpOriWord.ordinal ()] = System.nanoTime ();
  4079:     }
  4080:     int ea = XEiJ.regOC & 63;
  4081:     if (ea < XEiJ.EA_AR) {  //ORI.W #<data>,Dr
  4082:       int z;
  4083:       if (XEiJ.MPU_COMPOUND_POSTINCREMENT) {
  4084:         z = XEiJ.busRwse ((XEiJ.regPC += 2) - 2);  //pcws
  4085:       } else {
  4086:         z = XEiJ.regPC;
  4087:         XEiJ.regPC = z + 2;
  4088:         z = XEiJ.busRwse (z);  //pcws
  4089:       }
  4090:       XEiJ.mpuCycleCount += 8;
  4091:       z = XEiJ.regRn[ea] |= (char) z;  //0拡張してからOR
  4092:       XEiJ.regCCR = XEiJ.regCCR & XEiJ.REG_CCR_X | (char) z - 1 >> 31 & XEiJ.REG_CCR_Z | ((short) z < 0 ? XEiJ.REG_CCR_N : 0);  //ccr_tst_word
  4093:     } else if (ea == XEiJ.EA_IM) {  //ORI.W #<data>,SR
  4094:       if (XEiJ.regSRS == 0) {  //ユーザモードのとき
  4095:         M68kException.m6eNumber = M68kException.M6E_PRIVILEGE_VIOLATION;
  4096:         throw M68kException.m6eSignal;
  4097:       }
  4098:       //以下はスーパーバイザモード
  4099:       XEiJ.mpuCycleCount += 20;
  4100:       if (XEiJ.MPU_COMPOUND_POSTINCREMENT) {
  4101:         irpSetSR (XEiJ.regSRT1 | XEiJ.regSRS | XEiJ.regSRI | XEiJ.regCCR | XEiJ.busRwse ((XEiJ.regPC += 2) - 2));  //pcws。特権違反チェックが先
  4102:       } else {
  4103:         int t = XEiJ.regPC;
  4104:         XEiJ.regPC = t + 2;
  4105:         irpSetSR (XEiJ.regSRT1 | XEiJ.regSRS | XEiJ.regSRI | XEiJ.regCCR | XEiJ.busRwse (t));  //pcws。特権違反チェックが先
  4106:       }
  4107:     } else {  //ORI.W #<data>,<mem>
  4108:       int z;
  4109:       if (XEiJ.MPU_COMPOUND_POSTINCREMENT) {
  4110:         z = XEiJ.busRwse ((XEiJ.regPC += 2) - 2);  //pcws
  4111:       } else {
  4112:         z = XEiJ.regPC;
  4113:         XEiJ.regPC = z + 2;
  4114:         z = XEiJ.busRwse (z);  //pcws
  4115:       }
  4116:       XEiJ.mpuCycleCount += 12;
  4117:       int a = efaMltWord (ea);
  4118:       XEiJ.busWw (a, z |= XEiJ.busRws (a));
  4119:       XEiJ.regCCR = XEiJ.regCCR & XEiJ.REG_CCR_X | (char) z - 1 >> 31 & XEiJ.REG_CCR_Z | ((short) z < 0 ? XEiJ.REG_CCR_N : 0);  //ccr_tst_word
  4120:     }
  4121:     if (Profiling.PFF_ON) {
  4122:       Profiling.pffTotal[Profiling.PRF.irpOriWord.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpOriWord.ordinal ()];
  4123:       Profiling.pffCount[Profiling.PRF.irpOriWord.ordinal ()]++;
  4124:     }
  4125:   }  //irpOriWord
  4126: 
  4127:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  4128:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  4129:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  4130:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  4131:   //ORI.L #<data>,<ea>                              |-|012346|-|-UUUU|-**00|D M+-WXZ  |0000_000_010_mmm_rrr-{data}
  4132:   //OR.L #<data>,<ea>                               |A|012346|-|-UUUU|-**00|  M+-WXZ  |0000_000_010_mmm_rrr-{data}  [ORI.L #<data>,<ea>]
  4133:   public static void irpOriLong () throws M68kException {
  4134:     if (Profiling.PFF_ON) {
  4135:       Profiling.pffStart[Profiling.PRF.irpOriLong.ordinal ()] = System.nanoTime ();
  4136:     }
  4137:     int ea = XEiJ.regOC & 63;
  4138:     int y;
  4139:     if (XEiJ.MPU_COMPOUND_POSTINCREMENT) {
  4140:       y = XEiJ.busRlse ((XEiJ.regPC += 4) - 4);  //pcls
  4141:     } else {
  4142:       y = XEiJ.regPC;
  4143:       XEiJ.regPC = y + 4;
  4144:       y = XEiJ.busRlse (y);  //pcls
  4145:     }
  4146:     int z;
  4147:     if (ea < XEiJ.EA_AR) {  //ORI.L #<data>,Dr
  4148:       XEiJ.mpuCycleCount += 16;
  4149:       z = XEiJ.regRn[ea] |= y;
  4150:     } else {  //ORI.L #<data>,<mem>
  4151:       XEiJ.mpuCycleCount += 20;
  4152:       int a = efaMltLong (ea);
  4153:       XEiJ.busWl (a, z = XEiJ.busRls (a) | y);
  4154:     }
  4155:     XEiJ.regCCR = z >> 28 & XEiJ.REG_CCR_N | (z == 0 ? XEiJ.regCCR & XEiJ.REG_CCR_X | XEiJ.REG_CCR_Z : XEiJ.regCCR & XEiJ.REG_CCR_X);  //ccr_tst
  4156:     if (Profiling.PFF_ON) {
  4157:       Profiling.pffTotal[Profiling.PRF.irpOriLong.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpOriLong.ordinal ()];
  4158:       Profiling.pffCount[Profiling.PRF.irpOriLong.ordinal ()]++;
  4159:     }
  4160:   }  //irpOriLong
  4161: 
  4162:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  4163:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  4164:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  4165:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  4166:   //BITREV.L Dr                                     |-|------|-|-----|-----|D         |0000_000_011_000_rrr (ISA_C)
  4167:   //
  4168:   //BITREV.L Dr
  4169:   //  Drのビットの並びを逆順にする。CCRは変化しない
  4170:   public static void irpCmp2Chk2Byte () throws M68kException {
  4171:     if (Profiling.PFF_ON) {
  4172:       Profiling.pffStart[Profiling.PRF.irpCmp2Chk2Byte.ordinal ()] = System.nanoTime ();
  4173:     }
  4174:     int ea = XEiJ.regOC & 63;
  4175:     if (ea < XEiJ.EA_AR) {  //BITREV.L Dr
  4176:       XEiJ.mpuCycleCount += 4;
  4177:       if (XEiJ.IRP_BITREV_REVERSE) {  //2.83ns  0x0f801f3c
  4178:         XEiJ.regRn[ea] = Integer.reverse (XEiJ.regRn[ea]);
  4179:       } else if (XEiJ.IRP_BITREV_SHIFT) {  //2.57ns  0x0f801f3c
  4180:         int x = XEiJ.regRn[ea];
  4181:         x = x << 16 | x >>> 16;
  4182:         x = x << 8 & 0xff00ff00 | x >>> 8 & 0x00ff00ff;
  4183:         x = x << 4 & 0xf0f0f0f0 | x >>> 4 & 0x0f0f0f0f;
  4184:         x = x << 2 & 0xcccccccc | x >>> 2 & 0x33333333;
  4185:         XEiJ.regRn[ea] = x << 1 & 0xaaaaaaaa | x >>> 1 & 0x55555555;
  4186:       } else if (XEiJ.IRP_BITREV_TABLE) {  //1.57ns  0x0f801f3c
  4187:         int x = XEiJ.regRn[ea];
  4188:         XEiJ.regRn[ea] = XEiJ.MPU_BITREV_TABLE_0[x & 2047] | XEiJ.MPU_BITREV_TABLE_1[x << 10 >>> 21] | XEiJ.MPU_BITREV_TABLE_2[x >>> 22];
  4189:       }
  4190:     } else {  //CMP2/CHK2.B <ea>,Rn
  4191:       //プロセッサの判別に使われることがあるのでMC68000ではCMP2/CHK2をエラーにしなければならない
  4192:       M68kException.m6eNumber = M68kException.M6E_ILLEGAL_INSTRUCTION;
  4193:       throw M68kException.m6eSignal;
  4194:     }
  4195:     if (Profiling.PFF_ON) {
  4196:       Profiling.pffTotal[Profiling.PRF.irpCmp2Chk2Byte.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpCmp2Chk2Byte.ordinal ()];
  4197:       Profiling.pffCount[Profiling.PRF.irpCmp2Chk2Byte.ordinal ()]++;
  4198:     }
  4199:   }  //irpCmp2Chk2Byte
  4200: 
  4201:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  4202:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  4203:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  4204:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  4205:   //BTST.L Dq,Dr                                    |-|012346|-|--U--|--*--|D         |0000_qqq_100_000_rrr
  4206:   //MOVEP.W (d16,Ar),Dq                             |-|01234S|-|-----|-----|          |0000_qqq_100_001_rrr-{data}
  4207:   //BTST.B Dq,<ea>                                  |-|012346|-|--U--|--*--|  M+-WXZPI|0000_qqq_100_mmm_rrr
  4208:   public static void irpBtstReg () throws M68kException {
  4209:     if (Profiling.PFF_ON) {
  4210:       Profiling.pffStart[Profiling.PRF.irpBtstReg.ordinal ()] = System.nanoTime ();
  4211:     }
  4212:     int ea = XEiJ.regOC & 63;
  4213:     int qqq = XEiJ.regOC >> 9;  //qqq
  4214:     if (ea >> 3 == XEiJ.MMM_AR) {  //MOVEP.W (d16,Ar),Dq
  4215:       XEiJ.mpuCycleCount += 16;
  4216:       int a;
  4217:       if (XEiJ.MPU_COMPOUND_POSTINCREMENT) {
  4218:         a = XEiJ.regRn[ea] + XEiJ.busRwse ((XEiJ.regPC += 2) - 2);  //pcws。このr[ea]はアドレスレジスタ
  4219:       } else {
  4220:         a = XEiJ.regPC;
  4221:         XEiJ.regPC = a + 2;
  4222:         a = XEiJ.regRn[ea] + XEiJ.busRwse (a);  //pcws。このr[ea]はアドレスレジスタ
  4223:       }
  4224:       XEiJ.regRn[qqq] = ~0xffff & XEiJ.regRn[qqq] | XEiJ.busRbz (a) << 8 | XEiJ.busRbz (a + 2);  //Javaは評価順序が保証されている
  4225:     } else {  //BTST.L Dq,Dr/<ea>
  4226:       int y = XEiJ.regRn[qqq];
  4227:       if (ea < XEiJ.EA_AR) {  //BTST.L Dq,Dr
  4228:         XEiJ.mpuCycleCount += 6;
  4229:         XEiJ.regCCR = XEiJ.regCCR & (XEiJ.REG_CCR_X | XEiJ.REG_CCR_N | XEiJ.REG_CCR_V | XEiJ.REG_CCR_C) | (~XEiJ.regRn[ea] >>> y & 1) << 2;  //ccr_btst。intのシフトは5bitでマスクされるので&31を省略
  4230:       } else {  //BTST.B Dq,<ea>
  4231:         XEiJ.mpuCycleCount += 4;
  4232:         XEiJ.regCCR = XEiJ.regCCR & (XEiJ.REG_CCR_X | XEiJ.REG_CCR_N | XEiJ.REG_CCR_V | XEiJ.REG_CCR_C) | (~XEiJ.busRbs (efaAnyByte (ea)) >>> (y & 7) & 1) << 2;  //ccr_btst
  4233:       }
  4234:     }
  4235:     if (Profiling.PFF_ON) {
  4236:       Profiling.pffTotal[Profiling.PRF.irpBtstReg.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpBtstReg.ordinal ()];
  4237:       Profiling.pffCount[Profiling.PRF.irpBtstReg.ordinal ()]++;
  4238:     }
  4239:   }  //irpBtstReg
  4240: 
  4241:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  4242:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  4243:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  4244:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  4245:   //BCHG.L Dq,Dr                                    |-|012346|-|--U--|--*--|D         |0000_qqq_101_000_rrr
  4246:   //MOVEP.L (d16,Ar),Dq                             |-|01234S|-|-----|-----|          |0000_qqq_101_001_rrr-{data}
  4247:   //BCHG.B Dq,<ea>                                  |-|012346|-|--U--|--*--|  M+-WXZ  |0000_qqq_101_mmm_rrr
  4248:   public static void irpBchgReg () throws M68kException {
  4249:     if (Profiling.PFF_ON) {
  4250:       Profiling.pffStart[Profiling.PRF.irpBchgReg.ordinal ()] = System.nanoTime ();
  4251:     }
  4252:     int ea = XEiJ.regOC & 63;
  4253:     int qqq = XEiJ.regOC >> 9;  //qqq
  4254:     if (ea >> 3 == XEiJ.MMM_AR) {  //MOVEP.L (d16,Ar),Dq
  4255:       XEiJ.mpuCycleCount += 24;
  4256:       int a;
  4257:       if (XEiJ.MPU_COMPOUND_POSTINCREMENT) {
  4258:         a = XEiJ.regRn[ea] + XEiJ.busRwse ((XEiJ.regPC += 2) - 2);  //pcws。このr[ea]はアドレスレジスタ
  4259:       } else {
  4260:         a = XEiJ.regPC;
  4261:         XEiJ.regPC = a + 2;
  4262:         a = XEiJ.regRn[ea] + XEiJ.busRwse (a);  //pcws。このr[ea]はアドレスレジスタ
  4263:       }
  4264:       XEiJ.regRn[qqq] = XEiJ.busRbs (a) << 24 | XEiJ.busRbz (a + 2) << 16 | XEiJ.busRbz (a + 4) << 8 | XEiJ.busRbz (a + 6);  //Javaは評価順序が保証されている
  4265:     } else {  //BCHG.L Dq,Dr/<ea>
  4266:       int x;
  4267:       int y = XEiJ.regRn[qqq];
  4268:       if (ea < XEiJ.EA_AR) {  //BCHG.L Dq,Dr
  4269:         XEiJ.regRn[ea] = (x = XEiJ.regRn[ea]) ^ (y = 1 << y);  //intのシフトは5bitでマスクされるので1<<(y&0x1f)の&0x1fを省略
  4270:         XEiJ.mpuCycleCount += (char) y != 0 ? 6 : 8;  //(0xffff&y)!=0
  4271:       } else {  //BCHG.B Dq,<ea>
  4272:         XEiJ.mpuCycleCount += 8;
  4273:         int a = efaMltByte (ea);
  4274:         XEiJ.busWb (a, (x = XEiJ.busRbs (a)) ^ (y = 1 << (y & 7)));
  4275:       }
  4276:       XEiJ.regCCR = XEiJ.regCCR & (XEiJ.REG_CCR_X | XEiJ.REG_CCR_N | XEiJ.REG_CCR_V | XEiJ.REG_CCR_C) | (x & y) - 1 >>> 31 << 2;  //ccr_btst
  4277:     }
  4278:     if (Profiling.PFF_ON) {
  4279:       Profiling.pffTotal[Profiling.PRF.irpBchgReg.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpBchgReg.ordinal ()];
  4280:       Profiling.pffCount[Profiling.PRF.irpBchgReg.ordinal ()]++;
  4281:     }
  4282:   }  //irpBchgReg
  4283: 
  4284:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  4285:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  4286:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  4287:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  4288:   //BCLR.L Dq,Dr                                    |-|012346|-|--U--|--*--|D         |0000_qqq_110_000_rrr
  4289:   //MOVEP.W Dq,(d16,Ar)                             |-|01234S|-|-----|-----|          |0000_qqq_110_001_rrr-{data}
  4290:   //BCLR.B Dq,<ea>                                  |-|012346|-|--U--|--*--|  M+-WXZ  |0000_qqq_110_mmm_rrr
  4291:   public static void irpBclrReg () throws M68kException {
  4292:     if (Profiling.PFF_ON) {
  4293:       Profiling.pffStart[Profiling.PRF.irpBclrReg.ordinal ()] = System.nanoTime ();
  4294:     }
  4295:     int ea = XEiJ.regOC & 63;
  4296:     int y = XEiJ.regRn[XEiJ.regOC >> 9];  //qqq
  4297:     if (ea >> 3 == XEiJ.MMM_AR) {  //MOVEP.W Dq,(d16,Ar)
  4298:       XEiJ.mpuCycleCount += 16;
  4299:       int a;
  4300:       if (XEiJ.MPU_COMPOUND_POSTINCREMENT) {
  4301:         a = XEiJ.regRn[ea] + XEiJ.busRwse ((XEiJ.regPC += 2) - 2);  //pcws。このr[ea]はアドレスレジスタ
  4302:       } else {
  4303:         a = XEiJ.regPC;
  4304:         XEiJ.regPC = a + 2;
  4305:         a = XEiJ.regRn[ea] + XEiJ.busRwse (a);  //pcws。このr[ea]はアドレスレジスタ
  4306:       }
  4307:       XEiJ.busWb (a, y >> 8);
  4308:       XEiJ.busWb (a + 2, y);
  4309:     } else {  //BCLR.L Dq,Dr/<ea>
  4310:       int x;
  4311:       if (ea < XEiJ.EA_AR) {  //BCLR.L Dq,Dr
  4312:         XEiJ.regRn[ea] = (x = XEiJ.regRn[ea]) & ~(y = 1 << y);  //intのシフトは5bitでマスクされるので1<<(y&0x1f)の&0x1fを省略
  4313:         XEiJ.mpuCycleCount += (char) y != 0 ? 8 : 10;  //(0xffff&y)!=0
  4314:       } else {  //BCLR.B Dq,<ea>
  4315:         XEiJ.mpuCycleCount += 8;
  4316:         int a = efaMltByte (ea);
  4317:         XEiJ.busWb (a, (x = XEiJ.busRbs (a)) & ~(y = 1 << (y & 7)));
  4318:       }
  4319:       XEiJ.regCCR = XEiJ.regCCR & (XEiJ.REG_CCR_X | XEiJ.REG_CCR_N | XEiJ.REG_CCR_V | XEiJ.REG_CCR_C) | (x & y) - 1 >>> 31 << 2;  //ccr_btst
  4320:     }
  4321:     if (Profiling.PFF_ON) {
  4322:       Profiling.pffTotal[Profiling.PRF.irpBclrReg.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpBclrReg.ordinal ()];
  4323:       Profiling.pffCount[Profiling.PRF.irpBclrReg.ordinal ()]++;
  4324:     }
  4325:   }  //irpBclrReg
  4326: 
  4327:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  4328:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  4329:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  4330:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  4331:   //BSET.L Dq,Dr                                    |-|012346|-|--U--|--*--|D         |0000_qqq_111_000_rrr
  4332:   //MOVEP.L Dq,(d16,Ar)                             |-|01234S|-|-----|-----|          |0000_qqq_111_001_rrr-{data}
  4333:   //BSET.B Dq,<ea>                                  |-|012346|-|--U--|--*--|  M+-WXZ  |0000_qqq_111_mmm_rrr
  4334:   public static void irpBsetReg () throws M68kException {
  4335:     if (Profiling.PFF_ON) {
  4336:       Profiling.pffStart[Profiling.PRF.irpBsetReg.ordinal ()] = System.nanoTime ();
  4337:     }
  4338:     int ea = XEiJ.regOC & 63;
  4339:     int y = XEiJ.regRn[XEiJ.regOC >> 9];  //qqq
  4340:     if (ea >> 3 == XEiJ.MMM_AR) {  //MOVEP.L Dq,(d16,Ar)
  4341:       XEiJ.mpuCycleCount += 24;
  4342:       int a;
  4343:       if (XEiJ.MPU_COMPOUND_POSTINCREMENT) {
  4344:         a = XEiJ.regRn[ea] + XEiJ.busRwse ((XEiJ.regPC += 2) - 2);  //pcws。このr[ea]はアドレスレジスタ
  4345:       } else {
  4346:         a = XEiJ.regPC;
  4347:         XEiJ.regPC = a + 2;
  4348:         a = XEiJ.regRn[ea] + XEiJ.busRwse (a);  //pcws。このr[ea]はアドレスレジスタ
  4349:       }
  4350:       XEiJ.busWb (a, y >> 24);
  4351:       XEiJ.busWb (a + 2, y >> 16);
  4352:       XEiJ.busWb (a + 4, y >> 8);
  4353:       XEiJ.busWb (a + 6, y);
  4354:     } else {  //BSET.L Dq,Dr/<ea>
  4355:       int x;
  4356:       if (ea < XEiJ.EA_AR) {  //BSET.L Dq,Dr
  4357:         XEiJ.regRn[ea] = (x = XEiJ.regRn[ea]) | (y = 1 << y);  //intのシフトは5bitでマスクされるので1<<(y&0x1f)の&0x1fを省略
  4358:         XEiJ.mpuCycleCount += (char) y != 0 ? 6 : 8;  //(0xffff&y)!=0
  4359:       } else {  //BSET.B Dq,<ea>
  4360:         XEiJ.mpuCycleCount += 8;
  4361:         int a = efaMltByte (ea);
  4362:         XEiJ.busWb (a, (x = XEiJ.busRbs (a)) | (y = 1 << (y & 7)));
  4363:       }
  4364:       XEiJ.regCCR = XEiJ.regCCR & (XEiJ.REG_CCR_X | XEiJ.REG_CCR_N | XEiJ.REG_CCR_V | XEiJ.REG_CCR_C) | (x & y) - 1 >>> 31 << 2;  //ccr_btst
  4365:     }
  4366:     if (Profiling.PFF_ON) {
  4367:       Profiling.pffTotal[Profiling.PRF.irpBsetReg.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpBsetReg.ordinal ()];
  4368:       Profiling.pffCount[Profiling.PRF.irpBsetReg.ordinal ()]++;
  4369:     }
  4370:   }  //irpBsetReg
  4371: 
  4372:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  4373:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  4374:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  4375:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  4376:   //ANDI.B #<data>,<ea>                             |-|012346|-|-UUUU|-**00|D M+-WXZ  |0000_001_000_mmm_rrr-{data}
  4377:   //AND.B #<data>,<ea>                              |A|012346|-|-UUUU|-**00|  M+-WXZ  |0000_001_000_mmm_rrr-{data}  [ANDI.B #<data>,<ea>]
  4378:   //ANDI.B #<data>,CCR                              |-|012346|-|*****|*****|          |0000_001_000_111_100-{data}
  4379:   public static void irpAndiByte () throws M68kException {
  4380:     if (Profiling.PFF_ON) {
  4381:       Profiling.pffStart[Profiling.PRF.irpAndiByte.ordinal ()] = System.nanoTime ();
  4382:     }
  4383:     int ea = XEiJ.regOC & 63;
  4384:     int z;
  4385:     if (XEiJ.MPU_COMPOUND_POSTINCREMENT) {
  4386:       z = XEiJ.busRbs ((XEiJ.regPC += 2) - 1);  //pcbs
  4387:     } else {
  4388:       z = XEiJ.regPC;
  4389:       XEiJ.regPC = z + 2;
  4390:       z = XEiJ.busRbs (z + 1);  //pcbs
  4391:     }
  4392:     if (ea < XEiJ.EA_AR) {  //ANDI.B #<data>,Dr
  4393:       XEiJ.mpuCycleCount += 8;
  4394:       z = XEiJ.regRn[ea] &= ~255 | z;  //1拡張してからAND
  4395:       XEiJ.regCCR = XEiJ.regCCR & XEiJ.REG_CCR_X | XEiJ.MPU_TSTB_TABLE[255 & z];  //ccr_tst_byte
  4396:     } else if (ea == XEiJ.EA_IM) {  //ANDI.B #<data>,CCR
  4397:       XEiJ.mpuCycleCount += 20;
  4398:       XEiJ.regCCR &= z;
  4399:     } else {  //ANDI.B #<data>,<mem>
  4400:       XEiJ.mpuCycleCount += 12;
  4401:       int a = efaMltByte (ea);
  4402:       XEiJ.busWb (a, z &= XEiJ.busRbs (a));
  4403:       XEiJ.regCCR = XEiJ.regCCR & XEiJ.REG_CCR_X | XEiJ.MPU_TSTB_TABLE[255 & z];  //ccr_tst_byte
  4404:     }
  4405:     if (Profiling.PFF_ON) {
  4406:       Profiling.pffTotal[Profiling.PRF.irpAndiByte.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpAndiByte.ordinal ()];
  4407:       Profiling.pffCount[Profiling.PRF.irpAndiByte.ordinal ()]++;
  4408:     }
  4409:   }  //irpAndiByte
  4410: 
  4411:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  4412:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  4413:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  4414:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  4415:   //ANDI.W #<data>,<ea>                             |-|012346|-|-UUUU|-**00|D M+-WXZ  |0000_001_001_mmm_rrr-{data}
  4416:   //AND.W #<data>,<ea>                              |A|012346|-|-UUUU|-**00|  M+-WXZ  |0000_001_001_mmm_rrr-{data}  [ANDI.W #<data>,<ea>]
  4417:   //ANDI.W #<data>,SR                               |-|012346|P|*****|*****|          |0000_001_001_111_100-{data}
  4418:   public static void irpAndiWord () throws M68kException {
  4419:     if (Profiling.PFF_ON) {
  4420:       Profiling.pffStart[Profiling.PRF.irpAndiWord.ordinal ()] = System.nanoTime ();
  4421:     }
  4422:     int ea = XEiJ.regOC & 63;
  4423:     if (ea < XEiJ.EA_AR) {  //ANDI.W #<data>,Dr
  4424:       int z;
  4425:       if (XEiJ.MPU_COMPOUND_POSTINCREMENT) {
  4426:         z = XEiJ.busRwse ((XEiJ.regPC += 2) - 2);  //pcws
  4427:       } else {
  4428:         z = XEiJ.regPC;
  4429:         XEiJ.regPC = z + 2;
  4430:         z = XEiJ.busRwse (z);  //pcws
  4431:       }
  4432:       XEiJ.mpuCycleCount += 8;
  4433:       z = XEiJ.regRn[ea] &= ~65535 | z;  //1拡張してからAND
  4434:       XEiJ.regCCR = XEiJ.regCCR & XEiJ.REG_CCR_X | (char) z - 1 >> 31 & XEiJ.REG_CCR_Z | ((short) z < 0 ? XEiJ.REG_CCR_N : 0);  //ccr_tst_word
  4435:     } else if (ea == XEiJ.EA_IM) {  //ANDI.W #<data>,SR
  4436:       if (XEiJ.regSRS == 0) {  //ユーザモードのとき
  4437:         M68kException.m6eNumber = M68kException.M6E_PRIVILEGE_VIOLATION;
  4438:         throw M68kException.m6eSignal;
  4439:       }
  4440:       //以下はスーパーバイザモード
  4441:       XEiJ.mpuCycleCount += 20;
  4442:       if (XEiJ.MPU_COMPOUND_POSTINCREMENT) {
  4443:         irpSetSR ((XEiJ.regSRT1 | XEiJ.regSRS | XEiJ.regSRI | XEiJ.regCCR) & XEiJ.busRwse ((XEiJ.regPC += 2) - 2));  //pcws。特権違反チェックが先
  4444:       } else {
  4445:         int t = XEiJ.regPC;
  4446:         XEiJ.regPC = t + 2;
  4447:         irpSetSR ((XEiJ.regSRT1 | XEiJ.regSRS | XEiJ.regSRI | XEiJ.regCCR) & XEiJ.busRwse (t));  //pcws。特権違反チェックが先
  4448:       }
  4449:     } else {  //ANDI.W #<data>,<mem>
  4450:       int z;
  4451:       if (XEiJ.MPU_COMPOUND_POSTINCREMENT) {
  4452:         z = XEiJ.busRwse ((XEiJ.regPC += 2) - 2);  //pcws
  4453:       } else {
  4454:         z = XEiJ.regPC;
  4455:         XEiJ.regPC = z + 2;
  4456:         z = XEiJ.busRwse (z);  //pcws
  4457:       }
  4458:       XEiJ.mpuCycleCount += 12;
  4459:       int a = efaMltWord (ea);
  4460:       XEiJ.busWw (a, z &= XEiJ.busRws (a));
  4461:       XEiJ.regCCR = XEiJ.regCCR & XEiJ.REG_CCR_X | (char) z - 1 >> 31 & XEiJ.REG_CCR_Z | ((short) z < 0 ? XEiJ.REG_CCR_N : 0);  //ccr_tst_word
  4462:     }
  4463:     if (Profiling.PFF_ON) {
  4464:       Profiling.pffTotal[Profiling.PRF.irpAndiWord.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpAndiWord.ordinal ()];
  4465:       Profiling.pffCount[Profiling.PRF.irpAndiWord.ordinal ()]++;
  4466:     }
  4467:   }  //irpAndiWord
  4468: 
  4469:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  4470:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  4471:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  4472:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  4473:   //ANDI.L #<data>,<ea>                             |-|012346|-|-UUUU|-**00|D M+-WXZ  |0000_001_010_mmm_rrr-{data}
  4474:   //AND.L #<data>,<ea>                              |A|012346|-|-UUUU|-**00|  M+-WXZ  |0000_001_010_mmm_rrr-{data}  [ANDI.L #<data>,<ea>]
  4475:   public static void irpAndiLong () throws M68kException {
  4476:     if (Profiling.PFF_ON) {
  4477:       Profiling.pffStart[Profiling.PRF.irpAndiLong.ordinal ()] = System.nanoTime ();
  4478:     }
  4479:     int ea = XEiJ.regOC & 63;
  4480:     int y;
  4481:     if (XEiJ.MPU_COMPOUND_POSTINCREMENT) {
  4482:       y = XEiJ.busRlse ((XEiJ.regPC += 4) - 4);  //pcls
  4483:     } else {
  4484:       y = XEiJ.regPC;
  4485:       XEiJ.regPC = y + 4;
  4486:       y = XEiJ.busRlse (y);  //pcls
  4487:     }
  4488:     int z;
  4489:     if (ea < XEiJ.EA_AR) {  //ANDI.L #<data>,Dr
  4490:       XEiJ.mpuCycleCount += 16;
  4491:       z = XEiJ.regRn[ea] &= y;
  4492:     } else {  //ANDI.L #<data>,<mem>
  4493:       XEiJ.mpuCycleCount += 20;
  4494:       int a = efaMltLong (ea);
  4495:       XEiJ.busWl (a, z = XEiJ.busRls (a) & y);
  4496:     }
  4497:     XEiJ.regCCR = z >> 28 & XEiJ.REG_CCR_N | (z == 0 ? XEiJ.regCCR & XEiJ.REG_CCR_X | XEiJ.REG_CCR_Z : XEiJ.regCCR & XEiJ.REG_CCR_X);  //ccr_tst
  4498:     if (Profiling.PFF_ON) {
  4499:       Profiling.pffTotal[Profiling.PRF.irpAndiLong.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpAndiLong.ordinal ()];
  4500:       Profiling.pffCount[Profiling.PRF.irpAndiLong.ordinal ()]++;
  4501:     }
  4502:   }  //irpAndiLong
  4503: 
  4504:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  4505:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  4506:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  4507:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  4508:   //BYTEREV.L Dr                                    |-|------|-|-----|-----|D         |0000_001_011_000_rrr (ISA_C)
  4509:   //
  4510:   //BYTEREV.L Dr
  4511:   //  Drのバイトの並びを逆順にする。CCRは変化しない
  4512:   public static void irpCmp2Chk2Word () throws M68kException {
  4513:     if (Profiling.PFF_ON) {
  4514:       Profiling.pffStart[Profiling.PRF.irpCmp2Chk2Word.ordinal ()] = System.nanoTime ();
  4515:     }
  4516:     int ea = XEiJ.regOC & 63;
  4517:     if (ea < XEiJ.EA_AR) {  //BYTEREV.L Dr
  4518:       XEiJ.mpuCycleCount += 4;
  4519:       if (true) {  //0.10ns-0.18ns  0x782750ec
  4520:         XEiJ.regRn[ea] = Integer.reverseBytes (XEiJ.regRn[ea]);
  4521:       } else {  //1.06ns  0x782750ec
  4522:         int x = XEiJ.regRn[ea];
  4523:         XEiJ.regRn[ea] = x << 24 | x << 8 & 0x00ff0000 | x >>> 8 & 0x0000ff00 | x >>> 24;
  4524:       }
  4525:     } else {  //CMP2/CHK2.W <ea>,Rn
  4526:       //プロセッサの判別に使われることがあるのでMC68000ではCMP2/CHK2をエラーにしなければならない
  4527:       M68kException.m6eNumber = M68kException.M6E_ILLEGAL_INSTRUCTION;
  4528:       throw M68kException.m6eSignal;
  4529:     }
  4530:     if (Profiling.PFF_ON) {
  4531:       Profiling.pffTotal[Profiling.PRF.irpCmp2Chk2Word.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpCmp2Chk2Word.ordinal ()];
  4532:       Profiling.pffCount[Profiling.PRF.irpCmp2Chk2Word.ordinal ()]++;
  4533:     }
  4534:   }  //irpCmp2Chk2Word
  4535: 
  4536:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  4537:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  4538:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  4539:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  4540:   //SUBI.B #<data>,<ea>                             |-|012346|-|UUUUU|*****|D M+-WXZ  |0000_010_000_mmm_rrr-{data}
  4541:   //SUB.B #<data>,<ea>                              |A|012346|-|UUUUU|*****|  M+-WXZ  |0000_010_000_mmm_rrr-{data}  [SUBI.B #<data>,<ea>]
  4542:   public static void irpSubiByte () throws M68kException {
  4543:     if (Profiling.PFF_ON) {
  4544:       Profiling.pffStart[Profiling.PRF.irpSubiByte.ordinal ()] = System.nanoTime ();
  4545:     }
  4546:     int ea = XEiJ.regOC & 63;
  4547:     int x;
  4548:     int y;
  4549:     if (XEiJ.MPU_COMPOUND_POSTINCREMENT) {
  4550:       y = XEiJ.busRbs ((XEiJ.regPC += 2) - 1);  //pcbs
  4551:     } else {
  4552:       y = XEiJ.regPC;
  4553:       XEiJ.regPC = y + 2;
  4554:       y = XEiJ.busRbs (y + 1);  //pcbs
  4555:     }
  4556:     int z;
  4557:     if (ea < XEiJ.EA_AR) {  //SUBI.B #<data>,Dr
  4558:       XEiJ.mpuCycleCount += 8;
  4559:       z = (byte) (XEiJ.regRn[ea] = ~0xff & (x = XEiJ.regRn[ea]) | 0xff & (x = (byte) x) - y);
  4560:     } else {  //SUBI.B #<data>,<mem>
  4561:       XEiJ.mpuCycleCount += 12;
  4562:       int a = efaMltByte (ea);
  4563:       XEiJ.busWb (a, z = (byte) ((x = XEiJ.busRbs (a)) - y));
  4564:     }
  4565:     XEiJ.regCCR = (z >> 28 & XEiJ.REG_CCR_N | (z == 0 ? XEiJ.REG_CCR_Z : 0) |
  4566:            ((x ^ y) & (x ^ z)) >>> 31 << 1 |
  4567:            (x & (y ^ z) ^ (y | z)) >> 31 & (XEiJ.REG_CCR_X | XEiJ.REG_CCR_C));  //ccr_sub
  4568:     if (Profiling.PFF_ON) {
  4569:       Profiling.pffTotal[Profiling.PRF.irpSubiByte.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpSubiByte.ordinal ()];
  4570:       Profiling.pffCount[Profiling.PRF.irpSubiByte.ordinal ()]++;
  4571:     }
  4572:   }  //irpSubiByte
  4573: 
  4574:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  4575:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  4576:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  4577:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  4578:   //SUBI.W #<data>,<ea>                             |-|012346|-|UUUUU|*****|D M+-WXZ  |0000_010_001_mmm_rrr-{data}
  4579:   //SUB.W #<data>,<ea>                              |A|012346|-|UUUUU|*****|  M+-WXZ  |0000_010_001_mmm_rrr-{data}  [SUBI.W #<data>,<ea>]
  4580:   public static void irpSubiWord () throws M68kException {
  4581:     if (Profiling.PFF_ON) {
  4582:       Profiling.pffStart[Profiling.PRF.irpSubiWord.ordinal ()] = System.nanoTime ();
  4583:     }
  4584:     int ea = XEiJ.regOC & 63;
  4585:     int x;
  4586:     int y;
  4587:     if (XEiJ.MPU_COMPOUND_POSTINCREMENT) {
  4588:       y = XEiJ.busRwse ((XEiJ.regPC += 2) - 2);  //pcws
  4589:     } else {
  4590:       y = XEiJ.regPC;
  4591:       XEiJ.regPC = y + 2;
  4592:       y = XEiJ.busRwse (y);  //pcws
  4593:     }
  4594:     int z;
  4595:     if (ea < XEiJ.EA_AR) {  //SUBI.W #<data>,Dr
  4596:       XEiJ.mpuCycleCount += 8;
  4597:       z = (short) (XEiJ.regRn[ea] = ~0xffff & (x = XEiJ.regRn[ea]) | (char) ((x = (short) x) - y));
  4598:     } else {  //SUBI.W #<data>,<mem>
  4599:       XEiJ.mpuCycleCount += 12;
  4600:       int a = efaMltWord (ea);
  4601:       XEiJ.busWw (a, z = (short) ((x = XEiJ.busRws (a)) - y));
  4602:     }
  4603:     XEiJ.regCCR = (z >> 28 & XEiJ.REG_CCR_N | (z == 0 ? XEiJ.REG_CCR_Z : 0) |
  4604:            ((x ^ y) & (x ^ z)) >>> 31 << 1 |
  4605:            (x & (y ^ z) ^ (y | z)) >> 31 & (XEiJ.REG_CCR_X | XEiJ.REG_CCR_C));  //ccr_sub
  4606:     if (Profiling.PFF_ON) {
  4607:       Profiling.pffTotal[Profiling.PRF.irpSubiWord.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpSubiWord.ordinal ()];
  4608:       Profiling.pffCount[Profiling.PRF.irpSubiWord.ordinal ()]++;
  4609:     }
  4610:   }  //irpSubiWord
  4611: 
  4612:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  4613:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  4614:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  4615:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  4616:   //SUBI.L #<data>,<ea>                             |-|012346|-|UUUUU|*****|D M+-WXZ  |0000_010_010_mmm_rrr-{data}
  4617:   //SUB.L #<data>,<ea>                              |A|012346|-|UUUUU|*****|  M+-WXZ  |0000_010_010_mmm_rrr-{data}  [SUBI.L #<data>,<ea>]
  4618:   public static void irpSubiLong () throws M68kException {
  4619:     if (Profiling.PFF_ON) {
  4620:       Profiling.pffStart[Profiling.PRF.irpSubiLong.ordinal ()] = System.nanoTime ();
  4621:     }
  4622:     int ea = XEiJ.regOC & 63;
  4623:     int x;
  4624:     int y;
  4625:     if (XEiJ.MPU_COMPOUND_POSTINCREMENT) {
  4626:       y = XEiJ.busRlse ((XEiJ.regPC += 4) - 4);  //pcls
  4627:     } else {
  4628:       y = XEiJ.regPC;
  4629:       XEiJ.regPC = y + 4;
  4630:       y = XEiJ.busRlse (y);  //pcls
  4631:     }
  4632:     int z;
  4633:     if (ea < XEiJ.EA_AR) {  //SUBI.L #<data>,Dr
  4634:       XEiJ.mpuCycleCount += 16;
  4635:       XEiJ.regRn[ea] = z = (x = XEiJ.regRn[ea]) - y;
  4636:     } else {  //SUBI.L #<data>,<mem>
  4637:       XEiJ.mpuCycleCount += 20;
  4638:       int a = efaMltLong (ea);
  4639:       XEiJ.busWl (a, z = (x = XEiJ.busRls (a)) - y);
  4640:     }
  4641:     XEiJ.regCCR = (z >> 28 & XEiJ.REG_CCR_N | (z == 0 ? XEiJ.REG_CCR_Z : 0) |
  4642:            ((x ^ y) & (x ^ z)) >>> 31 << 1 |
  4643:            (x & (y ^ z) ^ (y | z)) >> 31 & (XEiJ.REG_CCR_X | XEiJ.REG_CCR_C));  //ccr_sub
  4644:     if (Profiling.PFF_ON) {
  4645:       Profiling.pffTotal[Profiling.PRF.irpSubiLong.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpSubiLong.ordinal ()];
  4646:       Profiling.pffCount[Profiling.PRF.irpSubiLong.ordinal ()]++;
  4647:     }
  4648:   }  //irpSubiLong
  4649: 
  4650:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  4651:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  4652:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  4653:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  4654:   //FF1.L Dr                                        |-|------|-|-UUUU|-**00|D         |0000_010_011_000_rrr (ISA_C)
  4655:   //
  4656:   //FF1.L Dr
  4657:   //  Drの最上位の1のbit31からのオフセットをDrに格納する
  4658:   //  Drが0のときは32になる
  4659:   public static void irpCmp2Chk2Long () throws M68kException {
  4660:     if (Profiling.PFF_ON) {
  4661:       Profiling.pffStart[Profiling.PRF.irpCmp2Chk2Long.ordinal ()] = System.nanoTime ();
  4662:     }
  4663:     int ea = XEiJ.regOC & 63;
  4664:     if (ea < XEiJ.EA_AR) {  //FF1.L Dr
  4665:       XEiJ.mpuCycleCount += 4;
  4666:       int z = XEiJ.regRn[ea];
  4667:       if (true) {
  4668:         XEiJ.regRn[ea] = Integer.numberOfLeadingZeros (z);
  4669:       } else {
  4670:         if (z == 0) {
  4671:           XEiJ.regRn[ea] = 32;
  4672:         } else {
  4673:           int k = -(z >>> 16) >> 16 & 16;
  4674:           k += -(z >>> k + 8) >> 8 & 8;
  4675:           k += -(z >>> k + 4) >> 4 & 4;
  4676:           //     bit3  1  1  1  1  1  1  1  1  0  0  0  0  0  0  0  0
  4677:           //     bit2  1  1  1  1  0  0  0  0  1  1  1  1  0  0  0  0
  4678:           //     bit1  1  1  0  0  1  1  0  0  1  1  0  0  1  1  0  0
  4679:           //     bit0  1  0  1  0  1  0  1  0  1  0  1  0  1  0  1  0
  4680:           XEiJ.regRn[ea] = ((0b11_11_11_11_11_11_11_11_10_10_10_10_01_01_00_00 >>> (z >>> k << 1)) & 3) + k;  //intのシフトカウントは下位5bitだけが使用される
  4681:         }
  4682:       }
  4683:       XEiJ.regCCR = z >> 28 & XEiJ.REG_CCR_N | (z == 0 ? XEiJ.regCCR & XEiJ.REG_CCR_X | XEiJ.REG_CCR_Z : XEiJ.regCCR & XEiJ.REG_CCR_X);  //ccr_tst
  4684:     } else {  //CMP2/CHK2.L <ea>,Rn
  4685:       //プロセッサの判別に使われることがあるのでMC68000ではCMP2/CHK2をエラーにしなければならない
  4686:       M68kException.m6eNumber = M68kException.M6E_ILLEGAL_INSTRUCTION;
  4687:       throw M68kException.m6eSignal;
  4688:     }
  4689:     if (Profiling.PFF_ON) {
  4690:       Profiling.pffTotal[Profiling.PRF.irpCmp2Chk2Long.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpCmp2Chk2Long.ordinal ()];
  4691:       Profiling.pffCount[Profiling.PRF.irpCmp2Chk2Long.ordinal ()]++;
  4692:     }
  4693:   }  //irpCmp2Chk2Long
  4694: 
  4695:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  4696:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  4697:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  4698:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  4699:   //ADDI.B #<data>,<ea>                             |-|012346|-|UUUUU|*****|D M+-WXZ  |0000_011_000_mmm_rrr-{data}
  4700:   public static void irpAddiByte () throws M68kException {
  4701:     if (Profiling.PFF_ON) {
  4702:       Profiling.pffStart[Profiling.PRF.irpAddiByte.ordinal ()] = System.nanoTime ();
  4703:     }
  4704:     int ea = XEiJ.regOC & 63;
  4705:     int x;
  4706:     int y;
  4707:     if (XEiJ.MPU_COMPOUND_POSTINCREMENT) {
  4708:       y = XEiJ.busRbs ((XEiJ.regPC += 2) - 1);  //pcbs
  4709:     } else {
  4710:       y = XEiJ.regPC;
  4711:       XEiJ.regPC = y + 2;
  4712:       y = XEiJ.busRbs (y + 1);  //pcbs
  4713:     }
  4714:     int z;
  4715:     if (ea < XEiJ.EA_AR) {  //ADDI.B #<data>,Dr
  4716:       XEiJ.mpuCycleCount += 8;
  4717:       z = (byte) (XEiJ.regRn[ea] = ~0xff & (x = XEiJ.regRn[ea]) | 0xff & (x = (byte) x) + y);
  4718:     } else {  //ADDI.B #<data>,<mem>
  4719:       XEiJ.mpuCycleCount += 12;
  4720:       int a = efaMltByte (ea);
  4721:       XEiJ.busWb (a, z = (byte) ((x = XEiJ.busRbs (a)) + y));
  4722:     }
  4723:     XEiJ.regCCR = (z >> 28 & XEiJ.REG_CCR_N | (z == 0 ? XEiJ.REG_CCR_Z : 0) |
  4724:            ((x ^ z) & (y ^ z)) >>> 31 << 1 |
  4725:            ((x | y) ^ (x ^ y) & z) >> 31 & (XEiJ.REG_CCR_X | XEiJ.REG_CCR_C));  //ccr_add
  4726:     if (Profiling.PFF_ON) {
  4727:       Profiling.pffTotal[Profiling.PRF.irpAddiByte.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpAddiByte.ordinal ()];
  4728:       Profiling.pffCount[Profiling.PRF.irpAddiByte.ordinal ()]++;
  4729:     }
  4730:   }  //irpAddiByte
  4731: 
  4732:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  4733:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  4734:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  4735:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  4736:   //ADDI.W #<data>,<ea>                             |-|012346|-|UUUUU|*****|D M+-WXZ  |0000_011_001_mmm_rrr-{data}
  4737:   public static void irpAddiWord () throws M68kException {
  4738:     if (Profiling.PFF_ON) {
  4739:       Profiling.pffStart[Profiling.PRF.irpAddiWord.ordinal ()] = System.nanoTime ();
  4740:     }
  4741:     int ea = XEiJ.regOC & 63;
  4742:     int x;
  4743:     int y;
  4744:     if (XEiJ.MPU_COMPOUND_POSTINCREMENT) {
  4745:       y = XEiJ.busRwse ((XEiJ.regPC += 2) - 2);  //pcws
  4746:     } else {
  4747:       y = XEiJ.regPC;
  4748:       XEiJ.regPC = y + 2;
  4749:       y = XEiJ.busRwse (y);  //pcws
  4750:     }
  4751:     int z;
  4752:     if (ea < XEiJ.EA_AR) {  //ADDI.W #<data>,Dr
  4753:       XEiJ.mpuCycleCount += 8;
  4754:       z = (short) (XEiJ.regRn[ea] = ~0xffff & (x = XEiJ.regRn[ea]) | (char) ((x = (short) x) + y));
  4755:     } else {  //ADDI.W #<data>,<mem>
  4756:       XEiJ.mpuCycleCount += 12;
  4757:       int a = efaMltWord (ea);
  4758:       XEiJ.busWw (a, z = (short) ((x = XEiJ.busRws (a)) + y));
  4759:     }
  4760:     XEiJ.regCCR = (z >> 28 & XEiJ.REG_CCR_N | (z == 0 ? XEiJ.REG_CCR_Z : 0) |
  4761:            ((x ^ z) & (y ^ z)) >>> 31 << 1 |
  4762:            ((x | y) ^ (x ^ y) & z) >> 31 & (XEiJ.REG_CCR_X | XEiJ.REG_CCR_C));  //ccr_add
  4763:     if (Profiling.PFF_ON) {
  4764:       Profiling.pffTotal[Profiling.PRF.irpAddiWord.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpAddiWord.ordinal ()];
  4765:       Profiling.pffCount[Profiling.PRF.irpAddiWord.ordinal ()]++;
  4766:     }
  4767:   }  //irpAddiWord
  4768: 
  4769:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  4770:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  4771:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  4772:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  4773:   //ADDI.L #<data>,<ea>                             |-|012346|-|UUUUU|*****|D M+-WXZ  |0000_011_010_mmm_rrr-{data}
  4774:   public static void irpAddiLong () throws M68kException {
  4775:     if (Profiling.PFF_ON) {
  4776:       Profiling.pffStart[Profiling.PRF.irpAddiLong.ordinal ()] = System.nanoTime ();
  4777:     }
  4778:     int ea = XEiJ.regOC & 63;
  4779:     int x;
  4780:     int y;
  4781:     if (XEiJ.MPU_COMPOUND_POSTINCREMENT) {
  4782:       y = XEiJ.busRlse ((XEiJ.regPC += 4) - 4);  //pcls
  4783:     } else {
  4784:       y = XEiJ.regPC;
  4785:       XEiJ.regPC = y + 4;
  4786:       y = XEiJ.busRlse (y);  //pcls
  4787:     }
  4788:     int z;
  4789:     if (ea < XEiJ.EA_AR) {  //ADDI.L #<data>,Dr
  4790:       XEiJ.mpuCycleCount += 16;
  4791:       XEiJ.regRn[ea] = z = (x = XEiJ.regRn[ea]) + y;
  4792:     } else {  //ADDI.L #<data>,<mem>
  4793:       XEiJ.mpuCycleCount += 20;
  4794:       int a = efaMltLong (ea);
  4795:       XEiJ.busWl (a, z = (x = XEiJ.busRls (a)) + y);
  4796:     }
  4797:     XEiJ.regCCR = (z >> 28 & XEiJ.REG_CCR_N | (z == 0 ? XEiJ.REG_CCR_Z : 0) |
  4798:            ((x ^ z) & (y ^ z)) >>> 31 << 1 |
  4799:            ((x | y) ^ (x ^ y) & z) >> 31 & (XEiJ.REG_CCR_X | XEiJ.REG_CCR_C));  //ccr_add
  4800:     if (Profiling.PFF_ON) {
  4801:       Profiling.pffTotal[Profiling.PRF.irpAddiLong.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpAddiLong.ordinal ()];
  4802:       Profiling.pffCount[Profiling.PRF.irpAddiLong.ordinal ()]++;
  4803:     }
  4804:   }  //irpAddiLong
  4805: 
  4806:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  4807:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  4808:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  4809:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  4810:   //BTST.L #<data>,Dr                               |-|012346|-|--U--|--*--|D         |0000_100_000_000_rrr-{data}
  4811:   //BTST.B #<data>,<ea>                             |-|012346|-|--U--|--*--|  M+-WXZP |0000_100_000_mmm_rrr-{data}
  4812:   public static void irpBtstImm () throws M68kException {
  4813:     if (Profiling.PFF_ON) {
  4814:       Profiling.pffStart[Profiling.PRF.irpBtstImm.ordinal ()] = System.nanoTime ();
  4815:     }
  4816:     int ea = XEiJ.regOC & 63;
  4817:     int y;
  4818:     if (XEiJ.MPU_COMPOUND_POSTINCREMENT) {
  4819:       y = XEiJ.busRbs ((XEiJ.regPC += 2) - 1);  //pcbs
  4820:     } else {
  4821:       y = XEiJ.regPC;
  4822:       XEiJ.regPC = y + 2;
  4823:       y = XEiJ.busRbs (y + 1);  //pcbs
  4824:     }
  4825:     if (ea < XEiJ.EA_AR) {  //BTST.L #<data>,Dr
  4826:       XEiJ.mpuCycleCount += 10;
  4827:       XEiJ.regCCR = XEiJ.regCCR & (XEiJ.REG_CCR_X | XEiJ.REG_CCR_N | XEiJ.REG_CCR_V | XEiJ.REG_CCR_C) | (~XEiJ.regRn[ea] >>> y & 1) << 2;  //ccr_btst。intのシフトは5bitでマスクされるので&31を省略
  4828:     } else {  //BTST.B #<data>,<ea>
  4829:       XEiJ.mpuCycleCount += 8;
  4830:       XEiJ.regCCR = XEiJ.regCCR & (XEiJ.REG_CCR_X | XEiJ.REG_CCR_N | XEiJ.REG_CCR_V | XEiJ.REG_CCR_C) | (~XEiJ.busRbs (efaMemByte (ea)) >>> (y & 7) & 1) << 2;  //ccr_btst
  4831:     }
  4832:     if (Profiling.PFF_ON) {
  4833:       Profiling.pffTotal[Profiling.PRF.irpBtstImm.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpBtstImm.ordinal ()];
  4834:       Profiling.pffCount[Profiling.PRF.irpBtstImm.ordinal ()]++;
  4835:     }
  4836:   }  //irpBtstImm
  4837: 
  4838:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  4839:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  4840:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  4841:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  4842:   //BCHG.L #<data>,Dr                               |-|012346|-|--U--|--*--|D         |0000_100_001_000_rrr-{data}
  4843:   //BCHG.B #<data>,<ea>                             |-|012346|-|--U--|--*--|  M+-WXZ  |0000_100_001_mmm_rrr-{data}
  4844:   public static void irpBchgImm () throws M68kException {
  4845:     if (Profiling.PFF_ON) {
  4846:       Profiling.pffStart[Profiling.PRF.irpBchgImm.ordinal ()] = System.nanoTime ();
  4847:     }
  4848:     int ea = XEiJ.regOC & 63;
  4849:     int x;
  4850:     int y;
  4851:     if (XEiJ.MPU_COMPOUND_POSTINCREMENT) {
  4852:       y = XEiJ.busRbs ((XEiJ.regPC += 2) - 1);  //pcbs
  4853:     } else {
  4854:       y = XEiJ.regPC;
  4855:       XEiJ.regPC = y + 2;
  4856:       y = XEiJ.busRbs (y + 1);  //pcbs
  4857:     }
  4858:     if (ea < XEiJ.EA_AR) {  //BCHG.L #<data>,Dr
  4859:       XEiJ.regRn[ea] = (x = XEiJ.regRn[ea]) ^ (y = 1 << y);  //intのシフトは5bitでマスクされるので1<<(y&0x1f)の&0x1fを省略
  4860:       XEiJ.mpuCycleCount += (char) y != 0 ? 10 : 12;  //(0xffff&y)!=0
  4861:     } else {  //BCHG.B #<data>,<ea>
  4862:       XEiJ.mpuCycleCount += 12;
  4863:       int a = efaMltByte (ea);
  4864:       XEiJ.busWb (a, (x = XEiJ.busRbs (a)) ^ (y = 1 << (y & 7)));
  4865:     }
  4866:     XEiJ.regCCR = XEiJ.regCCR & (XEiJ.REG_CCR_X | XEiJ.REG_CCR_N | XEiJ.REG_CCR_V | XEiJ.REG_CCR_C) | (x & y) - 1 >>> 31 << 2;  //ccr_btst
  4867:     if (Profiling.PFF_ON) {
  4868:       Profiling.pffTotal[Profiling.PRF.irpBchgImm.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpBchgImm.ordinal ()];
  4869:       Profiling.pffCount[Profiling.PRF.irpBchgImm.ordinal ()]++;
  4870:     }
  4871:   }  //irpBchgImm
  4872: 
  4873:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  4874:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  4875:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  4876:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  4877:   //BCLR.L #<data>,Dr                               |-|012346|-|--U--|--*--|D         |0000_100_010_000_rrr-{data}
  4878:   //BCLR.B #<data>,<ea>                             |-|012346|-|--U--|--*--|  M+-WXZ  |0000_100_010_mmm_rrr-{data}
  4879:   public static void irpBclrImm () throws M68kException {
  4880:     if (Profiling.PFF_ON) {
  4881:       Profiling.pffStart[Profiling.PRF.irpBclrImm.ordinal ()] = System.nanoTime ();
  4882:     }
  4883:     int ea = XEiJ.regOC & 63;
  4884:     int x;
  4885:     int y;
  4886:     if (XEiJ.MPU_COMPOUND_POSTINCREMENT) {
  4887:       y = XEiJ.busRbs ((XEiJ.regPC += 2) - 1);  //pcbs
  4888:     } else {
  4889:       y = XEiJ.regPC;
  4890:       XEiJ.regPC = y + 2;
  4891:       y = XEiJ.busRbs (y + 1);  //pcbs
  4892:     }
  4893:     if (ea < XEiJ.EA_AR) {  //BCLR.L #<data>,Dr
  4894:       XEiJ.regRn[ea] = (x = XEiJ.regRn[ea]) & ~(y = 1 << y);  //intのシフトは5bitでマスクされるので1<<(y&0x1f)の&0x1fを省略
  4895:       XEiJ.mpuCycleCount += (char) y != 0 ? 12 : 14;  //(0xffff&y)!=0
  4896:     } else {  //BCLR.B #<data>,<ea>
  4897:       XEiJ.mpuCycleCount += 12;
  4898:       int a = efaMltByte (ea);
  4899:       XEiJ.busWb (a, (x = XEiJ.busRbs (a)) & ~(y = 1 << (y & 7)));
  4900:     }
  4901:     XEiJ.regCCR = XEiJ.regCCR & (XEiJ.REG_CCR_X | XEiJ.REG_CCR_N | XEiJ.REG_CCR_V | XEiJ.REG_CCR_C) | (x & y) - 1 >>> 31 << 2;  //ccr_btst
  4902:     if (Profiling.PFF_ON) {
  4903:       Profiling.pffTotal[Profiling.PRF.irpBclrImm.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpBclrImm.ordinal ()];
  4904:       Profiling.pffCount[Profiling.PRF.irpBclrImm.ordinal ()]++;
  4905:     }
  4906:   }  //irpBclrImm
  4907: 
  4908:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  4909:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  4910:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  4911:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  4912:   //BSET.L #<data>,Dr                               |-|012346|-|--U--|--*--|D         |0000_100_011_000_rrr-{data}
  4913:   //BSET.B #<data>,<ea>                             |-|012346|-|--U--|--*--|  M+-WXZ  |0000_100_011_mmm_rrr-{data}
  4914:   public static void irpBsetImm () throws M68kException {
  4915:     if (Profiling.PFF_ON) {
  4916:       Profiling.pffStart[Profiling.PRF.irpBsetImm.ordinal ()] = System.nanoTime ();
  4917:     }
  4918:     int ea = XEiJ.regOC & 63;
  4919:     int x;
  4920:     int y;
  4921:     if (XEiJ.MPU_COMPOUND_POSTINCREMENT) {
  4922:       y = XEiJ.busRbs ((XEiJ.regPC += 2) - 1);  //pcbs
  4923:     } else {
  4924:       y = XEiJ.regPC;
  4925:       XEiJ.regPC = y + 2;
  4926:       y = XEiJ.busRbs (y + 1);  //pcbs
  4927:     }
  4928:     if (ea < XEiJ.EA_AR) {  //BSET.L #<data>,Dr
  4929:       XEiJ.regRn[ea] = (x = XEiJ.regRn[ea]) | (y = 1 << y);  //intのシフトは5bitでマスクされるので1<<(y&0x1f)の&0x1fを省略
  4930:       XEiJ.mpuCycleCount += (char) y != 0 ? 10 : 12;  //(0xffff&y)!=0
  4931:     } else {  //BSET.B #<data>,<ea>
  4932:       XEiJ.mpuCycleCount += 12;
  4933:       int a = efaMltByte (ea);
  4934:       XEiJ.busWb (a, (x = XEiJ.busRbs (a)) | (y = 1 << (y & 7)));
  4935:     }
  4936:     XEiJ.regCCR = XEiJ.regCCR & (XEiJ.REG_CCR_X | XEiJ.REG_CCR_N | XEiJ.REG_CCR_V | XEiJ.REG_CCR_C) | (x & y) - 1 >>> 31 << 2;  //ccr_btst
  4937:     if (Profiling.PFF_ON) {
  4938:       Profiling.pffTotal[Profiling.PRF.irpBsetImm.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpBsetImm.ordinal ()];
  4939:       Profiling.pffCount[Profiling.PRF.irpBsetImm.ordinal ()]++;
  4940:     }
  4941:   }  //irpBsetImm
  4942: 
  4943:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  4944:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  4945:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  4946:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  4947:   //EORI.B #<data>,<ea>                             |-|012346|-|-UUUU|-**00|D M+-WXZ  |0000_101_000_mmm_rrr-{data}
  4948:   //EOR.B #<data>,<ea>                              |A|012346|-|-UUUU|-**00|D M+-WXZ  |0000_101_000_mmm_rrr-{data}  [EORI.B #<data>,<ea>]
  4949:   //EORI.B #<data>,CCR                              |-|012346|-|*****|*****|          |0000_101_000_111_100-{data}
  4950:   public static void irpEoriByte () throws M68kException {
  4951:     if (Profiling.PFF_ON) {
  4952:       Profiling.pffStart[Profiling.PRF.irpEoriByte.ordinal ()] = System.nanoTime ();
  4953:     }
  4954:     int ea = XEiJ.regOC & 63;
  4955:     int z;
  4956:     if (XEiJ.MPU_COMPOUND_POSTINCREMENT) {
  4957:       z = XEiJ.busRbs ((XEiJ.regPC += 2) - 1);  //pcbs
  4958:     } else {
  4959:       z = XEiJ.regPC;
  4960:       XEiJ.regPC = z + 2;
  4961:       z = XEiJ.busRbs (z + 1);  //pcbs
  4962:     }
  4963:     if (ea < XEiJ.EA_AR) {  //EORI.B #<data>,Dr
  4964:       XEiJ.mpuCycleCount += 8;
  4965:       z = XEiJ.regRn[ea] ^= 255 & z;  //0拡張してからEOR
  4966:       XEiJ.regCCR = XEiJ.regCCR & XEiJ.REG_CCR_X | XEiJ.MPU_TSTB_TABLE[255 & z];  //ccr_tst_byte
  4967:     } else if (ea == XEiJ.EA_IM) {  //EORI.B #<data>,CCR
  4968:       XEiJ.mpuCycleCount += 20;
  4969:       XEiJ.regCCR ^= XEiJ.REG_CCR_MASK & z;
  4970:     } else {  //EORI.B #<data>,<mem>
  4971:       XEiJ.mpuCycleCount += 12;
  4972:       int a = efaMltByte (ea);
  4973:       XEiJ.busWb (a, z ^= XEiJ.busRbs (a));
  4974:       XEiJ.regCCR = XEiJ.regCCR & XEiJ.REG_CCR_X | XEiJ.MPU_TSTB_TABLE[255 & z];  //ccr_tst_byte
  4975:     }
  4976:     if (Profiling.PFF_ON) {
  4977:       Profiling.pffTotal[Profiling.PRF.irpEoriByte.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpEoriByte.ordinal ()];
  4978:       Profiling.pffCount[Profiling.PRF.irpEoriByte.ordinal ()]++;
  4979:     }
  4980:   }  //irpEoriByte
  4981: 
  4982:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  4983:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  4984:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  4985:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  4986:   //EORI.W #<data>,<ea>                             |-|012346|-|-UUUU|-**00|D M+-WXZ  |0000_101_001_mmm_rrr-{data}
  4987:   //EOR.W #<data>,<ea>                              |A|012346|-|-UUUU|-**00|D M+-WXZ  |0000_101_001_mmm_rrr-{data}  [EORI.W #<data>,<ea>]
  4988:   //EORI.W #<data>,SR                               |-|012346|P|*****|*****|          |0000_101_001_111_100-{data}
  4989:   public static void irpEoriWord () throws M68kException {
  4990:     if (Profiling.PFF_ON) {
  4991:       Profiling.pffStart[Profiling.PRF.irpEoriWord.ordinal ()] = System.nanoTime ();
  4992:     }
  4993:     int ea = XEiJ.regOC & 63;
  4994:     if (ea < XEiJ.EA_AR) {  //EORI.W #<data>,Dr
  4995:       int z;
  4996:       if (XEiJ.MPU_COMPOUND_POSTINCREMENT) {
  4997:         z = XEiJ.busRwse ((XEiJ.regPC += 2) - 2);  //pcws
  4998:       } else {
  4999:         z = XEiJ.regPC;
  5000:         XEiJ.regPC = z + 2;
  5001:         z = XEiJ.busRwse (z);  //pcws
  5002:       }
  5003:       XEiJ.mpuCycleCount += 8;
  5004:       z = XEiJ.regRn[ea] ^= (char) z;  //0拡張してからEOR
  5005:       XEiJ.regCCR = XEiJ.regCCR & XEiJ.REG_CCR_X | (char) z - 1 >> 31 & XEiJ.REG_CCR_Z | ((short) z < 0 ? XEiJ.REG_CCR_N : 0);  //ccr_tst_word
  5006:     } else if (ea == XEiJ.EA_IM) {  //EORI.W #<data>,SR
  5007:       if (XEiJ.regSRS == 0) {  //ユーザモードのとき
  5008:         M68kException.m6eNumber = M68kException.M6E_PRIVILEGE_VIOLATION;
  5009:         throw M68kException.m6eSignal;
  5010:       }
  5011:       //以下はスーパーバイザモード
  5012:       XEiJ.mpuCycleCount += 20;
  5013:       if (XEiJ.MPU_COMPOUND_POSTINCREMENT) {
  5014:         irpSetSR ((XEiJ.regSRT1 | XEiJ.regSRS | XEiJ.regSRI | XEiJ.regCCR) ^ XEiJ.busRwse ((XEiJ.regPC += 2) - 2));  //pcws。特権違反チェックが先
  5015:       } else {
  5016:         int t = XEiJ.regPC;
  5017:         XEiJ.regPC = t + 2;
  5018:         irpSetSR ((XEiJ.regSRT1 | XEiJ.regSRS | XEiJ.regSRI | XEiJ.regCCR) ^ XEiJ.busRwse (t));  //pcws。特権違反チェックが先
  5019:       }
  5020:     } else {  //EORI.W #<data>,<mem>
  5021:       int z;
  5022:       if (XEiJ.MPU_COMPOUND_POSTINCREMENT) {
  5023:         z = XEiJ.busRwse ((XEiJ.regPC += 2) - 2);  //pcws
  5024:       } else {
  5025:         z = XEiJ.regPC;
  5026:         XEiJ.regPC = z + 2;
  5027:         z = XEiJ.busRwse (z);  //pcws
  5028:       }
  5029:       XEiJ.mpuCycleCount += 12;
  5030:       int a = efaMltWord (ea);
  5031:       XEiJ.busWw (a, z ^= XEiJ.busRws (a));
  5032:       XEiJ.regCCR = XEiJ.regCCR & XEiJ.REG_CCR_X | (char) z - 1 >> 31 & XEiJ.REG_CCR_Z | ((short) z < 0 ? XEiJ.REG_CCR_N : 0);  //ccr_tst_word
  5033:     }
  5034:     if (Profiling.PFF_ON) {
  5035:       Profiling.pffTotal[Profiling.PRF.irpEoriWord.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpEoriWord.ordinal ()];
  5036:       Profiling.pffCount[Profiling.PRF.irpEoriWord.ordinal ()]++;
  5037:     }
  5038:   }  //irpEoriWord
  5039: 
  5040:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5041:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  5042:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  5043:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5044:   //EORI.L #<data>,<ea>                             |-|012346|-|-UUUU|-**00|D M+-WXZ  |0000_101_010_mmm_rrr-{data}
  5045:   //EOR.L #<data>,<ea>                              |A|012346|-|-UUUU|-**00|D M+-WXZ  |0000_101_010_mmm_rrr-{data}  [EORI.L #<data>,<ea>]
  5046:   public static void irpEoriLong () throws M68kException {
  5047:     if (Profiling.PFF_ON) {
  5048:       Profiling.pffStart[Profiling.PRF.irpEoriLong.ordinal ()] = System.nanoTime ();
  5049:     }
  5050:     int ea = XEiJ.regOC & 63;
  5051:     int y;
  5052:     if (XEiJ.MPU_COMPOUND_POSTINCREMENT) {
  5053:       y = XEiJ.busRlse ((XEiJ.regPC += 4) - 4);  //pcls
  5054:     } else {
  5055:       y = XEiJ.regPC;
  5056:       XEiJ.regPC = y + 4;
  5057:       y = XEiJ.busRlse (y);  //pcls
  5058:     }
  5059:     int z;
  5060:     if (ea < XEiJ.EA_AR) {  //EORI.L #<data>,Dr
  5061:       XEiJ.mpuCycleCount += 16;
  5062:       z = XEiJ.regRn[ea] ^= y;
  5063:     } else {  //EORI.L #<data>,<mem>
  5064:       XEiJ.mpuCycleCount += 20;
  5065:       int a = efaMltLong (ea);
  5066:       XEiJ.busWl (a, z = XEiJ.busRls (a) ^ y);
  5067:     }
  5068:     XEiJ.regCCR = z >> 28 & XEiJ.REG_CCR_N | (z == 0 ? XEiJ.regCCR & XEiJ.REG_CCR_X | XEiJ.REG_CCR_Z : XEiJ.regCCR & XEiJ.REG_CCR_X);  //ccr_tst
  5069:     if (Profiling.PFF_ON) {
  5070:       Profiling.pffTotal[Profiling.PRF.irpEoriLong.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpEoriLong.ordinal ()];
  5071:       Profiling.pffCount[Profiling.PRF.irpEoriLong.ordinal ()]++;
  5072:     }
  5073:   }  //irpEoriLong
  5074: 
  5075:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5076:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  5077:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  5078:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5079:   //CMPI.B #<data>,<ea>                             |-|01----|-|-UUUU|-****|D M+-WXZ  |0000_110_000_mmm_rrr-{data}
  5080:   //CMP.B #<data>,<ea>                              |A|01----|-|-UUUU|-****|  M+-WXZ  |0000_110_000_mmm_rrr-{data}  [CMPI.B #<data>,<ea>]
  5081:   public static void irpCmpiByte () throws M68kException {
  5082:     if (Profiling.PFF_ON) {
  5083:       Profiling.pffStart[Profiling.PRF.irpCmpiByte.ordinal ()] = System.nanoTime ();
  5084:     }
  5085:     XEiJ.mpuCycleCount += 8;
  5086:     int ea = XEiJ.regOC & 63;
  5087:     int x;
  5088:     int y;
  5089:     if (XEiJ.MPU_COMPOUND_POSTINCREMENT) {
  5090:       y = XEiJ.busRbs ((XEiJ.regPC += 2) - 1);  //pcbs
  5091:     } else {
  5092:       y = XEiJ.regPC;
  5093:       XEiJ.regPC = y + 2;
  5094:       y = XEiJ.busRbs (y + 1);  //pcbs
  5095:     }
  5096:     int z = (byte) ((x = ea < XEiJ.EA_AR ? (byte) XEiJ.regRn[ea] : XEiJ.busRbs (efaMltByte (ea))) - y);  //アドレッシングモードに注意
  5097:     XEiJ.regCCR = (z >> 28 & XEiJ.REG_CCR_N | (z == 0 ? XEiJ.regCCR & XEiJ.REG_CCR_X | XEiJ.REG_CCR_Z : XEiJ.regCCR & XEiJ.REG_CCR_X) |
  5098:            ((x ^ y) & (x ^ z)) >>> 31 << 1 |
  5099:            (x & (y ^ z) ^ (y | z)) >>> 31);  //ccr_cmp
  5100:     if (Profiling.PFF_ON) {
  5101:       Profiling.pffTotal[Profiling.PRF.irpCmpiByte.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpCmpiByte.ordinal ()];
  5102:       Profiling.pffCount[Profiling.PRF.irpCmpiByte.ordinal ()]++;
  5103:     }
  5104:   }  //irpCmpiByte
  5105: 
  5106:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5107:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  5108:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  5109:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5110:   //CMPI.W #<data>,<ea>                             |-|01----|-|-UUUU|-****|D M+-WXZ  |0000_110_001_mmm_rrr-{data}
  5111:   //CMP.W #<data>,<ea>                              |A|01----|-|-UUUU|-****|  M+-WXZ  |0000_110_001_mmm_rrr-{data}  [CMPI.W #<data>,<ea>]
  5112:   public static void irpCmpiWord () throws M68kException {
  5113:     if (Profiling.PFF_ON) {
  5114:       Profiling.pffStart[Profiling.PRF.irpCmpiWord.ordinal ()] = System.nanoTime ();
  5115:     }
  5116:     XEiJ.mpuCycleCount += 8;
  5117:     int ea = XEiJ.regOC & 63;
  5118:     int x;
  5119:     int y;
  5120:     if (XEiJ.MPU_COMPOUND_POSTINCREMENT) {
  5121:       y = XEiJ.busRwse ((XEiJ.regPC += 2) - 2);  //pcws
  5122:     } else {
  5123:       y = XEiJ.regPC;
  5124:       XEiJ.regPC = y + 2;
  5125:       y = XEiJ.busRwse (y);  //pcws
  5126:     }
  5127:     int z = (short) ((x = ea < XEiJ.EA_AR ? (short) XEiJ.regRn[ea] : XEiJ.busRws (efaMltWord (ea))) - y);  //アドレッシングモードに注意
  5128:     XEiJ.regCCR = (z >> 28 & XEiJ.REG_CCR_N | (z == 0 ? XEiJ.regCCR & XEiJ.REG_CCR_X | XEiJ.REG_CCR_Z : XEiJ.regCCR & XEiJ.REG_CCR_X) |
  5129:            ((x ^ y) & (x ^ z)) >>> 31 << 1 |
  5130:            (x & (y ^ z) ^ (y | z)) >>> 31);  //ccr_cmp
  5131:     if (Profiling.PFF_ON) {
  5132:       Profiling.pffTotal[Profiling.PRF.irpCmpiWord.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpCmpiWord.ordinal ()];
  5133:       Profiling.pffCount[Profiling.PRF.irpCmpiWord.ordinal ()]++;
  5134:     }
  5135:   }  //irpCmpiWord
  5136: 
  5137:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5138:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  5139:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  5140:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5141:   //CMPI.L #<data>,<ea>                             |-|01----|-|-UUUU|-****|D M+-WXZ  |0000_110_010_mmm_rrr-{data}
  5142:   //CMP.L #<data>,<ea>                              |A|01----|-|-UUUU|-****|  M+-WXZ  |0000_110_010_mmm_rrr-{data}  [CMPI.L #<data>,<ea>]
  5143:   public static void irpCmpiLong () throws M68kException {
  5144:     if (Profiling.PFF_ON) {
  5145:       Profiling.pffStart[Profiling.PRF.irpCmpiLong.ordinal ()] = System.nanoTime ();
  5146:     }
  5147:     int ea = XEiJ.regOC & 63;
  5148:     int x;
  5149:     int y;
  5150:     if (XEiJ.MPU_COMPOUND_POSTINCREMENT) {
  5151:       y = XEiJ.busRlse ((XEiJ.regPC += 4) - 4);  //pcls
  5152:     } else {
  5153:       y = XEiJ.regPC;
  5154:       XEiJ.regPC = y + 4;
  5155:       y = XEiJ.busRlse (y);  //pcls
  5156:     }
  5157:     int z;
  5158:     if (ea < XEiJ.EA_AR) {  //CMPI.L #<data>,Dr
  5159:       XEiJ.mpuCycleCount += 14;
  5160:       z = (x = XEiJ.regRn[ea]) - y;
  5161:     } else {  //CMPI.L #<data>,<mem>
  5162:       XEiJ.mpuCycleCount += 12;
  5163:       z = (x = XEiJ.busRls (efaMltLong (ea))) - y;  //アドレッシングモードに注意
  5164:     }
  5165:     XEiJ.regCCR = (z >> 28 & XEiJ.REG_CCR_N | (z == 0 ? XEiJ.regCCR & XEiJ.REG_CCR_X | XEiJ.REG_CCR_Z : XEiJ.regCCR & XEiJ.REG_CCR_X) |
  5166:            ((x ^ y) & (x ^ z)) >>> 31 << 1 |
  5167:            (x & (y ^ z) ^ (y | z)) >>> 31);  //ccr_cmp
  5168:     if (Profiling.PFF_ON) {
  5169:       Profiling.pffTotal[Profiling.PRF.irpCmpiLong.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpCmpiLong.ordinal ()];
  5170:       Profiling.pffCount[Profiling.PRF.irpCmpiLong.ordinal ()]++;
  5171:     }
  5172:   }  //irpCmpiLong
  5173: 
  5174:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5175:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  5176:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  5177:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5178:   //MOVE.B <ea>,Dq                                  |-|012346|-|-UUUU|-**00|D M+-WXZPI|0001_qqq_000_mmm_rrr
  5179:   public static void irpMoveToDRByte () throws M68kException {
  5180:     if (Profiling.PFF_ON) {
  5181:       Profiling.pffStart[Profiling.PRF.irpMoveToDRByte.ordinal ()] = System.nanoTime ();
  5182:     }
  5183:     XEiJ.mpuCycleCount += 4;
  5184:     int ea = XEiJ.regOC & 63;
  5185:     int qqq = XEiJ.regOC >> 9 & 7;
  5186:     int z = ea < XEiJ.EA_AR ? XEiJ.regRn[ea] : XEiJ.busRbs (efaAnyByte (ea));
  5187:     XEiJ.regRn[qqq] = ~255 & XEiJ.regRn[qqq] | 255 & z;
  5188:     XEiJ.regCCR = XEiJ.regCCR & XEiJ.REG_CCR_X | XEiJ.MPU_TSTB_TABLE[255 & z];  //ccr_tst_byte
  5189:     if (Profiling.PFF_ON) {
  5190:       Profiling.pffTotal[Profiling.PRF.irpMoveToDRByte.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpMoveToDRByte.ordinal ()];
  5191:       Profiling.pffCount[Profiling.PRF.irpMoveToDRByte.ordinal ()]++;
  5192:     }
  5193:   }  //irpMoveToDRByte
  5194: 
  5195:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5196:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  5197:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  5198:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5199:   //MOVE.B <ea>,(Aq)                                |-|012346|-|-UUUU|-**00|D M+-WXZPI|0001_qqq_010_mmm_rrr
  5200:   public static void irpMoveToMMByte () throws M68kException {
  5201:     if (Profiling.PFF_ON) {
  5202:       Profiling.pffStart[Profiling.PRF.irpMoveToMMByte.ordinal ()] = System.nanoTime ();
  5203:     }
  5204:     XEiJ.mpuCycleCount += 8;
  5205:     int ea = XEiJ.regOC & 63;
  5206:     int z = ea < XEiJ.EA_AR ? XEiJ.regRn[ea] : XEiJ.busRbs (efaAnyByte (ea));  //ここでAqが変化する可能性があることに注意
  5207:     XEiJ.busWb (XEiJ.regRn[XEiJ.regOC >> 9], z);  //1qqq=aqq
  5208:     XEiJ.regCCR = XEiJ.regCCR & XEiJ.REG_CCR_X | XEiJ.MPU_TSTB_TABLE[255 & z];  //ccr_tst_byte
  5209:     if (Profiling.PFF_ON) {
  5210:       Profiling.pffTotal[Profiling.PRF.irpMoveToMMByte.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpMoveToMMByte.ordinal ()];
  5211:       Profiling.pffCount[Profiling.PRF.irpMoveToMMByte.ordinal ()]++;
  5212:     }
  5213:   }  //irpMoveToMMByte
  5214: 
  5215:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5216:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  5217:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  5218:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5219:   //MOVE.B <ea>,(Aq)+                               |-|012346|-|-UUUU|-**00|D M+-WXZPI|0001_qqq_011_mmm_rrr
  5220:   public static void irpMoveToMPByte () throws M68kException {
  5221:     if (Profiling.PFF_ON) {
  5222:       Profiling.pffStart[Profiling.PRF.irpMoveToMPByte.ordinal ()] = System.nanoTime ();
  5223:     }
  5224:     XEiJ.mpuCycleCount += 8;
  5225:     int ea = XEiJ.regOC & 63;
  5226:     int aqq = XEiJ.regOC >> 9;  //1qqq=aqq
  5227:     int z = ea < XEiJ.EA_AR ? XEiJ.regRn[ea] : XEiJ.busRbs (efaAnyByte (ea));  //ここでAqが変化する可能性があることに注意
  5228:     XEiJ.busWb (aqq < 15 ? XEiJ.regRn[aqq]++ : (XEiJ.regRn[15] += 2) - 2, z);
  5229:     XEiJ.regCCR = XEiJ.regCCR & XEiJ.REG_CCR_X | XEiJ.MPU_TSTB_TABLE[255 & z];  //ccr_tst_byte
  5230:     if (Profiling.PFF_ON) {
  5231:       Profiling.pffTotal[Profiling.PRF.irpMoveToMPByte.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpMoveToMPByte.ordinal ()];
  5232:       Profiling.pffCount[Profiling.PRF.irpMoveToMPByte.ordinal ()]++;
  5233:     }
  5234:   }  //irpMoveToMPByte
  5235: 
  5236:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5237:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  5238:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  5239:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5240:   //MOVE.B <ea>,-(Aq)                               |-|012346|-|-UUUU|-**00|D M+-WXZPI|0001_qqq_100_mmm_rrr
  5241:   public static void irpMoveToMNByte () throws M68kException {
  5242:     if (Profiling.PFF_ON) {
  5243:       Profiling.pffStart[Profiling.PRF.irpMoveToMNByte.ordinal ()] = System.nanoTime ();
  5244:     }
  5245:     XEiJ.mpuCycleCount += 8;
  5246:     int ea = XEiJ.regOC & 63;
  5247:     int aqq = XEiJ.regOC >> 9;  //1qqq=aqq
  5248:     int z = ea < XEiJ.EA_AR ? XEiJ.regRn[ea] : XEiJ.busRbs (efaAnyByte (ea));  //ここでAqが変化する可能性があることに注意
  5249:     XEiJ.busWb (aqq < 15 ? --XEiJ.regRn[aqq] : (XEiJ.regRn[15] -= 2), z);
  5250:     XEiJ.regCCR = XEiJ.regCCR & XEiJ.REG_CCR_X | XEiJ.MPU_TSTB_TABLE[255 & z];  //ccr_tst_byte
  5251:     if (Profiling.PFF_ON) {
  5252:       Profiling.pffTotal[Profiling.PRF.irpMoveToMNByte.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpMoveToMNByte.ordinal ()];
  5253:       Profiling.pffCount[Profiling.PRF.irpMoveToMNByte.ordinal ()]++;
  5254:     }
  5255:   }  //irpMoveToMNByte
  5256: 
  5257:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5258:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  5259:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  5260:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5261:   //MOVE.B <ea>,(d16,Aq)                            |-|012346|-|-UUUU|-**00|D M+-WXZPI|0001_qqq_101_mmm_rrr
  5262:   public static void irpMoveToMWByte () throws M68kException {
  5263:     if (Profiling.PFF_ON) {
  5264:       Profiling.pffStart[Profiling.PRF.irpMoveToMWByte.ordinal ()] = System.nanoTime ();
  5265:     }
  5266:     XEiJ.mpuCycleCount += 12;
  5267:     int ea = XEiJ.regOC & 63;
  5268:     int aqq = XEiJ.regOC >> 9;  //1qqq=aqq
  5269:     int z = ea < XEiJ.EA_AR ? XEiJ.regRn[ea] : XEiJ.busRbs (efaAnyByte (ea));  //ここでAqが変化する可能性があることに注意
  5270:     if (XEiJ.MPU_COMPOUND_POSTINCREMENT) {
  5271:       XEiJ.busWb (XEiJ.regRn[aqq]  //ベースレジスタ
  5272:           + XEiJ.busRwse ((XEiJ.regPC += 2) - 2),  //pcws。ワードディスプレースメント
  5273:           z);
  5274:     } else {
  5275:       int t = XEiJ.regPC;
  5276:       XEiJ.regPC = t + 2;
  5277:       XEiJ.busWb (XEiJ.regRn[aqq]  //ベースレジスタ
  5278:           + XEiJ.busRwse (t),  //pcws。ワードディスプレースメント
  5279:           z);
  5280:     }
  5281:     XEiJ.regCCR = XEiJ.regCCR & XEiJ.REG_CCR_X | XEiJ.MPU_TSTB_TABLE[255 & z];  //ccr_tst_byte
  5282:     if (Profiling.PFF_ON) {
  5283:       Profiling.pffTotal[Profiling.PRF.irpMoveToMWByte.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpMoveToMWByte.ordinal ()];
  5284:       Profiling.pffCount[Profiling.PRF.irpMoveToMWByte.ordinal ()]++;
  5285:     }
  5286:   }  //irpMoveToMWByte
  5287: 
  5288:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5289:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  5290:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  5291:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5292:   //MOVE.B <ea>,(d8,Aq,Rn.wl)                       |-|012346|-|-UUUU|-**00|D M+-WXZPI|0001_qqq_110_mmm_rrr
  5293:   public static void irpMoveToMXByte () throws M68kException {
  5294:     if (Profiling.PFF_ON) {
  5295:       Profiling.pffStart[Profiling.PRF.irpMoveToMXByte.ordinal ()] = System.nanoTime ();
  5296:     }
  5297:     XEiJ.mpuCycleCount += 14;
  5298:     int ea = XEiJ.regOC & 63;
  5299:     int aqq = XEiJ.regOC >> 9;  //1qqq=aqq
  5300:     int z = ea < XEiJ.EA_AR ? XEiJ.regRn[ea] : XEiJ.busRbs (efaAnyByte (ea));  //ここでAqが変化する可能性があることに注意
  5301:     int w;
  5302:     if (XEiJ.MPU_COMPOUND_POSTINCREMENT) {
  5303:       w = XEiJ.busRwze ((XEiJ.regPC += 2) - 2);  //pcwz。拡張ワード
  5304:     } else {
  5305:       w = XEiJ.regPC;
  5306:       XEiJ.regPC = w + 2;
  5307:       w = XEiJ.busRwze (w);  //pcwz。拡張ワード
  5308:     }
  5309:     XEiJ.busWb (XEiJ.regRn[aqq]  //ベースレジスタ
  5310:         + (byte) w  //バイトディスプレースメント
  5311:         + (w << 31 - 11 >= 0 ? (short) XEiJ.regRn[w >> 12] :  //ワードインデックス
  5312:            XEiJ.regRn[w >> 12]),  //ロングインデックス
  5313:         z);
  5314:     XEiJ.regCCR = XEiJ.regCCR & XEiJ.REG_CCR_X | XEiJ.MPU_TSTB_TABLE[255 & z];  //ccr_tst_byte
  5315:     if (Profiling.PFF_ON) {
  5316:       Profiling.pffTotal[Profiling.PRF.irpMoveToMXByte.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpMoveToMXByte.ordinal ()];
  5317:       Profiling.pffCount[Profiling.PRF.irpMoveToMXByte.ordinal ()]++;
  5318:     }
  5319:   }  //irpMoveToMXByte
  5320: 
  5321:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5322:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  5323:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  5324:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5325:   //MOVE.B <ea>,(xxx).W                             |-|012346|-|-UUUU|-**00|D M+-WXZPI|0001_000_111_mmm_rrr
  5326:   public static void irpMoveToZWByte () throws M68kException {
  5327:     if (Profiling.PFF_ON) {
  5328:       Profiling.pffStart[Profiling.PRF.irpMoveToZWByte.ordinal ()] = System.nanoTime ();
  5329:     }
  5330:     XEiJ.mpuCycleCount += 12;
  5331:     int ea = XEiJ.regOC & 63;
  5332:     int z = ea < XEiJ.EA_AR ? XEiJ.regRn[ea] : XEiJ.busRbs (efaAnyByte (ea));
  5333:     if (XEiJ.MPU_COMPOUND_POSTINCREMENT) {
  5334:       XEiJ.busWb (XEiJ.busRwse ((XEiJ.regPC += 2) - 2),  //pcws
  5335:           z);
  5336:     } else {
  5337:       int t = XEiJ.regPC;
  5338:       XEiJ.regPC = t + 2;
  5339:       XEiJ.busWb (XEiJ.busRwse (t),  //pcws
  5340:           z);
  5341:     }
  5342:     XEiJ.regCCR = XEiJ.regCCR & XEiJ.REG_CCR_X | XEiJ.MPU_TSTB_TABLE[255 & z];  //ccr_tst_byte
  5343:     if (Profiling.PFF_ON) {
  5344:       Profiling.pffTotal[Profiling.PRF.irpMoveToZWByte.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpMoveToZWByte.ordinal ()];
  5345:       Profiling.pffCount[Profiling.PRF.irpMoveToZWByte.ordinal ()]++;
  5346:     }
  5347:   }  //irpMoveToZWByte
  5348: 
  5349:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5350:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  5351:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  5352:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5353:   //MOVE.B <ea>,(xxx).L                             |-|012346|-|-UUUU|-**00|D M+-WXZPI|0001_001_111_mmm_rrr
  5354:   public static void irpMoveToZLByte () throws M68kException {
  5355:     if (Profiling.PFF_ON) {
  5356:       Profiling.pffStart[Profiling.PRF.irpMoveToZLByte.ordinal ()] = System.nanoTime ();
  5357:     }
  5358:     XEiJ.mpuCycleCount += 16;
  5359:     int ea = XEiJ.regOC & 63;
  5360:     int z = ea < XEiJ.EA_AR ? XEiJ.regRn[ea] : XEiJ.busRbs (efaAnyByte (ea));
  5361:     if (XEiJ.MPU_COMPOUND_POSTINCREMENT) {
  5362:       XEiJ.busWb (XEiJ.busRlse ((XEiJ.regPC += 4) - 4),  //pcls
  5363:           z);
  5364:     } else {
  5365:       int t = XEiJ.regPC;
  5366:       XEiJ.regPC = t + 4;
  5367:       XEiJ.busWb (XEiJ.busRlse (t),  //pcls
  5368:           z);
  5369:     }
  5370:     XEiJ.regCCR = XEiJ.regCCR & XEiJ.REG_CCR_X | XEiJ.MPU_TSTB_TABLE[255 & z];  //ccr_tst_byte
  5371:     if (Profiling.PFF_ON) {
  5372:       Profiling.pffTotal[Profiling.PRF.irpMoveToZLByte.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpMoveToZLByte.ordinal ()];
  5373:       Profiling.pffCount[Profiling.PRF.irpMoveToZLByte.ordinal ()]++;
  5374:     }
  5375:   }  //irpMoveToZLByte
  5376: 
  5377:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5378:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  5379:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  5380:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5381:   //MOVE.L <ea>,Dq                                  |-|012346|-|-UUUU|-**00|DAM+-WXZPI|0010_qqq_000_mmm_rrr
  5382:   public static void irpMoveToDRLong () throws M68kException {
  5383:     if (Profiling.PFF_ON) {
  5384:       Profiling.pffStart[Profiling.PRF.irpMoveToDRLong.ordinal ()] = System.nanoTime ();
  5385:     }
  5386:     XEiJ.mpuCycleCount += 4;
  5387:     int ea = XEiJ.regOC & 63;
  5388:     int z;
  5389:     XEiJ.regRn[XEiJ.regOC >> 9 & 7] = z = ea < XEiJ.EA_MM ? XEiJ.regRn[ea] : XEiJ.busRls (efaAnyLong (ea));  //このr[ea]はデータレジスタまたはアドレスレジスタ
  5390:     XEiJ.regCCR = z >> 28 & XEiJ.REG_CCR_N | (z == 0 ? XEiJ.regCCR & XEiJ.REG_CCR_X | XEiJ.REG_CCR_Z : XEiJ.regCCR & XEiJ.REG_CCR_X);  //ccr_tst
  5391:     if (Profiling.PFF_ON) {
  5392:       Profiling.pffTotal[Profiling.PRF.irpMoveToDRLong.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpMoveToDRLong.ordinal ()];
  5393:       Profiling.pffCount[Profiling.PRF.irpMoveToDRLong.ordinal ()]++;
  5394:     }
  5395:   }  //irpMoveToDRLong
  5396: 
  5397:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5398:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  5399:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  5400:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5401:   //MOVEA.L <ea>,Aq                                 |-|012346|-|-----|-----|DAM+-WXZPI|0010_qqq_001_mmm_rrr
  5402:   //MOVE.L <ea>,Aq                                  |A|012346|-|-----|-----|DAM+-WXZPI|0010_qqq_001_mmm_rrr [MOVEA.L <ea>,Aq]
  5403:   public static void irpMoveaLong () throws M68kException {
  5404:     if (Profiling.PFF_ON) {
  5405:       Profiling.pffStart[Profiling.PRF.irpMoveaLong.ordinal ()] = System.nanoTime ();
  5406:     }
  5407:     XEiJ.mpuCycleCount += 4;
  5408:     int ea = XEiJ.regOC & 63;
  5409:     XEiJ.regRn[(XEiJ.regOC >> 9) - (16 - 8)] = ea < XEiJ.EA_MM ? XEiJ.regRn[ea] : XEiJ.busRls (efaAnyLong (ea));  //このr[ea]はデータレジスタまたはアドレスレジスタ。右辺でAqが変化する可能性があることに注意
  5410:     if (Profiling.PFF_ON) {
  5411:       Profiling.pffTotal[Profiling.PRF.irpMoveaLong.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpMoveaLong.ordinal ()];
  5412:       Profiling.pffCount[Profiling.PRF.irpMoveaLong.ordinal ()]++;
  5413:     }
  5414:   }  //irpMoveaLong
  5415: 
  5416:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5417:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  5418:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  5419:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5420:   //MOVE.L <ea>,(Aq)                                |-|012346|-|-UUUU|-**00|DAM+-WXZPI|0010_qqq_010_mmm_rrr
  5421:   public static void irpMoveToMMLong () throws M68kException {
  5422:     if (Profiling.PFF_ON) {
  5423:       Profiling.pffStart[Profiling.PRF.irpMoveToMMLong.ordinal ()] = System.nanoTime ();
  5424:     }
  5425:     XEiJ.mpuCycleCount += 12;
  5426:     int ea = XEiJ.regOC & 63;
  5427:     int z = ea < XEiJ.EA_MM ? XEiJ.regRn[ea] : XEiJ.busRls (efaAnyLong (ea));  //このr[ea]はデータレジスタまたはアドレスレジスタ。ここでAqが変化する可能性があることに注意
  5428:     XEiJ.busWl (XEiJ.regRn[(XEiJ.regOC >> 9) - (16 - 8)], z);
  5429:     XEiJ.regCCR = z >> 28 & XEiJ.REG_CCR_N | (z == 0 ? XEiJ.regCCR & XEiJ.REG_CCR_X | XEiJ.REG_CCR_Z : XEiJ.regCCR & XEiJ.REG_CCR_X);  //ccr_tst
  5430:     if (Profiling.PFF_ON) {
  5431:       Profiling.pffTotal[Profiling.PRF.irpMoveToMMLong.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpMoveToMMLong.ordinal ()];
  5432:       Profiling.pffCount[Profiling.PRF.irpMoveToMMLong.ordinal ()]++;
  5433:     }
  5434:   }  //irpMoveToMMLong
  5435: 
  5436:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5437:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  5438:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  5439:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5440:   //MOVE.L <ea>,(Aq)+                               |-|012346|-|-UUUU|-**00|DAM+-WXZPI|0010_qqq_011_mmm_rrr
  5441:   public static void irpMoveToMPLong () throws M68kException {
  5442:     if (Profiling.PFF_ON) {
  5443:       Profiling.pffStart[Profiling.PRF.irpMoveToMPLong.ordinal ()] = System.nanoTime ();
  5444:     }
  5445:     XEiJ.mpuCycleCount += 12;
  5446:     int ea = XEiJ.regOC & 63;
  5447:     int z = ea < XEiJ.EA_MM ? XEiJ.regRn[ea] : XEiJ.busRls (efaAnyLong (ea));  //このr[ea]はデータレジスタまたはアドレスレジスタ。ここでAqが変化する可能性があることに注意
  5448:     XEiJ.busWl ((XEiJ.regRn[(XEiJ.regOC >> 9) - (16 - 8)] += 4) - 4, z);
  5449:     XEiJ.regCCR = z >> 28 & XEiJ.REG_CCR_N | (z == 0 ? XEiJ.regCCR & XEiJ.REG_CCR_X | XEiJ.REG_CCR_Z : XEiJ.regCCR & XEiJ.REG_CCR_X);  //ccr_tst
  5450:     if (Profiling.PFF_ON) {
  5451:       Profiling.pffTotal[Profiling.PRF.irpMoveToMPLong.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpMoveToMPLong.ordinal ()];
  5452:       Profiling.pffCount[Profiling.PRF.irpMoveToMPLong.ordinal ()]++;
  5453:     }
  5454:   }  //irpMoveToMPLong
  5455: 
  5456:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5457:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  5458:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  5459:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5460:   //MOVE.L <ea>,-(Aq)                               |-|012346|-|-UUUU|-**00|DAM+-WXZPI|0010_qqq_100_mmm_rrr
  5461:   public static void irpMoveToMNLong () throws M68kException {
  5462:     if (Profiling.PFF_ON) {
  5463:       Profiling.pffStart[Profiling.PRF.irpMoveToMNLong.ordinal ()] = System.nanoTime ();
  5464:     }
  5465:     XEiJ.mpuCycleCount += 12;
  5466:     int ea = XEiJ.regOC & 63;
  5467:     int z = ea < XEiJ.EA_MM ? XEiJ.regRn[ea] : XEiJ.busRls (efaAnyLong (ea));  //このr[ea]はデータレジスタまたはアドレスレジスタ。ここでAqが変化する可能性があることに注意
  5468:     XEiJ.busWl ((XEiJ.regRn[(XEiJ.regOC >> 9) - (16 - 8)] -= 4), z);
  5469:     XEiJ.regCCR = z >> 28 & XEiJ.REG_CCR_N | (z == 0 ? XEiJ.regCCR & XEiJ.REG_CCR_X | XEiJ.REG_CCR_Z : XEiJ.regCCR & XEiJ.REG_CCR_X);  //ccr_tst
  5470:     if (Profiling.PFF_ON) {
  5471:       Profiling.pffTotal[Profiling.PRF.irpMoveToMNLong.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpMoveToMNLong.ordinal ()];
  5472:       Profiling.pffCount[Profiling.PRF.irpMoveToMNLong.ordinal ()]++;
  5473:     }
  5474:   }  //irpMoveToMNLong
  5475: 
  5476:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5477:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  5478:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  5479:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5480:   //MOVE.L <ea>,(d16,Aq)                            |-|012346|-|-UUUU|-**00|DAM+-WXZPI|0010_qqq_101_mmm_rrr
  5481:   public static void irpMoveToMWLong () throws M68kException {
  5482:     if (Profiling.PFF_ON) {
  5483:       Profiling.pffStart[Profiling.PRF.irpMoveToMWLong.ordinal ()] = System.nanoTime ();
  5484:     }
  5485:     XEiJ.mpuCycleCount += 16;
  5486:     int ea = XEiJ.regOC & 63;
  5487:     int z = ea < XEiJ.EA_MM ? XEiJ.regRn[ea] : XEiJ.busRls (efaAnyLong (ea));  //このr[ea]はデータレジスタまたはアドレスレジスタ。ここでAqが変化する可能性があることに注意
  5488:     if (XEiJ.MPU_COMPOUND_POSTINCREMENT) {
  5489:       XEiJ.busWl (XEiJ.regRn[(XEiJ.regOC >> 9) - (16 - 8)]  //ベースレジスタ
  5490:           + XEiJ.busRwse ((XEiJ.regPC += 2) - 2),  //pcws。ワードディスプレースメント
  5491:           z);
  5492:     } else {
  5493:       int t = XEiJ.regPC;
  5494:       XEiJ.regPC = t + 2;
  5495:       XEiJ.busWl (XEiJ.regRn[(XEiJ.regOC >> 9) - (16 - 8)]  //ベースレジスタ
  5496:           + XEiJ.busRwse (t),  //pcws。ワードディスプレースメント
  5497:           z);
  5498:     }
  5499:     XEiJ.regCCR = z >> 28 & XEiJ.REG_CCR_N | (z == 0 ? XEiJ.regCCR & XEiJ.REG_CCR_X | XEiJ.REG_CCR_Z : XEiJ.regCCR & XEiJ.REG_CCR_X);  //ccr_tst
  5500:     if (Profiling.PFF_ON) {
  5501:       Profiling.pffTotal[Profiling.PRF.irpMoveToMWLong.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpMoveToMWLong.ordinal ()];
  5502:       Profiling.pffCount[Profiling.PRF.irpMoveToMWLong.ordinal ()]++;
  5503:     }
  5504:   }  //irpMoveToMWLong
  5505: 
  5506:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5507:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  5508:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  5509:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5510:   //MOVE.L <ea>,(d8,Aq,Rn.wl)                       |-|012346|-|-UUUU|-**00|DAM+-WXZPI|0010_qqq_110_mmm_rrr
  5511:   public static void irpMoveToMXLong () throws M68kException {
  5512:     if (Profiling.PFF_ON) {
  5513:       Profiling.pffStart[Profiling.PRF.irpMoveToMXLong.ordinal ()] = System.nanoTime ();
  5514:     }
  5515:     XEiJ.mpuCycleCount += 18;
  5516:     int ea = XEiJ.regOC & 63;
  5517:     int aqq = (XEiJ.regOC >> 9) - (16 - 8);
  5518:     int z = ea < XEiJ.EA_MM ? XEiJ.regRn[ea] : XEiJ.busRls (efaAnyLong (ea));  //このr[ea]はデータレジスタまたはアドレスレジスタ。ここでAqが変化する可能性があることに注意
  5519:     int w;
  5520:     if (XEiJ.MPU_COMPOUND_POSTINCREMENT) {
  5521:       w = XEiJ.busRwze ((XEiJ.regPC += 2) - 2);  //pcwz。拡張ワード
  5522:     } else {
  5523:       w = XEiJ.regPC;
  5524:       XEiJ.regPC = w + 2;
  5525:       w = XEiJ.busRwze (w);  //pcwz。拡張ワード
  5526:     }
  5527:     XEiJ.busWl (XEiJ.regRn[aqq]  //ベースレジスタ
  5528:         + (byte) w  //バイトディスプレースメント
  5529:         + (w << 31 - 11 >= 0 ? (short) XEiJ.regRn[w >> 12] :  //ワードインデックス
  5530:            XEiJ.regRn[w >> 12]),  //ロングインデックス
  5531:         z);
  5532:     XEiJ.regCCR = z >> 28 & XEiJ.REG_CCR_N | (z == 0 ? XEiJ.regCCR & XEiJ.REG_CCR_X | XEiJ.REG_CCR_Z : XEiJ.regCCR & XEiJ.REG_CCR_X);  //ccr_tst
  5533:     if (Profiling.PFF_ON) {
  5534:       Profiling.pffTotal[Profiling.PRF.irpMoveToMXLong.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpMoveToMXLong.ordinal ()];
  5535:       Profiling.pffCount[Profiling.PRF.irpMoveToMXLong.ordinal ()]++;
  5536:     }
  5537:   }  //irpMoveToMXLong
  5538: 
  5539:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5540:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  5541:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  5542:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5543:   //MOVE.L <ea>,(xxx).W                             |-|012346|-|-UUUU|-**00|DAM+-WXZPI|0010_000_111_mmm_rrr
  5544:   public static void irpMoveToZWLong () throws M68kException {
  5545:     if (Profiling.PFF_ON) {
  5546:       Profiling.pffStart[Profiling.PRF.irpMoveToZWLong.ordinal ()] = System.nanoTime ();
  5547:     }
  5548:     XEiJ.mpuCycleCount += 16;
  5549:     int ea = XEiJ.regOC & 63;
  5550:     int z = ea < XEiJ.EA_MM ? XEiJ.regRn[ea] : XEiJ.busRls (efaAnyLong (ea));  //このr[ea]はデータレジスタまたはアドレスレジスタ
  5551:     if (XEiJ.MPU_COMPOUND_POSTINCREMENT) {
  5552:       XEiJ.busWl (XEiJ.busRwse ((XEiJ.regPC += 2) - 2),  //pcws
  5553:           z);
  5554:     } else {
  5555:       int t = XEiJ.regPC;
  5556:       XEiJ.regPC = t + 2;
  5557:       XEiJ.busWl (XEiJ.busRwse (t),  //pcws
  5558:           z);
  5559:     }
  5560:     XEiJ.regCCR = z >> 28 & XEiJ.REG_CCR_N | (z == 0 ? XEiJ.regCCR & XEiJ.REG_CCR_X | XEiJ.REG_CCR_Z : XEiJ.regCCR & XEiJ.REG_CCR_X);  //ccr_tst
  5561:     if (Profiling.PFF_ON) {
  5562:       Profiling.pffTotal[Profiling.PRF.irpMoveToZWLong.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpMoveToZWLong.ordinal ()];
  5563:       Profiling.pffCount[Profiling.PRF.irpMoveToZWLong.ordinal ()]++;
  5564:     }
  5565:   }  //irpMoveToZWLong
  5566: 
  5567:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5568:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  5569:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  5570:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5571:   //MOVE.L <ea>,(xxx).L                             |-|012346|-|-UUUU|-**00|DAM+-WXZPI|0010_001_111_mmm_rrr
  5572:   public static void irpMoveToZLLong () throws M68kException {
  5573:     if (Profiling.PFF_ON) {
  5574:       Profiling.pffStart[Profiling.PRF.irpMoveToZLLong.ordinal ()] = System.nanoTime ();
  5575:     }
  5576:     XEiJ.mpuCycleCount += 20;
  5577:     int ea = XEiJ.regOC & 63;
  5578:     int z = ea < XEiJ.EA_MM ? XEiJ.regRn[ea] : XEiJ.busRls (efaAnyLong (ea));  //このr[ea]はデータレジスタまたはアドレスレジスタ
  5579:     if (XEiJ.MPU_COMPOUND_POSTINCREMENT) {
  5580:       XEiJ.busWl (XEiJ.busRlse ((XEiJ.regPC += 4) - 4),  //pcls
  5581:           z);
  5582:     } else {
  5583:       int t = XEiJ.regPC;
  5584:       XEiJ.regPC = t + 4;
  5585:       XEiJ.busWl (XEiJ.busRlse (t),  //pcls
  5586:           z);
  5587:     }
  5588:     XEiJ.regCCR = z >> 28 & XEiJ.REG_CCR_N | (z == 0 ? XEiJ.regCCR & XEiJ.REG_CCR_X | XEiJ.REG_CCR_Z : XEiJ.regCCR & XEiJ.REG_CCR_X);  //ccr_tst
  5589:     if (Profiling.PFF_ON) {
  5590:       Profiling.pffTotal[Profiling.PRF.irpMoveToZLLong.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpMoveToZLLong.ordinal ()];
  5591:       Profiling.pffCount[Profiling.PRF.irpMoveToZLLong.ordinal ()]++;
  5592:     }
  5593:   }  //irpMoveToZLLong
  5594: 
  5595:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5596:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  5597:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  5598:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5599:   //MOVE.W <ea>,Dq                                  |-|012346|-|-UUUU|-**00|DAM+-WXZPI|0011_qqq_000_mmm_rrr
  5600:   public static void irpMoveToDRWord () throws M68kException {
  5601:     if (Profiling.PFF_ON) {
  5602:       Profiling.pffStart[Profiling.PRF.irpMoveToDRWord.ordinal ()] = System.nanoTime ();
  5603:     }
  5604:     XEiJ.mpuCycleCount += 4;
  5605:     int ea = XEiJ.regOC & 63;
  5606:     int qqq = XEiJ.regOC >> 9 & 7;
  5607:     int z = ea < XEiJ.EA_MM ? XEiJ.regRn[ea] : XEiJ.busRws (efaAnyWord (ea));  //このr[ea]はデータレジスタまたはアドレスレジスタ
  5608:     XEiJ.regRn[qqq] = ~65535 & XEiJ.regRn[qqq] | (char) z;
  5609:     XEiJ.regCCR = XEiJ.regCCR & XEiJ.REG_CCR_X | (char) z - 1 >> 31 & XEiJ.REG_CCR_Z | ((short) z < 0 ? XEiJ.REG_CCR_N : 0);  //ccr_tst_word
  5610:     if (Profiling.PFF_ON) {
  5611:       Profiling.pffTotal[Profiling.PRF.irpMoveToDRWord.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpMoveToDRWord.ordinal ()];
  5612:       Profiling.pffCount[Profiling.PRF.irpMoveToDRWord.ordinal ()]++;
  5613:     }
  5614:   }  //irpMoveToDRWord
  5615: 
  5616:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5617:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  5618:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  5619:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5620:   //MOVEA.W <ea>,Aq                                 |-|012346|-|-----|-----|DAM+-WXZPI|0011_qqq_001_mmm_rrr
  5621:   //MOVE.W <ea>,Aq                                  |A|012346|-|-----|-----|DAM+-WXZPI|0011_qqq_001_mmm_rrr [MOVEA.W <ea>,Aq]
  5622:   //
  5623:   //MOVEA.W <ea>,Aq
  5624:   //  ワードデータをロングに符号拡張してAqの全体を更新する
  5625:   public static void irpMoveaWord () throws M68kException {
  5626:     if (Profiling.PFF_ON) {
  5627:       Profiling.pffStart[Profiling.PRF.irpMoveaWord.ordinal ()] = System.nanoTime ();
  5628:     }
  5629:     XEiJ.mpuCycleCount += 4;
  5630:     int ea = XEiJ.regOC & 63;
  5631:     XEiJ.regRn[XEiJ.regOC >> 9 & 15] = ea < XEiJ.EA_MM ? (short) XEiJ.regRn[ea] : XEiJ.busRws (efaAnyWord (ea));  //符号拡張して32bit全部書き換える。このr[ea]はデータレジスタまたはアドレスレジスタ。右辺でAqが変化する可能性があることに注意
  5632:     if (Profiling.PFF_ON) {
  5633:       Profiling.pffTotal[Profiling.PRF.irpMoveaWord.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpMoveaWord.ordinal ()];
  5634:       Profiling.pffCount[Profiling.PRF.irpMoveaWord.ordinal ()]++;
  5635:     }
  5636:   }  //irpMoveaWord
  5637: 
  5638:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5639:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  5640:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  5641:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5642:   //MOVE.W <ea>,(Aq)                                |-|012346|-|-UUUU|-**00|DAM+-WXZPI|0011_qqq_010_mmm_rrr
  5643:   public static void irpMoveToMMWord () throws M68kException {
  5644:     if (Profiling.PFF_ON) {
  5645:       Profiling.pffStart[Profiling.PRF.irpMoveToMMWord.ordinal ()] = System.nanoTime ();
  5646:     }
  5647:     XEiJ.mpuCycleCount += 8;
  5648:     int ea = XEiJ.regOC & 63;
  5649:     int z = ea < XEiJ.EA_MM ? XEiJ.regRn[ea] : XEiJ.busRws (efaAnyWord (ea));  //このr[ea]はデータレジスタまたはアドレスレジスタ。ここでAqが変化する可能性があることに注意
  5650:     XEiJ.busWw (XEiJ.regRn[XEiJ.regOC >> 9 & 15], z);
  5651:     XEiJ.regCCR = XEiJ.regCCR & XEiJ.REG_CCR_X | (char) z - 1 >> 31 & XEiJ.REG_CCR_Z | ((short) z < 0 ? XEiJ.REG_CCR_N : 0);  //ccr_tst_word
  5652:     if (Profiling.PFF_ON) {
  5653:       Profiling.pffTotal[Profiling.PRF.irpMoveToMMWord.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpMoveToMMWord.ordinal ()];
  5654:       Profiling.pffCount[Profiling.PRF.irpMoveToMMWord.ordinal ()]++;
  5655:     }
  5656:   }  //irpMoveToMMWord
  5657: 
  5658:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5659:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  5660:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  5661:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5662:   //MOVE.W <ea>,(Aq)+                               |-|012346|-|-UUUU|-**00|DAM+-WXZPI|0011_qqq_011_mmm_rrr
  5663:   public static void irpMoveToMPWord () throws M68kException {
  5664:     if (Profiling.PFF_ON) {
  5665:       Profiling.pffStart[Profiling.PRF.irpMoveToMPWord.ordinal ()] = System.nanoTime ();
  5666:     }
  5667:     XEiJ.mpuCycleCount += 8;
  5668:     int ea = XEiJ.regOC & 63;
  5669:     int z = ea < XEiJ.EA_MM ? XEiJ.regRn[ea] : XEiJ.busRws (efaAnyWord (ea));  //このr[ea]はデータレジスタまたはアドレスレジスタ。ここでAqが変化する可能性があることに注意
  5670:     XEiJ.busWw ((XEiJ.regRn[XEiJ.regOC >> 9 & 15] += 2) - 2, z);
  5671:     XEiJ.regCCR = XEiJ.regCCR & XEiJ.REG_CCR_X | (char) z - 1 >> 31 & XEiJ.REG_CCR_Z | ((short) z < 0 ? XEiJ.REG_CCR_N : 0);  //ccr_tst_word
  5672:     if (Profiling.PFF_ON) {
  5673:       Profiling.pffTotal[Profiling.PRF.irpMoveToMPWord.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpMoveToMPWord.ordinal ()];
  5674:       Profiling.pffCount[Profiling.PRF.irpMoveToMPWord.ordinal ()]++;
  5675:     }
  5676:   }  //irpMoveToMPWord
  5677: 
  5678:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5679:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  5680:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  5681:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5682:   //MOVE.W <ea>,-(Aq)                               |-|012346|-|-UUUU|-**00|DAM+-WXZPI|0011_qqq_100_mmm_rrr
  5683:   public static void irpMoveToMNWord () throws M68kException {
  5684:     if (Profiling.PFF_ON) {
  5685:       Profiling.pffStart[Profiling.PRF.irpMoveToMNWord.ordinal ()] = System.nanoTime ();
  5686:     }
  5687:     XEiJ.mpuCycleCount += 8;
  5688:     int ea = XEiJ.regOC & 63;
  5689:     int z = ea < XEiJ.EA_MM ? XEiJ.regRn[ea] : XEiJ.busRws (efaAnyWord (ea));  //このr[ea]はデータレジスタまたはアドレスレジスタ。ここでAqが変化する可能性があることに注意
  5690:     XEiJ.busWw ((XEiJ.regRn[XEiJ.regOC >> 9 & 15] -= 2), z);
  5691:     XEiJ.regCCR = XEiJ.regCCR & XEiJ.REG_CCR_X | (char) z - 1 >> 31 & XEiJ.REG_CCR_Z | ((short) z < 0 ? XEiJ.REG_CCR_N : 0);  //ccr_tst_word
  5692:     if (Profiling.PFF_ON) {
  5693:       Profiling.pffTotal[Profiling.PRF.irpMoveToMNWord.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpMoveToMNWord.ordinal ()];
  5694:       Profiling.pffCount[Profiling.PRF.irpMoveToMNWord.ordinal ()]++;
  5695:     }
  5696:   }  //irpMoveToMNWord
  5697: 
  5698:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5699:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  5700:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  5701:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5702:   //MOVE.W <ea>,(d16,Aq)                            |-|012346|-|-UUUU|-**00|DAM+-WXZPI|0011_qqq_101_mmm_rrr
  5703:   public static void irpMoveToMWWord () throws M68kException {
  5704:     if (Profiling.PFF_ON) {
  5705:       Profiling.pffStart[Profiling.PRF.irpMoveToMWWord.ordinal ()] = System.nanoTime ();
  5706:     }
  5707:     XEiJ.mpuCycleCount += 12;
  5708:     int ea = XEiJ.regOC & 63;
  5709:     int aqq = XEiJ.regOC >> 9 & 15;
  5710:     int z = ea < XEiJ.EA_MM ? XEiJ.regRn[ea] : XEiJ.busRws (efaAnyWord (ea));  //このr[ea]はデータレジスタまたはアドレスレジスタ。ここでAqが変化する可能性があることに注意
  5711:     if (XEiJ.MPU_COMPOUND_POSTINCREMENT) {
  5712:       XEiJ.busWw (XEiJ.regRn[aqq]  //ベースレジスタ
  5713:           + XEiJ.busRwse ((XEiJ.regPC += 2) - 2),  //pcws。ワードディスプレースメント
  5714:           z);
  5715:     } else {
  5716:       int t = XEiJ.regPC;
  5717:       XEiJ.regPC = t + 2;
  5718:       XEiJ.busWw (XEiJ.regRn[aqq]  //ベースレジスタ
  5719:           + XEiJ.busRwse (t),  //pcws。ワードディスプレースメント
  5720:           z);
  5721:     }
  5722:     XEiJ.regCCR = XEiJ.regCCR & XEiJ.REG_CCR_X | (char) z - 1 >> 31 & XEiJ.REG_CCR_Z | ((short) z < 0 ? XEiJ.REG_CCR_N : 0);  //ccr_tst_word
  5723:     if (Profiling.PFF_ON) {
  5724:       Profiling.pffTotal[Profiling.PRF.irpMoveToMWWord.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpMoveToMWWord.ordinal ()];
  5725:       Profiling.pffCount[Profiling.PRF.irpMoveToMWWord.ordinal ()]++;
  5726:     }
  5727:   }  //irpMoveToMWWord
  5728: 
  5729:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5730:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  5731:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  5732:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5733:   //MOVE.W <ea>,(d8,Aq,Rn.wl)                       |-|012346|-|-UUUU|-**00|DAM+-WXZPI|0011_qqq_110_mmm_rrr
  5734:   public static void irpMoveToMXWord () throws M68kException {
  5735:     if (Profiling.PFF_ON) {
  5736:       Profiling.pffStart[Profiling.PRF.irpMoveToMXWord.ordinal ()] = System.nanoTime ();
  5737:     }
  5738:     XEiJ.mpuCycleCount += 14;
  5739:     int ea = XEiJ.regOC & 63;
  5740:     int aqq = XEiJ.regOC >> 9 & 15;
  5741:     int z = ea < XEiJ.EA_MM ? XEiJ.regRn[ea] : XEiJ.busRws (efaAnyWord (ea));  //このr[ea]はデータレジスタまたはアドレスレジスタ。ここでAqが変化する可能性があることに注意
  5742:     int w;
  5743:     if (XEiJ.MPU_COMPOUND_POSTINCREMENT) {
  5744:       w = XEiJ.busRwze ((XEiJ.regPC += 2) - 2);  //pcwz。拡張ワード
  5745:     } else {
  5746:       w = XEiJ.regPC;
  5747:       XEiJ.regPC = w + 2;
  5748:       w = XEiJ.busRwze (w);  //pcwz。拡張ワード
  5749:     }
  5750:     XEiJ.busWw (XEiJ.regRn[aqq]  //ベースレジスタ
  5751:         + (byte) w  //バイトディスプレースメント
  5752:         + (w << 31 - 11 >= 0 ? (short) XEiJ.regRn[w >> 12] :  //ワードインデックス
  5753:            XEiJ.regRn[w >> 12]),  //ロングインデックス
  5754:         z);
  5755:     XEiJ.regCCR = XEiJ.regCCR & XEiJ.REG_CCR_X | (char) z - 1 >> 31 & XEiJ.REG_CCR_Z | ((short) z < 0 ? XEiJ.REG_CCR_N : 0);  //ccr_tst_word
  5756:     if (Profiling.PFF_ON) {
  5757:       Profiling.pffTotal[Profiling.PRF.irpMoveToMXWord.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpMoveToMXWord.ordinal ()];
  5758:       Profiling.pffCount[Profiling.PRF.irpMoveToMXWord.ordinal ()]++;
  5759:     }
  5760:   }  //irpMoveToMXWord
  5761: 
  5762:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5763:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  5764:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  5765:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5766:   //MOVE.W <ea>,(xxx).W                             |-|012346|-|-UUUU|-**00|DAM+-WXZPI|0011_000_111_mmm_rrr
  5767:   public static void irpMoveToZWWord () throws M68kException {
  5768:     if (Profiling.PFF_ON) {
  5769:       Profiling.pffStart[Profiling.PRF.irpMoveToZWWord.ordinal ()] = System.nanoTime ();
  5770:     }
  5771:     XEiJ.mpuCycleCount += 12;
  5772:     int ea = XEiJ.regOC & 63;
  5773:     int z = ea < XEiJ.EA_MM ? XEiJ.regRn[ea] : XEiJ.busRws (efaAnyWord (ea));  //このr[ea]はデータレジスタまたはアドレスレジスタ
  5774:     if (XEiJ.MPU_COMPOUND_POSTINCREMENT) {
  5775:       XEiJ.busWw (XEiJ.busRwse ((XEiJ.regPC += 2) - 2),  //pcws
  5776:           z);
  5777:     } else {
  5778:       int t = XEiJ.regPC;
  5779:       XEiJ.regPC = t + 2;
  5780:       XEiJ.busWw (XEiJ.busRwse (t),  //pcws
  5781:           z);
  5782:     }
  5783:     XEiJ.regCCR = XEiJ.regCCR & XEiJ.REG_CCR_X | (char) z - 1 >> 31 & XEiJ.REG_CCR_Z | ((short) z < 0 ? XEiJ.REG_CCR_N : 0);  //ccr_tst_word
  5784:     if (Profiling.PFF_ON) {
  5785:       Profiling.pffTotal[Profiling.PRF.irpMoveToZWWord.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpMoveToZWWord.ordinal ()];
  5786:       Profiling.pffCount[Profiling.PRF.irpMoveToZWWord.ordinal ()]++;
  5787:     }
  5788:   }  //irpMoveToZWWord
  5789: 
  5790:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5791:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  5792:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  5793:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5794:   //MOVE.W <ea>,(xxx).L                             |-|012346|-|-UUUU|-**00|DAM+-WXZPI|0011_001_111_mmm_rrr
  5795:   public static void irpMoveToZLWord () throws M68kException {
  5796:     if (Profiling.PFF_ON) {
  5797:       Profiling.pffStart[Profiling.PRF.irpMoveToZLWord.ordinal ()] = System.nanoTime ();
  5798:     }
  5799:     XEiJ.mpuCycleCount += 16;
  5800:     int ea = XEiJ.regOC & 63;
  5801:     int z = ea < XEiJ.EA_MM ? XEiJ.regRn[ea] : XEiJ.busRws (efaAnyWord (ea));  //このr[ea]はデータレジスタまたはアドレスレジスタ
  5802:     if (XEiJ.MPU_COMPOUND_POSTINCREMENT) {
  5803:       XEiJ.busWw (XEiJ.busRlse ((XEiJ.regPC += 4) - 4),  //pcls
  5804:           z);
  5805:     } else {
  5806:       int t = XEiJ.regPC;
  5807:       XEiJ.regPC = t + 4;
  5808:       XEiJ.busWw (XEiJ.busRlse (t),  //pcls
  5809:           z);
  5810:     }
  5811:     XEiJ.regCCR = XEiJ.regCCR & XEiJ.REG_CCR_X | (char) z - 1 >> 31 & XEiJ.REG_CCR_Z | ((short) z < 0 ? XEiJ.REG_CCR_N : 0);  //ccr_tst_word
  5812:     if (Profiling.PFF_ON) {
  5813:       Profiling.pffTotal[Profiling.PRF.irpMoveToZLWord.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpMoveToZLWord.ordinal ()];
  5814:       Profiling.pffCount[Profiling.PRF.irpMoveToZLWord.ordinal ()]++;
  5815:     }
  5816:   }  //irpMoveToZLWord
  5817: 
  5818:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5819:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  5820:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  5821:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5822:   //NEGX.B <ea>                                     |-|012346|-|*UUUU|*****|D M+-WXZ  |0100_000_000_mmm_rrr
  5823:   public static void irpNegxByte () throws M68kException {
  5824:     if (Profiling.PFF_ON) {
  5825:       Profiling.pffStart[Profiling.PRF.irpNegxByte.ordinal ()] = System.nanoTime ();
  5826:     }
  5827:     int ea = XEiJ.regOC & 63;
  5828:     int y;
  5829:     int z;
  5830:     if (ea < XEiJ.EA_AR) {  //NEGX.B Dr
  5831:       XEiJ.mpuCycleCount += 4;
  5832:       z = (byte) (XEiJ.regRn[ea] = ~0xff & (y = XEiJ.regRn[ea]) | 0xff & -(y = (byte) y) - (XEiJ.regCCR >> 4));  //Xの左側はすべて0なのでCCR_X&を省略
  5833:     } else {  //NEGX.B <mem>
  5834:       XEiJ.mpuCycleCount += 8;
  5835:       int a = efaMltByte (ea);
  5836:       XEiJ.busWb (a, z = (byte) (-(y = XEiJ.busRbs (a)) - (XEiJ.regCCR >> 4)));  //Xの左側はすべて0なのでCCR_X&を省略
  5837:     }
  5838:     XEiJ.regCCR = (z >> 28 & XEiJ.REG_CCR_N | (z == 0 ? XEiJ.regCCR & XEiJ.REG_CCR_Z : 0) |
  5839:            (y & z) >>> 31 << 1 |
  5840:            (y | z) >> 31 & (XEiJ.REG_CCR_X | XEiJ.REG_CCR_C));  //ccr_negx
  5841:     if (Profiling.PFF_ON) {
  5842:       Profiling.pffTotal[Profiling.PRF.irpNegxByte.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpNegxByte.ordinal ()];
  5843:       Profiling.pffCount[Profiling.PRF.irpNegxByte.ordinal ()]++;
  5844:     }
  5845:   }  //irpNegxByte
  5846: 
  5847:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5848:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  5849:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  5850:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5851:   //NEGX.W <ea>                                     |-|012346|-|*UUUU|*****|D M+-WXZ  |0100_000_001_mmm_rrr
  5852:   public static void irpNegxWord () throws M68kException {
  5853:     if (Profiling.PFF_ON) {
  5854:       Profiling.pffStart[Profiling.PRF.irpNegxWord.ordinal ()] = System.nanoTime ();
  5855:     }
  5856:     int ea = XEiJ.regOC & 63;
  5857:     int y;
  5858:     int z;
  5859:     if (ea < XEiJ.EA_AR) {  //NEGX.W Dr
  5860:       XEiJ.mpuCycleCount += 4;
  5861:       z = (short) (XEiJ.regRn[ea] = ~0xffff & (y = XEiJ.regRn[ea]) | (char) (-(y = (short) y) - (XEiJ.regCCR >> 4)));  //Xの左側はすべて0なのでCCR_X&を省略
  5862:     } else {  //NEGX.W <mem>
  5863:       XEiJ.mpuCycleCount += 8;
  5864:       int a = efaMltWord (ea);
  5865:       XEiJ.busWw (a, z = (short) (-(y = XEiJ.busRws (a)) - (XEiJ.regCCR >> 4)));  //Xの左側はすべて0なのでCCR_X&を省略
  5866:     }
  5867:     XEiJ.regCCR = (z >> 28 & XEiJ.REG_CCR_N | (z == 0 ? XEiJ.regCCR & XEiJ.REG_CCR_Z : 0) |
  5868:            (y & z) >>> 31 << 1 |
  5869:            (y | z) >> 31 & (XEiJ.REG_CCR_X | XEiJ.REG_CCR_C));  //ccr_negx
  5870:     if (Profiling.PFF_ON) {
  5871:       Profiling.pffTotal[Profiling.PRF.irpNegxWord.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpNegxWord.ordinal ()];
  5872:       Profiling.pffCount[Profiling.PRF.irpNegxWord.ordinal ()]++;
  5873:     }
  5874:   }  //irpNegxWord
  5875: 
  5876:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5877:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  5878:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  5879:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5880:   //NEGX.L <ea>                                     |-|012346|-|*UUUU|*****|D M+-WXZ  |0100_000_010_mmm_rrr
  5881:   public static void irpNegxLong () throws M68kException {
  5882:     if (Profiling.PFF_ON) {
  5883:       Profiling.pffStart[Profiling.PRF.irpNegxLong.ordinal ()] = System.nanoTime ();
  5884:     }
  5885:     int ea = XEiJ.regOC & 63;
  5886:     int y;
  5887:     int z;
  5888:     if (ea < XEiJ.EA_AR) {  //NEGX.L Dr
  5889:       XEiJ.mpuCycleCount += 6;
  5890:       XEiJ.regRn[ea] = z = -(y = XEiJ.regRn[ea]) - (XEiJ.regCCR >> 4);  //Xの左側はすべて0なのでCCR_X&を省略
  5891:     } else {  //NEGX.L <mem>
  5892:       XEiJ.mpuCycleCount += 12;
  5893:       int a = efaMltLong (ea);
  5894:       XEiJ.busWl (a, z = -(y = XEiJ.busRls (a)) - (XEiJ.regCCR >> 4));  //Xの左側はすべて0なのでCCR_X&を省略
  5895:     }
  5896:     XEiJ.regCCR = (z >> 28 & XEiJ.REG_CCR_N | (z == 0 ? XEiJ.regCCR & XEiJ.REG_CCR_Z : 0) |
  5897:            (y & z) >>> 31 << 1 |
  5898:            (y | z) >> 31 & (XEiJ.REG_CCR_X | XEiJ.REG_CCR_C));  //ccr_negx
  5899:     if (Profiling.PFF_ON) {
  5900:       Profiling.pffTotal[Profiling.PRF.irpNegxLong.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpNegxLong.ordinal ()];
  5901:       Profiling.pffCount[Profiling.PRF.irpNegxLong.ordinal ()]++;
  5902:     }
  5903:   }  //irpNegxLong
  5904: 
  5905:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5906:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  5907:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  5908:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5909:   //MOVE.W SR,<ea>                                  |-|0-----|-|*****|-----|D M+-WXZ  |0100_000_011_mmm_rrr (68000 and 68008 read before move)
  5910:   public static void irpMoveFromSR () throws M68kException {
  5911:     if (Profiling.PFF_ON) {
  5912:       Profiling.pffStart[Profiling.PRF.irpMoveFromSR.ordinal ()] = System.nanoTime ();
  5913:     }
  5914:     //MC68000では特権命令ではない
  5915:     int ea = XEiJ.regOC & 63;
  5916:     if (ea < XEiJ.EA_AR) {  //MOVE.W SR,Dr
  5917:       XEiJ.mpuCycleCount += 6;
  5918:       XEiJ.regRn[ea] = ~0xffff & XEiJ.regRn[ea] | XEiJ.regSRT1 | XEiJ.regSRS | XEiJ.regSRI | XEiJ.regCCR;
  5919:     } else {  //MOVE.W SR,<mem>
  5920:       //! 軽量化。MC68000では書き込む前にリードが入るが省略する
  5921:       //! 軽量化。MOVE from SRによる直後の命令のイミディエイトオペランドの自己書き換えが直後に反映されてしまう
  5922:       //  MC68000でFEファンクションコールやSXコールのようなCCRを変化させる例外処理ルーチンの出口を次のように書くと、
  5923:       //  自己書き換えが直後に反映されずイミディエイトオペランドの領域がバッファになって前回の結果を返すことになるので期待通りに動作しない
  5924:       //              move.w  sr,@f+2
  5925:       //      @@:     move.b  #0,(1,sp)
  5926:       //              rte
  5927:       //  これが期待通りに動作してしまったらMC68000を正しくエミュレートできていないということになる
  5928:       //  http://stdkmd.com/bbs/page2.htm#comment134
  5929:       XEiJ.mpuCycleCount += 8;
  5930:       XEiJ.busWw (efaMltWord (ea), XEiJ.regSRT1 | XEiJ.regSRS | XEiJ.regSRI | XEiJ.regCCR);
  5931:     }
  5932:     if (Profiling.PFF_ON) {
  5933:       Profiling.pffTotal[Profiling.PRF.irpMoveFromSR.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpMoveFromSR.ordinal ()];
  5934:       Profiling.pffCount[Profiling.PRF.irpMoveFromSR.ordinal ()]++;
  5935:     }
  5936:   }  //irpMoveFromSR
  5937: 
  5938:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5939:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  5940:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  5941:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5942:   //CHK.W <ea>,Dq                                   |-|012346|-|-UUUU|-*UUU|D M+-WXZPI|0100_qqq_110_mmm_rrr
  5943:   public static void irpChkWord () throws M68kException {
  5944:     if (Profiling.PFF_ON) {
  5945:       Profiling.pffStart[Profiling.PRF.irpChkWord.ordinal ()] = System.nanoTime ();
  5946:     }
  5947:     XEiJ.mpuCycleCount += 10;
  5948:     int ea = XEiJ.regOC & 63;
  5949:     int x = ea < XEiJ.EA_AR ? (short) XEiJ.regRn[ea] : XEiJ.busRws (efaAnyWord (ea));
  5950:     int y = (short) XEiJ.regRn[XEiJ.regOC >> 9 & 7];
  5951:     int z = (short) (x - y);
  5952:     XEiJ.regCCR = (XEiJ.regCCR & XEiJ.REG_CCR_X |
  5953:                    (y < 0 ? XEiJ.REG_CCR_N : 0) |
  5954:                    (y == 0 ? XEiJ.REG_CCR_Z : 0) |
  5955:                    ((x ^ y) & (x ^ z)) >>> 31 << 1 |
  5956:                    (x & (y ^ z) ^ (y | z)) >>> 31);
  5957:     if (y < 0 || x < y) {
  5958:       XEiJ.mpuCycleCount += 40 - 10 - 34;
  5959:       M68kException.m6eNumber = M68kException.M6E_CHK_INSTRUCTION;
  5960:       throw M68kException.m6eSignal;
  5961:     }
  5962:     if (Profiling.PFF_ON) {
  5963:       Profiling.pffTotal[Profiling.PRF.irpChkWord.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpChkWord.ordinal ()];
  5964:       Profiling.pffCount[Profiling.PRF.irpChkWord.ordinal ()]++;
  5965:     }
  5966:   }  //irpChkWord
  5967: 
  5968:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5969:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  5970:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  5971:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5972:   //LEA.L <ea>,Aq                                   |-|012346|-|-----|-----|  M  WXZP |0100_qqq_111_mmm_rrr
  5973:   public static void irpLea () throws M68kException {
  5974:     if (Profiling.PFF_ON) {
  5975:       Profiling.pffStart[Profiling.PRF.irpLea.ordinal ()] = System.nanoTime ();
  5976:     }
  5977:     //XEiJ.mpuCycleCount += 4 - 4;
  5978:     XEiJ.regRn[(XEiJ.regOC >> 9) - (32 - 8)] = efaLeaPea (XEiJ.regOC & 63);
  5979:     if (Profiling.PFF_ON) {
  5980:       Profiling.pffTotal[Profiling.PRF.irpLea.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpLea.ordinal ()];
  5981:       Profiling.pffCount[Profiling.PRF.irpLea.ordinal ()]++;
  5982:     }
  5983:   }  //irpLea
  5984: 
  5985:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5986:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  5987:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  5988:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  5989:   //CLR.B <ea>                                      |-|012346|-|-UUUU|-0100|D M+-WXZ  |0100_001_000_mmm_rrr (68000 and 68008 read before clear)
  5990:   public static void irpClrByte () throws M68kException {
  5991:     if (Profiling.PFF_ON) {
  5992:       Profiling.pffStart[Profiling.PRF.irpClrByte.ordinal ()] = System.nanoTime ();
  5993:     }
  5994:     int ea = XEiJ.regOC & 63;
  5995:     if (ea < XEiJ.EA_AR) {  //CLR.B Dr
  5996:       XEiJ.mpuCycleCount += 4;
  5997:       XEiJ.regRn[ea] &= ~0xff;
  5998:     } else {  //CLR.B <mem>
  5999:       //! 軽量化。MC68000ではクリアの前にリードが入るが省略する
  6000:       XEiJ.mpuCycleCount += 8;
  6001:       XEiJ.busWb (efaMltByte (ea), 0);
  6002:     }
  6003:     XEiJ.regCCR = XEiJ.regCCR & XEiJ.REG_CCR_X | XEiJ.REG_CCR_Z;  //ccr_clr
  6004:     if (Profiling.PFF_ON) {
  6005:       Profiling.pffTotal[Profiling.PRF.irpClrByte.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpClrByte.ordinal ()];
  6006:       Profiling.pffCount[Profiling.PRF.irpClrByte.ordinal ()]++;
  6007:     }
  6008:   }  //irpClrByte
  6009: 
  6010:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  6011:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  6012:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  6013:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  6014:   //CLR.W <ea>                                      |-|012346|-|-UUUU|-0100|D M+-WXZ  |0100_001_001_mmm_rrr (68000 and 68008 read before clear)
  6015:   public static void irpClrWord () throws M68kException {
  6016:     if (Profiling.PFF_ON) {
  6017:       Profiling.pffStart[Profiling.PRF.irpClrWord.ordinal ()] = System.nanoTime ();
  6018:     }
  6019:     int ea = XEiJ.regOC & 63;
  6020:     if (ea < XEiJ.EA_AR) {  //CLR.W Dr
  6021:       XEiJ.mpuCycleCount += 4;
  6022:       XEiJ.regRn[ea] &= ~0xffff;
  6023:     } else {  //CLR.W <mem>
  6024:       //! 軽量化。MC68000ではクリアの前にリードが入るが省略する
  6025:       XEiJ.mpuCycleCount += 8;
  6026:       XEiJ.busWw (efaMltWord (ea), 0);
  6027:     }
  6028:     XEiJ.regCCR = XEiJ.regCCR & XEiJ.REG_CCR_X | XEiJ.REG_CCR_Z;  //ccr_clr
  6029:     if (Profiling.PFF_ON) {
  6030:       Profiling.pffTotal[Profiling.PRF.irpClrWord.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpClrWord.ordinal ()];
  6031:       Profiling.pffCount[Profiling.PRF.irpClrWord.ordinal ()]++;
  6032:     }
  6033:   }  //irpClrWord
  6034: 
  6035:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  6036:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  6037:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  6038:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  6039:   //CLR.L <ea>                                      |-|012346|-|-UUUU|-0100|D M+-WXZ  |0100_001_010_mmm_rrr (68000 and 68008 read before clear)
  6040:   public static void irpClrLong () throws M68kException {
  6041:     if (Profiling.PFF_ON) {
  6042:       Profiling.pffStart[Profiling.PRF.irpClrLong.ordinal ()] = System.nanoTime ();
  6043:     }
  6044:     int ea = XEiJ.regOC & 63;
  6045:     if (ea < XEiJ.EA_AR) {  //CLR.L Dr
  6046:       XEiJ.mpuCycleCount += 6;
  6047:       XEiJ.regRn[ea] = 0;
  6048:     } else {  //CLR.L <mem>
  6049:       //! 軽量化。MC68000ではクリアの前にリードが入るが省略する
  6050:       XEiJ.mpuCycleCount += 12;
  6051:       XEiJ.busWl (efaMltLong (ea), 0);
  6052:     }
  6053:     XEiJ.regCCR = XEiJ.regCCR & XEiJ.REG_CCR_X | XEiJ.REG_CCR_Z;  //ccr_clr
  6054:     if (Profiling.PFF_ON) {
  6055:       Profiling.pffTotal[Profiling.PRF.irpClrLong.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpClrLong.ordinal ()];
  6056:       Profiling.pffCount[Profiling.PRF.irpClrLong.ordinal ()]++;
  6057:     }
  6058:   }  //irpClrLong
  6059: 
  6060:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  6061:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  6062:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  6063:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  6064:   //NEG.B <ea>                                      |-|012346|-|UUUUU|*****|D M+-WXZ  |0100_010_000_mmm_rrr
  6065:   public static void irpNegByte () throws M68kException {
  6066:     if (Profiling.PFF_ON) {
  6067:       Profiling.pffStart[Profiling.PRF.irpNegByte.ordinal ()] = System.nanoTime ();
  6068:     }
  6069:     int ea = XEiJ.regOC & 63;
  6070:     int y;
  6071:     int z;
  6072:     if (ea < XEiJ.EA_AR) {  //NEG.B Dr
  6073:       XEiJ.mpuCycleCount += 4;
  6074:       z = (byte) (XEiJ.regRn[ea] = ~0xff & (y = XEiJ.regRn[ea]) | 0xff & -(y = (byte) y));
  6075:     } else {  //NEG.B <mem>
  6076:       XEiJ.mpuCycleCount += 8;
  6077:       int a = efaMltByte (ea);
  6078:       XEiJ.busWb (a, z = (byte) -(y = XEiJ.busRbs (a)));
  6079:     }
  6080:     XEiJ.regCCR = (z >> 28 & XEiJ.REG_CCR_N | (z == 0 ? XEiJ.REG_CCR_Z : 0) |
  6081:            (y & z) >>> 31 << 1 |
  6082:            (y | z) >> 31 & (XEiJ.REG_CCR_X | XEiJ.REG_CCR_C));  //ccr_neg
  6083:     if (Profiling.PFF_ON) {
  6084:       Profiling.pffTotal[Profiling.PRF.irpNegByte.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpNegByte.ordinal ()];
  6085:       Profiling.pffCount[Profiling.PRF.irpNegByte.ordinal ()]++;
  6086:     }
  6087:   }  //irpNegByte
  6088: 
  6089:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  6090:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  6091:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  6092:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  6093:   //NEG.W <ea>                                      |-|012346|-|UUUUU|*****|D M+-WXZ  |0100_010_001_mmm_rrr
  6094:   public static void irpNegWord () throws M68kException {
  6095:     if (Profiling.PFF_ON) {
  6096:       Profiling.pffStart[Profiling.PRF.irpNegWord.ordinal ()] = System.nanoTime ();
  6097:     }
  6098:     int ea = XEiJ.regOC & 63;
  6099:     int y;
  6100:     int z;
  6101:     if (ea < XEiJ.EA_AR) {  //NEG.W Dr
  6102:       XEiJ.mpuCycleCount += 4;
  6103:       z = (short) (XEiJ.regRn[ea] = ~0xffff & (y = XEiJ.regRn[ea]) | (char) -(y = (short) y));
  6104:     } else {  //NEG.W <mem>
  6105:       XEiJ.mpuCycleCount += 8;
  6106:       int a = efaMltWord (ea);
  6107:       XEiJ.busWw (a, z = (short) -(y = XEiJ.busRws (a)));
  6108:     }
  6109:     XEiJ.regCCR = (z >> 28 & XEiJ.REG_CCR_N | (z == 0 ? XEiJ.REG_CCR_Z : 0) |
  6110:            (y & z) >>> 31 << 1 |
  6111:            (y | z) >> 31 & (XEiJ.REG_CCR_X | XEiJ.REG_CCR_C));  //ccr_neg
  6112:     if (Profiling.PFF_ON) {
  6113:       Profiling.pffTotal[Profiling.PRF.irpNegWord.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpNegWord.ordinal ()];
  6114:       Profiling.pffCount[Profiling.PRF.irpNegWord.ordinal ()]++;
  6115:     }
  6116:   }  //irpNegWord
  6117: 
  6118:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  6119:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  6120:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  6121:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  6122:   //NEG.L <ea>                                      |-|012346|-|UUUUU|*****|D M+-WXZ  |0100_010_010_mmm_rrr
  6123:   public static void irpNegLong () throws M68kException {
  6124:     if (Profiling.PFF_ON) {
  6125:       Profiling.pffStart[Profiling.PRF.irpNegLong.ordinal ()] = System.nanoTime ();
  6126:     }
  6127:     int ea = XEiJ.regOC & 63;
  6128:     int y;
  6129:     int z;
  6130:     if (ea < XEiJ.EA_AR) {  //NEG.L Dr
  6131:       XEiJ.mpuCycleCount += 6;
  6132:       XEiJ.regRn[ea] = z = -(y = XEiJ.regRn[ea]);
  6133:     } else {  //NEG.L <mem>
  6134:       XEiJ.mpuCycleCount += 12;
  6135:       int a = efaMltLong (ea);
  6136:       XEiJ.busWl (a, z = -(y = XEiJ.busRls (a)));
  6137:     }
  6138:     XEiJ.regCCR = (z >> 28 & XEiJ.REG_CCR_N | (z == 0 ? XEiJ.REG_CCR_Z : 0) |
  6139:            (y & z) >>> 31 << 1 |
  6140:            (y | z) >> 31 & (XEiJ.REG_CCR_X | XEiJ.REG_CCR_C));  //ccr_neg
  6141:     if (Profiling.PFF_ON) {
  6142:       Profiling.pffTotal[Profiling.PRF.irpNegLong.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpNegLong.ordinal ()];
  6143:       Profiling.pffCount[Profiling.PRF.irpNegLong.ordinal ()]++;
  6144:     }
  6145:   }  //irpNegLong
  6146: 
  6147:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  6148:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  6149:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  6150:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  6151:   //MOVE.W <ea>,CCR                                 |-|012346|-|UUUUU|*****|D M+-WXZPI|0100_010_011_mmm_rrr
  6152:   public static void irpMoveToCCR () throws M68kException {
  6153:     if (Profiling.PFF_ON) {
  6154:       Profiling.pffStart[Profiling.PRF.irpMoveToCCR.ordinal ()] = System.nanoTime ();
  6155:     }
  6156:     XEiJ.mpuCycleCount += 12;
  6157:     int ea = XEiJ.regOC & 63;
  6158:     XEiJ.regCCR = XEiJ.REG_CCR_MASK & (ea < XEiJ.EA_AR ? XEiJ.regRn[ea] : XEiJ.busRws (efaAnyWord (ea)));
  6159:     if (Profiling.PFF_ON) {
  6160:       Profiling.pffTotal[Profiling.PRF.irpMoveToCCR.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpMoveToCCR.ordinal ()];
  6161:       Profiling.pffCount[Profiling.PRF.irpMoveToCCR.ordinal ()]++;
  6162:     }
  6163:   }  //irpMoveToCCR
  6164: 
  6165:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  6166:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  6167:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  6168:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  6169:   //NOT.B <ea>                                      |-|012346|-|-UUUU|-**00|D M+-WXZ  |0100_011_000_mmm_rrr
  6170:   public static void irpNotByte () throws M68kException {
  6171:     if (Profiling.PFF_ON) {
  6172:       Profiling.pffStart[Profiling.PRF.irpNotByte.ordinal ()] = System.nanoTime ();
  6173:     }
  6174:     int ea = XEiJ.regOC & 63;
  6175:     int z;
  6176:     if (ea < XEiJ.EA_AR) {  //NOT.B Dr
  6177:       XEiJ.mpuCycleCount += 4;
  6178:       z = XEiJ.regRn[ea] ^= 255;  //0拡張してからEOR
  6179:     } else {  //NOT.B <mem>
  6180:       XEiJ.mpuCycleCount += 8;
  6181:       int a = efaMltByte (ea);
  6182:       XEiJ.busWb (a, z = ~XEiJ.busRbs (a));
  6183:     }
  6184:     XEiJ.regCCR = XEiJ.regCCR & XEiJ.REG_CCR_X | XEiJ.MPU_TSTB_TABLE[255 & z];  //ccr_tst_byte
  6185:     if (Profiling.PFF_ON) {
  6186:       Profiling.pffTotal[Profiling.PRF.irpNotByte.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpNotByte.ordinal ()];
  6187:       Profiling.pffCount[Profiling.PRF.irpNotByte.ordinal ()]++;
  6188:     }
  6189:   }  //irpNotByte
  6190: 
  6191:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  6192:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  6193:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  6194:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  6195:   //NOT.W <ea>                                      |-|012346|-|-UUUU|-**00|D M+-WXZ  |0100_011_001_mmm_rrr
  6196:   public static void irpNotWord () throws M68kException {
  6197:     if (Profiling.PFF_ON) {
  6198:       Profiling.pffStart[Profiling.PRF.irpNotWord.ordinal ()] = System.nanoTime ();
  6199:     }
  6200:     int ea = XEiJ.regOC & 63;
  6201:     int z;
  6202:     if (ea < XEiJ.EA_AR) {  //NOT.W Dr
  6203:       XEiJ.mpuCycleCount += 4;
  6204:       z = XEiJ.regRn[ea] ^= 65535;  //0拡張してからEOR
  6205:     } else {  //NOT.W <mem>
  6206:       XEiJ.mpuCycleCount += 8;
  6207:       int a = efaMltWord (ea);
  6208:       XEiJ.busWw (a, z = ~XEiJ.busRws (a));
  6209:     }
  6210:     XEiJ.regCCR = XEiJ.regCCR & XEiJ.REG_CCR_X | (char) z - 1 >> 31 & XEiJ.REG_CCR_Z | ((short) z < 0 ? XEiJ.REG_CCR_N : 0);  //ccr_tst_word
  6211:     if (Profiling.PFF_ON) {
  6212:       Profiling.pffTotal[Profiling.PRF.irpNotWord.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpNotWord.ordinal ()];
  6213:       Profiling.pffCount[Profiling.PRF.irpNotWord.ordinal ()]++;
  6214:     }
  6215:   }  //irpNotWord
  6216: 
  6217:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  6218:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  6219:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  6220:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  6221:   //NOT.L <ea>                                      |-|012346|-|-UUUU|-**00|D M+-WXZ  |0100_011_010_mmm_rrr
  6222:   public static void irpNotLong () throws M68kException {
  6223:     if (Profiling.PFF_ON) {
  6224:       Profiling.pffStart[Profiling.PRF.irpNotLong.ordinal ()] = System.nanoTime ();
  6225:     }
  6226:     int ea = XEiJ.regOC & 63;
  6227:     int z;
  6228:     if (ea < XEiJ.EA_AR) {  //NOT.L Dr
  6229:       XEiJ.mpuCycleCount += 6;
  6230:       z = XEiJ.regRn[ea] ^= 0xffffffff;
  6231:     } else {  //NOT.L <mem>
  6232:       XEiJ.mpuCycleCount += 12;
  6233:       int a = efaMltLong (ea);
  6234:       XEiJ.busWl (a, z = ~XEiJ.busRls (a));
  6235:     }
  6236:     XEiJ.regCCR = z >> 28 & XEiJ.REG_CCR_N | (z == 0 ? XEiJ.regCCR & XEiJ.REG_CCR_X | XEiJ.REG_CCR_Z : XEiJ.regCCR & XEiJ.REG_CCR_X);  //ccr_tst
  6237:     if (Profiling.PFF_ON) {
  6238:       Profiling.pffTotal[Profiling.PRF.irpNotLong.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpNotLong.ordinal ()];
  6239:       Profiling.pffCount[Profiling.PRF.irpNotLong.ordinal ()]++;
  6240:     }
  6241:   }  //irpNotLong
  6242: 
  6243:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  6244:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  6245:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  6246:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  6247:   //MOVE.W <ea>,SR                                  |-|012346|P|UUUUU|*****|D M+-WXZPI|0100_011_011_mmm_rrr
  6248:   public static void irpMoveToSR () throws M68kException {
  6249:     if (Profiling.PFF_ON) {
  6250:       Profiling.pffStart[Profiling.PRF.irpMoveToSR.ordinal ()] = System.nanoTime ();
  6251:     }
  6252:     if (XEiJ.regSRS == 0) {  //ユーザモードのとき
  6253:       M68kException.m6eNumber = M68kException.M6E_PRIVILEGE_VIOLATION;
  6254:       throw M68kException.m6eSignal;
  6255:     }
  6256:     //以下はスーパーバイザモード
  6257:     XEiJ.mpuCycleCount += 12;
  6258:     int ea = XEiJ.regOC & 63;
  6259:     irpSetSR (ea < XEiJ.EA_AR ? XEiJ.regRn[ea] : XEiJ.busRwz (efaAnyWord (ea)));  //特権違反チェックが先
  6260:     if (Profiling.PFF_ON) {
  6261:       Profiling.pffTotal[Profiling.PRF.irpMoveToSR.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpMoveToSR.ordinal ()];
  6262:       Profiling.pffCount[Profiling.PRF.irpMoveToSR.ordinal ()]++;
  6263:     }
  6264:   }  //irpMoveToSR
  6265: 
  6266:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  6267:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  6268:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  6269:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  6270:   //NBCD.B <ea>                                     |-|012346|-|UUUUU|*U*U*|D M+-WXZ  |0100_100_000_mmm_rrr
  6271:   public static void irpNbcd () throws M68kException {
  6272:     if (Profiling.PFF_ON) {
  6273:       Profiling.pffStart[Profiling.PRF.irpNbcd.ordinal ()] = System.nanoTime ();
  6274:     }
  6275:     int ea = XEiJ.regOC & 63;
  6276:     if (ea < XEiJ.EA_AR) {  //NBCD.B Dr
  6277:       XEiJ.mpuCycleCount += 6;
  6278:       XEiJ.regRn[ea] = ~0xff & XEiJ.regRn[ea] | irpSbcd (0, XEiJ.regRn[ea]);
  6279:     } else {  //NBCD.B <mem>
  6280:       XEiJ.mpuCycleCount += 8;
  6281:       int a = efaMltByte (ea);
  6282:       XEiJ.busWb (a, irpSbcd (0, XEiJ.busRbs (a)));
  6283:     }
  6284:     if (Profiling.PFF_ON) {
  6285:       Profiling.pffTotal[Profiling.PRF.irpNbcd.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpNbcd.ordinal ()];
  6286:       Profiling.pffCount[Profiling.PRF.irpNbcd.ordinal ()]++;
  6287:     }
  6288:   }  //irpNbcd
  6289: 
  6290:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  6291:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  6292:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  6293:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  6294:   //SWAP.W Dr                                       |-|012346|-|-UUUU|-**00|D         |0100_100_001_000_rrr
  6295:   //PEA.L <ea>                                      |-|012346|-|-----|-----|  M  WXZP |0100_100_001_mmm_rrr
  6296:   public static void irpPea () throws M68kException {
  6297:     if (Profiling.PFF_ON) {
  6298:       Profiling.pffStart[Profiling.PRF.irpPea.ordinal ()] = System.nanoTime ();
  6299:     }
  6300:     int ea = XEiJ.regOC & 63;
  6301:     if (ea < XEiJ.EA_AR) {  //SWAP.W Dr
  6302:       XEiJ.mpuCycleCount += 4;
  6303:       int x;
  6304:       int z;
  6305:       XEiJ.regRn[ea] = z = (x = XEiJ.regRn[ea]) << 16 | x >>> 16;
  6306:       //上位ワードと下位ワードを入れ替えた後のDrをロングでテストする
  6307:       XEiJ.regCCR = z >> 28 & XEiJ.REG_CCR_N | (z == 0 ? XEiJ.regCCR & XEiJ.REG_CCR_X | XEiJ.REG_CCR_Z : XEiJ.regCCR & XEiJ.REG_CCR_X);  //ccr_tst
  6308:     } else {  //PEA.L <ea>
  6309:       XEiJ.mpuCycleCount += 12 - 4;
  6310:       int a = efaLeaPea (ea);  //BKPT #<data>はここでillegal instructionになる
  6311:       XEiJ.busWl (XEiJ.regRn[15] -= 4, a);  //pushl。評価順序に注意。wl(r[15]-=4,eaz_leapea(ea))は不可
  6312:     }
  6313:     if (Profiling.PFF_ON) {
  6314:       Profiling.pffTotal[Profiling.PRF.irpPea.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpPea.ordinal ()];
  6315:       Profiling.pffCount[Profiling.PRF.irpPea.ordinal ()]++;
  6316:     }
  6317:   }  //irpPea
  6318: 
  6319:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  6320:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  6321:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  6322:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  6323:   //EXT.W Dr                                        |-|012346|-|-UUUU|-**00|D         |0100_100_010_000_rrr
  6324:   //MOVEM.W <list>,<ea>                             |-|012346|-|-----|-----|  M -WXZ  |0100_100_010_mmm_rrr-llllllllllllllll
  6325:   public static void irpMovemToMemWord () throws M68kException {
  6326:     if (Profiling.PFF_ON) {
  6327:       Profiling.pffStart[Profiling.PRF.irpMovemToMemWord.ordinal ()] = System.nanoTime ();
  6328:     }
  6329:     int ea = XEiJ.regOC & 63;
  6330:     if (ea < XEiJ.EA_AR) {  //EXT.W Dr
  6331:       XEiJ.mpuCycleCount += 4;
  6332:       int z;
  6333:       XEiJ.regRn[ea] = ~0xffff & (z = XEiJ.regRn[ea]) | (char) (z = (byte) z);
  6334:       XEiJ.regCCR = z >> 28 & XEiJ.REG_CCR_N | (z == 0 ? XEiJ.regCCR & XEiJ.REG_CCR_X | XEiJ.REG_CCR_Z : XEiJ.regCCR & XEiJ.REG_CCR_X);  //ccr_tst
  6335:     } else {  //MOVEM.W <list>,<ea>
  6336:       int l = XEiJ.busRwze (XEiJ.regPC);  //pcwze。レジスタリスト。ゼロ拡張
  6337:       XEiJ.regPC += 2;
  6338:       if (ea >> 3 == XEiJ.MMM_MN) {  //-(Ar)
  6339:         //MOVEM.wl <list>,-(Ar)で<list>にArが含まれているとき、000/010は命令開始時のArを、020/030/040/060は命令開始時のAr-オペレーションサイズをメモリに書き込む
  6340:         //転送するレジスタが0個のときArは変化しない
  6341:         int arr = ea - (XEiJ.EA_MN - 8);
  6342:         int a = XEiJ.regRn[arr];
  6343:         if ((a & 1) != 0 && l != 0) {  //奇数アドレスで1ワード以上転送する
  6344:           M68kException.m6eNumber = M68kException.M6E_ADDRESS_ERROR;
  6345:           M68kException.m6eAddress = a;
  6346:           M68kException.m6eDirection = XEiJ.MPU_WR_WRITE;
  6347:           M68kException.m6eSize = XEiJ.MPU_SS_WORD;
  6348:           throw M68kException.m6eSignal;
  6349:         }
  6350:         int t = a;
  6351:         if (XEiJ.IRP_MOVEM_MAINMEMORY &&  //000のときMOVEMでメインメモリを特別扱いにする
  6352:             (DataBreakPoint.DBP_ON ? DataBreakPoint.dbpSuperMap : XEiJ.busSuperMap)[a - 2 >>> XEiJ.BUS_PAGE_BITS] == MemoryMappedDevice.MMD_MMR &&  //メインメモリ
  6353:             2 * 16 <= (a & XEiJ.BUS_PAGE_SIZE - 1)) {  //16個転送してもページを跨がない
  6354:           a &= XEiJ.BUS_MOTHER_MASK;
  6355:           if (XEiJ.IRP_MOVEM_EXPAND) {  //16回展開する
  6356:             if ((l & 0x0001) != 0) {
  6357:               a -= 2;
  6358:               int x = XEiJ.regRn[15];
  6359:               MainMemory.mmrM8[a    ] = (byte) (x >> 8);
  6360:               MainMemory.mmrM8[a + 1] = (byte)  x;
  6361:             }
  6362:             if ((l & 0x0002) != 0) {
  6363:               a -= 2;
  6364:               int x = XEiJ.regRn[14];
  6365:               MainMemory.mmrM8[a    ] = (byte) (x >> 8);
  6366:               MainMemory.mmrM8[a + 1] = (byte)  x;
  6367:             }
  6368:             if ((l & 0x0004) != 0) {
  6369:               a -= 2;
  6370:               int x = XEiJ.regRn[13];
  6371:               MainMemory.mmrM8[a    ] = (byte) (x >> 8);
  6372:               MainMemory.mmrM8[a + 1] = (byte)  x;
  6373:             }
  6374:             if ((l & 0x0008) != 0) {
  6375:               a -= 2;
  6376:               int x = XEiJ.regRn[12];
  6377:               MainMemory.mmrM8[a    ] = (byte) (x >> 8);
  6378:               MainMemory.mmrM8[a + 1] = (byte)  x;
  6379:             }
  6380:             if ((l & 0x0010) != 0) {
  6381:               a -= 2;
  6382:               int x = XEiJ.regRn[11];
  6383:               MainMemory.mmrM8[a    ] = (byte) (x >> 8);
  6384:               MainMemory.mmrM8[a + 1] = (byte)  x;
  6385:             }
  6386:             if ((l & 0x0020) != 0) {
  6387:               a -= 2;
  6388:               int x = XEiJ.regRn[10];
  6389:               MainMemory.mmrM8[a    ] = (byte) (x >> 8);
  6390:               MainMemory.mmrM8[a + 1] = (byte)  x;
  6391:             }
  6392:             if ((l & 0x0040) != 0) {
  6393:               a -= 2;
  6394:               int x = XEiJ.regRn[ 9];
  6395:               MainMemory.mmrM8[a    ] = (byte) (x >> 8);
  6396:               MainMemory.mmrM8[a + 1] = (byte)  x;
  6397:             }
  6398:             if ((byte) l < 0) {  //(l & 0x0080) != 0
  6399:               a -= 2;
  6400:               int x = XEiJ.regRn[ 8];
  6401:               MainMemory.mmrM8[a    ] = (byte) (x >> 8);
  6402:               MainMemory.mmrM8[a + 1] = (byte)  x;
  6403:             }
  6404:             if ((l & 0x0100) != 0) {
  6405:               a -= 2;
  6406:               int x = XEiJ.regRn[ 7];
  6407:               MainMemory.mmrM8[a    ] = (byte) (x >> 8);
  6408:               MainMemory.mmrM8[a + 1] = (byte)  x;
  6409:             }
  6410:             if ((l & 0x0200) != 0) {
  6411:               a -= 2;
  6412:               int x = XEiJ.regRn[ 6];
  6413:               MainMemory.mmrM8[a    ] = (byte) (x >> 8);
  6414:               MainMemory.mmrM8[a + 1] = (byte)  x;
  6415:             }
  6416:             if ((l & 0x0400) != 0) {
  6417:               a -= 2;
  6418:               int x = XEiJ.regRn[ 5];
  6419:               MainMemory.mmrM8[a    ] = (byte) (x >> 8);
  6420:               MainMemory.mmrM8[a + 1] = (byte)  x;
  6421:             }
  6422:             if ((l & 0x0800) != 0) {
  6423:               a -= 2;
  6424:               int x = XEiJ.regRn[ 4];
  6425:               MainMemory.mmrM8[a    ] = (byte) (x >> 8);
  6426:               MainMemory.mmrM8[a + 1] = (byte)  x;
  6427:             }
  6428:             if ((l & 0x1000) != 0) {
  6429:               a -= 2;
  6430:               int x = XEiJ.regRn[ 3];
  6431:               MainMemory.mmrM8[a    ] = (byte) (x >> 8);
  6432:               MainMemory.mmrM8[a + 1] = (byte)  x;
  6433:             }
  6434:             if ((l & 0x2000) != 0) {
  6435:               a -= 2;
  6436:               int x = XEiJ.regRn[ 2];
  6437:               MainMemory.mmrM8[a    ] = (byte) (x >> 8);
  6438:               MainMemory.mmrM8[a + 1] = (byte)  x;
  6439:             }
  6440:             if ((l & 0x4000) != 0) {
  6441:               a -= 2;
  6442:               int x = XEiJ.regRn[ 1];
  6443:               MainMemory.mmrM8[a    ] = (byte) (x >> 8);
  6444:               MainMemory.mmrM8[a + 1] = (byte)  x;
  6445:             }
  6446:             if ((short) l < 0) {  //(l & 0x8000) != 0
  6447:               a -= 2;
  6448:               int x = XEiJ.regRn[ 0];
  6449:               MainMemory.mmrM8[a    ] = (byte) (x >> 8);
  6450:               MainMemory.mmrM8[a + 1] = (byte)  x;
  6451:             }
  6452:           } else if (XEiJ.IRP_MOVEM_LOOP) {  //16回ループする。コンパイラが展開する
  6453:             for (int i = 15; i >= 0; i--) {
  6454:               if ((l & 0x8000 >>> i) != 0) {
  6455:                 a -= 2;
  6456:                 int x = XEiJ.regRn[i];
  6457:                 MainMemory.mmrM8[a    ] = (byte) (x >> 8);
  6458:                 MainMemory.mmrM8[a + 1] = (byte)  x;
  6459:               }
  6460:             }
  6461:           } else if (XEiJ.IRP_MOVEM_SHIFT_LEFT) {  //0になるまで左にシフトする
  6462:             l = XEiJ.MPU_BITREV_TABLE_0[l & 2047] | XEiJ.MPU_BITREV_TABLE_1[l << 10 >>> 21];  //Integer.reverse(l)
  6463:             for (int i = 15; l != 0; i--, l <<= 1) {
  6464:               if (l < 0) {
  6465:                 a -= 2;
  6466:                 int x = XEiJ.regRn[i];
  6467:                 MainMemory.mmrM8[a    ] = (byte) (x >> 8);
  6468:                 MainMemory.mmrM8[a + 1] = (byte)  x;
  6469:               }
  6470:             }
  6471:           } else if (XEiJ.IRP_MOVEM_SHIFT_RIGHT) {  //0になるまで右にシフトする
  6472:             for (int i = 15; l != 0; i--, l >>>= 1) {
  6473:               if ((l & 1) != 0) {
  6474:                 a -= 2;
  6475:                 int x = XEiJ.regRn[i];
  6476:                 MainMemory.mmrM8[a    ] = (byte) (x >> 8);
  6477:                 MainMemory.mmrM8[a + 1] = (byte)  x;
  6478:               }
  6479:             }
  6480:           } else if (XEiJ.IRP_MOVEM_ZEROS) {  //Integer.numberOfTrailingZerosを使う
  6481:             for (int i = 15; l != 0; ) {
  6482:               int k = Integer.numberOfTrailingZeros (l);
  6483:               a -= 2;
  6484:               int x = XEiJ.regRn[i -= k];
  6485:               MainMemory.mmrM8[a    ] = (byte) (x >> 8);
  6486:               MainMemory.mmrM8[a + 1] = (byte)  x;
  6487:               l = l >>> k & ~1;
  6488:             }
  6489:           }
  6490:           a = t - (short) (t - a);
  6491:         } else {  //メインメモリでないかページを跨ぐ可能性がある
  6492:           if (XEiJ.IRP_MOVEM_EXPAND) {  //16回展開する
  6493:             if ((l & 0x0001) != 0) {
  6494:               XEiJ.busWwe (a -= 2, XEiJ.regRn[15]);
  6495:             }
  6496:             if ((l & 0x0002) != 0) {
  6497:               XEiJ.busWwe (a -= 2, XEiJ.regRn[14]);
  6498:             }
  6499:             if ((l & 0x0004) != 0) {
  6500:               XEiJ.busWwe (a -= 2, XEiJ.regRn[13]);
  6501:             }
  6502:             if ((l & 0x0008) != 0) {
  6503:               XEiJ.busWwe (a -= 2, XEiJ.regRn[12]);
  6504:             }
  6505:             if ((l & 0x0010) != 0) {
  6506:               XEiJ.busWwe (a -= 2, XEiJ.regRn[11]);
  6507:             }
  6508:             if ((l & 0x0020) != 0) {
  6509:               XEiJ.busWwe (a -= 2, XEiJ.regRn[10]);
  6510:             }
  6511:             if ((l & 0x0040) != 0) {
  6512:               XEiJ.busWwe (a -= 2, XEiJ.regRn[ 9]);
  6513:             }
  6514:             if ((byte) l < 0) {  //(l & 0x0080) != 0
  6515:               XEiJ.busWwe (a -= 2, XEiJ.regRn[ 8]);
  6516:             }
  6517:             if ((l & 0x0100) != 0) {
  6518:               XEiJ.busWwe (a -= 2, XEiJ.regRn[ 7]);
  6519:             }
  6520:             if ((l & 0x0200) != 0) {
  6521:               XEiJ.busWwe (a -= 2, XEiJ.regRn[ 6]);
  6522:             }
  6523:             if ((l & 0x0400) != 0) {
  6524:               XEiJ.busWwe (a -= 2, XEiJ.regRn[ 5]);
  6525:             }
  6526:             if ((l & 0x0800) != 0) {
  6527:               XEiJ.busWwe (a -= 2, XEiJ.regRn[ 4]);
  6528:             }
  6529:             if ((l & 0x1000) != 0) {
  6530:               XEiJ.busWwe (a -= 2, XEiJ.regRn[ 3]);
  6531:             }
  6532:             if ((l & 0x2000) != 0) {
  6533:               XEiJ.busWwe (a -= 2, XEiJ.regRn[ 2]);
  6534:             }
  6535:             if ((l & 0x4000) != 0) {
  6536:               XEiJ.busWwe (a -= 2, XEiJ.regRn[ 1]);
  6537:             }
  6538:             if ((short) l < 0) {  //(l & 0x8000) != 0
  6539:               XEiJ.busWwe (a -= 2, XEiJ.regRn[ 0]);
  6540:             }
  6541:           } else if (XEiJ.IRP_MOVEM_LOOP) {  //16回ループする。コンパイラが展開する
  6542:             for (int i = 15; i >= 0; i--) {
  6543:               if ((l & 0x8000 >>> i) != 0) {
  6544:                 XEiJ.busWwe (a -= 2, XEiJ.regRn[i]);
  6545:               }
  6546:             }
  6547:           } else if (XEiJ.IRP_MOVEM_SHIFT_LEFT) {  //0になるまで左にシフトする
  6548:             l = XEiJ.MPU_BITREV_TABLE_0[l & 2047] | XEiJ.MPU_BITREV_TABLE_1[l << 10 >>> 21];  //Integer.reverse(l)
  6549:             for (int i = 15; l != 0; i--, l <<= 1) {
  6550:               if (l < 0) {
  6551:                 XEiJ.busWwe (a -= 2, XEiJ.regRn[i]);
  6552:               }
  6553:             }
  6554:           } else if (XEiJ.IRP_MOVEM_SHIFT_RIGHT) {  //0になるまで右にシフトする
  6555:             for (int i = 15; l != 0; i--, l >>>= 1) {
  6556:               if ((l & 1) != 0) {
  6557:                 XEiJ.busWwe (a -= 2, XEiJ.regRn[i]);
  6558:               }
  6559:             }
  6560:           } else if (XEiJ.IRP_MOVEM_ZEROS) {  //Integer.numberOfTrailingZerosを使う
  6561:             for (int i = 15; l != 0; ) {
  6562:               int k = Integer.numberOfTrailingZeros (l);
  6563:               XEiJ.busWwe (a -= 2, XEiJ.regRn[i -= k]);
  6564:               l = l >>> k & ~1;
  6565:             }
  6566:           }
  6567:         }
  6568:         XEiJ.regRn[arr] = a;
  6569:         XEiJ.mpuCycleCount += 8 + (t - a << 1);  //2バイト/個→4サイクル/個
  6570:       } else {  //-(Ar)以外
  6571:         int a = efaCltWord (ea);
  6572:         if ((a & 1) != 0 && l != 0) {  //奇数アドレスで1ワード以上転送する
  6573:           M68kException.m6eNumber = M68kException.M6E_ADDRESS_ERROR;
  6574:           M68kException.m6eAddress = a;
  6575:           M68kException.m6eDirection = XEiJ.MPU_WR_WRITE;
  6576:           M68kException.m6eSize = XEiJ.MPU_SS_WORD;
  6577:           throw M68kException.m6eSignal;
  6578:         }
  6579:         int t = a;
  6580:         if (XEiJ.IRP_MOVEM_MAINMEMORY &&  //000のときMOVEMでメインメモリを特別扱いにする
  6581:             (DataBreakPoint.DBP_ON ? DataBreakPoint.dbpSuperMap : XEiJ.busSuperMap)[a >>> XEiJ.BUS_PAGE_BITS] == MemoryMappedDevice.MMD_MMR &&  //メインメモリ
  6582:             (a & XEiJ.BUS_PAGE_SIZE - 1) <= XEiJ.BUS_PAGE_SIZE - 2 * 16) {  //16個転送してもページを跨がない
  6583:           a &= XEiJ.BUS_MOTHER_MASK;
  6584:           if (XEiJ.IRP_MOVEM_EXPAND) {  //16回展開する
  6585:             if ((l & 0x0001) != 0) {
  6586:               int x = XEiJ.regRn[ 0];
  6587:               MainMemory.mmrM8[a    ] = (byte) (x >> 8);
  6588:               MainMemory.mmrM8[a + 1] = (byte)  x;
  6589:               a += 2;
  6590:             }
  6591:             if ((l & 0x0002) != 0) {
  6592:               int x = XEiJ.regRn[ 1];
  6593:               MainMemory.mmrM8[a    ] = (byte) (x >> 8);
  6594:               MainMemory.mmrM8[a + 1] = (byte)  x;
  6595:               a += 2;
  6596:             }
  6597:             if ((l & 0x0004) != 0) {
  6598:               int x = XEiJ.regRn[ 2];
  6599:               MainMemory.mmrM8[a    ] = (byte) (x >> 8);
  6600:               MainMemory.mmrM8[a + 1] = (byte)  x;
  6601:               a += 2;
  6602:             }
  6603:             if ((l & 0x0008) != 0) {
  6604:               int x = XEiJ.regRn[ 3];
  6605:               MainMemory.mmrM8[a    ] = (byte) (x >> 8);
  6606:               MainMemory.mmrM8[a + 1] = (byte)  x;
  6607:               a += 2;
  6608:             }
  6609:             if ((l & 0x0010) != 0) {
  6610:               int x = XEiJ.regRn[ 4];
  6611:               MainMemory.mmrM8[a    ] = (byte) (x >> 8);
  6612:               MainMemory.mmrM8[a + 1] = (byte)  x;
  6613:               a += 2;
  6614:             }
  6615:             if ((l & 0x0020) != 0) {
  6616:               int x = XEiJ.regRn[ 5];
  6617:               MainMemory.mmrM8[a    ] = (byte) (x >> 8);
  6618:               MainMemory.mmrM8[a + 1] = (byte)  x;
  6619:               a += 2;
  6620:             }
  6621:             if ((l & 0x0040) != 0) {
  6622:               int x = XEiJ.regRn[ 6];
  6623:               MainMemory.mmrM8[a    ] = (byte) (x >> 8);
  6624:               MainMemory.mmrM8[a + 1] = (byte)  x;
  6625:               a += 2;
  6626:             }
  6627:             if ((byte) l < 0) {  //(l & 0x0080) != 0
  6628:               int x = XEiJ.regRn[ 7];
  6629:               MainMemory.mmrM8[a    ] = (byte) (x >> 8);
  6630:               MainMemory.mmrM8[a + 1] = (byte)  x;
  6631:               a += 2;
  6632:             }
  6633:             if ((l & 0x0100) != 0) {
  6634:               int x = XEiJ.regRn[ 8];
  6635:               MainMemory.mmrM8[a    ] = (byte) (x >> 8);
  6636:               MainMemory.mmrM8[a + 1] = (byte)  x;
  6637:               a += 2;
  6638:             }
  6639:             if ((l & 0x0200) != 0) {
  6640:               int x = XEiJ.regRn[ 9];
  6641:               MainMemory.mmrM8[a    ] = (byte) (x >> 8);
  6642:               MainMemory.mmrM8[a + 1] = (byte)  x;
  6643:               a += 2;
  6644:             }
  6645:             if ((l & 0x0400) != 0) {
  6646:               int x = XEiJ.regRn[10];
  6647:               MainMemory.mmrM8[a    ] = (byte) (x >> 8);
  6648:               MainMemory.mmrM8[a + 1] = (byte)  x;
  6649:               a += 2;
  6650:             }
  6651:             if ((l & 0x0800) != 0) {
  6652:               int x = XEiJ.regRn[11];
  6653:               MainMemory.mmrM8[a    ] = (byte) (x >> 8);
  6654:               MainMemory.mmrM8[a + 1] = (byte)  x;
  6655:               a += 2;
  6656:             }
  6657:             if ((l & 0x1000) != 0) {
  6658:               int x = XEiJ.regRn[12];
  6659:               MainMemory.mmrM8[a    ] = (byte) (x >> 8);
  6660:               MainMemory.mmrM8[a + 1] = (byte)  x;
  6661:               a += 2;
  6662:             }
  6663:             if ((l & 0x2000) != 0) {
  6664:               int x = XEiJ.regRn[13];
  6665:               MainMemory.mmrM8[a    ] = (byte) (x >> 8);
  6666:               MainMemory.mmrM8[a + 1] = (byte)  x;
  6667:               a += 2;
  6668:             }
  6669:             if ((l & 0x4000) != 0) {
  6670:               int x = XEiJ.regRn[14];
  6671:               MainMemory.mmrM8[a    ] = (byte) (x >> 8);
  6672:               MainMemory.mmrM8[a + 1] = (byte)  x;
  6673:               a += 2;
  6674:             }
  6675:             if ((short) l < 0) {  //(l & 0x8000) != 0
  6676:               int x = XEiJ.regRn[15];
  6677:               MainMemory.mmrM8[a    ] = (byte) (x >> 8);
  6678:               MainMemory.mmrM8[a + 1] = (byte)  x;
  6679:               a += 2;
  6680:             }
  6681:           } else if (XEiJ.IRP_MOVEM_LOOP) {  //16回ループする。コンパイラが展開する
  6682:             for (int i = 0; i <= 15; i++) {
  6683:               if ((l & 0x0001 << i) != 0) {
  6684:                 int x = XEiJ.regRn[i];
  6685:                 MainMemory.mmrM8[a    ] = (byte) (x >> 8);
  6686:                 MainMemory.mmrM8[a + 1] = (byte)  x;
  6687:                 a += 2;
  6688:               }
  6689:             }
  6690:           } else if (XEiJ.IRP_MOVEM_SHIFT_LEFT) {  //0になるまで左にシフトする
  6691:             l = XEiJ.MPU_BITREV_TABLE_0[l & 2047] | XEiJ.MPU_BITREV_TABLE_1[l << 10 >>> 21];  //Integer.reverse(l)
  6692:             for (int i = 0; l != 0; i++, l <<= 1) {
  6693:               if (l < 0) {
  6694:                 int x = XEiJ.regRn[i];
  6695:                 MainMemory.mmrM8[a    ] = (byte) (x >> 8);
  6696:                 MainMemory.mmrM8[a + 1] = (byte)  x;
  6697:                 a += 2;
  6698:               }
  6699:             }
  6700:           } else if (XEiJ.IRP_MOVEM_SHIFT_RIGHT) {  //0になるまで右にシフトする
  6701:             for (int i = 0; l != 0; i++, l >>>= 1) {
  6702:               if ((l & 1) != 0) {
  6703:                 int x = XEiJ.regRn[i];
  6704:                 MainMemory.mmrM8[a    ] = (byte) (x >> 8);
  6705:                 MainMemory.mmrM8[a + 1] = (byte)  x;
  6706:                 a += 2;
  6707:               }
  6708:             }
  6709:           } else if (XEiJ.IRP_MOVEM_ZEROS) {  //Integer.numberOfTrailingZerosを使う
  6710:             for (int i = 0; l != 0; ) {
  6711:               int k = Integer.numberOfTrailingZeros (l);
  6712:               int x = XEiJ.regRn[i += k];
  6713:               MainMemory.mmrM8[a    ] = (byte) (x >> 8);
  6714:               MainMemory.mmrM8[a + 1] = (byte)  x;
  6715:               a += 2;
  6716:               l = l >>> k & ~1;
  6717:             }
  6718:           }
  6719:           a = t + (short) (a - t);
  6720:         } else {  //メインメモリでないかページを跨ぐ可能性がある
  6721:           if (XEiJ.IRP_MOVEM_EXPAND) {  //16回展開する
  6722:             if ((l & 0x0001) != 0) {
  6723:               XEiJ.busWwe (a, XEiJ.regRn[ 0]);
  6724:               a += 2;
  6725:             }
  6726:             if ((l & 0x0002) != 0) {
  6727:               XEiJ.busWwe (a, XEiJ.regRn[ 1]);
  6728:               a += 2;
  6729:             }
  6730:             if ((l & 0x0004) != 0) {
  6731:               XEiJ.busWwe (a, XEiJ.regRn[ 2]);
  6732:               a += 2;
  6733:             }
  6734:             if ((l & 0x0008) != 0) {
  6735:               XEiJ.busWwe (a, XEiJ.regRn[ 3]);
  6736:               a += 2;
  6737:             }
  6738:             if ((l & 0x0010) != 0) {
  6739:               XEiJ.busWwe (a, XEiJ.regRn[ 4]);
  6740:               a += 2;
  6741:             }
  6742:             if ((l & 0x0020) != 0) {
  6743:               XEiJ.busWwe (a, XEiJ.regRn[ 5]);
  6744:               a += 2;
  6745:             }
  6746:             if ((l & 0x0040) != 0) {
  6747:               XEiJ.busWwe (a, XEiJ.regRn[ 6]);
  6748:               a += 2;
  6749:             }
  6750:             if ((byte) l < 0) {  //(l & 0x0080) != 0
  6751:               XEiJ.busWwe (a, XEiJ.regRn[ 7]);
  6752:               a += 2;
  6753:             }
  6754:             if ((l & 0x0100) != 0) {
  6755:               XEiJ.busWwe (a, XEiJ.regRn[ 8]);
  6756:               a += 2;
  6757:             }
  6758:             if ((l & 0x0200) != 0) {
  6759:               XEiJ.busWwe (a, XEiJ.regRn[ 9]);
  6760:               a += 2;
  6761:             }
  6762:             if ((l & 0x0400) != 0) {
  6763:               XEiJ.busWwe (a, XEiJ.regRn[10]);
  6764:               a += 2;
  6765:             }
  6766:             if ((l & 0x0800) != 0) {
  6767:               XEiJ.busWwe (a, XEiJ.regRn[11]);
  6768:               a += 2;
  6769:             }
  6770:             if ((l & 0x1000) != 0) {
  6771:               XEiJ.busWwe (a, XEiJ.regRn[12]);
  6772:               a += 2;
  6773:             }
  6774:             if ((l & 0x2000) != 0) {
  6775:               XEiJ.busWwe (a, XEiJ.regRn[13]);
  6776:               a += 2;
  6777:             }
  6778:             if ((l & 0x4000) != 0) {
  6779:               XEiJ.busWwe (a, XEiJ.regRn[14]);
  6780:               a += 2;
  6781:             }
  6782:             if ((short) l < 0) {  //(l & 0x8000) != 0
  6783:               XEiJ.busWwe (a, XEiJ.regRn[15]);
  6784:               a += 2;
  6785:             }
  6786:           } else if (XEiJ.IRP_MOVEM_LOOP) {  //16回ループする。コンパイラが展開する
  6787:             for (int i = 0; i <= 15; i++) {
  6788:               if ((l & 0x0001 << i) != 0) {
  6789:                 XEiJ.busWwe (a, XEiJ.regRn[i]);
  6790:                 a += 2;
  6791:               }
  6792:             }
  6793:           } else if (XEiJ.IRP_MOVEM_SHIFT_LEFT) {  //0になるまで左にシフトする
  6794:             l = XEiJ.MPU_BITREV_TABLE_0[l & 2047] | XEiJ.MPU_BITREV_TABLE_1[l << 10 >>> 21];  //Integer.reverse(l)
  6795:             for (int i = 0; l != 0; i++, l <<= 1) {
  6796:               if (l < 0) {
  6797:                 XEiJ.busWwe (a, XEiJ.regRn[i]);
  6798:                 a += 2;
  6799:               }
  6800:             }
  6801:           } else if (XEiJ.IRP_MOVEM_SHIFT_RIGHT) {  //0になるまで右にシフトする
  6802:             for (int i = 0; l != 0; i++, l >>>= 1) {
  6803:               if ((l & 1) != 0) {
  6804:                 XEiJ.busWwe (a, XEiJ.regRn[i]);
  6805:                 a += 2;
  6806:               }
  6807:             }
  6808:           } else if (XEiJ.IRP_MOVEM_ZEROS) {  //Integer.numberOfTrailingZerosを使う
  6809:             for (int i = 0; l != 0; ) {
  6810:               int k = Integer.numberOfTrailingZeros (l);
  6811:               XEiJ.busWwe (a, XEiJ.regRn[i += k]);
  6812:               a += 2;
  6813:               l = l >>> k & ~1;
  6814:             }
  6815:           }
  6816:         }
  6817:         XEiJ.mpuCycleCount += 4 + (a - t << 1);  //2バイト/個→4サイクル/個
  6818:       }
  6819:     }
  6820:     if (Profiling.PFF_ON) {
  6821:       Profiling.pffTotal[Profiling.PRF.irpMovemToMemWord.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpMovemToMemWord.ordinal ()];
  6822:       Profiling.pffCount[Profiling.PRF.irpMovemToMemWord.ordinal ()]++;
  6823:     }
  6824:   }  //irpMovemToMemWord
  6825: 
  6826:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  6827:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  6828:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  6829:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  6830:   //EXT.L Dr                                        |-|012346|-|-UUUU|-**00|D         |0100_100_011_000_rrr
  6831:   //MOVEM.L <list>,<ea>                             |-|012346|-|-----|-----|  M -WXZ  |0100_100_011_mmm_rrr-llllllllllllllll
  6832:   public static void irpMovemToMemLong () throws M68kException {
  6833:     if (Profiling.PFF_ON) {
  6834:       Profiling.pffStart[Profiling.PRF.irpMovemToMemLong.ordinal ()] = System.nanoTime ();
  6835:     }
  6836:     int ea = XEiJ.regOC & 63;
  6837:     if (ea < XEiJ.EA_AR) {  //EXT.L Dr
  6838:       XEiJ.mpuCycleCount += 4;
  6839:       int z;
  6840:       XEiJ.regRn[ea] = z = (short) XEiJ.regRn[ea];
  6841:       XEiJ.regCCR = z >> 28 & XEiJ.REG_CCR_N | (z == 0 ? XEiJ.regCCR & XEiJ.REG_CCR_X | XEiJ.REG_CCR_Z : XEiJ.regCCR & XEiJ.REG_CCR_X);  //ccr_tst
  6842:     } else {  //MOVEM.L <list>,<ea>
  6843:       int l = XEiJ.busRwze (XEiJ.regPC);  //pcwze。レジスタリスト。ゼロ拡張
  6844:       XEiJ.regPC += 2;
  6845:       if (ea >> 3 == XEiJ.MMM_MN) {  //-(Ar)
  6846:         //MOVEM.wl <list>,-(Ar)で<list>にArが含まれているとき、000/010は命令開始時のArを、020/030/040/060は命令開始時のAr-オペレーションサイズをメモリに書き込む
  6847:         //転送するレジスタが0個のときArは変化しない
  6848:         int arr = ea - (XEiJ.EA_MN - 8);
  6849:         int a = XEiJ.regRn[arr];
  6850:         if ((a & 1) != 0 && l != 0) {  //奇数アドレスで1ワード以上転送する
  6851:           M68kException.m6eNumber = M68kException.M6E_ADDRESS_ERROR;
  6852:           M68kException.m6eAddress = a;
  6853:           M68kException.m6eDirection = XEiJ.MPU_WR_WRITE;
  6854:           M68kException.m6eSize = XEiJ.MPU_SS_LONG;
  6855:           throw M68kException.m6eSignal;
  6856:         }
  6857:         int t = a;
  6858:         if (XEiJ.IRP_MOVEM_MAINMEMORY &&  //000のときMOVEMでメインメモリを特別扱いにする
  6859:             (DataBreakPoint.DBP_ON ? DataBreakPoint.dbpSuperMap : XEiJ.busSuperMap)[a - 4 >>> XEiJ.BUS_PAGE_BITS] == MemoryMappedDevice.MMD_MMR &&  //メインメモリ
  6860:             4 * 16 <= (a & XEiJ.BUS_PAGE_SIZE - 1)) {  //16個転送してもページを跨がない
  6861:           a &= XEiJ.BUS_MOTHER_MASK;
  6862:           if (XEiJ.IRP_MOVEM_EXPAND) {  //16回展開する
  6863:             if ((l & 0x0001) != 0) {
  6864:               a -= 4;
  6865:               int x = XEiJ.regRn[15];
  6866:               MainMemory.mmrM8[a    ] = (byte) (x >> 24);
  6867:               MainMemory.mmrM8[a + 1] = (byte) (x >> 16);
  6868:               MainMemory.mmrM8[a + 2] = (byte) (x >>  8);
  6869:               MainMemory.mmrM8[a + 3] = (byte)  x;
  6870:             }
  6871:             if ((l & 0x0002) != 0) {
  6872:               a -= 4;
  6873:               int x = XEiJ.regRn[14];
  6874:               MainMemory.mmrM8[a    ] = (byte) (x >> 24);
  6875:               MainMemory.mmrM8[a + 1] = (byte) (x >> 16);
  6876:               MainMemory.mmrM8[a + 2] = (byte) (x >>  8);
  6877:               MainMemory.mmrM8[a + 3] = (byte)  x;
  6878:             }
  6879:             if ((l & 0x0004) != 0) {
  6880:               a -= 4;
  6881:               int x = XEiJ.regRn[13];
  6882:               MainMemory.mmrM8[a    ] = (byte) (x >> 24);
  6883:               MainMemory.mmrM8[a + 1] = (byte) (x >> 16);
  6884:               MainMemory.mmrM8[a + 2] = (byte) (x >>  8);
  6885:               MainMemory.mmrM8[a + 3] = (byte)  x;
  6886:             }
  6887:             if ((l & 0x0008) != 0) {
  6888:               a -= 4;
  6889:               int x = XEiJ.regRn[12];
  6890:               MainMemory.mmrM8[a    ] = (byte) (x >> 24);
  6891:               MainMemory.mmrM8[a + 1] = (byte) (x >> 16);
  6892:               MainMemory.mmrM8[a + 2] = (byte) (x >>  8);
  6893:               MainMemory.mmrM8[a + 3] = (byte)  x;
  6894:             }
  6895:             if ((l & 0x0010) != 0) {
  6896:               a -= 4;
  6897:               int x = XEiJ.regRn[11];
  6898:               MainMemory.mmrM8[a    ] = (byte) (x >> 24);
  6899:               MainMemory.mmrM8[a + 1] = (byte) (x >> 16);
  6900:               MainMemory.mmrM8[a + 2] = (byte) (x >>  8);
  6901:               MainMemory.mmrM8[a + 3] = (byte)  x;
  6902:             }
  6903:             if ((l & 0x0020) != 0) {
  6904:               a -= 4;
  6905:               int x = XEiJ.regRn[10];
  6906:               MainMemory.mmrM8[a    ] = (byte) (x >> 24);
  6907:               MainMemory.mmrM8[a + 1] = (byte) (x >> 16);
  6908:               MainMemory.mmrM8[a + 2] = (byte) (x >>  8);
  6909:               MainMemory.mmrM8[a + 3] = (byte)  x;
  6910:             }
  6911:             if ((l & 0x0040) != 0) {
  6912:               a -= 4;
  6913:               int x = XEiJ.regRn[ 9];
  6914:               MainMemory.mmrM8[a    ] = (byte) (x >> 24);
  6915:               MainMemory.mmrM8[a + 1] = (byte) (x >> 16);
  6916:               MainMemory.mmrM8[a + 2] = (byte) (x >>  8);
  6917:               MainMemory.mmrM8[a + 3] = (byte)  x;
  6918:             }
  6919:             if ((byte) l < 0) {  //(l & 0x0080) != 0
  6920:               a -= 4;
  6921:               int x = XEiJ.regRn[ 8];
  6922:               MainMemory.mmrM8[a    ] = (byte) (x >> 24);
  6923:               MainMemory.mmrM8[a + 1] = (byte) (x >> 16);
  6924:               MainMemory.mmrM8[a + 2] = (byte) (x >>  8);
  6925:               MainMemory.mmrM8[a + 3] = (byte)  x;
  6926:             }
  6927:             if ((l & 0x0100) != 0) {
  6928:               a -= 4;
  6929:               int x = XEiJ.regRn[ 7];
  6930:               MainMemory.mmrM8[a    ] = (byte) (x >> 24);
  6931:               MainMemory.mmrM8[a + 1] = (byte) (x >> 16);
  6932:               MainMemory.mmrM8[a + 2] = (byte) (x >>  8);
  6933:               MainMemory.mmrM8[a + 3] = (byte)  x;
  6934:             }
  6935:             if ((l & 0x0200) != 0) {
  6936:               a -= 4;
  6937:               int x = XEiJ.regRn[ 6];
  6938:               MainMemory.mmrM8[a    ] = (byte) (x >> 24);
  6939:               MainMemory.mmrM8[a + 1] = (byte) (x >> 16);
  6940:               MainMemory.mmrM8[a + 2] = (byte) (x >>  8);
  6941:               MainMemory.mmrM8[a + 3] = (byte)  x;
  6942:             }
  6943:             if ((l & 0x0400) != 0) {
  6944:               a -= 4;
  6945:               int x = XEiJ.regRn[ 5];
  6946:               MainMemory.mmrM8[a    ] = (byte) (x >> 24);
  6947:               MainMemory.mmrM8[a + 1] = (byte) (x >> 16);
  6948:               MainMemory.mmrM8[a + 2] = (byte) (x >>  8);
  6949:               MainMemory.mmrM8[a + 3] = (byte)  x;
  6950:             }
  6951:             if ((l & 0x0800) != 0) {
  6952:               a -= 4;
  6953:               int x = XEiJ.regRn[ 4];
  6954:               MainMemory.mmrM8[a    ] = (byte) (x >> 24);
  6955:               MainMemory.mmrM8[a + 1] = (byte) (x >> 16);
  6956:               MainMemory.mmrM8[a + 2] = (byte) (x >>  8);
  6957:               MainMemory.mmrM8[a + 3] = (byte)  x;
  6958:             }
  6959:             if ((l & 0x1000) != 0) {
  6960:               a -= 4;
  6961:               int x = XEiJ.regRn[ 3];
  6962:               MainMemory.mmrM8[a    ] = (byte) (x >> 24);
  6963:               MainMemory.mmrM8[a + 1] = (byte) (x >> 16);
  6964:               MainMemory.mmrM8[a + 2] = (byte) (x >>  8);
  6965:               MainMemory.mmrM8[a + 3] = (byte)  x;
  6966:             }
  6967:             if ((l & 0x2000) != 0) {
  6968:               a -= 4;
  6969:               int x = XEiJ.regRn[ 2];
  6970:               MainMemory.mmrM8[a    ] = (byte) (x >> 24);
  6971:               MainMemory.mmrM8[a + 1] = (byte) (x >> 16);
  6972:               MainMemory.mmrM8[a + 2] = (byte) (x >>  8);
  6973:               MainMemory.mmrM8[a + 3] = (byte)  x;
  6974:             }
  6975:             if ((l & 0x4000) != 0) {
  6976:               a -= 4;
  6977:               int x = XEiJ.regRn[ 1];
  6978:               MainMemory.mmrM8[a    ] = (byte) (x >> 24);
  6979:               MainMemory.mmrM8[a + 1] = (byte) (x >> 16);
  6980:               MainMemory.mmrM8[a + 2] = (byte) (x >>  8);
  6981:               MainMemory.mmrM8[a + 3] = (byte)  x;
  6982:             }
  6983:             if ((short) l < 0) {  //(l & 0x8000) != 0
  6984:               a -= 4;
  6985:               int x = XEiJ.regRn[ 0];
  6986:               MainMemory.mmrM8[a    ] = (byte) (x >> 24);
  6987:               MainMemory.mmrM8[a + 1] = (byte) (x >> 16);
  6988:               MainMemory.mmrM8[a + 2] = (byte) (x >>  8);
  6989:               MainMemory.mmrM8[a + 3] = (byte)  x;
  6990:             }
  6991:           } else if (XEiJ.IRP_MOVEM_LOOP) {  //16回ループする。コンパイラが展開する
  6992:             for (int i = 15; i >= 0; i--) {
  6993:               if ((l & 0x8000 >>> i) != 0) {
  6994:                 a -= 4;
  6995:                 int x = XEiJ.regRn[i];
  6996:                 MainMemory.mmrM8[a    ] = (byte) (x >> 24);
  6997:                 MainMemory.mmrM8[a + 1] = (byte) (x >> 16);
  6998:                 MainMemory.mmrM8[a + 2] = (byte) (x >>  8);
  6999:                 MainMemory.mmrM8[a + 3] = (byte)  x;
  7000:               }
  7001:             }
  7002:           } else if (XEiJ.IRP_MOVEM_SHIFT_LEFT) {  //0になるまで左にシフトする
  7003:             l = XEiJ.MPU_BITREV_TABLE_0[l & 2047] | XEiJ.MPU_BITREV_TABLE_1[l << 10 >>> 21];  //Integer.reverse(l)
  7004:             for (int i = 15; l != 0; i--, l <<= 1) {
  7005:               if (l < 0) {
  7006:                 a -= 4;
  7007:                 int x = XEiJ.regRn[i];
  7008:                 MainMemory.mmrM8[a    ] = (byte) (x >> 24);
  7009:                 MainMemory.mmrM8[a + 1] = (byte) (x >> 16);
  7010:                 MainMemory.mmrM8[a + 2] = (byte) (x >>  8);
  7011:                 MainMemory.mmrM8[a + 3] = (byte)  x;
  7012:               }
  7013:             }
  7014:           } else if (XEiJ.IRP_MOVEM_SHIFT_RIGHT) {  //0になるまで右にシフトする
  7015:             for (int i = 15; l != 0; i--, l >>>= 1) {
  7016:               if ((l & 1) != 0) {
  7017:                 a -= 4;
  7018:                 int x = XEiJ.regRn[i];
  7019:                 MainMemory.mmrM8[a    ] = (byte) (x >> 24);
  7020:                 MainMemory.mmrM8[a + 1] = (byte) (x >> 16);
  7021:                 MainMemory.mmrM8[a + 2] = (byte) (x >>  8);
  7022:                 MainMemory.mmrM8[a + 3] = (byte)  x;
  7023:               }
  7024:             }
  7025:           } else if (XEiJ.IRP_MOVEM_ZEROS) {  //Integer.numberOfTrailingZerosを使う
  7026:             for (int i = 15; l != 0; ) {
  7027:               int k = Integer.numberOfTrailingZeros (l);
  7028:               a -= 4;
  7029:               int x = XEiJ.regRn[i -= k];
  7030:               MainMemory.mmrM8[a    ] = (byte) (x >> 24);
  7031:               MainMemory.mmrM8[a + 1] = (byte) (x >> 16);
  7032:               MainMemory.mmrM8[a + 2] = (byte) (x >>  8);
  7033:               MainMemory.mmrM8[a + 3] = (byte)  x;
  7034:               l = l >>> k & ~1;
  7035:             }
  7036:           }
  7037:           a = t - (short) (t - a);
  7038:         } else {  //メインメモリでないかページを跨ぐ可能性がある
  7039:           if (XEiJ.IRP_MOVEM_EXPAND) {  //16回展開する
  7040:             if ((l & 0x0001) != 0) {
  7041:               XEiJ.busWle (a -= 4, XEiJ.regRn[15]);
  7042:             }
  7043:             if ((l & 0x0002) != 0) {
  7044:               XEiJ.busWle (a -= 4, XEiJ.regRn[14]);
  7045:             }
  7046:             if ((l & 0x0004) != 0) {
  7047:               XEiJ.busWle (a -= 4, XEiJ.regRn[13]);
  7048:             }
  7049:             if ((l & 0x0008) != 0) {
  7050:               XEiJ.busWle (a -= 4, XEiJ.regRn[12]);
  7051:             }
  7052:             if ((l & 0x0010) != 0) {
  7053:               XEiJ.busWle (a -= 4, XEiJ.regRn[11]);
  7054:             }
  7055:             if ((l & 0x0020) != 0) {
  7056:               XEiJ.busWle (a -= 4, XEiJ.regRn[10]);
  7057:             }
  7058:             if ((l & 0x0040) != 0) {
  7059:               XEiJ.busWle (a -= 4, XEiJ.regRn[ 9]);
  7060:             }
  7061:             if ((byte) l < 0) {  //(l & 0x0080) != 0
  7062:               XEiJ.busWle (a -= 4, XEiJ.regRn[ 8]);
  7063:             }
  7064:             if ((l & 0x0100) != 0) {
  7065:               XEiJ.busWle (a -= 4, XEiJ.regRn[ 7]);
  7066:             }
  7067:             if ((l & 0x0200) != 0) {
  7068:               XEiJ.busWle (a -= 4, XEiJ.regRn[ 6]);
  7069:             }
  7070:             if ((l & 0x0400) != 0) {
  7071:               XEiJ.busWle (a -= 4, XEiJ.regRn[ 5]);
  7072:             }
  7073:             if ((l & 0x0800) != 0) {
  7074:               XEiJ.busWle (a -= 4, XEiJ.regRn[ 4]);
  7075:             }
  7076:             if ((l & 0x1000) != 0) {
  7077:               XEiJ.busWle (a -= 4, XEiJ.regRn[ 3]);
  7078:             }
  7079:             if ((l & 0x2000) != 0) {
  7080:               XEiJ.busWle (a -= 4, XEiJ.regRn[ 2]);
  7081:             }
  7082:             if ((l & 0x4000) != 0) {
  7083:               XEiJ.busWle (a -= 4, XEiJ.regRn[ 1]);
  7084:             }
  7085:             if ((short) l < 0) {  //(l & 0x8000) != 0
  7086:               XEiJ.busWle (a -= 4, XEiJ.regRn[ 0]);
  7087:             }
  7088:           } else if (XEiJ.IRP_MOVEM_LOOP) {  //16回ループする。コンパイラが展開する
  7089:             for (int i = 15; i >= 0; i--) {
  7090:               if ((l & 0x8000 >>> i) != 0) {
  7091:                 XEiJ.busWle (a -= 4, XEiJ.regRn[i]);
  7092:               }
  7093:             }
  7094:           } else if (XEiJ.IRP_MOVEM_SHIFT_LEFT) {  //0になるまで左にシフトする
  7095:             l = XEiJ.MPU_BITREV_TABLE_0[l & 2047] | XEiJ.MPU_BITREV_TABLE_1[l << 10 >>> 21];  //Integer.reverse(l)
  7096:             for (int i = 15; l != 0; i--, l <<= 1) {
  7097:               if (l < 0) {
  7098:                 XEiJ.busWle (a -= 4, XEiJ.regRn[i]);
  7099:               }
  7100:             }
  7101:           } else if (XEiJ.IRP_MOVEM_SHIFT_RIGHT) {  //0になるまで右にシフトする
  7102:             for (int i = 15; l != 0; i--, l >>>= 1) {
  7103:               if ((l & 1) != 0) {
  7104:                 XEiJ.busWle (a -= 4, XEiJ.regRn[i]);
  7105:               }
  7106:             }
  7107:           } else if (XEiJ.IRP_MOVEM_ZEROS) {  //Integer.numberOfTrailingZerosを使う
  7108:             for (int i = 15; l != 0; ) {
  7109:               int k = Integer.numberOfTrailingZeros (l);
  7110:               XEiJ.busWle (a -= 4, XEiJ.regRn[i -= k]);
  7111:               l = l >>> k & ~1;
  7112:             }
  7113:           }
  7114:         }
  7115:         XEiJ.regRn[arr] = a;
  7116:         XEiJ.mpuCycleCount += 8 + (t - a << 1);  //4バイト/個→8サイクル/個
  7117:       } else {  //-(Ar)以外
  7118:         int a = efaCltLong (ea);
  7119:         if ((a & 1) != 0 && l != 0) {  //奇数アドレスで1ワード以上転送する
  7120:           M68kException.m6eNumber = M68kException.M6E_ADDRESS_ERROR;
  7121:           M68kException.m6eAddress = a;
  7122:           M68kException.m6eDirection = XEiJ.MPU_WR_WRITE;
  7123:           M68kException.m6eSize = XEiJ.MPU_SS_LONG;
  7124:           throw M68kException.m6eSignal;
  7125:         }
  7126:         int t = a;
  7127:         if (XEiJ.IRP_MOVEM_MAINMEMORY &&  //000のときMOVEMでメインメモリを特別扱いにする
  7128:             (DataBreakPoint.DBP_ON ? DataBreakPoint.dbpSuperMap : XEiJ.busSuperMap)[a >>> XEiJ.BUS_PAGE_BITS] == MemoryMappedDevice.MMD_MMR &&  //メインメモリ
  7129:             (a & XEiJ.BUS_PAGE_SIZE - 1) <= XEiJ.BUS_PAGE_SIZE - 4 * 16) {  //16個転送してもページを跨がない
  7130:           a &= XEiJ.BUS_MOTHER_MASK;
  7131:           if (XEiJ.IRP_MOVEM_EXPAND) {  //16回展開する
  7132:             if ((l & 0x0001) != 0) {
  7133:               int x = XEiJ.regRn[ 0];
  7134:               MainMemory.mmrM8[a    ] = (byte) (x >> 24);
  7135:               MainMemory.mmrM8[a + 1] = (byte) (x >> 16);
  7136:               MainMemory.mmrM8[a + 2] = (byte) (x >>  8);
  7137:               MainMemory.mmrM8[a + 3] = (byte)  x;
  7138:               a += 4;
  7139:             }
  7140:             if ((l & 0x0002) != 0) {
  7141:               int x = XEiJ.regRn[ 1];
  7142:               MainMemory.mmrM8[a    ] = (byte) (x >> 24);
  7143:               MainMemory.mmrM8[a + 1] = (byte) (x >> 16);
  7144:               MainMemory.mmrM8[a + 2] = (byte) (x >>  8);
  7145:               MainMemory.mmrM8[a + 3] = (byte)  x;
  7146:               a += 4;
  7147:             }
  7148:             if ((l & 0x0004) != 0) {
  7149:               int x = XEiJ.regRn[ 2];
  7150:               MainMemory.mmrM8[a    ] = (byte) (x >> 24);
  7151:               MainMemory.mmrM8[a + 1] = (byte) (x >> 16);
  7152:               MainMemory.mmrM8[a + 2] = (byte) (x >>  8);
  7153:               MainMemory.mmrM8[a + 3] = (byte)  x;
  7154:               a += 4;
  7155:             }
  7156:             if ((l & 0x0008) != 0) {
  7157:               int x = XEiJ.regRn[ 3];
  7158:               MainMemory.mmrM8[a    ] = (byte) (x >> 24);
  7159:               MainMemory.mmrM8[a + 1] = (byte) (x >> 16);
  7160:               MainMemory.mmrM8[a + 2] = (byte) (x >>  8);
  7161:               MainMemory.mmrM8[a + 3] = (byte)  x;
  7162:               a += 4;
  7163:             }
  7164:             if ((l & 0x0010) != 0) {
  7165:               int x = XEiJ.regRn[ 4];
  7166:               MainMemory.mmrM8[a    ] = (byte) (x >> 24);
  7167:               MainMemory.mmrM8[a + 1] = (byte) (x >> 16);
  7168:               MainMemory.mmrM8[a + 2] = (byte) (x >>  8);
  7169:               MainMemory.mmrM8[a + 3] = (byte)  x;
  7170:               a += 4;
  7171:             }
  7172:             if ((l & 0x0020) != 0) {
  7173:               int x = XEiJ.regRn[ 5];
  7174:               MainMemory.mmrM8[a    ] = (byte) (x >> 24);
  7175:               MainMemory.mmrM8[a + 1] = (byte) (x >> 16);
  7176:               MainMemory.mmrM8[a + 2] = (byte) (x >>  8);
  7177:               MainMemory.mmrM8[a + 3] = (byte)  x;
  7178:               a += 4;
  7179:             }
  7180:             if ((l & 0x0040) != 0) {
  7181:               int x = XEiJ.regRn[ 6];
  7182:               MainMemory.mmrM8[a    ] = (byte) (x >> 24);
  7183:               MainMemory.mmrM8[a + 1] = (byte) (x >> 16);
  7184:               MainMemory.mmrM8[a + 2] = (byte) (x >>  8);
  7185:               MainMemory.mmrM8[a + 3] = (byte)  x;
  7186:               a += 4;
  7187:             }
  7188:             if ((byte) l < 0) {  //(l & 0x0080) != 0
  7189:               int x = XEiJ.regRn[ 7];
  7190:               MainMemory.mmrM8[a    ] = (byte) (x >> 24);
  7191:               MainMemory.mmrM8[a + 1] = (byte) (x >> 16);
  7192:               MainMemory.mmrM8[a + 2] = (byte) (x >>  8);
  7193:               MainMemory.mmrM8[a + 3] = (byte)  x;
  7194:               a += 4;
  7195:             }
  7196:             if ((l & 0x0100) != 0) {
  7197:               int x = XEiJ.regRn[ 8];
  7198:               MainMemory.mmrM8[a    ] = (byte) (x >> 24);
  7199:               MainMemory.mmrM8[a + 1] = (byte) (x >> 16);
  7200:               MainMemory.mmrM8[a + 2] = (byte) (x >>  8);
  7201:               MainMemory.mmrM8[a + 3] = (byte)  x;
  7202:               a += 4;
  7203:             }
  7204:             if ((l & 0x0200) != 0) {
  7205:               int x = XEiJ.regRn[ 9];
  7206:               MainMemory.mmrM8[a    ] = (byte) (x >> 24);
  7207:               MainMemory.mmrM8[a + 1] = (byte) (x >> 16);
  7208:               MainMemory.mmrM8[a + 2] = (byte) (x >>  8);
  7209:               MainMemory.mmrM8[a + 3] = (byte)  x;
  7210:               a += 4;
  7211:             }
  7212:             if ((l & 0x0400) != 0) {
  7213:               int x = XEiJ.regRn[10];
  7214:               MainMemory.mmrM8[a    ] = (byte) (x >> 24);
  7215:               MainMemory.mmrM8[a + 1] = (byte) (x >> 16);
  7216:               MainMemory.mmrM8[a + 2] = (byte) (x >>  8);
  7217:               MainMemory.mmrM8[a + 3] = (byte)  x;
  7218:               a += 4;
  7219:             }
  7220:             if ((l & 0x0800) != 0) {
  7221:               int x = XEiJ.regRn[11];
  7222:               MainMemory.mmrM8[a    ] = (byte) (x >> 24);
  7223:               MainMemory.mmrM8[a + 1] = (byte) (x >> 16);
  7224:               MainMemory.mmrM8[a + 2] = (byte) (x >>  8);
  7225:               MainMemory.mmrM8[a + 3] = (byte)  x;
  7226:               a += 4;
  7227:             }
  7228:             if ((l & 0x1000) != 0) {
  7229:               int x = XEiJ.regRn[12];
  7230:               MainMemory.mmrM8[a    ] = (byte) (x >> 24);
  7231:               MainMemory.mmrM8[a + 1] = (byte) (x >> 16);
  7232:               MainMemory.mmrM8[a + 2] = (byte) (x >>  8);
  7233:               MainMemory.mmrM8[a + 3] = (byte)  x;
  7234:               a += 4;
  7235:             }
  7236:             if ((l & 0x2000) != 0) {
  7237:               int x = XEiJ.regRn[13];
  7238:               MainMemory.mmrM8[a    ] = (byte) (x >> 24);
  7239:               MainMemory.mmrM8[a + 1] = (byte) (x >> 16);
  7240:               MainMemory.mmrM8[a + 2] = (byte) (x >>  8);
  7241:               MainMemory.mmrM8[a + 3] = (byte)  x;
  7242:               a += 4;
  7243:             }
  7244:             if ((l & 0x4000) != 0) {
  7245:               int x = XEiJ.regRn[14];
  7246:               MainMemory.mmrM8[a    ] = (byte) (x >> 24);
  7247:               MainMemory.mmrM8[a + 1] = (byte) (x >> 16);
  7248:               MainMemory.mmrM8[a + 2] = (byte) (x >>  8);
  7249:               MainMemory.mmrM8[a + 3] = (byte)  x;
  7250:               a += 4;
  7251:             }
  7252:             if ((short) l < 0) {  //(l & 0x8000) != 0
  7253:               int x = XEiJ.regRn[15];
  7254:               MainMemory.mmrM8[a    ] = (byte) (x >> 24);
  7255:               MainMemory.mmrM8[a + 1] = (byte) (x >> 16);
  7256:               MainMemory.mmrM8[a + 2] = (byte) (x >>  8);
  7257:               MainMemory.mmrM8[a + 3] = (byte)  x;
  7258:               a += 4;
  7259:             }
  7260:           } else if (XEiJ.IRP_MOVEM_LOOP) {  //16回ループする。コンパイラが展開する
  7261:             for (int i = 0; i <= 15; i++) {
  7262:               if ((l & 0x0001 << i) != 0) {
  7263:                 int x = XEiJ.regRn[i];
  7264:                 MainMemory.mmrM8[a    ] = (byte) (x >> 24);
  7265:                 MainMemory.mmrM8[a + 1] = (byte) (x >> 16);
  7266:                 MainMemory.mmrM8[a + 2] = (byte) (x >>  8);
  7267:                 MainMemory.mmrM8[a + 3] = (byte)  x;
  7268:                 a += 4;
  7269:               }
  7270:             }
  7271:           } else if (XEiJ.IRP_MOVEM_SHIFT_LEFT) {  //0になるまで左にシフトする
  7272:             l = XEiJ.MPU_BITREV_TABLE_0[l & 2047] | XEiJ.MPU_BITREV_TABLE_1[l << 10 >>> 21];  //Integer.reverse(l)
  7273:             for (int i = 0; l != 0; i++, l <<= 1) {
  7274:               if (l < 0) {
  7275:                 int x = XEiJ.regRn[i];
  7276:                 MainMemory.mmrM8[a    ] = (byte) (x >> 24);
  7277:                 MainMemory.mmrM8[a + 1] = (byte) (x >> 16);
  7278:                 MainMemory.mmrM8[a + 2] = (byte) (x >>  8);
  7279:                 MainMemory.mmrM8[a + 3] = (byte)  x;
  7280:                 a += 4;
  7281:               }
  7282:             }
  7283:           } else if (XEiJ.IRP_MOVEM_SHIFT_RIGHT) {  //0になるまで右にシフトする
  7284:             for (int i = 0; l != 0; i++, l >>>= 1) {
  7285:               if ((l & 1) != 0) {
  7286:                 int x = XEiJ.regRn[i];
  7287:                 MainMemory.mmrM8[a    ] = (byte) (x >> 24);
  7288:                 MainMemory.mmrM8[a + 1] = (byte) (x >> 16);
  7289:                 MainMemory.mmrM8[a + 2] = (byte) (x >>  8);
  7290:                 MainMemory.mmrM8[a + 3] = (byte)  x;
  7291:                 a += 4;
  7292:               }
  7293:             }
  7294:           } else if (XEiJ.IRP_MOVEM_ZEROS) {  //Integer.numberOfTrailingZerosを使う
  7295:             for (int i = 0; l != 0; ) {
  7296:               int k = Integer.numberOfTrailingZeros (l);
  7297:               int x = XEiJ.regRn[i += k];
  7298:               MainMemory.mmrM8[a    ] = (byte) (x >> 24);
  7299:               MainMemory.mmrM8[a + 1] = (byte) (x >> 16);
  7300:               MainMemory.mmrM8[a + 2] = (byte) (x >>  8);
  7301:               MainMemory.mmrM8[a + 3] = (byte)  x;
  7302:               a += 4;
  7303:               l = l >>> k & ~1;
  7304:             }
  7305:           }
  7306:           a = t + (short) (a - t);
  7307:         } else {  //メインメモリでないかページを跨ぐ可能性がある
  7308:           if (XEiJ.IRP_MOVEM_EXPAND) {  //16回展開する
  7309:             if ((l & 0x0001) != 0) {
  7310:               XEiJ.busWle (a, XEiJ.regRn[ 0]);
  7311:               a += 4;
  7312:             }
  7313:             if ((l & 0x0002) != 0) {
  7314:               XEiJ.busWle (a, XEiJ.regRn[ 1]);
  7315:               a += 4;
  7316:             }
  7317:             if ((l & 0x0004) != 0) {
  7318:               XEiJ.busWle (a, XEiJ.regRn[ 2]);
  7319:               a += 4;
  7320:             }
  7321:             if ((l & 0x0008) != 0) {
  7322:               XEiJ.busWle (a, XEiJ.regRn[ 3]);
  7323:               a += 4;
  7324:             }
  7325:             if ((l & 0x0010) != 0) {
  7326:               XEiJ.busWle (a, XEiJ.regRn[ 4]);
  7327:               a += 4;
  7328:             }
  7329:             if ((l & 0x0020) != 0) {
  7330:               XEiJ.busWle (a, XEiJ.regRn[ 5]);
  7331:               a += 4;
  7332:             }
  7333:             if ((l & 0x0040) != 0) {
  7334:               XEiJ.busWle (a, XEiJ.regRn[ 6]);
  7335:               a += 4;
  7336:             }
  7337:             if ((byte) l < 0) {  //(l & 0x0080) != 0
  7338:               XEiJ.busWle (a, XEiJ.regRn[ 7]);
  7339:               a += 4;
  7340:             }
  7341:             if ((l & 0x0100) != 0) {
  7342:               XEiJ.busWle (a, XEiJ.regRn[ 8]);
  7343:               a += 4;
  7344:             }
  7345:             if ((l & 0x0200) != 0) {
  7346:               XEiJ.busWle (a, XEiJ.regRn[ 9]);
  7347:               a += 4;
  7348:             }
  7349:             if ((l & 0x0400) != 0) {
  7350:               XEiJ.busWle (a, XEiJ.regRn[10]);
  7351:               a += 4;
  7352:             }
  7353:             if ((l & 0x0800) != 0) {
  7354:               XEiJ.busWle (a, XEiJ.regRn[11]);
  7355:               a += 4;
  7356:             }
  7357:             if ((l & 0x1000) != 0) {
  7358:               XEiJ.busWle (a, XEiJ.regRn[12]);
  7359:               a += 4;
  7360:             }
  7361:             if ((l & 0x2000) != 0) {
  7362:               XEiJ.busWle (a, XEiJ.regRn[13]);
  7363:               a += 4;
  7364:             }
  7365:             if ((l & 0x4000) != 0) {
  7366:               XEiJ.busWle (a, XEiJ.regRn[14]);
  7367:               a += 4;
  7368:             }
  7369:             if ((short) l < 0) {  //(l & 0x8000) != 0
  7370:               XEiJ.busWle (a, XEiJ.regRn[15]);
  7371:               a += 4;
  7372:             }
  7373:           } else if (XEiJ.IRP_MOVEM_LOOP) {  //16回ループする。コンパイラが展開する
  7374:             for (int i = 0; i <= 15; i++) {
  7375:               if ((l & 0x0001 << i) != 0) {
  7376:                 XEiJ.busWle (a, XEiJ.regRn[i]);
  7377:                 a += 4;
  7378:               }
  7379:             }
  7380:           } else if (XEiJ.IRP_MOVEM_SHIFT_LEFT) {  //0になるまで左にシフトする
  7381:             l = XEiJ.MPU_BITREV_TABLE_0[l & 2047] | XEiJ.MPU_BITREV_TABLE_1[l << 10 >>> 21];  //Integer.reverse(l)
  7382:             for (int i = 0; l != 0; i++, l <<= 1) {
  7383:               if (l < 0) {
  7384:                 XEiJ.busWle (a, XEiJ.regRn[i]);
  7385:                 a += 4;
  7386:               }
  7387:             }
  7388:           } else if (XEiJ.IRP_MOVEM_SHIFT_RIGHT) {  //0になるまで右にシフトする
  7389:             for (int i = 0; l != 0; i++, l >>>= 1) {
  7390:               if ((l & 1) != 0) {
  7391:                 XEiJ.busWle (a, XEiJ.regRn[i]);
  7392:                 a += 4;
  7393:               }
  7394:             }
  7395:           } else if (XEiJ.IRP_MOVEM_ZEROS) {  //Integer.numberOfTrailingZerosを使う
  7396:             for (int i = 0; l != 0; ) {
  7397:               int k = Integer.numberOfTrailingZeros (l);
  7398:               XEiJ.busWle (a, XEiJ.regRn[i += k]);
  7399:               a += 4;
  7400:               l = l >>> k & ~1;
  7401:             }
  7402:           }
  7403:         }
  7404:         XEiJ.mpuCycleCount += 4 + (a - t << 1);  //4バイト/個→8サイクル/個
  7405:       }
  7406:     }
  7407:     if (Profiling.PFF_ON) {
  7408:       Profiling.pffTotal[Profiling.PRF.irpMovemToMemLong.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpMovemToMemLong.ordinal ()];
  7409:       Profiling.pffCount[Profiling.PRF.irpMovemToMemLong.ordinal ()]++;
  7410:     }
  7411:   }  //irpMovemToMemLong
  7412: 
  7413:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  7414:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  7415:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  7416:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  7417:   //TST.B <ea>                                      |-|012346|-|-UUUU|-**00|D M+-WXZ  |0100_101_000_mmm_rrr
  7418:   public static void irpTstByte () throws M68kException {
  7419:     if (Profiling.PFF_ON) {
  7420:       Profiling.pffStart[Profiling.PRF.irpTstByte.ordinal ()] = System.nanoTime ();
  7421:     }
  7422:     XEiJ.mpuCycleCount += 4;
  7423:     int ea = XEiJ.regOC & 63;
  7424:     XEiJ.regCCR = XEiJ.regCCR & XEiJ.REG_CCR_X | XEiJ.MPU_TSTB_TABLE[255 & (ea < XEiJ.EA_AR ? XEiJ.regRn[ea] : XEiJ.busRbs (efaMltByte (ea)))];  //ccr_tst_byte。アドレッシングモードに注意
  7425:     if (Profiling.PFF_ON) {
  7426:       Profiling.pffTotal[Profiling.PRF.irpTstByte.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpTstByte.ordinal ()];
  7427:       Profiling.pffCount[Profiling.PRF.irpTstByte.ordinal ()]++;
  7428:     }
  7429:   }  //irpTstByte
  7430: 
  7431:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  7432:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  7433:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  7434:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  7435:   //TST.W <ea>                                      |-|012346|-|-UUUU|-**00|D M+-WXZ  |0100_101_001_mmm_rrr
  7436:   public static void irpTstWord () throws M68kException {
  7437:     if (Profiling.PFF_ON) {
  7438:       Profiling.pffStart[Profiling.PRF.irpTstWord.ordinal ()] = System.nanoTime ();
  7439:     }
  7440:     XEiJ.mpuCycleCount += 4;
  7441:     int ea = XEiJ.regOC & 63;
  7442:     int z = ea < XEiJ.EA_AR ? XEiJ.regRn[ea] : XEiJ.busRws (efaMltWord (ea));  //アドレッシングモードに注意
  7443:     XEiJ.regCCR = XEiJ.regCCR & XEiJ.REG_CCR_X | (char) z - 1 >> 31 & XEiJ.REG_CCR_Z | ((short) z < 0 ? XEiJ.REG_CCR_N : 0);  //ccr_tst_word
  7444:     if (Profiling.PFF_ON) {
  7445:       Profiling.pffTotal[Profiling.PRF.irpTstWord.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpTstWord.ordinal ()];
  7446:       Profiling.pffCount[Profiling.PRF.irpTstWord.ordinal ()]++;
  7447:     }
  7448:   }  //irpTstWord
  7449: 
  7450:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  7451:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  7452:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  7453:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  7454:   //TST.L <ea>                                      |-|012346|-|-UUUU|-**00|D M+-WXZ  |0100_101_010_mmm_rrr
  7455:   public static void irpTstLong () throws M68kException {
  7456:     if (Profiling.PFF_ON) {
  7457:       Profiling.pffStart[Profiling.PRF.irpTstLong.ordinal ()] = System.nanoTime ();
  7458:     }
  7459:     XEiJ.mpuCycleCount += 4;
  7460:     int ea = XEiJ.regOC & 63;
  7461:     int z = ea < XEiJ.EA_AR ? XEiJ.regRn[ea] : XEiJ.busRls (efaMltLong (ea));  //アドレッシングモードに注意
  7462:     XEiJ.regCCR = z >> 28 & XEiJ.REG_CCR_N | (z == 0 ? XEiJ.regCCR & XEiJ.REG_CCR_X | XEiJ.REG_CCR_Z : XEiJ.regCCR & XEiJ.REG_CCR_X);  //ccr_tst
  7463:     if (Profiling.PFF_ON) {
  7464:       Profiling.pffTotal[Profiling.PRF.irpTstLong.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpTstLong.ordinal ()];
  7465:       Profiling.pffCount[Profiling.PRF.irpTstLong.ordinal ()]++;
  7466:     }
  7467:   }  //irpTstLong
  7468: 
  7469:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  7470:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  7471:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  7472:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  7473:   //TAS.B <ea>                                      |-|012346|-|-UUUU|-**00|D M+-WXZ  |0100_101_011_mmm_rrr
  7474:   //ILLEGAL                                         |-|012346|-|-----|-----|          |0100_101_011_111_100
  7475:   public static void irpTas () throws M68kException {
  7476:     if (Profiling.PFF_ON) {
  7477:       Profiling.pffStart[Profiling.PRF.irpTas.ordinal ()] = System.nanoTime ();
  7478:     }
  7479:     int ea = XEiJ.regOC & 63;
  7480:     int z;
  7481:     if (ea < XEiJ.EA_AR) {  //TAS.B Dr
  7482:       XEiJ.mpuCycleCount += 4;
  7483:       XEiJ.regRn[ea] = 0x80 | (z = XEiJ.regRn[ea]);
  7484:     } else {  //TAS.B <mem>
  7485:       XEiJ.mpuCycleCount += 14;
  7486:       int a = efaMltByte (ea);
  7487:       XEiJ.busWb (a, 0x80 | (z = XEiJ.busRbs (a)));
  7488:     }
  7489:     XEiJ.regCCR = XEiJ.regCCR & XEiJ.REG_CCR_X | XEiJ.MPU_TSTB_TABLE[255 & z];  //ccr_tst_byte
  7490:     if (Profiling.PFF_ON) {
  7491:       Profiling.pffTotal[Profiling.PRF.irpTas.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpTas.ordinal ()];
  7492:       Profiling.pffCount[Profiling.PRF.irpTas.ordinal ()]++;
  7493:     }
  7494:   }  //irpTas
  7495: 
  7496:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  7497:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  7498:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  7499:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  7500:   //SATS.L Dr                                       |-|------|-|-UUUU|-**00|D         |0100_110_010_000_rrr (ISA_B)
  7501:   //MOVEM.W <ea>,<list>                             |-|012346|-|-----|-----|  M+ WXZP |0100_110_010_mmm_rrr-llllllllllllllll
  7502:   //
  7503:   //SATS.L Dr
  7504:   //  VがセットされていたらDrを符号が逆で絶対値が最大の値にする(直前のDrに対する演算を飽和演算にする)
  7505:   public static void irpMovemToRegWord () throws M68kException {
  7506:     if (Profiling.PFF_ON) {
  7507:       Profiling.pffStart[Profiling.PRF.irpMovemToRegWord.ordinal ()] = System.nanoTime ();
  7508:     }
  7509:     int ea = XEiJ.regOC & 63;
  7510:     if (ea < XEiJ.EA_AR) {  //SATS.L Dr
  7511:       XEiJ.mpuCycleCount += 4;
  7512:       int z = XEiJ.regRn[ea];
  7513:       if (XEiJ.TEST_BIT_1_SHIFT ? XEiJ.regCCR << 31 - 1 < 0 : (XEiJ.regCCR & XEiJ.REG_CCR_V) != 0) {  //Vがセットされているとき
  7514:         XEiJ.regRn[ea] = z = z >> 31 ^ 0x80000000;  //符号が逆で絶対値が最大の値にする
  7515:       }
  7516:       XEiJ.regCCR = z >> 28 & XEiJ.REG_CCR_N | (z == 0 ? XEiJ.regCCR & XEiJ.REG_CCR_X | XEiJ.REG_CCR_Z : XEiJ.regCCR & XEiJ.REG_CCR_X);  //ccr_tst
  7517:     } else {  //MOVEM.W <ea>,<list>
  7518:       //! 軽量化。MC68000のMOVEM.W <ea>,<list>は1ワード余分にリードするが省略する
  7519:       //  MC68000のMOVEM.W <ea>,<list>は1ワード余分にリードするため転送する領域の直後にアクセスできない領域があるとバスエラーが発生する
  7520:       //  RAMDISK.SYSを高速化しようとしてデータ転送ルーチンの転送命令をすべてMOVEMに変更してしまうと、
  7521:       //  12MBフル実装でないX68000の実機で最後のセクタをアクセスしたときだけバスエラーが出て動かなくなるのはこれが原因
  7522:       int l = XEiJ.busRwze (XEiJ.regPC);  //pcwze。レジスタリスト。ゼロ拡張
  7523:       XEiJ.regPC += 2;
  7524:       int arr, a;
  7525:       if (ea >> 3 == XEiJ.MMM_MP) {  //(Ar)+
  7526:         XEiJ.mpuCycleCount += 12;
  7527:         arr = ea - (XEiJ.EA_MP - 8);
  7528:         a = XEiJ.regRn[arr];
  7529:       } else {  //(Ar)+以外
  7530:         XEiJ.mpuCycleCount += 8;
  7531:         arr = 16;
  7532:         a = efaCntWord (ea);
  7533:       }
  7534:       if ((a & 1) != 0 && l != 0) {  //奇数アドレスで1ワード以上転送する
  7535:         M68kException.m6eNumber = M68kException.M6E_ADDRESS_ERROR;
  7536:         M68kException.m6eAddress = a;
  7537:         M68kException.m6eDirection = XEiJ.MPU_WR_READ;
  7538:         M68kException.m6eSize = XEiJ.MPU_SS_WORD;
  7539:         throw M68kException.m6eSignal;
  7540:       }
  7541:       int t = a;
  7542:       if (XEiJ.IRP_MOVEM_MAINMEMORY &&  //000のときMOVEMでメインメモリを特別扱いにする
  7543:           (DataBreakPoint.DBP_ON ? DataBreakPoint.dbpSuperMap : XEiJ.busSuperMap)[a >>> XEiJ.BUS_PAGE_BITS] == MemoryMappedDevice.MMD_MMR &&  //メインメモリ
  7544:           (a & XEiJ.BUS_PAGE_SIZE - 1) <= XEiJ.BUS_PAGE_SIZE - 2 * 16) {  //16個転送してもページを跨がない
  7545:         a &= XEiJ.BUS_MOTHER_MASK;
  7546:         if (XEiJ.IRP_MOVEM_EXPAND) {  //16回展開する
  7547:           if ((l & 0x0001) != 0) {
  7548:             XEiJ.regRn[ 0] = MainMemory.mmrM8[a] << 8 | MainMemory.mmrM8[a + 1] & 255;  //データレジスタも符号拡張して32bit全部書き換える
  7549:             a += 2;
  7550:           }
  7551:           if ((l & 0x0002) != 0) {
  7552:             XEiJ.regRn[ 1] = MainMemory.mmrM8[a] << 8 | MainMemory.mmrM8[a + 1] & 255;  //データレジスタも符号拡張して32bit全部書き換える
  7553:             a += 2;
  7554:           }
  7555:           if ((l & 0x0004) != 0) {
  7556:             XEiJ.regRn[ 2] = MainMemory.mmrM8[a] << 8 | MainMemory.mmrM8[a + 1] & 255;  //データレジスタも符号拡張して32bit全部書き換える
  7557:             a += 2;
  7558:           }
  7559:           if ((l & 0x0008) != 0) {
  7560:             XEiJ.regRn[ 3] = MainMemory.mmrM8[a] << 8 | MainMemory.mmrM8[a + 1] & 255;  //データレジスタも符号拡張して32bit全部書き換える
  7561:             a += 2;
  7562:           }
  7563:           if ((l & 0x0010) != 0) {
  7564:             XEiJ.regRn[ 4] = MainMemory.mmrM8[a] << 8 | MainMemory.mmrM8[a + 1] & 255;  //データレジスタも符号拡張して32bit全部書き換える
  7565:             a += 2;
  7566:           }
  7567:           if ((l & 0x0020) != 0) {
  7568:             XEiJ.regRn[ 5] = MainMemory.mmrM8[a] << 8 | MainMemory.mmrM8[a + 1] & 255;  //データレジスタも符号拡張して32bit全部書き換える
  7569:             a += 2;
  7570:           }
  7571:           if ((l & 0x0040) != 0) {
  7572:             XEiJ.regRn[ 6] = MainMemory.mmrM8[a] << 8 | MainMemory.mmrM8[a + 1] & 255;  //データレジスタも符号拡張して32bit全部書き換える
  7573:             a += 2;
  7574:           }
  7575:           if ((byte) l < 0) {  //(l & 0x0080) != 0
  7576:             XEiJ.regRn[ 7] = MainMemory.mmrM8[a] << 8 | MainMemory.mmrM8[a + 1] & 255;  //データレジスタも符号拡張して32bit全部書き換える
  7577:             a += 2;
  7578:           }
  7579:           if ((l & 0x0100) != 0) {
  7580:             XEiJ.regRn[ 8] = MainMemory.mmrM8[a] << 8 | MainMemory.mmrM8[a + 1] & 255;  //符号拡張して32bit全部書き換える
  7581:             a += 2;
  7582:           }
  7583:           if ((l & 0x0200) != 0) {
  7584:             XEiJ.regRn[ 9] = MainMemory.mmrM8[a] << 8 | MainMemory.mmrM8[a + 1] & 255;  //符号拡張して32bit全部書き換える
  7585:             a += 2;
  7586:           }
  7587:           if ((l & 0x0400) != 0) {
  7588:             XEiJ.regRn[10] = MainMemory.mmrM8[a] << 8 | MainMemory.mmrM8[a + 1] & 255;  //符号拡張して32bit全部書き換える
  7589:             a += 2;
  7590:           }
  7591:           if ((l & 0x0800) != 0) {
  7592:             XEiJ.regRn[11] = MainMemory.mmrM8[a] << 8 | MainMemory.mmrM8[a + 1] & 255;  //符号拡張して32bit全部書き換える
  7593:             a += 2;
  7594:           }
  7595:           if ((l & 0x1000) != 0) {
  7596:             XEiJ.regRn[12] = MainMemory.mmrM8[a] << 8 | MainMemory.mmrM8[a + 1] & 255;  //符号拡張して32bit全部書き換える
  7597:             a += 2;
  7598:           }
  7599:           if ((l & 0x2000) != 0) {
  7600:             XEiJ.regRn[13] = MainMemory.mmrM8[a] << 8 | MainMemory.mmrM8[a + 1] & 255;  //符号拡張して32bit全部書き換える
  7601:             a += 2;
  7602:           }
  7603:           if ((l & 0x4000) != 0) {
  7604:             XEiJ.regRn[14] = MainMemory.mmrM8[a] << 8 | MainMemory.mmrM8[a + 1] & 255;  //符号拡張して32bit全部書き換える
  7605:             a += 2;
  7606:           }
  7607:           if ((short) l < 0) {  //(l & 0x8000) != 0
  7608:             XEiJ.regRn[15] = MainMemory.mmrM8[a] << 8 | MainMemory.mmrM8[a + 1] & 255;  //符号拡張して32bit全部書き換える
  7609:             a += 2;
  7610:           }
  7611:         } else if (XEiJ.IRP_MOVEM_LOOP) {  //16回ループする。コンパイラが展開する
  7612:           for (int i = 0; i <= 15; i++) {
  7613:             if ((l & 0x0001 << i) != 0) {
  7614:               XEiJ.regRn[i] = MainMemory.mmrM8[a] << 8 | MainMemory.mmrM8[a + 1] & 255;  //(データレジスタも)符号拡張して32bit全部書き換える
  7615:               a += 2;
  7616:             }
  7617:           }
  7618:         } else if (XEiJ.IRP_MOVEM_SHIFT_LEFT) {  //0になるまで左にシフトする
  7619:           l = XEiJ.MPU_BITREV_TABLE_0[l & 2047] | XEiJ.MPU_BITREV_TABLE_1[l << 10 >>> 21];  //Integer.reverse(l)
  7620:           for (int i = 0; l != 0; i++, l <<= 1) {
  7621:             if (l < 0) {
  7622:               XEiJ.regRn[i] = MainMemory.mmrM8[a] << 8 | MainMemory.mmrM8[a + 1] & 255;  //(データレジスタも)符号拡張して32bit全部書き換える
  7623:               a += 2;
  7624:             }
  7625:           }
  7626:         } else if (XEiJ.IRP_MOVEM_SHIFT_RIGHT) {  //0になるまで右にシフトする
  7627:           for (int i = 0; l != 0; i++, l >>>= 1) {
  7628:             if ((l & 1) != 0) {
  7629:               XEiJ.regRn[i] = MainMemory.mmrM8[a] << 8 | MainMemory.mmrM8[a + 1] & 255;  //(データレジスタも)符号拡張して32bit全部書き換える
  7630:               a += 2;
  7631:             }
  7632:           }
  7633:         } else if (XEiJ.IRP_MOVEM_ZEROS) {  //Integer.numberOfTrailingZerosを使う
  7634:           for (int i = 0; l != 0; ) {
  7635:             int k = Integer.numberOfTrailingZeros (l);
  7636:             XEiJ.regRn[i += k] = MainMemory.mmrM8[a] << 8 | MainMemory.mmrM8[a + 1] & 255;  //(データレジスタも)符号拡張して32bit全部書き換える
  7637:             a += 2;
  7638:             l = l >>> k & ~1;
  7639:           }
  7640:         }
  7641:         a = t + (short) (a - t);
  7642:       } else {  //メインメモリでないかページを跨ぐ可能性がある
  7643:         if (XEiJ.IRP_MOVEM_EXPAND) {  //16回展開する
  7644:           if ((l & 0x0001) != 0) {
  7645:             XEiJ.regRn[ 0] = XEiJ.busRwse (a);  //データレジスタも符号拡張して32bit全部書き換える
  7646:             a += 2;
  7647:           }
  7648:           if ((l & 0x0002) != 0) {
  7649:             XEiJ.regRn[ 1] = XEiJ.busRwse (a);  //データレジスタも符号拡張して32bit全部書き換える
  7650:             a += 2;
  7651:           }
  7652:           if ((l & 0x0004) != 0) {
  7653:             XEiJ.regRn[ 2] = XEiJ.busRwse (a);  //データレジスタも符号拡張して32bit全部書き換える
  7654:             a += 2;
  7655:           }
  7656:           if ((l & 0x0008) != 0) {
  7657:             XEiJ.regRn[ 3] = XEiJ.busRwse (a);  //データレジスタも符号拡張して32bit全部書き換える
  7658:             a += 2;
  7659:           }
  7660:           if ((l & 0x0010) != 0) {
  7661:             XEiJ.regRn[ 4] = XEiJ.busRwse (a);  //データレジスタも符号拡張して32bit全部書き換える
  7662:             a += 2;
  7663:           }
  7664:           if ((l & 0x0020) != 0) {
  7665:             XEiJ.regRn[ 5] = XEiJ.busRwse (a);  //データレジスタも符号拡張して32bit全部書き換える
  7666:             a += 2;
  7667:           }
  7668:           if ((l & 0x0040) != 0) {
  7669:             XEiJ.regRn[ 6] = XEiJ.busRwse (a);  //データレジスタも符号拡張して32bit全部書き換える
  7670:             a += 2;
  7671:           }
  7672:           if ((byte) l < 0) {  //(l & 0x0080) != 0
  7673:             XEiJ.regRn[ 7] = XEiJ.busRwse (a);  //データレジスタも符号拡張して32bit全部書き換える
  7674:             a += 2;
  7675:           }
  7676:           if ((l & 0x0100) != 0) {
  7677:             XEiJ.regRn[ 8] = XEiJ.busRwse (a);  //符号拡張して32bit全部書き換える
  7678:             a += 2;
  7679:           }
  7680:           if ((l & 0x0200) != 0) {
  7681:             XEiJ.regRn[ 9] = XEiJ.busRwse (a);  //符号拡張して32bit全部書き換える
  7682:             a += 2;
  7683:           }
  7684:           if ((l & 0x0400) != 0) {
  7685:             XEiJ.regRn[10] = XEiJ.busRwse (a);  //符号拡張して32bit全部書き換える
  7686:             a += 2;
  7687:           }
  7688:           if ((l & 0x0800) != 0) {
  7689:             XEiJ.regRn[11] = XEiJ.busRwse (a);  //符号拡張して32bit全部書き換える
  7690:             a += 2;
  7691:           }
  7692:           if ((l & 0x1000) != 0) {
  7693:             XEiJ.regRn[12] = XEiJ.busRwse (a);  //符号拡張して32bit全部書き換える
  7694:             a += 2;
  7695:           }
  7696:           if ((l & 0x2000) != 0) {
  7697:             XEiJ.regRn[13] = XEiJ.busRwse (a);  //符号拡張して32bit全部書き換える
  7698:             a += 2;
  7699:           }
  7700:           if ((l & 0x4000) != 0) {
  7701:             XEiJ.regRn[14] = XEiJ.busRwse (a);  //符号拡張して32bit全部書き換える
  7702:             a += 2;
  7703:           }
  7704:           if ((short) l < 0) {  //(l & 0x8000) != 0
  7705:             XEiJ.regRn[15] = XEiJ.busRwse (a);  //符号拡張して32bit全部書き換える
  7706:             a += 2;
  7707:           }
  7708:         } else if (XEiJ.IRP_MOVEM_LOOP) {  //16回ループする。コンパイラが展開する
  7709:           for (int i = 0; i <= 15; i++) {
  7710:             if ((l & 0x0001 << i) != 0) {
  7711:               XEiJ.regRn[i] = XEiJ.busRwse (a);  //(データレジスタも)符号拡張して32bit全部書き換える
  7712:               a += 2;
  7713:             }
  7714:           }
  7715:         } else if (XEiJ.IRP_MOVEM_SHIFT_LEFT) {  //0になるまで左にシフトする
  7716:           l = XEiJ.MPU_BITREV_TABLE_0[l & 2047] | XEiJ.MPU_BITREV_TABLE_1[l << 10 >>> 21];  //Integer.reverse(l)
  7717:           for (int i = 0; l != 0; i++, l <<= 1) {
  7718:             if (l < 0) {
  7719:               XEiJ.regRn[i] = XEiJ.busRwse (a);  //(データレジスタも)符号拡張して32bit全部書き換える
  7720:               a += 2;
  7721:             }
  7722:           }
  7723:         } else if (XEiJ.IRP_MOVEM_SHIFT_RIGHT) {  //0になるまで右にシフトする
  7724:           for (int i = 0; l != 0; i++, l >>>= 1) {
  7725:             if ((l & 1) != 0) {
  7726:               XEiJ.regRn[i] = XEiJ.busRwse (a);  //(データレジスタも)符号拡張して32bit全部書き換える
  7727:               a += 2;
  7728:             }
  7729:           }
  7730:         } else if (XEiJ.IRP_MOVEM_ZEROS) {  //Integer.numberOfTrailingZerosを使う
  7731:           for (int i = 0; l != 0; ) {
  7732:             int k = Integer.numberOfTrailingZeros (l);
  7733:             XEiJ.regRn[i += k] = XEiJ.busRwse (a);  //(データレジスタも)符号拡張して32bit全部書き換える
  7734:             a += 2;
  7735:             l = l >>> k & ~1;
  7736:           }
  7737:         }
  7738:       }
  7739:       //MOVEM.W (Ar)+,<list>で<list>にArが含まれているとき、メモリから読み出したデータを捨ててArをインクリメントする
  7740:       XEiJ.regRn[arr] = a;
  7741:       XEiJ.mpuCycleCount += a - t << 1;  //2バイト/個→4サイクル/個
  7742:     }
  7743:     if (Profiling.PFF_ON) {
  7744:       Profiling.pffTotal[Profiling.PRF.irpMovemToRegWord.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpMovemToRegWord.ordinal ()];
  7745:       Profiling.pffCount[Profiling.PRF.irpMovemToRegWord.ordinal ()]++;
  7746:     }
  7747:   }  //irpMovemToRegWord
  7748: 
  7749:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  7750:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  7751:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  7752:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  7753:   //MOVEM.L <ea>,<list>                             |-|012346|-|-----|-----|  M+ WXZP |0100_110_011_mmm_rrr-llllllllllllllll
  7754:   public static void irpMovemToRegLong () throws M68kException {
  7755:     if (Profiling.PFF_ON) {
  7756:       Profiling.pffStart[Profiling.PRF.irpMovemToRegLong.ordinal ()] = System.nanoTime ();
  7757:     }
  7758:     int ea = XEiJ.regOC & 63;
  7759:     {
  7760:       //! 軽量化。MC68000のMOVEM.L <ea>,<list>は1ワード余分にリードするが省略する
  7761:       //  MC68000のMOVEM.L <ea>,<list>は1ワード余分にリードするため転送する領域の直後にアクセスできない領域があるとバスエラーが発生する
  7762:       //  RAMDISK.SYSを高速化しようとしてデータ転送ルーチンの転送命令をすべてMOVEMに変更してしまうと、
  7763:       //  12MBフル実装でないX68000の実機で最後のセクタをアクセスしたときだけバスエラーが出て動かなくなるのはこれが原因
  7764:       int l = XEiJ.busRwze (XEiJ.regPC);  //pcwze。レジスタリスト。ゼロ拡張
  7765:       XEiJ.regPC += 2;
  7766:       int arr, a;
  7767:       if (ea >> 3 == XEiJ.MMM_MP) {  //(Ar)+
  7768:         XEiJ.mpuCycleCount += 12;
  7769:         arr = ea - (XEiJ.EA_MP - 8);
  7770:         a = XEiJ.regRn[arr];
  7771:       } else {  //(Ar)+以外
  7772:         XEiJ.mpuCycleCount += 8;
  7773:         arr = 16;
  7774:         a = efaCntLong (ea);
  7775:       }
  7776:       if ((a & 1) != 0 && l != 0) {  //奇数アドレスで1ワード以上転送する
  7777:         M68kException.m6eNumber = M68kException.M6E_ADDRESS_ERROR;
  7778:         M68kException.m6eAddress = a;
  7779:         M68kException.m6eDirection = XEiJ.MPU_WR_READ;
  7780:         M68kException.m6eSize = XEiJ.MPU_SS_LONG;
  7781:         throw M68kException.m6eSignal;
  7782:       }
  7783:       int t = a;
  7784:       if (XEiJ.IRP_MOVEM_MAINMEMORY &&  //000のときMOVEMでメインメモリを特別扱いにする
  7785:           (DataBreakPoint.DBP_ON ? DataBreakPoint.dbpSuperMap : XEiJ.busSuperMap)[a >>> XEiJ.BUS_PAGE_BITS] == MemoryMappedDevice.MMD_MMR &&  //メインメモリ
  7786:           (a & XEiJ.BUS_PAGE_SIZE - 1) <= XEiJ.BUS_PAGE_SIZE - 4 * 16) {  //16個転送してもページを跨がない
  7787:         a &= XEiJ.BUS_MOTHER_MASK;
  7788:         if (XEiJ.IRP_MOVEM_EXPAND) {  //16回展開する
  7789:           if ((l & 0x0001) != 0) {
  7790:             XEiJ.regRn[ 0] = MainMemory.mmrM8[a] << 24 | (MainMemory.mmrM8[a + 1] & 255) << 16 | (char) (MainMemory.mmrM8[a + 2] << 8 | MainMemory.mmrM8[a + 3] & 255);
  7791:             a += 4;
  7792:           }
  7793:           if ((l & 0x0002) != 0) {
  7794:             XEiJ.regRn[ 1] = MainMemory.mmrM8[a] << 24 | (MainMemory.mmrM8[a + 1] & 255) << 16 | (char) (MainMemory.mmrM8[a + 2] << 8 | MainMemory.mmrM8[a + 3] & 255);
  7795:             a += 4;
  7796:           }
  7797:           if ((l & 0x0004) != 0) {
  7798:             XEiJ.regRn[ 2] = MainMemory.mmrM8[a] << 24 | (MainMemory.mmrM8[a + 1] & 255) << 16 | (char) (MainMemory.mmrM8[a + 2] << 8 | MainMemory.mmrM8[a + 3] & 255);
  7799:             a += 4;
  7800:           }
  7801:           if ((l & 0x0008) != 0) {
  7802:             XEiJ.regRn[ 3] = MainMemory.mmrM8[a] << 24 | (MainMemory.mmrM8[a + 1] & 255) << 16 | (char) (MainMemory.mmrM8[a + 2] << 8 | MainMemory.mmrM8[a + 3] & 255);
  7803:             a += 4;
  7804:           }
  7805:           if ((l & 0x0010) != 0) {
  7806:             XEiJ.regRn[ 4] = MainMemory.mmrM8[a] << 24 | (MainMemory.mmrM8[a + 1] & 255) << 16 | (char) (MainMemory.mmrM8[a + 2] << 8 | MainMemory.mmrM8[a + 3] & 255);
  7807:             a += 4;
  7808:           }
  7809:           if ((l & 0x0020) != 0) {
  7810:             XEiJ.regRn[ 5] = MainMemory.mmrM8[a] << 24 | (MainMemory.mmrM8[a + 1] & 255) << 16 | (char) (MainMemory.mmrM8[a + 2] << 8 | MainMemory.mmrM8[a + 3] & 255);
  7811:             a += 4;
  7812:           }
  7813:           if ((l & 0x0040) != 0) {
  7814:             XEiJ.regRn[ 6] = MainMemory.mmrM8[a] << 24 | (MainMemory.mmrM8[a + 1] & 255) << 16 | (char) (MainMemory.mmrM8[a + 2] << 8 | MainMemory.mmrM8[a + 3] & 255);
  7815:             a += 4;
  7816:           }
  7817:           if ((byte) l < 0) {  //(l & 0x0080) != 0
  7818:             XEiJ.regRn[ 7] = MainMemory.mmrM8[a] << 24 | (MainMemory.mmrM8[a + 1] & 255) << 16 | (char) (MainMemory.mmrM8[a + 2] << 8 | MainMemory.mmrM8[a + 3] & 255);
  7819:             a += 4;
  7820:           }
  7821:           if ((l & 0x0100) != 0) {
  7822:             XEiJ.regRn[ 8] = MainMemory.mmrM8[a] << 24 | (MainMemory.mmrM8[a + 1] & 255) << 16 | (char) (MainMemory.mmrM8[a + 2] << 8 | MainMemory.mmrM8[a + 3] & 255);
  7823:             a += 4;
  7824:           }
  7825:           if ((l & 0x0200) != 0) {
  7826:             XEiJ.regRn[ 9] = MainMemory.mmrM8[a] << 24 | (MainMemory.mmrM8[a + 1] & 255) << 16 | (char) (MainMemory.mmrM8[a + 2] << 8 | MainMemory.mmrM8[a + 3] & 255);
  7827:             a += 4;
  7828:           }
  7829:           if ((l & 0x0400) != 0) {
  7830:             XEiJ.regRn[10] = MainMemory.mmrM8[a] << 24 | (MainMemory.mmrM8[a + 1] & 255) << 16 | (char) (MainMemory.mmrM8[a + 2] << 8 | MainMemory.mmrM8[a + 3] & 255);
  7831:             a += 4;
  7832:           }
  7833:           if ((l & 0x0800) != 0) {
  7834:             XEiJ.regRn[11] = MainMemory.mmrM8[a] << 24 | (MainMemory.mmrM8[a + 1] & 255) << 16 | (char) (MainMemory.mmrM8[a + 2] << 8 | MainMemory.mmrM8[a + 3] & 255);
  7835:             a += 4;
  7836:           }
  7837:           if ((l & 0x1000) != 0) {
  7838:             XEiJ.regRn[12] = MainMemory.mmrM8[a] << 24 | (MainMemory.mmrM8[a + 1] & 255) << 16 | (char) (MainMemory.mmrM8[a + 2] << 8 | MainMemory.mmrM8[a + 3] & 255);
  7839:             a += 4;
  7840:           }
  7841:           if ((l & 0x2000) != 0) {
  7842:             XEiJ.regRn[13] = MainMemory.mmrM8[a] << 24 | (MainMemory.mmrM8[a + 1] & 255) << 16 | (char) (MainMemory.mmrM8[a + 2] << 8 | MainMemory.mmrM8[a + 3] & 255);
  7843:             a += 4;
  7844:           }
  7845:           if ((l & 0x4000) != 0) {
  7846:             XEiJ.regRn[14] = MainMemory.mmrM8[a] << 24 | (MainMemory.mmrM8[a + 1] & 255) << 16 | (char) (MainMemory.mmrM8[a + 2] << 8 | MainMemory.mmrM8[a + 3] & 255);
  7847:             a += 4;
  7848:           }
  7849:           if ((short) l < 0) {  //(l & 0x8000) != 0
  7850:             XEiJ.regRn[15] = MainMemory.mmrM8[a] << 24 | (MainMemory.mmrM8[a + 1] & 255) << 16 | (char) (MainMemory.mmrM8[a + 2] << 8 | MainMemory.mmrM8[a + 3] & 255);
  7851:             a += 4;
  7852:           }
  7853:         } else if (XEiJ.IRP_MOVEM_LOOP) {  //16回ループする。コンパイラが展開する
  7854:           for (int i = 0; i <= 15; i++) {
  7855:             if ((l & 0x0001 << i) != 0) {
  7856:               XEiJ.regRn[i] = MainMemory.mmrM8[a] << 24 | (MainMemory.mmrM8[a + 1] & 255) << 16 | (char) (MainMemory.mmrM8[a + 2] << 8 | MainMemory.mmrM8[a + 3] & 255);
  7857:               a += 4;
  7858:             }
  7859:           }
  7860:         } else if (XEiJ.IRP_MOVEM_SHIFT_LEFT) {  //0になるまで左にシフトする
  7861:           l = XEiJ.MPU_BITREV_TABLE_0[l & 2047] | XEiJ.MPU_BITREV_TABLE_1[l << 10 >>> 21];  //Integer.reverse(l)
  7862:           for (int i = 0; l != 0; i++, l <<= 1) {
  7863:             if (l < 0) {
  7864:               XEiJ.regRn[i] = MainMemory.mmrM8[a] << 24 | (MainMemory.mmrM8[a + 1] & 255) << 16 | (char) (MainMemory.mmrM8[a + 2] << 8 | MainMemory.mmrM8[a + 3] & 255);
  7865:               a += 4;
  7866:             }
  7867:           }
  7868:         } else if (XEiJ.IRP_MOVEM_SHIFT_RIGHT) {  //0になるまで右にシフトする
  7869:           for (int i = 0; l != 0; i++, l >>>= 1) {
  7870:             if ((l & 1) != 0) {
  7871:               XEiJ.regRn[i] = MainMemory.mmrM8[a] << 24 | (MainMemory.mmrM8[a + 1] & 255) << 16 | (char) (MainMemory.mmrM8[a + 2] << 8 | MainMemory.mmrM8[a + 3] & 255);
  7872:               a += 4;
  7873:             }
  7874:           }
  7875:         } else if (XEiJ.IRP_MOVEM_ZEROS) {  //Integer.numberOfTrailingZerosを使う
  7876:           for (int i = 0; l != 0; ) {
  7877:             int k = Integer.numberOfTrailingZeros (l);
  7878:             XEiJ.regRn[i += k] = MainMemory.mmrM8[a] << 24 | (MainMemory.mmrM8[a + 1] & 255) << 16 | (char) (MainMemory.mmrM8[a + 2] << 8 | MainMemory.mmrM8[a + 3] & 255);
  7879:             a += 4;
  7880:             l = l >>> k & ~1;
  7881:           }
  7882:         }
  7883:         a = t + (short) (a - t);
  7884:       } else {  //メインメモリでないかページを跨ぐ可能性がある
  7885:         if (XEiJ.IRP_MOVEM_EXPAND) {  //16回展開する
  7886:           if ((l & 0x0001) != 0) {
  7887:             XEiJ.regRn[ 0] = XEiJ.busRlse (a);
  7888:             a += 4;
  7889:           }
  7890:           if ((l & 0x0002) != 0) {
  7891:             XEiJ.regRn[ 1] = XEiJ.busRlse (a);
  7892:             a += 4;
  7893:           }
  7894:           if ((l & 0x0004) != 0) {
  7895:             XEiJ.regRn[ 2] = XEiJ.busRlse (a);
  7896:             a += 4;
  7897:           }
  7898:           if ((l & 0x0008) != 0) {
  7899:             XEiJ.regRn[ 3] = XEiJ.busRlse (a);
  7900:             a += 4;
  7901:           }
  7902:           if ((l & 0x0010) != 0) {
  7903:             XEiJ.regRn[ 4] = XEiJ.busRlse (a);
  7904:             a += 4;
  7905:           }
  7906:           if ((l & 0x0020) != 0) {
  7907:             XEiJ.regRn[ 5] = XEiJ.busRlse (a);
  7908:             a += 4;
  7909:           }
  7910:           if ((l & 0x0040) != 0) {
  7911:             XEiJ.regRn[ 6] = XEiJ.busRlse (a);
  7912:             a += 4;
  7913:           }
  7914:           if ((byte) l < 0) {  //(l & 0x0080) != 0
  7915:             XEiJ.regRn[ 7] = XEiJ.busRlse (a);
  7916:             a += 4;
  7917:           }
  7918:           if ((l & 0x0100) != 0) {
  7919:             XEiJ.regRn[ 8] = XEiJ.busRlse (a);
  7920:             a += 4;
  7921:           }
  7922:           if ((l & 0x0200) != 0) {
  7923:             XEiJ.regRn[ 9] = XEiJ.busRlse (a);
  7924:             a += 4;
  7925:           }
  7926:           if ((l & 0x0400) != 0) {
  7927:             XEiJ.regRn[10] = XEiJ.busRlse (a);
  7928:             a += 4;
  7929:           }
  7930:           if ((l & 0x0800) != 0) {
  7931:             XEiJ.regRn[11] = XEiJ.busRlse (a);
  7932:             a += 4;
  7933:           }
  7934:           if ((l & 0x1000) != 0) {
  7935:             XEiJ.regRn[12] = XEiJ.busRlse (a);
  7936:             a += 4;
  7937:           }
  7938:           if ((l & 0x2000) != 0) {
  7939:             XEiJ.regRn[13] = XEiJ.busRlse (a);
  7940:             a += 4;
  7941:           }
  7942:           if ((l & 0x4000) != 0) {
  7943:             XEiJ.regRn[14] = XEiJ.busRlse (a);
  7944:             a += 4;
  7945:           }
  7946:           if ((short) l < 0) {  //(l & 0x8000) != 0
  7947:             XEiJ.regRn[15] = XEiJ.busRlse (a);
  7948:             a += 4;
  7949:           }
  7950:         } else if (XEiJ.IRP_MOVEM_LOOP) {  //16回ループする。コンパイラが展開する
  7951:           for (int i = 0; i <= 15; i++) {
  7952:             if ((l & 0x0001 << i) != 0) {
  7953:               XEiJ.regRn[i] = XEiJ.busRlse (a);
  7954:               a += 4;
  7955:             }
  7956:           }
  7957:         } else if (XEiJ.IRP_MOVEM_SHIFT_LEFT) {  //0になるまで左にシフトする
  7958:           l = XEiJ.MPU_BITREV_TABLE_0[l & 2047] | XEiJ.MPU_BITREV_TABLE_1[l << 10 >>> 21];  //Integer.reverse(l)
  7959:           for (int i = 0; l != 0; i++, l <<= 1) {
  7960:             if (l < 0) {
  7961:               XEiJ.regRn[i] = XEiJ.busRlse (a);
  7962:               a += 4;
  7963:             }
  7964:           }
  7965:         } else if (XEiJ.IRP_MOVEM_SHIFT_RIGHT) {  //0になるまで右にシフトする
  7966:           for (int i = 0; l != 0; i++, l >>>= 1) {
  7967:             if ((l & 1) != 0) {
  7968:               XEiJ.regRn[i] = XEiJ.busRlse (a);
  7969:               a += 4;
  7970:             }
  7971:           }
  7972:         } else if (XEiJ.IRP_MOVEM_ZEROS) {  //Integer.numberOfTrailingZerosを使う
  7973:           for (int i = 0; l != 0; ) {
  7974:             int k = Integer.numberOfTrailingZeros (l);
  7975:             XEiJ.regRn[i += k] = XEiJ.busRlse (a);
  7976:             a += 4;
  7977:             l = l >>> k & ~1;
  7978:           }
  7979:         }
  7980:       }
  7981:       //MOVEM.L (Ar)+,<list>で<list>にArが含まれているとき、メモリから読み出したデータを捨ててArをインクリメントする
  7982:       XEiJ.regRn[arr] = a;  //XEiJ.regRn[arr]は破壊されているのでXEiJ.regRn[arr]+=a-=tは不可
  7983:       XEiJ.mpuCycleCount += a - t << 1;  //4バイト/個→8サイクル/個
  7984:     }
  7985:     if (Profiling.PFF_ON) {
  7986:       Profiling.pffTotal[Profiling.PRF.irpMovemToRegLong.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpMovemToRegLong.ordinal ()];
  7987:       Profiling.pffCount[Profiling.PRF.irpMovemToRegLong.ordinal ()]++;
  7988:     }
  7989:   }  //irpMovemToRegLong
  7990: 
  7991:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  7992:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  7993:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  7994:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  7995:   //TRAP #<vector>                                  |-|012346|-|-----|-----|          |0100_111_001_00v_vvv
  7996:   public static void irpTrap () throws M68kException {
  7997:     if (Profiling.PFF_ON) {
  7998:       Profiling.pffStart[Profiling.PRF.irpTrap.ordinal ()] = System.nanoTime ();
  7999:     }
  8000:     XEiJ.mpuCycleCount += 34;
  8001:     if (XEiJ.MPU_INLINE_EXCEPTION) {
  8002:       int save_sr = XEiJ.regSRT1 | XEiJ.regSRS | XEiJ.regSRI | XEiJ.regCCR;
  8003:       int sp = XEiJ.regRn[15];
  8004:       XEiJ.regSRT1 = XEiJ.mpuTraceFlag = 0;  //srのTビットを消す
  8005:       if (XEiJ.regSRS == 0) {  //ユーザモードのとき
  8006:         XEiJ.regSRS = XEiJ.REG_SR_S;  //スーパーバイザモードへ移行する
  8007:         XEiJ.mpuUSP = sp;  //USPを保存
  8008:         sp = XEiJ.mpuISP;  //SSPを復元
  8009:         if (DataBreakPoint.DBP_ON) {
  8010:           DataBreakPoint.dbpMemoryMap = DataBreakPoint.dbpSuperMap;  //スーパーバイザメモリマップに切り替える
  8011:         } else {
  8012:           XEiJ.busMemoryMap = XEiJ.busSuperMap;  //スーパーバイザメモリマップに切り替える
  8013:         }
  8014:         if (InstructionBreakPoint.IBP_ON) {
  8015:           InstructionBreakPoint.ibpOp1MemoryMap = InstructionBreakPoint.ibpOp1SuperMap;
  8016:         }
  8017:       }
  8018:       XEiJ.regRn[15] = sp -= 6;
  8019:       XEiJ.busWl (sp + 2, XEiJ.regPC);  //pushl。pcをプッシュする
  8020:       XEiJ.busWw (sp, save_sr);  //pushw。srをプッシュする
  8021:       irpSetPC (XEiJ.busRlsf (XEiJ.regOC - (0x4e40 - M68kException.M6E_TRAP_0_INSTRUCTION_VECTOR) << 2));  //例外ベクタを取り出してジャンプする
  8022:     } else {
  8023:       irpException (XEiJ.regOC - (0x4e40 - M68kException.M6E_TRAP_0_INSTRUCTION_VECTOR), XEiJ.regPC, XEiJ.regSRT1 | XEiJ.regSRS | XEiJ.regSRI | XEiJ.regCCR);  //pcは次の命令
  8024:     }
  8025:     if (Profiling.PFF_ON) {
  8026:       Profiling.pffTotal[Profiling.PRF.irpTrap.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpTrap.ordinal ()];
  8027:       Profiling.pffCount[Profiling.PRF.irpTrap.ordinal ()]++;
  8028:     }
  8029:   }  //irpTrap
  8030:   public static void irpTrap15 () throws M68kException {
  8031:     if (Profiling.PFF_ON) {
  8032:       Profiling.pffStart[Profiling.PRF.irpTrap15.ordinal ()] = System.nanoTime ();
  8033:     }
  8034:     if ((XEiJ.regRn[0] & 255) == 0x8e) {  //IOCS _BOOTINF
  8035:       MainMemory.mmrCheckHuman ();
  8036:     }
  8037:     XEiJ.mpuCycleCount += 34;
  8038:     if (XEiJ.MPU_INLINE_EXCEPTION) {
  8039:       int save_sr = XEiJ.regSRT1 | XEiJ.regSRS | XEiJ.regSRI | XEiJ.regCCR;
  8040:       int sp = XEiJ.regRn[15];
  8041:       XEiJ.regSRT1 = XEiJ.mpuTraceFlag = 0;  //srのTビットを消す
  8042:       if (XEiJ.regSRS == 0) {  //ユーザモードのとき
  8043:         XEiJ.regSRS = XEiJ.REG_SR_S;  //スーパーバイザモードへ移行する
  8044:         XEiJ.mpuUSP = sp;  //USPを保存
  8045:         sp = XEiJ.mpuISP;  //SSPを復元
  8046:         if (DataBreakPoint.DBP_ON) {
  8047:           DataBreakPoint.dbpMemoryMap = DataBreakPoint.dbpSuperMap;  //スーパーバイザメモリマップに切り替える
  8048:         } else {
  8049:           XEiJ.busMemoryMap = XEiJ.busSuperMap;  //スーパーバイザメモリマップに切り替える
  8050:         }
  8051:         if (InstructionBreakPoint.IBP_ON) {
  8052:           InstructionBreakPoint.ibpOp1MemoryMap = InstructionBreakPoint.ibpOp1SuperMap;
  8053:         }
  8054:       }
  8055:       XEiJ.regRn[15] = sp -= 6;
  8056:       XEiJ.busWl (sp + 2, XEiJ.regPC);  //pushl。pcをプッシュする
  8057:       XEiJ.busWw (sp, save_sr);  //pushw。srをプッシュする
  8058:       irpSetPC (XEiJ.busRlsf (M68kException.M6E_TRAP_15_INSTRUCTION_VECTOR << 2));  //例外ベクタを取り出してジャンプする
  8059:     } else {
  8060:       irpException (M68kException.M6E_TRAP_15_INSTRUCTION_VECTOR, XEiJ.regPC, XEiJ.regSRT1 | XEiJ.regSRS | XEiJ.regSRI | XEiJ.regCCR);  //pcは次の命令
  8061:     }
  8062:     if (Profiling.PFF_ON) {
  8063:       Profiling.pffTotal[Profiling.PRF.irpTrap15.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpTrap15.ordinal ()];
  8064:       Profiling.pffCount[Profiling.PRF.irpTrap15.ordinal ()]++;
  8065:     }
  8066:   }  //irpTrap15
  8067: 
  8068:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  8069:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  8070:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  8071:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  8072:   //LINK.W Ar,#<data>                               |-|012346|-|-----|-----|          |0100_111_001_010_rrr-{data}
  8073:   //
  8074:   //LINK.W Ar,#<data>
  8075:   //  PEA.L (Ar);MOVEA.L A7,Ar;ADDA.W #<data>,A7と同じ
  8076:   //  LINK.W A7,#<data>はA7をデクリメントする前の値がプッシュされ、A7に#<data>が加算される
  8077:   public static void irpLinkWord () throws M68kException {
  8078:     if (Profiling.PFF_ON) {
  8079:       Profiling.pffStart[Profiling.PRF.irpLinkWord.ordinal ()] = System.nanoTime ();
  8080:     }
  8081:     XEiJ.mpuCycleCount += 16;
  8082:     int arr = XEiJ.regOC - (0b0100_111_001_010_000 - 8);
  8083:     //評価順序に注意
  8084:     //  wl(r[15]-=4,r[8+rrr])は不可
  8085:     int sp = XEiJ.regRn[15] - 4;
  8086:     XEiJ.busWl (sp, XEiJ.regRn[arr]);  //pushl
  8087:     if (XEiJ.MPU_COMPOUND_POSTINCREMENT) {
  8088:       XEiJ.regRn[15] = (XEiJ.regRn[arr] = sp) + XEiJ.busRwse ((XEiJ.regPC += 2) - 2);  //pcws
  8089:     } else {
  8090:       int t = XEiJ.regPC;
  8091:       XEiJ.regPC = t + 2;
  8092:       XEiJ.regRn[15] = (XEiJ.regRn[arr] = sp) + XEiJ.busRwse (t);  //pcws
  8093:     }
  8094:     if (Profiling.PFF_ON) {
  8095:       Profiling.pffTotal[Profiling.PRF.irpLinkWord.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpLinkWord.ordinal ()];
  8096:       Profiling.pffCount[Profiling.PRF.irpLinkWord.ordinal ()]++;
  8097:     }
  8098:   }  //irpLinkWord
  8099: 
  8100:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  8101:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  8102:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  8103:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  8104:   //UNLK Ar                                         |-|012346|-|-----|-----|          |0100_111_001_011_rrr
  8105:   //
  8106:   //UNLK Ar
  8107:   //  MOVEA.L Ar,A7;MOVEA.L (A7)+,Arと同じ
  8108:   //  UNLK A7はMOVEA.L A7,A7;MOVEA.L (A7)+,A7すなわちMOVEA.L (A7),A7と同じ
  8109:   //  ソースオペランドのポストインクリメントはデスティネーションオペランドが評価される前に完了しているとみなされる
  8110:   //    例えばMOVE.L (A0)+,(A0)+はMOVE.L (A0),(4,A0);ADDQ.L #8,A0と同じ
  8111:   //    MOVEA.L (A0)+,A0はポストインクリメントされたA0が(A0)から読み出された値で上書きされるのでMOVEA.L (A0),A0と同じ
  8112:   //  M68000PRMにUNLK Anの動作はAn→SP;(SP)→An;SP+4→SPだと書かれているがこれはn=7の場合に当てはまらない
  8113:   //  余談だが68040の初期のマスクセットはUNLK A7を実行すると固まるらしい
  8114:   public static void irpUnlk () throws M68kException {
  8115:     if (Profiling.PFF_ON) {
  8116:       Profiling.pffStart[Profiling.PRF.irpUnlk.ordinal ()] = System.nanoTime ();
  8117:     }
  8118:     XEiJ.mpuCycleCount += 12;
  8119:     int arr = XEiJ.regOC - (0b0100_111_001_011_000 - 8);
  8120:     //評価順序に注意
  8121:     int sp = XEiJ.regRn[arr];
  8122:     XEiJ.regRn[15] = sp + 4;
  8123:     XEiJ.regRn[arr] = XEiJ.busRls (sp);  //popls
  8124:     if (Profiling.PFF_ON) {
  8125:       Profiling.pffTotal[Profiling.PRF.irpUnlk.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpUnlk.ordinal ()];
  8126:       Profiling.pffCount[Profiling.PRF.irpUnlk.ordinal ()]++;
  8127:     }
  8128:   }  //irpUnlk
  8129: 
  8130:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  8131:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  8132:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  8133:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  8134:   //MOVE.L Ar,USP                                   |-|012346|P|-----|-----|          |0100_111_001_100_rrr
  8135:   public static void irpMoveToUsp () throws M68kException {
  8136:     if (Profiling.PFF_ON) {
  8137:       Profiling.pffStart[Profiling.PRF.irpMoveToUsp.ordinal ()] = System.nanoTime ();
  8138:     }
  8139:     if (XEiJ.regSRS == 0) {  //ユーザモードのとき
  8140:       M68kException.m6eNumber = M68kException.M6E_PRIVILEGE_VIOLATION;
  8141:       throw M68kException.m6eSignal;
  8142:     }
  8143:     //以下はスーパーバイザモード
  8144:     XEiJ.mpuCycleCount += 4;
  8145:     XEiJ.mpuUSP = XEiJ.regRn[XEiJ.regOC - (0b0100_111_001_100_000 - 8)];
  8146:     if (Profiling.PFF_ON) {
  8147:       Profiling.pffTotal[Profiling.PRF.irpMoveToUsp.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpMoveToUsp.ordinal ()];
  8148:       Profiling.pffCount[Profiling.PRF.irpMoveToUsp.ordinal ()]++;
  8149:     }
  8150:   }  //irpMoveToUsp
  8151: 
  8152:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  8153:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  8154:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  8155:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  8156:   //MOVE.L USP,Ar                                   |-|012346|P|-----|-----|          |0100_111_001_101_rrr
  8157:   public static void irpMoveFromUsp () throws M68kException {
  8158:     if (Profiling.PFF_ON) {
  8159:       Profiling.pffStart[Profiling.PRF.irpMoveFromUsp.ordinal ()] = System.nanoTime ();
  8160:     }
  8161:     if (XEiJ.regSRS == 0) {  //ユーザモードのとき
  8162:       M68kException.m6eNumber = M68kException.M6E_PRIVILEGE_VIOLATION;
  8163:       throw M68kException.m6eSignal;
  8164:     }
  8165:     //以下はスーパーバイザモード
  8166:     XEiJ.mpuCycleCount += 4;
  8167:     XEiJ.regRn[XEiJ.regOC - (0b0100_111_001_101_000 - 8)] = XEiJ.mpuUSP;
  8168:     if (Profiling.PFF_ON) {
  8169:       Profiling.pffTotal[Profiling.PRF.irpMoveFromUsp.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpMoveFromUsp.ordinal ()];
  8170:       Profiling.pffCount[Profiling.PRF.irpMoveFromUsp.ordinal ()]++;
  8171:     }
  8172:   }  //irpMoveFromUsp
  8173: 
  8174:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  8175:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  8176:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  8177:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  8178:   //RESET                                           |-|012346|P|-----|-----|          |0100_111_001_110_000
  8179:   public static void irpReset () throws M68kException {
  8180:     if (Profiling.PFF_ON) {
  8181:       Profiling.pffStart[Profiling.PRF.irpReset.ordinal ()] = System.nanoTime ();
  8182:     }
  8183:     if (XEiJ.regSRS == 0) {  //ユーザモードのとき
  8184:       M68kException.m6eNumber = M68kException.M6E_PRIVILEGE_VIOLATION;
  8185:       throw M68kException.m6eSignal;
  8186:     }
  8187:     //以下はスーパーバイザモード
  8188:     XEiJ.mpuCycleCount += 132;
  8189:     XEiJ.irpReset ();
  8190:     if (Profiling.PFF_ON) {
  8191:       Profiling.pffTotal[Profiling.PRF.irpReset.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpReset.ordinal ()];
  8192:       Profiling.pffCount[Profiling.PRF.irpReset.ordinal ()]++;
  8193:     }
  8194:   }  //irpReset
  8195: 
  8196:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  8197:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  8198:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  8199:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  8200:   //NOP                                             |-|012346|-|-----|-----|          |0100_111_001_110_001
  8201:   public static void irpNop () throws M68kException {
  8202:     if (Profiling.PFF_ON) {
  8203:       Profiling.pffStart[Profiling.PRF.irpNop.ordinal ()] = System.nanoTime ();
  8204:     }
  8205:     XEiJ.mpuCycleCount += 4;
  8206:     //何もしない
  8207:     if (Profiling.PFF_ON) {
  8208:       Profiling.pffTotal[Profiling.PRF.irpNop.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpNop.ordinal ()];
  8209:       Profiling.pffCount[Profiling.PRF.irpNop.ordinal ()]++;
  8210:     }
  8211:   }  //irpNop
  8212: 
  8213:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  8214:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  8215:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  8216:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  8217:   //STOP #<data>                                    |-|012346|P|UUUUU|*****|          |0100_111_001_110_010-{data}
  8218:   //
  8219:   //STOP #<data>
  8220:   //    1. #<data>をsrに設定する
  8221:   //    2. pcを進める
  8222:   //    3. 以下のいずれかの条件が成立するまで停止する
  8223:   //      3a. トレース
  8224:   //      3b. マスクされているレベルよりも高い割り込み要求
  8225:   //      3c. リセット
  8226:   //  コアと一緒にデバイスを止めるわけにいかないので、ここでは条件が成立するまで同じ命令を繰り返すループ命令として実装する
  8227:   public static void irpStop () throws M68kException {
  8228:     if (Profiling.PFF_ON) {
  8229:       Profiling.pffStart[Profiling.PRF.irpStop.ordinal ()] = System.nanoTime ();
  8230:     }
  8231:     if (XEiJ.regSRS == 0) {  //ユーザモードのとき
  8232:       M68kException.m6eNumber = M68kException.M6E_PRIVILEGE_VIOLATION;
  8233:       throw M68kException.m6eSignal;
  8234:     }
  8235:     //以下はスーパーバイザモード
  8236:     XEiJ.mpuCycleCount += 4;
  8237:     irpSetSR (XEiJ.busRwse ((XEiJ.regPC += 2) - 2));  //pcws。特権違反チェックが先
  8238:     if (XEiJ.mpuTraceFlag == 0) {  //トレースまたはマスクされているレベルよりも高い割り込み要求がない
  8239:       XEiJ.regPC = XEiJ.regPC0;  //ループ
  8240:       //任意の負荷率を100%に設定しているときSTOP命令が軽すぎると動作周波数が大きくなりすぎて割り込みがかかったとき次に進めなくなる
  8241:       //負荷率の計算にSTOP命令で止まっていた時間を含めないことにする
  8242:       XEiJ.mpuClockTime += XEiJ.TMR_FREQ * 4 / 1000000;  //4μs。10MHzのとき40clk
  8243:       Indicator.indLastNano += 4000L;
  8244:     }
  8245:     if (Profiling.PFF_ON) {
  8246:       Profiling.pffTotal[Profiling.PRF.irpStop.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpStop.ordinal ()];
  8247:       Profiling.pffCount[Profiling.PRF.irpStop.ordinal ()]++;
  8248:     }
  8249:   }  //irpStop
  8250: 
  8251:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  8252:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  8253:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  8254:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  8255:   //RTE                                             |-|012346|P|UUUUU|*****|          |0100_111_001_110_011
  8256:   public static void irpRte () throws M68kException {
  8257:     if (Profiling.PFF_ON) {
  8258:       Profiling.pffStart[Profiling.PRF.irpRte.ordinal ()] = System.nanoTime ();
  8259:     }
  8260:     if (XEiJ.regSRS == 0) {  //ユーザモードのとき
  8261:       M68kException.m6eNumber = M68kException.M6E_PRIVILEGE_VIOLATION;
  8262:       throw M68kException.m6eSignal;
  8263:     }
  8264:     //以下はスーパーバイザモード
  8265:     XEiJ.mpuCycleCount += 20;
  8266:     int sp = XEiJ.regRn[15];
  8267:     XEiJ.regRn[15] = sp + 6;
  8268:     int newSR = XEiJ.busRwz (sp);  //popwz。ここでバスエラーが生じる可能性がある
  8269:     int newPC = XEiJ.busRlse (sp + 2);  //popls。srを読めたのだからspは奇数ではない
  8270:     //irpSetSRでモードが切り替わる場合があるのでその前にr[15]を更新しておくこと
  8271:     irpSetSR (newSR);  //ここでユーザモードに戻る場合がある。特権違反チェックが先
  8272:     irpSetPC (newPC);  //分岐ログが新しいsrを使う。順序に注意
  8273:     if (Profiling.PFF_ON) {
  8274:       Profiling.pffTotal[Profiling.PRF.irpRte.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpRte.ordinal ()];
  8275:       Profiling.pffCount[Profiling.PRF.irpRte.ordinal ()]++;
  8276:     }
  8277:   }  //irpRte
  8278: 
  8279:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  8280:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  8281:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  8282:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  8283:   //RTS                                             |-|012346|-|-----|-----|          |0100_111_001_110_101
  8284:   public static void irpRts () throws M68kException {
  8285:     if (Profiling.PFF_ON) {
  8286:       Profiling.pffStart[Profiling.PRF.irpRts.ordinal ()] = System.nanoTime ();
  8287:     }
  8288:     XEiJ.mpuCycleCount += 16;
  8289:     int sp = XEiJ.regRn[15];
  8290:     XEiJ.regRn[15] = sp + 4;
  8291:     irpSetPC (XEiJ.busRls (sp));  //popls
  8292:     if (Profiling.PFF_ON) {
  8293:       Profiling.pffTotal[Profiling.PRF.irpRts.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpRts.ordinal ()];
  8294:       Profiling.pffCount[Profiling.PRF.irpRts.ordinal ()]++;
  8295:     }
  8296:   }  //irpRts
  8297: 
  8298:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  8299:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  8300:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  8301:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  8302:   //TRAPV                                           |-|012346|-|---*-|-----|          |0100_111_001_110_110
  8303:   public static void irpTrapv () throws M68kException {
  8304:     if (Profiling.PFF_ON) {
  8305:       Profiling.pffStart[Profiling.PRF.irpTrapv.ordinal ()] = System.nanoTime ();
  8306:     }
  8307:     if (XEiJ.TEST_BIT_1_SHIFT ? XEiJ.regCCR << 31 - 1 >= 0 : (XEiJ.regCCR & XEiJ.REG_CCR_V) == 0) {  //通過
  8308:       XEiJ.mpuCycleCount += 4;
  8309:     } else {
  8310:       M68kException.m6eNumber = M68kException.M6E_TRAPV_INSTRUCTION;
  8311:       throw M68kException.m6eSignal;
  8312:     }
  8313:     if (Profiling.PFF_ON) {
  8314:       Profiling.pffTotal[Profiling.PRF.irpTrapv.ordinal ()] += System.nanoTime () - Profiling.pffStart[Profiling.PRF.irpTrapv.ordinal ()];
  8315:       Profiling.pffCount[Profiling.PRF.irpTrapv.ordinal ()]++;
  8316:     }
  8317:   }  //irpTrapv
  8318: 
  8319:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  8320:   //                                                | |  MPU | |CCin |CCout|addressing|     1st opcode         2nd opcode
  8321:   //                           A:alias P:privileged |A|012346|P|XNZVC|XNZVC|DAM+-WXZPI|bbbb_bbb_bbb_bbb_bbb-bbbbbbbbbbbbbbbb
  8322:   //------------------------------------------------+-+------+-+-----+-----+----------+-------------------------------------
  8323:   //RTR                                             |-|012346|-|UUUUU|*****|          |0100_111_001_110_111
  8324:   public static void irpRtr () throws M68kException {