Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. #include "m68kcpu.h"
  2. extern void m68040_fpu_op0(void);
  3. extern void m68040_fpu_op1(void);
  4.  
  5. /* ======================================================================== */
  6. /* ========================= INSTRUCTION HANDLERS ========================= */
  7. /* ======================================================================== */
  8.  
  9.  
  10. void m68k_op_1010(void)
  11. {
  12.         m68ki_exception_1010();
  13. }
  14.  
  15.  
  16. void m68k_op_1111(void)
  17. {
  18.         m68ki_exception_1111();
  19. }
  20.  
  21.  
  22. void m68k_op_040fpu0_32(void)
  23. {
  24.         if(CPU_TYPE_IS_040_PLUS(CPU_TYPE))
  25.         {
  26.                 m68040_fpu_op0();
  27.                 return;
  28.         }
  29.         m68ki_exception_1111();
  30. }
  31.  
  32.  
  33. void m68k_op_040fpu1_32(void)
  34. {
  35.         if(CPU_TYPE_IS_040_PLUS(CPU_TYPE))
  36.         {
  37.                 m68040_fpu_op1();
  38.                 return;
  39.         }
  40.         m68ki_exception_1111();
  41. }
  42.  
  43.  
  44. void m68k_op_abcd_8_rr(void)
  45. {
  46.         uint* r_dst = &DX;
  47.         uint src = DY;
  48.         uint dst = *r_dst;
  49.         uint res = LOW_NIBBLE(src) + LOW_NIBBLE(dst) + XFLAG_AS_1();
  50.  
  51.         FLAG_V = ~res; /* Undefined V behavior */
  52.  
  53.         if(res > 9)
  54.                 res += 6;
  55.         res += HIGH_NIBBLE(src) + HIGH_NIBBLE(dst);
  56.         FLAG_X = FLAG_C = (res > 0x99) << 8;
  57.         if(FLAG_C)
  58.                 res -= 0xa0;
  59.  
  60.         FLAG_V &= res; /* Undefined V behavior part II */
  61.         FLAG_N = NFLAG_8(res); /* Undefined N behavior */
  62.  
  63.         res = MASK_OUT_ABOVE_8(res);
  64.         FLAG_Z |= res;
  65.  
  66.         *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
  67. }
  68.  
  69.  
  70. void m68k_op_abcd_8_mm_ax7(void)
  71. {
  72.         uint src = OPER_AY_PD_8();
  73.         uint ea  = EA_A7_PD_8();
  74.         uint dst = m68ki_read_8(ea);
  75.         uint res = LOW_NIBBLE(src) + LOW_NIBBLE(dst) + XFLAG_AS_1();
  76.  
  77.         FLAG_V = ~res; /* Undefined V behavior */
  78.  
  79.         if(res > 9)
  80.                 res += 6;
  81.         res += HIGH_NIBBLE(src) + HIGH_NIBBLE(dst);
  82.         FLAG_X = FLAG_C = (res > 0x99) << 8;
  83.         if(FLAG_C)
  84.                 res -= 0xa0;
  85.  
  86.         FLAG_V &= res; /* Undefined V behavior part II */
  87.         FLAG_N = NFLAG_8(res); /* Undefined N behavior */
  88.  
  89.         res = MASK_OUT_ABOVE_8(res);
  90.         FLAG_Z |= res;
  91.  
  92.         m68ki_write_8(ea, res);
  93. }
  94.  
  95.  
  96. void m68k_op_abcd_8_mm_ay7(void)
  97. {
  98.         uint src = OPER_A7_PD_8();
  99.         uint ea  = EA_AX_PD_8();
  100.         uint dst = m68ki_read_8(ea);
  101.         uint res = LOW_NIBBLE(src) + LOW_NIBBLE(dst) + XFLAG_AS_1();
  102.  
  103.         FLAG_V = ~res; /* Undefined V behavior */
  104.  
  105.         if(res > 9)
  106.                 res += 6;
  107.         res += HIGH_NIBBLE(src) + HIGH_NIBBLE(dst);
  108.         FLAG_X = FLAG_C = (res > 0x99) << 8;
  109.         if(FLAG_C)
  110.                 res -= 0xa0;
  111.  
  112.         FLAG_V &= res; /* Undefined V behavior part II */
  113.         FLAG_N = NFLAG_8(res); /* Undefined N behavior */
  114.  
  115.         res = MASK_OUT_ABOVE_8(res);
  116.         FLAG_Z |= res;
  117.  
  118.         m68ki_write_8(ea, res);
  119. }
  120.  
  121.  
  122. void m68k_op_abcd_8_mm_axy7(void)
  123. {
  124.         uint src = OPER_A7_PD_8();
  125.         uint ea  = EA_A7_PD_8();
  126.         uint dst = m68ki_read_8(ea);
  127.         uint res = LOW_NIBBLE(src) + LOW_NIBBLE(dst) + XFLAG_AS_1();
  128.  
  129.         FLAG_V = ~res; /* Undefined V behavior */
  130.  
  131.         if(res > 9)
  132.                 res += 6;
  133.         res += HIGH_NIBBLE(src) + HIGH_NIBBLE(dst);
  134.         FLAG_X = FLAG_C = (res > 0x99) << 8;
  135.         if(FLAG_C)
  136.                 res -= 0xa0;
  137.  
  138.         FLAG_V &= res; /* Undefined V behavior part II */
  139.         FLAG_N = NFLAG_8(res); /* Undefined N behavior */
  140.  
  141.         res = MASK_OUT_ABOVE_8(res);
  142.         FLAG_Z |= res;
  143.  
  144.         m68ki_write_8(ea, res);
  145. }
  146.  
  147.  
  148. void m68k_op_abcd_8_mm(void)
  149. {
  150.         uint src = OPER_AY_PD_8();
  151.         uint ea  = EA_AX_PD_8();
  152.         uint dst = m68ki_read_8(ea);
  153.         uint res = LOW_NIBBLE(src) + LOW_NIBBLE(dst) + XFLAG_AS_1();
  154.  
  155.         FLAG_V = ~res; /* Undefined V behavior */
  156.  
  157.         if(res > 9)
  158.                 res += 6;
  159.         res += HIGH_NIBBLE(src) + HIGH_NIBBLE(dst);
  160.         FLAG_X = FLAG_C = (res > 0x99) << 8;
  161.         if(FLAG_C)
  162.                 res -= 0xa0;
  163.  
  164.         FLAG_V &= res; /* Undefined V behavior part II */
  165.         FLAG_N = NFLAG_8(res); /* Undefined N behavior */
  166.  
  167.         res = MASK_OUT_ABOVE_8(res);
  168.         FLAG_Z |= res;
  169.  
  170.         m68ki_write_8(ea, res);
  171. }
  172.  
  173.  
  174. void m68k_op_add_8_er_d(void)
  175. {
  176.         uint* r_dst = &DX;
  177.         uint src = MASK_OUT_ABOVE_8(DY);
  178.         uint dst = MASK_OUT_ABOVE_8(*r_dst);
  179.         uint res = src + dst;
  180.  
  181.         FLAG_N = NFLAG_8(res);
  182.         FLAG_V = VFLAG_ADD_8(src, dst, res);
  183.         FLAG_X = FLAG_C = CFLAG_8(res);
  184.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  185.  
  186.         *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
  187. }
  188.  
  189.  
  190. void m68k_op_add_8_er_ai(void)
  191. {
  192.         uint* r_dst = &DX;
  193.         uint src = OPER_AY_AI_8();
  194.         uint dst = MASK_OUT_ABOVE_8(*r_dst);
  195.         uint res = src + dst;
  196.  
  197.         FLAG_N = NFLAG_8(res);
  198.         FLAG_V = VFLAG_ADD_8(src, dst, res);
  199.         FLAG_X = FLAG_C = CFLAG_8(res);
  200.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  201.  
  202.         *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
  203. }
  204.  
  205.  
  206. void m68k_op_add_8_er_pi(void)
  207. {
  208.         uint* r_dst = &DX;
  209.         uint src = OPER_AY_PI_8();
  210.         uint dst = MASK_OUT_ABOVE_8(*r_dst);
  211.         uint res = src + dst;
  212.  
  213.         FLAG_N = NFLAG_8(res);
  214.         FLAG_V = VFLAG_ADD_8(src, dst, res);
  215.         FLAG_X = FLAG_C = CFLAG_8(res);
  216.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  217.  
  218.         *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
  219. }
  220.  
  221.  
  222. void m68k_op_add_8_er_pi7(void)
  223. {
  224.         uint* r_dst = &DX;
  225.         uint src = OPER_A7_PI_8();
  226.         uint dst = MASK_OUT_ABOVE_8(*r_dst);
  227.         uint res = src + dst;
  228.  
  229.         FLAG_N = NFLAG_8(res);
  230.         FLAG_V = VFLAG_ADD_8(src, dst, res);
  231.         FLAG_X = FLAG_C = CFLAG_8(res);
  232.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  233.  
  234.         *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
  235. }
  236.  
  237.  
  238. void m68k_op_add_8_er_pd(void)
  239. {
  240.         uint* r_dst = &DX;
  241.         uint src = OPER_AY_PD_8();
  242.         uint dst = MASK_OUT_ABOVE_8(*r_dst);
  243.         uint res = src + dst;
  244.  
  245.         FLAG_N = NFLAG_8(res);
  246.         FLAG_V = VFLAG_ADD_8(src, dst, res);
  247.         FLAG_X = FLAG_C = CFLAG_8(res);
  248.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  249.  
  250.         *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
  251. }
  252.  
  253.  
  254. void m68k_op_add_8_er_pd7(void)
  255. {
  256.         uint* r_dst = &DX;
  257.         uint src = OPER_A7_PD_8();
  258.         uint dst = MASK_OUT_ABOVE_8(*r_dst);
  259.         uint res = src + dst;
  260.  
  261.         FLAG_N = NFLAG_8(res);
  262.         FLAG_V = VFLAG_ADD_8(src, dst, res);
  263.         FLAG_X = FLAG_C = CFLAG_8(res);
  264.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  265.  
  266.         *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
  267. }
  268.  
  269.  
  270. void m68k_op_add_8_er_di(void)
  271. {
  272.         uint* r_dst = &DX;
  273.         uint src = OPER_AY_DI_8();
  274.         uint dst = MASK_OUT_ABOVE_8(*r_dst);
  275.         uint res = src + dst;
  276.  
  277.         FLAG_N = NFLAG_8(res);
  278.         FLAG_V = VFLAG_ADD_8(src, dst, res);
  279.         FLAG_X = FLAG_C = CFLAG_8(res);
  280.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  281.  
  282.         *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
  283. }
  284.  
  285.  
  286. void m68k_op_add_8_er_ix(void)
  287. {
  288.         uint* r_dst = &DX;
  289.         uint src = OPER_AY_IX_8();
  290.         uint dst = MASK_OUT_ABOVE_8(*r_dst);
  291.         uint res = src + dst;
  292.  
  293.         FLAG_N = NFLAG_8(res);
  294.         FLAG_V = VFLAG_ADD_8(src, dst, res);
  295.         FLAG_X = FLAG_C = CFLAG_8(res);
  296.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  297.  
  298.         *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
  299. }
  300.  
  301.  
  302. void m68k_op_add_8_er_aw(void)
  303. {
  304.         uint* r_dst = &DX;
  305.         uint src = OPER_AW_8();
  306.         uint dst = MASK_OUT_ABOVE_8(*r_dst);
  307.         uint res = src + dst;
  308.  
  309.         FLAG_N = NFLAG_8(res);
  310.         FLAG_V = VFLAG_ADD_8(src, dst, res);
  311.         FLAG_X = FLAG_C = CFLAG_8(res);
  312.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  313.  
  314.         *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
  315. }
  316.  
  317.  
  318. void m68k_op_add_8_er_al(void)
  319. {
  320.         uint* r_dst = &DX;
  321.         uint src = OPER_AL_8();
  322.         uint dst = MASK_OUT_ABOVE_8(*r_dst);
  323.         uint res = src + dst;
  324.  
  325.         FLAG_N = NFLAG_8(res);
  326.         FLAG_V = VFLAG_ADD_8(src, dst, res);
  327.         FLAG_X = FLAG_C = CFLAG_8(res);
  328.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  329.  
  330.         *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
  331. }
  332.  
  333.  
  334. void m68k_op_add_8_er_pcdi(void)
  335. {
  336.         uint* r_dst = &DX;
  337.         uint src = OPER_PCDI_8();
  338.         uint dst = MASK_OUT_ABOVE_8(*r_dst);
  339.         uint res = src + dst;
  340.  
  341.         FLAG_N = NFLAG_8(res);
  342.         FLAG_V = VFLAG_ADD_8(src, dst, res);
  343.         FLAG_X = FLAG_C = CFLAG_8(res);
  344.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  345.  
  346.         *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
  347. }
  348.  
  349.  
  350. void m68k_op_add_8_er_pcix(void)
  351. {
  352.         uint* r_dst = &DX;
  353.         uint src = OPER_PCIX_8();
  354.         uint dst = MASK_OUT_ABOVE_8(*r_dst);
  355.         uint res = src + dst;
  356.  
  357.         FLAG_N = NFLAG_8(res);
  358.         FLAG_V = VFLAG_ADD_8(src, dst, res);
  359.         FLAG_X = FLAG_C = CFLAG_8(res);
  360.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  361.  
  362.         *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
  363. }
  364.  
  365.  
  366. void m68k_op_add_8_er_i(void)
  367. {
  368.         uint* r_dst = &DX;
  369.         uint src = OPER_I_8();
  370.         uint dst = MASK_OUT_ABOVE_8(*r_dst);
  371.         uint res = src + dst;
  372.  
  373.         FLAG_N = NFLAG_8(res);
  374.         FLAG_V = VFLAG_ADD_8(src, dst, res);
  375.         FLAG_X = FLAG_C = CFLAG_8(res);
  376.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  377.  
  378.         *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
  379. }
  380.  
  381.  
  382. void m68k_op_add_16_er_d(void)
  383. {
  384.         uint* r_dst = &DX;
  385.         uint src = MASK_OUT_ABOVE_16(DY);
  386.         uint dst = MASK_OUT_ABOVE_16(*r_dst);
  387.         uint res = src + dst;
  388.  
  389.         FLAG_N = NFLAG_16(res);
  390.         FLAG_V = VFLAG_ADD_16(src, dst, res);
  391.         FLAG_X = FLAG_C = CFLAG_16(res);
  392.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  393.  
  394.         *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
  395. }
  396.  
  397.  
  398. void m68k_op_add_16_er_a(void)
  399. {
  400.         uint* r_dst = &DX;
  401.         uint src = MASK_OUT_ABOVE_16(AY);
  402.         uint dst = MASK_OUT_ABOVE_16(*r_dst);
  403.         uint res = src + dst;
  404.  
  405.         FLAG_N = NFLAG_16(res);
  406.         FLAG_V = VFLAG_ADD_16(src, dst, res);
  407.         FLAG_X = FLAG_C = CFLAG_16(res);
  408.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  409.  
  410.         *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
  411. }
  412.  
  413.  
  414. void m68k_op_add_16_er_ai(void)
  415. {
  416.         uint* r_dst = &DX;
  417.         uint src = OPER_AY_AI_16();
  418.         uint dst = MASK_OUT_ABOVE_16(*r_dst);
  419.         uint res = src + dst;
  420.  
  421.         FLAG_N = NFLAG_16(res);
  422.         FLAG_V = VFLAG_ADD_16(src, dst, res);
  423.         FLAG_X = FLAG_C = CFLAG_16(res);
  424.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  425.  
  426.         *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
  427. }
  428.  
  429.  
  430. void m68k_op_add_16_er_pi(void)
  431. {
  432.         uint* r_dst = &DX;
  433.         uint src = OPER_AY_PI_16();
  434.         uint dst = MASK_OUT_ABOVE_16(*r_dst);
  435.         uint res = src + dst;
  436.  
  437.         FLAG_N = NFLAG_16(res);
  438.         FLAG_V = VFLAG_ADD_16(src, dst, res);
  439.         FLAG_X = FLAG_C = CFLAG_16(res);
  440.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  441.  
  442.         *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
  443. }
  444.  
  445.  
  446. void m68k_op_add_16_er_pd(void)
  447. {
  448.         uint* r_dst = &DX;
  449.         uint src = OPER_AY_PD_16();
  450.         uint dst = MASK_OUT_ABOVE_16(*r_dst);
  451.         uint res = src + dst;
  452.  
  453.         FLAG_N = NFLAG_16(res);
  454.         FLAG_V = VFLAG_ADD_16(src, dst, res);
  455.         FLAG_X = FLAG_C = CFLAG_16(res);
  456.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  457.  
  458.         *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
  459. }
  460.  
  461.  
  462. void m68k_op_add_16_er_di(void)
  463. {
  464.         uint* r_dst = &DX;
  465.         uint src = OPER_AY_DI_16();
  466.         uint dst = MASK_OUT_ABOVE_16(*r_dst);
  467.         uint res = src + dst;
  468.  
  469.         FLAG_N = NFLAG_16(res);
  470.         FLAG_V = VFLAG_ADD_16(src, dst, res);
  471.         FLAG_X = FLAG_C = CFLAG_16(res);
  472.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  473.  
  474.         *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
  475. }
  476.  
  477.  
  478. void m68k_op_add_16_er_ix(void)
  479. {
  480.         uint* r_dst = &DX;
  481.         uint src = OPER_AY_IX_16();
  482.         uint dst = MASK_OUT_ABOVE_16(*r_dst);
  483.         uint res = src + dst;
  484.  
  485.         FLAG_N = NFLAG_16(res);
  486.         FLAG_V = VFLAG_ADD_16(src, dst, res);
  487.         FLAG_X = FLAG_C = CFLAG_16(res);
  488.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  489.  
  490.         *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
  491. }
  492.  
  493.  
  494. void m68k_op_add_16_er_aw(void)
  495. {
  496.         uint* r_dst = &DX;
  497.         uint src = OPER_AW_16();
  498.         uint dst = MASK_OUT_ABOVE_16(*r_dst);
  499.         uint res = src + dst;
  500.  
  501.         FLAG_N = NFLAG_16(res);
  502.         FLAG_V = VFLAG_ADD_16(src, dst, res);
  503.         FLAG_X = FLAG_C = CFLAG_16(res);
  504.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  505.  
  506.         *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
  507. }
  508.  
  509.  
  510. void m68k_op_add_16_er_al(void)
  511. {
  512.         uint* r_dst = &DX;
  513.         uint src = OPER_AL_16();
  514.         uint dst = MASK_OUT_ABOVE_16(*r_dst);
  515.         uint res = src + dst;
  516.  
  517.         FLAG_N = NFLAG_16(res);
  518.         FLAG_V = VFLAG_ADD_16(src, dst, res);
  519.         FLAG_X = FLAG_C = CFLAG_16(res);
  520.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  521.  
  522.         *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
  523. }
  524.  
  525.  
  526. void m68k_op_add_16_er_pcdi(void)
  527. {
  528.         uint* r_dst = &DX;
  529.         uint src = OPER_PCDI_16();
  530.         uint dst = MASK_OUT_ABOVE_16(*r_dst);
  531.         uint res = src + dst;
  532.  
  533.         FLAG_N = NFLAG_16(res);
  534.         FLAG_V = VFLAG_ADD_16(src, dst, res);
  535.         FLAG_X = FLAG_C = CFLAG_16(res);
  536.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  537.  
  538.         *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
  539. }
  540.  
  541.  
  542. void m68k_op_add_16_er_pcix(void)
  543. {
  544.         uint* r_dst = &DX;
  545.         uint src = OPER_PCIX_16();
  546.         uint dst = MASK_OUT_ABOVE_16(*r_dst);
  547.         uint res = src + dst;
  548.  
  549.         FLAG_N = NFLAG_16(res);
  550.         FLAG_V = VFLAG_ADD_16(src, dst, res);
  551.         FLAG_X = FLAG_C = CFLAG_16(res);
  552.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  553.  
  554.         *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
  555. }
  556.  
  557.  
  558. void m68k_op_add_16_er_i(void)
  559. {
  560.         uint* r_dst = &DX;
  561.         uint src = OPER_I_16();
  562.         uint dst = MASK_OUT_ABOVE_16(*r_dst);
  563.         uint res = src + dst;
  564.  
  565.         FLAG_N = NFLAG_16(res);
  566.         FLAG_V = VFLAG_ADD_16(src, dst, res);
  567.         FLAG_X = FLAG_C = CFLAG_16(res);
  568.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  569.  
  570.         *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
  571. }
  572.  
  573.  
  574. void m68k_op_add_32_er_d(void)
  575. {
  576.         uint* r_dst = &DX;
  577.         uint src = DY;
  578.         uint dst = *r_dst;
  579.         uint res = src + dst;
  580.  
  581.         FLAG_N = NFLAG_32(res);
  582.         FLAG_V = VFLAG_ADD_32(src, dst, res);
  583.         FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
  584.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  585.  
  586.         *r_dst = FLAG_Z;
  587. }
  588.  
  589.  
  590. void m68k_op_add_32_er_a(void)
  591. {
  592.         uint* r_dst = &DX;
  593.         uint src = AY;
  594.         uint dst = *r_dst;
  595.         uint res = src + dst;
  596.  
  597.         FLAG_N = NFLAG_32(res);
  598.         FLAG_V = VFLAG_ADD_32(src, dst, res);
  599.         FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
  600.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  601.  
  602.         *r_dst = FLAG_Z;
  603. }
  604.  
  605.  
  606. void m68k_op_add_32_er_ai(void)
  607. {
  608.         uint* r_dst = &DX;
  609.         uint src = OPER_AY_AI_32();
  610.         uint dst = *r_dst;
  611.         uint res = src + dst;
  612.  
  613.         FLAG_N = NFLAG_32(res);
  614.         FLAG_V = VFLAG_ADD_32(src, dst, res);
  615.         FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
  616.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  617.  
  618.         *r_dst = FLAG_Z;
  619. }
  620.  
  621.  
  622. void m68k_op_add_32_er_pi(void)
  623. {
  624.         uint* r_dst = &DX;
  625.         uint src = OPER_AY_PI_32();
  626.         uint dst = *r_dst;
  627.         uint res = src + dst;
  628.  
  629.         FLAG_N = NFLAG_32(res);
  630.         FLAG_V = VFLAG_ADD_32(src, dst, res);
  631.         FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
  632.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  633.  
  634.         *r_dst = FLAG_Z;
  635. }
  636.  
  637.  
  638. void m68k_op_add_32_er_pd(void)
  639. {
  640.         uint* r_dst = &DX;
  641.         uint src = OPER_AY_PD_32();
  642.         uint dst = *r_dst;
  643.         uint res = src + dst;
  644.  
  645.         FLAG_N = NFLAG_32(res);
  646.         FLAG_V = VFLAG_ADD_32(src, dst, res);
  647.         FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
  648.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  649.  
  650.         *r_dst = FLAG_Z;
  651. }
  652.  
  653.  
  654. void m68k_op_add_32_er_di(void)
  655. {
  656.         uint* r_dst = &DX;
  657.         uint src = OPER_AY_DI_32();
  658.         uint dst = *r_dst;
  659.         uint res = src + dst;
  660.  
  661.         FLAG_N = NFLAG_32(res);
  662.         FLAG_V = VFLAG_ADD_32(src, dst, res);
  663.         FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
  664.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  665.  
  666.         *r_dst = FLAG_Z;
  667. }
  668.  
  669.  
  670. void m68k_op_add_32_er_ix(void)
  671. {
  672.         uint* r_dst = &DX;
  673.         uint src = OPER_AY_IX_32();
  674.         uint dst = *r_dst;
  675.         uint res = src + dst;
  676.  
  677.         FLAG_N = NFLAG_32(res);
  678.         FLAG_V = VFLAG_ADD_32(src, dst, res);
  679.         FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
  680.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  681.  
  682.         *r_dst = FLAG_Z;
  683. }
  684.  
  685.  
  686. void m68k_op_add_32_er_aw(void)
  687. {
  688.         uint* r_dst = &DX;
  689.         uint src = OPER_AW_32();
  690.         uint dst = *r_dst;
  691.         uint res = src + dst;
  692.  
  693.         FLAG_N = NFLAG_32(res);
  694.         FLAG_V = VFLAG_ADD_32(src, dst, res);
  695.         FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
  696.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  697.  
  698.         *r_dst = FLAG_Z;
  699. }
  700.  
  701.  
  702. void m68k_op_add_32_er_al(void)
  703. {
  704.         uint* r_dst = &DX;
  705.         uint src = OPER_AL_32();
  706.         uint dst = *r_dst;
  707.         uint res = src + dst;
  708.  
  709.         FLAG_N = NFLAG_32(res);
  710.         FLAG_V = VFLAG_ADD_32(src, dst, res);
  711.         FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
  712.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  713.  
  714.         *r_dst = FLAG_Z;
  715. }
  716.  
  717.  
  718. void m68k_op_add_32_er_pcdi(void)
  719. {
  720.         uint* r_dst = &DX;
  721.         uint src = OPER_PCDI_32();
  722.         uint dst = *r_dst;
  723.         uint res = src + dst;
  724.  
  725.         FLAG_N = NFLAG_32(res);
  726.         FLAG_V = VFLAG_ADD_32(src, dst, res);
  727.         FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
  728.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  729.  
  730.         *r_dst = FLAG_Z;
  731. }
  732.  
  733.  
  734. void m68k_op_add_32_er_pcix(void)
  735. {
  736.         uint* r_dst = &DX;
  737.         uint src = OPER_PCIX_32();
  738.         uint dst = *r_dst;
  739.         uint res = src + dst;
  740.  
  741.         FLAG_N = NFLAG_32(res);
  742.         FLAG_V = VFLAG_ADD_32(src, dst, res);
  743.         FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
  744.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  745.  
  746.         *r_dst = FLAG_Z;
  747. }
  748.  
  749.  
  750. void m68k_op_add_32_er_i(void)
  751. {
  752.         uint* r_dst = &DX;
  753.         uint src = OPER_I_32();
  754.         uint dst = *r_dst;
  755.         uint res = src + dst;
  756.  
  757.         FLAG_N = NFLAG_32(res);
  758.         FLAG_V = VFLAG_ADD_32(src, dst, res);
  759.         FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
  760.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  761.  
  762.         *r_dst = FLAG_Z;
  763. }
  764.  
  765.  
  766. void m68k_op_add_8_re_ai(void)
  767. {
  768.         uint ea = EA_AY_AI_8();
  769.         uint src = MASK_OUT_ABOVE_8(DX);
  770.         uint dst = m68ki_read_8(ea);
  771.         uint res = src + dst;
  772.  
  773.         FLAG_N = NFLAG_8(res);
  774.         FLAG_V = VFLAG_ADD_8(src, dst, res);
  775.         FLAG_X = FLAG_C = CFLAG_8(res);
  776.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  777.  
  778.         m68ki_write_8(ea, FLAG_Z);
  779. }
  780.  
  781.  
  782. void m68k_op_add_8_re_pi(void)
  783. {
  784.         uint ea = EA_AY_PI_8();
  785.         uint src = MASK_OUT_ABOVE_8(DX);
  786.         uint dst = m68ki_read_8(ea);
  787.         uint res = src + dst;
  788.  
  789.         FLAG_N = NFLAG_8(res);
  790.         FLAG_V = VFLAG_ADD_8(src, dst, res);
  791.         FLAG_X = FLAG_C = CFLAG_8(res);
  792.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  793.  
  794.         m68ki_write_8(ea, FLAG_Z);
  795. }
  796.  
  797.  
  798. void m68k_op_add_8_re_pi7(void)
  799. {
  800.         uint ea = EA_A7_PI_8();
  801.         uint src = MASK_OUT_ABOVE_8(DX);
  802.         uint dst = m68ki_read_8(ea);
  803.         uint res = src + dst;
  804.  
  805.         FLAG_N = NFLAG_8(res);
  806.         FLAG_V = VFLAG_ADD_8(src, dst, res);
  807.         FLAG_X = FLAG_C = CFLAG_8(res);
  808.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  809.  
  810.         m68ki_write_8(ea, FLAG_Z);
  811. }
  812.  
  813.  
  814. void m68k_op_add_8_re_pd(void)
  815. {
  816.         uint ea = EA_AY_PD_8();
  817.         uint src = MASK_OUT_ABOVE_8(DX);
  818.         uint dst = m68ki_read_8(ea);
  819.         uint res = src + dst;
  820.  
  821.         FLAG_N = NFLAG_8(res);
  822.         FLAG_V = VFLAG_ADD_8(src, dst, res);
  823.         FLAG_X = FLAG_C = CFLAG_8(res);
  824.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  825.  
  826.         m68ki_write_8(ea, FLAG_Z);
  827. }
  828.  
  829.  
  830. void m68k_op_add_8_re_pd7(void)
  831. {
  832.         uint ea = EA_A7_PD_8();
  833.         uint src = MASK_OUT_ABOVE_8(DX);
  834.         uint dst = m68ki_read_8(ea);
  835.         uint res = src + dst;
  836.  
  837.         FLAG_N = NFLAG_8(res);
  838.         FLAG_V = VFLAG_ADD_8(src, dst, res);
  839.         FLAG_X = FLAG_C = CFLAG_8(res);
  840.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  841.  
  842.         m68ki_write_8(ea, FLAG_Z);
  843. }
  844.  
  845.  
  846. void m68k_op_add_8_re_di(void)
  847. {
  848.         uint ea = EA_AY_DI_8();
  849.         uint src = MASK_OUT_ABOVE_8(DX);
  850.         uint dst = m68ki_read_8(ea);
  851.         uint res = src + dst;
  852.  
  853.         FLAG_N = NFLAG_8(res);
  854.         FLAG_V = VFLAG_ADD_8(src, dst, res);
  855.         FLAG_X = FLAG_C = CFLAG_8(res);
  856.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  857.  
  858.         m68ki_write_8(ea, FLAG_Z);
  859. }
  860.  
  861.  
  862. void m68k_op_add_8_re_ix(void)
  863. {
  864.         uint ea = EA_AY_IX_8();
  865.         uint src = MASK_OUT_ABOVE_8(DX);
  866.         uint dst = m68ki_read_8(ea);
  867.         uint res = src + dst;
  868.  
  869.         FLAG_N = NFLAG_8(res);
  870.         FLAG_V = VFLAG_ADD_8(src, dst, res);
  871.         FLAG_X = FLAG_C = CFLAG_8(res);
  872.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  873.  
  874.         m68ki_write_8(ea, FLAG_Z);
  875. }
  876.  
  877.  
  878. void m68k_op_add_8_re_aw(void)
  879. {
  880.         uint ea = EA_AW_8();
  881.         uint src = MASK_OUT_ABOVE_8(DX);
  882.         uint dst = m68ki_read_8(ea);
  883.         uint res = src + dst;
  884.  
  885.         FLAG_N = NFLAG_8(res);
  886.         FLAG_V = VFLAG_ADD_8(src, dst, res);
  887.         FLAG_X = FLAG_C = CFLAG_8(res);
  888.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  889.  
  890.         m68ki_write_8(ea, FLAG_Z);
  891. }
  892.  
  893.  
  894. void m68k_op_add_8_re_al(void)
  895. {
  896.         uint ea = EA_AL_8();
  897.         uint src = MASK_OUT_ABOVE_8(DX);
  898.         uint dst = m68ki_read_8(ea);
  899.         uint res = src + dst;
  900.  
  901.         FLAG_N = NFLAG_8(res);
  902.         FLAG_V = VFLAG_ADD_8(src, dst, res);
  903.         FLAG_X = FLAG_C = CFLAG_8(res);
  904.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  905.  
  906.         m68ki_write_8(ea, FLAG_Z);
  907. }
  908.  
  909.  
  910. void m68k_op_add_16_re_ai(void)
  911. {
  912.         uint ea = EA_AY_AI_16();
  913.         uint src = MASK_OUT_ABOVE_16(DX);
  914.         uint dst = m68ki_read_16(ea);
  915.         uint res = src + dst;
  916.  
  917.         FLAG_N = NFLAG_16(res);
  918.         FLAG_V = VFLAG_ADD_16(src, dst, res);
  919.         FLAG_X = FLAG_C = CFLAG_16(res);
  920.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  921.  
  922.         m68ki_write_16(ea, FLAG_Z);
  923. }
  924.  
  925.  
  926. void m68k_op_add_16_re_pi(void)
  927. {
  928.         uint ea = EA_AY_PI_16();
  929.         uint src = MASK_OUT_ABOVE_16(DX);
  930.         uint dst = m68ki_read_16(ea);
  931.         uint res = src + dst;
  932.  
  933.         FLAG_N = NFLAG_16(res);
  934.         FLAG_V = VFLAG_ADD_16(src, dst, res);
  935.         FLAG_X = FLAG_C = CFLAG_16(res);
  936.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  937.  
  938.         m68ki_write_16(ea, FLAG_Z);
  939. }
  940.  
  941.  
  942. void m68k_op_add_16_re_pd(void)
  943. {
  944.         uint ea = EA_AY_PD_16();
  945.         uint src = MASK_OUT_ABOVE_16(DX);
  946.         uint dst = m68ki_read_16(ea);
  947.         uint res = src + dst;
  948.  
  949.         FLAG_N = NFLAG_16(res);
  950.         FLAG_V = VFLAG_ADD_16(src, dst, res);
  951.         FLAG_X = FLAG_C = CFLAG_16(res);
  952.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  953.  
  954.         m68ki_write_16(ea, FLAG_Z);
  955. }
  956.  
  957.  
  958. void m68k_op_add_16_re_di(void)
  959. {
  960.         uint ea = EA_AY_DI_16();
  961.         uint src = MASK_OUT_ABOVE_16(DX);
  962.         uint dst = m68ki_read_16(ea);
  963.         uint res = src + dst;
  964.  
  965.         FLAG_N = NFLAG_16(res);
  966.         FLAG_V = VFLAG_ADD_16(src, dst, res);
  967.         FLAG_X = FLAG_C = CFLAG_16(res);
  968.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  969.  
  970.         m68ki_write_16(ea, FLAG_Z);
  971. }
  972.  
  973.  
  974. void m68k_op_add_16_re_ix(void)
  975. {
  976.         uint ea = EA_AY_IX_16();
  977.         uint src = MASK_OUT_ABOVE_16(DX);
  978.         uint dst = m68ki_read_16(ea);
  979.         uint res = src + dst;
  980.  
  981.         FLAG_N = NFLAG_16(res);
  982.         FLAG_V = VFLAG_ADD_16(src, dst, res);
  983.         FLAG_X = FLAG_C = CFLAG_16(res);
  984.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  985.  
  986.         m68ki_write_16(ea, FLAG_Z);
  987. }
  988.  
  989.  
  990. void m68k_op_add_16_re_aw(void)
  991. {
  992.         uint ea = EA_AW_16();
  993.         uint src = MASK_OUT_ABOVE_16(DX);
  994.         uint dst = m68ki_read_16(ea);
  995.         uint res = src + dst;
  996.  
  997.         FLAG_N = NFLAG_16(res);
  998.         FLAG_V = VFLAG_ADD_16(src, dst, res);
  999.         FLAG_X = FLAG_C = CFLAG_16(res);
  1000.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  1001.  
  1002.         m68ki_write_16(ea, FLAG_Z);
  1003. }
  1004.  
  1005.  
  1006. void m68k_op_add_16_re_al(void)
  1007. {
  1008.         uint ea = EA_AL_16();
  1009.         uint src = MASK_OUT_ABOVE_16(DX);
  1010.         uint dst = m68ki_read_16(ea);
  1011.         uint res = src + dst;
  1012.  
  1013.         FLAG_N = NFLAG_16(res);
  1014.         FLAG_V = VFLAG_ADD_16(src, dst, res);
  1015.         FLAG_X = FLAG_C = CFLAG_16(res);
  1016.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  1017.  
  1018.         m68ki_write_16(ea, FLAG_Z);
  1019. }
  1020.  
  1021.  
  1022. void m68k_op_add_32_re_ai(void)
  1023. {
  1024.         uint ea = EA_AY_AI_32();
  1025.         uint src = DX;
  1026.         uint dst = m68ki_read_32(ea);
  1027.         uint res = src + dst;
  1028.  
  1029.         FLAG_N = NFLAG_32(res);
  1030.         FLAG_V = VFLAG_ADD_32(src, dst, res);
  1031.         FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
  1032.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  1033.  
  1034.         m68ki_write_32(ea, FLAG_Z);
  1035. }
  1036.  
  1037.  
  1038. void m68k_op_add_32_re_pi(void)
  1039. {
  1040.         uint ea = EA_AY_PI_32();
  1041.         uint src = DX;
  1042.         uint dst = m68ki_read_32(ea);
  1043.         uint res = src + dst;
  1044.  
  1045.         FLAG_N = NFLAG_32(res);
  1046.         FLAG_V = VFLAG_ADD_32(src, dst, res);
  1047.         FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
  1048.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  1049.  
  1050.         m68ki_write_32(ea, FLAG_Z);
  1051. }
  1052.  
  1053.  
  1054. void m68k_op_add_32_re_pd(void)
  1055. {
  1056.         uint ea = EA_AY_PD_32();
  1057.         uint src = DX;
  1058.         uint dst = m68ki_read_32(ea);
  1059.         uint res = src + dst;
  1060.  
  1061.         FLAG_N = NFLAG_32(res);
  1062.         FLAG_V = VFLAG_ADD_32(src, dst, res);
  1063.         FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
  1064.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  1065.  
  1066.         m68ki_write_32(ea, FLAG_Z);
  1067. }
  1068.  
  1069.  
  1070. void m68k_op_add_32_re_di(void)
  1071. {
  1072.         uint ea = EA_AY_DI_32();
  1073.         uint src = DX;
  1074.         uint dst = m68ki_read_32(ea);
  1075.         uint res = src + dst;
  1076.  
  1077.         FLAG_N = NFLAG_32(res);
  1078.         FLAG_V = VFLAG_ADD_32(src, dst, res);
  1079.         FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
  1080.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  1081.  
  1082.         m68ki_write_32(ea, FLAG_Z);
  1083. }
  1084.  
  1085.  
  1086. void m68k_op_add_32_re_ix(void)
  1087. {
  1088.         uint ea = EA_AY_IX_32();
  1089.         uint src = DX;
  1090.         uint dst = m68ki_read_32(ea);
  1091.         uint res = src + dst;
  1092.  
  1093.         FLAG_N = NFLAG_32(res);
  1094.         FLAG_V = VFLAG_ADD_32(src, dst, res);
  1095.         FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
  1096.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  1097.  
  1098.         m68ki_write_32(ea, FLAG_Z);
  1099. }
  1100.  
  1101.  
  1102. void m68k_op_add_32_re_aw(void)
  1103. {
  1104.         uint ea = EA_AW_32();
  1105.         uint src = DX;
  1106.         uint dst = m68ki_read_32(ea);
  1107.         uint res = src + dst;
  1108.  
  1109.         FLAG_N = NFLAG_32(res);
  1110.         FLAG_V = VFLAG_ADD_32(src, dst, res);
  1111.         FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
  1112.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  1113.  
  1114.         m68ki_write_32(ea, FLAG_Z);
  1115. }
  1116.  
  1117.  
  1118. void m68k_op_add_32_re_al(void)
  1119. {
  1120.         uint ea = EA_AL_32();
  1121.         uint src = DX;
  1122.         uint dst = m68ki_read_32(ea);
  1123.         uint res = src + dst;
  1124.  
  1125.         FLAG_N = NFLAG_32(res);
  1126.         FLAG_V = VFLAG_ADD_32(src, dst, res);
  1127.         FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
  1128.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  1129.  
  1130.         m68ki_write_32(ea, FLAG_Z);
  1131. }
  1132.  
  1133.  
  1134. void m68k_op_adda_16_d(void)
  1135. {
  1136.         uint* r_dst = &AX;
  1137.  
  1138.         *r_dst = MASK_OUT_ABOVE_32(*r_dst + MAKE_INT_16(DY));
  1139. }
  1140.  
  1141.  
  1142. void m68k_op_adda_16_a(void)
  1143. {
  1144.         uint* r_dst = &AX;
  1145.  
  1146.         *r_dst = MASK_OUT_ABOVE_32(*r_dst + MAKE_INT_16(AY));
  1147. }
  1148.  
  1149.  
  1150. void m68k_op_adda_16_ai(void)
  1151. {
  1152.         uint* r_dst = &AX;
  1153.         uint src = MAKE_INT_16(OPER_AY_AI_16());
  1154.  
  1155.         *r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
  1156. }
  1157.  
  1158.  
  1159. void m68k_op_adda_16_pi(void)
  1160. {
  1161.         uint* r_dst = &AX;
  1162.         uint src = MAKE_INT_16(OPER_AY_PI_16());
  1163.  
  1164.         *r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
  1165. }
  1166.  
  1167.  
  1168. void m68k_op_adda_16_pd(void)
  1169. {
  1170.         uint* r_dst = &AX;
  1171.         uint src = MAKE_INT_16(OPER_AY_PD_16());
  1172.  
  1173.         *r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
  1174. }
  1175.  
  1176.  
  1177. void m68k_op_adda_16_di(void)
  1178. {
  1179.         uint* r_dst = &AX;
  1180.         uint src = MAKE_INT_16(OPER_AY_DI_16());
  1181.  
  1182.         *r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
  1183. }
  1184.  
  1185.  
  1186. void m68k_op_adda_16_ix(void)
  1187. {
  1188.         uint* r_dst = &AX;
  1189.         uint src = MAKE_INT_16(OPER_AY_IX_16());
  1190.  
  1191.         *r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
  1192. }
  1193.  
  1194.  
  1195. void m68k_op_adda_16_aw(void)
  1196. {
  1197.         uint* r_dst = &AX;
  1198.         uint src = MAKE_INT_16(OPER_AW_16());
  1199.  
  1200.         *r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
  1201. }
  1202.  
  1203.  
  1204. void m68k_op_adda_16_al(void)
  1205. {
  1206.         uint* r_dst = &AX;
  1207.         uint src = MAKE_INT_16(OPER_AL_16());
  1208.  
  1209.         *r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
  1210. }
  1211.  
  1212.  
  1213. void m68k_op_adda_16_pcdi(void)
  1214. {
  1215.         uint* r_dst = &AX;
  1216.         uint src = MAKE_INT_16(OPER_PCDI_16());
  1217.  
  1218.         *r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
  1219. }
  1220.  
  1221.  
  1222. void m68k_op_adda_16_pcix(void)
  1223. {
  1224.         uint* r_dst = &AX;
  1225.         uint src = MAKE_INT_16(OPER_PCIX_16());
  1226.  
  1227.         *r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
  1228. }
  1229.  
  1230.  
  1231. void m68k_op_adda_16_i(void)
  1232. {
  1233.         uint* r_dst = &AX;
  1234.         uint src = MAKE_INT_16(OPER_I_16());
  1235.  
  1236.         *r_dst = MASK_OUT_ABOVE_32(*r_dst + src);
  1237. }
  1238.  
  1239.  
  1240. void m68k_op_adda_32_d(void)
  1241. {
  1242.         uint* r_dst = &AX;
  1243.  
  1244.         *r_dst = MASK_OUT_ABOVE_32(*r_dst + DY);
  1245. }
  1246.  
  1247.  
  1248. void m68k_op_adda_32_a(void)
  1249. {
  1250.         uint* r_dst = &AX;
  1251.  
  1252.         *r_dst = MASK_OUT_ABOVE_32(*r_dst + AY);
  1253. }
  1254.  
  1255.  
  1256. void m68k_op_adda_32_ai(void)
  1257. {
  1258.         uint* r_dst = &AX;
  1259.  
  1260.         *r_dst = MASK_OUT_ABOVE_32(OPER_AY_AI_32() + *r_dst);
  1261. }
  1262.  
  1263.  
  1264. void m68k_op_adda_32_pi(void)
  1265. {
  1266.         uint* r_dst = &AX;
  1267.  
  1268.         *r_dst = MASK_OUT_ABOVE_32(OPER_AY_PI_32() + *r_dst);
  1269. }
  1270.  
  1271.  
  1272. void m68k_op_adda_32_pd(void)
  1273. {
  1274.         uint* r_dst = &AX;
  1275.  
  1276.         *r_dst = MASK_OUT_ABOVE_32(OPER_AY_PD_32() + *r_dst);
  1277. }
  1278.  
  1279.  
  1280. void m68k_op_adda_32_di(void)
  1281. {
  1282.         uint* r_dst = &AX;
  1283.  
  1284.         *r_dst = MASK_OUT_ABOVE_32(OPER_AY_DI_32() + *r_dst);
  1285. }
  1286.  
  1287.  
  1288. void m68k_op_adda_32_ix(void)
  1289. {
  1290.         uint* r_dst = &AX;
  1291.  
  1292.         *r_dst = MASK_OUT_ABOVE_32(OPER_AY_IX_32() + *r_dst);
  1293. }
  1294.  
  1295.  
  1296. void m68k_op_adda_32_aw(void)
  1297. {
  1298.         uint* r_dst = &AX;
  1299.  
  1300.         *r_dst = MASK_OUT_ABOVE_32(OPER_AW_32() + *r_dst);
  1301. }
  1302.  
  1303.  
  1304. void m68k_op_adda_32_al(void)
  1305. {
  1306.         uint* r_dst = &AX;
  1307.  
  1308.         *r_dst = MASK_OUT_ABOVE_32(OPER_AL_32() + *r_dst);
  1309. }
  1310.  
  1311.  
  1312. void m68k_op_adda_32_pcdi(void)
  1313. {
  1314.         uint* r_dst = &AX;
  1315.  
  1316.         *r_dst = MASK_OUT_ABOVE_32(OPER_PCDI_32() + *r_dst);
  1317. }
  1318.  
  1319.  
  1320. void m68k_op_adda_32_pcix(void)
  1321. {
  1322.         uint* r_dst = &AX;
  1323.  
  1324.         *r_dst = MASK_OUT_ABOVE_32(OPER_PCIX_32() + *r_dst);
  1325. }
  1326.  
  1327.  
  1328. void m68k_op_adda_32_i(void)
  1329. {
  1330.         uint* r_dst = &AX;
  1331.  
  1332.         *r_dst = MASK_OUT_ABOVE_32(OPER_I_32() + *r_dst);
  1333. }
  1334.  
  1335.  
  1336. void m68k_op_addi_8_d(void)
  1337. {
  1338.         uint* r_dst = &DY;
  1339.         uint src = OPER_I_8();
  1340.         uint dst = MASK_OUT_ABOVE_8(*r_dst);
  1341.         uint res = src + dst;
  1342.  
  1343.         FLAG_N = NFLAG_8(res);
  1344.         FLAG_V = VFLAG_ADD_8(src, dst, res);
  1345.         FLAG_X = FLAG_C = CFLAG_8(res);
  1346.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  1347.  
  1348.         *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
  1349. }
  1350.  
  1351.  
  1352. void m68k_op_addi_8_ai(void)
  1353. {
  1354.         uint src = OPER_I_8();
  1355.         uint ea = EA_AY_AI_8();
  1356.         uint dst = m68ki_read_8(ea);
  1357.         uint res = src + dst;
  1358.  
  1359.         FLAG_N = NFLAG_8(res);
  1360.         FLAG_V = VFLAG_ADD_8(src, dst, res);
  1361.         FLAG_X = FLAG_C = CFLAG_8(res);
  1362.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  1363.  
  1364.         m68ki_write_8(ea, FLAG_Z);
  1365. }
  1366.  
  1367.  
  1368. void m68k_op_addi_8_pi(void)
  1369. {
  1370.         uint src = OPER_I_8();
  1371.         uint ea = EA_AY_PI_8();
  1372.         uint dst = m68ki_read_8(ea);
  1373.         uint res = src + dst;
  1374.  
  1375.         FLAG_N = NFLAG_8(res);
  1376.         FLAG_V = VFLAG_ADD_8(src, dst, res);
  1377.         FLAG_X = FLAG_C = CFLAG_8(res);
  1378.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  1379.  
  1380.         m68ki_write_8(ea, FLAG_Z);
  1381. }
  1382.  
  1383.  
  1384. void m68k_op_addi_8_pi7(void)
  1385. {
  1386.         uint src = OPER_I_8();
  1387.         uint ea = EA_A7_PI_8();
  1388.         uint dst = m68ki_read_8(ea);
  1389.         uint res = src + dst;
  1390.  
  1391.         FLAG_N = NFLAG_8(res);
  1392.         FLAG_V = VFLAG_ADD_8(src, dst, res);
  1393.         FLAG_X = FLAG_C = CFLAG_8(res);
  1394.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  1395.  
  1396.         m68ki_write_8(ea, FLAG_Z);
  1397. }
  1398.  
  1399.  
  1400. void m68k_op_addi_8_pd(void)
  1401. {
  1402.         uint src = OPER_I_8();
  1403.         uint ea = EA_AY_PD_8();
  1404.         uint dst = m68ki_read_8(ea);
  1405.         uint res = src + dst;
  1406.  
  1407.         FLAG_N = NFLAG_8(res);
  1408.         FLAG_V = VFLAG_ADD_8(src, dst, res);
  1409.         FLAG_X = FLAG_C = CFLAG_8(res);
  1410.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  1411.  
  1412.         m68ki_write_8(ea, FLAG_Z);
  1413. }
  1414.  
  1415.  
  1416. void m68k_op_addi_8_pd7(void)
  1417. {
  1418.         uint src = OPER_I_8();
  1419.         uint ea = EA_A7_PD_8();
  1420.         uint dst = m68ki_read_8(ea);
  1421.         uint res = src + dst;
  1422.  
  1423.         FLAG_N = NFLAG_8(res);
  1424.         FLAG_V = VFLAG_ADD_8(src, dst, res);
  1425.         FLAG_X = FLAG_C = CFLAG_8(res);
  1426.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  1427.  
  1428.         m68ki_write_8(ea, FLAG_Z);
  1429. }
  1430.  
  1431.  
  1432. void m68k_op_addi_8_di(void)
  1433. {
  1434.         uint src = OPER_I_8();
  1435.         uint ea = EA_AY_DI_8();
  1436.         uint dst = m68ki_read_8(ea);
  1437.         uint res = src + dst;
  1438.  
  1439.         FLAG_N = NFLAG_8(res);
  1440.         FLAG_V = VFLAG_ADD_8(src, dst, res);
  1441.         FLAG_X = FLAG_C = CFLAG_8(res);
  1442.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  1443.  
  1444.         m68ki_write_8(ea, FLAG_Z);
  1445. }
  1446.  
  1447.  
  1448. void m68k_op_addi_8_ix(void)
  1449. {
  1450.         uint src = OPER_I_8();
  1451.         uint ea = EA_AY_IX_8();
  1452.         uint dst = m68ki_read_8(ea);
  1453.         uint res = src + dst;
  1454.  
  1455.         FLAG_N = NFLAG_8(res);
  1456.         FLAG_V = VFLAG_ADD_8(src, dst, res);
  1457.         FLAG_X = FLAG_C = CFLAG_8(res);
  1458.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  1459.  
  1460.         m68ki_write_8(ea, FLAG_Z);
  1461. }
  1462.  
  1463.  
  1464. void m68k_op_addi_8_aw(void)
  1465. {
  1466.         uint src = OPER_I_8();
  1467.         uint ea = EA_AW_8();
  1468.         uint dst = m68ki_read_8(ea);
  1469.         uint res = src + dst;
  1470.  
  1471.         FLAG_N = NFLAG_8(res);
  1472.         FLAG_V = VFLAG_ADD_8(src, dst, res);
  1473.         FLAG_X = FLAG_C = CFLAG_8(res);
  1474.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  1475.  
  1476.         m68ki_write_8(ea, FLAG_Z);
  1477. }
  1478.  
  1479.  
  1480. void m68k_op_addi_8_al(void)
  1481. {
  1482.         uint src = OPER_I_8();
  1483.         uint ea = EA_AL_8();
  1484.         uint dst = m68ki_read_8(ea);
  1485.         uint res = src + dst;
  1486.  
  1487.         FLAG_N = NFLAG_8(res);
  1488.         FLAG_V = VFLAG_ADD_8(src, dst, res);
  1489.         FLAG_X = FLAG_C = CFLAG_8(res);
  1490.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  1491.  
  1492.         m68ki_write_8(ea, FLAG_Z);
  1493. }
  1494.  
  1495.  
  1496. void m68k_op_addi_16_d(void)
  1497. {
  1498.         uint* r_dst = &DY;
  1499.         uint src = OPER_I_16();
  1500.         uint dst = MASK_OUT_ABOVE_16(*r_dst);
  1501.         uint res = src + dst;
  1502.  
  1503.         FLAG_N = NFLAG_16(res);
  1504.         FLAG_V = VFLAG_ADD_16(src, dst, res);
  1505.         FLAG_X = FLAG_C = CFLAG_16(res);
  1506.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  1507.  
  1508.         *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
  1509. }
  1510.  
  1511.  
  1512. void m68k_op_addi_16_ai(void)
  1513. {
  1514.         uint src = OPER_I_16();
  1515.         uint ea = EA_AY_AI_16();
  1516.         uint dst = m68ki_read_16(ea);
  1517.         uint res = src + dst;
  1518.  
  1519.         FLAG_N = NFLAG_16(res);
  1520.         FLAG_V = VFLAG_ADD_16(src, dst, res);
  1521.         FLAG_X = FLAG_C = CFLAG_16(res);
  1522.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  1523.  
  1524.         m68ki_write_16(ea, FLAG_Z);
  1525. }
  1526.  
  1527.  
  1528. void m68k_op_addi_16_pi(void)
  1529. {
  1530.         uint src = OPER_I_16();
  1531.         uint ea = EA_AY_PI_16();
  1532.         uint dst = m68ki_read_16(ea);
  1533.         uint res = src + dst;
  1534.  
  1535.         FLAG_N = NFLAG_16(res);
  1536.         FLAG_V = VFLAG_ADD_16(src, dst, res);
  1537.         FLAG_X = FLAG_C = CFLAG_16(res);
  1538.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  1539.  
  1540.         m68ki_write_16(ea, FLAG_Z);
  1541. }
  1542.  
  1543.  
  1544. void m68k_op_addi_16_pd(void)
  1545. {
  1546.         uint src = OPER_I_16();
  1547.         uint ea = EA_AY_PD_16();
  1548.         uint dst = m68ki_read_16(ea);
  1549.         uint res = src + dst;
  1550.  
  1551.         FLAG_N = NFLAG_16(res);
  1552.         FLAG_V = VFLAG_ADD_16(src, dst, res);
  1553.         FLAG_X = FLAG_C = CFLAG_16(res);
  1554.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  1555.  
  1556.         m68ki_write_16(ea, FLAG_Z);
  1557. }
  1558.  
  1559.  
  1560. void m68k_op_addi_16_di(void)
  1561. {
  1562.         uint src = OPER_I_16();
  1563.         uint ea = EA_AY_DI_16();
  1564.         uint dst = m68ki_read_16(ea);
  1565.         uint res = src + dst;
  1566.  
  1567.         FLAG_N = NFLAG_16(res);
  1568.         FLAG_V = VFLAG_ADD_16(src, dst, res);
  1569.         FLAG_X = FLAG_C = CFLAG_16(res);
  1570.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  1571.  
  1572.         m68ki_write_16(ea, FLAG_Z);
  1573. }
  1574.  
  1575.  
  1576. void m68k_op_addi_16_ix(void)
  1577. {
  1578.         uint src = OPER_I_16();
  1579.         uint ea = EA_AY_IX_16();
  1580.         uint dst = m68ki_read_16(ea);
  1581.         uint res = src + dst;
  1582.  
  1583.         FLAG_N = NFLAG_16(res);
  1584.         FLAG_V = VFLAG_ADD_16(src, dst, res);
  1585.         FLAG_X = FLAG_C = CFLAG_16(res);
  1586.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  1587.  
  1588.         m68ki_write_16(ea, FLAG_Z);
  1589. }
  1590.  
  1591.  
  1592. void m68k_op_addi_16_aw(void)
  1593. {
  1594.         uint src = OPER_I_16();
  1595.         uint ea = EA_AW_16();
  1596.         uint dst = m68ki_read_16(ea);
  1597.         uint res = src + dst;
  1598.  
  1599.         FLAG_N = NFLAG_16(res);
  1600.         FLAG_V = VFLAG_ADD_16(src, dst, res);
  1601.         FLAG_X = FLAG_C = CFLAG_16(res);
  1602.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  1603.  
  1604.         m68ki_write_16(ea, FLAG_Z);
  1605. }
  1606.  
  1607.  
  1608. void m68k_op_addi_16_al(void)
  1609. {
  1610.         uint src = OPER_I_16();
  1611.         uint ea = EA_AL_16();
  1612.         uint dst = m68ki_read_16(ea);
  1613.         uint res = src + dst;
  1614.  
  1615.         FLAG_N = NFLAG_16(res);
  1616.         FLAG_V = VFLAG_ADD_16(src, dst, res);
  1617.         FLAG_X = FLAG_C = CFLAG_16(res);
  1618.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  1619.  
  1620.         m68ki_write_16(ea, FLAG_Z);
  1621. }
  1622.  
  1623.  
  1624. void m68k_op_addi_32_d(void)
  1625. {
  1626.         uint* r_dst = &DY;
  1627.         uint src = OPER_I_32();
  1628.         uint dst = *r_dst;
  1629.         uint res = src + dst;
  1630.  
  1631.         FLAG_N = NFLAG_32(res);
  1632.         FLAG_V = VFLAG_ADD_32(src, dst, res);
  1633.         FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
  1634.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  1635.  
  1636.         *r_dst = FLAG_Z;
  1637. }
  1638.  
  1639.  
  1640. void m68k_op_addi_32_ai(void)
  1641. {
  1642.         uint src = OPER_I_32();
  1643.         uint ea = EA_AY_AI_32();
  1644.         uint dst = m68ki_read_32(ea);
  1645.         uint res = src + dst;
  1646.  
  1647.         FLAG_N = NFLAG_32(res);
  1648.         FLAG_V = VFLAG_ADD_32(src, dst, res);
  1649.         FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
  1650.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  1651.  
  1652.         m68ki_write_32(ea, FLAG_Z);
  1653. }
  1654.  
  1655.  
  1656. void m68k_op_addi_32_pi(void)
  1657. {
  1658.         uint src = OPER_I_32();
  1659.         uint ea = EA_AY_PI_32();
  1660.         uint dst = m68ki_read_32(ea);
  1661.         uint res = src + dst;
  1662.  
  1663.         FLAG_N = NFLAG_32(res);
  1664.         FLAG_V = VFLAG_ADD_32(src, dst, res);
  1665.         FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
  1666.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  1667.  
  1668.         m68ki_write_32(ea, FLAG_Z);
  1669. }
  1670.  
  1671.  
  1672. void m68k_op_addi_32_pd(void)
  1673. {
  1674.         uint src = OPER_I_32();
  1675.         uint ea = EA_AY_PD_32();
  1676.         uint dst = m68ki_read_32(ea);
  1677.         uint res = src + dst;
  1678.  
  1679.         FLAG_N = NFLAG_32(res);
  1680.         FLAG_V = VFLAG_ADD_32(src, dst, res);
  1681.         FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
  1682.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  1683.  
  1684.         m68ki_write_32(ea, FLAG_Z);
  1685. }
  1686.  
  1687.  
  1688. void m68k_op_addi_32_di(void)
  1689. {
  1690.         uint src = OPER_I_32();
  1691.         uint ea = EA_AY_DI_32();
  1692.         uint dst = m68ki_read_32(ea);
  1693.         uint res = src + dst;
  1694.  
  1695.         FLAG_N = NFLAG_32(res);
  1696.         FLAG_V = VFLAG_ADD_32(src, dst, res);
  1697.         FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
  1698.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  1699.  
  1700.         m68ki_write_32(ea, FLAG_Z);
  1701. }
  1702.  
  1703.  
  1704. void m68k_op_addi_32_ix(void)
  1705. {
  1706.         uint src = OPER_I_32();
  1707.         uint ea = EA_AY_IX_32();
  1708.         uint dst = m68ki_read_32(ea);
  1709.         uint res = src + dst;
  1710.  
  1711.         FLAG_N = NFLAG_32(res);
  1712.         FLAG_V = VFLAG_ADD_32(src, dst, res);
  1713.         FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
  1714.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  1715.  
  1716.         m68ki_write_32(ea, FLAG_Z);
  1717. }
  1718.  
  1719.  
  1720. void m68k_op_addi_32_aw(void)
  1721. {
  1722.         uint src = OPER_I_32();
  1723.         uint ea = EA_AW_32();
  1724.         uint dst = m68ki_read_32(ea);
  1725.         uint res = src + dst;
  1726.  
  1727.         FLAG_N = NFLAG_32(res);
  1728.         FLAG_V = VFLAG_ADD_32(src, dst, res);
  1729.         FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
  1730.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  1731.  
  1732.         m68ki_write_32(ea, FLAG_Z);
  1733. }
  1734.  
  1735.  
  1736. void m68k_op_addi_32_al(void)
  1737. {
  1738.         uint src = OPER_I_32();
  1739.         uint ea = EA_AL_32();
  1740.         uint dst = m68ki_read_32(ea);
  1741.         uint res = src + dst;
  1742.  
  1743.         FLAG_N = NFLAG_32(res);
  1744.         FLAG_V = VFLAG_ADD_32(src, dst, res);
  1745.         FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
  1746.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  1747.  
  1748.         m68ki_write_32(ea, FLAG_Z);
  1749. }
  1750.  
  1751.  
  1752. void m68k_op_addq_8_d(void)
  1753. {
  1754.         uint* r_dst = &DY;
  1755.         uint src = (((REG_IR >> 9) - 1) & 7) + 1;
  1756.         uint dst = MASK_OUT_ABOVE_8(*r_dst);
  1757.         uint res = src + dst;
  1758.  
  1759.         FLAG_N = NFLAG_8(res);
  1760.         FLAG_V = VFLAG_ADD_8(src, dst, res);
  1761.         FLAG_X = FLAG_C = CFLAG_8(res);
  1762.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  1763.  
  1764.         *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
  1765. }
  1766.  
  1767.  
  1768. void m68k_op_addq_8_ai(void)
  1769. {
  1770.         uint src = (((REG_IR >> 9) - 1) & 7) + 1;
  1771.         uint ea = EA_AY_AI_8();
  1772.         uint dst = m68ki_read_8(ea);
  1773.         uint res = src + dst;
  1774.  
  1775.         FLAG_N = NFLAG_8(res);
  1776.         FLAG_V = VFLAG_ADD_8(src, dst, res);
  1777.         FLAG_X = FLAG_C = CFLAG_8(res);
  1778.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  1779.  
  1780.         m68ki_write_8(ea, FLAG_Z);
  1781. }
  1782.  
  1783.  
  1784. void m68k_op_addq_8_pi(void)
  1785. {
  1786.         uint src = (((REG_IR >> 9) - 1) & 7) + 1;
  1787.         uint ea = EA_AY_PI_8();
  1788.         uint dst = m68ki_read_8(ea);
  1789.         uint res = src + dst;
  1790.  
  1791.         FLAG_N = NFLAG_8(res);
  1792.         FLAG_V = VFLAG_ADD_8(src, dst, res);
  1793.         FLAG_X = FLAG_C = CFLAG_8(res);
  1794.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  1795.  
  1796.         m68ki_write_8(ea, FLAG_Z);
  1797. }
  1798.  
  1799.  
  1800. void m68k_op_addq_8_pi7(void)
  1801. {
  1802.         uint src = (((REG_IR >> 9) - 1) & 7) + 1;
  1803.         uint ea = EA_A7_PI_8();
  1804.         uint dst = m68ki_read_8(ea);
  1805.         uint res = src + dst;
  1806.  
  1807.         FLAG_N = NFLAG_8(res);
  1808.         FLAG_V = VFLAG_ADD_8(src, dst, res);
  1809.         FLAG_X = FLAG_C = CFLAG_8(res);
  1810.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  1811.  
  1812.         m68ki_write_8(ea, FLAG_Z);
  1813. }
  1814.  
  1815.  
  1816. void m68k_op_addq_8_pd(void)
  1817. {
  1818.         uint src = (((REG_IR >> 9) - 1) & 7) + 1;
  1819.         uint ea = EA_AY_PD_8();
  1820.         uint dst = m68ki_read_8(ea);
  1821.         uint res = src + dst;
  1822.  
  1823.         FLAG_N = NFLAG_8(res);
  1824.         FLAG_V = VFLAG_ADD_8(src, dst, res);
  1825.         FLAG_X = FLAG_C = CFLAG_8(res);
  1826.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  1827.  
  1828.         m68ki_write_8(ea, FLAG_Z);
  1829. }
  1830.  
  1831.  
  1832. void m68k_op_addq_8_pd7(void)
  1833. {
  1834.         uint src = (((REG_IR >> 9) - 1) & 7) + 1;
  1835.         uint ea = EA_A7_PD_8();
  1836.         uint dst = m68ki_read_8(ea);
  1837.         uint res = src + dst;
  1838.  
  1839.         FLAG_N = NFLAG_8(res);
  1840.         FLAG_V = VFLAG_ADD_8(src, dst, res);
  1841.         FLAG_X = FLAG_C = CFLAG_8(res);
  1842.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  1843.  
  1844.         m68ki_write_8(ea, FLAG_Z);
  1845. }
  1846.  
  1847.  
  1848. void m68k_op_addq_8_di(void)
  1849. {
  1850.         uint src = (((REG_IR >> 9) - 1) & 7) + 1;
  1851.         uint ea = EA_AY_DI_8();
  1852.         uint dst = m68ki_read_8(ea);
  1853.         uint res = src + dst;
  1854.  
  1855.         FLAG_N = NFLAG_8(res);
  1856.         FLAG_V = VFLAG_ADD_8(src, dst, res);
  1857.         FLAG_X = FLAG_C = CFLAG_8(res);
  1858.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  1859.  
  1860.         m68ki_write_8(ea, FLAG_Z);
  1861. }
  1862.  
  1863.  
  1864. void m68k_op_addq_8_ix(void)
  1865. {
  1866.         uint src = (((REG_IR >> 9) - 1) & 7) + 1;
  1867.         uint ea = EA_AY_IX_8();
  1868.         uint dst = m68ki_read_8(ea);
  1869.         uint res = src + dst;
  1870.  
  1871.         FLAG_N = NFLAG_8(res);
  1872.         FLAG_V = VFLAG_ADD_8(src, dst, res);
  1873.         FLAG_X = FLAG_C = CFLAG_8(res);
  1874.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  1875.  
  1876.         m68ki_write_8(ea, FLAG_Z);
  1877. }
  1878.  
  1879.  
  1880. void m68k_op_addq_8_aw(void)
  1881. {
  1882.         uint src = (((REG_IR >> 9) - 1) & 7) + 1;
  1883.         uint ea = EA_AW_8();
  1884.         uint dst = m68ki_read_8(ea);
  1885.         uint res = src + dst;
  1886.  
  1887.         FLAG_N = NFLAG_8(res);
  1888.         FLAG_V = VFLAG_ADD_8(src, dst, res);
  1889.         FLAG_X = FLAG_C = CFLAG_8(res);
  1890.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  1891.  
  1892.         m68ki_write_8(ea, FLAG_Z);
  1893. }
  1894.  
  1895.  
  1896. void m68k_op_addq_8_al(void)
  1897. {
  1898.         uint src = (((REG_IR >> 9) - 1) & 7) + 1;
  1899.         uint ea = EA_AL_8();
  1900.         uint dst = m68ki_read_8(ea);
  1901.         uint res = src + dst;
  1902.  
  1903.         FLAG_N = NFLAG_8(res);
  1904.         FLAG_V = VFLAG_ADD_8(src, dst, res);
  1905.         FLAG_X = FLAG_C = CFLAG_8(res);
  1906.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  1907.  
  1908.         m68ki_write_8(ea, FLAG_Z);
  1909. }
  1910.  
  1911.  
  1912. void m68k_op_addq_16_d(void)
  1913. {
  1914.         uint* r_dst = &DY;
  1915.         uint src = (((REG_IR >> 9) - 1) & 7) + 1;
  1916.         uint dst = MASK_OUT_ABOVE_16(*r_dst);
  1917.         uint res = src + dst;
  1918.  
  1919.         FLAG_N = NFLAG_16(res);
  1920.         FLAG_V = VFLAG_ADD_16(src, dst, res);
  1921.         FLAG_X = FLAG_C = CFLAG_16(res);
  1922.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  1923.  
  1924.         *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
  1925. }
  1926.  
  1927.  
  1928. void m68k_op_addq_16_a(void)
  1929. {
  1930.         uint* r_dst = &AY;
  1931.  
  1932.         *r_dst = MASK_OUT_ABOVE_32(*r_dst + (((REG_IR >> 9) - 1) & 7) + 1);
  1933. }
  1934.  
  1935.  
  1936. void m68k_op_addq_16_ai(void)
  1937. {
  1938.         uint src = (((REG_IR >> 9) - 1) & 7) + 1;
  1939.         uint ea = EA_AY_AI_16();
  1940.         uint dst = m68ki_read_16(ea);
  1941.         uint res = src + dst;
  1942.  
  1943.         FLAG_N = NFLAG_16(res);
  1944.         FLAG_V = VFLAG_ADD_16(src, dst, res);
  1945.         FLAG_X = FLAG_C = CFLAG_16(res);
  1946.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  1947.  
  1948.         m68ki_write_16(ea, FLAG_Z);
  1949. }
  1950.  
  1951.  
  1952. void m68k_op_addq_16_pi(void)
  1953. {
  1954.         uint src = (((REG_IR >> 9) - 1) & 7) + 1;
  1955.         uint ea = EA_AY_PI_16();
  1956.         uint dst = m68ki_read_16(ea);
  1957.         uint res = src + dst;
  1958.  
  1959.         FLAG_N = NFLAG_16(res);
  1960.         FLAG_V = VFLAG_ADD_16(src, dst, res);
  1961.         FLAG_X = FLAG_C = CFLAG_16(res);
  1962.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  1963.  
  1964.         m68ki_write_16(ea, FLAG_Z);
  1965. }
  1966.  
  1967.  
  1968. void m68k_op_addq_16_pd(void)
  1969. {
  1970.         uint src = (((REG_IR >> 9) - 1) & 7) + 1;
  1971.         uint ea = EA_AY_PD_16();
  1972.         uint dst = m68ki_read_16(ea);
  1973.         uint res = src + dst;
  1974.  
  1975.         FLAG_N = NFLAG_16(res);
  1976.         FLAG_V = VFLAG_ADD_16(src, dst, res);
  1977.         FLAG_X = FLAG_C = CFLAG_16(res);
  1978.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  1979.  
  1980.         m68ki_write_16(ea, FLAG_Z);
  1981. }
  1982.  
  1983.  
  1984. void m68k_op_addq_16_di(void)
  1985. {
  1986.         uint src = (((REG_IR >> 9) - 1) & 7) + 1;
  1987.         uint ea = EA_AY_DI_16();
  1988.         uint dst = m68ki_read_16(ea);
  1989.         uint res = src + dst;
  1990.  
  1991.         FLAG_N = NFLAG_16(res);
  1992.         FLAG_V = VFLAG_ADD_16(src, dst, res);
  1993.         FLAG_X = FLAG_C = CFLAG_16(res);
  1994.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  1995.  
  1996.         m68ki_write_16(ea, FLAG_Z);
  1997. }
  1998.  
  1999.  
  2000. void m68k_op_addq_16_ix(void)
  2001. {
  2002.         uint src = (((REG_IR >> 9) - 1) & 7) + 1;
  2003.         uint ea = EA_AY_IX_16();
  2004.         uint dst = m68ki_read_16(ea);
  2005.         uint res = src + dst;
  2006.  
  2007.         FLAG_N = NFLAG_16(res);
  2008.         FLAG_V = VFLAG_ADD_16(src, dst, res);
  2009.         FLAG_X = FLAG_C = CFLAG_16(res);
  2010.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  2011.  
  2012.         m68ki_write_16(ea, FLAG_Z);
  2013. }
  2014.  
  2015.  
  2016. void m68k_op_addq_16_aw(void)
  2017. {
  2018.         uint src = (((REG_IR >> 9) - 1) & 7) + 1;
  2019.         uint ea = EA_AW_16();
  2020.         uint dst = m68ki_read_16(ea);
  2021.         uint res = src + dst;
  2022.  
  2023.         FLAG_N = NFLAG_16(res);
  2024.         FLAG_V = VFLAG_ADD_16(src, dst, res);
  2025.         FLAG_X = FLAG_C = CFLAG_16(res);
  2026.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  2027.  
  2028.         m68ki_write_16(ea, FLAG_Z);
  2029. }
  2030.  
  2031.  
  2032. void m68k_op_addq_16_al(void)
  2033. {
  2034.         uint src = (((REG_IR >> 9) - 1) & 7) + 1;
  2035.         uint ea = EA_AL_16();
  2036.         uint dst = m68ki_read_16(ea);
  2037.         uint res = src + dst;
  2038.  
  2039.         FLAG_N = NFLAG_16(res);
  2040.         FLAG_V = VFLAG_ADD_16(src, dst, res);
  2041.         FLAG_X = FLAG_C = CFLAG_16(res);
  2042.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  2043.  
  2044.         m68ki_write_16(ea, FLAG_Z);
  2045. }
  2046.  
  2047.  
  2048. void m68k_op_addq_32_d(void)
  2049. {
  2050.         uint* r_dst = &DY;
  2051.         uint src = (((REG_IR >> 9) - 1) & 7) + 1;
  2052.         uint dst = *r_dst;
  2053.         uint res = src + dst;
  2054.  
  2055.         FLAG_N = NFLAG_32(res);
  2056.         FLAG_V = VFLAG_ADD_32(src, dst, res);
  2057.         FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
  2058.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  2059.  
  2060.         *r_dst = FLAG_Z;
  2061. }
  2062.  
  2063.  
  2064. void m68k_op_addq_32_a(void)
  2065. {
  2066.         uint* r_dst = &AY;
  2067.  
  2068.         *r_dst = MASK_OUT_ABOVE_32(*r_dst + (((REG_IR >> 9) - 1) & 7) + 1);
  2069. }
  2070.  
  2071.  
  2072. void m68k_op_addq_32_ai(void)
  2073. {
  2074.         uint src = (((REG_IR >> 9) - 1) & 7) + 1;
  2075.         uint ea = EA_AY_AI_32();
  2076.         uint dst = m68ki_read_32(ea);
  2077.         uint res = src + dst;
  2078.  
  2079.  
  2080.         FLAG_N = NFLAG_32(res);
  2081.         FLAG_V = VFLAG_ADD_32(src, dst, res);
  2082.         FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
  2083.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  2084.  
  2085.         m68ki_write_32(ea, FLAG_Z);
  2086. }
  2087.  
  2088.  
  2089. void m68k_op_addq_32_pi(void)
  2090. {
  2091.         uint src = (((REG_IR >> 9) - 1) & 7) + 1;
  2092.         uint ea = EA_AY_PI_32();
  2093.         uint dst = m68ki_read_32(ea);
  2094.         uint res = src + dst;
  2095.  
  2096.  
  2097.         FLAG_N = NFLAG_32(res);
  2098.         FLAG_V = VFLAG_ADD_32(src, dst, res);
  2099.         FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
  2100.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  2101.  
  2102.         m68ki_write_32(ea, FLAG_Z);
  2103. }
  2104.  
  2105.  
  2106. void m68k_op_addq_32_pd(void)
  2107. {
  2108.         uint src = (((REG_IR >> 9) - 1) & 7) + 1;
  2109.         uint ea = EA_AY_PD_32();
  2110.         uint dst = m68ki_read_32(ea);
  2111.         uint res = src + dst;
  2112.  
  2113.  
  2114.         FLAG_N = NFLAG_32(res);
  2115.         FLAG_V = VFLAG_ADD_32(src, dst, res);
  2116.         FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
  2117.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  2118.  
  2119.         m68ki_write_32(ea, FLAG_Z);
  2120. }
  2121.  
  2122.  
  2123. void m68k_op_addq_32_di(void)
  2124. {
  2125.         uint src = (((REG_IR >> 9) - 1) & 7) + 1;
  2126.         uint ea = EA_AY_DI_32();
  2127.         uint dst = m68ki_read_32(ea);
  2128.         uint res = src + dst;
  2129.  
  2130.  
  2131.         FLAG_N = NFLAG_32(res);
  2132.         FLAG_V = VFLAG_ADD_32(src, dst, res);
  2133.         FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
  2134.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  2135.  
  2136.         m68ki_write_32(ea, FLAG_Z);
  2137. }
  2138.  
  2139.  
  2140. void m68k_op_addq_32_ix(void)
  2141. {
  2142.         uint src = (((REG_IR >> 9) - 1) & 7) + 1;
  2143.         uint ea = EA_AY_IX_32();
  2144.         uint dst = m68ki_read_32(ea);
  2145.         uint res = src + dst;
  2146.  
  2147.  
  2148.         FLAG_N = NFLAG_32(res);
  2149.         FLAG_V = VFLAG_ADD_32(src, dst, res);
  2150.         FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
  2151.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  2152.  
  2153.         m68ki_write_32(ea, FLAG_Z);
  2154. }
  2155.  
  2156.  
  2157. void m68k_op_addq_32_aw(void)
  2158. {
  2159.         uint src = (((REG_IR >> 9) - 1) & 7) + 1;
  2160.         uint ea = EA_AW_32();
  2161.         uint dst = m68ki_read_32(ea);
  2162.         uint res = src + dst;
  2163.  
  2164.  
  2165.         FLAG_N = NFLAG_32(res);
  2166.         FLAG_V = VFLAG_ADD_32(src, dst, res);
  2167.         FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
  2168.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  2169.  
  2170.         m68ki_write_32(ea, FLAG_Z);
  2171. }
  2172.  
  2173.  
  2174. void m68k_op_addq_32_al(void)
  2175. {
  2176.         uint src = (((REG_IR >> 9) - 1) & 7) + 1;
  2177.         uint ea = EA_AL_32();
  2178.         uint dst = m68ki_read_32(ea);
  2179.         uint res = src + dst;
  2180.  
  2181.  
  2182.         FLAG_N = NFLAG_32(res);
  2183.         FLAG_V = VFLAG_ADD_32(src, dst, res);
  2184.         FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
  2185.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  2186.  
  2187.         m68ki_write_32(ea, FLAG_Z);
  2188. }
  2189.  
  2190.  
  2191. void m68k_op_addx_8_rr(void)
  2192. {
  2193.         uint* r_dst = &DX;
  2194.         uint src = MASK_OUT_ABOVE_8(DY);
  2195.         uint dst = MASK_OUT_ABOVE_8(*r_dst);
  2196.         uint res = src + dst + XFLAG_AS_1();
  2197.  
  2198.         FLAG_N = NFLAG_8(res);
  2199.         FLAG_V = VFLAG_ADD_8(src, dst, res);
  2200.         FLAG_X = FLAG_C = CFLAG_8(res);
  2201.  
  2202.         res = MASK_OUT_ABOVE_8(res);
  2203.         FLAG_Z |= res;
  2204.  
  2205.         *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
  2206. }
  2207.  
  2208.  
  2209. void m68k_op_addx_16_rr(void)
  2210. {
  2211.         uint* r_dst = &DX;
  2212.         uint src = MASK_OUT_ABOVE_16(DY);
  2213.         uint dst = MASK_OUT_ABOVE_16(*r_dst);
  2214.         uint res = src + dst + XFLAG_AS_1();
  2215.  
  2216.         FLAG_N = NFLAG_16(res);
  2217.         FLAG_V = VFLAG_ADD_16(src, dst, res);
  2218.         FLAG_X = FLAG_C = CFLAG_16(res);
  2219.  
  2220.         res = MASK_OUT_ABOVE_16(res);
  2221.         FLAG_Z |= res;
  2222.  
  2223.         *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
  2224. }
  2225.  
  2226.  
  2227. void m68k_op_addx_32_rr(void)
  2228. {
  2229.         uint* r_dst = &DX;
  2230.         uint src = DY;
  2231.         uint dst = *r_dst;
  2232.         uint res = src + dst + XFLAG_AS_1();
  2233.  
  2234.         FLAG_N = NFLAG_32(res);
  2235.         FLAG_V = VFLAG_ADD_32(src, dst, res);
  2236.         FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
  2237.  
  2238.         res = MASK_OUT_ABOVE_32(res);
  2239.         FLAG_Z |= res;
  2240.  
  2241.         *r_dst = res;
  2242. }
  2243.  
  2244.  
  2245. void m68k_op_addx_8_mm_ax7(void)
  2246. {
  2247.         uint src = OPER_AY_PD_8();
  2248.         uint ea  = EA_A7_PD_8();
  2249.         uint dst = m68ki_read_8(ea);
  2250.         uint res = src + dst + XFLAG_AS_1();
  2251.  
  2252.         FLAG_N = NFLAG_8(res);
  2253.         FLAG_V = VFLAG_ADD_8(src, dst, res);
  2254.         FLAG_X = FLAG_C = CFLAG_8(res);
  2255.  
  2256.         res = MASK_OUT_ABOVE_8(res);
  2257.         FLAG_Z |= res;
  2258.  
  2259.         m68ki_write_8(ea, res);
  2260. }
  2261.  
  2262.  
  2263. void m68k_op_addx_8_mm_ay7(void)
  2264. {
  2265.         uint src = OPER_A7_PD_8();
  2266.         uint ea  = EA_AX_PD_8();
  2267.         uint dst = m68ki_read_8(ea);
  2268.         uint res = src + dst + XFLAG_AS_1();
  2269.  
  2270.         FLAG_N = NFLAG_8(res);
  2271.         FLAG_V = VFLAG_ADD_8(src, dst, res);
  2272.         FLAG_X = FLAG_C = CFLAG_8(res);
  2273.  
  2274.         res = MASK_OUT_ABOVE_8(res);
  2275.         FLAG_Z |= res;
  2276.  
  2277.         m68ki_write_8(ea, res);
  2278. }
  2279.  
  2280.  
  2281. void m68k_op_addx_8_mm_axy7(void)
  2282. {
  2283.         uint src = OPER_A7_PD_8();
  2284.         uint ea  = EA_A7_PD_8();
  2285.         uint dst = m68ki_read_8(ea);
  2286.         uint res = src + dst + XFLAG_AS_1();
  2287.  
  2288.         FLAG_N = NFLAG_8(res);
  2289.         FLAG_V = VFLAG_ADD_8(src, dst, res);
  2290.         FLAG_X = FLAG_C = CFLAG_8(res);
  2291.  
  2292.         res = MASK_OUT_ABOVE_8(res);
  2293.         FLAG_Z |= res;
  2294.  
  2295.         m68ki_write_8(ea, res);
  2296. }
  2297.  
  2298.  
  2299. void m68k_op_addx_8_mm(void)
  2300. {
  2301.         uint src = OPER_AY_PD_8();
  2302.         uint ea  = EA_AX_PD_8();
  2303.         uint dst = m68ki_read_8(ea);
  2304.         uint res = src + dst + XFLAG_AS_1();
  2305.  
  2306.         FLAG_N = NFLAG_8(res);
  2307.         FLAG_V = VFLAG_ADD_8(src, dst, res);
  2308.         FLAG_X = FLAG_C = CFLAG_8(res);
  2309.  
  2310.         res = MASK_OUT_ABOVE_8(res);
  2311.         FLAG_Z |= res;
  2312.  
  2313.         m68ki_write_8(ea, res);
  2314. }
  2315.  
  2316.  
  2317. void m68k_op_addx_16_mm(void)
  2318. {
  2319.         uint src = OPER_AY_PD_16();
  2320.         uint ea  = EA_AX_PD_16();
  2321.         uint dst = m68ki_read_16(ea);
  2322.         uint res = src + dst + XFLAG_AS_1();
  2323.  
  2324.         FLAG_N = NFLAG_16(res);
  2325.         FLAG_V = VFLAG_ADD_16(src, dst, res);
  2326.         FLAG_X = FLAG_C = CFLAG_16(res);
  2327.  
  2328.         res = MASK_OUT_ABOVE_16(res);
  2329.         FLAG_Z |= res;
  2330.  
  2331.         m68ki_write_16(ea, res);
  2332. }
  2333.  
  2334.  
  2335. void m68k_op_addx_32_mm(void)
  2336. {
  2337.         uint src = OPER_AY_PD_32();
  2338.         uint ea  = EA_AX_PD_32();
  2339.         uint dst = m68ki_read_32(ea);
  2340.         uint res = src + dst + XFLAG_AS_1();
  2341.  
  2342.         FLAG_N = NFLAG_32(res);
  2343.         FLAG_V = VFLAG_ADD_32(src, dst, res);
  2344.         FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res);
  2345.  
  2346.         res = MASK_OUT_ABOVE_32(res);
  2347.         FLAG_Z |= res;
  2348.  
  2349.         m68ki_write_32(ea, res);
  2350. }
  2351.  
  2352.  
  2353. void m68k_op_and_8_er_d(void)
  2354. {
  2355.         FLAG_Z = MASK_OUT_ABOVE_8(DX &= (DY | 0xffffff00));
  2356.  
  2357.         FLAG_N = NFLAG_8(FLAG_Z);
  2358.         FLAG_C = CFLAG_CLEAR;
  2359.         FLAG_V = VFLAG_CLEAR;
  2360. }
  2361.  
  2362.  
  2363. void m68k_op_and_8_er_ai(void)
  2364. {
  2365.         FLAG_Z = MASK_OUT_ABOVE_8(DX &= (OPER_AY_AI_8() | 0xffffff00));
  2366.  
  2367.         FLAG_N = NFLAG_8(FLAG_Z);
  2368.         FLAG_C = CFLAG_CLEAR;
  2369.         FLAG_V = VFLAG_CLEAR;
  2370. }
  2371.  
  2372.  
  2373. void m68k_op_and_8_er_pi(void)
  2374. {
  2375.         FLAG_Z = MASK_OUT_ABOVE_8(DX &= (OPER_AY_PI_8() | 0xffffff00));
  2376.  
  2377.         FLAG_N = NFLAG_8(FLAG_Z);
  2378.         FLAG_C = CFLAG_CLEAR;
  2379.         FLAG_V = VFLAG_CLEAR;
  2380. }
  2381.  
  2382.  
  2383. void m68k_op_and_8_er_pi7(void)
  2384. {
  2385.         FLAG_Z = MASK_OUT_ABOVE_8(DX &= (OPER_A7_PI_8() | 0xffffff00));
  2386.  
  2387.         FLAG_N = NFLAG_8(FLAG_Z);
  2388.         FLAG_C = CFLAG_CLEAR;
  2389.         FLAG_V = VFLAG_CLEAR;
  2390. }
  2391.  
  2392.  
  2393. void m68k_op_and_8_er_pd(void)
  2394. {
  2395.         FLAG_Z = MASK_OUT_ABOVE_8(DX &= (OPER_AY_PD_8() | 0xffffff00));
  2396.  
  2397.         FLAG_N = NFLAG_8(FLAG_Z);
  2398.         FLAG_C = CFLAG_CLEAR;
  2399.         FLAG_V = VFLAG_CLEAR;
  2400. }
  2401.  
  2402.  
  2403. void m68k_op_and_8_er_pd7(void)
  2404. {
  2405.         FLAG_Z = MASK_OUT_ABOVE_8(DX &= (OPER_A7_PD_8() | 0xffffff00));
  2406.  
  2407.         FLAG_N = NFLAG_8(FLAG_Z);
  2408.         FLAG_C = CFLAG_CLEAR;
  2409.         FLAG_V = VFLAG_CLEAR;
  2410. }
  2411.  
  2412.  
  2413. void m68k_op_and_8_er_di(void)
  2414. {
  2415.         FLAG_Z = MASK_OUT_ABOVE_8(DX &= (OPER_AY_DI_8() | 0xffffff00));
  2416.  
  2417.         FLAG_N = NFLAG_8(FLAG_Z);
  2418.         FLAG_C = CFLAG_CLEAR;
  2419.         FLAG_V = VFLAG_CLEAR;
  2420. }
  2421.  
  2422.  
  2423. void m68k_op_and_8_er_ix(void)
  2424. {
  2425.         FLAG_Z = MASK_OUT_ABOVE_8(DX &= (OPER_AY_IX_8() | 0xffffff00));
  2426.  
  2427.         FLAG_N = NFLAG_8(FLAG_Z);
  2428.         FLAG_C = CFLAG_CLEAR;
  2429.         FLAG_V = VFLAG_CLEAR;
  2430. }
  2431.  
  2432.  
  2433. void m68k_op_and_8_er_aw(void)
  2434. {
  2435.         FLAG_Z = MASK_OUT_ABOVE_8(DX &= (OPER_AW_8() | 0xffffff00));
  2436.  
  2437.         FLAG_N = NFLAG_8(FLAG_Z);
  2438.         FLAG_C = CFLAG_CLEAR;
  2439.         FLAG_V = VFLAG_CLEAR;
  2440. }
  2441.  
  2442.  
  2443. void m68k_op_and_8_er_al(void)
  2444. {
  2445.         FLAG_Z = MASK_OUT_ABOVE_8(DX &= (OPER_AL_8() | 0xffffff00));
  2446.  
  2447.         FLAG_N = NFLAG_8(FLAG_Z);
  2448.         FLAG_C = CFLAG_CLEAR;
  2449.         FLAG_V = VFLAG_CLEAR;
  2450. }
  2451.  
  2452.  
  2453. void m68k_op_and_8_er_pcdi(void)
  2454. {
  2455.         FLAG_Z = MASK_OUT_ABOVE_8(DX &= (OPER_PCDI_8() | 0xffffff00));
  2456.  
  2457.         FLAG_N = NFLAG_8(FLAG_Z);
  2458.         FLAG_C = CFLAG_CLEAR;
  2459.         FLAG_V = VFLAG_CLEAR;
  2460. }
  2461.  
  2462.  
  2463. void m68k_op_and_8_er_pcix(void)
  2464. {
  2465.         FLAG_Z = MASK_OUT_ABOVE_8(DX &= (OPER_PCIX_8() | 0xffffff00));
  2466.  
  2467.         FLAG_N = NFLAG_8(FLAG_Z);
  2468.         FLAG_C = CFLAG_CLEAR;
  2469.         FLAG_V = VFLAG_CLEAR;
  2470. }
  2471.  
  2472.  
  2473. void m68k_op_and_8_er_i(void)
  2474. {
  2475.         FLAG_Z = MASK_OUT_ABOVE_8(DX &= (OPER_I_8() | 0xffffff00));
  2476.  
  2477.         FLAG_N = NFLAG_8(FLAG_Z);
  2478.         FLAG_C = CFLAG_CLEAR;
  2479.         FLAG_V = VFLAG_CLEAR;
  2480. }
  2481.  
  2482.  
  2483. void m68k_op_and_16_er_d(void)
  2484. {
  2485.         FLAG_Z = MASK_OUT_ABOVE_16(DX &= (DY | 0xffff0000));
  2486.  
  2487.         FLAG_N = NFLAG_16(FLAG_Z);
  2488.         FLAG_C = CFLAG_CLEAR;
  2489.         FLAG_V = VFLAG_CLEAR;
  2490. }
  2491.  
  2492.  
  2493. void m68k_op_and_16_er_ai(void)
  2494. {
  2495.         FLAG_Z = MASK_OUT_ABOVE_16(DX &= (OPER_AY_AI_16() | 0xffff0000));
  2496.  
  2497.         FLAG_N = NFLAG_16(FLAG_Z);
  2498.         FLAG_C = CFLAG_CLEAR;
  2499.         FLAG_V = VFLAG_CLEAR;
  2500. }
  2501.  
  2502.  
  2503. void m68k_op_and_16_er_pi(void)
  2504. {
  2505.         FLAG_Z = MASK_OUT_ABOVE_16(DX &= (OPER_AY_PI_16() | 0xffff0000));
  2506.  
  2507.         FLAG_N = NFLAG_16(FLAG_Z);
  2508.         FLAG_C = CFLAG_CLEAR;
  2509.         FLAG_V = VFLAG_CLEAR;
  2510. }
  2511.  
  2512.  
  2513. void m68k_op_and_16_er_pd(void)
  2514. {
  2515.         FLAG_Z = MASK_OUT_ABOVE_16(DX &= (OPER_AY_PD_16() | 0xffff0000));
  2516.  
  2517.         FLAG_N = NFLAG_16(FLAG_Z);
  2518.         FLAG_C = CFLAG_CLEAR;
  2519.         FLAG_V = VFLAG_CLEAR;
  2520. }
  2521.  
  2522.  
  2523. void m68k_op_and_16_er_di(void)
  2524. {
  2525.         FLAG_Z = MASK_OUT_ABOVE_16(DX &= (OPER_AY_DI_16() | 0xffff0000));
  2526.  
  2527.         FLAG_N = NFLAG_16(FLAG_Z);
  2528.         FLAG_C = CFLAG_CLEAR;
  2529.         FLAG_V = VFLAG_CLEAR;
  2530. }
  2531.  
  2532.  
  2533. void m68k_op_and_16_er_ix(void)
  2534. {
  2535.         FLAG_Z = MASK_OUT_ABOVE_16(DX &= (OPER_AY_IX_16() | 0xffff0000));
  2536.  
  2537.         FLAG_N = NFLAG_16(FLAG_Z);
  2538.         FLAG_C = CFLAG_CLEAR;
  2539.         FLAG_V = VFLAG_CLEAR;
  2540. }
  2541.  
  2542.  
  2543. void m68k_op_and_16_er_aw(void)
  2544. {
  2545.         FLAG_Z = MASK_OUT_ABOVE_16(DX &= (OPER_AW_16() | 0xffff0000));
  2546.  
  2547.         FLAG_N = NFLAG_16(FLAG_Z);
  2548.         FLAG_C = CFLAG_CLEAR;
  2549.         FLAG_V = VFLAG_CLEAR;
  2550. }
  2551.  
  2552.  
  2553. void m68k_op_and_16_er_al(void)
  2554. {
  2555.         FLAG_Z = MASK_OUT_ABOVE_16(DX &= (OPER_AL_16() | 0xffff0000));
  2556.  
  2557.         FLAG_N = NFLAG_16(FLAG_Z);
  2558.         FLAG_C = CFLAG_CLEAR;
  2559.         FLAG_V = VFLAG_CLEAR;
  2560. }
  2561.  
  2562.  
  2563. void m68k_op_and_16_er_pcdi(void)
  2564. {
  2565.         FLAG_Z = MASK_OUT_ABOVE_16(DX &= (OPER_PCDI_16() | 0xffff0000));
  2566.  
  2567.         FLAG_N = NFLAG_16(FLAG_Z);
  2568.         FLAG_C = CFLAG_CLEAR;
  2569.         FLAG_V = VFLAG_CLEAR;
  2570. }
  2571.  
  2572.  
  2573. void m68k_op_and_16_er_pcix(void)
  2574. {
  2575.         FLAG_Z = MASK_OUT_ABOVE_16(DX &= (OPER_PCIX_16() | 0xffff0000));
  2576.  
  2577.         FLAG_N = NFLAG_16(FLAG_Z);
  2578.         FLAG_C = CFLAG_CLEAR;
  2579.         FLAG_V = VFLAG_CLEAR;
  2580. }
  2581.  
  2582.  
  2583. void m68k_op_and_16_er_i(void)
  2584. {
  2585.         FLAG_Z = MASK_OUT_ABOVE_16(DX &= (OPER_I_16() | 0xffff0000));
  2586.  
  2587.         FLAG_N = NFLAG_16(FLAG_Z);
  2588.         FLAG_C = CFLAG_CLEAR;
  2589.         FLAG_V = VFLAG_CLEAR;
  2590. }
  2591.  
  2592.  
  2593. void m68k_op_and_32_er_d(void)
  2594. {
  2595.         FLAG_Z = DX &= DY;
  2596.  
  2597.         FLAG_N = NFLAG_32(FLAG_Z);
  2598.         FLAG_C = CFLAG_CLEAR;
  2599.         FLAG_V = VFLAG_CLEAR;
  2600. }
  2601.  
  2602.  
  2603. void m68k_op_and_32_er_ai(void)
  2604. {
  2605.         FLAG_Z = DX &= OPER_AY_AI_32();
  2606.  
  2607.         FLAG_N = NFLAG_32(FLAG_Z);
  2608.         FLAG_C = CFLAG_CLEAR;
  2609.         FLAG_V = VFLAG_CLEAR;
  2610. }
  2611.  
  2612.  
  2613. void m68k_op_and_32_er_pi(void)
  2614. {
  2615.         FLAG_Z = DX &= OPER_AY_PI_32();
  2616.  
  2617.         FLAG_N = NFLAG_32(FLAG_Z);
  2618.         FLAG_C = CFLAG_CLEAR;
  2619.         FLAG_V = VFLAG_CLEAR;
  2620. }
  2621.  
  2622.  
  2623. void m68k_op_and_32_er_pd(void)
  2624. {
  2625.         FLAG_Z = DX &= OPER_AY_PD_32();
  2626.  
  2627.         FLAG_N = NFLAG_32(FLAG_Z);
  2628.         FLAG_C = CFLAG_CLEAR;
  2629.         FLAG_V = VFLAG_CLEAR;
  2630. }
  2631.  
  2632.  
  2633. void m68k_op_and_32_er_di(void)
  2634. {
  2635.         FLAG_Z = DX &= OPER_AY_DI_32();
  2636.  
  2637.         FLAG_N = NFLAG_32(FLAG_Z);
  2638.         FLAG_C = CFLAG_CLEAR;
  2639.         FLAG_V = VFLAG_CLEAR;
  2640. }
  2641.  
  2642.  
  2643. void m68k_op_and_32_er_ix(void)
  2644. {
  2645.         FLAG_Z = DX &= OPER_AY_IX_32();
  2646.  
  2647.         FLAG_N = NFLAG_32(FLAG_Z);
  2648.         FLAG_C = CFLAG_CLEAR;
  2649.         FLAG_V = VFLAG_CLEAR;
  2650. }
  2651.  
  2652.  
  2653. void m68k_op_and_32_er_aw(void)
  2654. {
  2655.         FLAG_Z = DX &= OPER_AW_32();
  2656.  
  2657.         FLAG_N = NFLAG_32(FLAG_Z);
  2658.         FLAG_C = CFLAG_CLEAR;
  2659.         FLAG_V = VFLAG_CLEAR;
  2660. }
  2661.  
  2662.  
  2663. void m68k_op_and_32_er_al(void)
  2664. {
  2665.         FLAG_Z = DX &= OPER_AL_32();
  2666.  
  2667.         FLAG_N = NFLAG_32(FLAG_Z);
  2668.         FLAG_C = CFLAG_CLEAR;
  2669.         FLAG_V = VFLAG_CLEAR;
  2670. }
  2671.  
  2672.  
  2673. void m68k_op_and_32_er_pcdi(void)
  2674. {
  2675.         FLAG_Z = DX &= OPER_PCDI_32();
  2676.  
  2677.         FLAG_N = NFLAG_32(FLAG_Z);
  2678.         FLAG_C = CFLAG_CLEAR;
  2679.         FLAG_V = VFLAG_CLEAR;
  2680. }
  2681.  
  2682.  
  2683. void m68k_op_and_32_er_pcix(void)
  2684. {
  2685.         FLAG_Z = DX &= OPER_PCIX_32();
  2686.  
  2687.         FLAG_N = NFLAG_32(FLAG_Z);
  2688.         FLAG_C = CFLAG_CLEAR;
  2689.         FLAG_V = VFLAG_CLEAR;
  2690. }
  2691.  
  2692.  
  2693. void m68k_op_and_32_er_i(void)
  2694. {
  2695.         FLAG_Z = DX &= OPER_I_32();
  2696.  
  2697.         FLAG_N = NFLAG_32(FLAG_Z);
  2698.         FLAG_C = CFLAG_CLEAR;
  2699.         FLAG_V = VFLAG_CLEAR;
  2700. }
  2701.  
  2702.  
  2703. void m68k_op_and_8_re_ai(void)
  2704. {
  2705.         uint ea = EA_AY_AI_8();
  2706.         uint res = DX & m68ki_read_8(ea);
  2707.  
  2708.         FLAG_N = NFLAG_8(res);
  2709.         FLAG_C = CFLAG_CLEAR;
  2710.         FLAG_V = VFLAG_CLEAR;
  2711.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  2712.  
  2713.         m68ki_write_8(ea, FLAG_Z);
  2714. }
  2715.  
  2716.  
  2717. void m68k_op_and_8_re_pi(void)
  2718. {
  2719.         uint ea = EA_AY_PI_8();
  2720.         uint res = DX & m68ki_read_8(ea);
  2721.  
  2722.         FLAG_N = NFLAG_8(res);
  2723.         FLAG_C = CFLAG_CLEAR;
  2724.         FLAG_V = VFLAG_CLEAR;
  2725.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  2726.  
  2727.         m68ki_write_8(ea, FLAG_Z);
  2728. }
  2729.  
  2730.  
  2731. void m68k_op_and_8_re_pi7(void)
  2732. {
  2733.         uint ea = EA_A7_PI_8();
  2734.         uint res = DX & m68ki_read_8(ea);
  2735.  
  2736.         FLAG_N = NFLAG_8(res);
  2737.         FLAG_C = CFLAG_CLEAR;
  2738.         FLAG_V = VFLAG_CLEAR;
  2739.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  2740.  
  2741.         m68ki_write_8(ea, FLAG_Z);
  2742. }
  2743.  
  2744.  
  2745. void m68k_op_and_8_re_pd(void)
  2746. {
  2747.         uint ea = EA_AY_PD_8();
  2748.         uint res = DX & m68ki_read_8(ea);
  2749.  
  2750.         FLAG_N = NFLAG_8(res);
  2751.         FLAG_C = CFLAG_CLEAR;
  2752.         FLAG_V = VFLAG_CLEAR;
  2753.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  2754.  
  2755.         m68ki_write_8(ea, FLAG_Z);
  2756. }
  2757.  
  2758.  
  2759. void m68k_op_and_8_re_pd7(void)
  2760. {
  2761.         uint ea = EA_A7_PD_8();
  2762.         uint res = DX & m68ki_read_8(ea);
  2763.  
  2764.         FLAG_N = NFLAG_8(res);
  2765.         FLAG_C = CFLAG_CLEAR;
  2766.         FLAG_V = VFLAG_CLEAR;
  2767.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  2768.  
  2769.         m68ki_write_8(ea, FLAG_Z);
  2770. }
  2771.  
  2772.  
  2773. void m68k_op_and_8_re_di(void)
  2774. {
  2775.         uint ea = EA_AY_DI_8();
  2776.         uint res = DX & m68ki_read_8(ea);
  2777.  
  2778.         FLAG_N = NFLAG_8(res);
  2779.         FLAG_C = CFLAG_CLEAR;
  2780.         FLAG_V = VFLAG_CLEAR;
  2781.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  2782.  
  2783.         m68ki_write_8(ea, FLAG_Z);
  2784. }
  2785.  
  2786.  
  2787. void m68k_op_and_8_re_ix(void)
  2788. {
  2789.         uint ea = EA_AY_IX_8();
  2790.         uint res = DX & m68ki_read_8(ea);
  2791.  
  2792.         FLAG_N = NFLAG_8(res);
  2793.         FLAG_C = CFLAG_CLEAR;
  2794.         FLAG_V = VFLAG_CLEAR;
  2795.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  2796.  
  2797.         m68ki_write_8(ea, FLAG_Z);
  2798. }
  2799.  
  2800.  
  2801. void m68k_op_and_8_re_aw(void)
  2802. {
  2803.         uint ea = EA_AW_8();
  2804.         uint res = DX & m68ki_read_8(ea);
  2805.  
  2806.         FLAG_N = NFLAG_8(res);
  2807.         FLAG_C = CFLAG_CLEAR;
  2808.         FLAG_V = VFLAG_CLEAR;
  2809.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  2810.  
  2811.         m68ki_write_8(ea, FLAG_Z);
  2812. }
  2813.  
  2814.  
  2815. void m68k_op_and_8_re_al(void)
  2816. {
  2817.         uint ea = EA_AL_8();
  2818.         uint res = DX & m68ki_read_8(ea);
  2819.  
  2820.         FLAG_N = NFLAG_8(res);
  2821.         FLAG_C = CFLAG_CLEAR;
  2822.         FLAG_V = VFLAG_CLEAR;
  2823.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  2824.  
  2825.         m68ki_write_8(ea, FLAG_Z);
  2826. }
  2827.  
  2828.  
  2829. void m68k_op_and_16_re_ai(void)
  2830. {
  2831.         uint ea = EA_AY_AI_16();
  2832.         uint res = DX & m68ki_read_16(ea);
  2833.  
  2834.         FLAG_N = NFLAG_16(res);
  2835.         FLAG_C = CFLAG_CLEAR;
  2836.         FLAG_V = VFLAG_CLEAR;
  2837.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  2838.  
  2839.         m68ki_write_16(ea, FLAG_Z);
  2840. }
  2841.  
  2842.  
  2843. void m68k_op_and_16_re_pi(void)
  2844. {
  2845.         uint ea = EA_AY_PI_16();
  2846.         uint res = DX & m68ki_read_16(ea);
  2847.  
  2848.         FLAG_N = NFLAG_16(res);
  2849.         FLAG_C = CFLAG_CLEAR;
  2850.         FLAG_V = VFLAG_CLEAR;
  2851.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  2852.  
  2853.         m68ki_write_16(ea, FLAG_Z);
  2854. }
  2855.  
  2856.  
  2857. void m68k_op_and_16_re_pd(void)
  2858. {
  2859.         uint ea = EA_AY_PD_16();
  2860.         uint res = DX & m68ki_read_16(ea);
  2861.  
  2862.         FLAG_N = NFLAG_16(res);
  2863.         FLAG_C = CFLAG_CLEAR;
  2864.         FLAG_V = VFLAG_CLEAR;
  2865.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  2866.  
  2867.         m68ki_write_16(ea, FLAG_Z);
  2868. }
  2869.  
  2870.  
  2871. void m68k_op_and_16_re_di(void)
  2872. {
  2873.         uint ea = EA_AY_DI_16();
  2874.         uint res = DX & m68ki_read_16(ea);
  2875.  
  2876.         FLAG_N = NFLAG_16(res);
  2877.         FLAG_C = CFLAG_CLEAR;
  2878.         FLAG_V = VFLAG_CLEAR;
  2879.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  2880.  
  2881.         m68ki_write_16(ea, FLAG_Z);
  2882. }
  2883.  
  2884.  
  2885. void m68k_op_and_16_re_ix(void)
  2886. {
  2887.         uint ea = EA_AY_IX_16();
  2888.         uint res = DX & m68ki_read_16(ea);
  2889.  
  2890.         FLAG_N = NFLAG_16(res);
  2891.         FLAG_C = CFLAG_CLEAR;
  2892.         FLAG_V = VFLAG_CLEAR;
  2893.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  2894.  
  2895.         m68ki_write_16(ea, FLAG_Z);
  2896. }
  2897.  
  2898.  
  2899. void m68k_op_and_16_re_aw(void)
  2900. {
  2901.         uint ea = EA_AW_16();
  2902.         uint res = DX & m68ki_read_16(ea);
  2903.  
  2904.         FLAG_N = NFLAG_16(res);
  2905.         FLAG_C = CFLAG_CLEAR;
  2906.         FLAG_V = VFLAG_CLEAR;
  2907.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  2908.  
  2909.         m68ki_write_16(ea, FLAG_Z);
  2910. }
  2911.  
  2912.  
  2913. void m68k_op_and_16_re_al(void)
  2914. {
  2915.         uint ea = EA_AL_16();
  2916.         uint res = DX & m68ki_read_16(ea);
  2917.  
  2918.         FLAG_N = NFLAG_16(res);
  2919.         FLAG_C = CFLAG_CLEAR;
  2920.         FLAG_V = VFLAG_CLEAR;
  2921.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  2922.  
  2923.         m68ki_write_16(ea, FLAG_Z);
  2924. }
  2925.  
  2926.  
  2927. void m68k_op_and_32_re_ai(void)
  2928. {
  2929.         uint ea = EA_AY_AI_32();
  2930.         uint res = DX & m68ki_read_32(ea);
  2931.  
  2932.         FLAG_N = NFLAG_32(res);
  2933.         FLAG_Z = res;
  2934.         FLAG_C = CFLAG_CLEAR;
  2935.         FLAG_V = VFLAG_CLEAR;
  2936.  
  2937.         m68ki_write_32(ea, res);
  2938. }
  2939.  
  2940.  
  2941. void m68k_op_and_32_re_pi(void)
  2942. {
  2943.         uint ea = EA_AY_PI_32();
  2944.         uint res = DX & m68ki_read_32(ea);
  2945.  
  2946.         FLAG_N = NFLAG_32(res);
  2947.         FLAG_Z = res;
  2948.         FLAG_C = CFLAG_CLEAR;
  2949.         FLAG_V = VFLAG_CLEAR;
  2950.  
  2951.         m68ki_write_32(ea, res);
  2952. }
  2953.  
  2954.  
  2955. void m68k_op_and_32_re_pd(void)
  2956. {
  2957.         uint ea = EA_AY_PD_32();
  2958.         uint res = DX & m68ki_read_32(ea);
  2959.  
  2960.         FLAG_N = NFLAG_32(res);
  2961.         FLAG_Z = res;
  2962.         FLAG_C = CFLAG_CLEAR;
  2963.         FLAG_V = VFLAG_CLEAR;
  2964.  
  2965.         m68ki_write_32(ea, res);
  2966. }
  2967.  
  2968.  
  2969. void m68k_op_and_32_re_di(void)
  2970. {
  2971.         uint ea = EA_AY_DI_32();
  2972.         uint res = DX & m68ki_read_32(ea);
  2973.  
  2974.         FLAG_N = NFLAG_32(res);
  2975.         FLAG_Z = res;
  2976.         FLAG_C = CFLAG_CLEAR;
  2977.         FLAG_V = VFLAG_CLEAR;
  2978.  
  2979.         m68ki_write_32(ea, res);
  2980. }
  2981.  
  2982.  
  2983. void m68k_op_and_32_re_ix(void)
  2984. {
  2985.         uint ea = EA_AY_IX_32();
  2986.         uint res = DX & m68ki_read_32(ea);
  2987.  
  2988.         FLAG_N = NFLAG_32(res);
  2989.         FLAG_Z = res;
  2990.         FLAG_C = CFLAG_CLEAR;
  2991.         FLAG_V = VFLAG_CLEAR;
  2992.  
  2993.         m68ki_write_32(ea, res);
  2994. }
  2995.  
  2996.  
  2997. void m68k_op_and_32_re_aw(void)
  2998. {
  2999.         uint ea = EA_AW_32();
  3000.         uint res = DX & m68ki_read_32(ea);
  3001.  
  3002.         FLAG_N = NFLAG_32(res);
  3003.         FLAG_Z = res;
  3004.         FLAG_C = CFLAG_CLEAR;
  3005.         FLAG_V = VFLAG_CLEAR;
  3006.  
  3007.         m68ki_write_32(ea, res);
  3008. }
  3009.  
  3010.  
  3011. void m68k_op_and_32_re_al(void)
  3012. {
  3013.         uint ea = EA_AL_32();
  3014.         uint res = DX & m68ki_read_32(ea);
  3015.  
  3016.         FLAG_N = NFLAG_32(res);
  3017.         FLAG_Z = res;
  3018.         FLAG_C = CFLAG_CLEAR;
  3019.         FLAG_V = VFLAG_CLEAR;
  3020.  
  3021.         m68ki_write_32(ea, res);
  3022. }
  3023.  
  3024.  
  3025. void m68k_op_andi_8_d(void)
  3026. {
  3027.         FLAG_Z = MASK_OUT_ABOVE_8(DY &= (OPER_I_8() | 0xffffff00));
  3028.  
  3029.         FLAG_N = NFLAG_8(FLAG_Z);
  3030.         FLAG_C = CFLAG_CLEAR;
  3031.         FLAG_V = VFLAG_CLEAR;
  3032. }
  3033.  
  3034.  
  3035. void m68k_op_andi_8_ai(void)
  3036. {
  3037.         uint src = OPER_I_8();
  3038.         uint ea = EA_AY_AI_8();
  3039.         uint res = src & m68ki_read_8(ea);
  3040.  
  3041.         FLAG_N = NFLAG_8(res);
  3042.         FLAG_Z = res;
  3043.         FLAG_C = CFLAG_CLEAR;
  3044.         FLAG_V = VFLAG_CLEAR;
  3045.  
  3046.         m68ki_write_8(ea, res);
  3047. }
  3048.  
  3049.  
  3050. void m68k_op_andi_8_pi(void)
  3051. {
  3052.         uint src = OPER_I_8();
  3053.         uint ea = EA_AY_PI_8();
  3054.         uint res = src & m68ki_read_8(ea);
  3055.  
  3056.         FLAG_N = NFLAG_8(res);
  3057.         FLAG_Z = res;
  3058.         FLAG_C = CFLAG_CLEAR;
  3059.         FLAG_V = VFLAG_CLEAR;
  3060.  
  3061.         m68ki_write_8(ea, res);
  3062. }
  3063.  
  3064.  
  3065. void m68k_op_andi_8_pi7(void)
  3066. {
  3067.         uint src = OPER_I_8();
  3068.         uint ea = EA_A7_PI_8();
  3069.         uint res = src & m68ki_read_8(ea);
  3070.  
  3071.         FLAG_N = NFLAG_8(res);
  3072.         FLAG_Z = res;
  3073.         FLAG_C = CFLAG_CLEAR;
  3074.         FLAG_V = VFLAG_CLEAR;
  3075.  
  3076.         m68ki_write_8(ea, res);
  3077. }
  3078.  
  3079.  
  3080. void m68k_op_andi_8_pd(void)
  3081. {
  3082.         uint src = OPER_I_8();
  3083.         uint ea = EA_AY_PD_8();
  3084.         uint res = src & m68ki_read_8(ea);
  3085.  
  3086.         FLAG_N = NFLAG_8(res);
  3087.         FLAG_Z = res;
  3088.         FLAG_C = CFLAG_CLEAR;
  3089.         FLAG_V = VFLAG_CLEAR;
  3090.  
  3091.         m68ki_write_8(ea, res);
  3092. }
  3093.  
  3094.  
  3095. void m68k_op_andi_8_pd7(void)
  3096. {
  3097.         uint src = OPER_I_8();
  3098.         uint ea = EA_A7_PD_8();
  3099.         uint res = src & m68ki_read_8(ea);
  3100.  
  3101.         FLAG_N = NFLAG_8(res);
  3102.         FLAG_Z = res;
  3103.         FLAG_C = CFLAG_CLEAR;
  3104.         FLAG_V = VFLAG_CLEAR;
  3105.  
  3106.         m68ki_write_8(ea, res);
  3107. }
  3108.  
  3109.  
  3110. void m68k_op_andi_8_di(void)
  3111. {
  3112.         uint src = OPER_I_8();
  3113.         uint ea = EA_AY_DI_8();
  3114.         uint res = src & m68ki_read_8(ea);
  3115.  
  3116.         FLAG_N = NFLAG_8(res);
  3117.         FLAG_Z = res;
  3118.         FLAG_C = CFLAG_CLEAR;
  3119.         FLAG_V = VFLAG_CLEAR;
  3120.  
  3121.         m68ki_write_8(ea, res);
  3122. }
  3123.  
  3124.  
  3125. void m68k_op_andi_8_ix(void)
  3126. {
  3127.         uint src = OPER_I_8();
  3128.         uint ea = EA_AY_IX_8();
  3129.         uint res = src & m68ki_read_8(ea);
  3130.  
  3131.         FLAG_N = NFLAG_8(res);
  3132.         FLAG_Z = res;
  3133.         FLAG_C = CFLAG_CLEAR;
  3134.         FLAG_V = VFLAG_CLEAR;
  3135.  
  3136.         m68ki_write_8(ea, res);
  3137. }
  3138.  
  3139.  
  3140. void m68k_op_andi_8_aw(void)
  3141. {
  3142.         uint src = OPER_I_8();
  3143.         uint ea = EA_AW_8();
  3144.         uint res = src & m68ki_read_8(ea);
  3145.  
  3146.         FLAG_N = NFLAG_8(res);
  3147.         FLAG_Z = res;
  3148.         FLAG_C = CFLAG_CLEAR;
  3149.         FLAG_V = VFLAG_CLEAR;
  3150.  
  3151.         m68ki_write_8(ea, res);
  3152. }
  3153.  
  3154.  
  3155. void m68k_op_andi_8_al(void)
  3156. {
  3157.         uint src = OPER_I_8();
  3158.         uint ea = EA_AL_8();
  3159.         uint res = src & m68ki_read_8(ea);
  3160.  
  3161.         FLAG_N = NFLAG_8(res);
  3162.         FLAG_Z = res;
  3163.         FLAG_C = CFLAG_CLEAR;
  3164.         FLAG_V = VFLAG_CLEAR;
  3165.  
  3166.         m68ki_write_8(ea, res);
  3167. }
  3168.  
  3169.  
  3170. void m68k_op_andi_16_d(void)
  3171. {
  3172.         FLAG_Z = MASK_OUT_ABOVE_16(DY &= (OPER_I_16() | 0xffff0000));
  3173.  
  3174.         FLAG_N = NFLAG_16(FLAG_Z);
  3175.         FLAG_C = CFLAG_CLEAR;
  3176.         FLAG_V = VFLAG_CLEAR;
  3177. }
  3178.  
  3179.  
  3180. void m68k_op_andi_16_ai(void)
  3181. {
  3182.         uint src = OPER_I_16();
  3183.         uint ea = EA_AY_AI_16();
  3184.         uint res = src & m68ki_read_16(ea);
  3185.  
  3186.         FLAG_N = NFLAG_16(res);
  3187.         FLAG_Z = res;
  3188.         FLAG_C = CFLAG_CLEAR;
  3189.         FLAG_V = VFLAG_CLEAR;
  3190.  
  3191.         m68ki_write_16(ea, res);
  3192. }
  3193.  
  3194.  
  3195. void m68k_op_andi_16_pi(void)
  3196. {
  3197.         uint src = OPER_I_16();
  3198.         uint ea = EA_AY_PI_16();
  3199.         uint res = src & m68ki_read_16(ea);
  3200.  
  3201.         FLAG_N = NFLAG_16(res);
  3202.         FLAG_Z = res;
  3203.         FLAG_C = CFLAG_CLEAR;
  3204.         FLAG_V = VFLAG_CLEAR;
  3205.  
  3206.         m68ki_write_16(ea, res);
  3207. }
  3208.  
  3209.  
  3210. void m68k_op_andi_16_pd(void)
  3211. {
  3212.         uint src = OPER_I_16();
  3213.         uint ea = EA_AY_PD_16();
  3214.         uint res = src & m68ki_read_16(ea);
  3215.  
  3216.         FLAG_N = NFLAG_16(res);
  3217.         FLAG_Z = res;
  3218.         FLAG_C = CFLAG_CLEAR;
  3219.         FLAG_V = VFLAG_CLEAR;
  3220.  
  3221.         m68ki_write_16(ea, res);
  3222. }
  3223.  
  3224.  
  3225. void m68k_op_andi_16_di(void)
  3226. {
  3227.         uint src = OPER_I_16();
  3228.         uint ea = EA_AY_DI_16();
  3229.         uint res = src & m68ki_read_16(ea);
  3230.  
  3231.         FLAG_N = NFLAG_16(res);
  3232.         FLAG_Z = res;
  3233.         FLAG_C = CFLAG_CLEAR;
  3234.         FLAG_V = VFLAG_CLEAR;
  3235.  
  3236.         m68ki_write_16(ea, res);
  3237. }
  3238.  
  3239.  
  3240. void m68k_op_andi_16_ix(void)
  3241. {
  3242.         uint src = OPER_I_16();
  3243.         uint ea = EA_AY_IX_16();
  3244.         uint res = src & m68ki_read_16(ea);
  3245.  
  3246.         FLAG_N = NFLAG_16(res);
  3247.         FLAG_Z = res;
  3248.         FLAG_C = CFLAG_CLEAR;
  3249.         FLAG_V = VFLAG_CLEAR;
  3250.  
  3251.         m68ki_write_16(ea, res);
  3252. }
  3253.  
  3254.  
  3255. void m68k_op_andi_16_aw(void)
  3256. {
  3257.         uint src = OPER_I_16();
  3258.         uint ea = EA_AW_16();
  3259.         uint res = src & m68ki_read_16(ea);
  3260.  
  3261.         FLAG_N = NFLAG_16(res);
  3262.         FLAG_Z = res;
  3263.         FLAG_C = CFLAG_CLEAR;
  3264.         FLAG_V = VFLAG_CLEAR;
  3265.  
  3266.         m68ki_write_16(ea, res);
  3267. }
  3268.  
  3269.  
  3270. void m68k_op_andi_16_al(void)
  3271. {
  3272.         uint src = OPER_I_16();
  3273.         uint ea = EA_AL_16();
  3274.         uint res = src & m68ki_read_16(ea);
  3275.  
  3276.         FLAG_N = NFLAG_16(res);
  3277.         FLAG_Z = res;
  3278.         FLAG_C = CFLAG_CLEAR;
  3279.         FLAG_V = VFLAG_CLEAR;
  3280.  
  3281.         m68ki_write_16(ea, res);
  3282. }
  3283.  
  3284.  
  3285. void m68k_op_andi_32_d(void)
  3286. {
  3287.         FLAG_Z = DY &= (OPER_I_32());
  3288.  
  3289.         FLAG_N = NFLAG_32(FLAG_Z);
  3290.         FLAG_C = CFLAG_CLEAR;
  3291.         FLAG_V = VFLAG_CLEAR;
  3292. }
  3293.  
  3294.  
  3295. void m68k_op_andi_32_ai(void)
  3296. {
  3297.         uint src = OPER_I_32();
  3298.         uint ea = EA_AY_AI_32();
  3299.         uint res = src & m68ki_read_32(ea);
  3300.  
  3301.         FLAG_N = NFLAG_32(res);
  3302.         FLAG_Z = res;
  3303.         FLAG_C = CFLAG_CLEAR;
  3304.         FLAG_V = VFLAG_CLEAR;
  3305.  
  3306.         m68ki_write_32(ea, res);
  3307. }
  3308.  
  3309.  
  3310. void m68k_op_andi_32_pi(void)
  3311. {
  3312.         uint src = OPER_I_32();
  3313.         uint ea = EA_AY_PI_32();
  3314.         uint res = src & m68ki_read_32(ea);
  3315.  
  3316.         FLAG_N = NFLAG_32(res);
  3317.         FLAG_Z = res;
  3318.         FLAG_C = CFLAG_CLEAR;
  3319.         FLAG_V = VFLAG_CLEAR;
  3320.  
  3321.         m68ki_write_32(ea, res);
  3322. }
  3323.  
  3324.  
  3325. void m68k_op_andi_32_pd(void)
  3326. {
  3327.         uint src = OPER_I_32();
  3328.         uint ea = EA_AY_PD_32();
  3329.         uint res = src & m68ki_read_32(ea);
  3330.  
  3331.         FLAG_N = NFLAG_32(res);
  3332.         FLAG_Z = res;
  3333.         FLAG_C = CFLAG_CLEAR;
  3334.         FLAG_V = VFLAG_CLEAR;
  3335.  
  3336.         m68ki_write_32(ea, res);
  3337. }
  3338.  
  3339.  
  3340. void m68k_op_andi_32_di(void)
  3341. {
  3342.         uint src = OPER_I_32();
  3343.         uint ea = EA_AY_DI_32();
  3344.         uint res = src & m68ki_read_32(ea);
  3345.  
  3346.         FLAG_N = NFLAG_32(res);
  3347.         FLAG_Z = res;
  3348.         FLAG_C = CFLAG_CLEAR;
  3349.         FLAG_V = VFLAG_CLEAR;
  3350.  
  3351.         m68ki_write_32(ea, res);
  3352. }
  3353.  
  3354.  
  3355. void m68k_op_andi_32_ix(void)
  3356. {
  3357.         uint src = OPER_I_32();
  3358.         uint ea = EA_AY_IX_32();
  3359.         uint res = src & m68ki_read_32(ea);
  3360.  
  3361.         FLAG_N = NFLAG_32(res);
  3362.         FLAG_Z = res;
  3363.         FLAG_C = CFLAG_CLEAR;
  3364.         FLAG_V = VFLAG_CLEAR;
  3365.  
  3366.         m68ki_write_32(ea, res);
  3367. }
  3368.  
  3369.  
  3370. void m68k_op_andi_32_aw(void)
  3371. {
  3372.         uint src = OPER_I_32();
  3373.         uint ea = EA_AW_32();
  3374.         uint res = src & m68ki_read_32(ea);
  3375.  
  3376.         FLAG_N = NFLAG_32(res);
  3377.         FLAG_Z = res;
  3378.         FLAG_C = CFLAG_CLEAR;
  3379.         FLAG_V = VFLAG_CLEAR;
  3380.  
  3381.         m68ki_write_32(ea, res);
  3382. }
  3383.  
  3384.  
  3385. void m68k_op_andi_32_al(void)
  3386. {
  3387.         uint src = OPER_I_32();
  3388.         uint ea = EA_AL_32();
  3389.         uint res = src & m68ki_read_32(ea);
  3390.  
  3391.         FLAG_N = NFLAG_32(res);
  3392.         FLAG_Z = res;
  3393.         FLAG_C = CFLAG_CLEAR;
  3394.         FLAG_V = VFLAG_CLEAR;
  3395.  
  3396.         m68ki_write_32(ea, res);
  3397. }
  3398.  
  3399.  
  3400. void m68k_op_andi_16_toc(void)
  3401. {
  3402.         m68ki_set_ccr(m68ki_get_ccr() & OPER_I_16());
  3403. }
  3404.  
  3405.  
  3406. void m68k_op_andi_16_tos(void)
  3407. {
  3408.         if(FLAG_S)
  3409.         {
  3410.                 uint src = OPER_I_16();
  3411.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  3412.                 m68ki_set_sr(m68ki_get_sr() & src);
  3413.                 return;
  3414.         }
  3415.         m68ki_exception_privilege_violation();
  3416. }
  3417.  
  3418.  
  3419. void m68k_op_asr_8_s(void)
  3420. {
  3421.         uint* r_dst = &DY;
  3422.         uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
  3423.         uint src = MASK_OUT_ABOVE_8(*r_dst);
  3424.         uint res = src >> shift;
  3425.  
  3426.         if(shift != 0)
  3427.                 USE_CYCLES(shift<<CYC_SHIFT);
  3428.  
  3429.         if(GET_MSB_8(src))
  3430.                 res |= m68ki_shift_8_table[shift];
  3431.  
  3432.         *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
  3433.  
  3434.         FLAG_N = NFLAG_8(res);
  3435.         FLAG_Z = res;
  3436.         FLAG_V = VFLAG_CLEAR;
  3437.         FLAG_X = FLAG_C = src << (9-shift);
  3438. }
  3439.  
  3440.  
  3441. void m68k_op_asr_16_s(void)
  3442. {
  3443.         uint* r_dst = &DY;
  3444.         uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
  3445.         uint src = MASK_OUT_ABOVE_16(*r_dst);
  3446.         uint res = src >> shift;
  3447.  
  3448.         if(shift != 0)
  3449.                 USE_CYCLES(shift<<CYC_SHIFT);
  3450.  
  3451.         if(GET_MSB_16(src))
  3452.                 res |= m68ki_shift_16_table[shift];
  3453.  
  3454.         *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
  3455.  
  3456.         FLAG_N = NFLAG_16(res);
  3457.         FLAG_Z = res;
  3458.         FLAG_V = VFLAG_CLEAR;
  3459.         FLAG_X = FLAG_C = src << (9-shift);
  3460. }
  3461.  
  3462.  
  3463. void m68k_op_asr_32_s(void)
  3464. {
  3465.         uint* r_dst = &DY;
  3466.         uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
  3467.         uint src = *r_dst;
  3468.         uint res = src >> shift;
  3469.  
  3470.         if(shift != 0)
  3471.                 USE_CYCLES(shift<<CYC_SHIFT);
  3472.  
  3473.         if(GET_MSB_32(src))
  3474.                 res |= m68ki_shift_32_table[shift];
  3475.  
  3476.         *r_dst = res;
  3477.  
  3478.         FLAG_N = NFLAG_32(res);
  3479.         FLAG_Z = res;
  3480.         FLAG_V = VFLAG_CLEAR;
  3481.         FLAG_X = FLAG_C = src << (9-shift);
  3482. }
  3483.  
  3484.  
  3485. void m68k_op_asr_8_r(void)
  3486. {
  3487.         uint* r_dst = &DY;
  3488.         uint shift = DX & 0x3f;
  3489.         uint src = MASK_OUT_ABOVE_8(*r_dst);
  3490.         uint res = src >> shift;
  3491.  
  3492.         if(shift != 0)
  3493.         {
  3494.                 USE_CYCLES(shift<<CYC_SHIFT);
  3495.  
  3496.                 if(shift < 8)
  3497.                 {
  3498.                         if(GET_MSB_8(src))
  3499.                                 res |= m68ki_shift_8_table[shift];
  3500.  
  3501.                         *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
  3502.  
  3503.                         FLAG_X = FLAG_C = src << (9-shift);
  3504.                         FLAG_N = NFLAG_8(res);
  3505.                         FLAG_Z = res;
  3506.                         FLAG_V = VFLAG_CLEAR;
  3507.                         return;
  3508.                 }
  3509.  
  3510.                 if(GET_MSB_8(src))
  3511.                 {
  3512.                         *r_dst |= 0xff;
  3513.                         FLAG_C = CFLAG_SET;
  3514.                         FLAG_X = XFLAG_SET;
  3515.                         FLAG_N = NFLAG_SET;
  3516.                         FLAG_Z = ZFLAG_CLEAR;
  3517.                         FLAG_V = VFLAG_CLEAR;
  3518.                         return;
  3519.                 }
  3520.  
  3521.                 *r_dst &= 0xffffff00;
  3522.                 FLAG_C = CFLAG_CLEAR;
  3523.                 FLAG_X = XFLAG_CLEAR;
  3524.                 FLAG_N = NFLAG_CLEAR;
  3525.                 FLAG_Z = ZFLAG_SET;
  3526.                 FLAG_V = VFLAG_CLEAR;
  3527.                 return;
  3528.         }
  3529.  
  3530.         FLAG_C = CFLAG_CLEAR;
  3531.         FLAG_N = NFLAG_8(src);
  3532.         FLAG_Z = src;
  3533.         FLAG_V = VFLAG_CLEAR;
  3534. }
  3535.  
  3536.  
  3537. void m68k_op_asr_16_r(void)
  3538. {
  3539.         uint* r_dst = &DY;
  3540.         uint shift = DX & 0x3f;
  3541.         uint src = MASK_OUT_ABOVE_16(*r_dst);
  3542.         uint res = src >> shift;
  3543.  
  3544.         if(shift != 0)
  3545.         {
  3546.                 USE_CYCLES(shift<<CYC_SHIFT);
  3547.  
  3548.                 if(shift < 16)
  3549.                 {
  3550.                         if(GET_MSB_16(src))
  3551.                                 res |= m68ki_shift_16_table[shift];
  3552.  
  3553.                         *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
  3554.  
  3555.                         FLAG_C = FLAG_X = (src >> (shift - 1))<<8;
  3556.                         FLAG_N = NFLAG_16(res);
  3557.                         FLAG_Z = res;
  3558.                         FLAG_V = VFLAG_CLEAR;
  3559.                         return;
  3560.                 }
  3561.  
  3562.                 if(GET_MSB_16(src))
  3563.                 {
  3564.                         *r_dst |= 0xffff;
  3565.                         FLAG_C = CFLAG_SET;
  3566.                         FLAG_X = XFLAG_SET;
  3567.                         FLAG_N = NFLAG_SET;
  3568.                         FLAG_Z = ZFLAG_CLEAR;
  3569.                         FLAG_V = VFLAG_CLEAR;
  3570.                         return;
  3571.                 }
  3572.  
  3573.                 *r_dst &= 0xffff0000;
  3574.                 FLAG_C = CFLAG_CLEAR;
  3575.                 FLAG_X = XFLAG_CLEAR;
  3576.                 FLAG_N = NFLAG_CLEAR;
  3577.                 FLAG_Z = ZFLAG_SET;
  3578.                 FLAG_V = VFLAG_CLEAR;
  3579.                 return;
  3580.         }
  3581.  
  3582.         FLAG_C = CFLAG_CLEAR;
  3583.         FLAG_N = NFLAG_16(src);
  3584.         FLAG_Z = src;
  3585.         FLAG_V = VFLAG_CLEAR;
  3586. }
  3587.  
  3588.  
  3589. void m68k_op_asr_32_r(void)
  3590. {
  3591.         uint* r_dst = &DY;
  3592.         uint shift = DX & 0x3f;
  3593.         uint src = *r_dst;
  3594.         uint res = src >> shift;
  3595.  
  3596.         if(shift != 0)
  3597.         {
  3598.                 USE_CYCLES(shift<<CYC_SHIFT);
  3599.  
  3600.                 if(shift < 32)
  3601.                 {
  3602.                         if(GET_MSB_32(src))
  3603.                                 res |= m68ki_shift_32_table[shift];
  3604.  
  3605.                         *r_dst = res;
  3606.  
  3607.                         FLAG_C = FLAG_X = (src >> (shift - 1))<<8;
  3608.                         FLAG_N = NFLAG_32(res);
  3609.                         FLAG_Z = res;
  3610.                         FLAG_V = VFLAG_CLEAR;
  3611.                         return;
  3612.                 }
  3613.  
  3614.                 if(GET_MSB_32(src))
  3615.                 {
  3616.                         *r_dst = 0xffffffff;
  3617.                         FLAG_C = CFLAG_SET;
  3618.                         FLAG_X = XFLAG_SET;
  3619.                         FLAG_N = NFLAG_SET;
  3620.                         FLAG_Z = ZFLAG_CLEAR;
  3621.                         FLAG_V = VFLAG_CLEAR;
  3622.                         return;
  3623.                 }
  3624.  
  3625.                 *r_dst = 0;
  3626.                 FLAG_C = CFLAG_CLEAR;
  3627.                 FLAG_X = XFLAG_CLEAR;
  3628.                 FLAG_N = NFLAG_CLEAR;
  3629.                 FLAG_Z = ZFLAG_SET;
  3630.                 FLAG_V = VFLAG_CLEAR;
  3631.                 return;
  3632.         }
  3633.  
  3634.         FLAG_C = CFLAG_CLEAR;
  3635.         FLAG_N = NFLAG_32(src);
  3636.         FLAG_Z = src;
  3637.         FLAG_V = VFLAG_CLEAR;
  3638. }
  3639.  
  3640.  
  3641. void m68k_op_asr_16_ai(void)
  3642. {
  3643.         uint ea = EA_AY_AI_16();
  3644.         uint src = m68ki_read_16(ea);
  3645.         uint res = src >> 1;
  3646.  
  3647.         if(GET_MSB_16(src))
  3648.                 res |= 0x8000;
  3649.  
  3650.         m68ki_write_16(ea, res);
  3651.  
  3652.         FLAG_N = NFLAG_16(res);
  3653.         FLAG_Z = res;
  3654.         FLAG_V = VFLAG_CLEAR;
  3655.         FLAG_C = FLAG_X = src << 8;
  3656. }
  3657.  
  3658.  
  3659. void m68k_op_asr_16_pi(void)
  3660. {
  3661.         uint ea = EA_AY_PI_16();
  3662.         uint src = m68ki_read_16(ea);
  3663.         uint res = src >> 1;
  3664.  
  3665.         if(GET_MSB_16(src))
  3666.                 res |= 0x8000;
  3667.  
  3668.         m68ki_write_16(ea, res);
  3669.  
  3670.         FLAG_N = NFLAG_16(res);
  3671.         FLAG_Z = res;
  3672.         FLAG_V = VFLAG_CLEAR;
  3673.         FLAG_C = FLAG_X = src << 8;
  3674. }
  3675.  
  3676.  
  3677. void m68k_op_asr_16_pd(void)
  3678. {
  3679.         uint ea = EA_AY_PD_16();
  3680.         uint src = m68ki_read_16(ea);
  3681.         uint res = src >> 1;
  3682.  
  3683.         if(GET_MSB_16(src))
  3684.                 res |= 0x8000;
  3685.  
  3686.         m68ki_write_16(ea, res);
  3687.  
  3688.         FLAG_N = NFLAG_16(res);
  3689.         FLAG_Z = res;
  3690.         FLAG_V = VFLAG_CLEAR;
  3691.         FLAG_C = FLAG_X = src << 8;
  3692. }
  3693.  
  3694.  
  3695. void m68k_op_asr_16_di(void)
  3696. {
  3697.         uint ea = EA_AY_DI_16();
  3698.         uint src = m68ki_read_16(ea);
  3699.         uint res = src >> 1;
  3700.  
  3701.         if(GET_MSB_16(src))
  3702.                 res |= 0x8000;
  3703.  
  3704.         m68ki_write_16(ea, res);
  3705.  
  3706.         FLAG_N = NFLAG_16(res);
  3707.         FLAG_Z = res;
  3708.         FLAG_V = VFLAG_CLEAR;
  3709.         FLAG_C = FLAG_X = src << 8;
  3710. }
  3711.  
  3712.  
  3713. void m68k_op_asr_16_ix(void)
  3714. {
  3715.         uint ea = EA_AY_IX_16();
  3716.         uint src = m68ki_read_16(ea);
  3717.         uint res = src >> 1;
  3718.  
  3719.         if(GET_MSB_16(src))
  3720.                 res |= 0x8000;
  3721.  
  3722.         m68ki_write_16(ea, res);
  3723.  
  3724.         FLAG_N = NFLAG_16(res);
  3725.         FLAG_Z = res;
  3726.         FLAG_V = VFLAG_CLEAR;
  3727.         FLAG_C = FLAG_X = src << 8;
  3728. }
  3729.  
  3730.  
  3731. void m68k_op_asr_16_aw(void)
  3732. {
  3733.         uint ea = EA_AW_16();
  3734.         uint src = m68ki_read_16(ea);
  3735.         uint res = src >> 1;
  3736.  
  3737.         if(GET_MSB_16(src))
  3738.                 res |= 0x8000;
  3739.  
  3740.         m68ki_write_16(ea, res);
  3741.  
  3742.         FLAG_N = NFLAG_16(res);
  3743.         FLAG_Z = res;
  3744.         FLAG_V = VFLAG_CLEAR;
  3745.         FLAG_C = FLAG_X = src << 8;
  3746. }
  3747.  
  3748.  
  3749. void m68k_op_asr_16_al(void)
  3750. {
  3751.         uint ea = EA_AL_16();
  3752.         uint src = m68ki_read_16(ea);
  3753.         uint res = src >> 1;
  3754.  
  3755.         if(GET_MSB_16(src))
  3756.                 res |= 0x8000;
  3757.  
  3758.         m68ki_write_16(ea, res);
  3759.  
  3760.         FLAG_N = NFLAG_16(res);
  3761.         FLAG_Z = res;
  3762.         FLAG_V = VFLAG_CLEAR;
  3763.         FLAG_C = FLAG_X = src << 8;
  3764. }
  3765.  
  3766.  
  3767. void m68k_op_asl_8_s(void)
  3768. {
  3769.         uint* r_dst = &DY;
  3770.         uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
  3771.         uint src = MASK_OUT_ABOVE_8(*r_dst);
  3772.         uint res = MASK_OUT_ABOVE_8(src << shift);
  3773.  
  3774.         if(shift != 0)
  3775.                 USE_CYCLES(shift<<CYC_SHIFT);
  3776.  
  3777.         *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
  3778.  
  3779.         FLAG_X = FLAG_C = src << shift;
  3780.         FLAG_N = NFLAG_8(res);
  3781.         FLAG_Z = res;
  3782.         src &= m68ki_shift_8_table[shift + 1];
  3783.         FLAG_V = (!(src == 0 || (src == m68ki_shift_8_table[shift + 1] && shift < 8)))<<7;
  3784. }
  3785.  
  3786.  
  3787. void m68k_op_asl_16_s(void)
  3788. {
  3789.         uint* r_dst = &DY;
  3790.         uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
  3791.         uint src = MASK_OUT_ABOVE_16(*r_dst);
  3792.         uint res = MASK_OUT_ABOVE_16(src << shift);
  3793.  
  3794.         if(shift != 0)
  3795.                 USE_CYCLES(shift<<CYC_SHIFT);
  3796.  
  3797.         *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
  3798.  
  3799.         FLAG_N = NFLAG_16(res);
  3800.         FLAG_Z = res;
  3801.         FLAG_X = FLAG_C = src >> (8-shift);
  3802.         src &= m68ki_shift_16_table[shift + 1];
  3803.         FLAG_V = (!(src == 0 || src == m68ki_shift_16_table[shift + 1]))<<7;
  3804. }
  3805.  
  3806.  
  3807. void m68k_op_asl_32_s(void)
  3808. {
  3809.         uint* r_dst = &DY;
  3810.         uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
  3811.         uint src = *r_dst;
  3812.         uint res = MASK_OUT_ABOVE_32(src << shift);
  3813.  
  3814.         if(shift != 0)
  3815.                 USE_CYCLES(shift<<CYC_SHIFT);
  3816.  
  3817.         *r_dst = res;
  3818.  
  3819.         FLAG_N = NFLAG_32(res);
  3820.         FLAG_Z = res;
  3821.         FLAG_X = FLAG_C = src >> (24-shift);
  3822.         src &= m68ki_shift_32_table[shift + 1];
  3823.         FLAG_V = (!(src == 0 || src == m68ki_shift_32_table[shift + 1]))<<7;
  3824. }
  3825.  
  3826.  
  3827. void m68k_op_asl_8_r(void)
  3828. {
  3829.         uint* r_dst = &DY;
  3830.         uint shift = DX & 0x3f;
  3831.         uint src = MASK_OUT_ABOVE_8(*r_dst);
  3832.         uint res = MASK_OUT_ABOVE_8(src << shift);
  3833.  
  3834.         if(shift != 0)
  3835.         {
  3836.                 USE_CYCLES(shift<<CYC_SHIFT);
  3837.  
  3838.                 if(shift < 8)
  3839.                 {
  3840.                         *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
  3841.                         FLAG_X = FLAG_C = src << shift;
  3842.                         FLAG_N = NFLAG_8(res);
  3843.                         FLAG_Z = res;
  3844.                         src &= m68ki_shift_8_table[shift + 1];
  3845.                         FLAG_V = (!(src == 0 || src == m68ki_shift_8_table[shift + 1]))<<7;
  3846.                         return;
  3847.                 }
  3848.  
  3849.                 *r_dst &= 0xffffff00;
  3850.                 FLAG_X = FLAG_C = ((shift == 8 ? src & 1 : 0))<<8;
  3851.                 FLAG_N = NFLAG_CLEAR;
  3852.                 FLAG_Z = ZFLAG_SET;
  3853.                 FLAG_V = (!(src == 0))<<7;
  3854.                 return;
  3855.         }
  3856.  
  3857.         FLAG_C = CFLAG_CLEAR;
  3858.         FLAG_N = NFLAG_8(src);
  3859.         FLAG_Z = src;
  3860.         FLAG_V = VFLAG_CLEAR;
  3861. }
  3862.  
  3863.  
  3864. void m68k_op_asl_16_r(void)
  3865. {
  3866.         uint* r_dst = &DY;
  3867.         uint shift = DX & 0x3f;
  3868.         uint src = MASK_OUT_ABOVE_16(*r_dst);
  3869.         uint res = MASK_OUT_ABOVE_16(src << shift);
  3870.  
  3871.         if(shift != 0)
  3872.         {
  3873.                 USE_CYCLES(shift<<CYC_SHIFT);
  3874.  
  3875.                 if(shift < 16)
  3876.                 {
  3877.                         *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
  3878.                         FLAG_X = FLAG_C = (src << shift) >> 8;
  3879.                         FLAG_N = NFLAG_16(res);
  3880.                         FLAG_Z = res;
  3881.                         src &= m68ki_shift_16_table[shift + 1];
  3882.                         FLAG_V = (!(src == 0 || src == m68ki_shift_16_table[shift + 1]))<<7;
  3883.                         return;
  3884.                 }
  3885.  
  3886.                 *r_dst &= 0xffff0000;
  3887.                 FLAG_X = FLAG_C = ((shift == 16 ? src & 1 : 0))<<8;
  3888.                 FLAG_N = NFLAG_CLEAR;
  3889.                 FLAG_Z = ZFLAG_SET;
  3890.                 FLAG_V = (!(src == 0))<<7;
  3891.                 return;
  3892.         }
  3893.  
  3894.         FLAG_C = CFLAG_CLEAR;
  3895.         FLAG_N = NFLAG_16(src);
  3896.         FLAG_Z = src;
  3897.         FLAG_V = VFLAG_CLEAR;
  3898. }
  3899.  
  3900.  
  3901. void m68k_op_asl_32_r(void)
  3902. {
  3903.         uint* r_dst = &DY;
  3904.         uint shift = DX & 0x3f;
  3905.         uint src = *r_dst;
  3906.         uint res = MASK_OUT_ABOVE_32(src << shift);
  3907.  
  3908.         if(shift != 0)
  3909.         {
  3910.                 USE_CYCLES(shift<<CYC_SHIFT);
  3911.  
  3912.                 if(shift < 32)
  3913.                 {
  3914.                         *r_dst = res;
  3915.                         FLAG_X = FLAG_C = (src >> (32 - shift)) << 8;
  3916.                         FLAG_N = NFLAG_32(res);
  3917.                         FLAG_Z = res;
  3918.                         src &= m68ki_shift_32_table[shift + 1];
  3919.                         FLAG_V = (!(src == 0 || src == m68ki_shift_32_table[shift + 1]))<<7;
  3920.                         return;
  3921.                 }
  3922.  
  3923.                 *r_dst = 0;
  3924.                 FLAG_X = FLAG_C = ((shift == 32 ? src & 1 : 0))<<8;
  3925.                 FLAG_N = NFLAG_CLEAR;
  3926.                 FLAG_Z = ZFLAG_SET;
  3927.                 FLAG_V = (!(src == 0))<<7;
  3928.                 return;
  3929.         }
  3930.  
  3931.         FLAG_C = CFLAG_CLEAR;
  3932.         FLAG_N = NFLAG_32(src);
  3933.         FLAG_Z = src;
  3934.         FLAG_V = VFLAG_CLEAR;
  3935. }
  3936.  
  3937.  
  3938. void m68k_op_asl_16_ai(void)
  3939. {
  3940.         uint ea = EA_AY_AI_16();
  3941.         uint src = m68ki_read_16(ea);
  3942.         uint res = MASK_OUT_ABOVE_16(src << 1);
  3943.  
  3944.         m68ki_write_16(ea, res);
  3945.  
  3946.         FLAG_N = NFLAG_16(res);
  3947.         FLAG_Z = res;
  3948.         FLAG_X = FLAG_C = src >> 7;
  3949.         src &= 0xc000;
  3950.         FLAG_V = (!(src == 0 || src == 0xc000))<<7;
  3951. }
  3952.  
  3953.  
  3954. void m68k_op_asl_16_pi(void)
  3955. {
  3956.         uint ea = EA_AY_PI_16();
  3957.         uint src = m68ki_read_16(ea);
  3958.         uint res = MASK_OUT_ABOVE_16(src << 1);
  3959.  
  3960.         m68ki_write_16(ea, res);
  3961.  
  3962.         FLAG_N = NFLAG_16(res);
  3963.         FLAG_Z = res;
  3964.         FLAG_X = FLAG_C = src >> 7;
  3965.         src &= 0xc000;
  3966.         FLAG_V = (!(src == 0 || src == 0xc000))<<7;
  3967. }
  3968.  
  3969.  
  3970. void m68k_op_asl_16_pd(void)
  3971. {
  3972.         uint ea = EA_AY_PD_16();
  3973.         uint src = m68ki_read_16(ea);
  3974.         uint res = MASK_OUT_ABOVE_16(src << 1);
  3975.  
  3976.         m68ki_write_16(ea, res);
  3977.  
  3978.         FLAG_N = NFLAG_16(res);
  3979.         FLAG_Z = res;
  3980.         FLAG_X = FLAG_C = src >> 7;
  3981.         src &= 0xc000;
  3982.         FLAG_V = (!(src == 0 || src == 0xc000))<<7;
  3983. }
  3984.  
  3985.  
  3986. void m68k_op_asl_16_di(void)
  3987. {
  3988.         uint ea = EA_AY_DI_16();
  3989.         uint src = m68ki_read_16(ea);
  3990.         uint res = MASK_OUT_ABOVE_16(src << 1);
  3991.  
  3992.         m68ki_write_16(ea, res);
  3993.  
  3994.         FLAG_N = NFLAG_16(res);
  3995.         FLAG_Z = res;
  3996.         FLAG_X = FLAG_C = src >> 7;
  3997.         src &= 0xc000;
  3998.         FLAG_V = (!(src == 0 || src == 0xc000))<<7;
  3999. }
  4000.  
  4001.  
  4002. void m68k_op_asl_16_ix(void)
  4003. {
  4004.         uint ea = EA_AY_IX_16();
  4005.         uint src = m68ki_read_16(ea);
  4006.         uint res = MASK_OUT_ABOVE_16(src << 1);
  4007.  
  4008.         m68ki_write_16(ea, res);
  4009.  
  4010.         FLAG_N = NFLAG_16(res);
  4011.         FLAG_Z = res;
  4012.         FLAG_X = FLAG_C = src >> 7;
  4013.         src &= 0xc000;
  4014.         FLAG_V = (!(src == 0 || src == 0xc000))<<7;
  4015. }
  4016.  
  4017.  
  4018. void m68k_op_asl_16_aw(void)
  4019. {
  4020.         uint ea = EA_AW_16();
  4021.         uint src = m68ki_read_16(ea);
  4022.         uint res = MASK_OUT_ABOVE_16(src << 1);
  4023.  
  4024.         m68ki_write_16(ea, res);
  4025.  
  4026.         FLAG_N = NFLAG_16(res);
  4027.         FLAG_Z = res;
  4028.         FLAG_X = FLAG_C = src >> 7;
  4029.         src &= 0xc000;
  4030.         FLAG_V = (!(src == 0 || src == 0xc000))<<7;
  4031. }
  4032.  
  4033.  
  4034. void m68k_op_asl_16_al(void)
  4035. {
  4036.         uint ea = EA_AL_16();
  4037.         uint src = m68ki_read_16(ea);
  4038.         uint res = MASK_OUT_ABOVE_16(src << 1);
  4039.  
  4040.         m68ki_write_16(ea, res);
  4041.  
  4042.         FLAG_N = NFLAG_16(res);
  4043.         FLAG_Z = res;
  4044.         FLAG_X = FLAG_C = src >> 7;
  4045.         src &= 0xc000;
  4046.         FLAG_V = (!(src == 0 || src == 0xc000))<<7;
  4047. }
  4048.  
  4049.  
  4050. void m68k_op_bhi_8(void)
  4051. {
  4052.         if(COND_HI())
  4053.         {
  4054.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  4055.                 m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR));
  4056.                 return;
  4057.         }
  4058.         USE_CYCLES(CYC_BCC_NOTAKE_B);
  4059. }
  4060.  
  4061.  
  4062. void m68k_op_bls_8(void)
  4063. {
  4064.         if(COND_LS())
  4065.         {
  4066.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  4067.                 m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR));
  4068.                 return;
  4069.         }
  4070.         USE_CYCLES(CYC_BCC_NOTAKE_B);
  4071. }
  4072.  
  4073.  
  4074. void m68k_op_bcc_8(void)
  4075. {
  4076.         if(COND_CC())
  4077.         {
  4078.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  4079.                 m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR));
  4080.                 return;
  4081.         }
  4082.         USE_CYCLES(CYC_BCC_NOTAKE_B);
  4083. }
  4084.  
  4085.  
  4086. void m68k_op_bcs_8(void)
  4087. {
  4088.         if(COND_CS())
  4089.         {
  4090.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  4091.                 m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR));
  4092.                 return;
  4093.         }
  4094.         USE_CYCLES(CYC_BCC_NOTAKE_B);
  4095. }
  4096.  
  4097.  
  4098. void m68k_op_bne_8(void)
  4099. {
  4100.         if(COND_NE())
  4101.         {
  4102.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  4103.                 m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR));
  4104.                 return;
  4105.         }
  4106.         USE_CYCLES(CYC_BCC_NOTAKE_B);
  4107. }
  4108.  
  4109.  
  4110. void m68k_op_beq_8(void)
  4111. {
  4112.         if(COND_EQ())
  4113.         {
  4114.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  4115.                 m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR));
  4116.                 return;
  4117.         }
  4118.         USE_CYCLES(CYC_BCC_NOTAKE_B);
  4119. }
  4120.  
  4121.  
  4122. void m68k_op_bvc_8(void)
  4123. {
  4124.         if(COND_VC())
  4125.         {
  4126.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  4127.                 m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR));
  4128.                 return;
  4129.         }
  4130.         USE_CYCLES(CYC_BCC_NOTAKE_B);
  4131. }
  4132.  
  4133.  
  4134. void m68k_op_bvs_8(void)
  4135. {
  4136.         if(COND_VS())
  4137.         {
  4138.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  4139.                 m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR));
  4140.                 return;
  4141.         }
  4142.         USE_CYCLES(CYC_BCC_NOTAKE_B);
  4143. }
  4144.  
  4145.  
  4146. void m68k_op_bpl_8(void)
  4147. {
  4148.         if(COND_PL())
  4149.         {
  4150.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  4151.                 m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR));
  4152.                 return;
  4153.         }
  4154.         USE_CYCLES(CYC_BCC_NOTAKE_B);
  4155. }
  4156.  
  4157.  
  4158. void m68k_op_bmi_8(void)
  4159. {
  4160.         if(COND_MI())
  4161.         {
  4162.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  4163.                 m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR));
  4164.                 return;
  4165.         }
  4166.         USE_CYCLES(CYC_BCC_NOTAKE_B);
  4167. }
  4168.  
  4169.  
  4170. void m68k_op_bge_8(void)
  4171. {
  4172.         if(COND_GE())
  4173.         {
  4174.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  4175.                 m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR));
  4176.                 return;
  4177.         }
  4178.         USE_CYCLES(CYC_BCC_NOTAKE_B);
  4179. }
  4180.  
  4181.  
  4182. void m68k_op_blt_8(void)
  4183. {
  4184.         if(COND_LT())
  4185.         {
  4186.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  4187.                 m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR));
  4188.                 return;
  4189.         }
  4190.         USE_CYCLES(CYC_BCC_NOTAKE_B);
  4191. }
  4192.  
  4193.  
  4194. void m68k_op_bgt_8(void)
  4195. {
  4196.         if(COND_GT())
  4197.         {
  4198.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  4199.                 m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR));
  4200.                 return;
  4201.         }
  4202.         USE_CYCLES(CYC_BCC_NOTAKE_B);
  4203. }
  4204.  
  4205.  
  4206. void m68k_op_ble_8(void)
  4207. {
  4208.         if(COND_LE())
  4209.         {
  4210.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  4211.                 m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR));
  4212.                 return;
  4213.         }
  4214.         USE_CYCLES(CYC_BCC_NOTAKE_B);
  4215. }
  4216.  
  4217.  
  4218. void m68k_op_bhi_16(void)
  4219. {
  4220.         if(COND_HI())
  4221.         {
  4222.                 uint offset = OPER_I_16();
  4223.                 REG_PC -= 2;
  4224.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  4225.                 m68ki_branch_16(offset);
  4226.                 return;
  4227.         }
  4228.         REG_PC += 2;
  4229.         USE_CYCLES(CYC_BCC_NOTAKE_W);
  4230. }
  4231.  
  4232.  
  4233. void m68k_op_bls_16(void)
  4234. {
  4235.         if(COND_LS())
  4236.         {
  4237.                 uint offset = OPER_I_16();
  4238.                 REG_PC -= 2;
  4239.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  4240.                 m68ki_branch_16(offset);
  4241.                 return;
  4242.         }
  4243.         REG_PC += 2;
  4244.         USE_CYCLES(CYC_BCC_NOTAKE_W);
  4245. }
  4246.  
  4247.  
  4248. void m68k_op_bcc_16(void)
  4249. {
  4250.         if(COND_CC())
  4251.         {
  4252.                 uint offset = OPER_I_16();
  4253.                 REG_PC -= 2;
  4254.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  4255.                 m68ki_branch_16(offset);
  4256.                 return;
  4257.         }
  4258.         REG_PC += 2;
  4259.         USE_CYCLES(CYC_BCC_NOTAKE_W);
  4260. }
  4261.  
  4262.  
  4263. void m68k_op_bcs_16(void)
  4264. {
  4265.         if(COND_CS())
  4266.         {
  4267.                 uint offset = OPER_I_16();
  4268.                 REG_PC -= 2;
  4269.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  4270.                 m68ki_branch_16(offset);
  4271.                 return;
  4272.         }
  4273.         REG_PC += 2;
  4274.         USE_CYCLES(CYC_BCC_NOTAKE_W);
  4275. }
  4276.  
  4277.  
  4278. void m68k_op_bne_16(void)
  4279. {
  4280.         if(COND_NE())
  4281.         {
  4282.                 uint offset = OPER_I_16();
  4283.                 REG_PC -= 2;
  4284.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  4285.                 m68ki_branch_16(offset);
  4286.                 return;
  4287.         }
  4288.         REG_PC += 2;
  4289.         USE_CYCLES(CYC_BCC_NOTAKE_W);
  4290. }
  4291.  
  4292.  
  4293. void m68k_op_beq_16(void)
  4294. {
  4295.         if(COND_EQ())
  4296.         {
  4297.                 uint offset = OPER_I_16();
  4298.                 REG_PC -= 2;
  4299.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  4300.                 m68ki_branch_16(offset);
  4301.                 return;
  4302.         }
  4303.         REG_PC += 2;
  4304.         USE_CYCLES(CYC_BCC_NOTAKE_W);
  4305. }
  4306.  
  4307.  
  4308. void m68k_op_bvc_16(void)
  4309. {
  4310.         if(COND_VC())
  4311.         {
  4312.                 uint offset = OPER_I_16();
  4313.                 REG_PC -= 2;
  4314.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  4315.                 m68ki_branch_16(offset);
  4316.                 return;
  4317.         }
  4318.         REG_PC += 2;
  4319.         USE_CYCLES(CYC_BCC_NOTAKE_W);
  4320. }
  4321.  
  4322.  
  4323. void m68k_op_bvs_16(void)
  4324. {
  4325.         if(COND_VS())
  4326.         {
  4327.                 uint offset = OPER_I_16();
  4328.                 REG_PC -= 2;
  4329.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  4330.                 m68ki_branch_16(offset);
  4331.                 return;
  4332.         }
  4333.         REG_PC += 2;
  4334.         USE_CYCLES(CYC_BCC_NOTAKE_W);
  4335. }
  4336.  
  4337.  
  4338. void m68k_op_bpl_16(void)
  4339. {
  4340.         if(COND_PL())
  4341.         {
  4342.                 uint offset = OPER_I_16();
  4343.                 REG_PC -= 2;
  4344.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  4345.                 m68ki_branch_16(offset);
  4346.                 return;
  4347.         }
  4348.         REG_PC += 2;
  4349.         USE_CYCLES(CYC_BCC_NOTAKE_W);
  4350. }
  4351.  
  4352.  
  4353. void m68k_op_bmi_16(void)
  4354. {
  4355.         if(COND_MI())
  4356.         {
  4357.                 uint offset = OPER_I_16();
  4358.                 REG_PC -= 2;
  4359.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  4360.                 m68ki_branch_16(offset);
  4361.                 return;
  4362.         }
  4363.         REG_PC += 2;
  4364.         USE_CYCLES(CYC_BCC_NOTAKE_W);
  4365. }
  4366.  
  4367.  
  4368. void m68k_op_bge_16(void)
  4369. {
  4370.         if(COND_GE())
  4371.         {
  4372.                 uint offset = OPER_I_16();
  4373.                 REG_PC -= 2;
  4374.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  4375.                 m68ki_branch_16(offset);
  4376.                 return;
  4377.         }
  4378.         REG_PC += 2;
  4379.         USE_CYCLES(CYC_BCC_NOTAKE_W);
  4380. }
  4381.  
  4382.  
  4383. void m68k_op_blt_16(void)
  4384. {
  4385.         if(COND_LT())
  4386.         {
  4387.                 uint offset = OPER_I_16();
  4388.                 REG_PC -= 2;
  4389.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  4390.                 m68ki_branch_16(offset);
  4391.                 return;
  4392.         }
  4393.         REG_PC += 2;
  4394.         USE_CYCLES(CYC_BCC_NOTAKE_W);
  4395. }
  4396.  
  4397.  
  4398. void m68k_op_bgt_16(void)
  4399. {
  4400.         if(COND_GT())
  4401.         {
  4402.                 uint offset = OPER_I_16();
  4403.                 REG_PC -= 2;
  4404.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  4405.                 m68ki_branch_16(offset);
  4406.                 return;
  4407.         }
  4408.         REG_PC += 2;
  4409.         USE_CYCLES(CYC_BCC_NOTAKE_W);
  4410. }
  4411.  
  4412.  
  4413. void m68k_op_ble_16(void)
  4414. {
  4415.         if(COND_LE())
  4416.         {
  4417.                 uint offset = OPER_I_16();
  4418.                 REG_PC -= 2;
  4419.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  4420.                 m68ki_branch_16(offset);
  4421.                 return;
  4422.         }
  4423.         REG_PC += 2;
  4424.         USE_CYCLES(CYC_BCC_NOTAKE_W);
  4425. }
  4426.  
  4427.  
  4428. void m68k_op_bhi_32(void)
  4429. {
  4430.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  4431.         {
  4432.                 if(COND_HI())
  4433.                 {
  4434.                         uint offset = OPER_I_32();
  4435.                         REG_PC -= 4;
  4436.                         m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  4437.                         m68ki_branch_32(offset);
  4438.                         return;
  4439.                 }
  4440.                 REG_PC += 4;
  4441.                 return;
  4442.         }
  4443.         else
  4444.         {
  4445.                 if(COND_HI())
  4446.                 {
  4447.                         m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  4448.                         m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR));
  4449.                         return;
  4450.                 }
  4451.                 USE_CYCLES(CYC_BCC_NOTAKE_B);
  4452.         }
  4453. }
  4454.  
  4455.  
  4456. void m68k_op_bls_32(void)
  4457. {
  4458.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  4459.         {
  4460.                 if(COND_LS())
  4461.                 {
  4462.                         uint offset = OPER_I_32();
  4463.                         REG_PC -= 4;
  4464.                         m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  4465.                         m68ki_branch_32(offset);
  4466.                         return;
  4467.                 }
  4468.                 REG_PC += 4;
  4469.                 return;
  4470.         }
  4471.         else
  4472.         {
  4473.                 if(COND_LS())
  4474.                 {
  4475.                         m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  4476.                         m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR));
  4477.                         return;
  4478.                 }
  4479.                 USE_CYCLES(CYC_BCC_NOTAKE_B);
  4480.         }
  4481. }
  4482.  
  4483.  
  4484. void m68k_op_bcc_32(void)
  4485. {
  4486.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  4487.         {
  4488.                 if(COND_CC())
  4489.                 {
  4490.                         uint offset = OPER_I_32();
  4491.                         REG_PC -= 4;
  4492.                         m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  4493.                         m68ki_branch_32(offset);
  4494.                         return;
  4495.                 }
  4496.                 REG_PC += 4;
  4497.                 return;
  4498.         }
  4499.         else
  4500.         {
  4501.                 if(COND_CC())
  4502.                 {
  4503.                         m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  4504.                         m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR));
  4505.                         return;
  4506.                 }
  4507.                 USE_CYCLES(CYC_BCC_NOTAKE_B);
  4508.         }
  4509. }
  4510.  
  4511.  
  4512. void m68k_op_bcs_32(void)
  4513. {
  4514.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  4515.         {
  4516.                 if(COND_CS())
  4517.                 {
  4518.                         uint offset = OPER_I_32();
  4519.                         REG_PC -= 4;
  4520.                         m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  4521.                         m68ki_branch_32(offset);
  4522.                         return;
  4523.                 }
  4524.                 REG_PC += 4;
  4525.                 return;
  4526.         }
  4527.         else
  4528.         {
  4529.                 if(COND_CS())
  4530.                 {
  4531.                         m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  4532.                         m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR));
  4533.                         return;
  4534.                 }
  4535.                 USE_CYCLES(CYC_BCC_NOTAKE_B);
  4536.         }
  4537. }
  4538.  
  4539.  
  4540. void m68k_op_bne_32(void)
  4541. {
  4542.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  4543.         {
  4544.                 if(COND_NE())
  4545.                 {
  4546.                         uint offset = OPER_I_32();
  4547.                         REG_PC -= 4;
  4548.                         m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  4549.                         m68ki_branch_32(offset);
  4550.                         return;
  4551.                 }
  4552.                 REG_PC += 4;
  4553.                 return;
  4554.         }
  4555.         else
  4556.         {
  4557.                 if(COND_NE())
  4558.                 {
  4559.                         m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  4560.                         m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR));
  4561.                         return;
  4562.                 }
  4563.                 USE_CYCLES(CYC_BCC_NOTAKE_B);
  4564.         }
  4565. }
  4566.  
  4567.  
  4568. void m68k_op_beq_32(void)
  4569. {
  4570.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  4571.         {
  4572.                 if(COND_EQ())
  4573.                 {
  4574.                         uint offset = OPER_I_32();
  4575.                         REG_PC -= 4;
  4576.                         m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  4577.                         m68ki_branch_32(offset);
  4578.                         return;
  4579.                 }
  4580.                 REG_PC += 4;
  4581.                 return;
  4582.         }
  4583.         else
  4584.         {
  4585.                 if(COND_EQ())
  4586.                 {
  4587.                         m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  4588.                         m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR));
  4589.                         return;
  4590.                 }
  4591.                 USE_CYCLES(CYC_BCC_NOTAKE_B);
  4592.         }
  4593. }
  4594.  
  4595.  
  4596. void m68k_op_bvc_32(void)
  4597. {
  4598.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  4599.         {
  4600.                 if(COND_VC())
  4601.                 {
  4602.                         uint offset = OPER_I_32();
  4603.                         REG_PC -= 4;
  4604.                         m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  4605.                         m68ki_branch_32(offset);
  4606.                         return;
  4607.                 }
  4608.                 REG_PC += 4;
  4609.                 return;
  4610.         }
  4611.         else
  4612.         {
  4613.                 if(COND_VC())
  4614.                 {
  4615.                         m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  4616.                         m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR));
  4617.                         return;
  4618.                 }
  4619.                 USE_CYCLES(CYC_BCC_NOTAKE_B);
  4620.         }
  4621. }
  4622.  
  4623.  
  4624. void m68k_op_bvs_32(void)
  4625. {
  4626.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  4627.         {
  4628.                 if(COND_VS())
  4629.                 {
  4630.                         uint offset = OPER_I_32();
  4631.                         REG_PC -= 4;
  4632.                         m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  4633.                         m68ki_branch_32(offset);
  4634.                         return;
  4635.                 }
  4636.                 REG_PC += 4;
  4637.                 return;
  4638.         }
  4639.         else
  4640.         {
  4641.                 if(COND_VS())
  4642.                 {
  4643.                         m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  4644.                         m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR));
  4645.                         return;
  4646.                 }
  4647.                 USE_CYCLES(CYC_BCC_NOTAKE_B);
  4648.         }
  4649. }
  4650.  
  4651.  
  4652. void m68k_op_bpl_32(void)
  4653. {
  4654.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  4655.         {
  4656.                 if(COND_PL())
  4657.                 {
  4658.                         uint offset = OPER_I_32();
  4659.                         REG_PC -= 4;
  4660.                         m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  4661.                         m68ki_branch_32(offset);
  4662.                         return;
  4663.                 }
  4664.                 REG_PC += 4;
  4665.                 return;
  4666.         }
  4667.         else
  4668.         {
  4669.                 if(COND_PL())
  4670.                 {
  4671.                         m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  4672.                         m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR));
  4673.                         return;
  4674.                 }
  4675.                 USE_CYCLES(CYC_BCC_NOTAKE_B);
  4676.         }
  4677. }
  4678.  
  4679.  
  4680. void m68k_op_bmi_32(void)
  4681. {
  4682.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  4683.         {
  4684.                 if(COND_MI())
  4685.                 {
  4686.                         uint offset = OPER_I_32();
  4687.                         REG_PC -= 4;
  4688.                         m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  4689.                         m68ki_branch_32(offset);
  4690.                         return;
  4691.                 }
  4692.                 REG_PC += 4;
  4693.                 return;
  4694.         }
  4695.         else
  4696.         {
  4697.                 if(COND_MI())
  4698.                 {
  4699.                         m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  4700.                         m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR));
  4701.                         return;
  4702.                 }
  4703.                 USE_CYCLES(CYC_BCC_NOTAKE_B);
  4704.         }
  4705. }
  4706.  
  4707.  
  4708. void m68k_op_bge_32(void)
  4709. {
  4710.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  4711.         {
  4712.                 if(COND_GE())
  4713.                 {
  4714.                         uint offset = OPER_I_32();
  4715.                         REG_PC -= 4;
  4716.                         m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  4717.                         m68ki_branch_32(offset);
  4718.                         return;
  4719.                 }
  4720.                 REG_PC += 4;
  4721.                 return;
  4722.         }
  4723.         else
  4724.         {
  4725.                 if(COND_GE())
  4726.                 {
  4727.                         m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  4728.                         m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR));
  4729.                         return;
  4730.                 }
  4731.                 USE_CYCLES(CYC_BCC_NOTAKE_B);
  4732.         }
  4733. }
  4734.  
  4735.  
  4736. void m68k_op_blt_32(void)
  4737. {
  4738.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  4739.         {
  4740.                 if(COND_LT())
  4741.                 {
  4742.                         uint offset = OPER_I_32();
  4743.                         REG_PC -= 4;
  4744.                         m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  4745.                         m68ki_branch_32(offset);
  4746.                         return;
  4747.                 }
  4748.                 REG_PC += 4;
  4749.                 return;
  4750.         }
  4751.         else
  4752.         {
  4753.                 if(COND_LT())
  4754.                 {
  4755.                         m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  4756.                         m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR));
  4757.                         return;
  4758.                 }
  4759.                 USE_CYCLES(CYC_BCC_NOTAKE_B);
  4760.         }
  4761. }
  4762.  
  4763.  
  4764. void m68k_op_bgt_32(void)
  4765. {
  4766.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  4767.         {
  4768.                 if(COND_GT())
  4769.                 {
  4770.                         uint offset = OPER_I_32();
  4771.                         REG_PC -= 4;
  4772.                         m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  4773.                         m68ki_branch_32(offset);
  4774.                         return;
  4775.                 }
  4776.                 REG_PC += 4;
  4777.                 return;
  4778.         }
  4779.         else
  4780.         {
  4781.                 if(COND_GT())
  4782.                 {
  4783.                         m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  4784.                         m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR));
  4785.                         return;
  4786.                 }
  4787.                 USE_CYCLES(CYC_BCC_NOTAKE_B);
  4788.         }
  4789. }
  4790.  
  4791.  
  4792. void m68k_op_ble_32(void)
  4793. {
  4794.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  4795.         {
  4796.                 if(COND_LE())
  4797.                 {
  4798.                         uint offset = OPER_I_32();
  4799.                         REG_PC -= 4;
  4800.                         m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  4801.                         m68ki_branch_32(offset);
  4802.                         return;
  4803.                 }
  4804.                 REG_PC += 4;
  4805.                 return;
  4806.         }
  4807.         else
  4808.         {
  4809.                 if(COND_LE())
  4810.                 {
  4811.                         m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  4812.                         m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR));
  4813.                         return;
  4814.                 }
  4815.                 USE_CYCLES(CYC_BCC_NOTAKE_B);
  4816.         }
  4817. }
  4818.  
  4819.  
  4820. void m68k_op_bchg_32_r_d(void)
  4821. {
  4822.         uint* r_dst = &DY;
  4823.         uint mask = 1 << (DX & 0x1f);
  4824.  
  4825.         FLAG_Z = *r_dst & mask;
  4826.         *r_dst ^= mask;
  4827. }
  4828.  
  4829.  
  4830. void m68k_op_bchg_8_r_ai(void)
  4831. {
  4832.         uint ea = EA_AY_AI_8();
  4833.         uint src = m68ki_read_8(ea);
  4834.         uint mask = 1 << (DX & 7);
  4835.  
  4836.         FLAG_Z = src & mask;
  4837.         m68ki_write_8(ea, src ^ mask);
  4838. }
  4839.  
  4840.  
  4841. void m68k_op_bchg_8_r_pi(void)
  4842. {
  4843.         uint ea = EA_AY_PI_8();
  4844.         uint src = m68ki_read_8(ea);
  4845.         uint mask = 1 << (DX & 7);
  4846.  
  4847.         FLAG_Z = src & mask;
  4848.         m68ki_write_8(ea, src ^ mask);
  4849. }
  4850.  
  4851.  
  4852. void m68k_op_bchg_8_r_pi7(void)
  4853. {
  4854.         uint ea = EA_A7_PI_8();
  4855.         uint src = m68ki_read_8(ea);
  4856.         uint mask = 1 << (DX & 7);
  4857.  
  4858.         FLAG_Z = src & mask;
  4859.         m68ki_write_8(ea, src ^ mask);
  4860. }
  4861.  
  4862.  
  4863. void m68k_op_bchg_8_r_pd(void)
  4864. {
  4865.         uint ea = EA_AY_PD_8();
  4866.         uint src = m68ki_read_8(ea);
  4867.         uint mask = 1 << (DX & 7);
  4868.  
  4869.         FLAG_Z = src & mask;
  4870.         m68ki_write_8(ea, src ^ mask);
  4871. }
  4872.  
  4873.  
  4874. void m68k_op_bchg_8_r_pd7(void)
  4875. {
  4876.         uint ea = EA_A7_PD_8();
  4877.         uint src = m68ki_read_8(ea);
  4878.         uint mask = 1 << (DX & 7);
  4879.  
  4880.         FLAG_Z = src & mask;
  4881.         m68ki_write_8(ea, src ^ mask);
  4882. }
  4883.  
  4884.  
  4885. void m68k_op_bchg_8_r_di(void)
  4886. {
  4887.         uint ea = EA_AY_DI_8();
  4888.         uint src = m68ki_read_8(ea);
  4889.         uint mask = 1 << (DX & 7);
  4890.  
  4891.         FLAG_Z = src & mask;
  4892.         m68ki_write_8(ea, src ^ mask);
  4893. }
  4894.  
  4895.  
  4896. void m68k_op_bchg_8_r_ix(void)
  4897. {
  4898.         uint ea = EA_AY_IX_8();
  4899.         uint src = m68ki_read_8(ea);
  4900.         uint mask = 1 << (DX & 7);
  4901.  
  4902.         FLAG_Z = src & mask;
  4903.         m68ki_write_8(ea, src ^ mask);
  4904. }
  4905.  
  4906.  
  4907. void m68k_op_bchg_8_r_aw(void)
  4908. {
  4909.         uint ea = EA_AW_8();
  4910.         uint src = m68ki_read_8(ea);
  4911.         uint mask = 1 << (DX & 7);
  4912.  
  4913.         FLAG_Z = src & mask;
  4914.         m68ki_write_8(ea, src ^ mask);
  4915. }
  4916.  
  4917.  
  4918. void m68k_op_bchg_8_r_al(void)
  4919. {
  4920.         uint ea = EA_AL_8();
  4921.         uint src = m68ki_read_8(ea);
  4922.         uint mask = 1 << (DX & 7);
  4923.  
  4924.         FLAG_Z = src & mask;
  4925.         m68ki_write_8(ea, src ^ mask);
  4926. }
  4927.  
  4928.  
  4929. void m68k_op_bchg_32_s_d(void)
  4930. {
  4931.         uint* r_dst = &DY;
  4932.         uint mask = 1 << (OPER_I_8() & 0x1f);
  4933.  
  4934.         FLAG_Z = *r_dst & mask;
  4935.         *r_dst ^= mask;
  4936. }
  4937.  
  4938.  
  4939. void m68k_op_bchg_8_s_ai(void)
  4940. {
  4941.         uint mask = 1 << (OPER_I_8() & 7);
  4942.         uint ea = EA_AY_AI_8();
  4943.         uint src = m68ki_read_8(ea);
  4944.  
  4945.         FLAG_Z = src & mask;
  4946.         m68ki_write_8(ea, src ^ mask);
  4947. }
  4948.  
  4949.  
  4950. void m68k_op_bchg_8_s_pi(void)
  4951. {
  4952.         uint mask = 1 << (OPER_I_8() & 7);
  4953.         uint ea = EA_AY_PI_8();
  4954.         uint src = m68ki_read_8(ea);
  4955.  
  4956.         FLAG_Z = src & mask;
  4957.         m68ki_write_8(ea, src ^ mask);
  4958. }
  4959.  
  4960.  
  4961. void m68k_op_bchg_8_s_pi7(void)
  4962. {
  4963.         uint mask = 1 << (OPER_I_8() & 7);
  4964.         uint ea = EA_A7_PI_8();
  4965.         uint src = m68ki_read_8(ea);
  4966.  
  4967.         FLAG_Z = src & mask;
  4968.         m68ki_write_8(ea, src ^ mask);
  4969. }
  4970.  
  4971.  
  4972. void m68k_op_bchg_8_s_pd(void)
  4973. {
  4974.         uint mask = 1 << (OPER_I_8() & 7);
  4975.         uint ea = EA_AY_PD_8();
  4976.         uint src = m68ki_read_8(ea);
  4977.  
  4978.         FLAG_Z = src & mask;
  4979.         m68ki_write_8(ea, src ^ mask);
  4980. }
  4981.  
  4982.  
  4983. void m68k_op_bchg_8_s_pd7(void)
  4984. {
  4985.         uint mask = 1 << (OPER_I_8() & 7);
  4986.         uint ea = EA_A7_PD_8();
  4987.         uint src = m68ki_read_8(ea);
  4988.  
  4989.         FLAG_Z = src & mask;
  4990.         m68ki_write_8(ea, src ^ mask);
  4991. }
  4992.  
  4993.  
  4994. void m68k_op_bchg_8_s_di(void)
  4995. {
  4996.         uint mask = 1 << (OPER_I_8() & 7);
  4997.         uint ea = EA_AY_DI_8();
  4998.         uint src = m68ki_read_8(ea);
  4999.  
  5000.         FLAG_Z = src & mask;
  5001.         m68ki_write_8(ea, src ^ mask);
  5002. }
  5003.  
  5004.  
  5005. void m68k_op_bchg_8_s_ix(void)
  5006. {
  5007.         uint mask = 1 << (OPER_I_8() & 7);
  5008.         uint ea = EA_AY_IX_8();
  5009.         uint src = m68ki_read_8(ea);
  5010.  
  5011.         FLAG_Z = src & mask;
  5012.         m68ki_write_8(ea, src ^ mask);
  5013. }
  5014.  
  5015.  
  5016. void m68k_op_bchg_8_s_aw(void)
  5017. {
  5018.         uint mask = 1 << (OPER_I_8() & 7);
  5019.         uint ea = EA_AW_8();
  5020.         uint src = m68ki_read_8(ea);
  5021.  
  5022.         FLAG_Z = src & mask;
  5023.         m68ki_write_8(ea, src ^ mask);
  5024. }
  5025.  
  5026.  
  5027. void m68k_op_bchg_8_s_al(void)
  5028. {
  5029.         uint mask = 1 << (OPER_I_8() & 7);
  5030.         uint ea = EA_AL_8();
  5031.         uint src = m68ki_read_8(ea);
  5032.  
  5033.         FLAG_Z = src & mask;
  5034.         m68ki_write_8(ea, src ^ mask);
  5035. }
  5036.  
  5037.  
  5038. void m68k_op_bclr_32_r_d(void)
  5039. {
  5040.         uint* r_dst = &DY;
  5041.         uint mask = 1 << (DX & 0x1f);
  5042.  
  5043.         FLAG_Z = *r_dst & mask;
  5044.         *r_dst &= ~mask;
  5045. }
  5046.  
  5047.  
  5048. void m68k_op_bclr_8_r_ai(void)
  5049. {
  5050.         uint ea = EA_AY_AI_8();
  5051.         uint src = m68ki_read_8(ea);
  5052.         uint mask = 1 << (DX & 7);
  5053.  
  5054.         FLAG_Z = src & mask;
  5055.         m68ki_write_8(ea, src & ~mask);
  5056. }
  5057.  
  5058.  
  5059. void m68k_op_bclr_8_r_pi(void)
  5060. {
  5061.         uint ea = EA_AY_PI_8();
  5062.         uint src = m68ki_read_8(ea);
  5063.         uint mask = 1 << (DX & 7);
  5064.  
  5065.         FLAG_Z = src & mask;
  5066.         m68ki_write_8(ea, src & ~mask);
  5067. }
  5068.  
  5069.  
  5070. void m68k_op_bclr_8_r_pi7(void)
  5071. {
  5072.         uint ea = EA_A7_PI_8();
  5073.         uint src = m68ki_read_8(ea);
  5074.         uint mask = 1 << (DX & 7);
  5075.  
  5076.         FLAG_Z = src & mask;
  5077.         m68ki_write_8(ea, src & ~mask);
  5078. }
  5079.  
  5080.  
  5081. void m68k_op_bclr_8_r_pd(void)
  5082. {
  5083.         uint ea = EA_AY_PD_8();
  5084.         uint src = m68ki_read_8(ea);
  5085.         uint mask = 1 << (DX & 7);
  5086.  
  5087.         FLAG_Z = src & mask;
  5088.         m68ki_write_8(ea, src & ~mask);
  5089. }
  5090.  
  5091.  
  5092. void m68k_op_bclr_8_r_pd7(void)
  5093. {
  5094.         uint ea = EA_A7_PD_8();
  5095.         uint src = m68ki_read_8(ea);
  5096.         uint mask = 1 << (DX & 7);
  5097.  
  5098.         FLAG_Z = src & mask;
  5099.         m68ki_write_8(ea, src & ~mask);
  5100. }
  5101.  
  5102.  
  5103. void m68k_op_bclr_8_r_di(void)
  5104. {
  5105.         uint ea = EA_AY_DI_8();
  5106.         uint src = m68ki_read_8(ea);
  5107.         uint mask = 1 << (DX & 7);
  5108.  
  5109.         FLAG_Z = src & mask;
  5110.         m68ki_write_8(ea, src & ~mask);
  5111. }
  5112.  
  5113.  
  5114. void m68k_op_bclr_8_r_ix(void)
  5115. {
  5116.         uint ea = EA_AY_IX_8();
  5117.         uint src = m68ki_read_8(ea);
  5118.         uint mask = 1 << (DX & 7);
  5119.  
  5120.         FLAG_Z = src & mask;
  5121.         m68ki_write_8(ea, src & ~mask);
  5122. }
  5123.  
  5124.  
  5125. void m68k_op_bclr_8_r_aw(void)
  5126. {
  5127.         uint ea = EA_AW_8();
  5128.         uint src = m68ki_read_8(ea);
  5129.         uint mask = 1 << (DX & 7);
  5130.  
  5131.         FLAG_Z = src & mask;
  5132.         m68ki_write_8(ea, src & ~mask);
  5133. }
  5134.  
  5135.  
  5136. void m68k_op_bclr_8_r_al(void)
  5137. {
  5138.         uint ea = EA_AL_8();
  5139.         uint src = m68ki_read_8(ea);
  5140.         uint mask = 1 << (DX & 7);
  5141.  
  5142.         FLAG_Z = src & mask;
  5143.         m68ki_write_8(ea, src & ~mask);
  5144. }
  5145.  
  5146.  
  5147. void m68k_op_bclr_32_s_d(void)
  5148. {
  5149.         uint* r_dst = &DY;
  5150.         uint mask = 1 << (OPER_I_8() & 0x1f);
  5151.  
  5152.         FLAG_Z = *r_dst & mask;
  5153.         *r_dst &= ~mask;
  5154. }
  5155.  
  5156.  
  5157. void m68k_op_bclr_8_s_ai(void)
  5158. {
  5159.         uint mask = 1 << (OPER_I_8() & 7);
  5160.         uint ea = EA_AY_AI_8();
  5161.         uint src = m68ki_read_8(ea);
  5162.  
  5163.         FLAG_Z = src & mask;
  5164.         m68ki_write_8(ea, src & ~mask);
  5165. }
  5166.  
  5167.  
  5168. void m68k_op_bclr_8_s_pi(void)
  5169. {
  5170.         uint mask = 1 << (OPER_I_8() & 7);
  5171.         uint ea = EA_AY_PI_8();
  5172.         uint src = m68ki_read_8(ea);
  5173.  
  5174.         FLAG_Z = src & mask;
  5175.         m68ki_write_8(ea, src & ~mask);
  5176. }
  5177.  
  5178.  
  5179. void m68k_op_bclr_8_s_pi7(void)
  5180. {
  5181.         uint mask = 1 << (OPER_I_8() & 7);
  5182.         uint ea = EA_A7_PI_8();
  5183.         uint src = m68ki_read_8(ea);
  5184.  
  5185.         FLAG_Z = src & mask;
  5186.         m68ki_write_8(ea, src & ~mask);
  5187. }
  5188.  
  5189.  
  5190. void m68k_op_bclr_8_s_pd(void)
  5191. {
  5192.         uint mask = 1 << (OPER_I_8() & 7);
  5193.         uint ea = EA_AY_PD_8();
  5194.         uint src = m68ki_read_8(ea);
  5195.  
  5196.         FLAG_Z = src & mask;
  5197.         m68ki_write_8(ea, src & ~mask);
  5198. }
  5199.  
  5200.  
  5201. void m68k_op_bclr_8_s_pd7(void)
  5202. {
  5203.         uint mask = 1 << (OPER_I_8() & 7);
  5204.         uint ea = EA_A7_PD_8();
  5205.         uint src = m68ki_read_8(ea);
  5206.  
  5207.         FLAG_Z = src & mask;
  5208.         m68ki_write_8(ea, src & ~mask);
  5209. }
  5210.  
  5211.  
  5212. void m68k_op_bclr_8_s_di(void)
  5213. {
  5214.         uint mask = 1 << (OPER_I_8() & 7);
  5215.         uint ea = EA_AY_DI_8();
  5216.         uint src = m68ki_read_8(ea);
  5217.  
  5218.         FLAG_Z = src & mask;
  5219.         m68ki_write_8(ea, src & ~mask);
  5220. }
  5221.  
  5222.  
  5223. void m68k_op_bclr_8_s_ix(void)
  5224. {
  5225.         uint mask = 1 << (OPER_I_8() & 7);
  5226.         uint ea = EA_AY_IX_8();
  5227.         uint src = m68ki_read_8(ea);
  5228.  
  5229.         FLAG_Z = src & mask;
  5230.         m68ki_write_8(ea, src & ~mask);
  5231. }
  5232.  
  5233.  
  5234. void m68k_op_bclr_8_s_aw(void)
  5235. {
  5236.         uint mask = 1 << (OPER_I_8() & 7);
  5237.         uint ea = EA_AW_8();
  5238.         uint src = m68ki_read_8(ea);
  5239.  
  5240.         FLAG_Z = src & mask;
  5241.         m68ki_write_8(ea, src & ~mask);
  5242. }
  5243.  
  5244.  
  5245. void m68k_op_bclr_8_s_al(void)
  5246. {
  5247.         uint mask = 1 << (OPER_I_8() & 7);
  5248.         uint ea = EA_AL_8();
  5249.         uint src = m68ki_read_8(ea);
  5250.  
  5251.         FLAG_Z = src & mask;
  5252.         m68ki_write_8(ea, src & ~mask);
  5253. }
  5254.  
  5255.  
  5256. void m68k_op_bfchg_32_d(void)
  5257. {
  5258.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  5259.         {
  5260.                 uint word2 = OPER_I_16();
  5261.                 uint offset = (word2>>6)&31;
  5262.                 uint width = word2;
  5263.                 uint* data = &DY;
  5264.                 uint64 mask;
  5265.  
  5266.  
  5267.                 if(BIT_B(word2))
  5268.                         offset = REG_D[offset&7];
  5269.                 if(BIT_5(word2))
  5270.                         width = REG_D[width&7];
  5271.  
  5272.                 offset &= 31;
  5273.                 width = ((width-1) & 31) + 1;
  5274.  
  5275.                 mask = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
  5276.                 mask = ROR_32(mask, offset);
  5277.  
  5278.                 FLAG_N = NFLAG_32(*data<<offset);
  5279.                 FLAG_Z = *data & mask;
  5280.                 FLAG_V = VFLAG_CLEAR;
  5281.                 FLAG_C = CFLAG_CLEAR;
  5282.  
  5283.                 *data ^= mask;
  5284.  
  5285.                 return;
  5286.         }
  5287.         m68ki_exception_illegal();
  5288. }
  5289.  
  5290.  
  5291. void m68k_op_bfchg_32_ai(void)
  5292. {
  5293.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  5294.         {
  5295.                 uint word2 = OPER_I_16();
  5296.                 sint offset = (word2>>6)&31;
  5297.                 uint width = word2;
  5298.                 uint mask_base;
  5299.                 uint data_long;
  5300.                 uint mask_long;
  5301.                 uint data_byte = 0;
  5302.                 uint mask_byte = 0;
  5303.                 uint ea = EA_AY_AI_8();
  5304.  
  5305.  
  5306.                 if(BIT_B(word2))
  5307.                         offset = MAKE_INT_32(REG_D[offset&7]);
  5308.                 if(BIT_5(word2))
  5309.                         width = REG_D[width&7];
  5310.  
  5311.                 /* Offset is signed so we have to use ugly math =( */
  5312.                 ea += offset / 8;
  5313.                 offset %= 8;
  5314.                 if(offset < 0)
  5315.                 {
  5316.                         offset += 8;
  5317.                         ea--;
  5318.                 }
  5319.                 width = ((width-1) & 31) + 1;
  5320.  
  5321.                 mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
  5322.                 mask_long = mask_base >> offset;
  5323.  
  5324.                 data_long = m68ki_read_32(ea);
  5325.                 FLAG_N = NFLAG_32(data_long << offset);
  5326.                 FLAG_Z = data_long & mask_long;
  5327.                 FLAG_V = VFLAG_CLEAR;
  5328.                 FLAG_C = CFLAG_CLEAR;
  5329.  
  5330.                 m68ki_write_32(ea, data_long ^ mask_long);
  5331.  
  5332.                 if((width + offset) > 32)
  5333.                 {
  5334.                         mask_byte = MASK_OUT_ABOVE_8(mask_base);
  5335.                         data_byte = m68ki_read_8(ea+4);
  5336.                         FLAG_Z |= (data_byte & mask_byte);
  5337.                         m68ki_write_8(ea+4, data_byte ^ mask_byte);
  5338.                 }
  5339.                 return;
  5340.         }
  5341.         m68ki_exception_illegal();
  5342. }
  5343.  
  5344.  
  5345. void m68k_op_bfchg_32_di(void)
  5346. {
  5347.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  5348.         {
  5349.                 uint word2 = OPER_I_16();
  5350.                 sint offset = (word2>>6)&31;
  5351.                 uint width = word2;
  5352.                 uint mask_base;
  5353.                 uint data_long;
  5354.                 uint mask_long;
  5355.                 uint data_byte = 0;
  5356.                 uint mask_byte = 0;
  5357.                 uint ea = EA_AY_DI_8();
  5358.  
  5359.  
  5360.                 if(BIT_B(word2))
  5361.                         offset = MAKE_INT_32(REG_D[offset&7]);
  5362.                 if(BIT_5(word2))
  5363.                         width = REG_D[width&7];
  5364.  
  5365.                 /* Offset is signed so we have to use ugly math =( */
  5366.                 ea += offset / 8;
  5367.                 offset %= 8;
  5368.                 if(offset < 0)
  5369.                 {
  5370.                         offset += 8;
  5371.                         ea--;
  5372.                 }
  5373.                 width = ((width-1) & 31) + 1;
  5374.  
  5375.                 mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
  5376.                 mask_long = mask_base >> offset;
  5377.  
  5378.                 data_long = m68ki_read_32(ea);
  5379.                 FLAG_N = NFLAG_32(data_long << offset);
  5380.                 FLAG_Z = data_long & mask_long;
  5381.                 FLAG_V = VFLAG_CLEAR;
  5382.                 FLAG_C = CFLAG_CLEAR;
  5383.  
  5384.                 m68ki_write_32(ea, data_long ^ mask_long);
  5385.  
  5386.                 if((width + offset) > 32)
  5387.                 {
  5388.                         mask_byte = MASK_OUT_ABOVE_8(mask_base);
  5389.                         data_byte = m68ki_read_8(ea+4);
  5390.                         FLAG_Z |= (data_byte & mask_byte);
  5391.                         m68ki_write_8(ea+4, data_byte ^ mask_byte);
  5392.                 }
  5393.                 return;
  5394.         }
  5395.         m68ki_exception_illegal();
  5396. }
  5397.  
  5398.  
  5399. void m68k_op_bfchg_32_ix(void)
  5400. {
  5401.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  5402.         {
  5403.                 uint word2 = OPER_I_16();
  5404.                 sint offset = (word2>>6)&31;
  5405.                 uint width = word2;
  5406.                 uint mask_base;
  5407.                 uint data_long;
  5408.                 uint mask_long;
  5409.                 uint data_byte = 0;
  5410.                 uint mask_byte = 0;
  5411.                 uint ea = EA_AY_IX_8();
  5412.  
  5413.  
  5414.                 if(BIT_B(word2))
  5415.                         offset = MAKE_INT_32(REG_D[offset&7]);
  5416.                 if(BIT_5(word2))
  5417.                         width = REG_D[width&7];
  5418.  
  5419.                 /* Offset is signed so we have to use ugly math =( */
  5420.                 ea += offset / 8;
  5421.                 offset %= 8;
  5422.                 if(offset < 0)
  5423.                 {
  5424.                         offset += 8;
  5425.                         ea--;
  5426.                 }
  5427.                 width = ((width-1) & 31) + 1;
  5428.  
  5429.                 mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
  5430.                 mask_long = mask_base >> offset;
  5431.  
  5432.                 data_long = m68ki_read_32(ea);
  5433.                 FLAG_N = NFLAG_32(data_long << offset);
  5434.                 FLAG_Z = data_long & mask_long;
  5435.                 FLAG_V = VFLAG_CLEAR;
  5436.                 FLAG_C = CFLAG_CLEAR;
  5437.  
  5438.                 m68ki_write_32(ea, data_long ^ mask_long);
  5439.  
  5440.                 if((width + offset) > 32)
  5441.                 {
  5442.                         mask_byte = MASK_OUT_ABOVE_8(mask_base);
  5443.                         data_byte = m68ki_read_8(ea+4);
  5444.                         FLAG_Z |= (data_byte & mask_byte);
  5445.                         m68ki_write_8(ea+4, data_byte ^ mask_byte);
  5446.                 }
  5447.                 return;
  5448.         }
  5449.         m68ki_exception_illegal();
  5450. }
  5451.  
  5452.  
  5453. void m68k_op_bfchg_32_aw(void)
  5454. {
  5455.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  5456.         {
  5457.                 uint word2 = OPER_I_16();
  5458.                 sint offset = (word2>>6)&31;
  5459.                 uint width = word2;
  5460.                 uint mask_base;
  5461.                 uint data_long;
  5462.                 uint mask_long;
  5463.                 uint data_byte = 0;
  5464.                 uint mask_byte = 0;
  5465.                 uint ea = EA_AW_8();
  5466.  
  5467.  
  5468.                 if(BIT_B(word2))
  5469.                         offset = MAKE_INT_32(REG_D[offset&7]);
  5470.                 if(BIT_5(word2))
  5471.                         width = REG_D[width&7];
  5472.  
  5473.                 /* Offset is signed so we have to use ugly math =( */
  5474.                 ea += offset / 8;
  5475.                 offset %= 8;
  5476.                 if(offset < 0)
  5477.                 {
  5478.                         offset += 8;
  5479.                         ea--;
  5480.                 }
  5481.                 width = ((width-1) & 31) + 1;
  5482.  
  5483.                 mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
  5484.                 mask_long = mask_base >> offset;
  5485.  
  5486.                 data_long = m68ki_read_32(ea);
  5487.                 FLAG_N = NFLAG_32(data_long << offset);
  5488.                 FLAG_Z = data_long & mask_long;
  5489.                 FLAG_V = VFLAG_CLEAR;
  5490.                 FLAG_C = CFLAG_CLEAR;
  5491.  
  5492.                 m68ki_write_32(ea, data_long ^ mask_long);
  5493.  
  5494.                 if((width + offset) > 32)
  5495.                 {
  5496.                         mask_byte = MASK_OUT_ABOVE_8(mask_base);
  5497.                         data_byte = m68ki_read_8(ea+4);
  5498.                         FLAG_Z |= (data_byte & mask_byte);
  5499.                         m68ki_write_8(ea+4, data_byte ^ mask_byte);
  5500.                 }
  5501.                 return;
  5502.         }
  5503.         m68ki_exception_illegal();
  5504. }
  5505.  
  5506.  
  5507. void m68k_op_bfchg_32_al(void)
  5508. {
  5509.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  5510.         {
  5511.                 uint word2 = OPER_I_16();
  5512.                 sint offset = (word2>>6)&31;
  5513.                 uint width = word2;
  5514.                 uint mask_base;
  5515.                 uint data_long;
  5516.                 uint mask_long;
  5517.                 uint data_byte = 0;
  5518.                 uint mask_byte = 0;
  5519.                 uint ea = EA_AL_8();
  5520.  
  5521.  
  5522.                 if(BIT_B(word2))
  5523.                         offset = MAKE_INT_32(REG_D[offset&7]);
  5524.                 if(BIT_5(word2))
  5525.                         width = REG_D[width&7];
  5526.  
  5527.                 /* Offset is signed so we have to use ugly math =( */
  5528.                 ea += offset / 8;
  5529.                 offset %= 8;
  5530.                 if(offset < 0)
  5531.                 {
  5532.                         offset += 8;
  5533.                         ea--;
  5534.                 }
  5535.                 width = ((width-1) & 31) + 1;
  5536.  
  5537.                 mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
  5538.                 mask_long = mask_base >> offset;
  5539.  
  5540.                 data_long = m68ki_read_32(ea);
  5541.                 FLAG_N = NFLAG_32(data_long << offset);
  5542.                 FLAG_Z = data_long & mask_long;
  5543.                 FLAG_V = VFLAG_CLEAR;
  5544.                 FLAG_C = CFLAG_CLEAR;
  5545.  
  5546.                 m68ki_write_32(ea, data_long ^ mask_long);
  5547.  
  5548.                 if((width + offset) > 32)
  5549.                 {
  5550.                         mask_byte = MASK_OUT_ABOVE_8(mask_base);
  5551.                         data_byte = m68ki_read_8(ea+4);
  5552.                         FLAG_Z |= (data_byte & mask_byte);
  5553.                         m68ki_write_8(ea+4, data_byte ^ mask_byte);
  5554.                 }
  5555.                 return;
  5556.         }
  5557.         m68ki_exception_illegal();
  5558. }
  5559.  
  5560.  
  5561. void m68k_op_bfclr_32_d(void)
  5562. {
  5563.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  5564.         {
  5565.                 uint word2 = OPER_I_16();
  5566.                 uint offset = (word2>>6)&31;
  5567.                 uint width = word2;
  5568.                 uint* data = &DY;
  5569.                 uint64 mask;
  5570.  
  5571.  
  5572.                 if(BIT_B(word2))
  5573.                         offset = REG_D[offset&7];
  5574.                 if(BIT_5(word2))
  5575.                         width = REG_D[width&7];
  5576.  
  5577.  
  5578.                 offset &= 31;
  5579.                 width = ((width-1) & 31) + 1;
  5580.  
  5581.  
  5582.                 mask = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
  5583.                 mask = ROR_32(mask, offset);
  5584.  
  5585.                 FLAG_N = NFLAG_32(*data<<offset);
  5586.                 FLAG_Z = *data & mask;
  5587.                 FLAG_V = VFLAG_CLEAR;
  5588.                 FLAG_C = CFLAG_CLEAR;
  5589.  
  5590.                 *data &= ~mask;
  5591.  
  5592.                 return;
  5593.         }
  5594.         m68ki_exception_illegal();
  5595. }
  5596.  
  5597.  
  5598. void m68k_op_bfclr_32_ai(void)
  5599. {
  5600.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  5601.         {
  5602.                 uint word2 = OPER_I_16();
  5603.                 sint offset = (word2>>6)&31;
  5604.                 uint width = word2;
  5605.                 uint mask_base;
  5606.                 uint data_long;
  5607.                 uint mask_long;
  5608.                 uint data_byte = 0;
  5609.                 uint mask_byte = 0;
  5610.                 uint ea = EA_AY_AI_8();
  5611.  
  5612.  
  5613.                 if(BIT_B(word2))
  5614.                         offset = MAKE_INT_32(REG_D[offset&7]);
  5615.                 if(BIT_5(word2))
  5616.                         width = REG_D[width&7];
  5617.  
  5618.                 /* Offset is signed so we have to use ugly math =( */
  5619.                 ea += offset / 8;
  5620.                 offset %= 8;
  5621.                 if(offset < 0)
  5622.                 {
  5623.                         offset += 8;
  5624.                         ea--;
  5625.                 }
  5626.                 width = ((width-1) & 31) + 1;
  5627.  
  5628.                 mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
  5629.                 mask_long = mask_base >> offset;
  5630.  
  5631.                 data_long = m68ki_read_32(ea);
  5632.                 FLAG_N = NFLAG_32(data_long << offset);
  5633.                 FLAG_Z = data_long & mask_long;
  5634.                 FLAG_V = VFLAG_CLEAR;
  5635.                 FLAG_C = CFLAG_CLEAR;
  5636.  
  5637.                 m68ki_write_32(ea, data_long & ~mask_long);
  5638.  
  5639.                 if((width + offset) > 32)
  5640.                 {
  5641.                         mask_byte = MASK_OUT_ABOVE_8(mask_base);
  5642.                         data_byte = m68ki_read_8(ea+4);
  5643.                         FLAG_Z |= (data_byte & mask_byte);
  5644.                         m68ki_write_8(ea+4, data_byte & ~mask_byte);
  5645.                 }
  5646.                 return;
  5647.         }
  5648.         m68ki_exception_illegal();
  5649. }
  5650.  
  5651.  
  5652. void m68k_op_bfclr_32_di(void)
  5653. {
  5654.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  5655.         {
  5656.                 uint word2 = OPER_I_16();
  5657.                 sint offset = (word2>>6)&31;
  5658.                 uint width = word2;
  5659.                 uint mask_base;
  5660.                 uint data_long;
  5661.                 uint mask_long;
  5662.                 uint data_byte = 0;
  5663.                 uint mask_byte = 0;
  5664.                 uint ea = EA_AY_DI_8();
  5665.  
  5666.  
  5667.                 if(BIT_B(word2))
  5668.                         offset = MAKE_INT_32(REG_D[offset&7]);
  5669.                 if(BIT_5(word2))
  5670.                         width = REG_D[width&7];
  5671.  
  5672.                 /* Offset is signed so we have to use ugly math =( */
  5673.                 ea += offset / 8;
  5674.                 offset %= 8;
  5675.                 if(offset < 0)
  5676.                 {
  5677.                         offset += 8;
  5678.                         ea--;
  5679.                 }
  5680.                 width = ((width-1) & 31) + 1;
  5681.  
  5682.                 mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
  5683.                 mask_long = mask_base >> offset;
  5684.  
  5685.                 data_long = m68ki_read_32(ea);
  5686.                 FLAG_N = NFLAG_32(data_long << offset);
  5687.                 FLAG_Z = data_long & mask_long;
  5688.                 FLAG_V = VFLAG_CLEAR;
  5689.                 FLAG_C = CFLAG_CLEAR;
  5690.  
  5691.                 m68ki_write_32(ea, data_long & ~mask_long);
  5692.  
  5693.                 if((width + offset) > 32)
  5694.                 {
  5695.                         mask_byte = MASK_OUT_ABOVE_8(mask_base);
  5696.                         data_byte = m68ki_read_8(ea+4);
  5697.                         FLAG_Z |= (data_byte & mask_byte);
  5698.                         m68ki_write_8(ea+4, data_byte & ~mask_byte);
  5699.                 }
  5700.                 return;
  5701.         }
  5702.         m68ki_exception_illegal();
  5703. }
  5704.  
  5705.  
  5706. void m68k_op_bfclr_32_ix(void)
  5707. {
  5708.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  5709.         {
  5710.                 uint word2 = OPER_I_16();
  5711.                 sint offset = (word2>>6)&31;
  5712.                 uint width = word2;
  5713.                 uint mask_base;
  5714.                 uint data_long;
  5715.                 uint mask_long;
  5716.                 uint data_byte = 0;
  5717.                 uint mask_byte = 0;
  5718.                 uint ea = EA_AY_IX_8();
  5719.  
  5720.  
  5721.                 if(BIT_B(word2))
  5722.                         offset = MAKE_INT_32(REG_D[offset&7]);
  5723.                 if(BIT_5(word2))
  5724.                         width = REG_D[width&7];
  5725.  
  5726.                 /* Offset is signed so we have to use ugly math =( */
  5727.                 ea += offset / 8;
  5728.                 offset %= 8;
  5729.                 if(offset < 0)
  5730.                 {
  5731.                         offset += 8;
  5732.                         ea--;
  5733.                 }
  5734.                 width = ((width-1) & 31) + 1;
  5735.  
  5736.                 mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
  5737.                 mask_long = mask_base >> offset;
  5738.  
  5739.                 data_long = m68ki_read_32(ea);
  5740.                 FLAG_N = NFLAG_32(data_long << offset);
  5741.                 FLAG_Z = data_long & mask_long;
  5742.                 FLAG_V = VFLAG_CLEAR;
  5743.                 FLAG_C = CFLAG_CLEAR;
  5744.  
  5745.                 m68ki_write_32(ea, data_long & ~mask_long);
  5746.  
  5747.                 if((width + offset) > 32)
  5748.                 {
  5749.                         mask_byte = MASK_OUT_ABOVE_8(mask_base);
  5750.                         data_byte = m68ki_read_8(ea+4);
  5751.                         FLAG_Z |= (data_byte & mask_byte);
  5752.                         m68ki_write_8(ea+4, data_byte & ~mask_byte);
  5753.                 }
  5754.                 return;
  5755.         }
  5756.         m68ki_exception_illegal();
  5757. }
  5758.  
  5759.  
  5760. void m68k_op_bfclr_32_aw(void)
  5761. {
  5762.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  5763.         {
  5764.                 uint word2 = OPER_I_16();
  5765.                 sint offset = (word2>>6)&31;
  5766.                 uint width = word2;
  5767.                 uint mask_base;
  5768.                 uint data_long;
  5769.                 uint mask_long;
  5770.                 uint data_byte = 0;
  5771.                 uint mask_byte = 0;
  5772.                 uint ea = EA_AW_8();
  5773.  
  5774.  
  5775.                 if(BIT_B(word2))
  5776.                         offset = MAKE_INT_32(REG_D[offset&7]);
  5777.                 if(BIT_5(word2))
  5778.                         width = REG_D[width&7];
  5779.  
  5780.                 /* Offset is signed so we have to use ugly math =( */
  5781.                 ea += offset / 8;
  5782.                 offset %= 8;
  5783.                 if(offset < 0)
  5784.                 {
  5785.                         offset += 8;
  5786.                         ea--;
  5787.                 }
  5788.                 width = ((width-1) & 31) + 1;
  5789.  
  5790.                 mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
  5791.                 mask_long = mask_base >> offset;
  5792.  
  5793.                 data_long = m68ki_read_32(ea);
  5794.                 FLAG_N = NFLAG_32(data_long << offset);
  5795.                 FLAG_Z = data_long & mask_long;
  5796.                 FLAG_V = VFLAG_CLEAR;
  5797.                 FLAG_C = CFLAG_CLEAR;
  5798.  
  5799.                 m68ki_write_32(ea, data_long & ~mask_long);
  5800.  
  5801.                 if((width + offset) > 32)
  5802.                 {
  5803.                         mask_byte = MASK_OUT_ABOVE_8(mask_base);
  5804.                         data_byte = m68ki_read_8(ea+4);
  5805.                         FLAG_Z |= (data_byte & mask_byte);
  5806.                         m68ki_write_8(ea+4, data_byte & ~mask_byte);
  5807.                 }
  5808.                 return;
  5809.         }
  5810.         m68ki_exception_illegal();
  5811. }
  5812.  
  5813.  
  5814. void m68k_op_bfclr_32_al(void)
  5815. {
  5816.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  5817.         {
  5818.                 uint word2 = OPER_I_16();
  5819.                 sint offset = (word2>>6)&31;
  5820.                 uint width = word2;
  5821.                 uint mask_base;
  5822.                 uint data_long;
  5823.                 uint mask_long;
  5824.                 uint data_byte = 0;
  5825.                 uint mask_byte = 0;
  5826.                 uint ea = EA_AL_8();
  5827.  
  5828.  
  5829.                 if(BIT_B(word2))
  5830.                         offset = MAKE_INT_32(REG_D[offset&7]);
  5831.                 if(BIT_5(word2))
  5832.                         width = REG_D[width&7];
  5833.  
  5834.                 /* Offset is signed so we have to use ugly math =( */
  5835.                 ea += offset / 8;
  5836.                 offset %= 8;
  5837.                 if(offset < 0)
  5838.                 {
  5839.                         offset += 8;
  5840.                         ea--;
  5841.                 }
  5842.                 width = ((width-1) & 31) + 1;
  5843.  
  5844.                 mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
  5845.                 mask_long = mask_base >> offset;
  5846.  
  5847.                 data_long = m68ki_read_32(ea);
  5848.                 FLAG_N = NFLAG_32(data_long << offset);
  5849.                 FLAG_Z = data_long & mask_long;
  5850.                 FLAG_V = VFLAG_CLEAR;
  5851.                 FLAG_C = CFLAG_CLEAR;
  5852.  
  5853.                 m68ki_write_32(ea, data_long & ~mask_long);
  5854.  
  5855.                 if((width + offset) > 32)
  5856.                 {
  5857.                         mask_byte = MASK_OUT_ABOVE_8(mask_base);
  5858.                         data_byte = m68ki_read_8(ea+4);
  5859.                         FLAG_Z |= (data_byte & mask_byte);
  5860.                         m68ki_write_8(ea+4, data_byte & ~mask_byte);
  5861.                 }
  5862.                 return;
  5863.         }
  5864.         m68ki_exception_illegal();
  5865. }
  5866.  
  5867.  
  5868. void m68k_op_bfexts_32_d(void)
  5869. {
  5870.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  5871.         {
  5872.                 uint word2 = OPER_I_16();
  5873.                 uint offset = (word2>>6)&31;
  5874.                 uint width = word2;
  5875.                 uint64 data = DY;
  5876.  
  5877.  
  5878.                 if(BIT_B(word2))
  5879.                         offset = REG_D[offset&7];
  5880.                 if(BIT_5(word2))
  5881.                         width = REG_D[width&7];
  5882.  
  5883.                 offset &= 31;
  5884.                 width = ((width-1) & 31) + 1;
  5885.  
  5886.                 data = ROL_32(data, offset);
  5887.                 FLAG_N = NFLAG_32(data);
  5888.                 data = MAKE_INT_32(data) >> (32 - width);
  5889.  
  5890.                 FLAG_Z = data;
  5891.                 FLAG_V = VFLAG_CLEAR;
  5892.                 FLAG_C = CFLAG_CLEAR;
  5893.  
  5894.                 REG_D[(word2>>12)&7] = data;
  5895.  
  5896.                 return;
  5897.         }
  5898.         m68ki_exception_illegal();
  5899. }
  5900.  
  5901.  
  5902. void m68k_op_bfexts_32_ai(void)
  5903. {
  5904.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  5905.         {
  5906.                 uint word2 = OPER_I_16();
  5907.                 sint offset = (word2>>6)&31;
  5908.                 uint width = word2;
  5909.                 uint data;
  5910.                 uint ea = EA_AY_AI_8();
  5911.  
  5912.  
  5913.                 if(BIT_B(word2))
  5914.                         offset = MAKE_INT_32(REG_D[offset&7]);
  5915.                 if(BIT_5(word2))
  5916.                         width = REG_D[width&7];
  5917.  
  5918.                 /* Offset is signed so we have to use ugly math =( */
  5919.                 ea += offset / 8;
  5920.                 offset %= 8;
  5921.                 if(offset < 0)
  5922.                 {
  5923.                         offset += 8;
  5924.                         ea--;
  5925.                 }
  5926.                 width = ((width-1) & 31) + 1;
  5927.  
  5928.                 data = m68ki_read_32(ea);
  5929.  
  5930.                 data = MASK_OUT_ABOVE_32(data<<offset);
  5931.  
  5932.                 if((offset+width) > 32)
  5933.                         data |= (m68ki_read_8(ea+4) << offset) >> 8;
  5934.  
  5935.                 FLAG_N = NFLAG_32(data);
  5936.                 data  = MAKE_INT_32(data) >> (32 - width);
  5937.  
  5938.                 FLAG_Z = data;
  5939.                 FLAG_V = VFLAG_CLEAR;
  5940.                 FLAG_C = CFLAG_CLEAR;
  5941.  
  5942.                 REG_D[(word2 >> 12) & 7] = data;
  5943.  
  5944.                 return;
  5945.         }
  5946.         m68ki_exception_illegal();
  5947. }
  5948.  
  5949.  
  5950. void m68k_op_bfexts_32_di(void)
  5951. {
  5952.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  5953.         {
  5954.                 uint word2 = OPER_I_16();
  5955.                 sint offset = (word2>>6)&31;
  5956.                 uint width = word2;
  5957.                 uint data;
  5958.                 uint ea = EA_AY_DI_8();
  5959.  
  5960.  
  5961.                 if(BIT_B(word2))
  5962.                         offset = MAKE_INT_32(REG_D[offset&7]);
  5963.                 if(BIT_5(word2))
  5964.                         width = REG_D[width&7];
  5965.  
  5966.                 /* Offset is signed so we have to use ugly math =( */
  5967.                 ea += offset / 8;
  5968.                 offset %= 8;
  5969.                 if(offset < 0)
  5970.                 {
  5971.                         offset += 8;
  5972.                         ea--;
  5973.                 }
  5974.                 width = ((width-1) & 31) + 1;
  5975.  
  5976.                 data = m68ki_read_32(ea);
  5977.  
  5978.                 data = MASK_OUT_ABOVE_32(data<<offset);
  5979.  
  5980.                 if((offset+width) > 32)
  5981.                         data |= (m68ki_read_8(ea+4) << offset) >> 8;
  5982.  
  5983.                 FLAG_N = NFLAG_32(data);
  5984.                 data  = MAKE_INT_32(data) >> (32 - width);
  5985.  
  5986.                 FLAG_Z = data;
  5987.                 FLAG_V = VFLAG_CLEAR;
  5988.                 FLAG_C = CFLAG_CLEAR;
  5989.  
  5990.                 REG_D[(word2 >> 12) & 7] = data;
  5991.  
  5992.                 return;
  5993.         }
  5994.         m68ki_exception_illegal();
  5995. }
  5996.  
  5997.  
  5998. void m68k_op_bfexts_32_ix(void)
  5999. {
  6000.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  6001.         {
  6002.                 uint word2 = OPER_I_16();
  6003.                 sint offset = (word2>>6)&31;
  6004.                 uint width = word2;
  6005.                 uint data;
  6006.                 uint ea = EA_AY_IX_8();
  6007.  
  6008.  
  6009.                 if(BIT_B(word2))
  6010.                         offset = MAKE_INT_32(REG_D[offset&7]);
  6011.                 if(BIT_5(word2))
  6012.                         width = REG_D[width&7];
  6013.  
  6014.                 /* Offset is signed so we have to use ugly math =( */
  6015.                 ea += offset / 8;
  6016.                 offset %= 8;
  6017.                 if(offset < 0)
  6018.                 {
  6019.                         offset += 8;
  6020.                         ea--;
  6021.                 }
  6022.                 width = ((width-1) & 31) + 1;
  6023.  
  6024.                 data = m68ki_read_32(ea);
  6025.  
  6026.                 data = MASK_OUT_ABOVE_32(data<<offset);
  6027.  
  6028.                 if((offset+width) > 32)
  6029.                         data |= (m68ki_read_8(ea+4) << offset) >> 8;
  6030.  
  6031.                 FLAG_N = NFLAG_32(data);
  6032.                 data  = MAKE_INT_32(data) >> (32 - width);
  6033.  
  6034.                 FLAG_Z = data;
  6035.                 FLAG_V = VFLAG_CLEAR;
  6036.                 FLAG_C = CFLAG_CLEAR;
  6037.  
  6038.                 REG_D[(word2 >> 12) & 7] = data;
  6039.  
  6040.                 return;
  6041.         }
  6042.         m68ki_exception_illegal();
  6043. }
  6044.  
  6045.  
  6046. void m68k_op_bfexts_32_aw(void)
  6047. {
  6048.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  6049.         {
  6050.                 uint word2 = OPER_I_16();
  6051.                 sint offset = (word2>>6)&31;
  6052.                 uint width = word2;
  6053.                 uint data;
  6054.                 uint ea = EA_AW_8();
  6055.  
  6056.  
  6057.                 if(BIT_B(word2))
  6058.                         offset = MAKE_INT_32(REG_D[offset&7]);
  6059.                 if(BIT_5(word2))
  6060.                         width = REG_D[width&7];
  6061.  
  6062.                 /* Offset is signed so we have to use ugly math =( */
  6063.                 ea += offset / 8;
  6064.                 offset %= 8;
  6065.                 if(offset < 0)
  6066.                 {
  6067.                         offset += 8;
  6068.                         ea--;
  6069.                 }
  6070.                 width = ((width-1) & 31) + 1;
  6071.  
  6072.                 data = m68ki_read_32(ea);
  6073.  
  6074.                 data = MASK_OUT_ABOVE_32(data<<offset);
  6075.  
  6076.                 if((offset+width) > 32)
  6077.                         data |= (m68ki_read_8(ea+4) << offset) >> 8;
  6078.  
  6079.                 FLAG_N = NFLAG_32(data);
  6080.                 data  = MAKE_INT_32(data) >> (32 - width);
  6081.  
  6082.                 FLAG_Z = data;
  6083.                 FLAG_V = VFLAG_CLEAR;
  6084.                 FLAG_C = CFLAG_CLEAR;
  6085.  
  6086.                 REG_D[(word2 >> 12) & 7] = data;
  6087.  
  6088.                 return;
  6089.         }
  6090.         m68ki_exception_illegal();
  6091. }
  6092.  
  6093.  
  6094. void m68k_op_bfexts_32_al(void)
  6095. {
  6096.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  6097.         {
  6098.                 uint word2 = OPER_I_16();
  6099.                 sint offset = (word2>>6)&31;
  6100.                 uint width = word2;
  6101.                 uint data;
  6102.                 uint ea = EA_AL_8();
  6103.  
  6104.  
  6105.                 if(BIT_B(word2))
  6106.                         offset = MAKE_INT_32(REG_D[offset&7]);
  6107.                 if(BIT_5(word2))
  6108.                         width = REG_D[width&7];
  6109.  
  6110.                 /* Offset is signed so we have to use ugly math =( */
  6111.                 ea += offset / 8;
  6112.                 offset %= 8;
  6113.                 if(offset < 0)
  6114.                 {
  6115.                         offset += 8;
  6116.                         ea--;
  6117.                 }
  6118.                 width = ((width-1) & 31) + 1;
  6119.  
  6120.                 data = m68ki_read_32(ea);
  6121.  
  6122.                 data = MASK_OUT_ABOVE_32(data<<offset);
  6123.  
  6124.                 if((offset+width) > 32)
  6125.                         data |= (m68ki_read_8(ea+4) << offset) >> 8;
  6126.  
  6127.                 FLAG_N = NFLAG_32(data);
  6128.                 data  = MAKE_INT_32(data) >> (32 - width);
  6129.  
  6130.                 FLAG_Z = data;
  6131.                 FLAG_V = VFLAG_CLEAR;
  6132.                 FLAG_C = CFLAG_CLEAR;
  6133.  
  6134.                 REG_D[(word2 >> 12) & 7] = data;
  6135.  
  6136.                 return;
  6137.         }
  6138.         m68ki_exception_illegal();
  6139. }
  6140.  
  6141.  
  6142. void m68k_op_bfexts_32_pcdi(void)
  6143. {
  6144.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  6145.         {
  6146.                 uint word2 = OPER_I_16();
  6147.                 sint offset = (word2>>6)&31;
  6148.                 uint width = word2;
  6149.                 uint data;
  6150.                 uint ea = EA_PCDI_8();
  6151.  
  6152.  
  6153.                 if(BIT_B(word2))
  6154.                         offset = MAKE_INT_32(REG_D[offset&7]);
  6155.                 if(BIT_5(word2))
  6156.                         width = REG_D[width&7];
  6157.  
  6158.                 /* Offset is signed so we have to use ugly math =( */
  6159.                 ea += offset / 8;
  6160.                 offset %= 8;
  6161.                 if(offset < 0)
  6162.                 {
  6163.                         offset += 8;
  6164.                         ea--;
  6165.                 }
  6166.                 width = ((width-1) & 31) + 1;
  6167.  
  6168.                 data = m68ki_read_32(ea);
  6169.  
  6170.                 data = MASK_OUT_ABOVE_32(data<<offset);
  6171.  
  6172.                 if((offset+width) > 32)
  6173.                         data |= (m68ki_read_8(ea+4) << offset) >> 8;
  6174.  
  6175.                 FLAG_N = NFLAG_32(data);
  6176.                 data  = MAKE_INT_32(data) >> (32 - width);
  6177.  
  6178.                 FLAG_Z = data;
  6179.                 FLAG_V = VFLAG_CLEAR;
  6180.                 FLAG_C = CFLAG_CLEAR;
  6181.  
  6182.                 REG_D[(word2 >> 12) & 7] = data;
  6183.  
  6184.                 return;
  6185.         }
  6186.         m68ki_exception_illegal();
  6187. }
  6188.  
  6189.  
  6190. void m68k_op_bfexts_32_pcix(void)
  6191. {
  6192.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  6193.         {
  6194.                 uint word2 = OPER_I_16();
  6195.                 sint offset = (word2>>6)&31;
  6196.                 uint width = word2;
  6197.                 uint data;
  6198.                 uint ea = EA_PCIX_8();
  6199.  
  6200.  
  6201.                 if(BIT_B(word2))
  6202.                         offset = MAKE_INT_32(REG_D[offset&7]);
  6203.                 if(BIT_5(word2))
  6204.                         width = REG_D[width&7];
  6205.  
  6206.                 /* Offset is signed so we have to use ugly math =( */
  6207.                 ea += offset / 8;
  6208.                 offset %= 8;
  6209.                 if(offset < 0)
  6210.                 {
  6211.                         offset += 8;
  6212.                         ea--;
  6213.                 }
  6214.                 width = ((width-1) & 31) + 1;
  6215.  
  6216.                 data = m68ki_read_32(ea);
  6217.  
  6218.                 data = MASK_OUT_ABOVE_32(data<<offset);
  6219.  
  6220.                 if((offset+width) > 32)
  6221.                         data |= (m68ki_read_8(ea+4) << offset) >> 8;
  6222.  
  6223.                 FLAG_N = NFLAG_32(data);
  6224.                 data  = MAKE_INT_32(data) >> (32 - width);
  6225.  
  6226.                 FLAG_Z = data;
  6227.                 FLAG_V = VFLAG_CLEAR;
  6228.                 FLAG_C = CFLAG_CLEAR;
  6229.  
  6230.                 REG_D[(word2 >> 12) & 7] = data;
  6231.  
  6232.                 return;
  6233.         }
  6234.         m68ki_exception_illegal();
  6235. }
  6236.  
  6237.  
  6238. void m68k_op_bfextu_32_d(void)
  6239. {
  6240.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  6241.         {
  6242.                 uint word2 = OPER_I_16();
  6243.                 uint offset = (word2>>6)&31;
  6244.                 uint width = word2;
  6245.                 uint64 data = DY;
  6246.  
  6247.  
  6248.                 if(BIT_B(word2))
  6249.                         offset = REG_D[offset&7];
  6250.                 if(BIT_5(word2))
  6251.                         width = REG_D[width&7];
  6252.  
  6253.                 offset &= 31;
  6254.                 width = ((width-1) & 31) + 1;
  6255.  
  6256.                 data = ROL_32(data, offset);
  6257.                 FLAG_N = NFLAG_32(data);
  6258.                 data >>= 32 - width;
  6259.  
  6260.                 FLAG_Z = data;
  6261.                 FLAG_V = VFLAG_CLEAR;
  6262.                 FLAG_C = CFLAG_CLEAR;
  6263.  
  6264.                 REG_D[(word2>>12)&7] = data;
  6265.  
  6266.                 return;
  6267.         }
  6268.         m68ki_exception_illegal();
  6269. }
  6270.  
  6271.  
  6272. void m68k_op_bfextu_32_ai(void)
  6273. {
  6274.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  6275.         {
  6276.                 uint word2 = OPER_I_16();
  6277.                 sint offset = (word2>>6)&31;
  6278.                 uint width = word2;
  6279.                 uint data;
  6280.                 uint ea = EA_AY_AI_8();
  6281.  
  6282.  
  6283.                 if(BIT_B(word2))
  6284.                 offset = MAKE_INT_32(REG_D[offset&7]);
  6285.                 if(BIT_5(word2))
  6286.                         width = REG_D[width&7];
  6287.  
  6288.                 /* Offset is signed so we have to use ugly math =( */
  6289.                 ea += offset / 8;
  6290.                 offset %= 8;
  6291.                 if(offset < 0)
  6292.                 {
  6293.                         offset += 8;
  6294.                         ea--;
  6295.                 }
  6296.                 width = ((width-1) & 31) + 1;
  6297.  
  6298.                 data = m68ki_read_32(ea);
  6299.                 data = MASK_OUT_ABOVE_32(data<<offset);
  6300.  
  6301.                 if((offset+width) > 32)
  6302.                         data |= (m68ki_read_8(ea+4) << offset) >> 8;
  6303.  
  6304.                 FLAG_N = NFLAG_32(data);
  6305.                 data  >>= (32 - width);
  6306.  
  6307.                 FLAG_Z = data;
  6308.                 FLAG_V = VFLAG_CLEAR;
  6309.                 FLAG_C = CFLAG_CLEAR;
  6310.  
  6311.                 REG_D[(word2 >> 12) & 7] = data;
  6312.  
  6313.                 return;
  6314.         }
  6315.         m68ki_exception_illegal();
  6316. }
  6317.  
  6318.  
  6319. void m68k_op_bfextu_32_di(void)
  6320. {
  6321.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  6322.         {
  6323.                 uint word2 = OPER_I_16();
  6324.                 sint offset = (word2>>6)&31;
  6325.                 uint width = word2;
  6326.                 uint data;
  6327.                 uint ea = EA_AY_DI_8();
  6328.  
  6329.  
  6330.                 if(BIT_B(word2))
  6331.                 offset = MAKE_INT_32(REG_D[offset&7]);
  6332.                 if(BIT_5(word2))
  6333.                         width = REG_D[width&7];
  6334.  
  6335.                 /* Offset is signed so we have to use ugly math =( */
  6336.                 ea += offset / 8;
  6337.                 offset %= 8;
  6338.                 if(offset < 0)
  6339.                 {
  6340.                         offset += 8;
  6341.                         ea--;
  6342.                 }
  6343.                 width = ((width-1) & 31) + 1;
  6344.  
  6345.                 data = m68ki_read_32(ea);
  6346.                 data = MASK_OUT_ABOVE_32(data<<offset);
  6347.  
  6348.                 if((offset+width) > 32)
  6349.                         data |= (m68ki_read_8(ea+4) << offset) >> 8;
  6350.  
  6351.                 FLAG_N = NFLAG_32(data);
  6352.                 data  >>= (32 - width);
  6353.  
  6354.                 FLAG_Z = data;
  6355.                 FLAG_V = VFLAG_CLEAR;
  6356.                 FLAG_C = CFLAG_CLEAR;
  6357.  
  6358.                 REG_D[(word2 >> 12) & 7] = data;
  6359.  
  6360.                 return;
  6361.         }
  6362.         m68ki_exception_illegal();
  6363. }
  6364.  
  6365.  
  6366. void m68k_op_bfextu_32_ix(void)
  6367. {
  6368.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  6369.         {
  6370.                 uint word2 = OPER_I_16();
  6371.                 sint offset = (word2>>6)&31;
  6372.                 uint width = word2;
  6373.                 uint data;
  6374.                 uint ea = EA_AY_IX_8();
  6375.  
  6376.  
  6377.                 if(BIT_B(word2))
  6378.                 offset = MAKE_INT_32(REG_D[offset&7]);
  6379.                 if(BIT_5(word2))
  6380.                         width = REG_D[width&7];
  6381.  
  6382.                 /* Offset is signed so we have to use ugly math =( */
  6383.                 ea += offset / 8;
  6384.                 offset %= 8;
  6385.                 if(offset < 0)
  6386.                 {
  6387.                         offset += 8;
  6388.                         ea--;
  6389.                 }
  6390.                 width = ((width-1) & 31) + 1;
  6391.  
  6392.                 data = m68ki_read_32(ea);
  6393.                 data = MASK_OUT_ABOVE_32(data<<offset);
  6394.  
  6395.                 if((offset+width) > 32)
  6396.                         data |= (m68ki_read_8(ea+4) << offset) >> 8;
  6397.  
  6398.                 FLAG_N = NFLAG_32(data);
  6399.                 data  >>= (32 - width);
  6400.  
  6401.                 FLAG_Z = data;
  6402.                 FLAG_V = VFLAG_CLEAR;
  6403.                 FLAG_C = CFLAG_CLEAR;
  6404.  
  6405.                 REG_D[(word2 >> 12) & 7] = data;
  6406.  
  6407.                 return;
  6408.         }
  6409.         m68ki_exception_illegal();
  6410. }
  6411.  
  6412.  
  6413. void m68k_op_bfextu_32_aw(void)
  6414. {
  6415.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  6416.         {
  6417.                 uint word2 = OPER_I_16();
  6418.                 sint offset = (word2>>6)&31;
  6419.                 uint width = word2;
  6420.                 uint data;
  6421.                 uint ea = EA_AW_8();
  6422.  
  6423.  
  6424.                 if(BIT_B(word2))
  6425.                 offset = MAKE_INT_32(REG_D[offset&7]);
  6426.                 if(BIT_5(word2))
  6427.                         width = REG_D[width&7];
  6428.  
  6429.                 /* Offset is signed so we have to use ugly math =( */
  6430.                 ea += offset / 8;
  6431.                 offset %= 8;
  6432.                 if(offset < 0)
  6433.                 {
  6434.                         offset += 8;
  6435.                         ea--;
  6436.                 }
  6437.                 width = ((width-1) & 31) + 1;
  6438.  
  6439.                 data = m68ki_read_32(ea);
  6440.                 data = MASK_OUT_ABOVE_32(data<<offset);
  6441.  
  6442.                 if((offset+width) > 32)
  6443.                         data |= (m68ki_read_8(ea+4) << offset) >> 8;
  6444.  
  6445.                 FLAG_N = NFLAG_32(data);
  6446.                 data  >>= (32 - width);
  6447.  
  6448.                 FLAG_Z = data;
  6449.                 FLAG_V = VFLAG_CLEAR;
  6450.                 FLAG_C = CFLAG_CLEAR;
  6451.  
  6452.                 REG_D[(word2 >> 12) & 7] = data;
  6453.  
  6454.                 return;
  6455.         }
  6456.         m68ki_exception_illegal();
  6457. }
  6458.  
  6459.  
  6460. void m68k_op_bfextu_32_al(void)
  6461. {
  6462.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  6463.         {
  6464.                 uint word2 = OPER_I_16();
  6465.                 sint offset = (word2>>6)&31;
  6466.                 uint width = word2;
  6467.                 uint data;
  6468.                 uint ea = EA_AL_8();
  6469.  
  6470.  
  6471.                 if(BIT_B(word2))
  6472.                 offset = MAKE_INT_32(REG_D[offset&7]);
  6473.                 if(BIT_5(word2))
  6474.                         width = REG_D[width&7];
  6475.  
  6476.                 /* Offset is signed so we have to use ugly math =( */
  6477.                 ea += offset / 8;
  6478.                 offset %= 8;
  6479.                 if(offset < 0)
  6480.                 {
  6481.                         offset += 8;
  6482.                         ea--;
  6483.                 }
  6484.                 width = ((width-1) & 31) + 1;
  6485.  
  6486.                 data = m68ki_read_32(ea);
  6487.                 data = MASK_OUT_ABOVE_32(data<<offset);
  6488.  
  6489.                 if((offset+width) > 32)
  6490.                         data |= (m68ki_read_8(ea+4) << offset) >> 8;
  6491.  
  6492.                 FLAG_N = NFLAG_32(data);
  6493.                 data  >>= (32 - width);
  6494.  
  6495.                 FLAG_Z = data;
  6496.                 FLAG_V = VFLAG_CLEAR;
  6497.                 FLAG_C = CFLAG_CLEAR;
  6498.  
  6499.                 REG_D[(word2 >> 12) & 7] = data;
  6500.  
  6501.                 return;
  6502.         }
  6503.         m68ki_exception_illegal();
  6504. }
  6505.  
  6506.  
  6507. void m68k_op_bfextu_32_pcdi(void)
  6508. {
  6509.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  6510.         {
  6511.                 uint word2 = OPER_I_16();
  6512.                 sint offset = (word2>>6)&31;
  6513.                 uint width = word2;
  6514.                 uint data;
  6515.                 uint ea = EA_PCDI_8();
  6516.  
  6517.  
  6518.                 if(BIT_B(word2))
  6519.                 offset = MAKE_INT_32(REG_D[offset&7]);
  6520.                 if(BIT_5(word2))
  6521.                         width = REG_D[width&7];
  6522.  
  6523.                 /* Offset is signed so we have to use ugly math =( */
  6524.                 ea += offset / 8;
  6525.                 offset %= 8;
  6526.                 if(offset < 0)
  6527.                 {
  6528.                         offset += 8;
  6529.                         ea--;
  6530.                 }
  6531.                 width = ((width-1) & 31) + 1;
  6532.  
  6533.                 data = m68ki_read_32(ea);
  6534.                 data = MASK_OUT_ABOVE_32(data<<offset);
  6535.  
  6536.                 if((offset+width) > 32)
  6537.                         data |= (m68ki_read_8(ea+4) << offset) >> 8;
  6538.  
  6539.                 FLAG_N = NFLAG_32(data);
  6540.                 data  >>= (32 - width);
  6541.  
  6542.                 FLAG_Z = data;
  6543.                 FLAG_V = VFLAG_CLEAR;
  6544.                 FLAG_C = CFLAG_CLEAR;
  6545.  
  6546.                 REG_D[(word2 >> 12) & 7] = data;
  6547.  
  6548.                 return;
  6549.         }
  6550.         m68ki_exception_illegal();
  6551. }
  6552.  
  6553.  
  6554. void m68k_op_bfextu_32_pcix(void)
  6555. {
  6556.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  6557.         {
  6558.                 uint word2 = OPER_I_16();
  6559.                 sint offset = (word2>>6)&31;
  6560.                 uint width = word2;
  6561.                 uint data;
  6562.                 uint ea = EA_PCIX_8();
  6563.  
  6564.  
  6565.                 if(BIT_B(word2))
  6566.                 offset = MAKE_INT_32(REG_D[offset&7]);
  6567.                 if(BIT_5(word2))
  6568.                         width = REG_D[width&7];
  6569.  
  6570.                 /* Offset is signed so we have to use ugly math =( */
  6571.                 ea += offset / 8;
  6572.                 offset %= 8;
  6573.                 if(offset < 0)
  6574.                 {
  6575.                         offset += 8;
  6576.                         ea--;
  6577.                 }
  6578.                 width = ((width-1) & 31) + 1;
  6579.  
  6580.                 data = m68ki_read_32(ea);
  6581.                 data = MASK_OUT_ABOVE_32(data<<offset);
  6582.  
  6583.                 if((offset+width) > 32)
  6584.                         data |= (m68ki_read_8(ea+4) << offset) >> 8;
  6585.  
  6586.                 FLAG_N = NFLAG_32(data);
  6587.                 data  >>= (32 - width);
  6588.  
  6589.                 FLAG_Z = data;
  6590.                 FLAG_V = VFLAG_CLEAR;
  6591.                 FLAG_C = CFLAG_CLEAR;
  6592.  
  6593.                 REG_D[(word2 >> 12) & 7] = data;
  6594.  
  6595.                 return;
  6596.         }
  6597.         m68ki_exception_illegal();
  6598. }
  6599.  
  6600.  
  6601. void m68k_op_bfffo_32_d(void)
  6602. {
  6603.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  6604.         {
  6605.                 uint word2 = OPER_I_16();
  6606.                 uint offset = (word2>>6)&31;
  6607.                 uint width = word2;
  6608.                 uint64 data = DY;
  6609.                 uint bit;
  6610.  
  6611.  
  6612.                 if(BIT_B(word2))
  6613.                         offset = REG_D[offset&7];
  6614.                 if(BIT_5(word2))
  6615.                         width = REG_D[width&7];
  6616.  
  6617.                 offset &= 31;
  6618.                 width = ((width-1) & 31) + 1;
  6619.  
  6620.                 data = ROL_32(data, offset);
  6621.                 FLAG_N = NFLAG_32(data);
  6622.                 data >>= 32 - width;
  6623.  
  6624.                 FLAG_Z = data;
  6625.                 FLAG_V = VFLAG_CLEAR;
  6626.                 FLAG_C = CFLAG_CLEAR;
  6627.  
  6628.                 for(bit = 1<<(width-1);bit && !(data & bit);bit>>= 1)
  6629.                         offset++;
  6630.  
  6631.                 REG_D[(word2>>12)&7] = offset;
  6632.  
  6633.                 return;
  6634.         }
  6635.         m68ki_exception_illegal();
  6636. }
  6637.  
  6638.  
  6639. void m68k_op_bfffo_32_ai(void)
  6640. {
  6641.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  6642.         {
  6643.                 uint word2 = OPER_I_16();
  6644.                 sint offset = (word2>>6)&31;
  6645.                 sint local_offset;
  6646.                 uint width = word2;
  6647.                 uint data;
  6648.                 uint bit;
  6649.                 uint ea = EA_AY_AI_8();
  6650.  
  6651.  
  6652.                 if(BIT_B(word2))
  6653.                         offset = MAKE_INT_32(REG_D[offset&7]);
  6654.                 if(BIT_5(word2))
  6655.                         width = REG_D[width&7];
  6656.  
  6657.                 /* Offset is signed so we have to use ugly math =( */
  6658.                 ea += offset / 8;
  6659.                 local_offset = offset % 8;
  6660.                 if(local_offset < 0)
  6661.                 {
  6662.                         local_offset += 8;
  6663.                         ea--;
  6664.                 }
  6665.                 width = ((width-1) & 31) + 1;
  6666.  
  6667.                 data = m68ki_read_32(ea);
  6668.                 data = MASK_OUT_ABOVE_32(data<<local_offset);
  6669.  
  6670.                 if((local_offset+width) > 32)
  6671.                         data |= (m68ki_read_8(ea+4) << local_offset) >> 8;
  6672.  
  6673.                 FLAG_N = NFLAG_32(data);
  6674.                 data  >>= (32 - width);
  6675.  
  6676.                 FLAG_Z = data;
  6677.                 FLAG_V = VFLAG_CLEAR;
  6678.                 FLAG_C = CFLAG_CLEAR;
  6679.  
  6680.                 for(bit = 1<<(width-1);bit && !(data & bit);bit>>= 1)
  6681.                         offset++;
  6682.  
  6683.                 REG_D[(word2>>12)&7] = offset;
  6684.  
  6685.                 return;
  6686.         }
  6687.         m68ki_exception_illegal();
  6688. }
  6689.  
  6690.  
  6691. void m68k_op_bfffo_32_di(void)
  6692. {
  6693.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  6694.         {
  6695.                 uint word2 = OPER_I_16();
  6696.                 sint offset = (word2>>6)&31;
  6697.                 sint local_offset;
  6698.                 uint width = word2;
  6699.                 uint data;
  6700.                 uint bit;
  6701.                 uint ea = EA_AY_DI_8();
  6702.  
  6703.  
  6704.                 if(BIT_B(word2))
  6705.                         offset = MAKE_INT_32(REG_D[offset&7]);
  6706.                 if(BIT_5(word2))
  6707.                         width = REG_D[width&7];
  6708.  
  6709.                 /* Offset is signed so we have to use ugly math =( */
  6710.                 ea += offset / 8;
  6711.                 local_offset = offset % 8;
  6712.                 if(local_offset < 0)
  6713.                 {
  6714.                         local_offset += 8;
  6715.                         ea--;
  6716.                 }
  6717.                 width = ((width-1) & 31) + 1;
  6718.  
  6719.                 data = m68ki_read_32(ea);
  6720.                 data = MASK_OUT_ABOVE_32(data<<local_offset);
  6721.  
  6722.                 if((local_offset+width) > 32)
  6723.                         data |= (m68ki_read_8(ea+4) << local_offset) >> 8;
  6724.  
  6725.                 FLAG_N = NFLAG_32(data);
  6726.                 data  >>= (32 - width);
  6727.  
  6728.                 FLAG_Z = data;
  6729.                 FLAG_V = VFLAG_CLEAR;
  6730.                 FLAG_C = CFLAG_CLEAR;
  6731.  
  6732.                 for(bit = 1<<(width-1);bit && !(data & bit);bit>>= 1)
  6733.                         offset++;
  6734.  
  6735.                 REG_D[(word2>>12)&7] = offset;
  6736.  
  6737.                 return;
  6738.         }
  6739.         m68ki_exception_illegal();
  6740. }
  6741.  
  6742.  
  6743. void m68k_op_bfffo_32_ix(void)
  6744. {
  6745.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  6746.         {
  6747.                 uint word2 = OPER_I_16();
  6748.                 sint offset = (word2>>6)&31;
  6749.                 sint local_offset;
  6750.                 uint width = word2;
  6751.                 uint data;
  6752.                 uint bit;
  6753.                 uint ea = EA_AY_IX_8();
  6754.  
  6755.  
  6756.                 if(BIT_B(word2))
  6757.                         offset = MAKE_INT_32(REG_D[offset&7]);
  6758.                 if(BIT_5(word2))
  6759.                         width = REG_D[width&7];
  6760.  
  6761.                 /* Offset is signed so we have to use ugly math =( */
  6762.                 ea += offset / 8;
  6763.                 local_offset = offset % 8;
  6764.                 if(local_offset < 0)
  6765.                 {
  6766.                         local_offset += 8;
  6767.                         ea--;
  6768.                 }
  6769.                 width = ((width-1) & 31) + 1;
  6770.  
  6771.                 data = m68ki_read_32(ea);
  6772.                 data = MASK_OUT_ABOVE_32(data<<local_offset);
  6773.  
  6774.                 if((local_offset+width) > 32)
  6775.                         data |= (m68ki_read_8(ea+4) << local_offset) >> 8;
  6776.  
  6777.                 FLAG_N = NFLAG_32(data);
  6778.                 data  >>= (32 - width);
  6779.  
  6780.                 FLAG_Z = data;
  6781.                 FLAG_V = VFLAG_CLEAR;
  6782.                 FLAG_C = CFLAG_CLEAR;
  6783.  
  6784.                 for(bit = 1<<(width-1);bit && !(data & bit);bit>>= 1)
  6785.                         offset++;
  6786.  
  6787.                 REG_D[(word2>>12)&7] = offset;
  6788.  
  6789.                 return;
  6790.         }
  6791.         m68ki_exception_illegal();
  6792. }
  6793.  
  6794.  
  6795. void m68k_op_bfffo_32_aw(void)
  6796. {
  6797.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  6798.         {
  6799.                 uint word2 = OPER_I_16();
  6800.                 sint offset = (word2>>6)&31;
  6801.                 sint local_offset;
  6802.                 uint width = word2;
  6803.                 uint data;
  6804.                 uint bit;
  6805.                 uint ea = EA_AW_8();
  6806.  
  6807.  
  6808.                 if(BIT_B(word2))
  6809.                         offset = MAKE_INT_32(REG_D[offset&7]);
  6810.                 if(BIT_5(word2))
  6811.                         width = REG_D[width&7];
  6812.  
  6813.                 /* Offset is signed so we have to use ugly math =( */
  6814.                 ea += offset / 8;
  6815.                 local_offset = offset % 8;
  6816.                 if(local_offset < 0)
  6817.                 {
  6818.                         local_offset += 8;
  6819.                         ea--;
  6820.                 }
  6821.                 width = ((width-1) & 31) + 1;
  6822.  
  6823.                 data = m68ki_read_32(ea);
  6824.                 data = MASK_OUT_ABOVE_32(data<<local_offset);
  6825.  
  6826.                 if((local_offset+width) > 32)
  6827.                         data |= (m68ki_read_8(ea+4) << local_offset) >> 8;
  6828.  
  6829.                 FLAG_N = NFLAG_32(data);
  6830.                 data  >>= (32 - width);
  6831.  
  6832.                 FLAG_Z = data;
  6833.                 FLAG_V = VFLAG_CLEAR;
  6834.                 FLAG_C = CFLAG_CLEAR;
  6835.  
  6836.                 for(bit = 1<<(width-1);bit && !(data & bit);bit>>= 1)
  6837.                         offset++;
  6838.  
  6839.                 REG_D[(word2>>12)&7] = offset;
  6840.  
  6841.                 return;
  6842.         }
  6843.         m68ki_exception_illegal();
  6844. }
  6845.  
  6846.  
  6847. void m68k_op_bfffo_32_al(void)
  6848. {
  6849.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  6850.         {
  6851.                 uint word2 = OPER_I_16();
  6852.                 sint offset = (word2>>6)&31;
  6853.                 sint local_offset;
  6854.                 uint width = word2;
  6855.                 uint data;
  6856.                 uint bit;
  6857.                 uint ea = EA_AL_8();
  6858.  
  6859.  
  6860.                 if(BIT_B(word2))
  6861.                         offset = MAKE_INT_32(REG_D[offset&7]);
  6862.                 if(BIT_5(word2))
  6863.                         width = REG_D[width&7];
  6864.  
  6865.                 /* Offset is signed so we have to use ugly math =( */
  6866.                 ea += offset / 8;
  6867.                 local_offset = offset % 8;
  6868.                 if(local_offset < 0)
  6869.                 {
  6870.                         local_offset += 8;
  6871.                         ea--;
  6872.                 }
  6873.                 width = ((width-1) & 31) + 1;
  6874.  
  6875.                 data = m68ki_read_32(ea);
  6876.                 data = MASK_OUT_ABOVE_32(data<<local_offset);
  6877.  
  6878.                 if((local_offset+width) > 32)
  6879.                         data |= (m68ki_read_8(ea+4) << local_offset) >> 8;
  6880.  
  6881.                 FLAG_N = NFLAG_32(data);
  6882.                 data  >>= (32 - width);
  6883.  
  6884.                 FLAG_Z = data;
  6885.                 FLAG_V = VFLAG_CLEAR;
  6886.                 FLAG_C = CFLAG_CLEAR;
  6887.  
  6888.                 for(bit = 1<<(width-1);bit && !(data & bit);bit>>= 1)
  6889.                         offset++;
  6890.  
  6891.                 REG_D[(word2>>12)&7] = offset;
  6892.  
  6893.                 return;
  6894.         }
  6895.         m68ki_exception_illegal();
  6896. }
  6897.  
  6898.  
  6899. void m68k_op_bfffo_32_pcdi(void)
  6900. {
  6901.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  6902.         {
  6903.                 uint word2 = OPER_I_16();
  6904.                 sint offset = (word2>>6)&31;
  6905.                 sint local_offset;
  6906.                 uint width = word2;
  6907.                 uint data;
  6908.                 uint bit;
  6909.                 uint ea = EA_PCDI_8();
  6910.  
  6911.  
  6912.                 if(BIT_B(word2))
  6913.                         offset = MAKE_INT_32(REG_D[offset&7]);
  6914.                 if(BIT_5(word2))
  6915.                         width = REG_D[width&7];
  6916.  
  6917.                 /* Offset is signed so we have to use ugly math =( */
  6918.                 ea += offset / 8;
  6919.                 local_offset = offset % 8;
  6920.                 if(local_offset < 0)
  6921.                 {
  6922.                         local_offset += 8;
  6923.                         ea--;
  6924.                 }
  6925.                 width = ((width-1) & 31) + 1;
  6926.  
  6927.                 data = m68ki_read_32(ea);
  6928.                 data = MASK_OUT_ABOVE_32(data<<local_offset);
  6929.  
  6930.                 if((local_offset+width) > 32)
  6931.                         data |= (m68ki_read_8(ea+4) << local_offset) >> 8;
  6932.  
  6933.                 FLAG_N = NFLAG_32(data);
  6934.                 data  >>= (32 - width);
  6935.  
  6936.                 FLAG_Z = data;
  6937.                 FLAG_V = VFLAG_CLEAR;
  6938.                 FLAG_C = CFLAG_CLEAR;
  6939.  
  6940.                 for(bit = 1<<(width-1);bit && !(data & bit);bit>>= 1)
  6941.                         offset++;
  6942.  
  6943.                 REG_D[(word2>>12)&7] = offset;
  6944.  
  6945.                 return;
  6946.         }
  6947.         m68ki_exception_illegal();
  6948. }
  6949.  
  6950.  
  6951. void m68k_op_bfffo_32_pcix(void)
  6952. {
  6953.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  6954.         {
  6955.                 uint word2 = OPER_I_16();
  6956.                 sint offset = (word2>>6)&31;
  6957.                 sint local_offset;
  6958.                 uint width = word2;
  6959.                 uint data;
  6960.                 uint bit;
  6961.                 uint ea = EA_PCIX_8();
  6962.  
  6963.  
  6964.                 if(BIT_B(word2))
  6965.                         offset = MAKE_INT_32(REG_D[offset&7]);
  6966.                 if(BIT_5(word2))
  6967.                         width = REG_D[width&7];
  6968.  
  6969.                 /* Offset is signed so we have to use ugly math =( */
  6970.                 ea += offset / 8;
  6971.                 local_offset = offset % 8;
  6972.                 if(local_offset < 0)
  6973.                 {
  6974.                         local_offset += 8;
  6975.                         ea--;
  6976.                 }
  6977.                 width = ((width-1) & 31) + 1;
  6978.  
  6979.                 data = m68ki_read_32(ea);
  6980.                 data = MASK_OUT_ABOVE_32(data<<local_offset);
  6981.  
  6982.                 if((local_offset+width) > 32)
  6983.                         data |= (m68ki_read_8(ea+4) << local_offset) >> 8;
  6984.  
  6985.                 FLAG_N = NFLAG_32(data);
  6986.                 data  >>= (32 - width);
  6987.  
  6988.                 FLAG_Z = data;
  6989.                 FLAG_V = VFLAG_CLEAR;
  6990.                 FLAG_C = CFLAG_CLEAR;
  6991.  
  6992.                 for(bit = 1<<(width-1);bit && !(data & bit);bit>>= 1)
  6993.                         offset++;
  6994.  
  6995.                 REG_D[(word2>>12)&7] = offset;
  6996.  
  6997.                 return;
  6998.         }
  6999.         m68ki_exception_illegal();
  7000. }
  7001.  
  7002.  
  7003. void m68k_op_bfins_32_d(void)
  7004. {
  7005.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  7006.         {
  7007.                 uint word2 = OPER_I_16();
  7008.                 uint offset = (word2>>6)&31;
  7009.                 uint width = word2;
  7010.                 uint* data = &DY;
  7011.                 uint64 mask;
  7012.                 uint64 insert = REG_D[(word2>>12)&7];
  7013.  
  7014.  
  7015.                 if(BIT_B(word2))
  7016.                         offset = REG_D[offset&7];
  7017.                 if(BIT_5(word2))
  7018.                         width = REG_D[width&7];
  7019.  
  7020.  
  7021.                 offset &= 31;
  7022.                 width = ((width-1) & 31) + 1;
  7023.  
  7024.  
  7025.                 mask = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
  7026.                 mask = ROR_32(mask, offset);
  7027.  
  7028.                 insert = MASK_OUT_ABOVE_32(insert << (32 - width));
  7029.                 FLAG_N = NFLAG_32(insert);
  7030.                 FLAG_Z = insert;
  7031.                 insert = ROR_32(insert, offset);
  7032.  
  7033.                 FLAG_V = VFLAG_CLEAR;
  7034.                 FLAG_C = CFLAG_CLEAR;
  7035.  
  7036.                 *data &= ~mask;
  7037.                 *data |= insert;
  7038.  
  7039.                 return;
  7040.         }
  7041.         m68ki_exception_illegal();
  7042. }
  7043.  
  7044.  
  7045. void m68k_op_bfins_32_ai(void)
  7046. {
  7047.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  7048.         {
  7049.                 uint word2 = OPER_I_16();
  7050.                 sint offset = (word2>>6)&31;
  7051.                 uint width = word2;
  7052.                 uint insert_base = REG_D[(word2>>12)&7];
  7053.                 uint insert_long;
  7054.                 uint insert_byte;
  7055.                 uint mask_base;
  7056.                 uint data_long;
  7057.                 uint mask_long;
  7058.                 uint data_byte = 0;
  7059.                 uint mask_byte = 0;
  7060.                 uint ea = EA_AY_AI_8();
  7061.  
  7062.  
  7063.                 if(BIT_B(word2))
  7064.                         offset = MAKE_INT_32(REG_D[offset&7]);
  7065.                 if(BIT_5(word2))
  7066.                         width = REG_D[width&7];
  7067.  
  7068.                 /* Offset is signed so we have to use ugly math =( */
  7069.                 ea += offset / 8;
  7070.                 offset %= 8;
  7071.                 if(offset < 0)
  7072.                 {
  7073.                         offset += 8;
  7074.                         ea--;
  7075.                 }
  7076.                 width = ((width-1) & 31) + 1;
  7077.  
  7078.                 mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
  7079.                 mask_long = mask_base >> offset;
  7080.  
  7081.                 insert_base = MASK_OUT_ABOVE_32(insert_base << (32 - width));
  7082.                 FLAG_N = NFLAG_32(insert_base);
  7083.                 FLAG_Z = insert_base;
  7084.                 insert_long = insert_base >> offset;
  7085.  
  7086.                 data_long = m68ki_read_32(ea);
  7087.                 FLAG_V = VFLAG_CLEAR;
  7088.                 FLAG_C = CFLAG_CLEAR;
  7089.  
  7090.                 m68ki_write_32(ea, (data_long & ~mask_long) | insert_long);
  7091.  
  7092.                 if((width + offset) > 32)
  7093.                 {
  7094.                         mask_byte = MASK_OUT_ABOVE_8(mask_base);
  7095.                         insert_byte = MASK_OUT_ABOVE_8(insert_base);
  7096.                         data_byte = m68ki_read_8(ea+4);
  7097.                         FLAG_Z |= (data_byte & mask_byte);
  7098.                         m68ki_write_8(ea+4, (data_byte & ~mask_byte) | insert_byte);
  7099.                 }
  7100.                 return;
  7101.         }
  7102.         m68ki_exception_illegal();
  7103. }
  7104.  
  7105.  
  7106. void m68k_op_bfins_32_di(void)
  7107. {
  7108.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  7109.         {
  7110.                 uint word2 = OPER_I_16();
  7111.                 sint offset = (word2>>6)&31;
  7112.                 uint width = word2;
  7113.                 uint insert_base = REG_D[(word2>>12)&7];
  7114.                 uint insert_long;
  7115.                 uint insert_byte;
  7116.                 uint mask_base;
  7117.                 uint data_long;
  7118.                 uint mask_long;
  7119.                 uint data_byte = 0;
  7120.                 uint mask_byte = 0;
  7121.                 uint ea = EA_AY_DI_8();
  7122.  
  7123.  
  7124.                 if(BIT_B(word2))
  7125.                         offset = MAKE_INT_32(REG_D[offset&7]);
  7126.                 if(BIT_5(word2))
  7127.                         width = REG_D[width&7];
  7128.  
  7129.                 /* Offset is signed so we have to use ugly math =( */
  7130.                 ea += offset / 8;
  7131.                 offset %= 8;
  7132.                 if(offset < 0)
  7133.                 {
  7134.                         offset += 8;
  7135.                         ea--;
  7136.                 }
  7137.                 width = ((width-1) & 31) + 1;
  7138.  
  7139.                 mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
  7140.                 mask_long = mask_base >> offset;
  7141.  
  7142.                 insert_base = MASK_OUT_ABOVE_32(insert_base << (32 - width));
  7143.                 FLAG_N = NFLAG_32(insert_base);
  7144.                 FLAG_Z = insert_base;
  7145.                 insert_long = insert_base >> offset;
  7146.  
  7147.                 data_long = m68ki_read_32(ea);
  7148.                 FLAG_V = VFLAG_CLEAR;
  7149.                 FLAG_C = CFLAG_CLEAR;
  7150.  
  7151.                 m68ki_write_32(ea, (data_long & ~mask_long) | insert_long);
  7152.  
  7153.                 if((width + offset) > 32)
  7154.                 {
  7155.                         mask_byte = MASK_OUT_ABOVE_8(mask_base);
  7156.                         insert_byte = MASK_OUT_ABOVE_8(insert_base);
  7157.                         data_byte = m68ki_read_8(ea+4);
  7158.                         FLAG_Z |= (data_byte & mask_byte);
  7159.                         m68ki_write_8(ea+4, (data_byte & ~mask_byte) | insert_byte);
  7160.                 }
  7161.                 return;
  7162.         }
  7163.         m68ki_exception_illegal();
  7164. }
  7165.  
  7166.  
  7167. void m68k_op_bfins_32_ix(void)
  7168. {
  7169.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  7170.         {
  7171.                 uint word2 = OPER_I_16();
  7172.                 sint offset = (word2>>6)&31;
  7173.                 uint width = word2;
  7174.                 uint insert_base = REG_D[(word2>>12)&7];
  7175.                 uint insert_long;
  7176.                 uint insert_byte;
  7177.                 uint mask_base;
  7178.                 uint data_long;
  7179.                 uint mask_long;
  7180.                 uint data_byte = 0;
  7181.                 uint mask_byte = 0;
  7182.                 uint ea = EA_AY_IX_8();
  7183.  
  7184.  
  7185.                 if(BIT_B(word2))
  7186.                         offset = MAKE_INT_32(REG_D[offset&7]);
  7187.                 if(BIT_5(word2))
  7188.                         width = REG_D[width&7];
  7189.  
  7190.                 /* Offset is signed so we have to use ugly math =( */
  7191.                 ea += offset / 8;
  7192.                 offset %= 8;
  7193.                 if(offset < 0)
  7194.                 {
  7195.                         offset += 8;
  7196.                         ea--;
  7197.                 }
  7198.                 width = ((width-1) & 31) + 1;
  7199.  
  7200.                 mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
  7201.                 mask_long = mask_base >> offset;
  7202.  
  7203.                 insert_base = MASK_OUT_ABOVE_32(insert_base << (32 - width));
  7204.                 FLAG_N = NFLAG_32(insert_base);
  7205.                 FLAG_Z = insert_base;
  7206.                 insert_long = insert_base >> offset;
  7207.  
  7208.                 data_long = m68ki_read_32(ea);
  7209.                 FLAG_V = VFLAG_CLEAR;
  7210.                 FLAG_C = CFLAG_CLEAR;
  7211.  
  7212.                 m68ki_write_32(ea, (data_long & ~mask_long) | insert_long);
  7213.  
  7214.                 if((width + offset) > 32)
  7215.                 {
  7216.                         mask_byte = MASK_OUT_ABOVE_8(mask_base);
  7217.                         insert_byte = MASK_OUT_ABOVE_8(insert_base);
  7218.                         data_byte = m68ki_read_8(ea+4);
  7219.                         FLAG_Z |= (data_byte & mask_byte);
  7220.                         m68ki_write_8(ea+4, (data_byte & ~mask_byte) | insert_byte);
  7221.                 }
  7222.                 return;
  7223.         }
  7224.         m68ki_exception_illegal();
  7225. }
  7226.  
  7227.  
  7228. void m68k_op_bfins_32_aw(void)
  7229. {
  7230.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  7231.         {
  7232.                 uint word2 = OPER_I_16();
  7233.                 sint offset = (word2>>6)&31;
  7234.                 uint width = word2;
  7235.                 uint insert_base = REG_D[(word2>>12)&7];
  7236.                 uint insert_long;
  7237.                 uint insert_byte;
  7238.                 uint mask_base;
  7239.                 uint data_long;
  7240.                 uint mask_long;
  7241.                 uint data_byte = 0;
  7242.                 uint mask_byte = 0;
  7243.                 uint ea = EA_AW_8();
  7244.  
  7245.  
  7246.                 if(BIT_B(word2))
  7247.                         offset = MAKE_INT_32(REG_D[offset&7]);
  7248.                 if(BIT_5(word2))
  7249.                         width = REG_D[width&7];
  7250.  
  7251.                 /* Offset is signed so we have to use ugly math =( */
  7252.                 ea += offset / 8;
  7253.                 offset %= 8;
  7254.                 if(offset < 0)
  7255.                 {
  7256.                         offset += 8;
  7257.                         ea--;
  7258.                 }
  7259.                 width = ((width-1) & 31) + 1;
  7260.  
  7261.                 mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
  7262.                 mask_long = mask_base >> offset;
  7263.  
  7264.                 insert_base = MASK_OUT_ABOVE_32(insert_base << (32 - width));
  7265.                 FLAG_N = NFLAG_32(insert_base);
  7266.                 FLAG_Z = insert_base;
  7267.                 insert_long = insert_base >> offset;
  7268.  
  7269.                 data_long = m68ki_read_32(ea);
  7270.                 FLAG_V = VFLAG_CLEAR;
  7271.                 FLAG_C = CFLAG_CLEAR;
  7272.  
  7273.                 m68ki_write_32(ea, (data_long & ~mask_long) | insert_long);
  7274.  
  7275.                 if((width + offset) > 32)
  7276.                 {
  7277.                         mask_byte = MASK_OUT_ABOVE_8(mask_base);
  7278.                         insert_byte = MASK_OUT_ABOVE_8(insert_base);
  7279.                         data_byte = m68ki_read_8(ea+4);
  7280.                         FLAG_Z |= (data_byte & mask_byte);
  7281.                         m68ki_write_8(ea+4, (data_byte & ~mask_byte) | insert_byte);
  7282.                 }
  7283.                 return;
  7284.         }
  7285.         m68ki_exception_illegal();
  7286. }
  7287.  
  7288.  
  7289. void m68k_op_bfins_32_al(void)
  7290. {
  7291.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  7292.         {
  7293.                 uint word2 = OPER_I_16();
  7294.                 sint offset = (word2>>6)&31;
  7295.                 uint width = word2;
  7296.                 uint insert_base = REG_D[(word2>>12)&7];
  7297.                 uint insert_long;
  7298.                 uint insert_byte;
  7299.                 uint mask_base;
  7300.                 uint data_long;
  7301.                 uint mask_long;
  7302.                 uint data_byte = 0;
  7303.                 uint mask_byte = 0;
  7304.                 uint ea = EA_AL_8();
  7305.  
  7306.  
  7307.                 if(BIT_B(word2))
  7308.                         offset = MAKE_INT_32(REG_D[offset&7]);
  7309.                 if(BIT_5(word2))
  7310.                         width = REG_D[width&7];
  7311.  
  7312.                 /* Offset is signed so we have to use ugly math =( */
  7313.                 ea += offset / 8;
  7314.                 offset %= 8;
  7315.                 if(offset < 0)
  7316.                 {
  7317.                         offset += 8;
  7318.                         ea--;
  7319.                 }
  7320.                 width = ((width-1) & 31) + 1;
  7321.  
  7322.                 mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
  7323.                 mask_long = mask_base >> offset;
  7324.  
  7325.                 insert_base = MASK_OUT_ABOVE_32(insert_base << (32 - width));
  7326.                 FLAG_N = NFLAG_32(insert_base);
  7327.                 FLAG_Z = insert_base;
  7328.                 insert_long = insert_base >> offset;
  7329.  
  7330.                 data_long = m68ki_read_32(ea);
  7331.                 FLAG_V = VFLAG_CLEAR;
  7332.                 FLAG_C = CFLAG_CLEAR;
  7333.  
  7334.                 m68ki_write_32(ea, (data_long & ~mask_long) | insert_long);
  7335.  
  7336.                 if((width + offset) > 32)
  7337.                 {
  7338.                         mask_byte = MASK_OUT_ABOVE_8(mask_base);
  7339.                         insert_byte = MASK_OUT_ABOVE_8(insert_base);
  7340.                         data_byte = m68ki_read_8(ea+4);
  7341.                         FLAG_Z |= (data_byte & mask_byte);
  7342.                         m68ki_write_8(ea+4, (data_byte & ~mask_byte) | insert_byte);
  7343.                 }
  7344.                 return;
  7345.         }
  7346.         m68ki_exception_illegal();
  7347. }
  7348.  
  7349.  
  7350. void m68k_op_bfset_32_d(void)
  7351. {
  7352.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  7353.         {
  7354.                 uint word2 = OPER_I_16();
  7355.                 uint offset = (word2>>6)&31;
  7356.                 uint width = word2;
  7357.                 uint* data = &DY;
  7358.                 uint64 mask;
  7359.  
  7360.  
  7361.                 if(BIT_B(word2))
  7362.                         offset = REG_D[offset&7];
  7363.                 if(BIT_5(word2))
  7364.                         width = REG_D[width&7];
  7365.  
  7366.  
  7367.                 offset &= 31;
  7368.                 width = ((width-1) & 31) + 1;
  7369.  
  7370.  
  7371.                 mask = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
  7372.                 mask = ROR_32(mask, offset);
  7373.  
  7374.                 FLAG_N = NFLAG_32(*data<<offset);
  7375.                 FLAG_Z = *data & mask;
  7376.                 FLAG_V = VFLAG_CLEAR;
  7377.                 FLAG_C = CFLAG_CLEAR;
  7378.  
  7379.                 *data |= mask;
  7380.  
  7381.                 return;
  7382.         }
  7383.         m68ki_exception_illegal();
  7384. }
  7385.  
  7386.  
  7387. void m68k_op_bfset_32_ai(void)
  7388. {
  7389.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  7390.         {
  7391.                 uint word2 = OPER_I_16();
  7392.                 sint offset = (word2>>6)&31;
  7393.                 uint width = word2;
  7394.                 uint mask_base;
  7395.                 uint data_long;
  7396.                 uint mask_long;
  7397.                 uint data_byte = 0;
  7398.                 uint mask_byte = 0;
  7399.                 uint ea = EA_AY_AI_8();
  7400.  
  7401.  
  7402.                 if(BIT_B(word2))
  7403.                         offset = MAKE_INT_32(REG_D[offset&7]);
  7404.                 if(BIT_5(word2))
  7405.                         width = REG_D[width&7];
  7406.  
  7407.                 /* Offset is signed so we have to use ugly math =( */
  7408.                 ea += offset / 8;
  7409.                 offset %= 8;
  7410.                 if(offset < 0)
  7411.                 {
  7412.                         offset += 8;
  7413.                         ea--;
  7414.                 }
  7415.                 width = ((width-1) & 31) + 1;
  7416.  
  7417.  
  7418.                 mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
  7419.                 mask_long = mask_base >> offset;
  7420.  
  7421.                 data_long = m68ki_read_32(ea);
  7422.                 FLAG_N = NFLAG_32(data_long << offset);
  7423.                 FLAG_Z = data_long & mask_long;
  7424.                 FLAG_V = VFLAG_CLEAR;
  7425.                 FLAG_C = CFLAG_CLEAR;
  7426.  
  7427.                 m68ki_write_32(ea, data_long | mask_long);
  7428.  
  7429.                 if((width + offset) > 32)
  7430.                 {
  7431.                         mask_byte = MASK_OUT_ABOVE_8(mask_base);
  7432.                         data_byte = m68ki_read_8(ea+4);
  7433.                         FLAG_Z |= (data_byte & mask_byte);
  7434.                         m68ki_write_8(ea+4, data_byte | mask_byte);
  7435.                 }
  7436.                 return;
  7437.         }
  7438.         m68ki_exception_illegal();
  7439. }
  7440.  
  7441.  
  7442. void m68k_op_bfset_32_di(void)
  7443. {
  7444.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  7445.         {
  7446.                 uint word2 = OPER_I_16();
  7447.                 sint offset = (word2>>6)&31;
  7448.                 uint width = word2;
  7449.                 uint mask_base;
  7450.                 uint data_long;
  7451.                 uint mask_long;
  7452.                 uint data_byte = 0;
  7453.                 uint mask_byte = 0;
  7454.                 uint ea = EA_AY_DI_8();
  7455.  
  7456.  
  7457.                 if(BIT_B(word2))
  7458.                         offset = MAKE_INT_32(REG_D[offset&7]);
  7459.                 if(BIT_5(word2))
  7460.                         width = REG_D[width&7];
  7461.  
  7462.                 /* Offset is signed so we have to use ugly math =( */
  7463.                 ea += offset / 8;
  7464.                 offset %= 8;
  7465.                 if(offset < 0)
  7466.                 {
  7467.                         offset += 8;
  7468.                         ea--;
  7469.                 }
  7470.                 width = ((width-1) & 31) + 1;
  7471.  
  7472.  
  7473.                 mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
  7474.                 mask_long = mask_base >> offset;
  7475.  
  7476.                 data_long = m68ki_read_32(ea);
  7477.                 FLAG_N = NFLAG_32(data_long << offset);
  7478.                 FLAG_Z = data_long & mask_long;
  7479.                 FLAG_V = VFLAG_CLEAR;
  7480.                 FLAG_C = CFLAG_CLEAR;
  7481.  
  7482.                 m68ki_write_32(ea, data_long | mask_long);
  7483.  
  7484.                 if((width + offset) > 32)
  7485.                 {
  7486.                         mask_byte = MASK_OUT_ABOVE_8(mask_base);
  7487.                         data_byte = m68ki_read_8(ea+4);
  7488.                         FLAG_Z |= (data_byte & mask_byte);
  7489.                         m68ki_write_8(ea+4, data_byte | mask_byte);
  7490.                 }
  7491.                 return;
  7492.         }
  7493.         m68ki_exception_illegal();
  7494. }
  7495.  
  7496.  
  7497. void m68k_op_bfset_32_ix(void)
  7498. {
  7499.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  7500.         {
  7501.                 uint word2 = OPER_I_16();
  7502.                 sint offset = (word2>>6)&31;
  7503.                 uint width = word2;
  7504.                 uint mask_base;
  7505.                 uint data_long;
  7506.                 uint mask_long;
  7507.                 uint data_byte = 0;
  7508.                 uint mask_byte = 0;
  7509.                 uint ea = EA_AY_IX_8();
  7510.  
  7511.  
  7512.                 if(BIT_B(word2))
  7513.                         offset = MAKE_INT_32(REG_D[offset&7]);
  7514.                 if(BIT_5(word2))
  7515.                         width = REG_D[width&7];
  7516.  
  7517.                 /* Offset is signed so we have to use ugly math =( */
  7518.                 ea += offset / 8;
  7519.                 offset %= 8;
  7520.                 if(offset < 0)
  7521.                 {
  7522.                         offset += 8;
  7523.                         ea--;
  7524.                 }
  7525.                 width = ((width-1) & 31) + 1;
  7526.  
  7527.  
  7528.                 mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
  7529.                 mask_long = mask_base >> offset;
  7530.  
  7531.                 data_long = m68ki_read_32(ea);
  7532.                 FLAG_N = NFLAG_32(data_long << offset);
  7533.                 FLAG_Z = data_long & mask_long;
  7534.                 FLAG_V = VFLAG_CLEAR;
  7535.                 FLAG_C = CFLAG_CLEAR;
  7536.  
  7537.                 m68ki_write_32(ea, data_long | mask_long);
  7538.  
  7539.                 if((width + offset) > 32)
  7540.                 {
  7541.                         mask_byte = MASK_OUT_ABOVE_8(mask_base);
  7542.                         data_byte = m68ki_read_8(ea+4);
  7543.                         FLAG_Z |= (data_byte & mask_byte);
  7544.                         m68ki_write_8(ea+4, data_byte | mask_byte);
  7545.                 }
  7546.                 return;
  7547.         }
  7548.         m68ki_exception_illegal();
  7549. }
  7550.  
  7551.  
  7552. void m68k_op_bfset_32_aw(void)
  7553. {
  7554.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  7555.         {
  7556.                 uint word2 = OPER_I_16();
  7557.                 sint offset = (word2>>6)&31;
  7558.                 uint width = word2;
  7559.                 uint mask_base;
  7560.                 uint data_long;
  7561.                 uint mask_long;
  7562.                 uint data_byte = 0;
  7563.                 uint mask_byte = 0;
  7564.                 uint ea = EA_AW_8();
  7565.  
  7566.  
  7567.                 if(BIT_B(word2))
  7568.                         offset = MAKE_INT_32(REG_D[offset&7]);
  7569.                 if(BIT_5(word2))
  7570.                         width = REG_D[width&7];
  7571.  
  7572.                 /* Offset is signed so we have to use ugly math =( */
  7573.                 ea += offset / 8;
  7574.                 offset %= 8;
  7575.                 if(offset < 0)
  7576.                 {
  7577.                         offset += 8;
  7578.                         ea--;
  7579.                 }
  7580.                 width = ((width-1) & 31) + 1;
  7581.  
  7582.  
  7583.                 mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
  7584.                 mask_long = mask_base >> offset;
  7585.  
  7586.                 data_long = m68ki_read_32(ea);
  7587.                 FLAG_N = NFLAG_32(data_long << offset);
  7588.                 FLAG_Z = data_long & mask_long;
  7589.                 FLAG_V = VFLAG_CLEAR;
  7590.                 FLAG_C = CFLAG_CLEAR;
  7591.  
  7592.                 m68ki_write_32(ea, data_long | mask_long);
  7593.  
  7594.                 if((width + offset) > 32)
  7595.                 {
  7596.                         mask_byte = MASK_OUT_ABOVE_8(mask_base);
  7597.                         data_byte = m68ki_read_8(ea+4);
  7598.                         FLAG_Z |= (data_byte & mask_byte);
  7599.                         m68ki_write_8(ea+4, data_byte | mask_byte);
  7600.                 }
  7601.                 return;
  7602.         }
  7603.         m68ki_exception_illegal();
  7604. }
  7605.  
  7606.  
  7607. void m68k_op_bfset_32_al(void)
  7608. {
  7609.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  7610.         {
  7611.                 uint word2 = OPER_I_16();
  7612.                 sint offset = (word2>>6)&31;
  7613.                 uint width = word2;
  7614.                 uint mask_base;
  7615.                 uint data_long;
  7616.                 uint mask_long;
  7617.                 uint data_byte = 0;
  7618.                 uint mask_byte = 0;
  7619.                 uint ea = EA_AL_8();
  7620.  
  7621.  
  7622.                 if(BIT_B(word2))
  7623.                         offset = MAKE_INT_32(REG_D[offset&7]);
  7624.                 if(BIT_5(word2))
  7625.                         width = REG_D[width&7];
  7626.  
  7627.                 /* Offset is signed so we have to use ugly math =( */
  7628.                 ea += offset / 8;
  7629.                 offset %= 8;
  7630.                 if(offset < 0)
  7631.                 {
  7632.                         offset += 8;
  7633.                         ea--;
  7634.                 }
  7635.                 width = ((width-1) & 31) + 1;
  7636.  
  7637.  
  7638.                 mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
  7639.                 mask_long = mask_base >> offset;
  7640.  
  7641.                 data_long = m68ki_read_32(ea);
  7642.                 FLAG_N = NFLAG_32(data_long << offset);
  7643.                 FLAG_Z = data_long & mask_long;
  7644.                 FLAG_V = VFLAG_CLEAR;
  7645.                 FLAG_C = CFLAG_CLEAR;
  7646.  
  7647.                 m68ki_write_32(ea, data_long | mask_long);
  7648.  
  7649.                 if((width + offset) > 32)
  7650.                 {
  7651.                         mask_byte = MASK_OUT_ABOVE_8(mask_base);
  7652.                         data_byte = m68ki_read_8(ea+4);
  7653.                         FLAG_Z |= (data_byte & mask_byte);
  7654.                         m68ki_write_8(ea+4, data_byte | mask_byte);
  7655.                 }
  7656.                 return;
  7657.         }
  7658.         m68ki_exception_illegal();
  7659. }
  7660.  
  7661.  
  7662. void m68k_op_bftst_32_d(void)
  7663. {
  7664.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  7665.         {
  7666.                 uint word2 = OPER_I_16();
  7667.                 uint offset = (word2>>6)&31;
  7668.                 uint width = word2;
  7669.                 uint* data = &DY;
  7670.                 uint64 mask;
  7671.  
  7672.  
  7673.                 if(BIT_B(word2))
  7674.                         offset = REG_D[offset&7];
  7675.                 if(BIT_5(word2))
  7676.                         width = REG_D[width&7];
  7677.  
  7678.  
  7679.                 offset &= 31;
  7680.                 width = ((width-1) & 31) + 1;
  7681.  
  7682.  
  7683.                 mask = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
  7684.                 mask = ROR_32(mask, offset);
  7685.  
  7686.                 FLAG_N = NFLAG_32(*data<<offset);
  7687.                 FLAG_Z = *data & mask;
  7688.                 FLAG_V = VFLAG_CLEAR;
  7689.                 FLAG_C = CFLAG_CLEAR;
  7690.  
  7691.                 return;
  7692.         }
  7693.         m68ki_exception_illegal();
  7694. }
  7695.  
  7696.  
  7697. void m68k_op_bftst_32_ai(void)
  7698. {
  7699.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  7700.         {
  7701.                 uint word2 = OPER_I_16();
  7702.                 sint offset = (word2>>6)&31;
  7703.                 uint width = word2;
  7704.                 uint mask_base;
  7705.                 uint data_long;
  7706.                 uint mask_long;
  7707.                 uint data_byte = 0;
  7708.                 uint mask_byte = 0;
  7709.                 uint ea = EA_AY_AI_8();
  7710.  
  7711.                 if(BIT_B(word2))
  7712.                         offset = MAKE_INT_32(REG_D[offset&7]);
  7713.                 if(BIT_5(word2))
  7714.                         width = REG_D[width&7];
  7715.  
  7716.                 /* Offset is signed so we have to use ugly math =( */
  7717.                 ea += offset / 8;
  7718.                 offset %= 8;
  7719.                 if(offset < 0)
  7720.                 {
  7721.                         offset += 8;
  7722.                         ea--;
  7723.                 }
  7724.                 width = ((width-1) & 31) + 1;
  7725.  
  7726.  
  7727.                 mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
  7728.                 mask_long = mask_base >> offset;
  7729.  
  7730.                 data_long = m68ki_read_32(ea);
  7731.                 FLAG_N = ((data_long & (0x80000000 >> offset))<<offset)>>24;
  7732.                 FLAG_Z = data_long & mask_long;
  7733.                 FLAG_V = VFLAG_CLEAR;
  7734.                 FLAG_C = CFLAG_CLEAR;
  7735.  
  7736.                 if((width + offset) > 32)
  7737.                 {
  7738.                         mask_byte = MASK_OUT_ABOVE_8(mask_base);
  7739.                         data_byte = m68ki_read_8(ea+4);
  7740.                         FLAG_Z |= (data_byte & mask_byte);
  7741.                 }
  7742.                 return;
  7743.         }
  7744.         m68ki_exception_illegal();
  7745. }
  7746.  
  7747.  
  7748. void m68k_op_bftst_32_di(void)
  7749. {
  7750.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  7751.         {
  7752.                 uint word2 = OPER_I_16();
  7753.                 sint offset = (word2>>6)&31;
  7754.                 uint width = word2;
  7755.                 uint mask_base;
  7756.                 uint data_long;
  7757.                 uint mask_long;
  7758.                 uint data_byte = 0;
  7759.                 uint mask_byte = 0;
  7760.                 uint ea = EA_AY_DI_8();
  7761.  
  7762.                 if(BIT_B(word2))
  7763.                         offset = MAKE_INT_32(REG_D[offset&7]);
  7764.                 if(BIT_5(word2))
  7765.                         width = REG_D[width&7];
  7766.  
  7767.                 /* Offset is signed so we have to use ugly math =( */
  7768.                 ea += offset / 8;
  7769.                 offset %= 8;
  7770.                 if(offset < 0)
  7771.                 {
  7772.                         offset += 8;
  7773.                         ea--;
  7774.                 }
  7775.                 width = ((width-1) & 31) + 1;
  7776.  
  7777.  
  7778.                 mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
  7779.                 mask_long = mask_base >> offset;
  7780.  
  7781.                 data_long = m68ki_read_32(ea);
  7782.                 FLAG_N = ((data_long & (0x80000000 >> offset))<<offset)>>24;
  7783.                 FLAG_Z = data_long & mask_long;
  7784.                 FLAG_V = VFLAG_CLEAR;
  7785.                 FLAG_C = CFLAG_CLEAR;
  7786.  
  7787.                 if((width + offset) > 32)
  7788.                 {
  7789.                         mask_byte = MASK_OUT_ABOVE_8(mask_base);
  7790.                         data_byte = m68ki_read_8(ea+4);
  7791.                         FLAG_Z |= (data_byte & mask_byte);
  7792.                 }
  7793.                 return;
  7794.         }
  7795.         m68ki_exception_illegal();
  7796. }
  7797.  
  7798.  
  7799. void m68k_op_bftst_32_ix(void)
  7800. {
  7801.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  7802.         {
  7803.                 uint word2 = OPER_I_16();
  7804.                 sint offset = (word2>>6)&31;
  7805.                 uint width = word2;
  7806.                 uint mask_base;
  7807.                 uint data_long;
  7808.                 uint mask_long;
  7809.                 uint data_byte = 0;
  7810.                 uint mask_byte = 0;
  7811.                 uint ea = EA_AY_IX_8();
  7812.  
  7813.                 if(BIT_B(word2))
  7814.                         offset = MAKE_INT_32(REG_D[offset&7]);
  7815.                 if(BIT_5(word2))
  7816.                         width = REG_D[width&7];
  7817.  
  7818.                 /* Offset is signed so we have to use ugly math =( */
  7819.                 ea += offset / 8;
  7820.                 offset %= 8;
  7821.                 if(offset < 0)
  7822.                 {
  7823.                         offset += 8;
  7824.                         ea--;
  7825.                 }
  7826.                 width = ((width-1) & 31) + 1;
  7827.  
  7828.  
  7829.                 mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
  7830.                 mask_long = mask_base >> offset;
  7831.  
  7832.                 data_long = m68ki_read_32(ea);
  7833.                 FLAG_N = ((data_long & (0x80000000 >> offset))<<offset)>>24;
  7834.                 FLAG_Z = data_long & mask_long;
  7835.                 FLAG_V = VFLAG_CLEAR;
  7836.                 FLAG_C = CFLAG_CLEAR;
  7837.  
  7838.                 if((width + offset) > 32)
  7839.                 {
  7840.                         mask_byte = MASK_OUT_ABOVE_8(mask_base);
  7841.                         data_byte = m68ki_read_8(ea+4);
  7842.                         FLAG_Z |= (data_byte & mask_byte);
  7843.                 }
  7844.                 return;
  7845.         }
  7846.         m68ki_exception_illegal();
  7847. }
  7848.  
  7849.  
  7850. void m68k_op_bftst_32_aw(void)
  7851. {
  7852.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  7853.         {
  7854.                 uint word2 = OPER_I_16();
  7855.                 sint offset = (word2>>6)&31;
  7856.                 uint width = word2;
  7857.                 uint mask_base;
  7858.                 uint data_long;
  7859.                 uint mask_long;
  7860.                 uint data_byte = 0;
  7861.                 uint mask_byte = 0;
  7862.                 uint ea = EA_AW_8();
  7863.  
  7864.                 if(BIT_B(word2))
  7865.                         offset = MAKE_INT_32(REG_D[offset&7]);
  7866.                 if(BIT_5(word2))
  7867.                         width = REG_D[width&7];
  7868.  
  7869.                 /* Offset is signed so we have to use ugly math =( */
  7870.                 ea += offset / 8;
  7871.                 offset %= 8;
  7872.                 if(offset < 0)
  7873.                 {
  7874.                         offset += 8;
  7875.                         ea--;
  7876.                 }
  7877.                 width = ((width-1) & 31) + 1;
  7878.  
  7879.  
  7880.                 mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
  7881.                 mask_long = mask_base >> offset;
  7882.  
  7883.                 data_long = m68ki_read_32(ea);
  7884.                 FLAG_N = ((data_long & (0x80000000 >> offset))<<offset)>>24;
  7885.                 FLAG_Z = data_long & mask_long;
  7886.                 FLAG_V = VFLAG_CLEAR;
  7887.                 FLAG_C = CFLAG_CLEAR;
  7888.  
  7889.                 if((width + offset) > 32)
  7890.                 {
  7891.                         mask_byte = MASK_OUT_ABOVE_8(mask_base);
  7892.                         data_byte = m68ki_read_8(ea+4);
  7893.                         FLAG_Z |= (data_byte & mask_byte);
  7894.                 }
  7895.                 return;
  7896.         }
  7897.         m68ki_exception_illegal();
  7898. }
  7899.  
  7900.  
  7901. void m68k_op_bftst_32_al(void)
  7902. {
  7903.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  7904.         {
  7905.                 uint word2 = OPER_I_16();
  7906.                 sint offset = (word2>>6)&31;
  7907.                 uint width = word2;
  7908.                 uint mask_base;
  7909.                 uint data_long;
  7910.                 uint mask_long;
  7911.                 uint data_byte = 0;
  7912.                 uint mask_byte = 0;
  7913.                 uint ea = EA_AL_8();
  7914.  
  7915.                 if(BIT_B(word2))
  7916.                         offset = MAKE_INT_32(REG_D[offset&7]);
  7917.                 if(BIT_5(word2))
  7918.                         width = REG_D[width&7];
  7919.  
  7920.                 /* Offset is signed so we have to use ugly math =( */
  7921.                 ea += offset / 8;
  7922.                 offset %= 8;
  7923.                 if(offset < 0)
  7924.                 {
  7925.                         offset += 8;
  7926.                         ea--;
  7927.                 }
  7928.                 width = ((width-1) & 31) + 1;
  7929.  
  7930.  
  7931.                 mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
  7932.                 mask_long = mask_base >> offset;
  7933.  
  7934.                 data_long = m68ki_read_32(ea);
  7935.                 FLAG_N = ((data_long & (0x80000000 >> offset))<<offset)>>24;
  7936.                 FLAG_Z = data_long & mask_long;
  7937.                 FLAG_V = VFLAG_CLEAR;
  7938.                 FLAG_C = CFLAG_CLEAR;
  7939.  
  7940.                 if((width + offset) > 32)
  7941.                 {
  7942.                         mask_byte = MASK_OUT_ABOVE_8(mask_base);
  7943.                         data_byte = m68ki_read_8(ea+4);
  7944.                         FLAG_Z |= (data_byte & mask_byte);
  7945.                 }
  7946.                 return;
  7947.         }
  7948.         m68ki_exception_illegal();
  7949. }
  7950.  
  7951.  
  7952. void m68k_op_bftst_32_pcdi(void)
  7953. {
  7954.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  7955.         {
  7956.                 uint word2 = OPER_I_16();
  7957.                 sint offset = (word2>>6)&31;
  7958.                 uint width = word2;
  7959.                 uint mask_base;
  7960.                 uint data_long;
  7961.                 uint mask_long;
  7962.                 uint data_byte = 0;
  7963.                 uint mask_byte = 0;
  7964.                 uint ea = EA_PCDI_8();
  7965.  
  7966.                 if(BIT_B(word2))
  7967.                         offset = MAKE_INT_32(REG_D[offset&7]);
  7968.                 if(BIT_5(word2))
  7969.                         width = REG_D[width&7];
  7970.  
  7971.                 /* Offset is signed so we have to use ugly math =( */
  7972.                 ea += offset / 8;
  7973.                 offset %= 8;
  7974.                 if(offset < 0)
  7975.                 {
  7976.                         offset += 8;
  7977.                         ea--;
  7978.                 }
  7979.                 width = ((width-1) & 31) + 1;
  7980.  
  7981.  
  7982.                 mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
  7983.                 mask_long = mask_base >> offset;
  7984.  
  7985.                 data_long = m68ki_read_32(ea);
  7986.                 FLAG_N = ((data_long & (0x80000000 >> offset))<<offset)>>24;
  7987.                 FLAG_Z = data_long & mask_long;
  7988.                 FLAG_V = VFLAG_CLEAR;
  7989.                 FLAG_C = CFLAG_CLEAR;
  7990.  
  7991.                 if((width + offset) > 32)
  7992.                 {
  7993.                         mask_byte = MASK_OUT_ABOVE_8(mask_base);
  7994.                         data_byte = m68ki_read_8(ea+4);
  7995.                         FLAG_Z |= (data_byte & mask_byte);
  7996.                 }
  7997.                 return;
  7998.         }
  7999.         m68ki_exception_illegal();
  8000. }
  8001.  
  8002.  
  8003. void m68k_op_bftst_32_pcix(void)
  8004. {
  8005.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  8006.         {
  8007.                 uint word2 = OPER_I_16();
  8008.                 sint offset = (word2>>6)&31;
  8009.                 uint width = word2;
  8010.                 uint mask_base;
  8011.                 uint data_long;
  8012.                 uint mask_long;
  8013.                 uint data_byte = 0;
  8014.                 uint mask_byte = 0;
  8015.                 uint ea = EA_PCIX_8();
  8016.  
  8017.                 if(BIT_B(word2))
  8018.                         offset = MAKE_INT_32(REG_D[offset&7]);
  8019.                 if(BIT_5(word2))
  8020.                         width = REG_D[width&7];
  8021.  
  8022.                 /* Offset is signed so we have to use ugly math =( */
  8023.                 ea += offset / 8;
  8024.                 offset %= 8;
  8025.                 if(offset < 0)
  8026.                 {
  8027.                         offset += 8;
  8028.                         ea--;
  8029.                 }
  8030.                 width = ((width-1) & 31) + 1;
  8031.  
  8032.  
  8033.                 mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width));
  8034.                 mask_long = mask_base >> offset;
  8035.  
  8036.                 data_long = m68ki_read_32(ea);
  8037.                 FLAG_N = ((data_long & (0x80000000 >> offset))<<offset)>>24;
  8038.                 FLAG_Z = data_long & mask_long;
  8039.                 FLAG_V = VFLAG_CLEAR;
  8040.                 FLAG_C = CFLAG_CLEAR;
  8041.  
  8042.                 if((width + offset) > 32)
  8043.                 {
  8044.                         mask_byte = MASK_OUT_ABOVE_8(mask_base);
  8045.                         data_byte = m68ki_read_8(ea+4);
  8046.                         FLAG_Z |= (data_byte & mask_byte);
  8047.                 }
  8048.                 return;
  8049.         }
  8050.         m68ki_exception_illegal();
  8051. }
  8052.  
  8053.  
  8054. void m68k_op_bkpt(void)
  8055. {
  8056.         if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
  8057.         {
  8058.                 m68ki_bkpt_ack(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE) ? REG_IR & 7 : 0);      /* auto-disable (see m68kcpu.h) */
  8059.         }
  8060.         m68ki_exception_illegal();
  8061. }
  8062.  
  8063.  
  8064. void m68k_op_bra_8(void)
  8065. {
  8066.         m68ki_trace_t0();                                  /* auto-disable (see m68kcpu.h) */
  8067.         m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR));
  8068.         if(REG_PC == REG_PPC)
  8069.                 USE_ALL_CYCLES();
  8070. }
  8071.  
  8072.  
  8073. void m68k_op_bra_16(void)
  8074. {
  8075.         uint offset = OPER_I_16();
  8076.         REG_PC -= 2;
  8077.         m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  8078.         m68ki_branch_16(offset);
  8079.         if(REG_PC == REG_PPC)
  8080.                 USE_ALL_CYCLES();
  8081. }
  8082.  
  8083.  
  8084. void m68k_op_bra_32(void)
  8085. {
  8086.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  8087.         {
  8088.                 uint offset = OPER_I_32();
  8089.                 REG_PC -= 4;
  8090.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  8091.                 m68ki_branch_32(offset);
  8092.                 if(REG_PC == REG_PPC)
  8093.                         USE_ALL_CYCLES();
  8094.                 return;
  8095.         }
  8096.         else
  8097.         {
  8098.                 m68ki_trace_t0();                                  /* auto-disable (see m68kcpu.h) */
  8099.                 m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR));
  8100.                 if(REG_PC == REG_PPC)
  8101.                         USE_ALL_CYCLES();
  8102.         }
  8103. }
  8104.  
  8105.  
  8106. void m68k_op_bset_32_r_d(void)
  8107. {
  8108.         uint* r_dst = &DY;
  8109.         uint mask = 1 << (DX & 0x1f);
  8110.  
  8111.         FLAG_Z = *r_dst & mask;
  8112.         *r_dst |= mask;
  8113. }
  8114.  
  8115.  
  8116. void m68k_op_bset_8_r_ai(void)
  8117. {
  8118.         uint ea = EA_AY_AI_8();
  8119.         uint src = m68ki_read_8(ea);
  8120.         uint mask = 1 << (DX & 7);
  8121.  
  8122.         FLAG_Z = src & mask;
  8123.         m68ki_write_8(ea, src | mask);
  8124. }
  8125.  
  8126.  
  8127. void m68k_op_bset_8_r_pi(void)
  8128. {
  8129.         uint ea = EA_AY_PI_8();
  8130.         uint src = m68ki_read_8(ea);
  8131.         uint mask = 1 << (DX & 7);
  8132.  
  8133.         FLAG_Z = src & mask;
  8134.         m68ki_write_8(ea, src | mask);
  8135. }
  8136.  
  8137.  
  8138. void m68k_op_bset_8_r_pi7(void)
  8139. {
  8140.         uint ea = EA_A7_PI_8();
  8141.         uint src = m68ki_read_8(ea);
  8142.         uint mask = 1 << (DX & 7);
  8143.  
  8144.         FLAG_Z = src & mask;
  8145.         m68ki_write_8(ea, src | mask);
  8146. }
  8147.  
  8148.  
  8149. void m68k_op_bset_8_r_pd(void)
  8150. {
  8151.         uint ea = EA_AY_PD_8();
  8152.         uint src = m68ki_read_8(ea);
  8153.         uint mask = 1 << (DX & 7);
  8154.  
  8155.         FLAG_Z = src & mask;
  8156.         m68ki_write_8(ea, src | mask);
  8157. }
  8158.  
  8159.  
  8160. void m68k_op_bset_8_r_pd7(void)
  8161. {
  8162.         uint ea = EA_A7_PD_8();
  8163.         uint src = m68ki_read_8(ea);
  8164.         uint mask = 1 << (DX & 7);
  8165.  
  8166.         FLAG_Z = src & mask;
  8167.         m68ki_write_8(ea, src | mask);
  8168. }
  8169.  
  8170.  
  8171. void m68k_op_bset_8_r_di(void)
  8172. {
  8173.         uint ea = EA_AY_DI_8();
  8174.         uint src = m68ki_read_8(ea);
  8175.         uint mask = 1 << (DX & 7);
  8176.  
  8177.         FLAG_Z = src & mask;
  8178.         m68ki_write_8(ea, src | mask);
  8179. }
  8180.  
  8181.  
  8182. void m68k_op_bset_8_r_ix(void)
  8183. {
  8184.         uint ea = EA_AY_IX_8();
  8185.         uint src = m68ki_read_8(ea);
  8186.         uint mask = 1 << (DX & 7);
  8187.  
  8188.         FLAG_Z = src & mask;
  8189.         m68ki_write_8(ea, src | mask);
  8190. }
  8191.  
  8192.  
  8193. void m68k_op_bset_8_r_aw(void)
  8194. {
  8195.         uint ea = EA_AW_8();
  8196.         uint src = m68ki_read_8(ea);
  8197.         uint mask = 1 << (DX & 7);
  8198.  
  8199.         FLAG_Z = src & mask;
  8200.         m68ki_write_8(ea, src | mask);
  8201. }
  8202.  
  8203.  
  8204. void m68k_op_bset_8_r_al(void)
  8205. {
  8206.         uint ea = EA_AL_8();
  8207.         uint src = m68ki_read_8(ea);
  8208.         uint mask = 1 << (DX & 7);
  8209.  
  8210.         FLAG_Z = src & mask;
  8211.         m68ki_write_8(ea, src | mask);
  8212. }
  8213.  
  8214.  
  8215. void m68k_op_bset_32_s_d(void)
  8216. {
  8217.         uint* r_dst = &DY;
  8218.         uint mask = 1 << (OPER_I_8() & 0x1f);
  8219.  
  8220.         FLAG_Z = *r_dst & mask;
  8221.         *r_dst |= mask;
  8222. }
  8223.  
  8224.  
  8225. void m68k_op_bset_8_s_ai(void)
  8226. {
  8227.         uint mask = 1 << (OPER_I_8() & 7);
  8228.         uint ea = EA_AY_AI_8();
  8229.         uint src = m68ki_read_8(ea);
  8230.  
  8231.         FLAG_Z = src & mask;
  8232.         m68ki_write_8(ea, src | mask);
  8233. }
  8234.  
  8235.  
  8236. void m68k_op_bset_8_s_pi(void)
  8237. {
  8238.         uint mask = 1 << (OPER_I_8() & 7);
  8239.         uint ea = EA_AY_PI_8();
  8240.         uint src = m68ki_read_8(ea);
  8241.  
  8242.         FLAG_Z = src & mask;
  8243.         m68ki_write_8(ea, src | mask);
  8244. }
  8245.  
  8246.  
  8247. void m68k_op_bset_8_s_pi7(void)
  8248. {
  8249.         uint mask = 1 << (OPER_I_8() & 7);
  8250.         uint ea = EA_A7_PI_8();
  8251.         uint src = m68ki_read_8(ea);
  8252.  
  8253.         FLAG_Z = src & mask;
  8254.         m68ki_write_8(ea, src | mask);
  8255. }
  8256.  
  8257.  
  8258. void m68k_op_bset_8_s_pd(void)
  8259. {
  8260.         uint mask = 1 << (OPER_I_8() & 7);
  8261.         uint ea = EA_AY_PD_8();
  8262.         uint src = m68ki_read_8(ea);
  8263.  
  8264.         FLAG_Z = src & mask;
  8265.         m68ki_write_8(ea, src | mask);
  8266. }
  8267.  
  8268.  
  8269. void m68k_op_bset_8_s_pd7(void)
  8270. {
  8271.         uint mask = 1 << (OPER_I_8() & 7);
  8272.         uint ea = EA_A7_PD_8();
  8273.         uint src = m68ki_read_8(ea);
  8274.  
  8275.         FLAG_Z = src & mask;
  8276.         m68ki_write_8(ea, src | mask);
  8277. }
  8278.  
  8279.  
  8280. void m68k_op_bset_8_s_di(void)
  8281. {
  8282.         uint mask = 1 << (OPER_I_8() & 7);
  8283.         uint ea = EA_AY_DI_8();
  8284.         uint src = m68ki_read_8(ea);
  8285.  
  8286.         FLAG_Z = src & mask;
  8287.         m68ki_write_8(ea, src | mask);
  8288. }
  8289.  
  8290.  
  8291. void m68k_op_bset_8_s_ix(void)
  8292. {
  8293.         uint mask = 1 << (OPER_I_8() & 7);
  8294.         uint ea = EA_AY_IX_8();
  8295.         uint src = m68ki_read_8(ea);
  8296.  
  8297.         FLAG_Z = src & mask;
  8298.         m68ki_write_8(ea, src | mask);
  8299. }
  8300.  
  8301.  
  8302. void m68k_op_bset_8_s_aw(void)
  8303. {
  8304.         uint mask = 1 << (OPER_I_8() & 7);
  8305.         uint ea = EA_AW_8();
  8306.         uint src = m68ki_read_8(ea);
  8307.  
  8308.         FLAG_Z = src & mask;
  8309.         m68ki_write_8(ea, src | mask);
  8310. }
  8311.  
  8312.  
  8313. void m68k_op_bset_8_s_al(void)
  8314. {
  8315.         uint mask = 1 << (OPER_I_8() & 7);
  8316.         uint ea = EA_AL_8();
  8317.         uint src = m68ki_read_8(ea);
  8318.  
  8319.         FLAG_Z = src & mask;
  8320.         m68ki_write_8(ea, src | mask);
  8321. }
  8322.  
  8323.  
  8324. void m68k_op_bsr_8(void)
  8325. {
  8326.         m68ki_trace_t0();                                  /* auto-disable (see m68kcpu.h) */
  8327.         m68ki_push_32(REG_PC);
  8328.         m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR));
  8329. }
  8330.  
  8331.  
  8332. void m68k_op_bsr_16(void)
  8333. {
  8334.         uint offset = OPER_I_16();
  8335.         m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  8336.         m68ki_push_32(REG_PC);
  8337.         REG_PC -= 2;
  8338.         m68ki_branch_16(offset);
  8339. }
  8340.  
  8341.  
  8342. void m68k_op_bsr_32(void)
  8343. {
  8344.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  8345.         {
  8346.                 uint offset = OPER_I_32();
  8347.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  8348.                 m68ki_push_32(REG_PC);
  8349.                 REG_PC -= 4;
  8350.                 m68ki_branch_32(offset);
  8351.                 return;
  8352.         }
  8353.         else
  8354.         {
  8355.                 m68ki_trace_t0();                                  /* auto-disable (see m68kcpu.h) */
  8356.                 m68ki_push_32(REG_PC);
  8357.                 m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR));
  8358.         }
  8359. }
  8360.  
  8361.  
  8362. void m68k_op_btst_32_r_d(void)
  8363. {
  8364.         FLAG_Z = DY & (1 << (DX & 0x1f));
  8365. }
  8366.  
  8367.  
  8368. void m68k_op_btst_8_r_ai(void)
  8369. {
  8370.         FLAG_Z = OPER_AY_AI_8() & (1 << (DX & 7));
  8371. }
  8372.  
  8373.  
  8374. void m68k_op_btst_8_r_pi(void)
  8375. {
  8376.         FLAG_Z = OPER_AY_PI_8() & (1 << (DX & 7));
  8377. }
  8378.  
  8379.  
  8380. void m68k_op_btst_8_r_pi7(void)
  8381. {
  8382.         FLAG_Z = OPER_A7_PI_8() & (1 << (DX & 7));
  8383. }
  8384.  
  8385.  
  8386. void m68k_op_btst_8_r_pd(void)
  8387. {
  8388.         FLAG_Z = OPER_AY_PD_8() & (1 << (DX & 7));
  8389. }
  8390.  
  8391.  
  8392. void m68k_op_btst_8_r_pd7(void)
  8393. {
  8394.         FLAG_Z = OPER_A7_PD_8() & (1 << (DX & 7));
  8395. }
  8396.  
  8397.  
  8398. void m68k_op_btst_8_r_di(void)
  8399. {
  8400.         FLAG_Z = OPER_AY_DI_8() & (1 << (DX & 7));
  8401. }
  8402.  
  8403.  
  8404. void m68k_op_btst_8_r_ix(void)
  8405. {
  8406.         FLAG_Z = OPER_AY_IX_8() & (1 << (DX & 7));
  8407. }
  8408.  
  8409.  
  8410. void m68k_op_btst_8_r_aw(void)
  8411. {
  8412.         FLAG_Z = OPER_AW_8() & (1 << (DX & 7));
  8413. }
  8414.  
  8415.  
  8416. void m68k_op_btst_8_r_al(void)
  8417. {
  8418.         FLAG_Z = OPER_AL_8() & (1 << (DX & 7));
  8419. }
  8420.  
  8421.  
  8422. void m68k_op_btst_8_r_pcdi(void)
  8423. {
  8424.         FLAG_Z = OPER_PCDI_8() & (1 << (DX & 7));
  8425. }
  8426.  
  8427.  
  8428. void m68k_op_btst_8_r_pcix(void)
  8429. {
  8430.         FLAG_Z = OPER_PCIX_8() & (1 << (DX & 7));
  8431. }
  8432.  
  8433.  
  8434. void m68k_op_btst_8_r_i(void)
  8435. {
  8436.         FLAG_Z = OPER_I_8() & (1 << (DX & 7));
  8437. }
  8438.  
  8439.  
  8440. void m68k_op_btst_32_s_d(void)
  8441. {
  8442.         FLAG_Z = DY & (1 << (OPER_I_8() & 0x1f));
  8443. }
  8444.  
  8445.  
  8446. void m68k_op_btst_8_s_ai(void)
  8447. {
  8448.         uint bit = OPER_I_8() & 7;
  8449.  
  8450.         FLAG_Z = OPER_AY_AI_8() & (1 << bit);
  8451. }
  8452.  
  8453.  
  8454. void m68k_op_btst_8_s_pi(void)
  8455. {
  8456.         uint bit = OPER_I_8() & 7;
  8457.  
  8458.         FLAG_Z = OPER_AY_PI_8() & (1 << bit);
  8459. }
  8460.  
  8461.  
  8462. void m68k_op_btst_8_s_pi7(void)
  8463. {
  8464.         uint bit = OPER_I_8() & 7;
  8465.  
  8466.         FLAG_Z = OPER_A7_PI_8() & (1 << bit);
  8467. }
  8468.  
  8469.  
  8470. void m68k_op_btst_8_s_pd(void)
  8471. {
  8472.         uint bit = OPER_I_8() & 7;
  8473.  
  8474.         FLAG_Z = OPER_AY_PD_8() & (1 << bit);
  8475. }
  8476.  
  8477.  
  8478. void m68k_op_btst_8_s_pd7(void)
  8479. {
  8480.         uint bit = OPER_I_8() & 7;
  8481.  
  8482.         FLAG_Z = OPER_A7_PD_8() & (1 << bit);
  8483. }
  8484.  
  8485.  
  8486. void m68k_op_btst_8_s_di(void)
  8487. {
  8488.         uint bit = OPER_I_8() & 7;
  8489.  
  8490.         FLAG_Z = OPER_AY_DI_8() & (1 << bit);
  8491. }
  8492.  
  8493.  
  8494. void m68k_op_btst_8_s_ix(void)
  8495. {
  8496.         uint bit = OPER_I_8() & 7;
  8497.  
  8498.         FLAG_Z = OPER_AY_IX_8() & (1 << bit);
  8499. }
  8500.  
  8501.  
  8502. void m68k_op_btst_8_s_aw(void)
  8503. {
  8504.         uint bit = OPER_I_8() & 7;
  8505.  
  8506.         FLAG_Z = OPER_AW_8() & (1 << bit);
  8507. }
  8508.  
  8509.  
  8510. void m68k_op_btst_8_s_al(void)
  8511. {
  8512.         uint bit = OPER_I_8() & 7;
  8513.  
  8514.         FLAG_Z = OPER_AL_8() & (1 << bit);
  8515. }
  8516.  
  8517.  
  8518. void m68k_op_btst_8_s_pcdi(void)
  8519. {
  8520.         uint bit = OPER_I_8() & 7;
  8521.  
  8522.         FLAG_Z = OPER_PCDI_8() & (1 << bit);
  8523. }
  8524.  
  8525.  
  8526. void m68k_op_btst_8_s_pcix(void)
  8527. {
  8528.         uint bit = OPER_I_8() & 7;
  8529.  
  8530.         FLAG_Z = OPER_PCIX_8() & (1 << bit);
  8531. }
  8532.  
  8533.  
  8534. void m68k_op_callm_32_ai(void)
  8535. {
  8536.         /* note: watch out for pcrelative modes */
  8537.         if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
  8538.         {
  8539.                 uint ea = EA_AY_AI_32();
  8540.  
  8541.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  8542.                 REG_PC += 2;
  8543. (void)ea;       /* just to avoid an 'unused variable' warning */
  8544.                 M68K_DO_LOG((M68K_LOG_FILEHANDLE "%s at %08x: called unimplemented instruction %04x (%s)\n",
  8545.                                          m68ki_cpu_names[CPU_TYPE], ADDRESS_68K(REG_PC - 2), REG_IR,
  8546.                                          m68k_disassemble_quick(ADDRESS_68K(REG_PC - 2))));
  8547.                 return;
  8548.         }
  8549.         m68ki_exception_illegal();
  8550. }
  8551.  
  8552.  
  8553. void m68k_op_callm_32_di(void)
  8554. {
  8555.         /* note: watch out for pcrelative modes */
  8556.         if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
  8557.         {
  8558.                 uint ea = EA_AY_DI_32();
  8559.  
  8560.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  8561.                 REG_PC += 2;
  8562. (void)ea;       /* just to avoid an 'unused variable' warning */
  8563.                 M68K_DO_LOG((M68K_LOG_FILEHANDLE "%s at %08x: called unimplemented instruction %04x (%s)\n",
  8564.                                          m68ki_cpu_names[CPU_TYPE], ADDRESS_68K(REG_PC - 2), REG_IR,
  8565.                                          m68k_disassemble_quick(ADDRESS_68K(REG_PC - 2))));
  8566.                 return;
  8567.         }
  8568.         m68ki_exception_illegal();
  8569. }
  8570.  
  8571.  
  8572. void m68k_op_callm_32_ix(void)
  8573. {
  8574.         /* note: watch out for pcrelative modes */
  8575.         if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
  8576.         {
  8577.                 uint ea = EA_AY_IX_32();
  8578.  
  8579.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  8580.                 REG_PC += 2;
  8581. (void)ea;       /* just to avoid an 'unused variable' warning */
  8582.                 M68K_DO_LOG((M68K_LOG_FILEHANDLE "%s at %08x: called unimplemented instruction %04x (%s)\n",
  8583.                                          m68ki_cpu_names[CPU_TYPE], ADDRESS_68K(REG_PC - 2), REG_IR,
  8584.                                          m68k_disassemble_quick(ADDRESS_68K(REG_PC - 2))));
  8585.                 return;
  8586.         }
  8587.         m68ki_exception_illegal();
  8588. }
  8589.  
  8590.  
  8591. void m68k_op_callm_32_aw(void)
  8592. {
  8593.         /* note: watch out for pcrelative modes */
  8594.         if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
  8595.         {
  8596.                 uint ea = EA_AW_32();
  8597.  
  8598.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  8599.                 REG_PC += 2;
  8600. (void)ea;       /* just to avoid an 'unused variable' warning */
  8601.                 M68K_DO_LOG((M68K_LOG_FILEHANDLE "%s at %08x: called unimplemented instruction %04x (%s)\n",
  8602.                                          m68ki_cpu_names[CPU_TYPE], ADDRESS_68K(REG_PC - 2), REG_IR,
  8603.                                          m68k_disassemble_quick(ADDRESS_68K(REG_PC - 2))));
  8604.                 return;
  8605.         }
  8606.         m68ki_exception_illegal();
  8607. }
  8608.  
  8609.  
  8610. void m68k_op_callm_32_al(void)
  8611. {
  8612.         /* note: watch out for pcrelative modes */
  8613.         if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
  8614.         {
  8615.                 uint ea = EA_AL_32();
  8616.  
  8617.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  8618.                 REG_PC += 2;
  8619. (void)ea;       /* just to avoid an 'unused variable' warning */
  8620.                 M68K_DO_LOG((M68K_LOG_FILEHANDLE "%s at %08x: called unimplemented instruction %04x (%s)\n",
  8621.                                          m68ki_cpu_names[CPU_TYPE], ADDRESS_68K(REG_PC - 2), REG_IR,
  8622.                                          m68k_disassemble_quick(ADDRESS_68K(REG_PC - 2))));
  8623.                 return;
  8624.         }
  8625.         m68ki_exception_illegal();
  8626. }
  8627.  
  8628.  
  8629. void m68k_op_callm_32_pcdi(void)
  8630. {
  8631.         /* note: watch out for pcrelative modes */
  8632.         if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
  8633.         {
  8634.                 uint ea = EA_PCDI_32();
  8635.  
  8636.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  8637.                 REG_PC += 2;
  8638. (void)ea;       /* just to avoid an 'unused variable' warning */
  8639.                 M68K_DO_LOG((M68K_LOG_FILEHANDLE "%s at %08x: called unimplemented instruction %04x (%s)\n",
  8640.                                          m68ki_cpu_names[CPU_TYPE], ADDRESS_68K(REG_PC - 2), REG_IR,
  8641.                                          m68k_disassemble_quick(ADDRESS_68K(REG_PC - 2))));
  8642.                 return;
  8643.         }
  8644.         m68ki_exception_illegal();
  8645. }
  8646.  
  8647.  
  8648. void m68k_op_callm_32_pcix(void)
  8649. {
  8650.         /* note: watch out for pcrelative modes */
  8651.         if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
  8652.         {
  8653.                 uint ea = EA_PCIX_32();
  8654.  
  8655.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  8656.                 REG_PC += 2;
  8657. (void)ea;       /* just to avoid an 'unused variable' warning */
  8658.                 M68K_DO_LOG((M68K_LOG_FILEHANDLE "%s at %08x: called unimplemented instruction %04x (%s)\n",
  8659.                                          m68ki_cpu_names[CPU_TYPE], ADDRESS_68K(REG_PC - 2), REG_IR,
  8660.                                          m68k_disassemble_quick(ADDRESS_68K(REG_PC - 2))));
  8661.                 return;
  8662.         }
  8663.         m68ki_exception_illegal();
  8664. }
  8665.  
  8666.  
  8667. void m68k_op_cas_8_ai(void)
  8668. {
  8669.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  8670.         {
  8671.                 uint word2 = OPER_I_16();
  8672.                 uint ea = EA_AY_AI_8();
  8673.                 uint dest = m68ki_read_8(ea);
  8674.                 uint* compare = &REG_D[word2 & 7];
  8675.                 uint res = dest - MASK_OUT_ABOVE_8(*compare);
  8676.  
  8677.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  8678.                 FLAG_N = NFLAG_8(res);
  8679.                 FLAG_Z = MASK_OUT_ABOVE_8(res);
  8680.                 FLAG_V = VFLAG_SUB_8(*compare, dest, res);
  8681.                 FLAG_C = CFLAG_8(res);
  8682.  
  8683.                 if(COND_NE())
  8684.                         *compare = MASK_OUT_BELOW_8(*compare) | dest;
  8685.                 else
  8686.                 {
  8687.                         USE_CYCLES(3);
  8688.                         m68ki_write_8(ea, MASK_OUT_ABOVE_8(REG_D[(word2 >> 6) & 7]));
  8689.                 }
  8690.                 return;
  8691.         }
  8692.         m68ki_exception_illegal();
  8693. }
  8694.  
  8695.  
  8696. void m68k_op_cas_8_pi(void)
  8697. {
  8698.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  8699.         {
  8700.                 uint word2 = OPER_I_16();
  8701.                 uint ea = EA_AY_PI_8();
  8702.                 uint dest = m68ki_read_8(ea);
  8703.                 uint* compare = &REG_D[word2 & 7];
  8704.                 uint res = dest - MASK_OUT_ABOVE_8(*compare);
  8705.  
  8706.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  8707.                 FLAG_N = NFLAG_8(res);
  8708.                 FLAG_Z = MASK_OUT_ABOVE_8(res);
  8709.                 FLAG_V = VFLAG_SUB_8(*compare, dest, res);
  8710.                 FLAG_C = CFLAG_8(res);
  8711.  
  8712.                 if(COND_NE())
  8713.                         *compare = MASK_OUT_BELOW_8(*compare) | dest;
  8714.                 else
  8715.                 {
  8716.                         USE_CYCLES(3);
  8717.                         m68ki_write_8(ea, MASK_OUT_ABOVE_8(REG_D[(word2 >> 6) & 7]));
  8718.                 }
  8719.                 return;
  8720.         }
  8721.         m68ki_exception_illegal();
  8722. }
  8723.  
  8724.  
  8725. void m68k_op_cas_8_pi7(void)
  8726. {
  8727.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  8728.         {
  8729.                 uint word2 = OPER_I_16();
  8730.                 uint ea = EA_A7_PI_8();
  8731.                 uint dest = m68ki_read_8(ea);
  8732.                 uint* compare = &REG_D[word2 & 7];
  8733.                 uint res = dest - MASK_OUT_ABOVE_8(*compare);
  8734.  
  8735.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  8736.                 FLAG_N = NFLAG_8(res);
  8737.                 FLAG_Z = MASK_OUT_ABOVE_8(res);
  8738.                 FLAG_V = VFLAG_SUB_8(*compare, dest, res);
  8739.                 FLAG_C = CFLAG_8(res);
  8740.  
  8741.                 if(COND_NE())
  8742.                         *compare = MASK_OUT_BELOW_8(*compare) | dest;
  8743.                 else
  8744.                 {
  8745.                         USE_CYCLES(3);
  8746.                         m68ki_write_8(ea, MASK_OUT_ABOVE_8(REG_D[(word2 >> 6) & 7]));
  8747.                 }
  8748.                 return;
  8749.         }
  8750.         m68ki_exception_illegal();
  8751. }
  8752.  
  8753.  
  8754. void m68k_op_cas_8_pd(void)
  8755. {
  8756.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  8757.         {
  8758.                 uint word2 = OPER_I_16();
  8759.                 uint ea = EA_AY_PD_8();
  8760.                 uint dest = m68ki_read_8(ea);
  8761.                 uint* compare = &REG_D[word2 & 7];
  8762.                 uint res = dest - MASK_OUT_ABOVE_8(*compare);
  8763.  
  8764.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  8765.                 FLAG_N = NFLAG_8(res);
  8766.                 FLAG_Z = MASK_OUT_ABOVE_8(res);
  8767.                 FLAG_V = VFLAG_SUB_8(*compare, dest, res);
  8768.                 FLAG_C = CFLAG_8(res);
  8769.  
  8770.                 if(COND_NE())
  8771.                         *compare = MASK_OUT_BELOW_8(*compare) | dest;
  8772.                 else
  8773.                 {
  8774.                         USE_CYCLES(3);
  8775.                         m68ki_write_8(ea, MASK_OUT_ABOVE_8(REG_D[(word2 >> 6) & 7]));
  8776.                 }
  8777.                 return;
  8778.         }
  8779.         m68ki_exception_illegal();
  8780. }
  8781.  
  8782.  
  8783. void m68k_op_cas_8_pd7(void)
  8784. {
  8785.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  8786.         {
  8787.                 uint word2 = OPER_I_16();
  8788.                 uint ea = EA_A7_PD_8();
  8789.                 uint dest = m68ki_read_8(ea);
  8790.                 uint* compare = &REG_D[word2 & 7];
  8791.                 uint res = dest - MASK_OUT_ABOVE_8(*compare);
  8792.  
  8793.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  8794.                 FLAG_N = NFLAG_8(res);
  8795.                 FLAG_Z = MASK_OUT_ABOVE_8(res);
  8796.                 FLAG_V = VFLAG_SUB_8(*compare, dest, res);
  8797.                 FLAG_C = CFLAG_8(res);
  8798.  
  8799.                 if(COND_NE())
  8800.                         *compare = MASK_OUT_BELOW_8(*compare) | dest;
  8801.                 else
  8802.                 {
  8803.                         USE_CYCLES(3);
  8804.                         m68ki_write_8(ea, MASK_OUT_ABOVE_8(REG_D[(word2 >> 6) & 7]));
  8805.                 }
  8806.                 return;
  8807.         }
  8808.         m68ki_exception_illegal();
  8809. }
  8810.  
  8811.  
  8812. void m68k_op_cas_8_di(void)
  8813. {
  8814.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  8815.         {
  8816.                 uint word2 = OPER_I_16();
  8817.                 uint ea = EA_AY_DI_8();
  8818.                 uint dest = m68ki_read_8(ea);
  8819.                 uint* compare = &REG_D[word2 & 7];
  8820.                 uint res = dest - MASK_OUT_ABOVE_8(*compare);
  8821.  
  8822.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  8823.                 FLAG_N = NFLAG_8(res);
  8824.                 FLAG_Z = MASK_OUT_ABOVE_8(res);
  8825.                 FLAG_V = VFLAG_SUB_8(*compare, dest, res);
  8826.                 FLAG_C = CFLAG_8(res);
  8827.  
  8828.                 if(COND_NE())
  8829.                         *compare = MASK_OUT_BELOW_8(*compare) | dest;
  8830.                 else
  8831.                 {
  8832.                         USE_CYCLES(3);
  8833.                         m68ki_write_8(ea, MASK_OUT_ABOVE_8(REG_D[(word2 >> 6) & 7]));
  8834.                 }
  8835.                 return;
  8836.         }
  8837.         m68ki_exception_illegal();
  8838. }
  8839.  
  8840.  
  8841. void m68k_op_cas_8_ix(void)
  8842. {
  8843.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  8844.         {
  8845.                 uint word2 = OPER_I_16();
  8846.                 uint ea = EA_AY_IX_8();
  8847.                 uint dest = m68ki_read_8(ea);
  8848.                 uint* compare = &REG_D[word2 & 7];
  8849.                 uint res = dest - MASK_OUT_ABOVE_8(*compare);
  8850.  
  8851.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  8852.                 FLAG_N = NFLAG_8(res);
  8853.                 FLAG_Z = MASK_OUT_ABOVE_8(res);
  8854.                 FLAG_V = VFLAG_SUB_8(*compare, dest, res);
  8855.                 FLAG_C = CFLAG_8(res);
  8856.  
  8857.                 if(COND_NE())
  8858.                         *compare = MASK_OUT_BELOW_8(*compare) | dest;
  8859.                 else
  8860.                 {
  8861.                         USE_CYCLES(3);
  8862.                         m68ki_write_8(ea, MASK_OUT_ABOVE_8(REG_D[(word2 >> 6) & 7]));
  8863.                 }
  8864.                 return;
  8865.         }
  8866.         m68ki_exception_illegal();
  8867. }
  8868.  
  8869.  
  8870. void m68k_op_cas_8_aw(void)
  8871. {
  8872.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  8873.         {
  8874.                 uint word2 = OPER_I_16();
  8875.                 uint ea = EA_AW_8();
  8876.                 uint dest = m68ki_read_8(ea);
  8877.                 uint* compare = &REG_D[word2 & 7];
  8878.                 uint res = dest - MASK_OUT_ABOVE_8(*compare);
  8879.  
  8880.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  8881.                 FLAG_N = NFLAG_8(res);
  8882.                 FLAG_Z = MASK_OUT_ABOVE_8(res);
  8883.                 FLAG_V = VFLAG_SUB_8(*compare, dest, res);
  8884.                 FLAG_C = CFLAG_8(res);
  8885.  
  8886.                 if(COND_NE())
  8887.                         *compare = MASK_OUT_BELOW_8(*compare) | dest;
  8888.                 else
  8889.                 {
  8890.                         USE_CYCLES(3);
  8891.                         m68ki_write_8(ea, MASK_OUT_ABOVE_8(REG_D[(word2 >> 6) & 7]));
  8892.                 }
  8893.                 return;
  8894.         }
  8895.         m68ki_exception_illegal();
  8896. }
  8897.  
  8898.  
  8899. void m68k_op_cas_8_al(void)
  8900. {
  8901.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  8902.         {
  8903.                 uint word2 = OPER_I_16();
  8904.                 uint ea = EA_AL_8();
  8905.                 uint dest = m68ki_read_8(ea);
  8906.                 uint* compare = &REG_D[word2 & 7];
  8907.                 uint res = dest - MASK_OUT_ABOVE_8(*compare);
  8908.  
  8909.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  8910.                 FLAG_N = NFLAG_8(res);
  8911.                 FLAG_Z = MASK_OUT_ABOVE_8(res);
  8912.                 FLAG_V = VFLAG_SUB_8(*compare, dest, res);
  8913.                 FLAG_C = CFLAG_8(res);
  8914.  
  8915.                 if(COND_NE())
  8916.                         *compare = MASK_OUT_BELOW_8(*compare) | dest;
  8917.                 else
  8918.                 {
  8919.                         USE_CYCLES(3);
  8920.                         m68ki_write_8(ea, MASK_OUT_ABOVE_8(REG_D[(word2 >> 6) & 7]));
  8921.                 }
  8922.                 return;
  8923.         }
  8924.         m68ki_exception_illegal();
  8925. }
  8926.  
  8927.  
  8928. void m68k_op_cas_16_ai(void)
  8929. {
  8930.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  8931.         {
  8932.                 uint word2 = OPER_I_16();
  8933.                 uint ea = EA_AY_AI_16();
  8934.                 uint dest = m68ki_read_16(ea);
  8935.                 uint* compare = &REG_D[word2 & 7];
  8936.                 uint res = dest - MASK_OUT_ABOVE_16(*compare);
  8937.  
  8938.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  8939.                 FLAG_N = NFLAG_16(res);
  8940.                 FLAG_Z = MASK_OUT_ABOVE_16(res);
  8941.                 FLAG_V = VFLAG_SUB_16(*compare, dest, res);
  8942.                 FLAG_C = CFLAG_16(res);
  8943.  
  8944.                 if(COND_NE())
  8945.                         *compare = MASK_OUT_BELOW_16(*compare) | dest;
  8946.                 else
  8947.                 {
  8948.                         USE_CYCLES(3);
  8949.                         m68ki_write_16(ea, MASK_OUT_ABOVE_16(REG_D[(word2 >> 6) & 7]));
  8950.                 }
  8951.                 return;
  8952.         }
  8953.         m68ki_exception_illegal();
  8954. }
  8955.  
  8956.  
  8957. void m68k_op_cas_16_pi(void)
  8958. {
  8959.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  8960.         {
  8961.                 uint word2 = OPER_I_16();
  8962.                 uint ea = EA_AY_PI_16();
  8963.                 uint dest = m68ki_read_16(ea);
  8964.                 uint* compare = &REG_D[word2 & 7];
  8965.                 uint res = dest - MASK_OUT_ABOVE_16(*compare);
  8966.  
  8967.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  8968.                 FLAG_N = NFLAG_16(res);
  8969.                 FLAG_Z = MASK_OUT_ABOVE_16(res);
  8970.                 FLAG_V = VFLAG_SUB_16(*compare, dest, res);
  8971.                 FLAG_C = CFLAG_16(res);
  8972.  
  8973.                 if(COND_NE())
  8974.                         *compare = MASK_OUT_BELOW_16(*compare) | dest;
  8975.                 else
  8976.                 {
  8977.                         USE_CYCLES(3);
  8978.                         m68ki_write_16(ea, MASK_OUT_ABOVE_16(REG_D[(word2 >> 6) & 7]));
  8979.                 }
  8980.                 return;
  8981.         }
  8982.         m68ki_exception_illegal();
  8983. }
  8984.  
  8985.  
  8986. void m68k_op_cas_16_pd(void)
  8987. {
  8988.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  8989.         {
  8990.                 uint word2 = OPER_I_16();
  8991.                 uint ea = EA_AY_PD_16();
  8992.                 uint dest = m68ki_read_16(ea);
  8993.                 uint* compare = &REG_D[word2 & 7];
  8994.                 uint res = dest - MASK_OUT_ABOVE_16(*compare);
  8995.  
  8996.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  8997.                 FLAG_N = NFLAG_16(res);
  8998.                 FLAG_Z = MASK_OUT_ABOVE_16(res);
  8999.                 FLAG_V = VFLAG_SUB_16(*compare, dest, res);
  9000.                 FLAG_C = CFLAG_16(res);
  9001.  
  9002.                 if(COND_NE())
  9003.                         *compare = MASK_OUT_BELOW_16(*compare) | dest;
  9004.                 else
  9005.                 {
  9006.                         USE_CYCLES(3);
  9007.                         m68ki_write_16(ea, MASK_OUT_ABOVE_16(REG_D[(word2 >> 6) & 7]));
  9008.                 }
  9009.                 return;
  9010.         }
  9011.         m68ki_exception_illegal();
  9012. }
  9013.  
  9014.  
  9015. void m68k_op_cas_16_di(void)
  9016. {
  9017.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  9018.         {
  9019.                 uint word2 = OPER_I_16();
  9020.                 uint ea = EA_AY_DI_16();
  9021.                 uint dest = m68ki_read_16(ea);
  9022.                 uint* compare = &REG_D[word2 & 7];
  9023.                 uint res = dest - MASK_OUT_ABOVE_16(*compare);
  9024.  
  9025.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  9026.                 FLAG_N = NFLAG_16(res);
  9027.                 FLAG_Z = MASK_OUT_ABOVE_16(res);
  9028.                 FLAG_V = VFLAG_SUB_16(*compare, dest, res);
  9029.                 FLAG_C = CFLAG_16(res);
  9030.  
  9031.                 if(COND_NE())
  9032.                         *compare = MASK_OUT_BELOW_16(*compare) | dest;
  9033.                 else
  9034.                 {
  9035.                         USE_CYCLES(3);
  9036.                         m68ki_write_16(ea, MASK_OUT_ABOVE_16(REG_D[(word2 >> 6) & 7]));
  9037.                 }
  9038.                 return;
  9039.         }
  9040.         m68ki_exception_illegal();
  9041. }
  9042.  
  9043.  
  9044. void m68k_op_cas_16_ix(void)
  9045. {
  9046.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  9047.         {
  9048.                 uint word2 = OPER_I_16();
  9049.                 uint ea = EA_AY_IX_16();
  9050.                 uint dest = m68ki_read_16(ea);
  9051.                 uint* compare = &REG_D[word2 & 7];
  9052.                 uint res = dest - MASK_OUT_ABOVE_16(*compare);
  9053.  
  9054.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  9055.                 FLAG_N = NFLAG_16(res);
  9056.                 FLAG_Z = MASK_OUT_ABOVE_16(res);
  9057.                 FLAG_V = VFLAG_SUB_16(*compare, dest, res);
  9058.                 FLAG_C = CFLAG_16(res);
  9059.  
  9060.                 if(COND_NE())
  9061.                         *compare = MASK_OUT_BELOW_16(*compare) | dest;
  9062.                 else
  9063.                 {
  9064.                         USE_CYCLES(3);
  9065.                         m68ki_write_16(ea, MASK_OUT_ABOVE_16(REG_D[(word2 >> 6) & 7]));
  9066.                 }
  9067.                 return;
  9068.         }
  9069.         m68ki_exception_illegal();
  9070. }
  9071.  
  9072.  
  9073. void m68k_op_cas_16_aw(void)
  9074. {
  9075.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  9076.         {
  9077.                 uint word2 = OPER_I_16();
  9078.                 uint ea = EA_AW_16();
  9079.                 uint dest = m68ki_read_16(ea);
  9080.                 uint* compare = &REG_D[word2 & 7];
  9081.                 uint res = dest - MASK_OUT_ABOVE_16(*compare);
  9082.  
  9083.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  9084.                 FLAG_N = NFLAG_16(res);
  9085.                 FLAG_Z = MASK_OUT_ABOVE_16(res);
  9086.                 FLAG_V = VFLAG_SUB_16(*compare, dest, res);
  9087.                 FLAG_C = CFLAG_16(res);
  9088.  
  9089.                 if(COND_NE())
  9090.                         *compare = MASK_OUT_BELOW_16(*compare) | dest;
  9091.                 else
  9092.                 {
  9093.                         USE_CYCLES(3);
  9094.                         m68ki_write_16(ea, MASK_OUT_ABOVE_16(REG_D[(word2 >> 6) & 7]));
  9095.                 }
  9096.                 return;
  9097.         }
  9098.         m68ki_exception_illegal();
  9099. }
  9100.  
  9101.  
  9102. void m68k_op_cas_16_al(void)
  9103. {
  9104.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  9105.         {
  9106.                 uint word2 = OPER_I_16();
  9107.                 uint ea = EA_AL_16();
  9108.                 uint dest = m68ki_read_16(ea);
  9109.                 uint* compare = &REG_D[word2 & 7];
  9110.                 uint res = dest - MASK_OUT_ABOVE_16(*compare);
  9111.  
  9112.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  9113.                 FLAG_N = NFLAG_16(res);
  9114.                 FLAG_Z = MASK_OUT_ABOVE_16(res);
  9115.                 FLAG_V = VFLAG_SUB_16(*compare, dest, res);
  9116.                 FLAG_C = CFLAG_16(res);
  9117.  
  9118.                 if(COND_NE())
  9119.                         *compare = MASK_OUT_BELOW_16(*compare) | dest;
  9120.                 else
  9121.                 {
  9122.                         USE_CYCLES(3);
  9123.                         m68ki_write_16(ea, MASK_OUT_ABOVE_16(REG_D[(word2 >> 6) & 7]));
  9124.                 }
  9125.                 return;
  9126.         }
  9127.         m68ki_exception_illegal();
  9128. }
  9129.  
  9130.  
  9131. void m68k_op_cas_32_ai(void)
  9132. {
  9133.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  9134.         {
  9135.                 uint word2 = OPER_I_16();
  9136.                 uint ea = EA_AY_AI_32();
  9137.                 uint dest = m68ki_read_32(ea);
  9138.                 uint* compare = &REG_D[word2 & 7];
  9139.                 uint res = dest - *compare;
  9140.  
  9141.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  9142.                 FLAG_N = NFLAG_32(res);
  9143.                 FLAG_Z = MASK_OUT_ABOVE_32(res);
  9144.                 FLAG_V = VFLAG_SUB_32(*compare, dest, res);
  9145.                 FLAG_C = CFLAG_SUB_32(*compare, dest, res);
  9146.  
  9147.                 if(COND_NE())
  9148.                         *compare = dest;
  9149.                 else
  9150.                 {
  9151.                         USE_CYCLES(3);
  9152.                         m68ki_write_32(ea, REG_D[(word2 >> 6) & 7]);
  9153.                 }
  9154.                 return;
  9155.         }
  9156.         m68ki_exception_illegal();
  9157. }
  9158.  
  9159.  
  9160. void m68k_op_cas_32_pi(void)
  9161. {
  9162.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  9163.         {
  9164.                 uint word2 = OPER_I_16();
  9165.                 uint ea = EA_AY_PI_32();
  9166.                 uint dest = m68ki_read_32(ea);
  9167.                 uint* compare = &REG_D[word2 & 7];
  9168.                 uint res = dest - *compare;
  9169.  
  9170.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  9171.                 FLAG_N = NFLAG_32(res);
  9172.                 FLAG_Z = MASK_OUT_ABOVE_32(res);
  9173.                 FLAG_V = VFLAG_SUB_32(*compare, dest, res);
  9174.                 FLAG_C = CFLAG_SUB_32(*compare, dest, res);
  9175.  
  9176.                 if(COND_NE())
  9177.                         *compare = dest;
  9178.                 else
  9179.                 {
  9180.                         USE_CYCLES(3);
  9181.                         m68ki_write_32(ea, REG_D[(word2 >> 6) & 7]);
  9182.                 }
  9183.                 return;
  9184.         }
  9185.         m68ki_exception_illegal();
  9186. }
  9187.  
  9188.  
  9189. void m68k_op_cas_32_pd(void)
  9190. {
  9191.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  9192.         {
  9193.                 uint word2 = OPER_I_16();
  9194.                 uint ea = EA_AY_PD_32();
  9195.                 uint dest = m68ki_read_32(ea);
  9196.                 uint* compare = &REG_D[word2 & 7];
  9197.                 uint res = dest - *compare;
  9198.  
  9199.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  9200.                 FLAG_N = NFLAG_32(res);
  9201.                 FLAG_Z = MASK_OUT_ABOVE_32(res);
  9202.                 FLAG_V = VFLAG_SUB_32(*compare, dest, res);
  9203.                 FLAG_C = CFLAG_SUB_32(*compare, dest, res);
  9204.  
  9205.                 if(COND_NE())
  9206.                         *compare = dest;
  9207.                 else
  9208.                 {
  9209.                         USE_CYCLES(3);
  9210.                         m68ki_write_32(ea, REG_D[(word2 >> 6) & 7]);
  9211.                 }
  9212.                 return;
  9213.         }
  9214.         m68ki_exception_illegal();
  9215. }
  9216.  
  9217.  
  9218. void m68k_op_cas_32_di(void)
  9219. {
  9220.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  9221.         {
  9222.                 uint word2 = OPER_I_16();
  9223.                 uint ea = EA_AY_DI_32();
  9224.                 uint dest = m68ki_read_32(ea);
  9225.                 uint* compare = &REG_D[word2 & 7];
  9226.                 uint res = dest - *compare;
  9227.  
  9228.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  9229.                 FLAG_N = NFLAG_32(res);
  9230.                 FLAG_Z = MASK_OUT_ABOVE_32(res);
  9231.                 FLAG_V = VFLAG_SUB_32(*compare, dest, res);
  9232.                 FLAG_C = CFLAG_SUB_32(*compare, dest, res);
  9233.  
  9234.                 if(COND_NE())
  9235.                         *compare = dest;
  9236.                 else
  9237.                 {
  9238.                         USE_CYCLES(3);
  9239.                         m68ki_write_32(ea, REG_D[(word2 >> 6) & 7]);
  9240.                 }
  9241.                 return;
  9242.         }
  9243.         m68ki_exception_illegal();
  9244. }
  9245.  
  9246.  
  9247. void m68k_op_cas_32_ix(void)
  9248. {
  9249.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  9250.         {
  9251.                 uint word2 = OPER_I_16();
  9252.                 uint ea = EA_AY_IX_32();
  9253.                 uint dest = m68ki_read_32(ea);
  9254.                 uint* compare = &REG_D[word2 & 7];
  9255.                 uint res = dest - *compare;
  9256.  
  9257.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  9258.                 FLAG_N = NFLAG_32(res);
  9259.                 FLAG_Z = MASK_OUT_ABOVE_32(res);
  9260.                 FLAG_V = VFLAG_SUB_32(*compare, dest, res);
  9261.                 FLAG_C = CFLAG_SUB_32(*compare, dest, res);
  9262.  
  9263.                 if(COND_NE())
  9264.                         *compare = dest;
  9265.                 else
  9266.                 {
  9267.                         USE_CYCLES(3);
  9268.                         m68ki_write_32(ea, REG_D[(word2 >> 6) & 7]);
  9269.                 }
  9270.                 return;
  9271.         }
  9272.         m68ki_exception_illegal();
  9273. }
  9274.  
  9275.  
  9276. void m68k_op_cas_32_aw(void)
  9277. {
  9278.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  9279.         {
  9280.                 uint word2 = OPER_I_16();
  9281.                 uint ea = EA_AW_32();
  9282.                 uint dest = m68ki_read_32(ea);
  9283.                 uint* compare = &REG_D[word2 & 7];
  9284.                 uint res = dest - *compare;
  9285.  
  9286.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  9287.                 FLAG_N = NFLAG_32(res);
  9288.                 FLAG_Z = MASK_OUT_ABOVE_32(res);
  9289.                 FLAG_V = VFLAG_SUB_32(*compare, dest, res);
  9290.                 FLAG_C = CFLAG_SUB_32(*compare, dest, res);
  9291.  
  9292.                 if(COND_NE())
  9293.                         *compare = dest;
  9294.                 else
  9295.                 {
  9296.                         USE_CYCLES(3);
  9297.                         m68ki_write_32(ea, REG_D[(word2 >> 6) & 7]);
  9298.                 }
  9299.                 return;
  9300.         }
  9301.         m68ki_exception_illegal();
  9302. }
  9303.  
  9304.  
  9305. void m68k_op_cas_32_al(void)
  9306. {
  9307.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  9308.         {
  9309.                 uint word2 = OPER_I_16();
  9310.                 uint ea = EA_AL_32();
  9311.                 uint dest = m68ki_read_32(ea);
  9312.                 uint* compare = &REG_D[word2 & 7];
  9313.                 uint res = dest - *compare;
  9314.  
  9315.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  9316.                 FLAG_N = NFLAG_32(res);
  9317.                 FLAG_Z = MASK_OUT_ABOVE_32(res);
  9318.                 FLAG_V = VFLAG_SUB_32(*compare, dest, res);
  9319.                 FLAG_C = CFLAG_SUB_32(*compare, dest, res);
  9320.  
  9321.                 if(COND_NE())
  9322.                         *compare = dest;
  9323.                 else
  9324.                 {
  9325.                         USE_CYCLES(3);
  9326.                         m68ki_write_32(ea, REG_D[(word2 >> 6) & 7]);
  9327.                 }
  9328.                 return;
  9329.         }
  9330.         m68ki_exception_illegal();
  9331. }
  9332.  
  9333.  
  9334. void m68k_op_cas2_16(void)
  9335. {
  9336.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  9337.         {
  9338.                 uint word2 = OPER_I_32();
  9339.                 uint* compare1 = &REG_D[(word2 >> 16) & 7];
  9340.                 uint ea1 = REG_DA[(word2 >> 28) & 15];
  9341.                 uint dest1 = m68ki_read_16(ea1);
  9342.                 uint res1 = dest1 - MASK_OUT_ABOVE_16(*compare1);
  9343.                 uint* compare2 = &REG_D[word2 & 7];
  9344.                 uint ea2 = REG_DA[(word2 >> 12) & 15];
  9345.                 uint dest2 = m68ki_read_16(ea2);
  9346.                 uint res2;
  9347.  
  9348.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  9349.                 FLAG_N = NFLAG_16(res1);
  9350.                 FLAG_Z = MASK_OUT_ABOVE_16(res1);
  9351.                 FLAG_V = VFLAG_SUB_16(*compare1, dest1, res1);
  9352.                 FLAG_C = CFLAG_16(res1);
  9353.  
  9354.                 if(COND_EQ())
  9355.                 {
  9356.                         res2 = dest2 - MASK_OUT_ABOVE_16(*compare2);
  9357.  
  9358.                         FLAG_N = NFLAG_16(res2);
  9359.                         FLAG_Z = MASK_OUT_ABOVE_16(res2);
  9360.                         FLAG_V = VFLAG_SUB_16(*compare2, dest2, res2);
  9361.                         FLAG_C = CFLAG_16(res2);
  9362.  
  9363.                         if(COND_EQ())
  9364.                         {
  9365.                                 USE_CYCLES(3);
  9366.                                 m68ki_write_16(ea1, REG_D[(word2 >> 22) & 7]);
  9367.                                 m68ki_write_16(ea2, REG_D[(word2 >> 6) & 7]);
  9368.                                 return;
  9369.                         }
  9370.                 }
  9371.                 *compare1 = BIT_1F(word2) ? MAKE_UINT_16(dest1) : MASK_OUT_BELOW_16(*compare1) | dest1;
  9372.                 *compare2 = BIT_F(word2) ? MAKE_UINT_16(dest2) : MASK_OUT_BELOW_16(*compare2) | dest2;
  9373.                 return;
  9374.         }
  9375.         m68ki_exception_illegal();
  9376. }
  9377.  
  9378.  
  9379. void m68k_op_cas2_32(void)
  9380. {
  9381.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  9382.         {
  9383.                 uint word2 = OPER_I_32();
  9384.                 uint* compare1 = &REG_D[(word2 >> 16) & 7];
  9385.                 uint ea1 = REG_DA[(word2 >> 28) & 15];
  9386.                 uint dest1 = m68ki_read_32(ea1);
  9387.                 uint res1 = dest1 - *compare1;
  9388.                 uint* compare2 = &REG_D[word2 & 7];
  9389.                 uint ea2 = REG_DA[(word2 >> 12) & 15];
  9390.                 uint dest2 = m68ki_read_32(ea2);
  9391.                 uint res2;
  9392.  
  9393.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  9394.                 FLAG_N = NFLAG_32(res1);
  9395.                 FLAG_Z = MASK_OUT_ABOVE_32(res1);
  9396.                 FLAG_V = VFLAG_SUB_32(*compare1, dest1, res1);
  9397.                 FLAG_C = CFLAG_SUB_32(*compare1, dest1, res1);
  9398.  
  9399.                 if(COND_EQ())
  9400.                 {
  9401.                         res2 = dest2 - *compare2;
  9402.  
  9403.                         FLAG_N = NFLAG_32(res2);
  9404.                         FLAG_Z = MASK_OUT_ABOVE_32(res2);
  9405.                         FLAG_V = VFLAG_SUB_32(*compare2, dest2, res2);
  9406.                         FLAG_C = CFLAG_SUB_32(*compare2, dest2, res2);
  9407.  
  9408.                         if(COND_EQ())
  9409.                         {
  9410.                                 USE_CYCLES(3);
  9411.                                 m68ki_write_32(ea1, REG_D[(word2 >> 22) & 7]);
  9412.                                 m68ki_write_32(ea2, REG_D[(word2 >> 6) & 7]);
  9413.                                 return;
  9414.                         }
  9415.                 }
  9416.                 *compare1 = dest1;
  9417.                 *compare2 = dest2;
  9418.                 return;
  9419.         }
  9420.         m68ki_exception_illegal();
  9421. }
  9422.  
  9423.  
  9424. void m68k_op_chk_16_d(void)
  9425. {
  9426.         sint src = MAKE_INT_16(DX);
  9427.         sint bound = MAKE_INT_16(DY);
  9428.  
  9429.         FLAG_Z = ZFLAG_16(src); /* Undocumented */
  9430.         FLAG_V = VFLAG_CLEAR;   /* Undocumented */
  9431.         FLAG_C = CFLAG_CLEAR;   /* Undocumented */
  9432.  
  9433.         if(src >= 0 && src <= bound)
  9434.         {
  9435.                 return;
  9436.         }
  9437.         FLAG_N = (src < 0)<<7;
  9438.         m68ki_exception_trap(EXCEPTION_CHK);
  9439. }
  9440.  
  9441.  
  9442. void m68k_op_chk_16_ai(void)
  9443. {
  9444.         sint src = MAKE_INT_16(DX);
  9445.         sint bound = MAKE_INT_16(OPER_AY_AI_16());
  9446.  
  9447.         FLAG_Z = ZFLAG_16(src); /* Undocumented */
  9448.         FLAG_V = VFLAG_CLEAR;   /* Undocumented */
  9449.         FLAG_C = CFLAG_CLEAR;   /* Undocumented */
  9450.  
  9451.         if(src >= 0 && src <= bound)
  9452.         {
  9453.                 return;
  9454.         }
  9455.         FLAG_N = (src < 0)<<7;
  9456.         m68ki_exception_trap(EXCEPTION_CHK);
  9457. }
  9458.  
  9459.  
  9460. void m68k_op_chk_16_pi(void)
  9461. {
  9462.         sint src = MAKE_INT_16(DX);
  9463.         sint bound = MAKE_INT_16(OPER_AY_PI_16());
  9464.  
  9465.         FLAG_Z = ZFLAG_16(src); /* Undocumented */
  9466.         FLAG_V = VFLAG_CLEAR;   /* Undocumented */
  9467.         FLAG_C = CFLAG_CLEAR;   /* Undocumented */
  9468.  
  9469.         if(src >= 0 && src <= bound)
  9470.         {
  9471.                 return;
  9472.         }
  9473.         FLAG_N = (src < 0)<<7;
  9474.         m68ki_exception_trap(EXCEPTION_CHK);
  9475. }
  9476.  
  9477.  
  9478. void m68k_op_chk_16_pd(void)
  9479. {
  9480.         sint src = MAKE_INT_16(DX);
  9481.         sint bound = MAKE_INT_16(OPER_AY_PD_16());
  9482.  
  9483.         FLAG_Z = ZFLAG_16(src); /* Undocumented */
  9484.         FLAG_V = VFLAG_CLEAR;   /* Undocumented */
  9485.         FLAG_C = CFLAG_CLEAR;   /* Undocumented */
  9486.  
  9487.         if(src >= 0 && src <= bound)
  9488.         {
  9489.                 return;
  9490.         }
  9491.         FLAG_N = (src < 0)<<7;
  9492.         m68ki_exception_trap(EXCEPTION_CHK);
  9493. }
  9494.  
  9495.  
  9496. void m68k_op_chk_16_di(void)
  9497. {
  9498.         sint src = MAKE_INT_16(DX);
  9499.         sint bound = MAKE_INT_16(OPER_AY_DI_16());
  9500.  
  9501.         FLAG_Z = ZFLAG_16(src); /* Undocumented */
  9502.         FLAG_V = VFLAG_CLEAR;   /* Undocumented */
  9503.         FLAG_C = CFLAG_CLEAR;   /* Undocumented */
  9504.  
  9505.         if(src >= 0 && src <= bound)
  9506.         {
  9507.                 return;
  9508.         }
  9509.         FLAG_N = (src < 0)<<7;
  9510.         m68ki_exception_trap(EXCEPTION_CHK);
  9511. }
  9512.  
  9513.  
  9514. void m68k_op_chk_16_ix(void)
  9515. {
  9516.         sint src = MAKE_INT_16(DX);
  9517.         sint bound = MAKE_INT_16(OPER_AY_IX_16());
  9518.  
  9519.         FLAG_Z = ZFLAG_16(src); /* Undocumented */
  9520.         FLAG_V = VFLAG_CLEAR;   /* Undocumented */
  9521.         FLAG_C = CFLAG_CLEAR;   /* Undocumented */
  9522.  
  9523.         if(src >= 0 && src <= bound)
  9524.         {
  9525.                 return;
  9526.         }
  9527.         FLAG_N = (src < 0)<<7;
  9528.         m68ki_exception_trap(EXCEPTION_CHK);
  9529. }
  9530.  
  9531.  
  9532. void m68k_op_chk_16_aw(void)
  9533. {
  9534.         sint src = MAKE_INT_16(DX);
  9535.         sint bound = MAKE_INT_16(OPER_AW_16());
  9536.  
  9537.         FLAG_Z = ZFLAG_16(src); /* Undocumented */
  9538.         FLAG_V = VFLAG_CLEAR;   /* Undocumented */
  9539.         FLAG_C = CFLAG_CLEAR;   /* Undocumented */
  9540.  
  9541.         if(src >= 0 && src <= bound)
  9542.         {
  9543.                 return;
  9544.         }
  9545.         FLAG_N = (src < 0)<<7;
  9546.         m68ki_exception_trap(EXCEPTION_CHK);
  9547. }
  9548.  
  9549.  
  9550. void m68k_op_chk_16_al(void)
  9551. {
  9552.         sint src = MAKE_INT_16(DX);
  9553.         sint bound = MAKE_INT_16(OPER_AL_16());
  9554.  
  9555.         FLAG_Z = ZFLAG_16(src); /* Undocumented */
  9556.         FLAG_V = VFLAG_CLEAR;   /* Undocumented */
  9557.         FLAG_C = CFLAG_CLEAR;   /* Undocumented */
  9558.  
  9559.         if(src >= 0 && src <= bound)
  9560.         {
  9561.                 return;
  9562.         }
  9563.         FLAG_N = (src < 0)<<7;
  9564.         m68ki_exception_trap(EXCEPTION_CHK);
  9565. }
  9566.  
  9567.  
  9568. void m68k_op_chk_16_pcdi(void)
  9569. {
  9570.         sint src = MAKE_INT_16(DX);
  9571.         sint bound = MAKE_INT_16(OPER_PCDI_16());
  9572.  
  9573.         FLAG_Z = ZFLAG_16(src); /* Undocumented */
  9574.         FLAG_V = VFLAG_CLEAR;   /* Undocumented */
  9575.         FLAG_C = CFLAG_CLEAR;   /* Undocumented */
  9576.  
  9577.         if(src >= 0 && src <= bound)
  9578.         {
  9579.                 return;
  9580.         }
  9581.         FLAG_N = (src < 0)<<7;
  9582.         m68ki_exception_trap(EXCEPTION_CHK);
  9583. }
  9584.  
  9585.  
  9586. void m68k_op_chk_16_pcix(void)
  9587. {
  9588.         sint src = MAKE_INT_16(DX);
  9589.         sint bound = MAKE_INT_16(OPER_PCIX_16());
  9590.  
  9591.         FLAG_Z = ZFLAG_16(src); /* Undocumented */
  9592.         FLAG_V = VFLAG_CLEAR;   /* Undocumented */
  9593.         FLAG_C = CFLAG_CLEAR;   /* Undocumented */
  9594.  
  9595.         if(src >= 0 && src <= bound)
  9596.         {
  9597.                 return;
  9598.         }
  9599.         FLAG_N = (src < 0)<<7;
  9600.         m68ki_exception_trap(EXCEPTION_CHK);
  9601. }
  9602.  
  9603.  
  9604. void m68k_op_chk_16_i(void)
  9605. {
  9606.         sint src = MAKE_INT_16(DX);
  9607.         sint bound = MAKE_INT_16(OPER_I_16());
  9608.  
  9609.         FLAG_Z = ZFLAG_16(src); /* Undocumented */
  9610.         FLAG_V = VFLAG_CLEAR;   /* Undocumented */
  9611.         FLAG_C = CFLAG_CLEAR;   /* Undocumented */
  9612.  
  9613.         if(src >= 0 && src <= bound)
  9614.         {
  9615.                 return;
  9616.         }
  9617.         FLAG_N = (src < 0)<<7;
  9618.         m68ki_exception_trap(EXCEPTION_CHK);
  9619. }
  9620.  
  9621.  
  9622. void m68k_op_chk_32_d(void)
  9623. {
  9624.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  9625.         {
  9626.                 sint src = MAKE_INT_32(DX);
  9627.                 sint bound = MAKE_INT_32(DY);
  9628.  
  9629.                 FLAG_Z = ZFLAG_32(src); /* Undocumented */
  9630.                 FLAG_V = VFLAG_CLEAR;   /* Undocumented */
  9631.                 FLAG_C = CFLAG_CLEAR;   /* Undocumented */
  9632.  
  9633.                 if(src >= 0 && src <= bound)
  9634.                 {
  9635.                         return;
  9636.                 }
  9637.                 FLAG_N = (src < 0)<<7;
  9638.                 m68ki_exception_trap(EXCEPTION_CHK);
  9639.                 return;
  9640.         }
  9641.         m68ki_exception_illegal();
  9642. }
  9643.  
  9644.  
  9645. void m68k_op_chk_32_ai(void)
  9646. {
  9647.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  9648.         {
  9649.                 sint src = MAKE_INT_32(DX);
  9650.                 sint bound = MAKE_INT_32(OPER_AY_AI_32());
  9651.  
  9652.                 FLAG_Z = ZFLAG_32(src); /* Undocumented */
  9653.                 FLAG_V = VFLAG_CLEAR;   /* Undocumented */
  9654.                 FLAG_C = CFLAG_CLEAR;   /* Undocumented */
  9655.  
  9656.                 if(src >= 0 && src <= bound)
  9657.                 {
  9658.                         return;
  9659.                 }
  9660.                 FLAG_N = (src < 0)<<7;
  9661.                 m68ki_exception_trap(EXCEPTION_CHK);
  9662.                 return;
  9663.         }
  9664.         m68ki_exception_illegal();
  9665. }
  9666.  
  9667.  
  9668. void m68k_op_chk_32_pi(void)
  9669. {
  9670.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  9671.         {
  9672.                 sint src = MAKE_INT_32(DX);
  9673.                 sint bound = MAKE_INT_32(OPER_AY_PI_32());
  9674.  
  9675.                 FLAG_Z = ZFLAG_32(src); /* Undocumented */
  9676.                 FLAG_V = VFLAG_CLEAR;   /* Undocumented */
  9677.                 FLAG_C = CFLAG_CLEAR;   /* Undocumented */
  9678.  
  9679.                 if(src >= 0 && src <= bound)
  9680.                 {
  9681.                         return;
  9682.                 }
  9683.                 FLAG_N = (src < 0)<<7;
  9684.                 m68ki_exception_trap(EXCEPTION_CHK);
  9685.                 return;
  9686.         }
  9687.         m68ki_exception_illegal();
  9688. }
  9689.  
  9690.  
  9691. void m68k_op_chk_32_pd(void)
  9692. {
  9693.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  9694.         {
  9695.                 sint src = MAKE_INT_32(DX);
  9696.                 sint bound = MAKE_INT_32(OPER_AY_PD_32());
  9697.  
  9698.                 FLAG_Z = ZFLAG_32(src); /* Undocumented */
  9699.                 FLAG_V = VFLAG_CLEAR;   /* Undocumented */
  9700.                 FLAG_C = CFLAG_CLEAR;   /* Undocumented */
  9701.  
  9702.                 if(src >= 0 && src <= bound)
  9703.                 {
  9704.                         return;
  9705.                 }
  9706.                 FLAG_N = (src < 0)<<7;
  9707.                 m68ki_exception_trap(EXCEPTION_CHK);
  9708.                 return;
  9709.         }
  9710.         m68ki_exception_illegal();
  9711. }
  9712.  
  9713.  
  9714. void m68k_op_chk_32_di(void)
  9715. {
  9716.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  9717.         {
  9718.                 sint src = MAKE_INT_32(DX);
  9719.                 sint bound = MAKE_INT_32(OPER_AY_DI_32());
  9720.  
  9721.                 FLAG_Z = ZFLAG_32(src); /* Undocumented */
  9722.                 FLAG_V = VFLAG_CLEAR;   /* Undocumented */
  9723.                 FLAG_C = CFLAG_CLEAR;   /* Undocumented */
  9724.  
  9725.                 if(src >= 0 && src <= bound)
  9726.                 {
  9727.                         return;
  9728.                 }
  9729.                 FLAG_N = (src < 0)<<7;
  9730.                 m68ki_exception_trap(EXCEPTION_CHK);
  9731.                 return;
  9732.         }
  9733.         m68ki_exception_illegal();
  9734. }
  9735.  
  9736.  
  9737. void m68k_op_chk_32_ix(void)
  9738. {
  9739.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  9740.         {
  9741.                 sint src = MAKE_INT_32(DX);
  9742.                 sint bound = MAKE_INT_32(OPER_AY_IX_32());
  9743.  
  9744.                 FLAG_Z = ZFLAG_32(src); /* Undocumented */
  9745.                 FLAG_V = VFLAG_CLEAR;   /* Undocumented */
  9746.                 FLAG_C = CFLAG_CLEAR;   /* Undocumented */
  9747.  
  9748.                 if(src >= 0 && src <= bound)
  9749.                 {
  9750.                         return;
  9751.                 }
  9752.                 FLAG_N = (src < 0)<<7;
  9753.                 m68ki_exception_trap(EXCEPTION_CHK);
  9754.                 return;
  9755.         }
  9756.         m68ki_exception_illegal();
  9757. }
  9758.  
  9759.  
  9760. void m68k_op_chk_32_aw(void)
  9761. {
  9762.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  9763.         {
  9764.                 sint src = MAKE_INT_32(DX);
  9765.                 sint bound = MAKE_INT_32(OPER_AW_32());
  9766.  
  9767.                 FLAG_Z = ZFLAG_32(src); /* Undocumented */
  9768.                 FLAG_V = VFLAG_CLEAR;   /* Undocumented */
  9769.                 FLAG_C = CFLAG_CLEAR;   /* Undocumented */
  9770.  
  9771.                 if(src >= 0 && src <= bound)
  9772.                 {
  9773.                         return;
  9774.                 }
  9775.                 FLAG_N = (src < 0)<<7;
  9776.                 m68ki_exception_trap(EXCEPTION_CHK);
  9777.                 return;
  9778.         }
  9779.         m68ki_exception_illegal();
  9780. }
  9781.  
  9782.  
  9783. void m68k_op_chk_32_al(void)
  9784. {
  9785.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  9786.         {
  9787.                 sint src = MAKE_INT_32(DX);
  9788.                 sint bound = MAKE_INT_32(OPER_AL_32());
  9789.  
  9790.                 FLAG_Z = ZFLAG_32(src); /* Undocumented */
  9791.                 FLAG_V = VFLAG_CLEAR;   /* Undocumented */
  9792.                 FLAG_C = CFLAG_CLEAR;   /* Undocumented */
  9793.  
  9794.                 if(src >= 0 && src <= bound)
  9795.                 {
  9796.                         return;
  9797.                 }
  9798.                 FLAG_N = (src < 0)<<7;
  9799.                 m68ki_exception_trap(EXCEPTION_CHK);
  9800.                 return;
  9801.         }
  9802.         m68ki_exception_illegal();
  9803. }
  9804.  
  9805.  
  9806. void m68k_op_chk_32_pcdi(void)
  9807. {
  9808.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  9809.         {
  9810.                 sint src = MAKE_INT_32(DX);
  9811.                 sint bound = MAKE_INT_32(OPER_PCDI_32());
  9812.  
  9813.                 FLAG_Z = ZFLAG_32(src); /* Undocumented */
  9814.                 FLAG_V = VFLAG_CLEAR;   /* Undocumented */
  9815.                 FLAG_C = CFLAG_CLEAR;   /* Undocumented */
  9816.  
  9817.                 if(src >= 0 && src <= bound)
  9818.                 {
  9819.                         return;
  9820.                 }
  9821.                 FLAG_N = (src < 0)<<7;
  9822.                 m68ki_exception_trap(EXCEPTION_CHK);
  9823.                 return;
  9824.         }
  9825.         m68ki_exception_illegal();
  9826. }
  9827.  
  9828.  
  9829. void m68k_op_chk_32_pcix(void)
  9830. {
  9831.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  9832.         {
  9833.                 sint src = MAKE_INT_32(DX);
  9834.                 sint bound = MAKE_INT_32(OPER_PCIX_32());
  9835.  
  9836.                 FLAG_Z = ZFLAG_32(src); /* Undocumented */
  9837.                 FLAG_V = VFLAG_CLEAR;   /* Undocumented */
  9838.                 FLAG_C = CFLAG_CLEAR;   /* Undocumented */
  9839.  
  9840.                 if(src >= 0 && src <= bound)
  9841.                 {
  9842.                         return;
  9843.                 }
  9844.                 FLAG_N = (src < 0)<<7;
  9845.                 m68ki_exception_trap(EXCEPTION_CHK);
  9846.                 return;
  9847.         }
  9848.         m68ki_exception_illegal();
  9849. }
  9850.  
  9851.  
  9852. void m68k_op_chk_32_i(void)
  9853. {
  9854.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  9855.         {
  9856.                 sint src = MAKE_INT_32(DX);
  9857.                 sint bound = MAKE_INT_32(OPER_I_32());
  9858.  
  9859.                 FLAG_Z = ZFLAG_32(src); /* Undocumented */
  9860.                 FLAG_V = VFLAG_CLEAR;   /* Undocumented */
  9861.                 FLAG_C = CFLAG_CLEAR;   /* Undocumented */
  9862.  
  9863.                 if(src >= 0 && src <= bound)
  9864.                 {
  9865.                         return;
  9866.                 }
  9867.                 FLAG_N = (src < 0)<<7;
  9868.                 m68ki_exception_trap(EXCEPTION_CHK);
  9869.                 return;
  9870.         }
  9871.         m68ki_exception_illegal();
  9872. }
  9873.  
  9874.  
  9875. void m68k_op_chk2cmp2_8_pcdi(void)
  9876. {
  9877.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  9878.         {
  9879.                 uint word2 = OPER_I_16();
  9880.                 uint compare = REG_DA[(word2 >> 12) & 15]&0xff;
  9881.                 uint ea = EA_PCDI_8();
  9882.                 uint lower_bound = m68ki_read_pcrel_8(ea);
  9883.                 uint upper_bound = m68ki_read_pcrel_8(ea + 1);
  9884.  
  9885.                 if(!BIT_F(word2))
  9886.                         FLAG_C = MAKE_INT_8(compare) - MAKE_INT_8(lower_bound);
  9887.                 else
  9888.                         FLAG_C = compare - lower_bound;
  9889.                 FLAG_Z = !((upper_bound==compare) | (lower_bound==compare));
  9890.                 if(COND_CS())
  9891.                 {
  9892.                         if(BIT_B(word2))
  9893.                                 m68ki_exception_trap(EXCEPTION_CHK);
  9894.                         return;
  9895.                 }
  9896.  
  9897.                 FLAG_C = upper_bound - compare;
  9898.                 if(COND_CS() && BIT_B(word2))
  9899.                                 m68ki_exception_trap(EXCEPTION_CHK);
  9900.                 return;
  9901.         }
  9902.         m68ki_exception_illegal();
  9903. }
  9904.  
  9905.  
  9906. void m68k_op_chk2cmp2_8_pcix(void)
  9907. {
  9908.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  9909.         {
  9910.                 uint word2 = OPER_I_16();
  9911.                 uint compare = REG_DA[(word2 >> 12) & 15]&0xff;
  9912.                 uint ea = EA_PCIX_8();
  9913.                 uint lower_bound = m68ki_read_pcrel_8(ea);
  9914.                 uint upper_bound = m68ki_read_pcrel_8(ea + 1);
  9915.  
  9916.                 if(!BIT_F(word2))
  9917.                         FLAG_C = MAKE_INT_8(compare) - MAKE_INT_8(lower_bound);
  9918.                 else
  9919.                         FLAG_C = compare - lower_bound;
  9920.                 FLAG_Z = !((upper_bound==compare) | (lower_bound==compare));
  9921.                 if(COND_CS())
  9922.                 {
  9923.                         if(BIT_B(word2))
  9924.                                 m68ki_exception_trap(EXCEPTION_CHK);
  9925.                         return;
  9926.                 }
  9927.  
  9928.                 FLAG_C = upper_bound - compare;
  9929.                 if(COND_CS() && BIT_B(word2))
  9930.                                 m68ki_exception_trap(EXCEPTION_CHK);
  9931.                 return;
  9932.         }
  9933.         m68ki_exception_illegal();
  9934. }
  9935.  
  9936.  
  9937. void m68k_op_chk2cmp2_8_ai(void)
  9938. {
  9939.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  9940.         {
  9941.                 uint word2 = OPER_I_16();
  9942.                 uint compare = REG_DA[(word2 >> 12) & 15]&0xff;
  9943.                 uint ea = EA_AY_AI_8();
  9944.                 uint lower_bound = m68ki_read_8(ea);
  9945.                 uint upper_bound = m68ki_read_8(ea + 1);
  9946.  
  9947.                 if(!BIT_F(word2))
  9948.                         FLAG_C = MAKE_INT_8(compare) - MAKE_INT_8(lower_bound);
  9949.                 else
  9950.                         FLAG_C = compare - lower_bound;
  9951.                 FLAG_Z = !((upper_bound==compare) | (lower_bound==compare));
  9952.                 if(COND_CS())
  9953.                 {
  9954.                         if(BIT_B(word2))
  9955.                                 m68ki_exception_trap(EXCEPTION_CHK);
  9956.                         return;
  9957.                 }
  9958.  
  9959.                 FLAG_C = upper_bound - compare;
  9960.                 if(COND_CS() && BIT_B(word2))
  9961.                                 m68ki_exception_trap(EXCEPTION_CHK);
  9962.                 return;
  9963.         }
  9964.         m68ki_exception_illegal();
  9965. }
  9966.  
  9967.  
  9968. void m68k_op_chk2cmp2_8_di(void)
  9969. {
  9970.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  9971.         {
  9972.                 uint word2 = OPER_I_16();
  9973.                 uint compare = REG_DA[(word2 >> 12) & 15]&0xff;
  9974.                 uint ea = EA_AY_DI_8();
  9975.                 uint lower_bound = m68ki_read_8(ea);
  9976.                 uint upper_bound = m68ki_read_8(ea + 1);
  9977.  
  9978.                 if(!BIT_F(word2))
  9979.                         FLAG_C = MAKE_INT_8(compare) - MAKE_INT_8(lower_bound);
  9980.                 else
  9981.                         FLAG_C = compare - lower_bound;
  9982.                 FLAG_Z = !((upper_bound==compare) | (lower_bound==compare));
  9983.                 if(COND_CS())
  9984.                 {
  9985.                         if(BIT_B(word2))
  9986.                                 m68ki_exception_trap(EXCEPTION_CHK);
  9987.                         return;
  9988.                 }
  9989.  
  9990.                 FLAG_C = upper_bound - compare;
  9991.                 if(COND_CS() && BIT_B(word2))
  9992.                                 m68ki_exception_trap(EXCEPTION_CHK);
  9993.                 return;
  9994.         }
  9995.         m68ki_exception_illegal();
  9996. }
  9997.  
  9998.  
  9999. void m68k_op_chk2cmp2_8_ix(void)
  10000. {
  10001.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  10002.         {
  10003.                 uint word2 = OPER_I_16();
  10004.                 uint compare = REG_DA[(word2 >> 12) & 15]&0xff;
  10005.                 uint ea = EA_AY_IX_8();
  10006.                 uint lower_bound = m68ki_read_8(ea);
  10007.                 uint upper_bound = m68ki_read_8(ea + 1);
  10008.  
  10009.                 if(!BIT_F(word2))
  10010.                         FLAG_C = MAKE_INT_8(compare) - MAKE_INT_8(lower_bound);
  10011.                 else
  10012.                         FLAG_C = compare - lower_bound;
  10013.                 FLAG_Z = !((upper_bound==compare) | (lower_bound==compare));
  10014.                 if(COND_CS())
  10015.                 {
  10016.                         if(BIT_B(word2))
  10017.                                 m68ki_exception_trap(EXCEPTION_CHK);
  10018.                         return;
  10019.                 }
  10020.  
  10021.                 FLAG_C = upper_bound - compare;
  10022.                 if(COND_CS() && BIT_B(word2))
  10023.                                 m68ki_exception_trap(EXCEPTION_CHK);
  10024.                 return;
  10025.         }
  10026.         m68ki_exception_illegal();
  10027. }
  10028.  
  10029.  
  10030. void m68k_op_chk2cmp2_8_aw(void)
  10031. {
  10032.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  10033.         {
  10034.                 uint word2 = OPER_I_16();
  10035.                 uint compare = REG_DA[(word2 >> 12) & 15]&0xff;
  10036.                 uint ea = EA_AW_8();
  10037.                 uint lower_bound = m68ki_read_8(ea);
  10038.                 uint upper_bound = m68ki_read_8(ea + 1);
  10039.  
  10040.                 if(!BIT_F(word2))
  10041.                         FLAG_C = MAKE_INT_8(compare) - MAKE_INT_8(lower_bound);
  10042.                 else
  10043.                         FLAG_C = compare - lower_bound;
  10044.                 FLAG_Z = !((upper_bound==compare) | (lower_bound==compare));
  10045.                 if(COND_CS())
  10046.                 {
  10047.                         if(BIT_B(word2))
  10048.                                 m68ki_exception_trap(EXCEPTION_CHK);
  10049.                         return;
  10050.                 }
  10051.  
  10052.                 FLAG_C = upper_bound - compare;
  10053.                 if(COND_CS() && BIT_B(word2))
  10054.                                 m68ki_exception_trap(EXCEPTION_CHK);
  10055.                 return;
  10056.         }
  10057.         m68ki_exception_illegal();
  10058. }
  10059.  
  10060.  
  10061. void m68k_op_chk2cmp2_8_al(void)
  10062. {
  10063.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  10064.         {
  10065.                 uint word2 = OPER_I_16();
  10066.                 uint compare = REG_DA[(word2 >> 12) & 15]&0xff;
  10067.                 uint ea = EA_AL_8();
  10068.                 uint lower_bound = m68ki_read_8(ea);
  10069.                 uint upper_bound = m68ki_read_8(ea + 1);
  10070.  
  10071.                 if(!BIT_F(word2))
  10072.                         FLAG_C = MAKE_INT_8(compare) - MAKE_INT_8(lower_bound);
  10073.                 else
  10074.                         FLAG_C = compare - lower_bound;
  10075.                 FLAG_Z = !((upper_bound==compare) | (lower_bound==compare));
  10076.                 if(COND_CS())
  10077.                 {
  10078.                         if(BIT_B(word2))
  10079.                                 m68ki_exception_trap(EXCEPTION_CHK);
  10080.                         return;
  10081.                 }
  10082.  
  10083.                 FLAG_C = upper_bound - compare;
  10084.                 if(COND_CS() && BIT_B(word2))
  10085.                                 m68ki_exception_trap(EXCEPTION_CHK);
  10086.                 return;
  10087.         }
  10088.         m68ki_exception_illegal();
  10089. }
  10090.  
  10091.  
  10092. void m68k_op_chk2cmp2_16_pcdi(void)
  10093. {
  10094.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  10095.         {
  10096.                 uint word2 = OPER_I_16();
  10097.                 uint compare = REG_DA[(word2 >> 12) & 15]&0xffff;
  10098.                 uint ea = EA_PCDI_16();
  10099.                 uint lower_bound = m68ki_read_pcrel_16(ea);
  10100.                 uint upper_bound = m68ki_read_pcrel_16(ea + 2);
  10101.  
  10102.                 if(!BIT_F(word2))
  10103.                         FLAG_C = MAKE_INT_16(compare) - MAKE_INT_16(lower_bound);
  10104.                 else
  10105.                         FLAG_C = compare - lower_bound;
  10106.                 FLAG_Z = !((upper_bound==compare) | (lower_bound==compare));
  10107.                 FLAG_C = CFLAG_16(FLAG_C);
  10108.                 if(COND_CS())
  10109.                 {
  10110.                         if(BIT_B(word2))
  10111.                                 m68ki_exception_trap(EXCEPTION_CHK);
  10112.                         return;
  10113.                 }
  10114.  
  10115.                 if(!BIT_F(word2))
  10116.                         FLAG_C = MAKE_INT_16(upper_bound) - MAKE_INT_16(compare);
  10117.                 else
  10118.                         FLAG_C = upper_bound - compare;
  10119.                 FLAG_C = CFLAG_16(FLAG_C);
  10120.                 if(COND_CS() && BIT_B(word2))
  10121.                                 m68ki_exception_trap(EXCEPTION_CHK);
  10122.                 return;
  10123.         }
  10124.         m68ki_exception_illegal();
  10125. }
  10126.  
  10127.  
  10128. void m68k_op_chk2cmp2_16_pcix(void)
  10129. {
  10130.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  10131.         {
  10132.                 uint word2 = OPER_I_16();
  10133.                 uint compare = REG_DA[(word2 >> 12) & 15]&0xffff;
  10134.                 uint ea = EA_PCIX_16();
  10135.                 uint lower_bound = m68ki_read_pcrel_16(ea);
  10136.                 uint upper_bound = m68ki_read_pcrel_16(ea + 2);
  10137.  
  10138.                 if(!BIT_F(word2))
  10139.                         FLAG_C = MAKE_INT_16(compare) - MAKE_INT_16(lower_bound);
  10140.                 else
  10141.                         FLAG_C = compare - lower_bound;
  10142.                 FLAG_Z = !((upper_bound==compare) | (lower_bound==compare));
  10143.                 FLAG_C = CFLAG_16(FLAG_C);
  10144.                 if(COND_CS())
  10145.                 {
  10146.                         if(BIT_B(word2))
  10147.                                 m68ki_exception_trap(EXCEPTION_CHK);
  10148.                         return;
  10149.                 }
  10150.  
  10151.                 if(!BIT_F(word2))
  10152.                         FLAG_C = MAKE_INT_16(upper_bound) - MAKE_INT_16(compare);
  10153.                 else
  10154.                         FLAG_C = upper_bound - compare;
  10155.                 FLAG_C = CFLAG_16(FLAG_C);
  10156.                 if(COND_CS() && BIT_B(word2))
  10157.                                 m68ki_exception_trap(EXCEPTION_CHK);
  10158.                 return;
  10159.         }
  10160.         m68ki_exception_illegal();
  10161. }
  10162.  
  10163.  
  10164. void m68k_op_chk2cmp2_16_ai(void)
  10165. {
  10166.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  10167.         {
  10168.                 uint word2 = OPER_I_16();
  10169.                 uint compare = REG_DA[(word2 >> 12) & 15]&0xffff;
  10170.                 uint ea = EA_AY_AI_16();
  10171.                 uint lower_bound = m68ki_read_16(ea);
  10172.                 uint upper_bound = m68ki_read_16(ea + 2);
  10173.  
  10174.                 if(!BIT_F(word2))
  10175.                         FLAG_C = MAKE_INT_16(compare) - MAKE_INT_16(lower_bound);
  10176.                 else
  10177.                         FLAG_C = compare - lower_bound;
  10178.  
  10179.                 FLAG_Z = !((upper_bound==compare) | (lower_bound==compare));
  10180.                 FLAG_C = CFLAG_16(FLAG_C);
  10181.                 if(COND_CS())
  10182.                 {
  10183.                         if(BIT_B(word2))
  10184.                                 m68ki_exception_trap(EXCEPTION_CHK);
  10185.                         return;
  10186.                 }
  10187.                 if(!BIT_F(word2))
  10188.                         FLAG_C = MAKE_INT_16(upper_bound) - MAKE_INT_16(compare);
  10189.                 else
  10190.                         FLAG_C = upper_bound - compare;
  10191.  
  10192.                 FLAG_C = CFLAG_16(FLAG_C);
  10193.                 if(COND_CS() && BIT_B(word2))
  10194.                                 m68ki_exception_trap(EXCEPTION_CHK);
  10195.                 return;
  10196.         }
  10197.         m68ki_exception_illegal();
  10198. }
  10199.  
  10200.  
  10201. void m68k_op_chk2cmp2_16_di(void)
  10202. {
  10203.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  10204.         {
  10205.                 uint word2 = OPER_I_16();
  10206.                 uint compare = REG_DA[(word2 >> 12) & 15]&0xffff;
  10207.                 uint ea = EA_AY_DI_16();
  10208.                 uint lower_bound = m68ki_read_16(ea);
  10209.                 uint upper_bound = m68ki_read_16(ea + 2);
  10210.  
  10211.                 if(!BIT_F(word2))
  10212.                         FLAG_C = MAKE_INT_16(compare) - MAKE_INT_16(lower_bound);
  10213.                 else
  10214.                         FLAG_C = compare - lower_bound;
  10215.  
  10216.                 FLAG_Z = !((upper_bound==compare) | (lower_bound==compare));
  10217.                 FLAG_C = CFLAG_16(FLAG_C);
  10218.                 if(COND_CS())
  10219.                 {
  10220.                         if(BIT_B(word2))
  10221.                                 m68ki_exception_trap(EXCEPTION_CHK);
  10222.                         return;
  10223.                 }
  10224.                 if(!BIT_F(word2))
  10225.                         FLAG_C = MAKE_INT_16(upper_bound) - MAKE_INT_16(compare);
  10226.                 else
  10227.                         FLAG_C = upper_bound - compare;
  10228.  
  10229.                 FLAG_C = CFLAG_16(FLAG_C);
  10230.                 if(COND_CS() && BIT_B(word2))
  10231.                                 m68ki_exception_trap(EXCEPTION_CHK);
  10232.                 return;
  10233.         }
  10234.         m68ki_exception_illegal();
  10235. }
  10236.  
  10237.  
  10238. void m68k_op_chk2cmp2_16_ix(void)
  10239. {
  10240.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  10241.         {
  10242.                 uint word2 = OPER_I_16();
  10243.                 uint compare = REG_DA[(word2 >> 12) & 15]&0xffff;
  10244.                 uint ea = EA_AY_IX_16();
  10245.                 uint lower_bound = m68ki_read_16(ea);
  10246.                 uint upper_bound = m68ki_read_16(ea + 2);
  10247.  
  10248.                 if(!BIT_F(word2))
  10249.                         FLAG_C = MAKE_INT_16(compare) - MAKE_INT_16(lower_bound);
  10250.                 else
  10251.                         FLAG_C = compare - lower_bound;
  10252.  
  10253.                 FLAG_Z = !((upper_bound==compare) | (lower_bound==compare));
  10254.                 FLAG_C = CFLAG_16(FLAG_C);
  10255.                 if(COND_CS())
  10256.                 {
  10257.                         if(BIT_B(word2))
  10258.                                 m68ki_exception_trap(EXCEPTION_CHK);
  10259.                         return;
  10260.                 }
  10261.                 if(!BIT_F(word2))
  10262.                         FLAG_C = MAKE_INT_16(upper_bound) - MAKE_INT_16(compare);
  10263.                 else
  10264.                         FLAG_C = upper_bound - compare;
  10265.  
  10266.                 FLAG_C = CFLAG_16(FLAG_C);
  10267.                 if(COND_CS() && BIT_B(word2))
  10268.                                 m68ki_exception_trap(EXCEPTION_CHK);
  10269.                 return;
  10270.         }
  10271.         m68ki_exception_illegal();
  10272. }
  10273.  
  10274.  
  10275. void m68k_op_chk2cmp2_16_aw(void)
  10276. {
  10277.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  10278.         {
  10279.                 uint word2 = OPER_I_16();
  10280.                 uint compare = REG_DA[(word2 >> 12) & 15]&0xffff;
  10281.                 uint ea = EA_AW_16();
  10282.                 uint lower_bound = m68ki_read_16(ea);
  10283.                 uint upper_bound = m68ki_read_16(ea + 2);
  10284.  
  10285.                 if(!BIT_F(word2))
  10286.                         FLAG_C = MAKE_INT_16(compare) - MAKE_INT_16(lower_bound);
  10287.                 else
  10288.                         FLAG_C = compare - lower_bound;
  10289.  
  10290.                 FLAG_Z = !((upper_bound==compare) | (lower_bound==compare));
  10291.                 FLAG_C = CFLAG_16(FLAG_C);
  10292.                 if(COND_CS())
  10293.                 {
  10294.                         if(BIT_B(word2))
  10295.                                 m68ki_exception_trap(EXCEPTION_CHK);
  10296.                         return;
  10297.                 }
  10298.                 if(!BIT_F(word2))
  10299.                         FLAG_C = MAKE_INT_16(upper_bound) - MAKE_INT_16(compare);
  10300.                 else
  10301.                         FLAG_C = upper_bound - compare;
  10302.  
  10303.                 FLAG_C = CFLAG_16(FLAG_C);
  10304.                 if(COND_CS() && BIT_B(word2))
  10305.                                 m68ki_exception_trap(EXCEPTION_CHK);
  10306.                 return;
  10307.         }
  10308.         m68ki_exception_illegal();
  10309. }
  10310.  
  10311.  
  10312. void m68k_op_chk2cmp2_16_al(void)
  10313. {
  10314.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  10315.         {
  10316.                 uint word2 = OPER_I_16();
  10317.                 uint compare = REG_DA[(word2 >> 12) & 15]&0xffff;
  10318.                 uint ea = EA_AL_16();
  10319.                 uint lower_bound = m68ki_read_16(ea);
  10320.                 uint upper_bound = m68ki_read_16(ea + 2);
  10321.  
  10322.                 if(!BIT_F(word2))
  10323.                         FLAG_C = MAKE_INT_16(compare) - MAKE_INT_16(lower_bound);
  10324.                 else
  10325.                         FLAG_C = compare - lower_bound;
  10326.  
  10327.                 FLAG_Z = !((upper_bound==compare) | (lower_bound==compare));
  10328.                 FLAG_C = CFLAG_16(FLAG_C);
  10329.                 if(COND_CS())
  10330.                 {
  10331.                         if(BIT_B(word2))
  10332.                                 m68ki_exception_trap(EXCEPTION_CHK);
  10333.                         return;
  10334.                 }
  10335.                 if(!BIT_F(word2))
  10336.                         FLAG_C = MAKE_INT_16(upper_bound) - MAKE_INT_16(compare);
  10337.                 else
  10338.                         FLAG_C = upper_bound - compare;
  10339.  
  10340.                 FLAG_C = CFLAG_16(FLAG_C);
  10341.                 if(COND_CS() && BIT_B(word2))
  10342.                                 m68ki_exception_trap(EXCEPTION_CHK);
  10343.                 return;
  10344.         }
  10345.         m68ki_exception_illegal();
  10346. }
  10347.  
  10348.  
  10349. void m68k_op_chk2cmp2_32_pcdi(void)
  10350. {
  10351.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  10352.         {
  10353.                 uint word2 = OPER_I_16();
  10354.                 uint compare = REG_DA[(word2 >> 12) & 15];
  10355.                 uint ea = EA_PCDI_32();
  10356.                 uint lower_bound = m68ki_read_pcrel_32(ea);
  10357.                 uint upper_bound = m68ki_read_pcrel_32(ea + 4);
  10358.  
  10359.                 FLAG_C = compare - lower_bound;
  10360.                 FLAG_Z = !((upper_bound==compare) | (lower_bound==compare));
  10361.                 FLAG_C = CFLAG_SUB_32(lower_bound, compare, FLAG_C);
  10362.                 if(COND_CS())
  10363.                 {
  10364.                         if(BIT_B(word2))
  10365.                                 m68ki_exception_trap(EXCEPTION_CHK);
  10366.                         return;
  10367.                 }
  10368.  
  10369.                 FLAG_C = upper_bound - compare;
  10370.                 FLAG_C = CFLAG_SUB_32(compare, upper_bound, FLAG_C);
  10371.                 if(COND_CS() && BIT_B(word2))
  10372.                                 m68ki_exception_trap(EXCEPTION_CHK);
  10373.                 return;
  10374.         }
  10375.         m68ki_exception_illegal();
  10376. }
  10377.  
  10378.  
  10379. void m68k_op_chk2cmp2_32_pcix(void)
  10380. {
  10381.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  10382.         {
  10383.                 uint word2 = OPER_I_16();
  10384.                 uint compare = REG_DA[(word2 >> 12) & 15];
  10385.                 uint ea = EA_PCIX_32();
  10386.                 uint lower_bound = m68ki_read_pcrel_32(ea);
  10387.                 uint upper_bound = m68ki_read_pcrel_32(ea + 4);
  10388.  
  10389.                 FLAG_C = compare - lower_bound;
  10390.                 FLAG_Z = !((upper_bound==compare) | (lower_bound==compare));
  10391.                 FLAG_C = CFLAG_SUB_32(lower_bound, compare, FLAG_C);
  10392.                 if(COND_CS())
  10393.                 {
  10394.                         if(BIT_B(word2))
  10395.                                 m68ki_exception_trap(EXCEPTION_CHK);
  10396.                         return;
  10397.                 }
  10398.  
  10399.                 FLAG_C = upper_bound - compare;
  10400.                 FLAG_C = CFLAG_SUB_32(compare, upper_bound, FLAG_C);
  10401.                 if(COND_CS() && BIT_B(word2))
  10402.                                 m68ki_exception_trap(EXCEPTION_CHK);
  10403.                 return;
  10404.         }
  10405.         m68ki_exception_illegal();
  10406. }
  10407.  
  10408.  
  10409. void m68k_op_chk2cmp2_32_ai(void)
  10410. {
  10411.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  10412.         {
  10413.                 uint word2 = OPER_I_16();
  10414.                 uint compare = REG_DA[(word2 >> 12) & 15];
  10415.                 uint ea = EA_AY_AI_32();
  10416.                 uint lower_bound = m68ki_read_32(ea);
  10417.                 uint upper_bound = m68ki_read_32(ea + 4);
  10418.  
  10419.                 FLAG_C = compare - lower_bound;
  10420.                 FLAG_Z = !((upper_bound==compare) | (lower_bound==compare));
  10421.                 FLAG_C = CFLAG_SUB_32(lower_bound, compare, FLAG_C);
  10422.                 if(COND_CS())
  10423.                 {
  10424.                         if(BIT_B(word2))
  10425.                                 m68ki_exception_trap(EXCEPTION_CHK);
  10426.                         return;
  10427.                 }
  10428.  
  10429.                 FLAG_C = upper_bound - compare;
  10430.                 FLAG_C = CFLAG_SUB_32(compare, upper_bound, FLAG_C);
  10431.                 if(COND_CS() && BIT_B(word2))
  10432.                                 m68ki_exception_trap(EXCEPTION_CHK);
  10433.                 return;
  10434.         }
  10435.         m68ki_exception_illegal();
  10436. }
  10437.  
  10438.  
  10439. void m68k_op_chk2cmp2_32_di(void)
  10440. {
  10441.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  10442.         {
  10443.                 uint word2 = OPER_I_16();
  10444.                 uint compare = REG_DA[(word2 >> 12) & 15];
  10445.                 uint ea = EA_AY_DI_32();
  10446.                 uint lower_bound = m68ki_read_32(ea);
  10447.                 uint upper_bound = m68ki_read_32(ea + 4);
  10448.  
  10449.                 FLAG_C = compare - lower_bound;
  10450.                 FLAG_Z = !((upper_bound==compare) | (lower_bound==compare));
  10451.                 FLAG_C = CFLAG_SUB_32(lower_bound, compare, FLAG_C);
  10452.                 if(COND_CS())
  10453.                 {
  10454.                         if(BIT_B(word2))
  10455.                                 m68ki_exception_trap(EXCEPTION_CHK);
  10456.                         return;
  10457.                 }
  10458.  
  10459.                 FLAG_C = upper_bound - compare;
  10460.                 FLAG_C = CFLAG_SUB_32(compare, upper_bound, FLAG_C);
  10461.                 if(COND_CS() && BIT_B(word2))
  10462.                                 m68ki_exception_trap(EXCEPTION_CHK);
  10463.                 return;
  10464.         }
  10465.         m68ki_exception_illegal();
  10466. }
  10467.  
  10468.  
  10469. void m68k_op_chk2cmp2_32_ix(void)
  10470. {
  10471.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  10472.         {
  10473.                 uint word2 = OPER_I_16();
  10474.                 uint compare = REG_DA[(word2 >> 12) & 15];
  10475.                 uint ea = EA_AY_IX_32();
  10476.                 uint lower_bound = m68ki_read_32(ea);
  10477.                 uint upper_bound = m68ki_read_32(ea + 4);
  10478.  
  10479.                 FLAG_C = compare - lower_bound;
  10480.                 FLAG_Z = !((upper_bound==compare) | (lower_bound==compare));
  10481.                 FLAG_C = CFLAG_SUB_32(lower_bound, compare, FLAG_C);
  10482.                 if(COND_CS())
  10483.                 {
  10484.                         if(BIT_B(word2))
  10485.                                 m68ki_exception_trap(EXCEPTION_CHK);
  10486.                         return;
  10487.                 }
  10488.  
  10489.                 FLAG_C = upper_bound - compare;
  10490.                 FLAG_C = CFLAG_SUB_32(compare, upper_bound, FLAG_C);
  10491.                 if(COND_CS() && BIT_B(word2))
  10492.                                 m68ki_exception_trap(EXCEPTION_CHK);
  10493.                 return;
  10494.         }
  10495.         m68ki_exception_illegal();
  10496. }
  10497.  
  10498.  
  10499. void m68k_op_chk2cmp2_32_aw(void)
  10500. {
  10501.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  10502.         {
  10503.                 uint word2 = OPER_I_16();
  10504.                 uint compare = REG_DA[(word2 >> 12) & 15];
  10505.                 uint ea = EA_AW_32();
  10506.                 uint lower_bound = m68ki_read_32(ea);
  10507.                 uint upper_bound = m68ki_read_32(ea + 4);
  10508.  
  10509.                 FLAG_C = compare - lower_bound;
  10510.                 FLAG_Z = !((upper_bound==compare) | (lower_bound==compare));
  10511.                 FLAG_C = CFLAG_SUB_32(lower_bound, compare, FLAG_C);
  10512.                 if(COND_CS())
  10513.                 {
  10514.                         if(BIT_B(word2))
  10515.                                 m68ki_exception_trap(EXCEPTION_CHK);
  10516.                         return;
  10517.                 }
  10518.  
  10519.                 FLAG_C = upper_bound - compare;
  10520.                 FLAG_C = CFLAG_SUB_32(compare, upper_bound, FLAG_C);
  10521.                 if(COND_CS() && BIT_B(word2))
  10522.                                 m68ki_exception_trap(EXCEPTION_CHK);
  10523.                 return;
  10524.         }
  10525.         m68ki_exception_illegal();
  10526. }
  10527.  
  10528.  
  10529. void m68k_op_chk2cmp2_32_al(void)
  10530. {
  10531.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  10532.         {
  10533.                 uint word2 = OPER_I_16();
  10534.                 uint compare = REG_DA[(word2 >> 12) & 15];
  10535.                 uint ea = EA_AL_32();
  10536.                 uint lower_bound = m68ki_read_32(ea);
  10537.                 uint upper_bound = m68ki_read_32(ea + 4);
  10538.  
  10539.                 FLAG_C = compare - lower_bound;
  10540.                 FLAG_Z = !((upper_bound==compare) | (lower_bound==compare));
  10541.                 FLAG_C = CFLAG_SUB_32(lower_bound, compare, FLAG_C);
  10542.                 if(COND_CS())
  10543.                 {
  10544.                         if(BIT_B(word2))
  10545.                                 m68ki_exception_trap(EXCEPTION_CHK);
  10546.                         return;
  10547.                 }
  10548.  
  10549.                 FLAG_C = upper_bound - compare;
  10550.                 FLAG_C = CFLAG_SUB_32(compare, upper_bound, FLAG_C);
  10551.                 if(COND_CS() && BIT_B(word2))
  10552.                                 m68ki_exception_trap(EXCEPTION_CHK);
  10553.                 return;
  10554.         }
  10555.         m68ki_exception_illegal();
  10556. }
  10557.  
  10558.  
  10559. void m68k_op_clr_8_d(void)
  10560. {
  10561.         DY &= 0xffffff00;
  10562.  
  10563.         FLAG_N = NFLAG_CLEAR;
  10564.         FLAG_V = VFLAG_CLEAR;
  10565.         FLAG_C = CFLAG_CLEAR;
  10566.         FLAG_Z = ZFLAG_SET;
  10567. }
  10568.  
  10569.  
  10570. void m68k_op_clr_8_ai(void)
  10571. {
  10572.         m68ki_write_8(EA_AY_AI_8(), 0);
  10573.  
  10574.         FLAG_N = NFLAG_CLEAR;
  10575.         FLAG_V = VFLAG_CLEAR;
  10576.         FLAG_C = CFLAG_CLEAR;
  10577.         FLAG_Z = ZFLAG_SET;
  10578. }
  10579.  
  10580.  
  10581. void m68k_op_clr_8_pi(void)
  10582. {
  10583.         m68ki_write_8(EA_AY_PI_8(), 0);
  10584.  
  10585.         FLAG_N = NFLAG_CLEAR;
  10586.         FLAG_V = VFLAG_CLEAR;
  10587.         FLAG_C = CFLAG_CLEAR;
  10588.         FLAG_Z = ZFLAG_SET;
  10589. }
  10590.  
  10591.  
  10592. void m68k_op_clr_8_pi7(void)
  10593. {
  10594.         m68ki_write_8(EA_A7_PI_8(), 0);
  10595.  
  10596.         FLAG_N = NFLAG_CLEAR;
  10597.         FLAG_V = VFLAG_CLEAR;
  10598.         FLAG_C = CFLAG_CLEAR;
  10599.         FLAG_Z = ZFLAG_SET;
  10600. }
  10601.  
  10602.  
  10603. void m68k_op_clr_8_pd(void)
  10604. {
  10605.         m68ki_write_8(EA_AY_PD_8(), 0);
  10606.  
  10607.         FLAG_N = NFLAG_CLEAR;
  10608.         FLAG_V = VFLAG_CLEAR;
  10609.         FLAG_C = CFLAG_CLEAR;
  10610.         FLAG_Z = ZFLAG_SET;
  10611. }
  10612.  
  10613.  
  10614. void m68k_op_clr_8_pd7(void)
  10615. {
  10616.         m68ki_write_8(EA_A7_PD_8(), 0);
  10617.  
  10618.         FLAG_N = NFLAG_CLEAR;
  10619.         FLAG_V = VFLAG_CLEAR;
  10620.         FLAG_C = CFLAG_CLEAR;
  10621.         FLAG_Z = ZFLAG_SET;
  10622. }
  10623.  
  10624.  
  10625. void m68k_op_clr_8_di(void)
  10626. {
  10627.         m68ki_write_8(EA_AY_DI_8(), 0);
  10628.  
  10629.         FLAG_N = NFLAG_CLEAR;
  10630.         FLAG_V = VFLAG_CLEAR;
  10631.         FLAG_C = CFLAG_CLEAR;
  10632.         FLAG_Z = ZFLAG_SET;
  10633. }
  10634.  
  10635.  
  10636. void m68k_op_clr_8_ix(void)
  10637. {
  10638.         m68ki_write_8(EA_AY_IX_8(), 0);
  10639.  
  10640.         FLAG_N = NFLAG_CLEAR;
  10641.         FLAG_V = VFLAG_CLEAR;
  10642.         FLAG_C = CFLAG_CLEAR;
  10643.         FLAG_Z = ZFLAG_SET;
  10644. }
  10645.  
  10646.  
  10647. void m68k_op_clr_8_aw(void)
  10648. {
  10649.         m68ki_write_8(EA_AW_8(), 0);
  10650.  
  10651.         FLAG_N = NFLAG_CLEAR;
  10652.         FLAG_V = VFLAG_CLEAR;
  10653.         FLAG_C = CFLAG_CLEAR;
  10654.         FLAG_Z = ZFLAG_SET;
  10655. }
  10656.  
  10657.  
  10658. void m68k_op_clr_8_al(void)
  10659. {
  10660.         m68ki_write_8(EA_AL_8(), 0);
  10661.  
  10662.         FLAG_N = NFLAG_CLEAR;
  10663.         FLAG_V = VFLAG_CLEAR;
  10664.         FLAG_C = CFLAG_CLEAR;
  10665.         FLAG_Z = ZFLAG_SET;
  10666. }
  10667.  
  10668.  
  10669. void m68k_op_clr_16_d(void)
  10670. {
  10671.         DY &= 0xffff0000;
  10672.  
  10673.         FLAG_N = NFLAG_CLEAR;
  10674.         FLAG_V = VFLAG_CLEAR;
  10675.         FLAG_C = CFLAG_CLEAR;
  10676.         FLAG_Z = ZFLAG_SET;
  10677. }
  10678.  
  10679.  
  10680. void m68k_op_clr_16_ai(void)
  10681. {
  10682.         m68ki_write_16(EA_AY_AI_16(), 0);
  10683.  
  10684.         FLAG_N = NFLAG_CLEAR;
  10685.         FLAG_V = VFLAG_CLEAR;
  10686.         FLAG_C = CFLAG_CLEAR;
  10687.         FLAG_Z = ZFLAG_SET;
  10688. }
  10689.  
  10690.  
  10691. void m68k_op_clr_16_pi(void)
  10692. {
  10693.         m68ki_write_16(EA_AY_PI_16(), 0);
  10694.  
  10695.         FLAG_N = NFLAG_CLEAR;
  10696.         FLAG_V = VFLAG_CLEAR;
  10697.         FLAG_C = CFLAG_CLEAR;
  10698.         FLAG_Z = ZFLAG_SET;
  10699. }
  10700.  
  10701.  
  10702. void m68k_op_clr_16_pd(void)
  10703. {
  10704.         m68ki_write_16(EA_AY_PD_16(), 0);
  10705.  
  10706.         FLAG_N = NFLAG_CLEAR;
  10707.         FLAG_V = VFLAG_CLEAR;
  10708.         FLAG_C = CFLAG_CLEAR;
  10709.         FLAG_Z = ZFLAG_SET;
  10710. }
  10711.  
  10712.  
  10713. void m68k_op_clr_16_di(void)
  10714. {
  10715.         m68ki_write_16(EA_AY_DI_16(), 0);
  10716.  
  10717.         FLAG_N = NFLAG_CLEAR;
  10718.         FLAG_V = VFLAG_CLEAR;
  10719.         FLAG_C = CFLAG_CLEAR;
  10720.         FLAG_Z = ZFLAG_SET;
  10721. }
  10722.  
  10723.  
  10724. void m68k_op_clr_16_ix(void)
  10725. {
  10726.         m68ki_write_16(EA_AY_IX_16(), 0);
  10727.  
  10728.         FLAG_N = NFLAG_CLEAR;
  10729.         FLAG_V = VFLAG_CLEAR;
  10730.         FLAG_C = CFLAG_CLEAR;
  10731.         FLAG_Z = ZFLAG_SET;
  10732. }
  10733.  
  10734.  
  10735. void m68k_op_clr_16_aw(void)
  10736. {
  10737.         m68ki_write_16(EA_AW_16(), 0);
  10738.  
  10739.         FLAG_N = NFLAG_CLEAR;
  10740.         FLAG_V = VFLAG_CLEAR;
  10741.         FLAG_C = CFLAG_CLEAR;
  10742.         FLAG_Z = ZFLAG_SET;
  10743. }
  10744.  
  10745.  
  10746. void m68k_op_clr_16_al(void)
  10747. {
  10748.         m68ki_write_16(EA_AL_16(), 0);
  10749.  
  10750.         FLAG_N = NFLAG_CLEAR;
  10751.         FLAG_V = VFLAG_CLEAR;
  10752.         FLAG_C = CFLAG_CLEAR;
  10753.         FLAG_Z = ZFLAG_SET;
  10754. }
  10755.  
  10756.  
  10757. void m68k_op_clr_32_d(void)
  10758. {
  10759.         DY = 0;
  10760.  
  10761.         FLAG_N = NFLAG_CLEAR;
  10762.         FLAG_V = VFLAG_CLEAR;
  10763.         FLAG_C = CFLAG_CLEAR;
  10764.         FLAG_Z = ZFLAG_SET;
  10765. }
  10766.  
  10767.  
  10768. void m68k_op_clr_32_ai(void)
  10769. {
  10770.         m68ki_write_32(EA_AY_AI_32(), 0);
  10771.  
  10772.         FLAG_N = NFLAG_CLEAR;
  10773.         FLAG_V = VFLAG_CLEAR;
  10774.         FLAG_C = CFLAG_CLEAR;
  10775.         FLAG_Z = ZFLAG_SET;
  10776. }
  10777.  
  10778.  
  10779. void m68k_op_clr_32_pi(void)
  10780. {
  10781.         m68ki_write_32(EA_AY_PI_32(), 0);
  10782.  
  10783.         FLAG_N = NFLAG_CLEAR;
  10784.         FLAG_V = VFLAG_CLEAR;
  10785.         FLAG_C = CFLAG_CLEAR;
  10786.         FLAG_Z = ZFLAG_SET;
  10787. }
  10788.  
  10789.  
  10790. void m68k_op_clr_32_pd(void)
  10791. {
  10792.         m68ki_write_32(EA_AY_PD_32(), 0);
  10793.  
  10794.         FLAG_N = NFLAG_CLEAR;
  10795.         FLAG_V = VFLAG_CLEAR;
  10796.         FLAG_C = CFLAG_CLEAR;
  10797.         FLAG_Z = ZFLAG_SET;
  10798. }
  10799.  
  10800.  
  10801. void m68k_op_clr_32_di(void)
  10802. {
  10803.         m68ki_write_32(EA_AY_DI_32(), 0);
  10804.  
  10805.         FLAG_N = NFLAG_CLEAR;
  10806.         FLAG_V = VFLAG_CLEAR;
  10807.         FLAG_C = CFLAG_CLEAR;
  10808.         FLAG_Z = ZFLAG_SET;
  10809. }
  10810.  
  10811.  
  10812. void m68k_op_clr_32_ix(void)
  10813. {
  10814.         m68ki_write_32(EA_AY_IX_32(), 0);
  10815.  
  10816.         FLAG_N = NFLAG_CLEAR;
  10817.         FLAG_V = VFLAG_CLEAR;
  10818.         FLAG_C = CFLAG_CLEAR;
  10819.         FLAG_Z = ZFLAG_SET;
  10820. }
  10821.  
  10822.  
  10823. void m68k_op_clr_32_aw(void)
  10824. {
  10825.         m68ki_write_32(EA_AW_32(), 0);
  10826.  
  10827.         FLAG_N = NFLAG_CLEAR;
  10828.         FLAG_V = VFLAG_CLEAR;
  10829.         FLAG_C = CFLAG_CLEAR;
  10830.         FLAG_Z = ZFLAG_SET;
  10831. }
  10832.  
  10833.  
  10834. void m68k_op_clr_32_al(void)
  10835. {
  10836.         m68ki_write_32(EA_AL_32(), 0);
  10837.  
  10838.         FLAG_N = NFLAG_CLEAR;
  10839.         FLAG_V = VFLAG_CLEAR;
  10840.         FLAG_C = CFLAG_CLEAR;
  10841.         FLAG_Z = ZFLAG_SET;
  10842. }
  10843.  
  10844.  
  10845. void m68k_op_cmp_8_d(void)
  10846. {
  10847.         uint src = MASK_OUT_ABOVE_8(DY);
  10848.         uint dst = MASK_OUT_ABOVE_8(DX);
  10849.         uint res = dst - src;
  10850.  
  10851.         FLAG_N = NFLAG_8(res);
  10852.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  10853.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  10854.         FLAG_C = CFLAG_8(res);
  10855. }
  10856.  
  10857.  
  10858. void m68k_op_cmp_8_ai(void)
  10859. {
  10860.         uint src = OPER_AY_AI_8();
  10861.         uint dst = MASK_OUT_ABOVE_8(DX);
  10862.         uint res = dst - src;
  10863.  
  10864.         FLAG_N = NFLAG_8(res);
  10865.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  10866.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  10867.         FLAG_C = CFLAG_8(res);
  10868. }
  10869.  
  10870.  
  10871. void m68k_op_cmp_8_pi(void)
  10872. {
  10873.         uint src = OPER_AY_PI_8();
  10874.         uint dst = MASK_OUT_ABOVE_8(DX);
  10875.         uint res = dst - src;
  10876.  
  10877.         FLAG_N = NFLAG_8(res);
  10878.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  10879.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  10880.         FLAG_C = CFLAG_8(res);
  10881. }
  10882.  
  10883.  
  10884. void m68k_op_cmp_8_pi7(void)
  10885. {
  10886.         uint src = OPER_A7_PI_8();
  10887.         uint dst = MASK_OUT_ABOVE_8(DX);
  10888.         uint res = dst - src;
  10889.  
  10890.         FLAG_N = NFLAG_8(res);
  10891.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  10892.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  10893.         FLAG_C = CFLAG_8(res);
  10894. }
  10895.  
  10896.  
  10897. void m68k_op_cmp_8_pd(void)
  10898. {
  10899.         uint src = OPER_AY_PD_8();
  10900.         uint dst = MASK_OUT_ABOVE_8(DX);
  10901.         uint res = dst - src;
  10902.  
  10903.         FLAG_N = NFLAG_8(res);
  10904.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  10905.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  10906.         FLAG_C = CFLAG_8(res);
  10907. }
  10908.  
  10909.  
  10910. void m68k_op_cmp_8_pd7(void)
  10911. {
  10912.         uint src = OPER_A7_PD_8();
  10913.         uint dst = MASK_OUT_ABOVE_8(DX);
  10914.         uint res = dst - src;
  10915.  
  10916.         FLAG_N = NFLAG_8(res);
  10917.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  10918.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  10919.         FLAG_C = CFLAG_8(res);
  10920. }
  10921.  
  10922.  
  10923. void m68k_op_cmp_8_di(void)
  10924. {
  10925.         uint src = OPER_AY_DI_8();
  10926.         uint dst = MASK_OUT_ABOVE_8(DX);
  10927.         uint res = dst - src;
  10928.  
  10929.         FLAG_N = NFLAG_8(res);
  10930.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  10931.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  10932.         FLAG_C = CFLAG_8(res);
  10933. }
  10934.  
  10935.  
  10936. void m68k_op_cmp_8_ix(void)
  10937. {
  10938.         uint src = OPER_AY_IX_8();
  10939.         uint dst = MASK_OUT_ABOVE_8(DX);
  10940.         uint res = dst - src;
  10941.  
  10942.         FLAG_N = NFLAG_8(res);
  10943.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  10944.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  10945.         FLAG_C = CFLAG_8(res);
  10946. }
  10947.  
  10948.  
  10949. void m68k_op_cmp_8_aw(void)
  10950. {
  10951.         uint src = OPER_AW_8();
  10952.         uint dst = MASK_OUT_ABOVE_8(DX);
  10953.         uint res = dst - src;
  10954.  
  10955.         FLAG_N = NFLAG_8(res);
  10956.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  10957.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  10958.         FLAG_C = CFLAG_8(res);
  10959. }
  10960.  
  10961.  
  10962. void m68k_op_cmp_8_al(void)
  10963. {
  10964.         uint src = OPER_AL_8();
  10965.         uint dst = MASK_OUT_ABOVE_8(DX);
  10966.         uint res = dst - src;
  10967.  
  10968.         FLAG_N = NFLAG_8(res);
  10969.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  10970.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  10971.         FLAG_C = CFLAG_8(res);
  10972. }
  10973.  
  10974.  
  10975. void m68k_op_cmp_8_pcdi(void)
  10976. {
  10977.         uint src = OPER_PCDI_8();
  10978.         uint dst = MASK_OUT_ABOVE_8(DX);
  10979.         uint res = dst - src;
  10980.  
  10981.         FLAG_N = NFLAG_8(res);
  10982.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  10983.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  10984.         FLAG_C = CFLAG_8(res);
  10985. }
  10986.  
  10987.  
  10988. void m68k_op_cmp_8_pcix(void)
  10989. {
  10990.         uint src = OPER_PCIX_8();
  10991.         uint dst = MASK_OUT_ABOVE_8(DX);
  10992.         uint res = dst - src;
  10993.  
  10994.         FLAG_N = NFLAG_8(res);
  10995.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  10996.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  10997.         FLAG_C = CFLAG_8(res);
  10998. }
  10999.  
  11000.  
  11001. void m68k_op_cmp_8_i(void)
  11002. {
  11003.         uint src = OPER_I_8();
  11004.         uint dst = MASK_OUT_ABOVE_8(DX);
  11005.         uint res = dst - src;
  11006.  
  11007.         FLAG_N = NFLAG_8(res);
  11008.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  11009.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  11010.         FLAG_C = CFLAG_8(res);
  11011. }
  11012.  
  11013.  
  11014. void m68k_op_cmp_16_d(void)
  11015. {
  11016.         uint src = MASK_OUT_ABOVE_16(DY);
  11017.         uint dst = MASK_OUT_ABOVE_16(DX);
  11018.         uint res = dst - src;
  11019.  
  11020.         FLAG_N = NFLAG_16(res);
  11021.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  11022.         FLAG_V = VFLAG_SUB_16(src, dst, res);
  11023.         FLAG_C = CFLAG_16(res);
  11024. }
  11025.  
  11026.  
  11027. void m68k_op_cmp_16_a(void)
  11028. {
  11029.         uint src = MASK_OUT_ABOVE_16(AY);
  11030.         uint dst = MASK_OUT_ABOVE_16(DX);
  11031.         uint res = dst - src;
  11032.  
  11033.         FLAG_N = NFLAG_16(res);
  11034.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  11035.         FLAG_V = VFLAG_SUB_16(src, dst, res);
  11036.         FLAG_C = CFLAG_16(res);
  11037. }
  11038.  
  11039.  
  11040. void m68k_op_cmp_16_ai(void)
  11041. {
  11042.         uint src = OPER_AY_AI_16();
  11043.         uint dst = MASK_OUT_ABOVE_16(DX);
  11044.         uint res = dst - src;
  11045.  
  11046.         FLAG_N = NFLAG_16(res);
  11047.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  11048.         FLAG_V = VFLAG_SUB_16(src, dst, res);
  11049.         FLAG_C = CFLAG_16(res);
  11050. }
  11051.  
  11052.  
  11053. void m68k_op_cmp_16_pi(void)
  11054. {
  11055.         uint src = OPER_AY_PI_16();
  11056.         uint dst = MASK_OUT_ABOVE_16(DX);
  11057.         uint res = dst - src;
  11058.  
  11059.         FLAG_N = NFLAG_16(res);
  11060.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  11061.         FLAG_V = VFLAG_SUB_16(src, dst, res);
  11062.         FLAG_C = CFLAG_16(res);
  11063. }
  11064.  
  11065.  
  11066. void m68k_op_cmp_16_pd(void)
  11067. {
  11068.         uint src = OPER_AY_PD_16();
  11069.         uint dst = MASK_OUT_ABOVE_16(DX);
  11070.         uint res = dst - src;
  11071.  
  11072.         FLAG_N = NFLAG_16(res);
  11073.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  11074.         FLAG_V = VFLAG_SUB_16(src, dst, res);
  11075.         FLAG_C = CFLAG_16(res);
  11076. }
  11077.  
  11078.  
  11079. void m68k_op_cmp_16_di(void)
  11080. {
  11081.         uint src = OPER_AY_DI_16();
  11082.         uint dst = MASK_OUT_ABOVE_16(DX);
  11083.         uint res = dst - src;
  11084.  
  11085.         FLAG_N = NFLAG_16(res);
  11086.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  11087.         FLAG_V = VFLAG_SUB_16(src, dst, res);
  11088.         FLAG_C = CFLAG_16(res);
  11089. }
  11090.  
  11091.  
  11092. void m68k_op_cmp_16_ix(void)
  11093. {
  11094.         uint src = OPER_AY_IX_16();
  11095.         uint dst = MASK_OUT_ABOVE_16(DX);
  11096.         uint res = dst - src;
  11097.  
  11098.         FLAG_N = NFLAG_16(res);
  11099.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  11100.         FLAG_V = VFLAG_SUB_16(src, dst, res);
  11101.         FLAG_C = CFLAG_16(res);
  11102. }
  11103.  
  11104.  
  11105. void m68k_op_cmp_16_aw(void)
  11106. {
  11107.         uint src = OPER_AW_16();
  11108.         uint dst = MASK_OUT_ABOVE_16(DX);
  11109.         uint res = dst - src;
  11110.  
  11111.         FLAG_N = NFLAG_16(res);
  11112.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  11113.         FLAG_V = VFLAG_SUB_16(src, dst, res);
  11114.         FLAG_C = CFLAG_16(res);
  11115. }
  11116.  
  11117.  
  11118. void m68k_op_cmp_16_al(void)
  11119. {
  11120.         uint src = OPER_AL_16();
  11121.         uint dst = MASK_OUT_ABOVE_16(DX);
  11122.         uint res = dst - src;
  11123.  
  11124.         FLAG_N = NFLAG_16(res);
  11125.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  11126.         FLAG_V = VFLAG_SUB_16(src, dst, res);
  11127.         FLAG_C = CFLAG_16(res);
  11128. }
  11129.  
  11130.  
  11131. void m68k_op_cmp_16_pcdi(void)
  11132. {
  11133.         uint src = OPER_PCDI_16();
  11134.         uint dst = MASK_OUT_ABOVE_16(DX);
  11135.         uint res = dst - src;
  11136.  
  11137.         FLAG_N = NFLAG_16(res);
  11138.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  11139.         FLAG_V = VFLAG_SUB_16(src, dst, res);
  11140.         FLAG_C = CFLAG_16(res);
  11141. }
  11142.  
  11143.  
  11144. void m68k_op_cmp_16_pcix(void)
  11145. {
  11146.         uint src = OPER_PCIX_16();
  11147.         uint dst = MASK_OUT_ABOVE_16(DX);
  11148.         uint res = dst - src;
  11149.  
  11150.         FLAG_N = NFLAG_16(res);
  11151.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  11152.         FLAG_V = VFLAG_SUB_16(src, dst, res);
  11153.         FLAG_C = CFLAG_16(res);
  11154. }
  11155.  
  11156.  
  11157. void m68k_op_cmp_16_i(void)
  11158. {
  11159.         uint src = OPER_I_16();
  11160.         uint dst = MASK_OUT_ABOVE_16(DX);
  11161.         uint res = dst - src;
  11162.  
  11163.         FLAG_N = NFLAG_16(res);
  11164.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  11165.         FLAG_V = VFLAG_SUB_16(src, dst, res);
  11166.         FLAG_C = CFLAG_16(res);
  11167. }
  11168.  
  11169.  
  11170. void m68k_op_cmp_32_d(void)
  11171. {
  11172.         uint src = DY;
  11173.         uint dst = DX;
  11174.         uint res = dst - src;
  11175.  
  11176.         FLAG_N = NFLAG_32(res);
  11177.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  11178.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  11179.         FLAG_C = CFLAG_SUB_32(src, dst, res);
  11180. }
  11181.  
  11182.  
  11183. void m68k_op_cmp_32_a(void)
  11184. {
  11185.         uint src = AY;
  11186.         uint dst = DX;
  11187.         uint res = dst - src;
  11188.  
  11189.         FLAG_N = NFLAG_32(res);
  11190.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  11191.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  11192.         FLAG_C = CFLAG_SUB_32(src, dst, res);
  11193. }
  11194.  
  11195.  
  11196. void m68k_op_cmp_32_ai(void)
  11197. {
  11198.         uint src = OPER_AY_AI_32();
  11199.         uint dst = DX;
  11200.         uint res = dst - src;
  11201.  
  11202.         FLAG_N = NFLAG_32(res);
  11203.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  11204.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  11205.         FLAG_C = CFLAG_SUB_32(src, dst, res);
  11206. }
  11207.  
  11208.  
  11209. void m68k_op_cmp_32_pi(void)
  11210. {
  11211.         uint src = OPER_AY_PI_32();
  11212.         uint dst = DX;
  11213.         uint res = dst - src;
  11214.  
  11215.         FLAG_N = NFLAG_32(res);
  11216.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  11217.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  11218.         FLAG_C = CFLAG_SUB_32(src, dst, res);
  11219. }
  11220.  
  11221.  
  11222. void m68k_op_cmp_32_pd(void)
  11223. {
  11224.         uint src = OPER_AY_PD_32();
  11225.         uint dst = DX;
  11226.         uint res = dst - src;
  11227.  
  11228.         FLAG_N = NFLAG_32(res);
  11229.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  11230.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  11231.         FLAG_C = CFLAG_SUB_32(src, dst, res);
  11232. }
  11233.  
  11234.  
  11235. void m68k_op_cmp_32_di(void)
  11236. {
  11237.         uint src = OPER_AY_DI_32();
  11238.         uint dst = DX;
  11239.         uint res = dst - src;
  11240.  
  11241.         FLAG_N = NFLAG_32(res);
  11242.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  11243.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  11244.         FLAG_C = CFLAG_SUB_32(src, dst, res);
  11245. }
  11246.  
  11247.  
  11248. void m68k_op_cmp_32_ix(void)
  11249. {
  11250.         uint src = OPER_AY_IX_32();
  11251.         uint dst = DX;
  11252.         uint res = dst - src;
  11253.  
  11254.         FLAG_N = NFLAG_32(res);
  11255.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  11256.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  11257.         FLAG_C = CFLAG_SUB_32(src, dst, res);
  11258. }
  11259.  
  11260.  
  11261. void m68k_op_cmp_32_aw(void)
  11262. {
  11263.         uint src = OPER_AW_32();
  11264.         uint dst = DX;
  11265.         uint res = dst - src;
  11266.  
  11267.         FLAG_N = NFLAG_32(res);
  11268.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  11269.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  11270.         FLAG_C = CFLAG_SUB_32(src, dst, res);
  11271. }
  11272.  
  11273.  
  11274. void m68k_op_cmp_32_al(void)
  11275. {
  11276.         uint src = OPER_AL_32();
  11277.         uint dst = DX;
  11278.         uint res = dst - src;
  11279.  
  11280.         FLAG_N = NFLAG_32(res);
  11281.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  11282.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  11283.         FLAG_C = CFLAG_SUB_32(src, dst, res);
  11284. }
  11285.  
  11286.  
  11287. void m68k_op_cmp_32_pcdi(void)
  11288. {
  11289.         uint src = OPER_PCDI_32();
  11290.         uint dst = DX;
  11291.         uint res = dst - src;
  11292.  
  11293.         FLAG_N = NFLAG_32(res);
  11294.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  11295.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  11296.         FLAG_C = CFLAG_SUB_32(src, dst, res);
  11297. }
  11298.  
  11299.  
  11300. void m68k_op_cmp_32_pcix(void)
  11301. {
  11302.         uint src = OPER_PCIX_32();
  11303.         uint dst = DX;
  11304.         uint res = dst - src;
  11305.  
  11306.         FLAG_N = NFLAG_32(res);
  11307.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  11308.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  11309.         FLAG_C = CFLAG_SUB_32(src, dst, res);
  11310. }
  11311.  
  11312.  
  11313. void m68k_op_cmp_32_i(void)
  11314. {
  11315.         uint src = OPER_I_32();
  11316.         uint dst = DX;
  11317.         uint res = dst - src;
  11318.  
  11319.         FLAG_N = NFLAG_32(res);
  11320.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  11321.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  11322.         FLAG_C = CFLAG_SUB_32(src, dst, res);
  11323. }
  11324.  
  11325.  
  11326. void m68k_op_cmpa_16_d(void)
  11327. {
  11328.         uint src = MAKE_INT_16(DY);
  11329.         uint dst = AX;
  11330.         uint res = dst - src;
  11331.  
  11332.         FLAG_N = NFLAG_32(res);
  11333.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  11334.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  11335.         FLAG_C = CFLAG_SUB_32(src, dst, res);
  11336. }
  11337.  
  11338.  
  11339. void m68k_op_cmpa_16_a(void)
  11340. {
  11341.         uint src = MAKE_INT_16(AY);
  11342.         uint dst = AX;
  11343.         uint res = dst - src;
  11344.  
  11345.         FLAG_N = NFLAG_32(res);
  11346.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  11347.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  11348.         FLAG_C = CFLAG_SUB_32(src, dst, res);
  11349. }
  11350.  
  11351.  
  11352. void m68k_op_cmpa_16_ai(void)
  11353. {
  11354.         uint src = MAKE_INT_16(OPER_AY_AI_16());
  11355.         uint dst = AX;
  11356.         uint res = dst - src;
  11357.  
  11358.         FLAG_N = NFLAG_32(res);
  11359.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  11360.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  11361.         FLAG_C = CFLAG_SUB_32(src, dst, res);
  11362. }
  11363.  
  11364.  
  11365. void m68k_op_cmpa_16_pi(void)
  11366. {
  11367.         uint src = MAKE_INT_16(OPER_AY_PI_16());
  11368.         uint dst = AX;
  11369.         uint res = dst - src;
  11370.  
  11371.         FLAG_N = NFLAG_32(res);
  11372.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  11373.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  11374.         FLAG_C = CFLAG_SUB_32(src, dst, res);
  11375. }
  11376.  
  11377.  
  11378. void m68k_op_cmpa_16_pd(void)
  11379. {
  11380.         uint src = MAKE_INT_16(OPER_AY_PD_16());
  11381.         uint dst = AX;
  11382.         uint res = dst - src;
  11383.  
  11384.         FLAG_N = NFLAG_32(res);
  11385.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  11386.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  11387.         FLAG_C = CFLAG_SUB_32(src, dst, res);
  11388. }
  11389.  
  11390.  
  11391. void m68k_op_cmpa_16_di(void)
  11392. {
  11393.         uint src = MAKE_INT_16(OPER_AY_DI_16());
  11394.         uint dst = AX;
  11395.         uint res = dst - src;
  11396.  
  11397.         FLAG_N = NFLAG_32(res);
  11398.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  11399.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  11400.         FLAG_C = CFLAG_SUB_32(src, dst, res);
  11401. }
  11402.  
  11403.  
  11404. void m68k_op_cmpa_16_ix(void)
  11405. {
  11406.         uint src = MAKE_INT_16(OPER_AY_IX_16());
  11407.         uint dst = AX;
  11408.         uint res = dst - src;
  11409.  
  11410.         FLAG_N = NFLAG_32(res);
  11411.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  11412.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  11413.         FLAG_C = CFLAG_SUB_32(src, dst, res);
  11414. }
  11415.  
  11416.  
  11417. void m68k_op_cmpa_16_aw(void)
  11418. {
  11419.         uint src = MAKE_INT_16(OPER_AW_16());
  11420.         uint dst = AX;
  11421.         uint res = dst - src;
  11422.  
  11423.         FLAG_N = NFLAG_32(res);
  11424.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  11425.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  11426.         FLAG_C = CFLAG_SUB_32(src, dst, res);
  11427. }
  11428.  
  11429.  
  11430. void m68k_op_cmpa_16_al(void)
  11431. {
  11432.         uint src = MAKE_INT_16(OPER_AL_16());
  11433.         uint dst = AX;
  11434.         uint res = dst - src;
  11435.  
  11436.         FLAG_N = NFLAG_32(res);
  11437.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  11438.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  11439.         FLAG_C = CFLAG_SUB_32(src, dst, res);
  11440. }
  11441.  
  11442.  
  11443. void m68k_op_cmpa_16_pcdi(void)
  11444. {
  11445.         uint src = MAKE_INT_16(OPER_PCDI_16());
  11446.         uint dst = AX;
  11447.         uint res = dst - src;
  11448.  
  11449.         FLAG_N = NFLAG_32(res);
  11450.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  11451.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  11452.         FLAG_C = CFLAG_SUB_32(src, dst, res);
  11453. }
  11454.  
  11455.  
  11456. void m68k_op_cmpa_16_pcix(void)
  11457. {
  11458.         uint src = MAKE_INT_16(OPER_PCIX_16());
  11459.         uint dst = AX;
  11460.         uint res = dst - src;
  11461.  
  11462.         FLAG_N = NFLAG_32(res);
  11463.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  11464.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  11465.         FLAG_C = CFLAG_SUB_32(src, dst, res);
  11466. }
  11467.  
  11468.  
  11469. void m68k_op_cmpa_16_i(void)
  11470. {
  11471.         uint src = MAKE_INT_16(OPER_I_16());
  11472.         uint dst = AX;
  11473.         uint res = dst - src;
  11474.  
  11475.         FLAG_N = NFLAG_32(res);
  11476.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  11477.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  11478.         FLAG_C = CFLAG_SUB_32(src, dst, res);
  11479. }
  11480.  
  11481.  
  11482. void m68k_op_cmpa_32_d(void)
  11483. {
  11484.         uint src = DY;
  11485.         uint dst = AX;
  11486.         uint res = dst - src;
  11487.  
  11488.         FLAG_N = NFLAG_32(res);
  11489.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  11490.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  11491.         FLAG_C = CFLAG_SUB_32(src, dst, res);
  11492. }
  11493.  
  11494.  
  11495. void m68k_op_cmpa_32_a(void)
  11496. {
  11497.         uint src = AY;
  11498.         uint dst = AX;
  11499.         uint res = dst - src;
  11500.  
  11501.         FLAG_N = NFLAG_32(res);
  11502.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  11503.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  11504.         FLAG_C = CFLAG_SUB_32(src, dst, res);
  11505. }
  11506.  
  11507.  
  11508. void m68k_op_cmpa_32_ai(void)
  11509. {
  11510.         uint src = OPER_AY_AI_32();
  11511.         uint dst = AX;
  11512.         uint res = dst - src;
  11513.  
  11514.         FLAG_N = NFLAG_32(res);
  11515.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  11516.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  11517.         FLAG_C = CFLAG_SUB_32(src, dst, res);
  11518. }
  11519.  
  11520.  
  11521. void m68k_op_cmpa_32_pi(void)
  11522. {
  11523.         uint src = OPER_AY_PI_32();
  11524.         uint dst = AX;
  11525.         uint res = dst - src;
  11526.  
  11527.         FLAG_N = NFLAG_32(res);
  11528.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  11529.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  11530.         FLAG_C = CFLAG_SUB_32(src, dst, res);
  11531. }
  11532.  
  11533.  
  11534. void m68k_op_cmpa_32_pd(void)
  11535. {
  11536.         uint src = OPER_AY_PD_32();
  11537.         uint dst = AX;
  11538.         uint res = dst - src;
  11539.  
  11540.         FLAG_N = NFLAG_32(res);
  11541.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  11542.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  11543.         FLAG_C = CFLAG_SUB_32(src, dst, res);
  11544. }
  11545.  
  11546.  
  11547. void m68k_op_cmpa_32_di(void)
  11548. {
  11549.         uint src = OPER_AY_DI_32();
  11550.         uint dst = AX;
  11551.         uint res = dst - src;
  11552.  
  11553.         FLAG_N = NFLAG_32(res);
  11554.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  11555.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  11556.         FLAG_C = CFLAG_SUB_32(src, dst, res);
  11557. }
  11558.  
  11559.  
  11560. void m68k_op_cmpa_32_ix(void)
  11561. {
  11562.         uint src = OPER_AY_IX_32();
  11563.         uint dst = AX;
  11564.         uint res = dst - src;
  11565.  
  11566.         FLAG_N = NFLAG_32(res);
  11567.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  11568.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  11569.         FLAG_C = CFLAG_SUB_32(src, dst, res);
  11570. }
  11571.  
  11572.  
  11573. void m68k_op_cmpa_32_aw(void)
  11574. {
  11575.         uint src = OPER_AW_32();
  11576.         uint dst = AX;
  11577.         uint res = dst - src;
  11578.  
  11579.         FLAG_N = NFLAG_32(res);
  11580.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  11581.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  11582.         FLAG_C = CFLAG_SUB_32(src, dst, res);
  11583. }
  11584.  
  11585.  
  11586. void m68k_op_cmpa_32_al(void)
  11587. {
  11588.         uint src = OPER_AL_32();
  11589.         uint dst = AX;
  11590.         uint res = dst - src;
  11591.  
  11592.         FLAG_N = NFLAG_32(res);
  11593.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  11594.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  11595.         FLAG_C = CFLAG_SUB_32(src, dst, res);
  11596. }
  11597.  
  11598.  
  11599. void m68k_op_cmpa_32_pcdi(void)
  11600. {
  11601.         uint src = OPER_PCDI_32();
  11602.         uint dst = AX;
  11603.         uint res = dst - src;
  11604.  
  11605.         FLAG_N = NFLAG_32(res);
  11606.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  11607.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  11608.         FLAG_C = CFLAG_SUB_32(src, dst, res);
  11609. }
  11610.  
  11611.  
  11612. void m68k_op_cmpa_32_pcix(void)
  11613. {
  11614.         uint src = OPER_PCIX_32();
  11615.         uint dst = AX;
  11616.         uint res = dst - src;
  11617.  
  11618.         FLAG_N = NFLAG_32(res);
  11619.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  11620.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  11621.         FLAG_C = CFLAG_SUB_32(src, dst, res);
  11622. }
  11623.  
  11624.  
  11625. void m68k_op_cmpa_32_i(void)
  11626. {
  11627.         uint src = OPER_I_32();
  11628.         uint dst = AX;
  11629.         uint res = dst - src;
  11630.  
  11631.         FLAG_N = NFLAG_32(res);
  11632.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  11633.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  11634.         FLAG_C = CFLAG_SUB_32(src, dst, res);
  11635. }
  11636.  
  11637.  
  11638. void m68k_op_cmpi_8_d(void)
  11639. {
  11640.         uint src = OPER_I_8();
  11641.         uint dst = MASK_OUT_ABOVE_8(DY);
  11642.         uint res = dst - src;
  11643.  
  11644.         FLAG_N = NFLAG_8(res);
  11645.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  11646.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  11647.         FLAG_C = CFLAG_8(res);
  11648. }
  11649.  
  11650.  
  11651. void m68k_op_cmpi_8_ai(void)
  11652. {
  11653.         uint src = OPER_I_8();
  11654.         uint dst = OPER_AY_AI_8();
  11655.         uint res = dst - src;
  11656.  
  11657.         FLAG_N = NFLAG_8(res);
  11658.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  11659.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  11660.         FLAG_C = CFLAG_8(res);
  11661. }
  11662.  
  11663.  
  11664. void m68k_op_cmpi_8_pi(void)
  11665. {
  11666.         uint src = OPER_I_8();
  11667.         uint dst = OPER_AY_PI_8();
  11668.         uint res = dst - src;
  11669.  
  11670.         FLAG_N = NFLAG_8(res);
  11671.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  11672.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  11673.         FLAG_C = CFLAG_8(res);
  11674. }
  11675.  
  11676.  
  11677. void m68k_op_cmpi_8_pi7(void)
  11678. {
  11679.         uint src = OPER_I_8();
  11680.         uint dst = OPER_A7_PI_8();
  11681.         uint res = dst - src;
  11682.  
  11683.         FLAG_N = NFLAG_8(res);
  11684.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  11685.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  11686.         FLAG_C = CFLAG_8(res);
  11687. }
  11688.  
  11689.  
  11690. void m68k_op_cmpi_8_pd(void)
  11691. {
  11692.         uint src = OPER_I_8();
  11693.         uint dst = OPER_AY_PD_8();
  11694.         uint res = dst - src;
  11695.  
  11696.         FLAG_N = NFLAG_8(res);
  11697.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  11698.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  11699.         FLAG_C = CFLAG_8(res);
  11700. }
  11701.  
  11702.  
  11703. void m68k_op_cmpi_8_pd7(void)
  11704. {
  11705.         uint src = OPER_I_8();
  11706.         uint dst = OPER_A7_PD_8();
  11707.         uint res = dst - src;
  11708.  
  11709.         FLAG_N = NFLAG_8(res);
  11710.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  11711.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  11712.         FLAG_C = CFLAG_8(res);
  11713. }
  11714.  
  11715.  
  11716. void m68k_op_cmpi_8_di(void)
  11717. {
  11718.         uint src = OPER_I_8();
  11719.         uint dst = OPER_AY_DI_8();
  11720.         uint res = dst - src;
  11721.  
  11722.         FLAG_N = NFLAG_8(res);
  11723.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  11724.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  11725.         FLAG_C = CFLAG_8(res);
  11726. }
  11727.  
  11728.  
  11729. void m68k_op_cmpi_8_ix(void)
  11730. {
  11731.         uint src = OPER_I_8();
  11732.         uint dst = OPER_AY_IX_8();
  11733.         uint res = dst - src;
  11734.  
  11735.         FLAG_N = NFLAG_8(res);
  11736.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  11737.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  11738.         FLAG_C = CFLAG_8(res);
  11739. }
  11740.  
  11741.  
  11742. void m68k_op_cmpi_8_aw(void)
  11743. {
  11744.         uint src = OPER_I_8();
  11745.         uint dst = OPER_AW_8();
  11746.         uint res = dst - src;
  11747.  
  11748.         FLAG_N = NFLAG_8(res);
  11749.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  11750.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  11751.         FLAG_C = CFLAG_8(res);
  11752. }
  11753.  
  11754.  
  11755. void m68k_op_cmpi_8_al(void)
  11756. {
  11757.         uint src = OPER_I_8();
  11758.         uint dst = OPER_AL_8();
  11759.         uint res = dst - src;
  11760.  
  11761.         FLAG_N = NFLAG_8(res);
  11762.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  11763.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  11764.         FLAG_C = CFLAG_8(res);
  11765. }
  11766.  
  11767.  
  11768. void m68k_op_cmpi_8_pcdi(void)
  11769. {
  11770.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  11771.         {
  11772.                 uint src = OPER_I_8();
  11773.                 uint dst = OPER_PCDI_8();
  11774.                 uint res = dst - src;
  11775.  
  11776.                 FLAG_N = NFLAG_8(res);
  11777.                 FLAG_Z = MASK_OUT_ABOVE_8(res);
  11778.                 FLAG_V = VFLAG_SUB_8(src, dst, res);
  11779.                 FLAG_C = CFLAG_8(res);
  11780.                 return;
  11781.         }
  11782.         m68ki_exception_illegal();
  11783. }
  11784.  
  11785.  
  11786. void m68k_op_cmpi_8_pcix(void)
  11787. {
  11788.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  11789.         {
  11790.                 uint src = OPER_I_8();
  11791.                 uint dst = OPER_PCIX_8();
  11792.                 uint res = dst - src;
  11793.  
  11794.                 FLAG_N = NFLAG_8(res);
  11795.                 FLAG_Z = MASK_OUT_ABOVE_8(res);
  11796.                 FLAG_V = VFLAG_SUB_8(src, dst, res);
  11797.                 FLAG_C = CFLAG_8(res);
  11798.                 return;
  11799.         }
  11800.         m68ki_exception_illegal();
  11801. }
  11802.  
  11803.  
  11804. void m68k_op_cmpi_16_d(void)
  11805. {
  11806.         uint src = OPER_I_16();
  11807.         uint dst = MASK_OUT_ABOVE_16(DY);
  11808.         uint res = dst - src;
  11809.  
  11810.         FLAG_N = NFLAG_16(res);
  11811.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  11812.         FLAG_V = VFLAG_SUB_16(src, dst, res);
  11813.         FLAG_C = CFLAG_16(res);
  11814. }
  11815.  
  11816.  
  11817. void m68k_op_cmpi_16_ai(void)
  11818. {
  11819.         uint src = OPER_I_16();
  11820.         uint dst = OPER_AY_AI_16();
  11821.         uint res = dst - src;
  11822.  
  11823.         FLAG_N = NFLAG_16(res);
  11824.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  11825.         FLAG_V = VFLAG_SUB_16(src, dst, res);
  11826.         FLAG_C = CFLAG_16(res);
  11827. }
  11828.  
  11829.  
  11830. void m68k_op_cmpi_16_pi(void)
  11831. {
  11832.         uint src = OPER_I_16();
  11833.         uint dst = OPER_AY_PI_16();
  11834.         uint res = dst - src;
  11835.  
  11836.         FLAG_N = NFLAG_16(res);
  11837.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  11838.         FLAG_V = VFLAG_SUB_16(src, dst, res);
  11839.         FLAG_C = CFLAG_16(res);
  11840. }
  11841.  
  11842.  
  11843. void m68k_op_cmpi_16_pd(void)
  11844. {
  11845.         uint src = OPER_I_16();
  11846.         uint dst = OPER_AY_PD_16();
  11847.         uint res = dst - src;
  11848.  
  11849.         FLAG_N = NFLAG_16(res);
  11850.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  11851.         FLAG_V = VFLAG_SUB_16(src, dst, res);
  11852.         FLAG_C = CFLAG_16(res);
  11853. }
  11854.  
  11855.  
  11856. void m68k_op_cmpi_16_di(void)
  11857. {
  11858.         uint src = OPER_I_16();
  11859.         uint dst = OPER_AY_DI_16();
  11860.         uint res = dst - src;
  11861.  
  11862.         FLAG_N = NFLAG_16(res);
  11863.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  11864.         FLAG_V = VFLAG_SUB_16(src, dst, res);
  11865.         FLAG_C = CFLAG_16(res);
  11866. }
  11867.  
  11868.  
  11869. void m68k_op_cmpi_16_ix(void)
  11870. {
  11871.         uint src = OPER_I_16();
  11872.         uint dst = OPER_AY_IX_16();
  11873.         uint res = dst - src;
  11874.  
  11875.         FLAG_N = NFLAG_16(res);
  11876.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  11877.         FLAG_V = VFLAG_SUB_16(src, dst, res);
  11878.         FLAG_C = CFLAG_16(res);
  11879. }
  11880.  
  11881.  
  11882. void m68k_op_cmpi_16_aw(void)
  11883. {
  11884.         uint src = OPER_I_16();
  11885.         uint dst = OPER_AW_16();
  11886.         uint res = dst - src;
  11887.  
  11888.         FLAG_N = NFLAG_16(res);
  11889.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  11890.         FLAG_V = VFLAG_SUB_16(src, dst, res);
  11891.         FLAG_C = CFLAG_16(res);
  11892. }
  11893.  
  11894.  
  11895. void m68k_op_cmpi_16_al(void)
  11896. {
  11897.         uint src = OPER_I_16();
  11898.         uint dst = OPER_AL_16();
  11899.         uint res = dst - src;
  11900.  
  11901.         FLAG_N = NFLAG_16(res);
  11902.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  11903.         FLAG_V = VFLAG_SUB_16(src, dst, res);
  11904.         FLAG_C = CFLAG_16(res);
  11905. }
  11906.  
  11907.  
  11908. void m68k_op_cmpi_16_pcdi(void)
  11909. {
  11910.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  11911.         {
  11912.                 uint src = OPER_I_16();
  11913.                 uint dst = OPER_PCDI_16();
  11914.                 uint res = dst - src;
  11915.  
  11916.                 FLAG_N = NFLAG_16(res);
  11917.                 FLAG_Z = MASK_OUT_ABOVE_16(res);
  11918.                 FLAG_V = VFLAG_SUB_16(src, dst, res);
  11919.                 FLAG_C = CFLAG_16(res);
  11920.                 return;
  11921.         }
  11922.         m68ki_exception_illegal();
  11923. }
  11924.  
  11925.  
  11926. void m68k_op_cmpi_16_pcix(void)
  11927. {
  11928.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  11929.         {
  11930.                 uint src = OPER_I_16();
  11931.                 uint dst = OPER_PCIX_16();
  11932.                 uint res = dst - src;
  11933.  
  11934.                 FLAG_N = NFLAG_16(res);
  11935.                 FLAG_Z = MASK_OUT_ABOVE_16(res);
  11936.                 FLAG_V = VFLAG_SUB_16(src, dst, res);
  11937.                 FLAG_C = CFLAG_16(res);
  11938.                 return;
  11939.         }
  11940.         m68ki_exception_illegal();
  11941. }
  11942.  
  11943.  
  11944. void m68k_op_cmpi_32_d(void)
  11945. {
  11946.         uint src = OPER_I_32();
  11947.         uint dst = DY;
  11948.         uint res = dst - src;
  11949.  
  11950.         m68ki_cmpild_callback(src, REG_IR & 7);            /* auto-disable (see m68kcpu.h) */
  11951.  
  11952.         FLAG_N = NFLAG_32(res);
  11953.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  11954.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  11955.         FLAG_C = CFLAG_SUB_32(src, dst, res);
  11956. }
  11957.  
  11958.  
  11959. void m68k_op_cmpi_32_ai(void)
  11960. {
  11961.         uint src = OPER_I_32();
  11962.         uint dst = OPER_AY_AI_32();
  11963.         uint res = dst - src;
  11964.  
  11965.         FLAG_N = NFLAG_32(res);
  11966.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  11967.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  11968.         FLAG_C = CFLAG_SUB_32(src, dst, res);
  11969. }
  11970.  
  11971.  
  11972. void m68k_op_cmpi_32_pi(void)
  11973. {
  11974.         uint src = OPER_I_32();
  11975.         uint dst = OPER_AY_PI_32();
  11976.         uint res = dst - src;
  11977.  
  11978.         FLAG_N = NFLAG_32(res);
  11979.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  11980.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  11981.         FLAG_C = CFLAG_SUB_32(src, dst, res);
  11982. }
  11983.  
  11984.  
  11985. void m68k_op_cmpi_32_pd(void)
  11986. {
  11987.         uint src = OPER_I_32();
  11988.         uint dst = OPER_AY_PD_32();
  11989.         uint res = dst - src;
  11990.  
  11991.         FLAG_N = NFLAG_32(res);
  11992.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  11993.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  11994.         FLAG_C = CFLAG_SUB_32(src, dst, res);
  11995. }
  11996.  
  11997.  
  11998. void m68k_op_cmpi_32_di(void)
  11999. {
  12000.         uint src = OPER_I_32();
  12001.         uint dst = OPER_AY_DI_32();
  12002.         uint res = dst - src;
  12003.  
  12004.         FLAG_N = NFLAG_32(res);
  12005.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  12006.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  12007.         FLAG_C = CFLAG_SUB_32(src, dst, res);
  12008. }
  12009.  
  12010.  
  12011. void m68k_op_cmpi_32_ix(void)
  12012. {
  12013.         uint src = OPER_I_32();
  12014.         uint dst = OPER_AY_IX_32();
  12015.         uint res = dst - src;
  12016.  
  12017.         FLAG_N = NFLAG_32(res);
  12018.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  12019.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  12020.         FLAG_C = CFLAG_SUB_32(src, dst, res);
  12021. }
  12022.  
  12023.  
  12024. void m68k_op_cmpi_32_aw(void)
  12025. {
  12026.         uint src = OPER_I_32();
  12027.         uint dst = OPER_AW_32();
  12028.         uint res = dst - src;
  12029.  
  12030.         FLAG_N = NFLAG_32(res);
  12031.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  12032.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  12033.         FLAG_C = CFLAG_SUB_32(src, dst, res);
  12034. }
  12035.  
  12036.  
  12037. void m68k_op_cmpi_32_al(void)
  12038. {
  12039.         uint src = OPER_I_32();
  12040.         uint dst = OPER_AL_32();
  12041.         uint res = dst - src;
  12042.  
  12043.         FLAG_N = NFLAG_32(res);
  12044.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  12045.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  12046.         FLAG_C = CFLAG_SUB_32(src, dst, res);
  12047. }
  12048.  
  12049.  
  12050. void m68k_op_cmpi_32_pcdi(void)
  12051. {
  12052.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  12053.         {
  12054.                 uint src = OPER_I_32();
  12055.                 uint dst = OPER_PCDI_32();
  12056.                 uint res = dst - src;
  12057.  
  12058.                 FLAG_N = NFLAG_32(res);
  12059.                 FLAG_Z = MASK_OUT_ABOVE_32(res);
  12060.                 FLAG_V = VFLAG_SUB_32(src, dst, res);
  12061.                 FLAG_C = CFLAG_SUB_32(src, dst, res);
  12062.                 return;
  12063.         }
  12064.         m68ki_exception_illegal();
  12065. }
  12066.  
  12067.  
  12068. void m68k_op_cmpi_32_pcix(void)
  12069. {
  12070.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  12071.         {
  12072.                 uint src = OPER_I_32();
  12073.                 uint dst = OPER_PCIX_32();
  12074.                 uint res = dst - src;
  12075.  
  12076.                 FLAG_N = NFLAG_32(res);
  12077.                 FLAG_Z = MASK_OUT_ABOVE_32(res);
  12078.                 FLAG_V = VFLAG_SUB_32(src, dst, res);
  12079.                 FLAG_C = CFLAG_SUB_32(src, dst, res);
  12080.                 return;
  12081.         }
  12082.         m68ki_exception_illegal();
  12083. }
  12084.  
  12085.  
  12086. void m68k_op_cmpm_8_ax7(void)
  12087. {
  12088.         uint src = OPER_AY_PI_8();
  12089.         uint dst = OPER_A7_PI_8();
  12090.         uint res = dst - src;
  12091.  
  12092.         FLAG_N = NFLAG_8(res);
  12093.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  12094.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  12095.         FLAG_C = CFLAG_8(res);
  12096. }
  12097.  
  12098.  
  12099. void m68k_op_cmpm_8_ay7(void)
  12100. {
  12101.         uint src = OPER_A7_PI_8();
  12102.         uint dst = OPER_AX_PI_8();
  12103.         uint res = dst - src;
  12104.  
  12105.         FLAG_N = NFLAG_8(res);
  12106.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  12107.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  12108.         FLAG_C = CFLAG_8(res);
  12109. }
  12110.  
  12111.  
  12112. void m68k_op_cmpm_8_axy7(void)
  12113. {
  12114.         uint src = OPER_A7_PI_8();
  12115.         uint dst = OPER_A7_PI_8();
  12116.         uint res = dst - src;
  12117.  
  12118.         FLAG_N = NFLAG_8(res);
  12119.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  12120.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  12121.         FLAG_C = CFLAG_8(res);
  12122. }
  12123.  
  12124.  
  12125. void m68k_op_cmpm_8(void)
  12126. {
  12127.         uint src = OPER_AY_PI_8();
  12128.         uint dst = OPER_AX_PI_8();
  12129.         uint res = dst - src;
  12130.  
  12131.         FLAG_N = NFLAG_8(res);
  12132.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  12133.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  12134.         FLAG_C = CFLAG_8(res);
  12135. }
  12136.  
  12137.  
  12138. void m68k_op_cmpm_16(void)
  12139. {
  12140.         uint src = OPER_AY_PI_16();
  12141.         uint dst = OPER_AX_PI_16();
  12142.         uint res = dst - src;
  12143.  
  12144.         FLAG_N = NFLAG_16(res);
  12145.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  12146.         FLAG_V = VFLAG_SUB_16(src, dst, res);
  12147.         FLAG_C = CFLAG_16(res);
  12148. }
  12149.  
  12150.  
  12151. void m68k_op_cmpm_32(void)
  12152. {
  12153.         uint src = OPER_AY_PI_32();
  12154.         uint dst = OPER_AX_PI_32();
  12155.         uint res = dst - src;
  12156.  
  12157.         FLAG_N = NFLAG_32(res);
  12158.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  12159.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  12160.         FLAG_C = CFLAG_SUB_32(src, dst, res);
  12161. }
  12162.  
  12163.  
  12164. void m68k_op_cpbcc_32(void)
  12165. {
  12166.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  12167.         {
  12168.                 M68K_DO_LOG((M68K_LOG_FILEHANDLE "%s at %08x: called unimplemented instruction %04x (%s)\n",
  12169.                                          m68ki_cpu_names[CPU_TYPE], ADDRESS_68K(REG_PC - 2), REG_IR,
  12170.                                          m68k_disassemble_quick(ADDRESS_68K(REG_PC - 2))));
  12171.                 return;
  12172.         }
  12173.         m68ki_exception_1111();
  12174. }
  12175.  
  12176.  
  12177. void m68k_op_cpdbcc_32(void)
  12178. {
  12179.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  12180.         {
  12181.                 M68K_DO_LOG((M68K_LOG_FILEHANDLE "%s at %08x: called unimplemented instruction %04x (%s)\n",
  12182.                                          m68ki_cpu_names[CPU_TYPE], ADDRESS_68K(REG_PC - 2), REG_IR,
  12183.                                          m68k_disassemble_quick(ADDRESS_68K(REG_PC - 2))));
  12184.                 return;
  12185.         }
  12186.         m68ki_exception_1111();
  12187. }
  12188.  
  12189.  
  12190. void m68k_op_cpgen_32(void)
  12191. {
  12192.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  12193.         {
  12194.                 M68K_DO_LOG((M68K_LOG_FILEHANDLE "%s at %08x: called unimplemented instruction %04x (%s)\n",
  12195.                                          m68ki_cpu_names[CPU_TYPE], ADDRESS_68K(REG_PC - 2), REG_IR,
  12196.                                          m68k_disassemble_quick(ADDRESS_68K(REG_PC - 2))));
  12197.                 return;
  12198.         }
  12199.         m68ki_exception_1111();
  12200. }
  12201.  
  12202.  
  12203. void m68k_op_cpscc_32(void)
  12204. {
  12205.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  12206.         {
  12207.                 M68K_DO_LOG((M68K_LOG_FILEHANDLE "%s at %08x: called unimplemented instruction %04x (%s)\n",
  12208.                                          m68ki_cpu_names[CPU_TYPE], ADDRESS_68K(REG_PC - 2), REG_IR,
  12209.                                          m68k_disassemble_quick(ADDRESS_68K(REG_PC - 2))));
  12210.                 return;
  12211.         }
  12212.         m68ki_exception_1111();
  12213. }
  12214.  
  12215.  
  12216. void m68k_op_cptrapcc_32(void)
  12217. {
  12218.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  12219.         {
  12220.                 M68K_DO_LOG((M68K_LOG_FILEHANDLE "%s at %08x: called unimplemented instruction %04x (%s)\n",
  12221.                                          m68ki_cpu_names[CPU_TYPE], ADDRESS_68K(REG_PC - 2), REG_IR,
  12222.                                          m68k_disassemble_quick(ADDRESS_68K(REG_PC - 2))));
  12223.                 return;
  12224.         }
  12225.         m68ki_exception_1111();
  12226. }
  12227.  
  12228.  
  12229. void m68k_op_dbt_16(void)
  12230. {
  12231.         REG_PC += 2;
  12232. }
  12233.  
  12234.  
  12235. void m68k_op_dbf_16(void)
  12236. {
  12237.         uint* r_dst = &DY;
  12238.         uint res = MASK_OUT_ABOVE_16(*r_dst - 1);
  12239.  
  12240.         *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
  12241.         if(res != 0xffff)
  12242.         {
  12243.                 uint offset = OPER_I_16();
  12244.                 REG_PC -= 2;
  12245.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  12246.                 m68ki_branch_16(offset);
  12247.                 USE_CYCLES(CYC_DBCC_F_NOEXP);
  12248.                 return;
  12249.         }
  12250.         REG_PC += 2;
  12251.         USE_CYCLES(CYC_DBCC_F_EXP);
  12252. }
  12253.  
  12254.  
  12255. void m68k_op_dbhi_16(void)
  12256. {
  12257.         if(COND_NOT_HI())
  12258.         {
  12259.                 uint* r_dst = &DY;
  12260.                 uint res = MASK_OUT_ABOVE_16(*r_dst - 1);
  12261.  
  12262.                 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
  12263.                 if(res != 0xffff)
  12264.                 {
  12265.                         uint offset = OPER_I_16();
  12266.                         REG_PC -= 2;
  12267.                         m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  12268.                         m68ki_branch_16(offset);
  12269.                         USE_CYCLES(CYC_DBCC_F_NOEXP);
  12270.                         return;
  12271.                 }
  12272.                 REG_PC += 2;
  12273.                 USE_CYCLES(CYC_DBCC_F_EXP);
  12274.                 return;
  12275.         }
  12276.         REG_PC += 2;
  12277. }
  12278.  
  12279.  
  12280. void m68k_op_dbls_16(void)
  12281. {
  12282.         if(COND_NOT_LS())
  12283.         {
  12284.                 uint* r_dst = &DY;
  12285.                 uint res = MASK_OUT_ABOVE_16(*r_dst - 1);
  12286.  
  12287.                 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
  12288.                 if(res != 0xffff)
  12289.                 {
  12290.                         uint offset = OPER_I_16();
  12291.                         REG_PC -= 2;
  12292.                         m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  12293.                         m68ki_branch_16(offset);
  12294.                         USE_CYCLES(CYC_DBCC_F_NOEXP);
  12295.                         return;
  12296.                 }
  12297.                 REG_PC += 2;
  12298.                 USE_CYCLES(CYC_DBCC_F_EXP);
  12299.                 return;
  12300.         }
  12301.         REG_PC += 2;
  12302. }
  12303.  
  12304.  
  12305. void m68k_op_dbcc_16(void)
  12306. {
  12307.         if(COND_NOT_CC())
  12308.         {
  12309.                 uint* r_dst = &DY;
  12310.                 uint res = MASK_OUT_ABOVE_16(*r_dst - 1);
  12311.  
  12312.                 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
  12313.                 if(res != 0xffff)
  12314.                 {
  12315.                         uint offset = OPER_I_16();
  12316.                         REG_PC -= 2;
  12317.                         m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  12318.                         m68ki_branch_16(offset);
  12319.                         USE_CYCLES(CYC_DBCC_F_NOEXP);
  12320.                         return;
  12321.                 }
  12322.                 REG_PC += 2;
  12323.                 USE_CYCLES(CYC_DBCC_F_EXP);
  12324.                 return;
  12325.         }
  12326.         REG_PC += 2;
  12327. }
  12328.  
  12329.  
  12330. void m68k_op_dbcs_16(void)
  12331. {
  12332.         if(COND_NOT_CS())
  12333.         {
  12334.                 uint* r_dst = &DY;
  12335.                 uint res = MASK_OUT_ABOVE_16(*r_dst - 1);
  12336.  
  12337.                 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
  12338.                 if(res != 0xffff)
  12339.                 {
  12340.                         uint offset = OPER_I_16();
  12341.                         REG_PC -= 2;
  12342.                         m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  12343.                         m68ki_branch_16(offset);
  12344.                         USE_CYCLES(CYC_DBCC_F_NOEXP);
  12345.                         return;
  12346.                 }
  12347.                 REG_PC += 2;
  12348.                 USE_CYCLES(CYC_DBCC_F_EXP);
  12349.                 return;
  12350.         }
  12351.         REG_PC += 2;
  12352. }
  12353.  
  12354.  
  12355. void m68k_op_dbne_16(void)
  12356. {
  12357.         if(COND_NOT_NE())
  12358.         {
  12359.                 uint* r_dst = &DY;
  12360.                 uint res = MASK_OUT_ABOVE_16(*r_dst - 1);
  12361.  
  12362.                 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
  12363.                 if(res != 0xffff)
  12364.                 {
  12365.                         uint offset = OPER_I_16();
  12366.                         REG_PC -= 2;
  12367.                         m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  12368.                         m68ki_branch_16(offset);
  12369.                         USE_CYCLES(CYC_DBCC_F_NOEXP);
  12370.                         return;
  12371.                 }
  12372.                 REG_PC += 2;
  12373.                 USE_CYCLES(CYC_DBCC_F_EXP);
  12374.                 return;
  12375.         }
  12376.         REG_PC += 2;
  12377. }
  12378.  
  12379.  
  12380. void m68k_op_dbeq_16(void)
  12381. {
  12382.         if(COND_NOT_EQ())
  12383.         {
  12384.                 uint* r_dst = &DY;
  12385.                 uint res = MASK_OUT_ABOVE_16(*r_dst - 1);
  12386.  
  12387.                 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
  12388.                 if(res != 0xffff)
  12389.                 {
  12390.                         uint offset = OPER_I_16();
  12391.                         REG_PC -= 2;
  12392.                         m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  12393.                         m68ki_branch_16(offset);
  12394.                         USE_CYCLES(CYC_DBCC_F_NOEXP);
  12395.                         return;
  12396.                 }
  12397.                 REG_PC += 2;
  12398.                 USE_CYCLES(CYC_DBCC_F_EXP);
  12399.                 return;
  12400.         }
  12401.         REG_PC += 2;
  12402. }
  12403.  
  12404.  
  12405. void m68k_op_dbvc_16(void)
  12406. {
  12407.         if(COND_NOT_VC())
  12408.         {
  12409.                 uint* r_dst = &DY;
  12410.                 uint res = MASK_OUT_ABOVE_16(*r_dst - 1);
  12411.  
  12412.                 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
  12413.                 if(res != 0xffff)
  12414.                 {
  12415.                         uint offset = OPER_I_16();
  12416.                         REG_PC -= 2;
  12417.                         m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  12418.                         m68ki_branch_16(offset);
  12419.                         USE_CYCLES(CYC_DBCC_F_NOEXP);
  12420.                         return;
  12421.                 }
  12422.                 REG_PC += 2;
  12423.                 USE_CYCLES(CYC_DBCC_F_EXP);
  12424.                 return;
  12425.         }
  12426.         REG_PC += 2;
  12427. }
  12428.  
  12429.  
  12430. void m68k_op_dbvs_16(void)
  12431. {
  12432.         if(COND_NOT_VS())
  12433.         {
  12434.                 uint* r_dst = &DY;
  12435.                 uint res = MASK_OUT_ABOVE_16(*r_dst - 1);
  12436.  
  12437.                 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
  12438.                 if(res != 0xffff)
  12439.                 {
  12440.                         uint offset = OPER_I_16();
  12441.                         REG_PC -= 2;
  12442.                         m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  12443.                         m68ki_branch_16(offset);
  12444.                         USE_CYCLES(CYC_DBCC_F_NOEXP);
  12445.                         return;
  12446.                 }
  12447.                 REG_PC += 2;
  12448.                 USE_CYCLES(CYC_DBCC_F_EXP);
  12449.                 return;
  12450.         }
  12451.         REG_PC += 2;
  12452. }
  12453.  
  12454.  
  12455. void m68k_op_dbpl_16(void)
  12456. {
  12457.         if(COND_NOT_PL())
  12458.         {
  12459.                 uint* r_dst = &DY;
  12460.                 uint res = MASK_OUT_ABOVE_16(*r_dst - 1);
  12461.  
  12462.                 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
  12463.                 if(res != 0xffff)
  12464.                 {
  12465.                         uint offset = OPER_I_16();
  12466.                         REG_PC -= 2;
  12467.                         m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  12468.                         m68ki_branch_16(offset);
  12469.                         USE_CYCLES(CYC_DBCC_F_NOEXP);
  12470.                         return;
  12471.                 }
  12472.                 REG_PC += 2;
  12473.                 USE_CYCLES(CYC_DBCC_F_EXP);
  12474.                 return;
  12475.         }
  12476.         REG_PC += 2;
  12477. }
  12478.  
  12479.  
  12480. void m68k_op_dbmi_16(void)
  12481. {
  12482.         if(COND_NOT_MI())
  12483.         {
  12484.                 uint* r_dst = &DY;
  12485.                 uint res = MASK_OUT_ABOVE_16(*r_dst - 1);
  12486.  
  12487.                 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
  12488.                 if(res != 0xffff)
  12489.                 {
  12490.                         uint offset = OPER_I_16();
  12491.                         REG_PC -= 2;
  12492.                         m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  12493.                         m68ki_branch_16(offset);
  12494.                         USE_CYCLES(CYC_DBCC_F_NOEXP);
  12495.                         return;
  12496.                 }
  12497.                 REG_PC += 2;
  12498.                 USE_CYCLES(CYC_DBCC_F_EXP);
  12499.                 return;
  12500.         }
  12501.         REG_PC += 2;
  12502. }
  12503.  
  12504.  
  12505. void m68k_op_dbge_16(void)
  12506. {
  12507.         if(COND_NOT_GE())
  12508.         {
  12509.                 uint* r_dst = &DY;
  12510.                 uint res = MASK_OUT_ABOVE_16(*r_dst - 1);
  12511.  
  12512.                 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
  12513.                 if(res != 0xffff)
  12514.                 {
  12515.                         uint offset = OPER_I_16();
  12516.                         REG_PC -= 2;
  12517.                         m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  12518.                         m68ki_branch_16(offset);
  12519.                         USE_CYCLES(CYC_DBCC_F_NOEXP);
  12520.                         return;
  12521.                 }
  12522.                 REG_PC += 2;
  12523.                 USE_CYCLES(CYC_DBCC_F_EXP);
  12524.                 return;
  12525.         }
  12526.         REG_PC += 2;
  12527. }
  12528.  
  12529.  
  12530. void m68k_op_dblt_16(void)
  12531. {
  12532.         if(COND_NOT_LT())
  12533.         {
  12534.                 uint* r_dst = &DY;
  12535.                 uint res = MASK_OUT_ABOVE_16(*r_dst - 1);
  12536.  
  12537.                 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
  12538.                 if(res != 0xffff)
  12539.                 {
  12540.                         uint offset = OPER_I_16();
  12541.                         REG_PC -= 2;
  12542.                         m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  12543.                         m68ki_branch_16(offset);
  12544.                         USE_CYCLES(CYC_DBCC_F_NOEXP);
  12545.                         return;
  12546.                 }
  12547.                 REG_PC += 2;
  12548.                 USE_CYCLES(CYC_DBCC_F_EXP);
  12549.                 return;
  12550.         }
  12551.         REG_PC += 2;
  12552. }
  12553.  
  12554.  
  12555. void m68k_op_dbgt_16(void)
  12556. {
  12557.         if(COND_NOT_GT())
  12558.         {
  12559.                 uint* r_dst = &DY;
  12560.                 uint res = MASK_OUT_ABOVE_16(*r_dst - 1);
  12561.  
  12562.                 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
  12563.                 if(res != 0xffff)
  12564.                 {
  12565.                         uint offset = OPER_I_16();
  12566.                         REG_PC -= 2;
  12567.                         m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  12568.                         m68ki_branch_16(offset);
  12569.                         USE_CYCLES(CYC_DBCC_F_NOEXP);
  12570.                         return;
  12571.                 }
  12572.                 REG_PC += 2;
  12573.                 USE_CYCLES(CYC_DBCC_F_EXP);
  12574.                 return;
  12575.         }
  12576.         REG_PC += 2;
  12577. }
  12578.  
  12579.  
  12580. void m68k_op_dble_16(void)
  12581. {
  12582.         if(COND_NOT_LE())
  12583.         {
  12584.                 uint* r_dst = &DY;
  12585.                 uint res = MASK_OUT_ABOVE_16(*r_dst - 1);
  12586.  
  12587.                 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
  12588.                 if(res != 0xffff)
  12589.                 {
  12590.                         uint offset = OPER_I_16();
  12591.                         REG_PC -= 2;
  12592.                         m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  12593.                         m68ki_branch_16(offset);
  12594.                         USE_CYCLES(CYC_DBCC_F_NOEXP);
  12595.                         return;
  12596.                 }
  12597.                 REG_PC += 2;
  12598.                 USE_CYCLES(CYC_DBCC_F_EXP);
  12599.                 return;
  12600.         }
  12601.         REG_PC += 2;
  12602. }
  12603.  
  12604.  
  12605. void m68k_op_divs_16_d(void)
  12606. {
  12607.         uint* r_dst = &DX;
  12608.         sint src = MAKE_INT_16(DY);
  12609.         sint quotient;
  12610.         sint remainder;
  12611.  
  12612.         if(src != 0)
  12613.         {
  12614.                 if((uint32)*r_dst == 0x80000000 && src == -1)
  12615.                 {
  12616.                         FLAG_Z = 0;
  12617.                         FLAG_N = NFLAG_CLEAR;
  12618.                         FLAG_V = VFLAG_CLEAR;
  12619.                         FLAG_C = CFLAG_CLEAR;
  12620.                         *r_dst = 0;
  12621.                         return;
  12622.                 }
  12623.  
  12624.                 quotient = MAKE_INT_32(*r_dst) / src;
  12625.                 remainder = MAKE_INT_32(*r_dst) % src;
  12626.  
  12627.                 if(quotient == MAKE_INT_16(quotient))
  12628.                 {
  12629.                         FLAG_Z = quotient;
  12630.                         FLAG_N = NFLAG_16(quotient);
  12631.                         FLAG_V = VFLAG_CLEAR;
  12632.                         FLAG_C = CFLAG_CLEAR;
  12633.                         *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
  12634.                         return;
  12635.                 }
  12636.                 FLAG_V = VFLAG_SET;
  12637.                 return;
  12638.         }
  12639.         m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
  12640. }
  12641.  
  12642.  
  12643. void m68k_op_divs_16_ai(void)
  12644. {
  12645.         uint* r_dst = &DX;
  12646.         sint src = MAKE_INT_16(OPER_AY_AI_16());
  12647.         sint quotient;
  12648.         sint remainder;
  12649.  
  12650.         if(src != 0)
  12651.         {
  12652.                 if((uint32)*r_dst == 0x80000000 && src == -1)
  12653.                 {
  12654.                         FLAG_Z = 0;
  12655.                         FLAG_N = NFLAG_CLEAR;
  12656.                         FLAG_V = VFLAG_CLEAR;
  12657.                         FLAG_C = CFLAG_CLEAR;
  12658.                         *r_dst = 0;
  12659.                         return;
  12660.                 }
  12661.  
  12662.                 quotient = MAKE_INT_32(*r_dst) / src;
  12663.                 remainder = MAKE_INT_32(*r_dst) % src;
  12664.  
  12665.                 if(quotient == MAKE_INT_16(quotient))
  12666.                 {
  12667.                         FLAG_Z = quotient;
  12668.                         FLAG_N = NFLAG_16(quotient);
  12669.                         FLAG_V = VFLAG_CLEAR;
  12670.                         FLAG_C = CFLAG_CLEAR;
  12671.                         *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
  12672.                         return;
  12673.                 }
  12674.                 FLAG_V = VFLAG_SET;
  12675.                 return;
  12676.         }
  12677.         m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
  12678. }
  12679.  
  12680.  
  12681. void m68k_op_divs_16_pi(void)
  12682. {
  12683.         uint* r_dst = &DX;
  12684.         sint src = MAKE_INT_16(OPER_AY_PI_16());
  12685.         sint quotient;
  12686.         sint remainder;
  12687.  
  12688.         if(src != 0)
  12689.         {
  12690.                 if((uint32)*r_dst == 0x80000000 && src == -1)
  12691.                 {
  12692.                         FLAG_Z = 0;
  12693.                         FLAG_N = NFLAG_CLEAR;
  12694.                         FLAG_V = VFLAG_CLEAR;
  12695.                         FLAG_C = CFLAG_CLEAR;
  12696.                         *r_dst = 0;
  12697.                         return;
  12698.                 }
  12699.  
  12700.                 quotient = MAKE_INT_32(*r_dst) / src;
  12701.                 remainder = MAKE_INT_32(*r_dst) % src;
  12702.  
  12703.                 if(quotient == MAKE_INT_16(quotient))
  12704.                 {
  12705.                         FLAG_Z = quotient;
  12706.                         FLAG_N = NFLAG_16(quotient);
  12707.                         FLAG_V = VFLAG_CLEAR;
  12708.                         FLAG_C = CFLAG_CLEAR;
  12709.                         *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
  12710.                         return;
  12711.                 }
  12712.                 FLAG_V = VFLAG_SET;
  12713.                 return;
  12714.         }
  12715.         m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
  12716. }
  12717.  
  12718.  
  12719. void m68k_op_divs_16_pd(void)
  12720. {
  12721.         uint* r_dst = &DX;
  12722.         sint src = MAKE_INT_16(OPER_AY_PD_16());
  12723.         sint quotient;
  12724.         sint remainder;
  12725.  
  12726.         if(src != 0)
  12727.         {
  12728.                 if((uint32)*r_dst == 0x80000000 && src == -1)
  12729.                 {
  12730.                         FLAG_Z = 0;
  12731.                         FLAG_N = NFLAG_CLEAR;
  12732.                         FLAG_V = VFLAG_CLEAR;
  12733.                         FLAG_C = CFLAG_CLEAR;
  12734.                         *r_dst = 0;
  12735.                         return;
  12736.                 }
  12737.  
  12738.                 quotient = MAKE_INT_32(*r_dst) / src;
  12739.                 remainder = MAKE_INT_32(*r_dst) % src;
  12740.  
  12741.                 if(quotient == MAKE_INT_16(quotient))
  12742.                 {
  12743.                         FLAG_Z = quotient;
  12744.                         FLAG_N = NFLAG_16(quotient);
  12745.                         FLAG_V = VFLAG_CLEAR;
  12746.                         FLAG_C = CFLAG_CLEAR;
  12747.                         *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
  12748.                         return;
  12749.                 }
  12750.                 FLAG_V = VFLAG_SET;
  12751.                 return;
  12752.         }
  12753.         m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
  12754. }
  12755.  
  12756.  
  12757. void m68k_op_divs_16_di(void)
  12758. {
  12759.         uint* r_dst = &DX;
  12760.         sint src = MAKE_INT_16(OPER_AY_DI_16());
  12761.         sint quotient;
  12762.         sint remainder;
  12763.  
  12764.         if(src != 0)
  12765.         {
  12766.                 if((uint32)*r_dst == 0x80000000 && src == -1)
  12767.                 {
  12768.                         FLAG_Z = 0;
  12769.                         FLAG_N = NFLAG_CLEAR;
  12770.                         FLAG_V = VFLAG_CLEAR;
  12771.                         FLAG_C = CFLAG_CLEAR;
  12772.                         *r_dst = 0;
  12773.                         return;
  12774.                 }
  12775.  
  12776.                 quotient = MAKE_INT_32(*r_dst) / src;
  12777.                 remainder = MAKE_INT_32(*r_dst) % src;
  12778.  
  12779.                 if(quotient == MAKE_INT_16(quotient))
  12780.                 {
  12781.                         FLAG_Z = quotient;
  12782.                         FLAG_N = NFLAG_16(quotient);
  12783.                         FLAG_V = VFLAG_CLEAR;
  12784.                         FLAG_C = CFLAG_CLEAR;
  12785.                         *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
  12786.                         return;
  12787.                 }
  12788.                 FLAG_V = VFLAG_SET;
  12789.                 return;
  12790.         }
  12791.         m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
  12792. }
  12793.  
  12794.  
  12795. void m68k_op_divs_16_ix(void)
  12796. {
  12797.         uint* r_dst = &DX;
  12798.         sint src = MAKE_INT_16(OPER_AY_IX_16());
  12799.         sint quotient;
  12800.         sint remainder;
  12801.  
  12802.         if(src != 0)
  12803.         {
  12804.                 if((uint32)*r_dst == 0x80000000 && src == -1)
  12805.                 {
  12806.                         FLAG_Z = 0;
  12807.                         FLAG_N = NFLAG_CLEAR;
  12808.                         FLAG_V = VFLAG_CLEAR;
  12809.                         FLAG_C = CFLAG_CLEAR;
  12810.                         *r_dst = 0;
  12811.                         return;
  12812.                 }
  12813.  
  12814.                 quotient = MAKE_INT_32(*r_dst) / src;
  12815.                 remainder = MAKE_INT_32(*r_dst) % src;
  12816.  
  12817.                 if(quotient == MAKE_INT_16(quotient))
  12818.                 {
  12819.                         FLAG_Z = quotient;
  12820.                         FLAG_N = NFLAG_16(quotient);
  12821.                         FLAG_V = VFLAG_CLEAR;
  12822.                         FLAG_C = CFLAG_CLEAR;
  12823.                         *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
  12824.                         return;
  12825.                 }
  12826.                 FLAG_V = VFLAG_SET;
  12827.                 return;
  12828.         }
  12829.         m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
  12830. }
  12831.  
  12832.  
  12833. void m68k_op_divs_16_aw(void)
  12834. {
  12835.         uint* r_dst = &DX;
  12836.         sint src = MAKE_INT_16(OPER_AW_16());
  12837.         sint quotient;
  12838.         sint remainder;
  12839.  
  12840.         if(src != 0)
  12841.         {
  12842.                 if((uint32)*r_dst == 0x80000000 && src == -1)
  12843.                 {
  12844.                         FLAG_Z = 0;
  12845.                         FLAG_N = NFLAG_CLEAR;
  12846.                         FLAG_V = VFLAG_CLEAR;
  12847.                         FLAG_C = CFLAG_CLEAR;
  12848.                         *r_dst = 0;
  12849.                         return;
  12850.                 }
  12851.  
  12852.                 quotient = MAKE_INT_32(*r_dst) / src;
  12853.                 remainder = MAKE_INT_32(*r_dst) % src;
  12854.  
  12855.                 if(quotient == MAKE_INT_16(quotient))
  12856.                 {
  12857.                         FLAG_Z = quotient;
  12858.                         FLAG_N = NFLAG_16(quotient);
  12859.                         FLAG_V = VFLAG_CLEAR;
  12860.                         FLAG_C = CFLAG_CLEAR;
  12861.                         *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
  12862.                         return;
  12863.                 }
  12864.                 FLAG_V = VFLAG_SET;
  12865.                 return;
  12866.         }
  12867.         m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
  12868. }
  12869.  
  12870.  
  12871. void m68k_op_divs_16_al(void)
  12872. {
  12873.         uint* r_dst = &DX;
  12874.         sint src = MAKE_INT_16(OPER_AL_16());
  12875.         sint quotient;
  12876.         sint remainder;
  12877.  
  12878.         if(src != 0)
  12879.         {
  12880.                 if((uint32)*r_dst == 0x80000000 && src == -1)
  12881.                 {
  12882.                         FLAG_Z = 0;
  12883.                         FLAG_N = NFLAG_CLEAR;
  12884.                         FLAG_V = VFLAG_CLEAR;
  12885.                         FLAG_C = CFLAG_CLEAR;
  12886.                         *r_dst = 0;
  12887.                         return;
  12888.                 }
  12889.  
  12890.                 quotient = MAKE_INT_32(*r_dst) / src;
  12891.                 remainder = MAKE_INT_32(*r_dst) % src;
  12892.  
  12893.                 if(quotient == MAKE_INT_16(quotient))
  12894.                 {
  12895.                         FLAG_Z = quotient;
  12896.                         FLAG_N = NFLAG_16(quotient);
  12897.                         FLAG_V = VFLAG_CLEAR;
  12898.                         FLAG_C = CFLAG_CLEAR;
  12899.                         *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
  12900.                         return;
  12901.                 }
  12902.                 FLAG_V = VFLAG_SET;
  12903.                 return;
  12904.         }
  12905.         m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
  12906. }
  12907.  
  12908.  
  12909. void m68k_op_divs_16_pcdi(void)
  12910. {
  12911.         uint* r_dst = &DX;
  12912.         sint src = MAKE_INT_16(OPER_PCDI_16());
  12913.         sint quotient;
  12914.         sint remainder;
  12915.  
  12916.         if(src != 0)
  12917.         {
  12918.                 if((uint32)*r_dst == 0x80000000 && src == -1)
  12919.                 {
  12920.                         FLAG_Z = 0;
  12921.                         FLAG_N = NFLAG_CLEAR;
  12922.                         FLAG_V = VFLAG_CLEAR;
  12923.                         FLAG_C = CFLAG_CLEAR;
  12924.                         *r_dst = 0;
  12925.                         return;
  12926.                 }
  12927.  
  12928.                 quotient = MAKE_INT_32(*r_dst) / src;
  12929.                 remainder = MAKE_INT_32(*r_dst) % src;
  12930.  
  12931.                 if(quotient == MAKE_INT_16(quotient))
  12932.                 {
  12933.                         FLAG_Z = quotient;
  12934.                         FLAG_N = NFLAG_16(quotient);
  12935.                         FLAG_V = VFLAG_CLEAR;
  12936.                         FLAG_C = CFLAG_CLEAR;
  12937.                         *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
  12938.                         return;
  12939.                 }
  12940.                 FLAG_V = VFLAG_SET;
  12941.                 return;
  12942.         }
  12943.         m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
  12944. }
  12945.  
  12946.  
  12947. void m68k_op_divs_16_pcix(void)
  12948. {
  12949.         uint* r_dst = &DX;
  12950.         sint src = MAKE_INT_16(OPER_PCIX_16());
  12951.         sint quotient;
  12952.         sint remainder;
  12953.  
  12954.         if(src != 0)
  12955.         {
  12956.                 if((uint32)*r_dst == 0x80000000 && src == -1)
  12957.                 {
  12958.                         FLAG_Z = 0;
  12959.                         FLAG_N = NFLAG_CLEAR;
  12960.                         FLAG_V = VFLAG_CLEAR;
  12961.                         FLAG_C = CFLAG_CLEAR;
  12962.                         *r_dst = 0;
  12963.                         return;
  12964.                 }
  12965.  
  12966.                 quotient = MAKE_INT_32(*r_dst) / src;
  12967.                 remainder = MAKE_INT_32(*r_dst) % src;
  12968.  
  12969.                 if(quotient == MAKE_INT_16(quotient))
  12970.                 {
  12971.                         FLAG_Z = quotient;
  12972.                         FLAG_N = NFLAG_16(quotient);
  12973.                         FLAG_V = VFLAG_CLEAR;
  12974.                         FLAG_C = CFLAG_CLEAR;
  12975.                         *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
  12976.                         return;
  12977.                 }
  12978.                 FLAG_V = VFLAG_SET;
  12979.                 return;
  12980.         }
  12981.         m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
  12982. }
  12983.  
  12984.  
  12985. void m68k_op_divs_16_i(void)
  12986. {
  12987.         uint* r_dst = &DX;
  12988.         sint src = MAKE_INT_16(OPER_I_16());
  12989.         sint quotient;
  12990.         sint remainder;
  12991.  
  12992.         if(src != 0)
  12993.         {
  12994.                 if((uint32)*r_dst == 0x80000000 && src == -1)
  12995.                 {
  12996.                         FLAG_Z = 0;
  12997.                         FLAG_N = NFLAG_CLEAR;
  12998.                         FLAG_V = VFLAG_CLEAR;
  12999.                         FLAG_C = CFLAG_CLEAR;
  13000.                         *r_dst = 0;
  13001.                         return;
  13002.                 }
  13003.  
  13004.                 quotient = MAKE_INT_32(*r_dst) / src;
  13005.                 remainder = MAKE_INT_32(*r_dst) % src;
  13006.  
  13007.                 if(quotient == MAKE_INT_16(quotient))
  13008.                 {
  13009.                         FLAG_Z = quotient;
  13010.                         FLAG_N = NFLAG_16(quotient);
  13011.                         FLAG_V = VFLAG_CLEAR;
  13012.                         FLAG_C = CFLAG_CLEAR;
  13013.                         *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
  13014.                         return;
  13015.                 }
  13016.                 FLAG_V = VFLAG_SET;
  13017.                 return;
  13018.         }
  13019.         m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
  13020. }
  13021.  
  13022.  
  13023. void m68k_op_divu_16_d(void)
  13024. {
  13025.         uint* r_dst = &DX;
  13026.         uint src = MASK_OUT_ABOVE_16(DY);
  13027.  
  13028.         if(src != 0)
  13029.         {
  13030.                 uint quotient = *r_dst / src;
  13031.                 uint remainder = *r_dst % src;
  13032.  
  13033.                 if(quotient < 0x10000)
  13034.                 {
  13035.                         FLAG_Z = quotient;
  13036.                         FLAG_N = NFLAG_16(quotient);
  13037.                         FLAG_V = VFLAG_CLEAR;
  13038.                         FLAG_C = CFLAG_CLEAR;
  13039.                         *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
  13040.                         return;
  13041.                 }
  13042.                 FLAG_V = VFLAG_SET;
  13043.                 return;
  13044.         }
  13045.         m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
  13046. }
  13047.  
  13048.  
  13049. void m68k_op_divu_16_ai(void)
  13050. {
  13051.         uint* r_dst = &DX;
  13052.         uint src = OPER_AY_AI_16();
  13053.  
  13054.         if(src != 0)
  13055.         {
  13056.                 uint quotient = *r_dst / src;
  13057.                 uint remainder = *r_dst % src;
  13058.  
  13059.                 if(quotient < 0x10000)
  13060.                 {
  13061.                         FLAG_Z = quotient;
  13062.                         FLAG_N = NFLAG_16(quotient);
  13063.                         FLAG_V = VFLAG_CLEAR;
  13064.                         FLAG_C = CFLAG_CLEAR;
  13065.                         *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
  13066.                         return;
  13067.                 }
  13068.                 FLAG_V = VFLAG_SET;
  13069.                 return;
  13070.         }
  13071.         m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
  13072. }
  13073.  
  13074.  
  13075. void m68k_op_divu_16_pi(void)
  13076. {
  13077.         uint* r_dst = &DX;
  13078.         uint src = OPER_AY_PI_16();
  13079.  
  13080.         if(src != 0)
  13081.         {
  13082.                 uint quotient = *r_dst / src;
  13083.                 uint remainder = *r_dst % src;
  13084.  
  13085.                 if(quotient < 0x10000)
  13086.                 {
  13087.                         FLAG_Z = quotient;
  13088.                         FLAG_N = NFLAG_16(quotient);
  13089.                         FLAG_V = VFLAG_CLEAR;
  13090.                         FLAG_C = CFLAG_CLEAR;
  13091.                         *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
  13092.                         return;
  13093.                 }
  13094.                 FLAG_V = VFLAG_SET;
  13095.                 return;
  13096.         }
  13097.         m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
  13098. }
  13099.  
  13100.  
  13101. void m68k_op_divu_16_pd(void)
  13102. {
  13103.         uint* r_dst = &DX;
  13104.         uint src = OPER_AY_PD_16();
  13105.  
  13106.         if(src != 0)
  13107.         {
  13108.                 uint quotient = *r_dst / src;
  13109.                 uint remainder = *r_dst % src;
  13110.  
  13111.                 if(quotient < 0x10000)
  13112.                 {
  13113.                         FLAG_Z = quotient;
  13114.                         FLAG_N = NFLAG_16(quotient);
  13115.                         FLAG_V = VFLAG_CLEAR;
  13116.                         FLAG_C = CFLAG_CLEAR;
  13117.                         *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
  13118.                         return;
  13119.                 }
  13120.                 FLAG_V = VFLAG_SET;
  13121.                 return;
  13122.         }
  13123.         m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
  13124. }
  13125.  
  13126.  
  13127. void m68k_op_divu_16_di(void)
  13128. {
  13129.         uint* r_dst = &DX;
  13130.         uint src = OPER_AY_DI_16();
  13131.  
  13132.         if(src != 0)
  13133.         {
  13134.                 uint quotient = *r_dst / src;
  13135.                 uint remainder = *r_dst % src;
  13136.  
  13137.                 if(quotient < 0x10000)
  13138.                 {
  13139.                         FLAG_Z = quotient;
  13140.                         FLAG_N = NFLAG_16(quotient);
  13141.                         FLAG_V = VFLAG_CLEAR;
  13142.                         FLAG_C = CFLAG_CLEAR;
  13143.                         *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
  13144.                         return;
  13145.                 }
  13146.                 FLAG_V = VFLAG_SET;
  13147.                 return;
  13148.         }
  13149.         m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
  13150. }
  13151.  
  13152.  
  13153. void m68k_op_divu_16_ix(void)
  13154. {
  13155.         uint* r_dst = &DX;
  13156.         uint src = OPER_AY_IX_16();
  13157.  
  13158.         if(src != 0)
  13159.         {
  13160.                 uint quotient = *r_dst / src;
  13161.                 uint remainder = *r_dst % src;
  13162.  
  13163.                 if(quotient < 0x10000)
  13164.                 {
  13165.                         FLAG_Z = quotient;
  13166.                         FLAG_N = NFLAG_16(quotient);
  13167.                         FLAG_V = VFLAG_CLEAR;
  13168.                         FLAG_C = CFLAG_CLEAR;
  13169.                         *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
  13170.                         return;
  13171.                 }
  13172.                 FLAG_V = VFLAG_SET;
  13173.                 return;
  13174.         }
  13175.         m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
  13176. }
  13177.  
  13178.  
  13179. void m68k_op_divu_16_aw(void)
  13180. {
  13181.         uint* r_dst = &DX;
  13182.         uint src = OPER_AW_16();
  13183.  
  13184.         if(src != 0)
  13185.         {
  13186.                 uint quotient = *r_dst / src;
  13187.                 uint remainder = *r_dst % src;
  13188.  
  13189.                 if(quotient < 0x10000)
  13190.                 {
  13191.                         FLAG_Z = quotient;
  13192.                         FLAG_N = NFLAG_16(quotient);
  13193.                         FLAG_V = VFLAG_CLEAR;
  13194.                         FLAG_C = CFLAG_CLEAR;
  13195.                         *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
  13196.                         return;
  13197.                 }
  13198.                 FLAG_V = VFLAG_SET;
  13199.                 return;
  13200.         }
  13201.         m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
  13202. }
  13203.  
  13204.  
  13205. void m68k_op_divu_16_al(void)
  13206. {
  13207.         uint* r_dst = &DX;
  13208.         uint src = OPER_AL_16();
  13209.  
  13210.         if(src != 0)
  13211.         {
  13212.                 uint quotient = *r_dst / src;
  13213.                 uint remainder = *r_dst % src;
  13214.  
  13215.                 if(quotient < 0x10000)
  13216.                 {
  13217.                         FLAG_Z = quotient;
  13218.                         FLAG_N = NFLAG_16(quotient);
  13219.                         FLAG_V = VFLAG_CLEAR;
  13220.                         FLAG_C = CFLAG_CLEAR;
  13221.                         *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
  13222.                         return;
  13223.                 }
  13224.                 FLAG_V = VFLAG_SET;
  13225.                 return;
  13226.         }
  13227.         m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
  13228. }
  13229.  
  13230.  
  13231. void m68k_op_divu_16_pcdi(void)
  13232. {
  13233.         uint* r_dst = &DX;
  13234.         uint src = OPER_PCDI_16();
  13235.  
  13236.         if(src != 0)
  13237.         {
  13238.                 uint quotient = *r_dst / src;
  13239.                 uint remainder = *r_dst % src;
  13240.  
  13241.                 if(quotient < 0x10000)
  13242.                 {
  13243.                         FLAG_Z = quotient;
  13244.                         FLAG_N = NFLAG_16(quotient);
  13245.                         FLAG_V = VFLAG_CLEAR;
  13246.                         FLAG_C = CFLAG_CLEAR;
  13247.                         *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
  13248.                         return;
  13249.                 }
  13250.                 FLAG_V = VFLAG_SET;
  13251.                 return;
  13252.         }
  13253.         m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
  13254. }
  13255.  
  13256.  
  13257. void m68k_op_divu_16_pcix(void)
  13258. {
  13259.         uint* r_dst = &DX;
  13260.         uint src = OPER_PCIX_16();
  13261.  
  13262.         if(src != 0)
  13263.         {
  13264.                 uint quotient = *r_dst / src;
  13265.                 uint remainder = *r_dst % src;
  13266.  
  13267.                 if(quotient < 0x10000)
  13268.                 {
  13269.                         FLAG_Z = quotient;
  13270.                         FLAG_N = NFLAG_16(quotient);
  13271.                         FLAG_V = VFLAG_CLEAR;
  13272.                         FLAG_C = CFLAG_CLEAR;
  13273.                         *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
  13274.                         return;
  13275.                 }
  13276.                 FLAG_V = VFLAG_SET;
  13277.                 return;
  13278.         }
  13279.         m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
  13280. }
  13281.  
  13282.  
  13283. void m68k_op_divu_16_i(void)
  13284. {
  13285.         uint* r_dst = &DX;
  13286.         uint src = OPER_I_16();
  13287.  
  13288.         if(src != 0)
  13289.         {
  13290.                 uint quotient = *r_dst / src;
  13291.                 uint remainder = *r_dst % src;
  13292.  
  13293.                 if(quotient < 0x10000)
  13294.                 {
  13295.                         FLAG_Z = quotient;
  13296.                         FLAG_N = NFLAG_16(quotient);
  13297.                         FLAG_V = VFLAG_CLEAR;
  13298.                         FLAG_C = CFLAG_CLEAR;
  13299.                         *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
  13300.                         return;
  13301.                 }
  13302.                 FLAG_V = VFLAG_SET;
  13303.                 return;
  13304.         }
  13305.         m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
  13306. }
  13307.  
  13308.  
  13309. void m68k_op_divl_32_d(void)
  13310. {
  13311. #if M68K_USE_64_BIT
  13312.  
  13313.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  13314.         {
  13315.                 uint word2 = OPER_I_16();
  13316.                 uint64 divisor   = DY;
  13317.                 uint64 dividend  = 0;
  13318.                 uint64 quotient  = 0;
  13319.                 uint64 remainder = 0;
  13320.  
  13321.                 if(divisor != 0)
  13322.                 {
  13323.                         if(BIT_A(word2))        /* 64 bit */
  13324.                         {
  13325.                                 dividend = REG_D[word2 & 7];
  13326.                                 dividend <<= 32;
  13327.                                 dividend |= REG_D[(word2 >> 12) & 7];
  13328.  
  13329.                                 if(BIT_B(word2))           /* signed */
  13330.                                 {
  13331.                                         quotient  = (uint64)((sint64)dividend / (sint64)((sint32)divisor));
  13332.                                         remainder = (uint64)((sint64)dividend % (sint64)((sint32)divisor));
  13333.                                         if((sint64)quotient != (sint64)((sint32)quotient))
  13334.                                         {
  13335.                                                 FLAG_V = VFLAG_SET;
  13336.                                                 return;
  13337.                                         }
  13338.                                 }
  13339.                                 else                                    /* unsigned */
  13340.                                 {
  13341.                                         quotient = dividend / divisor;
  13342.                                         if(quotient > 0xffffffff)
  13343.                                         {
  13344.                                                 FLAG_V = VFLAG_SET;
  13345.                                                 return;
  13346.                                         }
  13347.                                         remainder = dividend % divisor;
  13348.                                 }
  13349.                         }
  13350.                         else    /* 32 bit */
  13351.                         {
  13352.                                 dividend = REG_D[(word2 >> 12) & 7];
  13353.                                 if(BIT_B(word2))           /* signed */
  13354.                                 {
  13355.                                         quotient  = (uint64)((sint64)((sint32)dividend) / (sint64)((sint32)divisor));
  13356.                                         remainder = (uint64)((sint64)((sint32)dividend) % (sint64)((sint32)divisor));
  13357.                                 }
  13358.                                 else                                    /* unsigned */
  13359.                                 {
  13360.                                         quotient = dividend / divisor;
  13361.                                         remainder = dividend % divisor;
  13362.                                 }
  13363.                         }
  13364.  
  13365.                         REG_D[word2 & 7] = remainder;
  13366.                         REG_D[(word2 >> 12) & 7] = quotient;
  13367.  
  13368.                         FLAG_N = NFLAG_32(quotient);
  13369.                         FLAG_Z = quotient;
  13370.                         FLAG_V = VFLAG_CLEAR;
  13371.                         FLAG_C = CFLAG_CLEAR;
  13372.                         return;
  13373.                 }
  13374.                 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
  13375.                 return;
  13376.         }
  13377.         m68ki_exception_illegal();
  13378.  
  13379. #else
  13380.  
  13381.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  13382.         {
  13383.                 uint word2 = OPER_I_16();
  13384.                 uint divisor = DY;
  13385.                 uint dividend_hi = REG_D[word2 & 7];
  13386.                 uint dividend_lo = REG_D[(word2 >> 12) & 7];
  13387.                 uint quotient = 0;
  13388.                 uint remainder = 0;
  13389.                 uint dividend_neg = 0;
  13390.                 uint divisor_neg = 0;
  13391.                 sint i;
  13392.                 uint overflow;
  13393.  
  13394.                 if(divisor != 0)
  13395.                 {
  13396.                         /* quad / long : long quotient, long remainder */
  13397.                         if(BIT_A(word2))
  13398.                         {
  13399.                                 if(BIT_B(word2))           /* signed */
  13400.                                 {
  13401.                                         /* special case in signed divide */
  13402.                                         if(dividend_hi == 0 && dividend_lo == 0x80000000 && divisor == 0xffffffff)
  13403.                                         {
  13404.                                                 REG_D[word2 & 7] = 0;
  13405.                                                 REG_D[(word2 >> 12) & 7] = 0x80000000;
  13406.  
  13407.                                                 FLAG_N = NFLAG_SET;
  13408.                                                 FLAG_Z = ZFLAG_CLEAR;
  13409.                                                 FLAG_V = VFLAG_CLEAR;
  13410.                                                 FLAG_C = CFLAG_CLEAR;
  13411.                                                 return;
  13412.                                         }
  13413.                                         if(GET_MSB_32(dividend_hi))
  13414.                                         {
  13415.                                                 dividend_neg = 1;
  13416.                                                 dividend_hi = (uint)MASK_OUT_ABOVE_32((-(sint)dividend_hi) - (dividend_lo != 0));
  13417.                                                 dividend_lo = (uint)MASK_OUT_ABOVE_32(-(sint)dividend_lo);
  13418.                                         }
  13419.                                         if(GET_MSB_32(divisor))
  13420.                                         {
  13421.                                                 divisor_neg = 1;
  13422.                                                 divisor = (uint)MASK_OUT_ABOVE_32(-(sint)divisor);
  13423.  
  13424.                                         }
  13425.                                 }
  13426.  
  13427.                                 /* if the upper long is greater than the divisor, we're overflowing. */
  13428.                                 if(dividend_hi >= divisor)
  13429.                                 {
  13430.                                         FLAG_V = VFLAG_SET;
  13431.                                         return;
  13432.                                 }
  13433.  
  13434.                                 for(i = 31; i >= 0; i--)
  13435.                                 {
  13436.                                         quotient <<= 1;
  13437.                                         remainder = (remainder << 1) + ((dividend_hi >> i) & 1);
  13438.                                         if(remainder >= divisor)
  13439.                                         {
  13440.                                                 remainder -= divisor;
  13441.                                                 quotient++;
  13442.                                         }
  13443.                                 }
  13444.                                 for(i = 31; i >= 0; i--)
  13445.                                 {
  13446.                                         quotient <<= 1;
  13447.                                         overflow = GET_MSB_32(remainder);
  13448.                                         remainder = (remainder << 1) + ((dividend_lo >> i) & 1);
  13449.                                         if(remainder >= divisor || overflow)
  13450.                                         {
  13451.                                                 remainder -= divisor;
  13452.                                                 quotient++;
  13453.                                         }
  13454.                                 }
  13455.  
  13456.                                 if(BIT_B(word2))           /* signed */
  13457.                                 {
  13458.                                         if(quotient > 0x7fffffff)
  13459.                                         {
  13460.                                                 FLAG_V = VFLAG_SET;
  13461.                                                 return;
  13462.                                         }
  13463.                                         if(dividend_neg)
  13464.                                         {
  13465.                                                 remainder = (uint)MASK_OUT_ABOVE_32(-(sint)remainder);
  13466.                                                 quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);
  13467.                                         }
  13468.                                         if(divisor_neg)
  13469.                                                 quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);
  13470.                                 }
  13471.  
  13472.                                 REG_D[word2 & 7] = remainder;
  13473.                                 REG_D[(word2 >> 12) & 7] = quotient;
  13474.  
  13475.                                 FLAG_N = NFLAG_32(quotient);
  13476.                                 FLAG_Z = quotient;
  13477.                                 FLAG_V = VFLAG_CLEAR;
  13478.                                 FLAG_C = CFLAG_CLEAR;
  13479.                                 return;
  13480.                         }
  13481.  
  13482.                         /* long / long: long quotient, maybe long remainder */
  13483.                         if(BIT_B(word2))           /* signed */
  13484.                         {
  13485.                                 /* Special case in divide */
  13486.                                 if(dividend_lo == 0x80000000 && divisor == 0xffffffff)
  13487.                                 {
  13488.                                         FLAG_N = NFLAG_SET;
  13489.                                         FLAG_Z = ZFLAG_CLEAR;
  13490.                                         FLAG_V = VFLAG_CLEAR;
  13491.                                         FLAG_C = CFLAG_CLEAR;
  13492.                                         REG_D[(word2 >> 12) & 7] = 0x80000000;
  13493.                                         REG_D[word2 & 7] = 0;
  13494.                                         return;
  13495.                                 }
  13496.                                 REG_D[word2 & 7] = MAKE_INT_32(dividend_lo) % MAKE_INT_32(divisor);
  13497.                                 quotient = REG_D[(word2 >> 12) & 7] = MAKE_INT_32(dividend_lo) / MAKE_INT_32(divisor);
  13498.                         }
  13499.                         else
  13500.                         {
  13501.                                 REG_D[word2 & 7] = MASK_OUT_ABOVE_32(dividend_lo) % MASK_OUT_ABOVE_32(divisor);
  13502.                                 quotient = REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(dividend_lo) / MASK_OUT_ABOVE_32(divisor);
  13503.                         }
  13504.  
  13505.                         FLAG_N = NFLAG_32(quotient);
  13506.                         FLAG_Z = quotient;
  13507.                         FLAG_V = VFLAG_CLEAR;
  13508.                         FLAG_C = CFLAG_CLEAR;
  13509.                         return;
  13510.                 }
  13511.                 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
  13512.                 return;
  13513.         }
  13514.         m68ki_exception_illegal();
  13515.  
  13516. #endif
  13517. }
  13518.  
  13519.  
  13520. void m68k_op_divl_32_ai(void)
  13521. {
  13522. #if M68K_USE_64_BIT
  13523.  
  13524.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  13525.         {
  13526.                 uint word2 = OPER_I_16();
  13527.                 uint64 divisor = OPER_AY_AI_32();
  13528.                 uint64 dividend  = 0;
  13529.                 uint64 quotient  = 0;
  13530.                 uint64 remainder = 0;
  13531.  
  13532.                 if(divisor != 0)
  13533.                 {
  13534.                         if(BIT_A(word2))        /* 64 bit */
  13535.                         {
  13536.                                 dividend = REG_D[word2 & 7];
  13537.                                 dividend <<= 32;
  13538.                                 dividend |= REG_D[(word2 >> 12) & 7];
  13539.  
  13540.                                 if(BIT_B(word2))           /* signed */
  13541.                                 {
  13542.                                         quotient  = (uint64)((sint64)dividend / (sint64)((sint32)divisor));
  13543.                                         remainder = (uint64)((sint64)dividend % (sint64)((sint32)divisor));
  13544.                                         if((sint64)quotient != (sint64)((sint32)quotient))
  13545.                                         {
  13546.                                                 FLAG_V = VFLAG_SET;
  13547.                                                 return;
  13548.                                         }
  13549.                                 }
  13550.                                 else                                    /* unsigned */
  13551.                                 {
  13552.                                         quotient = dividend / divisor;
  13553.                                         if(quotient > 0xffffffff)
  13554.                                         {
  13555.                                                 FLAG_V = VFLAG_SET;
  13556.                                                 return;
  13557.                                         }
  13558.                                         remainder = dividend % divisor;
  13559.                                 }
  13560.                         }
  13561.                         else    /* 32 bit */
  13562.                         {
  13563.                                 dividend = REG_D[(word2 >> 12) & 7];
  13564.                                 if(BIT_B(word2))           /* signed */
  13565.                                 {
  13566.                                         quotient  = (uint64)((sint64)((sint32)dividend) / (sint64)((sint32)divisor));
  13567.                                         remainder = (uint64)((sint64)((sint32)dividend) % (sint64)((sint32)divisor));
  13568.                                 }
  13569.                                 else                                    /* unsigned */
  13570.                                 {
  13571.                                         quotient = dividend / divisor;
  13572.                                         remainder = dividend % divisor;
  13573.                                 }
  13574.                         }
  13575.  
  13576.                         REG_D[word2 & 7] = remainder;
  13577.                         REG_D[(word2 >> 12) & 7] = quotient;
  13578.  
  13579.                         FLAG_N = NFLAG_32(quotient);
  13580.                         FLAG_Z = quotient;
  13581.                         FLAG_V = VFLAG_CLEAR;
  13582.                         FLAG_C = CFLAG_CLEAR;
  13583.                         return;
  13584.                 }
  13585.                 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
  13586.                 return;
  13587.         }
  13588.         m68ki_exception_illegal();
  13589.  
  13590. #else
  13591.  
  13592.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  13593.         {
  13594.                 uint word2 = OPER_I_16();
  13595.                 uint divisor = OPER_AY_AI_32();
  13596.                 uint dividend_hi = REG_D[word2 & 7];
  13597.                 uint dividend_lo = REG_D[(word2 >> 12) & 7];
  13598.                 uint quotient = 0;
  13599.                 uint remainder = 0;
  13600.                 uint dividend_neg = 0;
  13601.                 uint divisor_neg = 0;
  13602.                 sint i;
  13603.                 uint overflow;
  13604.  
  13605.                 if(divisor != 0)
  13606.                 {
  13607.                         /* quad / long : long quotient, long remainder */
  13608.                         if(BIT_A(word2))
  13609.                         {
  13610.                                 if(BIT_B(word2))           /* signed */
  13611.                                 {
  13612.                                         /* special case in signed divide */
  13613.                                         if(dividend_hi == 0 && dividend_lo == 0x80000000 && divisor == 0xffffffff)
  13614.                                         {
  13615.                                                 REG_D[word2 & 7] = 0;
  13616.                                                 REG_D[(word2 >> 12) & 7] = 0x80000000;
  13617.  
  13618.                                                 FLAG_N = NFLAG_SET;
  13619.                                                 FLAG_Z = ZFLAG_CLEAR;
  13620.                                                 FLAG_V = VFLAG_CLEAR;
  13621.                                                 FLAG_C = CFLAG_CLEAR;
  13622.                                                 return;
  13623.                                         }
  13624.                                         if(GET_MSB_32(dividend_hi))
  13625.                                         {
  13626.                                                 dividend_neg = 1;
  13627.                                                 dividend_hi = (uint)MASK_OUT_ABOVE_32((-(sint)dividend_hi) - (dividend_lo != 0));
  13628.                                                 dividend_lo = (uint)MASK_OUT_ABOVE_32(-(sint)dividend_lo);
  13629.                                         }
  13630.                                         if(GET_MSB_32(divisor))
  13631.                                         {
  13632.                                                 divisor_neg = 1;
  13633.                                                 divisor = (uint)MASK_OUT_ABOVE_32(-(sint)divisor);
  13634.  
  13635.                                         }
  13636.                                 }
  13637.  
  13638.                                 /* if the upper long is greater than the divisor, we're overflowing. */
  13639.                                 if(dividend_hi >= divisor)
  13640.                                 {
  13641.                                         FLAG_V = VFLAG_SET;
  13642.                                         return;
  13643.                                 }
  13644.  
  13645.                                 for(i = 31; i >= 0; i--)
  13646.                                 {
  13647.                                         quotient <<= 1;
  13648.                                         remainder = (remainder << 1) + ((dividend_hi >> i) & 1);
  13649.                                         if(remainder >= divisor)
  13650.                                         {
  13651.                                                 remainder -= divisor;
  13652.                                                 quotient++;
  13653.                                         }
  13654.                                 }
  13655.                                 for(i = 31; i >= 0; i--)
  13656.                                 {
  13657.                                         quotient <<= 1;
  13658.                                         overflow = GET_MSB_32(remainder);
  13659.                                         remainder = (remainder << 1) + ((dividend_lo >> i) & 1);
  13660.                                         if(remainder >= divisor || overflow)
  13661.                                         {
  13662.                                                 remainder -= divisor;
  13663.                                                 quotient++;
  13664.                                         }
  13665.                                 }
  13666.  
  13667.                                 if(BIT_B(word2))           /* signed */
  13668.                                 {
  13669.                                         if(quotient > 0x7fffffff)
  13670.                                         {
  13671.                                                 FLAG_V = VFLAG_SET;
  13672.                                                 return;
  13673.                                         }
  13674.                                         if(dividend_neg)
  13675.                                         {
  13676.                                                 remainder = (uint)MASK_OUT_ABOVE_32(-(sint)remainder);
  13677.                                                 quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);
  13678.                                         }
  13679.                                         if(divisor_neg)
  13680.                                                 quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);
  13681.                                 }
  13682.  
  13683.                                 REG_D[word2 & 7] = remainder;
  13684.                                 REG_D[(word2 >> 12) & 7] = quotient;
  13685.  
  13686.                                 FLAG_N = NFLAG_32(quotient);
  13687.                                 FLAG_Z = quotient;
  13688.                                 FLAG_V = VFLAG_CLEAR;
  13689.                                 FLAG_C = CFLAG_CLEAR;
  13690.                                 return;
  13691.                         }
  13692.  
  13693.                         /* long / long: long quotient, maybe long remainder */
  13694.                         if(BIT_B(word2))           /* signed */
  13695.                         {
  13696.                                 /* Special case in divide */
  13697.                                 if(dividend_lo == 0x80000000 && divisor == 0xffffffff)
  13698.                                 {
  13699.                                         FLAG_N = NFLAG_SET;
  13700.                                         FLAG_Z = ZFLAG_CLEAR;
  13701.                                         FLAG_V = VFLAG_CLEAR;
  13702.                                         FLAG_C = CFLAG_CLEAR;
  13703.                                         REG_D[(word2 >> 12) & 7] = 0x80000000;
  13704.                                         REG_D[word2 & 7] = 0;
  13705.                                         return;
  13706.                                 }
  13707.                                 REG_D[word2 & 7] = MAKE_INT_32(dividend_lo) % MAKE_INT_32(divisor);
  13708.                                 quotient = REG_D[(word2 >> 12) & 7] = MAKE_INT_32(dividend_lo) / MAKE_INT_32(divisor);
  13709.                         }
  13710.                         else
  13711.                         {
  13712.                                 REG_D[word2 & 7] = MASK_OUT_ABOVE_32(dividend_lo) % MASK_OUT_ABOVE_32(divisor);
  13713.                                 quotient = REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(dividend_lo) / MASK_OUT_ABOVE_32(divisor);
  13714.                         }
  13715.  
  13716.                         FLAG_N = NFLAG_32(quotient);
  13717.                         FLAG_Z = quotient;
  13718.                         FLAG_V = VFLAG_CLEAR;
  13719.                         FLAG_C = CFLAG_CLEAR;
  13720.                         return;
  13721.                 }
  13722.                 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
  13723.                 return;
  13724.         }
  13725.         m68ki_exception_illegal();
  13726.  
  13727. #endif
  13728. }
  13729.  
  13730.  
  13731. void m68k_op_divl_32_pi(void)
  13732. {
  13733. #if M68K_USE_64_BIT
  13734.  
  13735.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  13736.         {
  13737.                 uint word2 = OPER_I_16();
  13738.                 uint64 divisor = OPER_AY_PI_32();
  13739.                 uint64 dividend  = 0;
  13740.                 uint64 quotient  = 0;
  13741.                 uint64 remainder = 0;
  13742.  
  13743.                 if(divisor != 0)
  13744.                 {
  13745.                         if(BIT_A(word2))        /* 64 bit */
  13746.                         {
  13747.                                 dividend = REG_D[word2 & 7];
  13748.                                 dividend <<= 32;
  13749.                                 dividend |= REG_D[(word2 >> 12) & 7];
  13750.  
  13751.                                 if(BIT_B(word2))           /* signed */
  13752.                                 {
  13753.                                         quotient  = (uint64)((sint64)dividend / (sint64)((sint32)divisor));
  13754.                                         remainder = (uint64)((sint64)dividend % (sint64)((sint32)divisor));
  13755.                                         if((sint64)quotient != (sint64)((sint32)quotient))
  13756.                                         {
  13757.                                                 FLAG_V = VFLAG_SET;
  13758.                                                 return;
  13759.                                         }
  13760.                                 }
  13761.                                 else                                    /* unsigned */
  13762.                                 {
  13763.                                         quotient = dividend / divisor;
  13764.                                         if(quotient > 0xffffffff)
  13765.                                         {
  13766.                                                 FLAG_V = VFLAG_SET;
  13767.                                                 return;
  13768.                                         }
  13769.                                         remainder = dividend % divisor;
  13770.                                 }
  13771.                         }
  13772.                         else    /* 32 bit */
  13773.                         {
  13774.                                 dividend = REG_D[(word2 >> 12) & 7];
  13775.                                 if(BIT_B(word2))           /* signed */
  13776.                                 {
  13777.                                         quotient  = (uint64)((sint64)((sint32)dividend) / (sint64)((sint32)divisor));
  13778.                                         remainder = (uint64)((sint64)((sint32)dividend) % (sint64)((sint32)divisor));
  13779.                                 }
  13780.                                 else                                    /* unsigned */
  13781.                                 {
  13782.                                         quotient = dividend / divisor;
  13783.                                         remainder = dividend % divisor;
  13784.                                 }
  13785.                         }
  13786.  
  13787.                         REG_D[word2 & 7] = remainder;
  13788.                         REG_D[(word2 >> 12) & 7] = quotient;
  13789.  
  13790.                         FLAG_N = NFLAG_32(quotient);
  13791.                         FLAG_Z = quotient;
  13792.                         FLAG_V = VFLAG_CLEAR;
  13793.                         FLAG_C = CFLAG_CLEAR;
  13794.                         return;
  13795.                 }
  13796.                 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
  13797.                 return;
  13798.         }
  13799.         m68ki_exception_illegal();
  13800.  
  13801. #else
  13802.  
  13803.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  13804.         {
  13805.                 uint word2 = OPER_I_16();
  13806.                 uint divisor = OPER_AY_PI_32();
  13807.                 uint dividend_hi = REG_D[word2 & 7];
  13808.                 uint dividend_lo = REG_D[(word2 >> 12) & 7];
  13809.                 uint quotient = 0;
  13810.                 uint remainder = 0;
  13811.                 uint dividend_neg = 0;
  13812.                 uint divisor_neg = 0;
  13813.                 sint i;
  13814.                 uint overflow;
  13815.  
  13816.                 if(divisor != 0)
  13817.                 {
  13818.                         /* quad / long : long quotient, long remainder */
  13819.                         if(BIT_A(word2))
  13820.                         {
  13821.                                 if(BIT_B(word2))           /* signed */
  13822.                                 {
  13823.                                         /* special case in signed divide */
  13824.                                         if(dividend_hi == 0 && dividend_lo == 0x80000000 && divisor == 0xffffffff)
  13825.                                         {
  13826.                                                 REG_D[word2 & 7] = 0;
  13827.                                                 REG_D[(word2 >> 12) & 7] = 0x80000000;
  13828.  
  13829.                                                 FLAG_N = NFLAG_SET;
  13830.                                                 FLAG_Z = ZFLAG_CLEAR;
  13831.                                                 FLAG_V = VFLAG_CLEAR;
  13832.                                                 FLAG_C = CFLAG_CLEAR;
  13833.                                                 return;
  13834.                                         }
  13835.                                         if(GET_MSB_32(dividend_hi))
  13836.                                         {
  13837.                                                 dividend_neg = 1;
  13838.                                                 dividend_hi = (uint)MASK_OUT_ABOVE_32((-(sint)dividend_hi) - (dividend_lo != 0));
  13839.                                                 dividend_lo = (uint)MASK_OUT_ABOVE_32(-(sint)dividend_lo);
  13840.                                         }
  13841.                                         if(GET_MSB_32(divisor))
  13842.                                         {
  13843.                                                 divisor_neg = 1;
  13844.                                                 divisor = (uint)MASK_OUT_ABOVE_32(-(sint)divisor);
  13845.  
  13846.                                         }
  13847.                                 }
  13848.  
  13849.                                 /* if the upper long is greater than the divisor, we're overflowing. */
  13850.                                 if(dividend_hi >= divisor)
  13851.                                 {
  13852.                                         FLAG_V = VFLAG_SET;
  13853.                                         return;
  13854.                                 }
  13855.  
  13856.                                 for(i = 31; i >= 0; i--)
  13857.                                 {
  13858.                                         quotient <<= 1;
  13859.                                         remainder = (remainder << 1) + ((dividend_hi >> i) & 1);
  13860.                                         if(remainder >= divisor)
  13861.                                         {
  13862.                                                 remainder -= divisor;
  13863.                                                 quotient++;
  13864.                                         }
  13865.                                 }
  13866.                                 for(i = 31; i >= 0; i--)
  13867.                                 {
  13868.                                         quotient <<= 1;
  13869.                                         overflow = GET_MSB_32(remainder);
  13870.                                         remainder = (remainder << 1) + ((dividend_lo >> i) & 1);
  13871.                                         if(remainder >= divisor || overflow)
  13872.                                         {
  13873.                                                 remainder -= divisor;
  13874.                                                 quotient++;
  13875.                                         }
  13876.                                 }
  13877.  
  13878.                                 if(BIT_B(word2))           /* signed */
  13879.                                 {
  13880.                                         if(quotient > 0x7fffffff)
  13881.                                         {
  13882.                                                 FLAG_V = VFLAG_SET;
  13883.                                                 return;
  13884.                                         }
  13885.                                         if(dividend_neg)
  13886.                                         {
  13887.                                                 remainder = (uint)MASK_OUT_ABOVE_32(-(sint)remainder);
  13888.                                                 quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);
  13889.                                         }
  13890.                                         if(divisor_neg)
  13891.                                                 quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);
  13892.                                 }
  13893.  
  13894.                                 REG_D[word2 & 7] = remainder;
  13895.                                 REG_D[(word2 >> 12) & 7] = quotient;
  13896.  
  13897.                                 FLAG_N = NFLAG_32(quotient);
  13898.                                 FLAG_Z = quotient;
  13899.                                 FLAG_V = VFLAG_CLEAR;
  13900.                                 FLAG_C = CFLAG_CLEAR;
  13901.                                 return;
  13902.                         }
  13903.  
  13904.                         /* long / long: long quotient, maybe long remainder */
  13905.                         if(BIT_B(word2))           /* signed */
  13906.                         {
  13907.                                 /* Special case in divide */
  13908.                                 if(dividend_lo == 0x80000000 && divisor == 0xffffffff)
  13909.                                 {
  13910.                                         FLAG_N = NFLAG_SET;
  13911.                                         FLAG_Z = ZFLAG_CLEAR;
  13912.                                         FLAG_V = VFLAG_CLEAR;
  13913.                                         FLAG_C = CFLAG_CLEAR;
  13914.                                         REG_D[(word2 >> 12) & 7] = 0x80000000;
  13915.                                         REG_D[word2 & 7] = 0;
  13916.                                         return;
  13917.                                 }
  13918.                                 REG_D[word2 & 7] = MAKE_INT_32(dividend_lo) % MAKE_INT_32(divisor);
  13919.                                 quotient = REG_D[(word2 >> 12) & 7] = MAKE_INT_32(dividend_lo) / MAKE_INT_32(divisor);
  13920.                         }
  13921.                         else
  13922.                         {
  13923.                                 REG_D[word2 & 7] = MASK_OUT_ABOVE_32(dividend_lo) % MASK_OUT_ABOVE_32(divisor);
  13924.                                 quotient = REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(dividend_lo) / MASK_OUT_ABOVE_32(divisor);
  13925.                         }
  13926.  
  13927.                         FLAG_N = NFLAG_32(quotient);
  13928.                         FLAG_Z = quotient;
  13929.                         FLAG_V = VFLAG_CLEAR;
  13930.                         FLAG_C = CFLAG_CLEAR;
  13931.                         return;
  13932.                 }
  13933.                 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
  13934.                 return;
  13935.         }
  13936.         m68ki_exception_illegal();
  13937.  
  13938. #endif
  13939. }
  13940.  
  13941.  
  13942. void m68k_op_divl_32_pd(void)
  13943. {
  13944. #if M68K_USE_64_BIT
  13945.  
  13946.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  13947.         {
  13948.                 uint word2 = OPER_I_16();
  13949.                 uint64 divisor = OPER_AY_PD_32();
  13950.                 uint64 dividend  = 0;
  13951.                 uint64 quotient  = 0;
  13952.                 uint64 remainder = 0;
  13953.  
  13954.                 if(divisor != 0)
  13955.                 {
  13956.                         if(BIT_A(word2))        /* 64 bit */
  13957.                         {
  13958.                                 dividend = REG_D[word2 & 7];
  13959.                                 dividend <<= 32;
  13960.                                 dividend |= REG_D[(word2 >> 12) & 7];
  13961.  
  13962.                                 if(BIT_B(word2))           /* signed */
  13963.                                 {
  13964.                                         quotient  = (uint64)((sint64)dividend / (sint64)((sint32)divisor));
  13965.                                         remainder = (uint64)((sint64)dividend % (sint64)((sint32)divisor));
  13966.                                         if((sint64)quotient != (sint64)((sint32)quotient))
  13967.                                         {
  13968.                                                 FLAG_V = VFLAG_SET;
  13969.                                                 return;
  13970.                                         }
  13971.                                 }
  13972.                                 else                                    /* unsigned */
  13973.                                 {
  13974.                                         quotient = dividend / divisor;
  13975.                                         if(quotient > 0xffffffff)
  13976.                                         {
  13977.                                                 FLAG_V = VFLAG_SET;
  13978.                                                 return;
  13979.                                         }
  13980.                                         remainder = dividend % divisor;
  13981.                                 }
  13982.                         }
  13983.                         else    /* 32 bit */
  13984.                         {
  13985.                                 dividend = REG_D[(word2 >> 12) & 7];
  13986.                                 if(BIT_B(word2))           /* signed */
  13987.                                 {
  13988.                                         quotient  = (uint64)((sint64)((sint32)dividend) / (sint64)((sint32)divisor));
  13989.                                         remainder = (uint64)((sint64)((sint32)dividend) % (sint64)((sint32)divisor));
  13990.                                 }
  13991.                                 else                                    /* unsigned */
  13992.                                 {
  13993.                                         quotient = dividend / divisor;
  13994.                                         remainder = dividend % divisor;
  13995.                                 }
  13996.                         }
  13997.  
  13998.                         REG_D[word2 & 7] = remainder;
  13999.                         REG_D[(word2 >> 12) & 7] = quotient;
  14000.  
  14001.                         FLAG_N = NFLAG_32(quotient);
  14002.                         FLAG_Z = quotient;
  14003.                         FLAG_V = VFLAG_CLEAR;
  14004.                         FLAG_C = CFLAG_CLEAR;
  14005.                         return;
  14006.                 }
  14007.                 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
  14008.                 return;
  14009.         }
  14010.         m68ki_exception_illegal();
  14011.  
  14012. #else
  14013.  
  14014.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  14015.         {
  14016.                 uint word2 = OPER_I_16();
  14017.                 uint divisor = OPER_AY_PD_32();
  14018.                 uint dividend_hi = REG_D[word2 & 7];
  14019.                 uint dividend_lo = REG_D[(word2 >> 12) & 7];
  14020.                 uint quotient = 0;
  14021.                 uint remainder = 0;
  14022.                 uint dividend_neg = 0;
  14023.                 uint divisor_neg = 0;
  14024.                 sint i;
  14025.                 uint overflow;
  14026.  
  14027.                 if(divisor != 0)
  14028.                 {
  14029.                         /* quad / long : long quotient, long remainder */
  14030.                         if(BIT_A(word2))
  14031.                         {
  14032.                                 if(BIT_B(word2))           /* signed */
  14033.                                 {
  14034.                                         /* special case in signed divide */
  14035.                                         if(dividend_hi == 0 && dividend_lo == 0x80000000 && divisor == 0xffffffff)
  14036.                                         {
  14037.                                                 REG_D[word2 & 7] = 0;
  14038.                                                 REG_D[(word2 >> 12) & 7] = 0x80000000;
  14039.  
  14040.                                                 FLAG_N = NFLAG_SET;
  14041.                                                 FLAG_Z = ZFLAG_CLEAR;
  14042.                                                 FLAG_V = VFLAG_CLEAR;
  14043.                                                 FLAG_C = CFLAG_CLEAR;
  14044.                                                 return;
  14045.                                         }
  14046.                                         if(GET_MSB_32(dividend_hi))
  14047.                                         {
  14048.                                                 dividend_neg = 1;
  14049.                                                 dividend_hi = (uint)MASK_OUT_ABOVE_32((-(sint)dividend_hi) - (dividend_lo != 0));
  14050.                                                 dividend_lo = (uint)MASK_OUT_ABOVE_32(-(sint)dividend_lo);
  14051.                                         }
  14052.                                         if(GET_MSB_32(divisor))
  14053.                                         {
  14054.                                                 divisor_neg = 1;
  14055.                                                 divisor = (uint)MASK_OUT_ABOVE_32(-(sint)divisor);
  14056.  
  14057.                                         }
  14058.                                 }
  14059.  
  14060.                                 /* if the upper long is greater than the divisor, we're overflowing. */
  14061.                                 if(dividend_hi >= divisor)
  14062.                                 {
  14063.                                         FLAG_V = VFLAG_SET;
  14064.                                         return;
  14065.                                 }
  14066.  
  14067.                                 for(i = 31; i >= 0; i--)
  14068.                                 {
  14069.                                         quotient <<= 1;
  14070.                                         remainder = (remainder << 1) + ((dividend_hi >> i) & 1);
  14071.                                         if(remainder >= divisor)
  14072.                                         {
  14073.                                                 remainder -= divisor;
  14074.                                                 quotient++;
  14075.                                         }
  14076.                                 }
  14077.                                 for(i = 31; i >= 0; i--)
  14078.                                 {
  14079.                                         quotient <<= 1;
  14080.                                         overflow = GET_MSB_32(remainder);
  14081.                                         remainder = (remainder << 1) + ((dividend_lo >> i) & 1);
  14082.                                         if(remainder >= divisor || overflow)
  14083.                                         {
  14084.                                                 remainder -= divisor;
  14085.                                                 quotient++;
  14086.                                         }
  14087.                                 }
  14088.  
  14089.                                 if(BIT_B(word2))           /* signed */
  14090.                                 {
  14091.                                         if(quotient > 0x7fffffff)
  14092.                                         {
  14093.                                                 FLAG_V = VFLAG_SET;
  14094.                                                 return;
  14095.                                         }
  14096.                                         if(dividend_neg)
  14097.                                         {
  14098.                                                 remainder = (uint)MASK_OUT_ABOVE_32(-(sint)remainder);
  14099.                                                 quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);
  14100.                                         }
  14101.                                         if(divisor_neg)
  14102.                                                 quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);
  14103.                                 }
  14104.  
  14105.                                 REG_D[word2 & 7] = remainder;
  14106.                                 REG_D[(word2 >> 12) & 7] = quotient;
  14107.  
  14108.                                 FLAG_N = NFLAG_32(quotient);
  14109.                                 FLAG_Z = quotient;
  14110.                                 FLAG_V = VFLAG_CLEAR;
  14111.                                 FLAG_C = CFLAG_CLEAR;
  14112.                                 return;
  14113.                         }
  14114.  
  14115.                         /* long / long: long quotient, maybe long remainder */
  14116.                         if(BIT_B(word2))           /* signed */
  14117.                         {
  14118.                                 /* Special case in divide */
  14119.                                 if(dividend_lo == 0x80000000 && divisor == 0xffffffff)
  14120.                                 {
  14121.                                         FLAG_N = NFLAG_SET;
  14122.                                         FLAG_Z = ZFLAG_CLEAR;
  14123.                                         FLAG_V = VFLAG_CLEAR;
  14124.                                         FLAG_C = CFLAG_CLEAR;
  14125.                                         REG_D[(word2 >> 12) & 7] = 0x80000000;
  14126.                                         REG_D[word2 & 7] = 0;
  14127.                                         return;
  14128.                                 }
  14129.                                 REG_D[word2 & 7] = MAKE_INT_32(dividend_lo) % MAKE_INT_32(divisor);
  14130.                                 quotient = REG_D[(word2 >> 12) & 7] = MAKE_INT_32(dividend_lo) / MAKE_INT_32(divisor);
  14131.                         }
  14132.                         else
  14133.                         {
  14134.                                 REG_D[word2 & 7] = MASK_OUT_ABOVE_32(dividend_lo) % MASK_OUT_ABOVE_32(divisor);
  14135.                                 quotient = REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(dividend_lo) / MASK_OUT_ABOVE_32(divisor);
  14136.                         }
  14137.  
  14138.                         FLAG_N = NFLAG_32(quotient);
  14139.                         FLAG_Z = quotient;
  14140.                         FLAG_V = VFLAG_CLEAR;
  14141.                         FLAG_C = CFLAG_CLEAR;
  14142.                         return;
  14143.                 }
  14144.                 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
  14145.                 return;
  14146.         }
  14147.         m68ki_exception_illegal();
  14148.  
  14149. #endif
  14150. }
  14151.  
  14152.  
  14153. void m68k_op_divl_32_di(void)
  14154. {
  14155. #if M68K_USE_64_BIT
  14156.  
  14157.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  14158.         {
  14159.                 uint word2 = OPER_I_16();
  14160.                 uint64 divisor = OPER_AY_DI_32();
  14161.                 uint64 dividend  = 0;
  14162.                 uint64 quotient  = 0;
  14163.                 uint64 remainder = 0;
  14164.  
  14165.                 if(divisor != 0)
  14166.                 {
  14167.                         if(BIT_A(word2))        /* 64 bit */
  14168.                         {
  14169.                                 dividend = REG_D[word2 & 7];
  14170.                                 dividend <<= 32;
  14171.                                 dividend |= REG_D[(word2 >> 12) & 7];
  14172.  
  14173.                                 if(BIT_B(word2))           /* signed */
  14174.                                 {
  14175.                                         quotient  = (uint64)((sint64)dividend / (sint64)((sint32)divisor));
  14176.                                         remainder = (uint64)((sint64)dividend % (sint64)((sint32)divisor));
  14177.                                         if((sint64)quotient != (sint64)((sint32)quotient))
  14178.                                         {
  14179.                                                 FLAG_V = VFLAG_SET;
  14180.                                                 return;
  14181.                                         }
  14182.                                 }
  14183.                                 else                                    /* unsigned */
  14184.                                 {
  14185.                                         quotient = dividend / divisor;
  14186.                                         if(quotient > 0xffffffff)
  14187.                                         {
  14188.                                                 FLAG_V = VFLAG_SET;
  14189.                                                 return;
  14190.                                         }
  14191.                                         remainder = dividend % divisor;
  14192.                                 }
  14193.                         }
  14194.                         else    /* 32 bit */
  14195.                         {
  14196.                                 dividend = REG_D[(word2 >> 12) & 7];
  14197.                                 if(BIT_B(word2))           /* signed */
  14198.                                 {
  14199.                                         quotient  = (uint64)((sint64)((sint32)dividend) / (sint64)((sint32)divisor));
  14200.                                         remainder = (uint64)((sint64)((sint32)dividend) % (sint64)((sint32)divisor));
  14201.                                 }
  14202.                                 else                                    /* unsigned */
  14203.                                 {
  14204.                                         quotient = dividend / divisor;
  14205.                                         remainder = dividend % divisor;
  14206.                                 }
  14207.                         }
  14208.  
  14209.                         REG_D[word2 & 7] = remainder;
  14210.                         REG_D[(word2 >> 12) & 7] = quotient;
  14211.  
  14212.                         FLAG_N = NFLAG_32(quotient);
  14213.                         FLAG_Z = quotient;
  14214.                         FLAG_V = VFLAG_CLEAR;
  14215.                         FLAG_C = CFLAG_CLEAR;
  14216.                         return;
  14217.                 }
  14218.                 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
  14219.                 return;
  14220.         }
  14221.         m68ki_exception_illegal();
  14222.  
  14223. #else
  14224.  
  14225.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  14226.         {
  14227.                 uint word2 = OPER_I_16();
  14228.                 uint divisor = OPER_AY_DI_32();
  14229.                 uint dividend_hi = REG_D[word2 & 7];
  14230.                 uint dividend_lo = REG_D[(word2 >> 12) & 7];
  14231.                 uint quotient = 0;
  14232.                 uint remainder = 0;
  14233.                 uint dividend_neg = 0;
  14234.                 uint divisor_neg = 0;
  14235.                 sint i;
  14236.                 uint overflow;
  14237.  
  14238.                 if(divisor != 0)
  14239.                 {
  14240.                         /* quad / long : long quotient, long remainder */
  14241.                         if(BIT_A(word2))
  14242.                         {
  14243.                                 if(BIT_B(word2))           /* signed */
  14244.                                 {
  14245.                                         /* special case in signed divide */
  14246.                                         if(dividend_hi == 0 && dividend_lo == 0x80000000 && divisor == 0xffffffff)
  14247.                                         {
  14248.                                                 REG_D[word2 & 7] = 0;
  14249.                                                 REG_D[(word2 >> 12) & 7] = 0x80000000;
  14250.  
  14251.                                                 FLAG_N = NFLAG_SET;
  14252.                                                 FLAG_Z = ZFLAG_CLEAR;
  14253.                                                 FLAG_V = VFLAG_CLEAR;
  14254.                                                 FLAG_C = CFLAG_CLEAR;
  14255.                                                 return;
  14256.                                         }
  14257.                                         if(GET_MSB_32(dividend_hi))
  14258.                                         {
  14259.                                                 dividend_neg = 1;
  14260.                                                 dividend_hi = (uint)MASK_OUT_ABOVE_32((-(sint)dividend_hi) - (dividend_lo != 0));
  14261.                                                 dividend_lo = (uint)MASK_OUT_ABOVE_32(-(sint)dividend_lo);
  14262.                                         }
  14263.                                         if(GET_MSB_32(divisor))
  14264.                                         {
  14265.                                                 divisor_neg = 1;
  14266.                                                 divisor = (uint)MASK_OUT_ABOVE_32(-(sint)divisor);
  14267.  
  14268.                                         }
  14269.                                 }
  14270.  
  14271.                                 /* if the upper long is greater than the divisor, we're overflowing. */
  14272.                                 if(dividend_hi >= divisor)
  14273.                                 {
  14274.                                         FLAG_V = VFLAG_SET;
  14275.                                         return;
  14276.                                 }
  14277.  
  14278.                                 for(i = 31; i >= 0; i--)
  14279.                                 {
  14280.                                         quotient <<= 1;
  14281.                                         remainder = (remainder << 1) + ((dividend_hi >> i) & 1);
  14282.                                         if(remainder >= divisor)
  14283.                                         {
  14284.                                                 remainder -= divisor;
  14285.                                                 quotient++;
  14286.                                         }
  14287.                                 }
  14288.                                 for(i = 31; i >= 0; i--)
  14289.                                 {
  14290.                                         quotient <<= 1;
  14291.                                         overflow = GET_MSB_32(remainder);
  14292.                                         remainder = (remainder << 1) + ((dividend_lo >> i) & 1);
  14293.                                         if(remainder >= divisor || overflow)
  14294.                                         {
  14295.                                                 remainder -= divisor;
  14296.                                                 quotient++;
  14297.                                         }
  14298.                                 }
  14299.  
  14300.                                 if(BIT_B(word2))           /* signed */
  14301.                                 {
  14302.                                         if(quotient > 0x7fffffff)
  14303.                                         {
  14304.                                                 FLAG_V = VFLAG_SET;
  14305.                                                 return;
  14306.                                         }
  14307.                                         if(dividend_neg)
  14308.                                         {
  14309.                                                 remainder = (uint)MASK_OUT_ABOVE_32(-(sint)remainder);
  14310.                                                 quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);
  14311.                                         }
  14312.                                         if(divisor_neg)
  14313.                                                 quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);
  14314.                                 }
  14315.  
  14316.                                 REG_D[word2 & 7] = remainder;
  14317.                                 REG_D[(word2 >> 12) & 7] = quotient;
  14318.  
  14319.                                 FLAG_N = NFLAG_32(quotient);
  14320.                                 FLAG_Z = quotient;
  14321.                                 FLAG_V = VFLAG_CLEAR;
  14322.                                 FLAG_C = CFLAG_CLEAR;
  14323.                                 return;
  14324.                         }
  14325.  
  14326.                         /* long / long: long quotient, maybe long remainder */
  14327.                         if(BIT_B(word2))           /* signed */
  14328.                         {
  14329.                                 /* Special case in divide */
  14330.                                 if(dividend_lo == 0x80000000 && divisor == 0xffffffff)
  14331.                                 {
  14332.                                         FLAG_N = NFLAG_SET;
  14333.                                         FLAG_Z = ZFLAG_CLEAR;
  14334.                                         FLAG_V = VFLAG_CLEAR;
  14335.                                         FLAG_C = CFLAG_CLEAR;
  14336.                                         REG_D[(word2 >> 12) & 7] = 0x80000000;
  14337.                                         REG_D[word2 & 7] = 0;
  14338.                                         return;
  14339.                                 }
  14340.                                 REG_D[word2 & 7] = MAKE_INT_32(dividend_lo) % MAKE_INT_32(divisor);
  14341.                                 quotient = REG_D[(word2 >> 12) & 7] = MAKE_INT_32(dividend_lo) / MAKE_INT_32(divisor);
  14342.                         }
  14343.                         else
  14344.                         {
  14345.                                 REG_D[word2 & 7] = MASK_OUT_ABOVE_32(dividend_lo) % MASK_OUT_ABOVE_32(divisor);
  14346.                                 quotient = REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(dividend_lo) / MASK_OUT_ABOVE_32(divisor);
  14347.                         }
  14348.  
  14349.                         FLAG_N = NFLAG_32(quotient);
  14350.                         FLAG_Z = quotient;
  14351.                         FLAG_V = VFLAG_CLEAR;
  14352.                         FLAG_C = CFLAG_CLEAR;
  14353.                         return;
  14354.                 }
  14355.                 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
  14356.                 return;
  14357.         }
  14358.         m68ki_exception_illegal();
  14359.  
  14360. #endif
  14361. }
  14362.  
  14363.  
  14364. void m68k_op_divl_32_ix(void)
  14365. {
  14366. #if M68K_USE_64_BIT
  14367.  
  14368.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  14369.         {
  14370.                 uint word2 = OPER_I_16();
  14371.                 uint64 divisor = OPER_AY_IX_32();
  14372.                 uint64 dividend  = 0;
  14373.                 uint64 quotient  = 0;
  14374.                 uint64 remainder = 0;
  14375.  
  14376.                 if(divisor != 0)
  14377.                 {
  14378.                         if(BIT_A(word2))        /* 64 bit */
  14379.                         {
  14380.                                 dividend = REG_D[word2 & 7];
  14381.                                 dividend <<= 32;
  14382.                                 dividend |= REG_D[(word2 >> 12) & 7];
  14383.  
  14384.                                 if(BIT_B(word2))           /* signed */
  14385.                                 {
  14386.                                         quotient  = (uint64)((sint64)dividend / (sint64)((sint32)divisor));
  14387.                                         remainder = (uint64)((sint64)dividend % (sint64)((sint32)divisor));
  14388.                                         if((sint64)quotient != (sint64)((sint32)quotient))
  14389.                                         {
  14390.                                                 FLAG_V = VFLAG_SET;
  14391.                                                 return;
  14392.                                         }
  14393.                                 }
  14394.                                 else                                    /* unsigned */
  14395.                                 {
  14396.                                         quotient = dividend / divisor;
  14397.                                         if(quotient > 0xffffffff)
  14398.                                         {
  14399.                                                 FLAG_V = VFLAG_SET;
  14400.                                                 return;
  14401.                                         }
  14402.                                         remainder = dividend % divisor;
  14403.                                 }
  14404.                         }
  14405.                         else    /* 32 bit */
  14406.                         {
  14407.                                 dividend = REG_D[(word2 >> 12) & 7];
  14408.                                 if(BIT_B(word2))           /* signed */
  14409.                                 {
  14410.                                         quotient  = (uint64)((sint64)((sint32)dividend) / (sint64)((sint32)divisor));
  14411.                                         remainder = (uint64)((sint64)((sint32)dividend) % (sint64)((sint32)divisor));
  14412.                                 }
  14413.                                 else                                    /* unsigned */
  14414.                                 {
  14415.                                         quotient = dividend / divisor;
  14416.                                         remainder = dividend % divisor;
  14417.                                 }
  14418.                         }
  14419.  
  14420.                         REG_D[word2 & 7] = remainder;
  14421.                         REG_D[(word2 >> 12) & 7] = quotient;
  14422.  
  14423.                         FLAG_N = NFLAG_32(quotient);
  14424.                         FLAG_Z = quotient;
  14425.                         FLAG_V = VFLAG_CLEAR;
  14426.                         FLAG_C = CFLAG_CLEAR;
  14427.                         return;
  14428.                 }
  14429.                 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
  14430.                 return;
  14431.         }
  14432.         m68ki_exception_illegal();
  14433.  
  14434. #else
  14435.  
  14436.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  14437.         {
  14438.                 uint word2 = OPER_I_16();
  14439.                 uint divisor = OPER_AY_IX_32();
  14440.                 uint dividend_hi = REG_D[word2 & 7];
  14441.                 uint dividend_lo = REG_D[(word2 >> 12) & 7];
  14442.                 uint quotient = 0;
  14443.                 uint remainder = 0;
  14444.                 uint dividend_neg = 0;
  14445.                 uint divisor_neg = 0;
  14446.                 sint i;
  14447.                 uint overflow;
  14448.  
  14449.                 if(divisor != 0)
  14450.                 {
  14451.                         /* quad / long : long quotient, long remainder */
  14452.                         if(BIT_A(word2))
  14453.                         {
  14454.                                 if(BIT_B(word2))           /* signed */
  14455.                                 {
  14456.                                         /* special case in signed divide */
  14457.                                         if(dividend_hi == 0 && dividend_lo == 0x80000000 && divisor == 0xffffffff)
  14458.                                         {
  14459.                                                 REG_D[word2 & 7] = 0;
  14460.                                                 REG_D[(word2 >> 12) & 7] = 0x80000000;
  14461.  
  14462.                                                 FLAG_N = NFLAG_SET;
  14463.                                                 FLAG_Z = ZFLAG_CLEAR;
  14464.                                                 FLAG_V = VFLAG_CLEAR;
  14465.                                                 FLAG_C = CFLAG_CLEAR;
  14466.                                                 return;
  14467.                                         }
  14468.                                         if(GET_MSB_32(dividend_hi))
  14469.                                         {
  14470.                                                 dividend_neg = 1;
  14471.                                                 dividend_hi = (uint)MASK_OUT_ABOVE_32((-(sint)dividend_hi) - (dividend_lo != 0));
  14472.                                                 dividend_lo = (uint)MASK_OUT_ABOVE_32(-(sint)dividend_lo);
  14473.                                         }
  14474.                                         if(GET_MSB_32(divisor))
  14475.                                         {
  14476.                                                 divisor_neg = 1;
  14477.                                                 divisor = (uint)MASK_OUT_ABOVE_32(-(sint)divisor);
  14478.  
  14479.                                         }
  14480.                                 }
  14481.  
  14482.                                 /* if the upper long is greater than the divisor, we're overflowing. */
  14483.                                 if(dividend_hi >= divisor)
  14484.                                 {
  14485.                                         FLAG_V = VFLAG_SET;
  14486.                                         return;
  14487.                                 }
  14488.  
  14489.                                 for(i = 31; i >= 0; i--)
  14490.                                 {
  14491.                                         quotient <<= 1;
  14492.                                         remainder = (remainder << 1) + ((dividend_hi >> i) & 1);
  14493.                                         if(remainder >= divisor)
  14494.                                         {
  14495.                                                 remainder -= divisor;
  14496.                                                 quotient++;
  14497.                                         }
  14498.                                 }
  14499.                                 for(i = 31; i >= 0; i--)
  14500.                                 {
  14501.                                         quotient <<= 1;
  14502.                                         overflow = GET_MSB_32(remainder);
  14503.                                         remainder = (remainder << 1) + ((dividend_lo >> i) & 1);
  14504.                                         if(remainder >= divisor || overflow)
  14505.                                         {
  14506.                                                 remainder -= divisor;
  14507.                                                 quotient++;
  14508.                                         }
  14509.                                 }
  14510.  
  14511.                                 if(BIT_B(word2))           /* signed */
  14512.                                 {
  14513.                                         if(quotient > 0x7fffffff)
  14514.                                         {
  14515.                                                 FLAG_V = VFLAG_SET;
  14516.                                                 return;
  14517.                                         }
  14518.                                         if(dividend_neg)
  14519.                                         {
  14520.                                                 remainder = (uint)MASK_OUT_ABOVE_32(-(sint)remainder);
  14521.                                                 quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);
  14522.                                         }
  14523.                                         if(divisor_neg)
  14524.                                                 quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);
  14525.                                 }
  14526.  
  14527.                                 REG_D[word2 & 7] = remainder;
  14528.                                 REG_D[(word2 >> 12) & 7] = quotient;
  14529.  
  14530.                                 FLAG_N = NFLAG_32(quotient);
  14531.                                 FLAG_Z = quotient;
  14532.                                 FLAG_V = VFLAG_CLEAR;
  14533.                                 FLAG_C = CFLAG_CLEAR;
  14534.                                 return;
  14535.                         }
  14536.  
  14537.                         /* long / long: long quotient, maybe long remainder */
  14538.                         if(BIT_B(word2))           /* signed */
  14539.                         {
  14540.                                 /* Special case in divide */
  14541.                                 if(dividend_lo == 0x80000000 && divisor == 0xffffffff)
  14542.                                 {
  14543.                                         FLAG_N = NFLAG_SET;
  14544.                                         FLAG_Z = ZFLAG_CLEAR;
  14545.                                         FLAG_V = VFLAG_CLEAR;
  14546.                                         FLAG_C = CFLAG_CLEAR;
  14547.                                         REG_D[(word2 >> 12) & 7] = 0x80000000;
  14548.                                         REG_D[word2 & 7] = 0;
  14549.                                         return;
  14550.                                 }
  14551.                                 REG_D[word2 & 7] = MAKE_INT_32(dividend_lo) % MAKE_INT_32(divisor);
  14552.                                 quotient = REG_D[(word2 >> 12) & 7] = MAKE_INT_32(dividend_lo) / MAKE_INT_32(divisor);
  14553.                         }
  14554.                         else
  14555.                         {
  14556.                                 REG_D[word2 & 7] = MASK_OUT_ABOVE_32(dividend_lo) % MASK_OUT_ABOVE_32(divisor);
  14557.                                 quotient = REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(dividend_lo) / MASK_OUT_ABOVE_32(divisor);
  14558.                         }
  14559.  
  14560.                         FLAG_N = NFLAG_32(quotient);
  14561.                         FLAG_Z = quotient;
  14562.                         FLAG_V = VFLAG_CLEAR;
  14563.                         FLAG_C = CFLAG_CLEAR;
  14564.                         return;
  14565.                 }
  14566.                 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
  14567.                 return;
  14568.         }
  14569.         m68ki_exception_illegal();
  14570.  
  14571. #endif
  14572. }
  14573.  
  14574.  
  14575. void m68k_op_divl_32_aw(void)
  14576. {
  14577. #if M68K_USE_64_BIT
  14578.  
  14579.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  14580.         {
  14581.                 uint word2 = OPER_I_16();
  14582.                 uint64 divisor = OPER_AW_32();
  14583.                 uint64 dividend  = 0;
  14584.                 uint64 quotient  = 0;
  14585.                 uint64 remainder = 0;
  14586.  
  14587.                 if(divisor != 0)
  14588.                 {
  14589.                         if(BIT_A(word2))        /* 64 bit */
  14590.                         {
  14591.                                 dividend = REG_D[word2 & 7];
  14592.                                 dividend <<= 32;
  14593.                                 dividend |= REG_D[(word2 >> 12) & 7];
  14594.  
  14595.                                 if(BIT_B(word2))           /* signed */
  14596.                                 {
  14597.                                         quotient  = (uint64)((sint64)dividend / (sint64)((sint32)divisor));
  14598.                                         remainder = (uint64)((sint64)dividend % (sint64)((sint32)divisor));
  14599.                                         if((sint64)quotient != (sint64)((sint32)quotient))
  14600.                                         {
  14601.                                                 FLAG_V = VFLAG_SET;
  14602.                                                 return;
  14603.                                         }
  14604.                                 }
  14605.                                 else                                    /* unsigned */
  14606.                                 {
  14607.                                         quotient = dividend / divisor;
  14608.                                         if(quotient > 0xffffffff)
  14609.                                         {
  14610.                                                 FLAG_V = VFLAG_SET;
  14611.                                                 return;
  14612.                                         }
  14613.                                         remainder = dividend % divisor;
  14614.                                 }
  14615.                         }
  14616.                         else    /* 32 bit */
  14617.                         {
  14618.                                 dividend = REG_D[(word2 >> 12) & 7];
  14619.                                 if(BIT_B(word2))           /* signed */
  14620.                                 {
  14621.                                         quotient  = (uint64)((sint64)((sint32)dividend) / (sint64)((sint32)divisor));
  14622.                                         remainder = (uint64)((sint64)((sint32)dividend) % (sint64)((sint32)divisor));
  14623.                                 }
  14624.                                 else                                    /* unsigned */
  14625.                                 {
  14626.                                         quotient = dividend / divisor;
  14627.                                         remainder = dividend % divisor;
  14628.                                 }
  14629.                         }
  14630.  
  14631.                         REG_D[word2 & 7] = remainder;
  14632.                         REG_D[(word2 >> 12) & 7] = quotient;
  14633.  
  14634.                         FLAG_N = NFLAG_32(quotient);
  14635.                         FLAG_Z = quotient;
  14636.                         FLAG_V = VFLAG_CLEAR;
  14637.                         FLAG_C = CFLAG_CLEAR;
  14638.                         return;
  14639.                 }
  14640.                 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
  14641.                 return;
  14642.         }
  14643.         m68ki_exception_illegal();
  14644.  
  14645. #else
  14646.  
  14647.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  14648.         {
  14649.                 uint word2 = OPER_I_16();
  14650.                 uint divisor = OPER_AW_32();
  14651.                 uint dividend_hi = REG_D[word2 & 7];
  14652.                 uint dividend_lo = REG_D[(word2 >> 12) & 7];
  14653.                 uint quotient = 0;
  14654.                 uint remainder = 0;
  14655.                 uint dividend_neg = 0;
  14656.                 uint divisor_neg = 0;
  14657.                 sint i;
  14658.                 uint overflow;
  14659.  
  14660.                 if(divisor != 0)
  14661.                 {
  14662.                         /* quad / long : long quotient, long remainder */
  14663.                         if(BIT_A(word2))
  14664.                         {
  14665.                                 if(BIT_B(word2))           /* signed */
  14666.                                 {
  14667.                                         /* special case in signed divide */
  14668.                                         if(dividend_hi == 0 && dividend_lo == 0x80000000 && divisor == 0xffffffff)
  14669.                                         {
  14670.                                                 REG_D[word2 & 7] = 0;
  14671.                                                 REG_D[(word2 >> 12) & 7] = 0x80000000;
  14672.  
  14673.                                                 FLAG_N = NFLAG_SET;
  14674.                                                 FLAG_Z = ZFLAG_CLEAR;
  14675.                                                 FLAG_V = VFLAG_CLEAR;
  14676.                                                 FLAG_C = CFLAG_CLEAR;
  14677.                                                 return;
  14678.                                         }
  14679.                                         if(GET_MSB_32(dividend_hi))
  14680.                                         {
  14681.                                                 dividend_neg = 1;
  14682.                                                 dividend_hi = (uint)MASK_OUT_ABOVE_32((-(sint)dividend_hi) - (dividend_lo != 0));
  14683.                                                 dividend_lo = (uint)MASK_OUT_ABOVE_32(-(sint)dividend_lo);
  14684.                                         }
  14685.                                         if(GET_MSB_32(divisor))
  14686.                                         {
  14687.                                                 divisor_neg = 1;
  14688.                                                 divisor = (uint)MASK_OUT_ABOVE_32(-(sint)divisor);
  14689.  
  14690.                                         }
  14691.                                 }
  14692.  
  14693.                                 /* if the upper long is greater than the divisor, we're overflowing. */
  14694.                                 if(dividend_hi >= divisor)
  14695.                                 {
  14696.                                         FLAG_V = VFLAG_SET;
  14697.                                         return;
  14698.                                 }
  14699.  
  14700.                                 for(i = 31; i >= 0; i--)
  14701.                                 {
  14702.                                         quotient <<= 1;
  14703.                                         remainder = (remainder << 1) + ((dividend_hi >> i) & 1);
  14704.                                         if(remainder >= divisor)
  14705.                                         {
  14706.                                                 remainder -= divisor;
  14707.                                                 quotient++;
  14708.                                         }
  14709.                                 }
  14710.                                 for(i = 31; i >= 0; i--)
  14711.                                 {
  14712.                                         quotient <<= 1;
  14713.                                         overflow = GET_MSB_32(remainder);
  14714.                                         remainder = (remainder << 1) + ((dividend_lo >> i) & 1);
  14715.                                         if(remainder >= divisor || overflow)
  14716.                                         {
  14717.                                                 remainder -= divisor;
  14718.                                                 quotient++;
  14719.                                         }
  14720.                                 }
  14721.  
  14722.                                 if(BIT_B(word2))           /* signed */
  14723.                                 {
  14724.                                         if(quotient > 0x7fffffff)
  14725.                                         {
  14726.                                                 FLAG_V = VFLAG_SET;
  14727.                                                 return;
  14728.                                         }
  14729.                                         if(dividend_neg)
  14730.                                         {
  14731.                                                 remainder = (uint)MASK_OUT_ABOVE_32(-(sint)remainder);
  14732.                                                 quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);
  14733.                                         }
  14734.                                         if(divisor_neg)
  14735.                                                 quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);
  14736.                                 }
  14737.  
  14738.                                 REG_D[word2 & 7] = remainder;
  14739.                                 REG_D[(word2 >> 12) & 7] = quotient;
  14740.  
  14741.                                 FLAG_N = NFLAG_32(quotient);
  14742.                                 FLAG_Z = quotient;
  14743.                                 FLAG_V = VFLAG_CLEAR;
  14744.                                 FLAG_C = CFLAG_CLEAR;
  14745.                                 return;
  14746.                         }
  14747.  
  14748.                         /* long / long: long quotient, maybe long remainder */
  14749.                         if(BIT_B(word2))           /* signed */
  14750.                         {
  14751.                                 /* Special case in divide */
  14752.                                 if(dividend_lo == 0x80000000 && divisor == 0xffffffff)
  14753.                                 {
  14754.                                         FLAG_N = NFLAG_SET;
  14755.                                         FLAG_Z = ZFLAG_CLEAR;
  14756.                                         FLAG_V = VFLAG_CLEAR;
  14757.                                         FLAG_C = CFLAG_CLEAR;
  14758.                                         REG_D[(word2 >> 12) & 7] = 0x80000000;
  14759.                                         REG_D[word2 & 7] = 0;
  14760.                                         return;
  14761.                                 }
  14762.                                 REG_D[word2 & 7] = MAKE_INT_32(dividend_lo) % MAKE_INT_32(divisor);
  14763.                                 quotient = REG_D[(word2 >> 12) & 7] = MAKE_INT_32(dividend_lo) / MAKE_INT_32(divisor);
  14764.                         }
  14765.                         else
  14766.                         {
  14767.                                 REG_D[word2 & 7] = MASK_OUT_ABOVE_32(dividend_lo) % MASK_OUT_ABOVE_32(divisor);
  14768.                                 quotient = REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(dividend_lo) / MASK_OUT_ABOVE_32(divisor);
  14769.                         }
  14770.  
  14771.                         FLAG_N = NFLAG_32(quotient);
  14772.                         FLAG_Z = quotient;
  14773.                         FLAG_V = VFLAG_CLEAR;
  14774.                         FLAG_C = CFLAG_CLEAR;
  14775.                         return;
  14776.                 }
  14777.                 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
  14778.                 return;
  14779.         }
  14780.         m68ki_exception_illegal();
  14781.  
  14782. #endif
  14783. }
  14784.  
  14785.  
  14786. void m68k_op_divl_32_al(void)
  14787. {
  14788. #if M68K_USE_64_BIT
  14789.  
  14790.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  14791.         {
  14792.                 uint word2 = OPER_I_16();
  14793.                 uint64 divisor = OPER_AL_32();
  14794.                 uint64 dividend  = 0;
  14795.                 uint64 quotient  = 0;
  14796.                 uint64 remainder = 0;
  14797.  
  14798.                 if(divisor != 0)
  14799.                 {
  14800.                         if(BIT_A(word2))        /* 64 bit */
  14801.                         {
  14802.                                 dividend = REG_D[word2 & 7];
  14803.                                 dividend <<= 32;
  14804.                                 dividend |= REG_D[(word2 >> 12) & 7];
  14805.  
  14806.                                 if(BIT_B(word2))           /* signed */
  14807.                                 {
  14808.                                         quotient  = (uint64)((sint64)dividend / (sint64)((sint32)divisor));
  14809.                                         remainder = (uint64)((sint64)dividend % (sint64)((sint32)divisor));
  14810.                                         if((sint64)quotient != (sint64)((sint32)quotient))
  14811.                                         {
  14812.                                                 FLAG_V = VFLAG_SET;
  14813.                                                 return;
  14814.                                         }
  14815.                                 }
  14816.                                 else                                    /* unsigned */
  14817.                                 {
  14818.                                         quotient = dividend / divisor;
  14819.                                         if(quotient > 0xffffffff)
  14820.                                         {
  14821.                                                 FLAG_V = VFLAG_SET;
  14822.                                                 return;
  14823.                                         }
  14824.                                         remainder = dividend % divisor;
  14825.                                 }
  14826.                         }
  14827.                         else    /* 32 bit */
  14828.                         {
  14829.                                 dividend = REG_D[(word2 >> 12) & 7];
  14830.                                 if(BIT_B(word2))           /* signed */
  14831.                                 {
  14832.                                         quotient  = (uint64)((sint64)((sint32)dividend) / (sint64)((sint32)divisor));
  14833.                                         remainder = (uint64)((sint64)((sint32)dividend) % (sint64)((sint32)divisor));
  14834.                                 }
  14835.                                 else                                    /* unsigned */
  14836.                                 {
  14837.                                         quotient = dividend / divisor;
  14838.                                         remainder = dividend % divisor;
  14839.                                 }
  14840.                         }
  14841.  
  14842.                         REG_D[word2 & 7] = remainder;
  14843.                         REG_D[(word2 >> 12) & 7] = quotient;
  14844.  
  14845.                         FLAG_N = NFLAG_32(quotient);
  14846.                         FLAG_Z = quotient;
  14847.                         FLAG_V = VFLAG_CLEAR;
  14848.                         FLAG_C = CFLAG_CLEAR;
  14849.                         return;
  14850.                 }
  14851.                 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
  14852.                 return;
  14853.         }
  14854.         m68ki_exception_illegal();
  14855.  
  14856. #else
  14857.  
  14858.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  14859.         {
  14860.                 uint word2 = OPER_I_16();
  14861.                 uint divisor = OPER_AL_32();
  14862.                 uint dividend_hi = REG_D[word2 & 7];
  14863.                 uint dividend_lo = REG_D[(word2 >> 12) & 7];
  14864.                 uint quotient = 0;
  14865.                 uint remainder = 0;
  14866.                 uint dividend_neg = 0;
  14867.                 uint divisor_neg = 0;
  14868.                 sint i;
  14869.                 uint overflow;
  14870.  
  14871.                 if(divisor != 0)
  14872.                 {
  14873.                         /* quad / long : long quotient, long remainder */
  14874.                         if(BIT_A(word2))
  14875.                         {
  14876.                                 if(BIT_B(word2))           /* signed */
  14877.                                 {
  14878.                                         /* special case in signed divide */
  14879.                                         if(dividend_hi == 0 && dividend_lo == 0x80000000 && divisor == 0xffffffff)
  14880.                                         {
  14881.                                                 REG_D[word2 & 7] = 0;
  14882.                                                 REG_D[(word2 >> 12) & 7] = 0x80000000;
  14883.  
  14884.                                                 FLAG_N = NFLAG_SET;
  14885.                                                 FLAG_Z = ZFLAG_CLEAR;
  14886.                                                 FLAG_V = VFLAG_CLEAR;
  14887.                                                 FLAG_C = CFLAG_CLEAR;
  14888.                                                 return;
  14889.                                         }
  14890.                                         if(GET_MSB_32(dividend_hi))
  14891.                                         {
  14892.                                                 dividend_neg = 1;
  14893.                                                 dividend_hi = (uint)MASK_OUT_ABOVE_32((-(sint)dividend_hi) - (dividend_lo != 0));
  14894.                                                 dividend_lo = (uint)MASK_OUT_ABOVE_32(-(sint)dividend_lo);
  14895.                                         }
  14896.                                         if(GET_MSB_32(divisor))
  14897.                                         {
  14898.                                                 divisor_neg = 1;
  14899.                                                 divisor = (uint)MASK_OUT_ABOVE_32(-(sint)divisor);
  14900.  
  14901.                                         }
  14902.                                 }
  14903.  
  14904.                                 /* if the upper long is greater than the divisor, we're overflowing. */
  14905.                                 if(dividend_hi >= divisor)
  14906.                                 {
  14907.                                         FLAG_V = VFLAG_SET;
  14908.                                         return;
  14909.                                 }
  14910.  
  14911.                                 for(i = 31; i >= 0; i--)
  14912.                                 {
  14913.                                         quotient <<= 1;
  14914.                                         remainder = (remainder << 1) + ((dividend_hi >> i) & 1);
  14915.                                         if(remainder >= divisor)
  14916.                                         {
  14917.                                                 remainder -= divisor;
  14918.                                                 quotient++;
  14919.                                         }
  14920.                                 }
  14921.                                 for(i = 31; i >= 0; i--)
  14922.                                 {
  14923.                                         quotient <<= 1;
  14924.                                         overflow = GET_MSB_32(remainder);
  14925.                                         remainder = (remainder << 1) + ((dividend_lo >> i) & 1);
  14926.                                         if(remainder >= divisor || overflow)
  14927.                                         {
  14928.                                                 remainder -= divisor;
  14929.                                                 quotient++;
  14930.                                         }
  14931.                                 }
  14932.  
  14933.                                 if(BIT_B(word2))           /* signed */
  14934.                                 {
  14935.                                         if(quotient > 0x7fffffff)
  14936.                                         {
  14937.                                                 FLAG_V = VFLAG_SET;
  14938.                                                 return;
  14939.                                         }
  14940.                                         if(dividend_neg)
  14941.                                         {
  14942.                                                 remainder = (uint)MASK_OUT_ABOVE_32(-(sint)remainder);
  14943.                                                 quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);
  14944.                                         }
  14945.                                         if(divisor_neg)
  14946.                                                 quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);
  14947.                                 }
  14948.  
  14949.                                 REG_D[word2 & 7] = remainder;
  14950.                                 REG_D[(word2 >> 12) & 7] = quotient;
  14951.  
  14952.                                 FLAG_N = NFLAG_32(quotient);
  14953.                                 FLAG_Z = quotient;
  14954.                                 FLAG_V = VFLAG_CLEAR;
  14955.                                 FLAG_C = CFLAG_CLEAR;
  14956.                                 return;
  14957.                         }
  14958.  
  14959.                         /* long / long: long quotient, maybe long remainder */
  14960.                         if(BIT_B(word2))           /* signed */
  14961.                         {
  14962.                                 /* Special case in divide */
  14963.                                 if(dividend_lo == 0x80000000 && divisor == 0xffffffff)
  14964.                                 {
  14965.                                         FLAG_N = NFLAG_SET;
  14966.                                         FLAG_Z = ZFLAG_CLEAR;
  14967.                                         FLAG_V = VFLAG_CLEAR;
  14968.                                         FLAG_C = CFLAG_CLEAR;
  14969.                                         REG_D[(word2 >> 12) & 7] = 0x80000000;
  14970.                                         REG_D[word2 & 7] = 0;
  14971.                                         return;
  14972.                                 }
  14973.                                 REG_D[word2 & 7] = MAKE_INT_32(dividend_lo) % MAKE_INT_32(divisor);
  14974.                                 quotient = REG_D[(word2 >> 12) & 7] = MAKE_INT_32(dividend_lo) / MAKE_INT_32(divisor);
  14975.                         }
  14976.                         else
  14977.                         {
  14978.                                 REG_D[word2 & 7] = MASK_OUT_ABOVE_32(dividend_lo) % MASK_OUT_ABOVE_32(divisor);
  14979.                                 quotient = REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(dividend_lo) / MASK_OUT_ABOVE_32(divisor);
  14980.                         }
  14981.  
  14982.                         FLAG_N = NFLAG_32(quotient);
  14983.                         FLAG_Z = quotient;
  14984.                         FLAG_V = VFLAG_CLEAR;
  14985.                         FLAG_C = CFLAG_CLEAR;
  14986.                         return;
  14987.                 }
  14988.                 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
  14989.                 return;
  14990.         }
  14991.         m68ki_exception_illegal();
  14992.  
  14993. #endif
  14994. }
  14995.  
  14996.  
  14997. void m68k_op_divl_32_pcdi(void)
  14998. {
  14999. #if M68K_USE_64_BIT
  15000.  
  15001.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  15002.         {
  15003.                 uint word2 = OPER_I_16();
  15004.                 uint64 divisor = OPER_PCDI_32();
  15005.                 uint64 dividend  = 0;
  15006.                 uint64 quotient  = 0;
  15007.                 uint64 remainder = 0;
  15008.  
  15009.                 if(divisor != 0)
  15010.                 {
  15011.                         if(BIT_A(word2))        /* 64 bit */
  15012.                         {
  15013.                                 dividend = REG_D[word2 & 7];
  15014.                                 dividend <<= 32;
  15015.                                 dividend |= REG_D[(word2 >> 12) & 7];
  15016.  
  15017.                                 if(BIT_B(word2))           /* signed */
  15018.                                 {
  15019.                                         quotient  = (uint64)((sint64)dividend / (sint64)((sint32)divisor));
  15020.                                         remainder = (uint64)((sint64)dividend % (sint64)((sint32)divisor));
  15021.                                         if((sint64)quotient != (sint64)((sint32)quotient))
  15022.                                         {
  15023.                                                 FLAG_V = VFLAG_SET;
  15024.                                                 return;
  15025.                                         }
  15026.                                 }
  15027.                                 else                                    /* unsigned */
  15028.                                 {
  15029.                                         quotient = dividend / divisor;
  15030.                                         if(quotient > 0xffffffff)
  15031.                                         {
  15032.                                                 FLAG_V = VFLAG_SET;
  15033.                                                 return;
  15034.                                         }
  15035.                                         remainder = dividend % divisor;
  15036.                                 }
  15037.                         }
  15038.                         else    /* 32 bit */
  15039.                         {
  15040.                                 dividend = REG_D[(word2 >> 12) & 7];
  15041.                                 if(BIT_B(word2))           /* signed */
  15042.                                 {
  15043.                                         quotient  = (uint64)((sint64)((sint32)dividend) / (sint64)((sint32)divisor));
  15044.                                         remainder = (uint64)((sint64)((sint32)dividend) % (sint64)((sint32)divisor));
  15045.                                 }
  15046.                                 else                                    /* unsigned */
  15047.                                 {
  15048.                                         quotient = dividend / divisor;
  15049.                                         remainder = dividend % divisor;
  15050.                                 }
  15051.                         }
  15052.  
  15053.                         REG_D[word2 & 7] = remainder;
  15054.                         REG_D[(word2 >> 12) & 7] = quotient;
  15055.  
  15056.                         FLAG_N = NFLAG_32(quotient);
  15057.                         FLAG_Z = quotient;
  15058.                         FLAG_V = VFLAG_CLEAR;
  15059.                         FLAG_C = CFLAG_CLEAR;
  15060.                         return;
  15061.                 }
  15062.                 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
  15063.                 return;
  15064.         }
  15065.         m68ki_exception_illegal();
  15066.  
  15067. #else
  15068.  
  15069.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  15070.         {
  15071.                 uint word2 = OPER_I_16();
  15072.                 uint divisor = OPER_PCDI_32();
  15073.                 uint dividend_hi = REG_D[word2 & 7];
  15074.                 uint dividend_lo = REG_D[(word2 >> 12) & 7];
  15075.                 uint quotient = 0;
  15076.                 uint remainder = 0;
  15077.                 uint dividend_neg = 0;
  15078.                 uint divisor_neg = 0;
  15079.                 sint i;
  15080.                 uint overflow;
  15081.  
  15082.                 if(divisor != 0)
  15083.                 {
  15084.                         /* quad / long : long quotient, long remainder */
  15085.                         if(BIT_A(word2))
  15086.                         {
  15087.                                 if(BIT_B(word2))           /* signed */
  15088.                                 {
  15089.                                         /* special case in signed divide */
  15090.                                         if(dividend_hi == 0 && dividend_lo == 0x80000000 && divisor == 0xffffffff)
  15091.                                         {
  15092.                                                 REG_D[word2 & 7] = 0;
  15093.                                                 REG_D[(word2 >> 12) & 7] = 0x80000000;
  15094.  
  15095.                                                 FLAG_N = NFLAG_SET;
  15096.                                                 FLAG_Z = ZFLAG_CLEAR;
  15097.                                                 FLAG_V = VFLAG_CLEAR;
  15098.                                                 FLAG_C = CFLAG_CLEAR;
  15099.                                                 return;
  15100.                                         }
  15101.                                         if(GET_MSB_32(dividend_hi))
  15102.                                         {
  15103.                                                 dividend_neg = 1;
  15104.                                                 dividend_hi = (uint)MASK_OUT_ABOVE_32((-(sint)dividend_hi) - (dividend_lo != 0));
  15105.                                                 dividend_lo = (uint)MASK_OUT_ABOVE_32(-(sint)dividend_lo);
  15106.                                         }
  15107.                                         if(GET_MSB_32(divisor))
  15108.                                         {
  15109.                                                 divisor_neg = 1;
  15110.                                                 divisor = (uint)MASK_OUT_ABOVE_32(-(sint)divisor);
  15111.  
  15112.                                         }
  15113.                                 }
  15114.  
  15115.                                 /* if the upper long is greater than the divisor, we're overflowing. */
  15116.                                 if(dividend_hi >= divisor)
  15117.                                 {
  15118.                                         FLAG_V = VFLAG_SET;
  15119.                                         return;
  15120.                                 }
  15121.  
  15122.                                 for(i = 31; i >= 0; i--)
  15123.                                 {
  15124.                                         quotient <<= 1;
  15125.                                         remainder = (remainder << 1) + ((dividend_hi >> i) & 1);
  15126.                                         if(remainder >= divisor)
  15127.                                         {
  15128.                                                 remainder -= divisor;
  15129.                                                 quotient++;
  15130.                                         }
  15131.                                 }
  15132.                                 for(i = 31; i >= 0; i--)
  15133.                                 {
  15134.                                         quotient <<= 1;
  15135.                                         overflow = GET_MSB_32(remainder);
  15136.                                         remainder = (remainder << 1) + ((dividend_lo >> i) & 1);
  15137.                                         if(remainder >= divisor || overflow)
  15138.                                         {
  15139.                                                 remainder -= divisor;
  15140.                                                 quotient++;
  15141.                                         }
  15142.                                 }
  15143.  
  15144.                                 if(BIT_B(word2))           /* signed */
  15145.                                 {
  15146.                                         if(quotient > 0x7fffffff)
  15147.                                         {
  15148.                                                 FLAG_V = VFLAG_SET;
  15149.                                                 return;
  15150.                                         }
  15151.                                         if(dividend_neg)
  15152.                                         {
  15153.                                                 remainder = (uint)MASK_OUT_ABOVE_32(-(sint)remainder);
  15154.                                                 quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);
  15155.                                         }
  15156.                                         if(divisor_neg)
  15157.                                                 quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);
  15158.                                 }
  15159.  
  15160.                                 REG_D[word2 & 7] = remainder;
  15161.                                 REG_D[(word2 >> 12) & 7] = quotient;
  15162.  
  15163.                                 FLAG_N = NFLAG_32(quotient);
  15164.                                 FLAG_Z = quotient;
  15165.                                 FLAG_V = VFLAG_CLEAR;
  15166.                                 FLAG_C = CFLAG_CLEAR;
  15167.                                 return;
  15168.                         }
  15169.  
  15170.                         /* long / long: long quotient, maybe long remainder */
  15171.                         if(BIT_B(word2))           /* signed */
  15172.                         {
  15173.                                 /* Special case in divide */
  15174.                                 if(dividend_lo == 0x80000000 && divisor == 0xffffffff)
  15175.                                 {
  15176.                                         FLAG_N = NFLAG_SET;
  15177.                                         FLAG_Z = ZFLAG_CLEAR;
  15178.                                         FLAG_V = VFLAG_CLEAR;
  15179.                                         FLAG_C = CFLAG_CLEAR;
  15180.                                         REG_D[(word2 >> 12) & 7] = 0x80000000;
  15181.                                         REG_D[word2 & 7] = 0;
  15182.                                         return;
  15183.                                 }
  15184.                                 REG_D[word2 & 7] = MAKE_INT_32(dividend_lo) % MAKE_INT_32(divisor);
  15185.                                 quotient = REG_D[(word2 >> 12) & 7] = MAKE_INT_32(dividend_lo) / MAKE_INT_32(divisor);
  15186.                         }
  15187.                         else
  15188.                         {
  15189.                                 REG_D[word2 & 7] = MASK_OUT_ABOVE_32(dividend_lo) % MASK_OUT_ABOVE_32(divisor);
  15190.                                 quotient = REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(dividend_lo) / MASK_OUT_ABOVE_32(divisor);
  15191.                         }
  15192.  
  15193.                         FLAG_N = NFLAG_32(quotient);
  15194.                         FLAG_Z = quotient;
  15195.                         FLAG_V = VFLAG_CLEAR;
  15196.                         FLAG_C = CFLAG_CLEAR;
  15197.                         return;
  15198.                 }
  15199.                 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
  15200.                 return;
  15201.         }
  15202.         m68ki_exception_illegal();
  15203.  
  15204. #endif
  15205. }
  15206.  
  15207.  
  15208. void m68k_op_divl_32_pcix(void)
  15209. {
  15210. #if M68K_USE_64_BIT
  15211.  
  15212.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  15213.         {
  15214.                 uint word2 = OPER_I_16();
  15215.                 uint64 divisor = OPER_PCIX_32();
  15216.                 uint64 dividend  = 0;
  15217.                 uint64 quotient  = 0;
  15218.                 uint64 remainder = 0;
  15219.  
  15220.                 if(divisor != 0)
  15221.                 {
  15222.                         if(BIT_A(word2))        /* 64 bit */
  15223.                         {
  15224.                                 dividend = REG_D[word2 & 7];
  15225.                                 dividend <<= 32;
  15226.                                 dividend |= REG_D[(word2 >> 12) & 7];
  15227.  
  15228.                                 if(BIT_B(word2))           /* signed */
  15229.                                 {
  15230.                                         quotient  = (uint64)((sint64)dividend / (sint64)((sint32)divisor));
  15231.                                         remainder = (uint64)((sint64)dividend % (sint64)((sint32)divisor));
  15232.                                         if((sint64)quotient != (sint64)((sint32)quotient))
  15233.                                         {
  15234.                                                 FLAG_V = VFLAG_SET;
  15235.                                                 return;
  15236.                                         }
  15237.                                 }
  15238.                                 else                                    /* unsigned */
  15239.                                 {
  15240.                                         quotient = dividend / divisor;
  15241.                                         if(quotient > 0xffffffff)
  15242.                                         {
  15243.                                                 FLAG_V = VFLAG_SET;
  15244.                                                 return;
  15245.                                         }
  15246.                                         remainder = dividend % divisor;
  15247.                                 }
  15248.                         }
  15249.                         else    /* 32 bit */
  15250.                         {
  15251.                                 dividend = REG_D[(word2 >> 12) & 7];
  15252.                                 if(BIT_B(word2))           /* signed */
  15253.                                 {
  15254.                                         quotient  = (uint64)((sint64)((sint32)dividend) / (sint64)((sint32)divisor));
  15255.                                         remainder = (uint64)((sint64)((sint32)dividend) % (sint64)((sint32)divisor));
  15256.                                 }
  15257.                                 else                                    /* unsigned */
  15258.                                 {
  15259.                                         quotient = dividend / divisor;
  15260.                                         remainder = dividend % divisor;
  15261.                                 }
  15262.                         }
  15263.  
  15264.                         REG_D[word2 & 7] = remainder;
  15265.                         REG_D[(word2 >> 12) & 7] = quotient;
  15266.  
  15267.                         FLAG_N = NFLAG_32(quotient);
  15268.                         FLAG_Z = quotient;
  15269.                         FLAG_V = VFLAG_CLEAR;
  15270.                         FLAG_C = CFLAG_CLEAR;
  15271.                         return;
  15272.                 }
  15273.                 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
  15274.                 return;
  15275.         }
  15276.         m68ki_exception_illegal();
  15277.  
  15278. #else
  15279.  
  15280.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  15281.         {
  15282.                 uint word2 = OPER_I_16();
  15283.                 uint divisor = OPER_PCIX_32();
  15284.                 uint dividend_hi = REG_D[word2 & 7];
  15285.                 uint dividend_lo = REG_D[(word2 >> 12) & 7];
  15286.                 uint quotient = 0;
  15287.                 uint remainder = 0;
  15288.                 uint dividend_neg = 0;
  15289.                 uint divisor_neg = 0;
  15290.                 sint i;
  15291.                 uint overflow;
  15292.  
  15293.                 if(divisor != 0)
  15294.                 {
  15295.                         /* quad / long : long quotient, long remainder */
  15296.                         if(BIT_A(word2))
  15297.                         {
  15298.                                 if(BIT_B(word2))           /* signed */
  15299.                                 {
  15300.                                         /* special case in signed divide */
  15301.                                         if(dividend_hi == 0 && dividend_lo == 0x80000000 && divisor == 0xffffffff)
  15302.                                         {
  15303.                                                 REG_D[word2 & 7] = 0;
  15304.                                                 REG_D[(word2 >> 12) & 7] = 0x80000000;
  15305.  
  15306.                                                 FLAG_N = NFLAG_SET;
  15307.                                                 FLAG_Z = ZFLAG_CLEAR;
  15308.                                                 FLAG_V = VFLAG_CLEAR;
  15309.                                                 FLAG_C = CFLAG_CLEAR;
  15310.                                                 return;
  15311.                                         }
  15312.                                         if(GET_MSB_32(dividend_hi))
  15313.                                         {
  15314.                                                 dividend_neg = 1;
  15315.                                                 dividend_hi = (uint)MASK_OUT_ABOVE_32((-(sint)dividend_hi) - (dividend_lo != 0));
  15316.                                                 dividend_lo = (uint)MASK_OUT_ABOVE_32(-(sint)dividend_lo);
  15317.                                         }
  15318.                                         if(GET_MSB_32(divisor))
  15319.                                         {
  15320.                                                 divisor_neg = 1;
  15321.                                                 divisor = (uint)MASK_OUT_ABOVE_32(-(sint)divisor);
  15322.  
  15323.                                         }
  15324.                                 }
  15325.  
  15326.                                 /* if the upper long is greater than the divisor, we're overflowing. */
  15327.                                 if(dividend_hi >= divisor)
  15328.                                 {
  15329.                                         FLAG_V = VFLAG_SET;
  15330.                                         return;
  15331.                                 }
  15332.  
  15333.                                 for(i = 31; i >= 0; i--)
  15334.                                 {
  15335.                                         quotient <<= 1;
  15336.                                         remainder = (remainder << 1) + ((dividend_hi >> i) & 1);
  15337.                                         if(remainder >= divisor)
  15338.                                         {
  15339.                                                 remainder -= divisor;
  15340.                                                 quotient++;
  15341.                                         }
  15342.                                 }
  15343.                                 for(i = 31; i >= 0; i--)
  15344.                                 {
  15345.                                         quotient <<= 1;
  15346.                                         overflow = GET_MSB_32(remainder);
  15347.                                         remainder = (remainder << 1) + ((dividend_lo >> i) & 1);
  15348.                                         if(remainder >= divisor || overflow)
  15349.                                         {
  15350.                                                 remainder -= divisor;
  15351.                                                 quotient++;
  15352.                                         }
  15353.                                 }
  15354.  
  15355.                                 if(BIT_B(word2))           /* signed */
  15356.                                 {
  15357.                                         if(quotient > 0x7fffffff)
  15358.                                         {
  15359.                                                 FLAG_V = VFLAG_SET;
  15360.                                                 return;
  15361.                                         }
  15362.                                         if(dividend_neg)
  15363.                                         {
  15364.                                                 remainder = (uint)MASK_OUT_ABOVE_32(-(sint)remainder);
  15365.                                                 quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);
  15366.                                         }
  15367.                                         if(divisor_neg)
  15368.                                                 quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);
  15369.                                 }
  15370.  
  15371.                                 REG_D[word2 & 7] = remainder;
  15372.                                 REG_D[(word2 >> 12) & 7] = quotient;
  15373.  
  15374.                                 FLAG_N = NFLAG_32(quotient);
  15375.                                 FLAG_Z = quotient;
  15376.                                 FLAG_V = VFLAG_CLEAR;
  15377.                                 FLAG_C = CFLAG_CLEAR;
  15378.                                 return;
  15379.                         }
  15380.  
  15381.                         /* long / long: long quotient, maybe long remainder */
  15382.                         if(BIT_B(word2))           /* signed */
  15383.                         {
  15384.                                 /* Special case in divide */
  15385.                                 if(dividend_lo == 0x80000000 && divisor == 0xffffffff)
  15386.                                 {
  15387.                                         FLAG_N = NFLAG_SET;
  15388.                                         FLAG_Z = ZFLAG_CLEAR;
  15389.                                         FLAG_V = VFLAG_CLEAR;
  15390.                                         FLAG_C = CFLAG_CLEAR;
  15391.                                         REG_D[(word2 >> 12) & 7] = 0x80000000;
  15392.                                         REG_D[word2 & 7] = 0;
  15393.                                         return;
  15394.                                 }
  15395.                                 REG_D[word2 & 7] = MAKE_INT_32(dividend_lo) % MAKE_INT_32(divisor);
  15396.                                 quotient = REG_D[(word2 >> 12) & 7] = MAKE_INT_32(dividend_lo) / MAKE_INT_32(divisor);
  15397.                         }
  15398.                         else
  15399.                         {
  15400.                                 REG_D[word2 & 7] = MASK_OUT_ABOVE_32(dividend_lo) % MASK_OUT_ABOVE_32(divisor);
  15401.                                 quotient = REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(dividend_lo) / MASK_OUT_ABOVE_32(divisor);
  15402.                         }
  15403.  
  15404.                         FLAG_N = NFLAG_32(quotient);
  15405.                         FLAG_Z = quotient;
  15406.                         FLAG_V = VFLAG_CLEAR;
  15407.                         FLAG_C = CFLAG_CLEAR;
  15408.                         return;
  15409.                 }
  15410.                 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
  15411.                 return;
  15412.         }
  15413.         m68ki_exception_illegal();
  15414.  
  15415. #endif
  15416. }
  15417.  
  15418.  
  15419. void m68k_op_divl_32_i(void)
  15420. {
  15421. #if M68K_USE_64_BIT
  15422.  
  15423.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  15424.         {
  15425.                 uint word2 = OPER_I_16();
  15426.                 uint64 divisor = OPER_I_32();
  15427.                 uint64 dividend  = 0;
  15428.                 uint64 quotient  = 0;
  15429.                 uint64 remainder = 0;
  15430.  
  15431.                 if(divisor != 0)
  15432.                 {
  15433.                         if(BIT_A(word2))        /* 64 bit */
  15434.                         {
  15435.                                 dividend = REG_D[word2 & 7];
  15436.                                 dividend <<= 32;
  15437.                                 dividend |= REG_D[(word2 >> 12) & 7];
  15438.  
  15439.                                 if(BIT_B(word2))           /* signed */
  15440.                                 {
  15441.                                         quotient  = (uint64)((sint64)dividend / (sint64)((sint32)divisor));
  15442.                                         remainder = (uint64)((sint64)dividend % (sint64)((sint32)divisor));
  15443.                                         if((sint64)quotient != (sint64)((sint32)quotient))
  15444.                                         {
  15445.                                                 FLAG_V = VFLAG_SET;
  15446.                                                 return;
  15447.                                         }
  15448.                                 }
  15449.                                 else                                    /* unsigned */
  15450.                                 {
  15451.                                         quotient = dividend / divisor;
  15452.                                         if(quotient > 0xffffffff)
  15453.                                         {
  15454.                                                 FLAG_V = VFLAG_SET;
  15455.                                                 return;
  15456.                                         }
  15457.                                         remainder = dividend % divisor;
  15458.                                 }
  15459.                         }
  15460.                         else    /* 32 bit */
  15461.                         {
  15462.                                 dividend = REG_D[(word2 >> 12) & 7];
  15463.                                 if(BIT_B(word2))           /* signed */
  15464.                                 {
  15465.                                         quotient  = (uint64)((sint64)((sint32)dividend) / (sint64)((sint32)divisor));
  15466.                                         remainder = (uint64)((sint64)((sint32)dividend) % (sint64)((sint32)divisor));
  15467.                                 }
  15468.                                 else                                    /* unsigned */
  15469.                                 {
  15470.                                         quotient = dividend / divisor;
  15471.                                         remainder = dividend % divisor;
  15472.                                 }
  15473.                         }
  15474.  
  15475.                         REG_D[word2 & 7] = remainder;
  15476.                         REG_D[(word2 >> 12) & 7] = quotient;
  15477.  
  15478.                         FLAG_N = NFLAG_32(quotient);
  15479.                         FLAG_Z = quotient;
  15480.                         FLAG_V = VFLAG_CLEAR;
  15481.                         FLAG_C = CFLAG_CLEAR;
  15482.                         return;
  15483.                 }
  15484.                 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
  15485.                 return;
  15486.         }
  15487.         m68ki_exception_illegal();
  15488.  
  15489. #else
  15490.  
  15491.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  15492.         {
  15493.                 uint word2 = OPER_I_16();
  15494.                 uint divisor = OPER_I_32();
  15495.                 uint dividend_hi = REG_D[word2 & 7];
  15496.                 uint dividend_lo = REG_D[(word2 >> 12) & 7];
  15497.                 uint quotient = 0;
  15498.                 uint remainder = 0;
  15499.                 uint dividend_neg = 0;
  15500.                 uint divisor_neg = 0;
  15501.                 sint i;
  15502.                 uint overflow;
  15503.  
  15504.                 if(divisor != 0)
  15505.                 {
  15506.                         /* quad / long : long quotient, long remainder */
  15507.                         if(BIT_A(word2))
  15508.                         {
  15509.                                 if(BIT_B(word2))           /* signed */
  15510.                                 {
  15511.                                         /* special case in signed divide */
  15512.                                         if(dividend_hi == 0 && dividend_lo == 0x80000000 && divisor == 0xffffffff)
  15513.                                         {
  15514.                                                 REG_D[word2 & 7] = 0;
  15515.                                                 REG_D[(word2 >> 12) & 7] = 0x80000000;
  15516.  
  15517.                                                 FLAG_N = NFLAG_SET;
  15518.                                                 FLAG_Z = ZFLAG_CLEAR;
  15519.                                                 FLAG_V = VFLAG_CLEAR;
  15520.                                                 FLAG_C = CFLAG_CLEAR;
  15521.                                                 return;
  15522.                                         }
  15523.                                         if(GET_MSB_32(dividend_hi))
  15524.                                         {
  15525.                                                 dividend_neg = 1;
  15526.                                                 dividend_hi = (uint)MASK_OUT_ABOVE_32((-(sint)dividend_hi) - (dividend_lo != 0));
  15527.                                                 dividend_lo = (uint)MASK_OUT_ABOVE_32(-(sint)dividend_lo);
  15528.                                         }
  15529.                                         if(GET_MSB_32(divisor))
  15530.                                         {
  15531.                                                 divisor_neg = 1;
  15532.                                                 divisor = (uint)MASK_OUT_ABOVE_32(-(sint)divisor);
  15533.  
  15534.                                         }
  15535.                                 }
  15536.  
  15537.                                 /* if the upper long is greater than the divisor, we're overflowing. */
  15538.                                 if(dividend_hi >= divisor)
  15539.                                 {
  15540.                                         FLAG_V = VFLAG_SET;
  15541.                                         return;
  15542.                                 }
  15543.  
  15544.                                 for(i = 31; i >= 0; i--)
  15545.                                 {
  15546.                                         quotient <<= 1;
  15547.                                         remainder = (remainder << 1) + ((dividend_hi >> i) & 1);
  15548.                                         if(remainder >= divisor)
  15549.                                         {
  15550.                                                 remainder -= divisor;
  15551.                                                 quotient++;
  15552.                                         }
  15553.                                 }
  15554.                                 for(i = 31; i >= 0; i--)
  15555.                                 {
  15556.                                         quotient <<= 1;
  15557.                                         overflow = GET_MSB_32(remainder);
  15558.                                         remainder = (remainder << 1) + ((dividend_lo >> i) & 1);
  15559.                                         if(remainder >= divisor || overflow)
  15560.                                         {
  15561.                                                 remainder -= divisor;
  15562.                                                 quotient++;
  15563.                                         }
  15564.                                 }
  15565.  
  15566.                                 if(BIT_B(word2))           /* signed */
  15567.                                 {
  15568.                                         if(quotient > 0x7fffffff)
  15569.                                         {
  15570.                                                 FLAG_V = VFLAG_SET;
  15571.                                                 return;
  15572.                                         }
  15573.                                         if(dividend_neg)
  15574.                                         {
  15575.                                                 remainder = (uint)MASK_OUT_ABOVE_32(-(sint)remainder);
  15576.                                                 quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);
  15577.                                         }
  15578.                                         if(divisor_neg)
  15579.                                                 quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);
  15580.                                 }
  15581.  
  15582.                                 REG_D[word2 & 7] = remainder;
  15583.                                 REG_D[(word2 >> 12) & 7] = quotient;
  15584.  
  15585.                                 FLAG_N = NFLAG_32(quotient);
  15586.                                 FLAG_Z = quotient;
  15587.                                 FLAG_V = VFLAG_CLEAR;
  15588.                                 FLAG_C = CFLAG_CLEAR;
  15589.                                 return;
  15590.                         }
  15591.  
  15592.                         /* long / long: long quotient, maybe long remainder */
  15593.                         if(BIT_B(word2))           /* signed */
  15594.                         {
  15595.                                 /* Special case in divide */
  15596.                                 if(dividend_lo == 0x80000000 && divisor == 0xffffffff)
  15597.                                 {
  15598.                                         FLAG_N = NFLAG_SET;
  15599.                                         FLAG_Z = ZFLAG_CLEAR;
  15600.                                         FLAG_V = VFLAG_CLEAR;
  15601.                                         FLAG_C = CFLAG_CLEAR;
  15602.                                         REG_D[(word2 >> 12) & 7] = 0x80000000;
  15603.                                         REG_D[word2 & 7] = 0;
  15604.                                         return;
  15605.                                 }
  15606.                                 REG_D[word2 & 7] = MAKE_INT_32(dividend_lo) % MAKE_INT_32(divisor);
  15607.                                 quotient = REG_D[(word2 >> 12) & 7] = MAKE_INT_32(dividend_lo) / MAKE_INT_32(divisor);
  15608.                         }
  15609.                         else
  15610.                         {
  15611.                                 REG_D[word2 & 7] = MASK_OUT_ABOVE_32(dividend_lo) % MASK_OUT_ABOVE_32(divisor);
  15612.                                 quotient = REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(dividend_lo) / MASK_OUT_ABOVE_32(divisor);
  15613.                         }
  15614.  
  15615.                         FLAG_N = NFLAG_32(quotient);
  15616.                         FLAG_Z = quotient;
  15617.                         FLAG_V = VFLAG_CLEAR;
  15618.                         FLAG_C = CFLAG_CLEAR;
  15619.                         return;
  15620.                 }
  15621.                 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
  15622.                 return;
  15623.         }
  15624.         m68ki_exception_illegal();
  15625.  
  15626. #endif
  15627. }
  15628.  
  15629.  
  15630. void m68k_op_eor_8_d(void)
  15631. {
  15632.         uint res = MASK_OUT_ABOVE_8(DY ^= MASK_OUT_ABOVE_8(DX));
  15633.  
  15634.         FLAG_N = NFLAG_8(res);
  15635.         FLAG_Z = res;
  15636.         FLAG_C = CFLAG_CLEAR;
  15637.         FLAG_V = VFLAG_CLEAR;
  15638. }
  15639.  
  15640.  
  15641. void m68k_op_eor_8_ai(void)
  15642. {
  15643.         uint ea = EA_AY_AI_8();
  15644.         uint res = MASK_OUT_ABOVE_8(DX ^ m68ki_read_8(ea));
  15645.  
  15646.         m68ki_write_8(ea, res);
  15647.  
  15648.         FLAG_N = NFLAG_8(res);
  15649.         FLAG_Z = res;
  15650.         FLAG_C = CFLAG_CLEAR;
  15651.         FLAG_V = VFLAG_CLEAR;
  15652. }
  15653.  
  15654.  
  15655. void m68k_op_eor_8_pi(void)
  15656. {
  15657.         uint ea = EA_AY_PI_8();
  15658.         uint res = MASK_OUT_ABOVE_8(DX ^ m68ki_read_8(ea));
  15659.  
  15660.         m68ki_write_8(ea, res);
  15661.  
  15662.         FLAG_N = NFLAG_8(res);
  15663.         FLAG_Z = res;
  15664.         FLAG_C = CFLAG_CLEAR;
  15665.         FLAG_V = VFLAG_CLEAR;
  15666. }
  15667.  
  15668.  
  15669. void m68k_op_eor_8_pi7(void)
  15670. {
  15671.         uint ea = EA_A7_PI_8();
  15672.         uint res = MASK_OUT_ABOVE_8(DX ^ m68ki_read_8(ea));
  15673.  
  15674.         m68ki_write_8(ea, res);
  15675.  
  15676.         FLAG_N = NFLAG_8(res);
  15677.         FLAG_Z = res;
  15678.         FLAG_C = CFLAG_CLEAR;
  15679.         FLAG_V = VFLAG_CLEAR;
  15680. }
  15681.  
  15682.  
  15683. void m68k_op_eor_8_pd(void)
  15684. {
  15685.         uint ea = EA_AY_PD_8();
  15686.         uint res = MASK_OUT_ABOVE_8(DX ^ m68ki_read_8(ea));
  15687.  
  15688.         m68ki_write_8(ea, res);
  15689.  
  15690.         FLAG_N = NFLAG_8(res);
  15691.         FLAG_Z = res;
  15692.         FLAG_C = CFLAG_CLEAR;
  15693.         FLAG_V = VFLAG_CLEAR;
  15694. }
  15695.  
  15696.  
  15697. void m68k_op_eor_8_pd7(void)
  15698. {
  15699.         uint ea = EA_A7_PD_8();
  15700.         uint res = MASK_OUT_ABOVE_8(DX ^ m68ki_read_8(ea));
  15701.  
  15702.         m68ki_write_8(ea, res);
  15703.  
  15704.         FLAG_N = NFLAG_8(res);
  15705.         FLAG_Z = res;
  15706.         FLAG_C = CFLAG_CLEAR;
  15707.         FLAG_V = VFLAG_CLEAR;
  15708. }
  15709.  
  15710.  
  15711. void m68k_op_eor_8_di(void)
  15712. {
  15713.         uint ea = EA_AY_DI_8();
  15714.         uint res = MASK_OUT_ABOVE_8(DX ^ m68ki_read_8(ea));
  15715.  
  15716.         m68ki_write_8(ea, res);
  15717.  
  15718.         FLAG_N = NFLAG_8(res);
  15719.         FLAG_Z = res;
  15720.         FLAG_C = CFLAG_CLEAR;
  15721.         FLAG_V = VFLAG_CLEAR;
  15722. }
  15723.  
  15724.  
  15725. void m68k_op_eor_8_ix(void)
  15726. {
  15727.         uint ea = EA_AY_IX_8();
  15728.         uint res = MASK_OUT_ABOVE_8(DX ^ m68ki_read_8(ea));
  15729.  
  15730.         m68ki_write_8(ea, res);
  15731.  
  15732.         FLAG_N = NFLAG_8(res);
  15733.         FLAG_Z = res;
  15734.         FLAG_C = CFLAG_CLEAR;
  15735.         FLAG_V = VFLAG_CLEAR;
  15736. }
  15737.  
  15738.  
  15739. void m68k_op_eor_8_aw(void)
  15740. {
  15741.         uint ea = EA_AW_8();
  15742.         uint res = MASK_OUT_ABOVE_8(DX ^ m68ki_read_8(ea));
  15743.  
  15744.         m68ki_write_8(ea, res);
  15745.  
  15746.         FLAG_N = NFLAG_8(res);
  15747.         FLAG_Z = res;
  15748.         FLAG_C = CFLAG_CLEAR;
  15749.         FLAG_V = VFLAG_CLEAR;
  15750. }
  15751.  
  15752.  
  15753. void m68k_op_eor_8_al(void)
  15754. {
  15755.         uint ea = EA_AL_8();
  15756.         uint res = MASK_OUT_ABOVE_8(DX ^ m68ki_read_8(ea));
  15757.  
  15758.         m68ki_write_8(ea, res);
  15759.  
  15760.         FLAG_N = NFLAG_8(res);
  15761.         FLAG_Z = res;
  15762.         FLAG_C = CFLAG_CLEAR;
  15763.         FLAG_V = VFLAG_CLEAR;
  15764. }
  15765.  
  15766.  
  15767. void m68k_op_eor_16_d(void)
  15768. {
  15769.         uint res = MASK_OUT_ABOVE_16(DY ^= MASK_OUT_ABOVE_16(DX));
  15770.  
  15771.         FLAG_N = NFLAG_16(res);
  15772.         FLAG_Z = res;
  15773.         FLAG_C = CFLAG_CLEAR;
  15774.         FLAG_V = VFLAG_CLEAR;
  15775. }
  15776.  
  15777.  
  15778. void m68k_op_eor_16_ai(void)
  15779. {
  15780.         uint ea = EA_AY_AI_16();
  15781.         uint res = MASK_OUT_ABOVE_16(DX ^ m68ki_read_16(ea));
  15782.  
  15783.         m68ki_write_16(ea, res);
  15784.  
  15785.         FLAG_N = NFLAG_16(res);
  15786.         FLAG_Z = res;
  15787.         FLAG_C = CFLAG_CLEAR;
  15788.         FLAG_V = VFLAG_CLEAR;
  15789. }
  15790.  
  15791.  
  15792. void m68k_op_eor_16_pi(void)
  15793. {
  15794.         uint ea = EA_AY_PI_16();
  15795.         uint res = MASK_OUT_ABOVE_16(DX ^ m68ki_read_16(ea));
  15796.  
  15797.         m68ki_write_16(ea, res);
  15798.  
  15799.         FLAG_N = NFLAG_16(res);
  15800.         FLAG_Z = res;
  15801.         FLAG_C = CFLAG_CLEAR;
  15802.         FLAG_V = VFLAG_CLEAR;
  15803. }
  15804.  
  15805.  
  15806. void m68k_op_eor_16_pd(void)
  15807. {
  15808.         uint ea = EA_AY_PD_16();
  15809.         uint res = MASK_OUT_ABOVE_16(DX ^ m68ki_read_16(ea));
  15810.  
  15811.         m68ki_write_16(ea, res);
  15812.  
  15813.         FLAG_N = NFLAG_16(res);
  15814.         FLAG_Z = res;
  15815.         FLAG_C = CFLAG_CLEAR;
  15816.         FLAG_V = VFLAG_CLEAR;
  15817. }
  15818.  
  15819.  
  15820. void m68k_op_eor_16_di(void)
  15821. {
  15822.         uint ea = EA_AY_DI_16();
  15823.         uint res = MASK_OUT_ABOVE_16(DX ^ m68ki_read_16(ea));
  15824.  
  15825.         m68ki_write_16(ea, res);
  15826.  
  15827.         FLAG_N = NFLAG_16(res);
  15828.         FLAG_Z = res;
  15829.         FLAG_C = CFLAG_CLEAR;
  15830.         FLAG_V = VFLAG_CLEAR;
  15831. }
  15832.  
  15833.  
  15834. void m68k_op_eor_16_ix(void)
  15835. {
  15836.         uint ea = EA_AY_IX_16();
  15837.         uint res = MASK_OUT_ABOVE_16(DX ^ m68ki_read_16(ea));
  15838.  
  15839.         m68ki_write_16(ea, res);
  15840.  
  15841.         FLAG_N = NFLAG_16(res);
  15842.         FLAG_Z = res;
  15843.         FLAG_C = CFLAG_CLEAR;
  15844.         FLAG_V = VFLAG_CLEAR;
  15845. }
  15846.  
  15847.  
  15848. void m68k_op_eor_16_aw(void)
  15849. {
  15850.         uint ea = EA_AW_16();
  15851.         uint res = MASK_OUT_ABOVE_16(DX ^ m68ki_read_16(ea));
  15852.  
  15853.         m68ki_write_16(ea, res);
  15854.  
  15855.         FLAG_N = NFLAG_16(res);
  15856.         FLAG_Z = res;
  15857.         FLAG_C = CFLAG_CLEAR;
  15858.         FLAG_V = VFLAG_CLEAR;
  15859. }
  15860.  
  15861.  
  15862. void m68k_op_eor_16_al(void)
  15863. {
  15864.         uint ea = EA_AL_16();
  15865.         uint res = MASK_OUT_ABOVE_16(DX ^ m68ki_read_16(ea));
  15866.  
  15867.         m68ki_write_16(ea, res);
  15868.  
  15869.         FLAG_N = NFLAG_16(res);
  15870.         FLAG_Z = res;
  15871.         FLAG_C = CFLAG_CLEAR;
  15872.         FLAG_V = VFLAG_CLEAR;
  15873. }
  15874.  
  15875.  
  15876. void m68k_op_eor_32_d(void)
  15877. {
  15878.         uint res = DY ^= DX;
  15879.  
  15880.         FLAG_N = NFLAG_32(res);
  15881.         FLAG_Z = res;
  15882.         FLAG_C = CFLAG_CLEAR;
  15883.         FLAG_V = VFLAG_CLEAR;
  15884. }
  15885.  
  15886.  
  15887. void m68k_op_eor_32_ai(void)
  15888. {
  15889.         uint ea = EA_AY_AI_32();
  15890.         uint res = DX ^ m68ki_read_32(ea);
  15891.  
  15892.         m68ki_write_32(ea, res);
  15893.  
  15894.         FLAG_N = NFLAG_32(res);
  15895.         FLAG_Z = res;
  15896.         FLAG_C = CFLAG_CLEAR;
  15897.         FLAG_V = VFLAG_CLEAR;
  15898. }
  15899.  
  15900.  
  15901. void m68k_op_eor_32_pi(void)
  15902. {
  15903.         uint ea = EA_AY_PI_32();
  15904.         uint res = DX ^ m68ki_read_32(ea);
  15905.  
  15906.         m68ki_write_32(ea, res);
  15907.  
  15908.         FLAG_N = NFLAG_32(res);
  15909.         FLAG_Z = res;
  15910.         FLAG_C = CFLAG_CLEAR;
  15911.         FLAG_V = VFLAG_CLEAR;
  15912. }
  15913.  
  15914.  
  15915. void m68k_op_eor_32_pd(void)
  15916. {
  15917.         uint ea = EA_AY_PD_32();
  15918.         uint res = DX ^ m68ki_read_32(ea);
  15919.  
  15920.         m68ki_write_32(ea, res);
  15921.  
  15922.         FLAG_N = NFLAG_32(res);
  15923.         FLAG_Z = res;
  15924.         FLAG_C = CFLAG_CLEAR;
  15925.         FLAG_V = VFLAG_CLEAR;
  15926. }
  15927.  
  15928.  
  15929. void m68k_op_eor_32_di(void)
  15930. {
  15931.         uint ea = EA_AY_DI_32();
  15932.         uint res = DX ^ m68ki_read_32(ea);
  15933.  
  15934.         m68ki_write_32(ea, res);
  15935.  
  15936.         FLAG_N = NFLAG_32(res);
  15937.         FLAG_Z = res;
  15938.         FLAG_C = CFLAG_CLEAR;
  15939.         FLAG_V = VFLAG_CLEAR;
  15940. }
  15941.  
  15942.  
  15943. void m68k_op_eor_32_ix(void)
  15944. {
  15945.         uint ea = EA_AY_IX_32();
  15946.         uint res = DX ^ m68ki_read_32(ea);
  15947.  
  15948.         m68ki_write_32(ea, res);
  15949.  
  15950.         FLAG_N = NFLAG_32(res);
  15951.         FLAG_Z = res;
  15952.         FLAG_C = CFLAG_CLEAR;
  15953.         FLAG_V = VFLAG_CLEAR;
  15954. }
  15955.  
  15956.  
  15957. void m68k_op_eor_32_aw(void)
  15958. {
  15959.         uint ea = EA_AW_32();
  15960.         uint res = DX ^ m68ki_read_32(ea);
  15961.  
  15962.         m68ki_write_32(ea, res);
  15963.  
  15964.         FLAG_N = NFLAG_32(res);
  15965.         FLAG_Z = res;
  15966.         FLAG_C = CFLAG_CLEAR;
  15967.         FLAG_V = VFLAG_CLEAR;
  15968. }
  15969.  
  15970.  
  15971. void m68k_op_eor_32_al(void)
  15972. {
  15973.         uint ea = EA_AL_32();
  15974.         uint res = DX ^ m68ki_read_32(ea);
  15975.  
  15976.         m68ki_write_32(ea, res);
  15977.  
  15978.         FLAG_N = NFLAG_32(res);
  15979.         FLAG_Z = res;
  15980.         FLAG_C = CFLAG_CLEAR;
  15981.         FLAG_V = VFLAG_CLEAR;
  15982. }
  15983.  
  15984.  
  15985. void m68k_op_eori_8_d(void)
  15986. {
  15987.         uint res = MASK_OUT_ABOVE_8(DY ^= OPER_I_8());
  15988.  
  15989.         FLAG_N = NFLAG_8(res);
  15990.         FLAG_Z = res;
  15991.         FLAG_C = CFLAG_CLEAR;
  15992.         FLAG_V = VFLAG_CLEAR;
  15993. }
  15994.  
  15995.  
  15996. void m68k_op_eori_8_ai(void)
  15997. {
  15998.         uint src = OPER_I_8();
  15999.         uint ea = EA_AY_AI_8();
  16000.         uint res = src ^ m68ki_read_8(ea);
  16001.  
  16002.         m68ki_write_8(ea, res);
  16003.  
  16004.         FLAG_N = NFLAG_8(res);
  16005.         FLAG_Z = res;
  16006.         FLAG_C = CFLAG_CLEAR;
  16007.         FLAG_V = VFLAG_CLEAR;
  16008. }
  16009.  
  16010.  
  16011. void m68k_op_eori_8_pi(void)
  16012. {
  16013.         uint src = OPER_I_8();
  16014.         uint ea = EA_AY_PI_8();
  16015.         uint res = src ^ m68ki_read_8(ea);
  16016.  
  16017.         m68ki_write_8(ea, res);
  16018.  
  16019.         FLAG_N = NFLAG_8(res);
  16020.         FLAG_Z = res;
  16021.         FLAG_C = CFLAG_CLEAR;
  16022.         FLAG_V = VFLAG_CLEAR;
  16023. }
  16024.  
  16025.  
  16026. void m68k_op_eori_8_pi7(void)
  16027. {
  16028.         uint src = OPER_I_8();
  16029.         uint ea = EA_A7_PI_8();
  16030.         uint res = src ^ m68ki_read_8(ea);
  16031.  
  16032.         m68ki_write_8(ea, res);
  16033.  
  16034.         FLAG_N = NFLAG_8(res);
  16035.         FLAG_Z = res;
  16036.         FLAG_C = CFLAG_CLEAR;
  16037.         FLAG_V = VFLAG_CLEAR;
  16038. }
  16039.  
  16040.  
  16041. void m68k_op_eori_8_pd(void)
  16042. {
  16043.         uint src = OPER_I_8();
  16044.         uint ea = EA_AY_PD_8();
  16045.         uint res = src ^ m68ki_read_8(ea);
  16046.  
  16047.         m68ki_write_8(ea, res);
  16048.  
  16049.         FLAG_N = NFLAG_8(res);
  16050.         FLAG_Z = res;
  16051.         FLAG_C = CFLAG_CLEAR;
  16052.         FLAG_V = VFLAG_CLEAR;
  16053. }
  16054.  
  16055.  
  16056. void m68k_op_eori_8_pd7(void)
  16057. {
  16058.         uint src = OPER_I_8();
  16059.         uint ea = EA_A7_PD_8();
  16060.         uint res = src ^ m68ki_read_8(ea);
  16061.  
  16062.         m68ki_write_8(ea, res);
  16063.  
  16064.         FLAG_N = NFLAG_8(res);
  16065.         FLAG_Z = res;
  16066.         FLAG_C = CFLAG_CLEAR;
  16067.         FLAG_V = VFLAG_CLEAR;
  16068. }
  16069.  
  16070.  
  16071. void m68k_op_eori_8_di(void)
  16072. {
  16073.         uint src = OPER_I_8();
  16074.         uint ea = EA_AY_DI_8();
  16075.         uint res = src ^ m68ki_read_8(ea);
  16076.  
  16077.         m68ki_write_8(ea, res);
  16078.  
  16079.         FLAG_N = NFLAG_8(res);
  16080.         FLAG_Z = res;
  16081.         FLAG_C = CFLAG_CLEAR;
  16082.         FLAG_V = VFLAG_CLEAR;
  16083. }
  16084.  
  16085.  
  16086. void m68k_op_eori_8_ix(void)
  16087. {
  16088.         uint src = OPER_I_8();
  16089.         uint ea = EA_AY_IX_8();
  16090.         uint res = src ^ m68ki_read_8(ea);
  16091.  
  16092.         m68ki_write_8(ea, res);
  16093.  
  16094.         FLAG_N = NFLAG_8(res);
  16095.         FLAG_Z = res;
  16096.         FLAG_C = CFLAG_CLEAR;
  16097.         FLAG_V = VFLAG_CLEAR;
  16098. }
  16099.  
  16100.  
  16101. void m68k_op_eori_8_aw(void)
  16102. {
  16103.         uint src = OPER_I_8();
  16104.         uint ea = EA_AW_8();
  16105.         uint res = src ^ m68ki_read_8(ea);
  16106.  
  16107.         m68ki_write_8(ea, res);
  16108.  
  16109.         FLAG_N = NFLAG_8(res);
  16110.         FLAG_Z = res;
  16111.         FLAG_C = CFLAG_CLEAR;
  16112.         FLAG_V = VFLAG_CLEAR;
  16113. }
  16114.  
  16115.  
  16116. void m68k_op_eori_8_al(void)
  16117. {
  16118.         uint src = OPER_I_8();
  16119.         uint ea = EA_AL_8();
  16120.         uint res = src ^ m68ki_read_8(ea);
  16121.  
  16122.         m68ki_write_8(ea, res);
  16123.  
  16124.         FLAG_N = NFLAG_8(res);
  16125.         FLAG_Z = res;
  16126.         FLAG_C = CFLAG_CLEAR;
  16127.         FLAG_V = VFLAG_CLEAR;
  16128. }
  16129.  
  16130.  
  16131. void m68k_op_eori_16_d(void)
  16132. {
  16133.         uint res = MASK_OUT_ABOVE_16(DY ^= OPER_I_16());
  16134.  
  16135.         FLAG_N = NFLAG_16(res);
  16136.         FLAG_Z = res;
  16137.         FLAG_C = CFLAG_CLEAR;
  16138.         FLAG_V = VFLAG_CLEAR;
  16139. }
  16140.  
  16141.  
  16142. void m68k_op_eori_16_ai(void)
  16143. {
  16144.         uint src = OPER_I_16();
  16145.         uint ea = EA_AY_AI_16();
  16146.         uint res = src ^ m68ki_read_16(ea);
  16147.  
  16148.         m68ki_write_16(ea, res);
  16149.  
  16150.         FLAG_N = NFLAG_16(res);
  16151.         FLAG_Z = res;
  16152.         FLAG_C = CFLAG_CLEAR;
  16153.         FLAG_V = VFLAG_CLEAR;
  16154. }
  16155.  
  16156.  
  16157. void m68k_op_eori_16_pi(void)
  16158. {
  16159.         uint src = OPER_I_16();
  16160.         uint ea = EA_AY_PI_16();
  16161.         uint res = src ^ m68ki_read_16(ea);
  16162.  
  16163.         m68ki_write_16(ea, res);
  16164.  
  16165.         FLAG_N = NFLAG_16(res);
  16166.         FLAG_Z = res;
  16167.         FLAG_C = CFLAG_CLEAR;
  16168.         FLAG_V = VFLAG_CLEAR;
  16169. }
  16170.  
  16171.  
  16172. void m68k_op_eori_16_pd(void)
  16173. {
  16174.         uint src = OPER_I_16();
  16175.         uint ea = EA_AY_PD_16();
  16176.         uint res = src ^ m68ki_read_16(ea);
  16177.  
  16178.         m68ki_write_16(ea, res);
  16179.  
  16180.         FLAG_N = NFLAG_16(res);
  16181.         FLAG_Z = res;
  16182.         FLAG_C = CFLAG_CLEAR;
  16183.         FLAG_V = VFLAG_CLEAR;
  16184. }
  16185.  
  16186.  
  16187. void m68k_op_eori_16_di(void)
  16188. {
  16189.         uint src = OPER_I_16();
  16190.         uint ea = EA_AY_DI_16();
  16191.         uint res = src ^ m68ki_read_16(ea);
  16192.  
  16193.         m68ki_write_16(ea, res);
  16194.  
  16195.         FLAG_N = NFLAG_16(res);
  16196.         FLAG_Z = res;
  16197.         FLAG_C = CFLAG_CLEAR;
  16198.         FLAG_V = VFLAG_CLEAR;
  16199. }
  16200.  
  16201.  
  16202. void m68k_op_eori_16_ix(void)
  16203. {
  16204.         uint src = OPER_I_16();
  16205.         uint ea = EA_AY_IX_16();
  16206.         uint res = src ^ m68ki_read_16(ea);
  16207.  
  16208.         m68ki_write_16(ea, res);
  16209.  
  16210.         FLAG_N = NFLAG_16(res);
  16211.         FLAG_Z = res;
  16212.         FLAG_C = CFLAG_CLEAR;
  16213.         FLAG_V = VFLAG_CLEAR;
  16214. }
  16215.  
  16216.  
  16217. void m68k_op_eori_16_aw(void)
  16218. {
  16219.         uint src = OPER_I_16();
  16220.         uint ea = EA_AW_16();
  16221.         uint res = src ^ m68ki_read_16(ea);
  16222.  
  16223.         m68ki_write_16(ea, res);
  16224.  
  16225.         FLAG_N = NFLAG_16(res);
  16226.         FLAG_Z = res;
  16227.         FLAG_C = CFLAG_CLEAR;
  16228.         FLAG_V = VFLAG_CLEAR;
  16229. }
  16230.  
  16231.  
  16232. void m68k_op_eori_16_al(void)
  16233. {
  16234.         uint src = OPER_I_16();
  16235.         uint ea = EA_AL_16();
  16236.         uint res = src ^ m68ki_read_16(ea);
  16237.  
  16238.         m68ki_write_16(ea, res);
  16239.  
  16240.         FLAG_N = NFLAG_16(res);
  16241.         FLAG_Z = res;
  16242.         FLAG_C = CFLAG_CLEAR;
  16243.         FLAG_V = VFLAG_CLEAR;
  16244. }
  16245.  
  16246.  
  16247. void m68k_op_eori_32_d(void)
  16248. {
  16249.         uint res = DY ^= OPER_I_32();
  16250.  
  16251.         FLAG_N = NFLAG_32(res);
  16252.         FLAG_Z = res;
  16253.         FLAG_C = CFLAG_CLEAR;
  16254.         FLAG_V = VFLAG_CLEAR;
  16255. }
  16256.  
  16257.  
  16258. void m68k_op_eori_32_ai(void)
  16259. {
  16260.         uint src = OPER_I_32();
  16261.         uint ea = EA_AY_AI_32();
  16262.         uint res = src ^ m68ki_read_32(ea);
  16263.  
  16264.         m68ki_write_32(ea, res);
  16265.  
  16266.         FLAG_N = NFLAG_32(res);
  16267.         FLAG_Z = res;
  16268.         FLAG_C = CFLAG_CLEAR;
  16269.         FLAG_V = VFLAG_CLEAR;
  16270. }
  16271.  
  16272.  
  16273. void m68k_op_eori_32_pi(void)
  16274. {
  16275.         uint src = OPER_I_32();
  16276.         uint ea = EA_AY_PI_32();
  16277.         uint res = src ^ m68ki_read_32(ea);
  16278.  
  16279.         m68ki_write_32(ea, res);
  16280.  
  16281.         FLAG_N = NFLAG_32(res);
  16282.         FLAG_Z = res;
  16283.         FLAG_C = CFLAG_CLEAR;
  16284.         FLAG_V = VFLAG_CLEAR;
  16285. }
  16286.  
  16287.  
  16288. void m68k_op_eori_32_pd(void)
  16289. {
  16290.         uint src = OPER_I_32();
  16291.         uint ea = EA_AY_PD_32();
  16292.         uint res = src ^ m68ki_read_32(ea);
  16293.  
  16294.         m68ki_write_32(ea, res);
  16295.  
  16296.         FLAG_N = NFLAG_32(res);
  16297.         FLAG_Z = res;
  16298.         FLAG_C = CFLAG_CLEAR;
  16299.         FLAG_V = VFLAG_CLEAR;
  16300. }
  16301.  
  16302.  
  16303. void m68k_op_eori_32_di(void)
  16304. {
  16305.         uint src = OPER_I_32();
  16306.         uint ea = EA_AY_DI_32();
  16307.         uint res = src ^ m68ki_read_32(ea);
  16308.  
  16309.         m68ki_write_32(ea, res);
  16310.  
  16311.         FLAG_N = NFLAG_32(res);
  16312.         FLAG_Z = res;
  16313.         FLAG_C = CFLAG_CLEAR;
  16314.         FLAG_V = VFLAG_CLEAR;
  16315. }
  16316.  
  16317.  
  16318. void m68k_op_eori_32_ix(void)
  16319. {
  16320.         uint src = OPER_I_32();
  16321.         uint ea = EA_AY_IX_32();
  16322.         uint res = src ^ m68ki_read_32(ea);
  16323.  
  16324.         m68ki_write_32(ea, res);
  16325.  
  16326.         FLAG_N = NFLAG_32(res);
  16327.         FLAG_Z = res;
  16328.         FLAG_C = CFLAG_CLEAR;
  16329.         FLAG_V = VFLAG_CLEAR;
  16330. }
  16331.  
  16332.  
  16333. void m68k_op_eori_32_aw(void)
  16334. {
  16335.         uint src = OPER_I_32();
  16336.         uint ea = EA_AW_32();
  16337.         uint res = src ^ m68ki_read_32(ea);
  16338.  
  16339.         m68ki_write_32(ea, res);
  16340.  
  16341.         FLAG_N = NFLAG_32(res);
  16342.         FLAG_Z = res;
  16343.         FLAG_C = CFLAG_CLEAR;
  16344.         FLAG_V = VFLAG_CLEAR;
  16345. }
  16346.  
  16347.  
  16348. void m68k_op_eori_32_al(void)
  16349. {
  16350.         uint src = OPER_I_32();
  16351.         uint ea = EA_AL_32();
  16352.         uint res = src ^ m68ki_read_32(ea);
  16353.  
  16354.         m68ki_write_32(ea, res);
  16355.  
  16356.         FLAG_N = NFLAG_32(res);
  16357.         FLAG_Z = res;
  16358.         FLAG_C = CFLAG_CLEAR;
  16359.         FLAG_V = VFLAG_CLEAR;
  16360. }
  16361.  
  16362.  
  16363. void m68k_op_eori_16_toc(void)
  16364. {
  16365.         m68ki_set_ccr(m68ki_get_ccr() ^ OPER_I_16());
  16366. }
  16367.  
  16368.  
  16369. void m68k_op_eori_16_tos(void)
  16370. {
  16371.         if(FLAG_S)
  16372.         {
  16373.                 uint src = OPER_I_16();
  16374.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  16375.                 m68ki_set_sr(m68ki_get_sr() ^ src);
  16376.                 return;
  16377.         }
  16378.         m68ki_exception_privilege_violation();
  16379. }
  16380.  
  16381.  
  16382. void m68k_op_exg_32_dd(void)
  16383. {
  16384.         uint* reg_a = &DX;
  16385.         uint* reg_b = &DY;
  16386.         uint tmp = *reg_a;
  16387.         *reg_a = *reg_b;
  16388.         *reg_b = tmp;
  16389. }
  16390.  
  16391.  
  16392. void m68k_op_exg_32_aa(void)
  16393. {
  16394.         uint* reg_a = &AX;
  16395.         uint* reg_b = &AY;
  16396.         uint tmp = *reg_a;
  16397.         *reg_a = *reg_b;
  16398.         *reg_b = tmp;
  16399. }
  16400.  
  16401.  
  16402. void m68k_op_exg_32_da(void)
  16403. {
  16404.         uint* reg_a = &DX;
  16405.         uint* reg_b = &AY;
  16406.         uint tmp = *reg_a;
  16407.         *reg_a = *reg_b;
  16408.         *reg_b = tmp;
  16409. }
  16410.  
  16411.  
  16412. void m68k_op_ext_16(void)
  16413. {
  16414.         uint* r_dst = &DY;
  16415.  
  16416.         *r_dst = MASK_OUT_BELOW_16(*r_dst) | MASK_OUT_ABOVE_8(*r_dst) | (GET_MSB_8(*r_dst) ? 0xff00 : 0);
  16417.  
  16418.         FLAG_N = NFLAG_16(*r_dst);
  16419.         FLAG_Z = MASK_OUT_ABOVE_16(*r_dst);
  16420.         FLAG_V = VFLAG_CLEAR;
  16421.         FLAG_C = CFLAG_CLEAR;
  16422. }
  16423.  
  16424.  
  16425. void m68k_op_ext_32(void)
  16426. {
  16427.         uint* r_dst = &DY;
  16428.  
  16429.         *r_dst = MASK_OUT_ABOVE_16(*r_dst) | (GET_MSB_16(*r_dst) ? 0xffff0000 : 0);
  16430.  
  16431.         FLAG_N = NFLAG_32(*r_dst);
  16432.         FLAG_Z = *r_dst;
  16433.         FLAG_V = VFLAG_CLEAR;
  16434.         FLAG_C = CFLAG_CLEAR;
  16435. }
  16436.  
  16437.  
  16438. void m68k_op_extb_32(void)
  16439. {
  16440.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  16441.         {
  16442.                 uint* r_dst = &DY;
  16443.  
  16444.                 *r_dst = MASK_OUT_ABOVE_8(*r_dst) | (GET_MSB_8(*r_dst) ? 0xffffff00 : 0);
  16445.  
  16446.                 FLAG_N = NFLAG_32(*r_dst);
  16447.                 FLAG_Z = *r_dst;
  16448.                 FLAG_V = VFLAG_CLEAR;
  16449.                 FLAG_C = CFLAG_CLEAR;
  16450.                 return;
  16451.         }
  16452.         m68ki_exception_illegal();
  16453. }
  16454.  
  16455.  
  16456. void m68k_op_illegal(void)
  16457. {
  16458.         m68ki_exception_illegal();
  16459. }
  16460.  
  16461.  
  16462. void m68k_op_jmp_32_ai(void)
  16463. {
  16464.         m68ki_jump(EA_AY_AI_32());
  16465.         m68ki_trace_t0();                                  /* auto-disable (see m68kcpu.h) */
  16466.         if(REG_PC == REG_PPC)
  16467.                 USE_ALL_CYCLES();
  16468. }
  16469.  
  16470.  
  16471. void m68k_op_jmp_32_di(void)
  16472. {
  16473.         m68ki_jump(EA_AY_DI_32());
  16474.         m68ki_trace_t0();                                  /* auto-disable (see m68kcpu.h) */
  16475.         if(REG_PC == REG_PPC)
  16476.                 USE_ALL_CYCLES();
  16477. }
  16478.  
  16479.  
  16480. void m68k_op_jmp_32_ix(void)
  16481. {
  16482.         m68ki_jump(EA_AY_IX_32());
  16483.         m68ki_trace_t0();                                  /* auto-disable (see m68kcpu.h) */
  16484.         if(REG_PC == REG_PPC)
  16485.                 USE_ALL_CYCLES();
  16486. }
  16487.  
  16488.  
  16489. void m68k_op_jmp_32_aw(void)
  16490. {
  16491.         m68ki_jump(EA_AW_32());
  16492.         m68ki_trace_t0();                                  /* auto-disable (see m68kcpu.h) */
  16493.         if(REG_PC == REG_PPC)
  16494.                 USE_ALL_CYCLES();
  16495. }
  16496.  
  16497.  
  16498. void m68k_op_jmp_32_al(void)
  16499. {
  16500.         m68ki_jump(EA_AL_32());
  16501.         m68ki_trace_t0();                                  /* auto-disable (see m68kcpu.h) */
  16502.         if(REG_PC == REG_PPC)
  16503.                 USE_ALL_CYCLES();
  16504. }
  16505.  
  16506.  
  16507. void m68k_op_jmp_32_pcdi(void)
  16508. {
  16509.         m68ki_jump(EA_PCDI_32());
  16510.         m68ki_trace_t0();                                  /* auto-disable (see m68kcpu.h) */
  16511.         if(REG_PC == REG_PPC)
  16512.                 USE_ALL_CYCLES();
  16513. }
  16514.  
  16515.  
  16516. void m68k_op_jmp_32_pcix(void)
  16517. {
  16518.         m68ki_jump(EA_PCIX_32());
  16519.         m68ki_trace_t0();                                  /* auto-disable (see m68kcpu.h) */
  16520.         if(REG_PC == REG_PPC)
  16521.                 USE_ALL_CYCLES();
  16522. }
  16523.  
  16524.  
  16525. void m68k_op_jsr_32_ai(void)
  16526. {
  16527.         uint ea = EA_AY_AI_32();
  16528.         m68ki_trace_t0();                                  /* auto-disable (see m68kcpu.h) */
  16529.         m68ki_push_32(REG_PC);
  16530.         m68ki_jump(ea);
  16531. }
  16532.  
  16533.  
  16534. void m68k_op_jsr_32_di(void)
  16535. {
  16536.         uint ea = EA_AY_DI_32();
  16537.         m68ki_trace_t0();                                  /* auto-disable (see m68kcpu.h) */
  16538.         m68ki_push_32(REG_PC);
  16539.         m68ki_jump(ea);
  16540. }
  16541.  
  16542.  
  16543. void m68k_op_jsr_32_ix(void)
  16544. {
  16545.         uint ea = EA_AY_IX_32();
  16546.         m68ki_trace_t0();                                  /* auto-disable (see m68kcpu.h) */
  16547.         m68ki_push_32(REG_PC);
  16548.         m68ki_jump(ea);
  16549. }
  16550.  
  16551.  
  16552. void m68k_op_jsr_32_aw(void)
  16553. {
  16554.         uint ea = EA_AW_32();
  16555.         m68ki_trace_t0();                                  /* auto-disable (see m68kcpu.h) */
  16556.         m68ki_push_32(REG_PC);
  16557.         m68ki_jump(ea);
  16558. }
  16559.  
  16560.  
  16561. void m68k_op_jsr_32_al(void)
  16562. {
  16563.         uint ea = EA_AL_32();
  16564.         m68ki_trace_t0();                                  /* auto-disable (see m68kcpu.h) */
  16565.         m68ki_push_32(REG_PC);
  16566.         m68ki_jump(ea);
  16567. }
  16568.  
  16569.  
  16570. void m68k_op_jsr_32_pcdi(void)
  16571. {
  16572.         uint ea = EA_PCDI_32();
  16573.         m68ki_trace_t0();                                  /* auto-disable (see m68kcpu.h) */
  16574.         m68ki_push_32(REG_PC);
  16575.         m68ki_jump(ea);
  16576. }
  16577.  
  16578.  
  16579. void m68k_op_jsr_32_pcix(void)
  16580. {
  16581.         uint ea = EA_PCIX_32();
  16582.         m68ki_trace_t0();                                  /* auto-disable (see m68kcpu.h) */
  16583.         m68ki_push_32(REG_PC);
  16584.         m68ki_jump(ea);
  16585. }
  16586.  
  16587.  
  16588. void m68k_op_lea_32_ai(void)
  16589. {
  16590.         AX = EA_AY_AI_32();
  16591. }
  16592.  
  16593.  
  16594. void m68k_op_lea_32_di(void)
  16595. {
  16596.         AX = EA_AY_DI_32();
  16597. }
  16598.  
  16599.  
  16600. void m68k_op_lea_32_ix(void)
  16601. {
  16602.         AX = EA_AY_IX_32();
  16603. }
  16604.  
  16605.  
  16606. void m68k_op_lea_32_aw(void)
  16607. {
  16608.         AX = EA_AW_32();
  16609. }
  16610.  
  16611.  
  16612. void m68k_op_lea_32_al(void)
  16613. {
  16614.         AX = EA_AL_32();
  16615. }
  16616.  
  16617.  
  16618. void m68k_op_lea_32_pcdi(void)
  16619. {
  16620.         AX = EA_PCDI_32();
  16621. }
  16622.  
  16623.  
  16624. void m68k_op_lea_32_pcix(void)
  16625. {
  16626.         AX = EA_PCIX_32();
  16627. }
  16628.  
  16629.  
  16630. void m68k_op_link_16_a7(void)
  16631. {
  16632.         REG_A[7] -= 4;
  16633.         m68ki_write_32(REG_A[7], REG_A[7]);
  16634.         REG_A[7] = MASK_OUT_ABOVE_32(REG_A[7] + MAKE_INT_16(OPER_I_16()));
  16635. }
  16636.  
  16637.  
  16638. void m68k_op_link_16(void)
  16639. {
  16640.         uint* r_dst = &AY;
  16641.  
  16642.         m68ki_push_32(*r_dst);
  16643.         *r_dst = REG_A[7];
  16644.         REG_A[7] = MASK_OUT_ABOVE_32(REG_A[7] + MAKE_INT_16(OPER_I_16()));
  16645. }
  16646.  
  16647.  
  16648. void m68k_op_link_32_a7(void)
  16649. {
  16650.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  16651.         {
  16652.                 REG_A[7] -= 4;
  16653.                 m68ki_write_32(REG_A[7], REG_A[7]);
  16654.                 REG_A[7] = MASK_OUT_ABOVE_32(REG_A[7] + OPER_I_32());
  16655.                 return;
  16656.         }
  16657.         m68ki_exception_illegal();
  16658. }
  16659.  
  16660.  
  16661. void m68k_op_link_32(void)
  16662. {
  16663.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  16664.         {
  16665.                 uint* r_dst = &AY;
  16666.  
  16667.                 m68ki_push_32(*r_dst);
  16668.                 *r_dst = REG_A[7];
  16669.                 REG_A[7] = MASK_OUT_ABOVE_32(REG_A[7] + OPER_I_32());
  16670.                 return;
  16671.         }
  16672.         m68ki_exception_illegal();
  16673. }
  16674.  
  16675.  
  16676. void m68k_op_lsr_8_s(void)
  16677. {
  16678.         uint* r_dst = &DY;
  16679.         uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
  16680.         uint src = MASK_OUT_ABOVE_8(*r_dst);
  16681.         uint res = src >> shift;
  16682.  
  16683.         if(shift != 0)
  16684.                 USE_CYCLES(shift<<CYC_SHIFT);
  16685.  
  16686.         *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
  16687.  
  16688.         FLAG_N = NFLAG_CLEAR;
  16689.         FLAG_Z = res;
  16690.         FLAG_X = FLAG_C = src << (9-shift);
  16691.         FLAG_V = VFLAG_CLEAR;
  16692. }
  16693.  
  16694.  
  16695. void m68k_op_lsr_16_s(void)
  16696. {
  16697.         uint* r_dst = &DY;
  16698.         uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
  16699.         uint src = MASK_OUT_ABOVE_16(*r_dst);
  16700.         uint res = src >> shift;
  16701.  
  16702.         if(shift != 0)
  16703.                 USE_CYCLES(shift<<CYC_SHIFT);
  16704.  
  16705.         *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
  16706.  
  16707.         FLAG_N = NFLAG_CLEAR;
  16708.         FLAG_Z = res;
  16709.         FLAG_X = FLAG_C = src << (9-shift);
  16710.         FLAG_V = VFLAG_CLEAR;
  16711. }
  16712.  
  16713.  
  16714. void m68k_op_lsr_32_s(void)
  16715. {
  16716.         uint* r_dst = &DY;
  16717.         uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
  16718.         uint src = *r_dst;
  16719.         uint res = src >> shift;
  16720.  
  16721.         if(shift != 0)
  16722.                 USE_CYCLES(shift<<CYC_SHIFT);
  16723.  
  16724.         *r_dst = res;
  16725.  
  16726.         FLAG_N = NFLAG_CLEAR;
  16727.         FLAG_Z = res;
  16728.         FLAG_X = FLAG_C = src << (9-shift);
  16729.         FLAG_V = VFLAG_CLEAR;
  16730. }
  16731.  
  16732.  
  16733. void m68k_op_lsr_8_r(void)
  16734. {
  16735.         uint* r_dst = &DY;
  16736.         uint shift = DX & 0x3f;
  16737.         uint src = MASK_OUT_ABOVE_8(*r_dst);
  16738.         uint res = src >> shift;
  16739.  
  16740.         if(shift != 0)
  16741.         {
  16742.                 USE_CYCLES(shift<<CYC_SHIFT);
  16743.  
  16744.                 if(shift <= 8)
  16745.                 {
  16746.                         *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
  16747.                         FLAG_X = FLAG_C = src << (9-shift);
  16748.                         FLAG_N = NFLAG_CLEAR;
  16749.                         FLAG_Z = res;
  16750.                         FLAG_V = VFLAG_CLEAR;
  16751.                         return;
  16752.                 }
  16753.  
  16754.                 *r_dst &= 0xffffff00;
  16755.                 FLAG_X = XFLAG_CLEAR;
  16756.                 FLAG_C = CFLAG_CLEAR;
  16757.                 FLAG_N = NFLAG_CLEAR;
  16758.                 FLAG_Z = ZFLAG_SET;
  16759.                 FLAG_V = VFLAG_CLEAR;
  16760.                 return;
  16761.         }
  16762.  
  16763.         FLAG_C = CFLAG_CLEAR;
  16764.         FLAG_N = NFLAG_8(src);
  16765.         FLAG_Z = src;
  16766.         FLAG_V = VFLAG_CLEAR;
  16767. }
  16768.  
  16769.  
  16770. void m68k_op_lsr_16_r(void)
  16771. {
  16772.         uint* r_dst = &DY;
  16773.         uint shift = DX & 0x3f;
  16774.         uint src = MASK_OUT_ABOVE_16(*r_dst);
  16775.         uint res = src >> shift;
  16776.  
  16777.         if(shift != 0)
  16778.         {
  16779.                 USE_CYCLES(shift<<CYC_SHIFT);
  16780.  
  16781.                 if(shift <= 16)
  16782.                 {
  16783.                         *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
  16784.                         FLAG_C = FLAG_X = (src >> (shift - 1))<<8;
  16785.                         FLAG_N = NFLAG_CLEAR;
  16786.                         FLAG_Z = res;
  16787.                         FLAG_V = VFLAG_CLEAR;
  16788.                         return;
  16789.                 }
  16790.  
  16791.                 *r_dst &= 0xffff0000;
  16792.                 FLAG_X = XFLAG_CLEAR;
  16793.                 FLAG_C = CFLAG_CLEAR;
  16794.                 FLAG_N = NFLAG_CLEAR;
  16795.                 FLAG_Z = ZFLAG_SET;
  16796.                 FLAG_V = VFLAG_CLEAR;
  16797.                 return;
  16798.         }
  16799.  
  16800.         FLAG_C = CFLAG_CLEAR;
  16801.         FLAG_N = NFLAG_16(src);
  16802.         FLAG_Z = src;
  16803.         FLAG_V = VFLAG_CLEAR;
  16804. }
  16805.  
  16806.  
  16807. void m68k_op_lsr_32_r(void)
  16808. {
  16809.         uint* r_dst = &DY;
  16810.         uint shift = DX & 0x3f;
  16811.         uint src = *r_dst;
  16812.         uint res = src >> shift;
  16813.  
  16814.         if(shift != 0)
  16815.         {
  16816.                 USE_CYCLES(shift<<CYC_SHIFT);
  16817.  
  16818.                 if(shift < 32)
  16819.                 {
  16820.                         *r_dst = res;
  16821.                         FLAG_C = FLAG_X = (src >> (shift - 1))<<8;
  16822.                         FLAG_N = NFLAG_CLEAR;
  16823.                         FLAG_Z = res;
  16824.                         FLAG_V = VFLAG_CLEAR;
  16825.                         return;
  16826.                 }
  16827.  
  16828.                 *r_dst = 0;
  16829.                 FLAG_X = FLAG_C = (shift == 32 ? GET_MSB_32(src)>>23 : 0);
  16830.                 FLAG_N = NFLAG_CLEAR;
  16831.                 FLAG_Z = ZFLAG_SET;
  16832.                 FLAG_V = VFLAG_CLEAR;
  16833.                 return;
  16834.         }
  16835.  
  16836.         FLAG_C = CFLAG_CLEAR;
  16837.         FLAG_N = NFLAG_32(src);
  16838.         FLAG_Z = src;
  16839.         FLAG_V = VFLAG_CLEAR;
  16840. }
  16841.  
  16842.  
  16843. void m68k_op_lsr_16_ai(void)
  16844. {
  16845.         uint ea = EA_AY_AI_16();
  16846.         uint src = m68ki_read_16(ea);
  16847.         uint res = src >> 1;
  16848.  
  16849.         m68ki_write_16(ea, res);
  16850.  
  16851.         FLAG_N = NFLAG_CLEAR;
  16852.         FLAG_Z = res;
  16853.         FLAG_C = FLAG_X = src << 8;
  16854.         FLAG_V = VFLAG_CLEAR;
  16855. }
  16856.  
  16857.  
  16858. void m68k_op_lsr_16_pi(void)
  16859. {
  16860.         uint ea = EA_AY_PI_16();
  16861.         uint src = m68ki_read_16(ea);
  16862.         uint res = src >> 1;
  16863.  
  16864.         m68ki_write_16(ea, res);
  16865.  
  16866.         FLAG_N = NFLAG_CLEAR;
  16867.         FLAG_Z = res;
  16868.         FLAG_C = FLAG_X = src << 8;
  16869.         FLAG_V = VFLAG_CLEAR;
  16870. }
  16871.  
  16872.  
  16873. void m68k_op_lsr_16_pd(void)
  16874. {
  16875.         uint ea = EA_AY_PD_16();
  16876.         uint src = m68ki_read_16(ea);
  16877.         uint res = src >> 1;
  16878.  
  16879.         m68ki_write_16(ea, res);
  16880.  
  16881.         FLAG_N = NFLAG_CLEAR;
  16882.         FLAG_Z = res;
  16883.         FLAG_C = FLAG_X = src << 8;
  16884.         FLAG_V = VFLAG_CLEAR;
  16885. }
  16886.  
  16887.  
  16888. void m68k_op_lsr_16_di(void)
  16889. {
  16890.         uint ea = EA_AY_DI_16();
  16891.         uint src = m68ki_read_16(ea);
  16892.         uint res = src >> 1;
  16893.  
  16894.         m68ki_write_16(ea, res);
  16895.  
  16896.         FLAG_N = NFLAG_CLEAR;
  16897.         FLAG_Z = res;
  16898.         FLAG_C = FLAG_X = src << 8;
  16899.         FLAG_V = VFLAG_CLEAR;
  16900. }
  16901.  
  16902.  
  16903. void m68k_op_lsr_16_ix(void)
  16904. {
  16905.         uint ea = EA_AY_IX_16();
  16906.         uint src = m68ki_read_16(ea);
  16907.         uint res = src >> 1;
  16908.  
  16909.         m68ki_write_16(ea, res);
  16910.  
  16911.         FLAG_N = NFLAG_CLEAR;
  16912.         FLAG_Z = res;
  16913.         FLAG_C = FLAG_X = src << 8;
  16914.         FLAG_V = VFLAG_CLEAR;
  16915. }
  16916.  
  16917.  
  16918. void m68k_op_lsr_16_aw(void)
  16919. {
  16920.         uint ea = EA_AW_16();
  16921.         uint src = m68ki_read_16(ea);
  16922.         uint res = src >> 1;
  16923.  
  16924.         m68ki_write_16(ea, res);
  16925.  
  16926.         FLAG_N = NFLAG_CLEAR;
  16927.         FLAG_Z = res;
  16928.         FLAG_C = FLAG_X = src << 8;
  16929.         FLAG_V = VFLAG_CLEAR;
  16930. }
  16931.  
  16932.  
  16933. void m68k_op_lsr_16_al(void)
  16934. {
  16935.         uint ea = EA_AL_16();
  16936.         uint src = m68ki_read_16(ea);
  16937.         uint res = src >> 1;
  16938.  
  16939.         m68ki_write_16(ea, res);
  16940.  
  16941.         FLAG_N = NFLAG_CLEAR;
  16942.         FLAG_Z = res;
  16943.         FLAG_C = FLAG_X = src << 8;
  16944.         FLAG_V = VFLAG_CLEAR;
  16945. }
  16946.  
  16947.  
  16948. void m68k_op_lsl_8_s(void)
  16949. {
  16950.         uint* r_dst = &DY;
  16951.         uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
  16952.         uint src = MASK_OUT_ABOVE_8(*r_dst);
  16953.         uint res = MASK_OUT_ABOVE_8(src << shift);
  16954.  
  16955.         if(shift != 0)
  16956.                 USE_CYCLES(shift<<CYC_SHIFT);
  16957.  
  16958.         *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
  16959.  
  16960.         FLAG_N = NFLAG_8(res);
  16961.         FLAG_Z = res;
  16962.         FLAG_X = FLAG_C = src << shift;
  16963.         FLAG_V = VFLAG_CLEAR;
  16964. }
  16965.  
  16966.  
  16967. void m68k_op_lsl_16_s(void)
  16968. {
  16969.         uint* r_dst = &DY;
  16970.         uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
  16971.         uint src = MASK_OUT_ABOVE_16(*r_dst);
  16972.         uint res = MASK_OUT_ABOVE_16(src << shift);
  16973.  
  16974.         if(shift != 0)
  16975.                 USE_CYCLES(shift<<CYC_SHIFT);
  16976.  
  16977.         *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
  16978.  
  16979.         FLAG_N = NFLAG_16(res);
  16980.         FLAG_Z = res;
  16981.         FLAG_X = FLAG_C = src >> (8-shift);
  16982.         FLAG_V = VFLAG_CLEAR;
  16983. }
  16984.  
  16985.  
  16986. void m68k_op_lsl_32_s(void)
  16987. {
  16988.         uint* r_dst = &DY;
  16989.         uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
  16990.         uint src = *r_dst;
  16991.         uint res = MASK_OUT_ABOVE_32(src << shift);
  16992.  
  16993.         if(shift != 0)
  16994.                 USE_CYCLES(shift<<CYC_SHIFT);
  16995.  
  16996.         *r_dst = res;
  16997.  
  16998.         FLAG_N = NFLAG_32(res);
  16999.         FLAG_Z = res;
  17000.         FLAG_X = FLAG_C = src >> (24-shift);
  17001.         FLAG_V = VFLAG_CLEAR;
  17002. }
  17003.  
  17004.  
  17005. void m68k_op_lsl_8_r(void)
  17006. {
  17007.         uint* r_dst = &DY;
  17008.         uint shift = DX & 0x3f;
  17009.         uint src = MASK_OUT_ABOVE_8(*r_dst);
  17010.         uint res = MASK_OUT_ABOVE_8(src << shift);
  17011.  
  17012.         if(shift != 0)
  17013.         {
  17014.                 USE_CYCLES(shift<<CYC_SHIFT);
  17015.  
  17016.                 if(shift <= 8)
  17017.                 {
  17018.                         *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
  17019.                         FLAG_X = FLAG_C = src << shift;
  17020.                         FLAG_N = NFLAG_8(res);
  17021.                         FLAG_Z = res;
  17022.                         FLAG_V = VFLAG_CLEAR;
  17023.                         return;
  17024.                 }
  17025.  
  17026.                 *r_dst &= 0xffffff00;
  17027.                 FLAG_X = XFLAG_CLEAR;
  17028.                 FLAG_C = CFLAG_CLEAR;
  17029.                 FLAG_N = NFLAG_CLEAR;
  17030.                 FLAG_Z = ZFLAG_SET;
  17031.                 FLAG_V = VFLAG_CLEAR;
  17032.                 return;
  17033.         }
  17034.  
  17035.         FLAG_C = CFLAG_CLEAR;
  17036.         FLAG_N = NFLAG_8(src);
  17037.         FLAG_Z = src;
  17038.         FLAG_V = VFLAG_CLEAR;
  17039. }
  17040.  
  17041.  
  17042. void m68k_op_lsl_16_r(void)
  17043. {
  17044.         uint* r_dst = &DY;
  17045.         uint shift = DX & 0x3f;
  17046.         uint src = MASK_OUT_ABOVE_16(*r_dst);
  17047.         uint res = MASK_OUT_ABOVE_16(src << shift);
  17048.  
  17049.         if(shift != 0)
  17050.         {
  17051.                 USE_CYCLES(shift<<CYC_SHIFT);
  17052.  
  17053.                 if(shift <= 16)
  17054.                 {
  17055.                         *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
  17056.                         FLAG_X = FLAG_C = (src << shift) >> 8;
  17057.                         FLAG_N = NFLAG_16(res);
  17058.                         FLAG_Z = res;
  17059.                         FLAG_V = VFLAG_CLEAR;
  17060.                         return;
  17061.                 }
  17062.  
  17063.                 *r_dst &= 0xffff0000;
  17064.                 FLAG_X = XFLAG_CLEAR;
  17065.                 FLAG_C = CFLAG_CLEAR;
  17066.                 FLAG_N = NFLAG_CLEAR;
  17067.                 FLAG_Z = ZFLAG_SET;
  17068.                 FLAG_V = VFLAG_CLEAR;
  17069.                 return;
  17070.         }
  17071.  
  17072.         FLAG_C = CFLAG_CLEAR;
  17073.         FLAG_N = NFLAG_16(src);
  17074.         FLAG_Z = src;
  17075.         FLAG_V = VFLAG_CLEAR;
  17076. }
  17077.  
  17078.  
  17079. void m68k_op_lsl_32_r(void)
  17080. {
  17081.         uint* r_dst = &DY;
  17082.         uint shift = DX & 0x3f;
  17083.         uint src = *r_dst;
  17084.         uint res = MASK_OUT_ABOVE_32(src << shift);
  17085.  
  17086.         if(shift != 0)
  17087.         {
  17088.                 USE_CYCLES(shift<<CYC_SHIFT);
  17089.  
  17090.                 if(shift < 32)
  17091.                 {
  17092.                         *r_dst = res;
  17093.                         FLAG_X = FLAG_C = (src >> (32 - shift)) << 8;
  17094.                         FLAG_N = NFLAG_32(res);
  17095.                         FLAG_Z = res;
  17096.                         FLAG_V = VFLAG_CLEAR;
  17097.                         return;
  17098.                 }
  17099.  
  17100.                 *r_dst = 0;
  17101.                 FLAG_X = FLAG_C = ((shift == 32 ? src & 1 : 0))<<8;
  17102.                 FLAG_N = NFLAG_CLEAR;
  17103.                 FLAG_Z = ZFLAG_SET;
  17104.                 FLAG_V = VFLAG_CLEAR;
  17105.                 return;
  17106.         }
  17107.  
  17108.         FLAG_C = CFLAG_CLEAR;
  17109.         FLAG_N = NFLAG_32(src);
  17110.         FLAG_Z = src;
  17111.         FLAG_V = VFLAG_CLEAR;
  17112. }
  17113.  
  17114.  
  17115. void m68k_op_lsl_16_ai(void)
  17116. {
  17117.         uint ea = EA_AY_AI_16();
  17118.         uint src = m68ki_read_16(ea);
  17119.         uint res = MASK_OUT_ABOVE_16(src << 1);
  17120.  
  17121.         m68ki_write_16(ea, res);
  17122.  
  17123.         FLAG_N = NFLAG_16(res);
  17124.         FLAG_Z = res;
  17125.         FLAG_X = FLAG_C = src >> 7;
  17126.         FLAG_V = VFLAG_CLEAR;
  17127. }
  17128.  
  17129.  
  17130. void m68k_op_lsl_16_pi(void)
  17131. {
  17132.         uint ea = EA_AY_PI_16();
  17133.         uint src = m68ki_read_16(ea);
  17134.         uint res = MASK_OUT_ABOVE_16(src << 1);
  17135.  
  17136.         m68ki_write_16(ea, res);
  17137.  
  17138.         FLAG_N = NFLAG_16(res);
  17139.         FLAG_Z = res;
  17140.         FLAG_X = FLAG_C = src >> 7;
  17141.         FLAG_V = VFLAG_CLEAR;
  17142. }
  17143.  
  17144.  
  17145. void m68k_op_lsl_16_pd(void)
  17146. {
  17147.         uint ea = EA_AY_PD_16();
  17148.         uint src = m68ki_read_16(ea);
  17149.         uint res = MASK_OUT_ABOVE_16(src << 1);
  17150.  
  17151.         m68ki_write_16(ea, res);
  17152.  
  17153.         FLAG_N = NFLAG_16(res);
  17154.         FLAG_Z = res;
  17155.         FLAG_X = FLAG_C = src >> 7;
  17156.         FLAG_V = VFLAG_CLEAR;
  17157. }
  17158.  
  17159.  
  17160. void m68k_op_lsl_16_di(void)
  17161. {
  17162.         uint ea = EA_AY_DI_16();
  17163.         uint src = m68ki_read_16(ea);
  17164.         uint res = MASK_OUT_ABOVE_16(src << 1);
  17165.  
  17166.         m68ki_write_16(ea, res);
  17167.  
  17168.         FLAG_N = NFLAG_16(res);
  17169.         FLAG_Z = res;
  17170.         FLAG_X = FLAG_C = src >> 7;
  17171.         FLAG_V = VFLAG_CLEAR;
  17172. }
  17173.  
  17174.  
  17175. void m68k_op_lsl_16_ix(void)
  17176. {
  17177.         uint ea = EA_AY_IX_16();
  17178.         uint src = m68ki_read_16(ea);
  17179.         uint res = MASK_OUT_ABOVE_16(src << 1);
  17180.  
  17181.         m68ki_write_16(ea, res);
  17182.  
  17183.         FLAG_N = NFLAG_16(res);
  17184.         FLAG_Z = res;
  17185.         FLAG_X = FLAG_C = src >> 7;
  17186.         FLAG_V = VFLAG_CLEAR;
  17187. }
  17188.  
  17189.  
  17190. void m68k_op_lsl_16_aw(void)
  17191. {
  17192.         uint ea = EA_AW_16();
  17193.         uint src = m68ki_read_16(ea);
  17194.         uint res = MASK_OUT_ABOVE_16(src << 1);
  17195.  
  17196.         m68ki_write_16(ea, res);
  17197.  
  17198.         FLAG_N = NFLAG_16(res);
  17199.         FLAG_Z = res;
  17200.         FLAG_X = FLAG_C = src >> 7;
  17201.         FLAG_V = VFLAG_CLEAR;
  17202. }
  17203.  
  17204.  
  17205. void m68k_op_lsl_16_al(void)
  17206. {
  17207.         uint ea = EA_AL_16();
  17208.         uint src = m68ki_read_16(ea);
  17209.         uint res = MASK_OUT_ABOVE_16(src << 1);
  17210.  
  17211.         m68ki_write_16(ea, res);
  17212.  
  17213.         FLAG_N = NFLAG_16(res);
  17214.         FLAG_Z = res;
  17215.         FLAG_X = FLAG_C = src >> 7;
  17216.         FLAG_V = VFLAG_CLEAR;
  17217. }
  17218.  
  17219.  
  17220. void m68k_op_move_8_d_d(void)
  17221. {
  17222.         uint res = MASK_OUT_ABOVE_8(DY);
  17223.         uint* r_dst = &DX;
  17224.  
  17225.         *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
  17226.  
  17227.         FLAG_N = NFLAG_8(res);
  17228.         FLAG_Z = res;
  17229.         FLAG_V = VFLAG_CLEAR;
  17230.         FLAG_C = CFLAG_CLEAR;
  17231. }
  17232.  
  17233.  
  17234. void m68k_op_move_8_d_ai(void)
  17235. {
  17236.         uint res = OPER_AY_AI_8();
  17237.         uint* r_dst = &DX;
  17238.  
  17239.         *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
  17240.  
  17241.         FLAG_N = NFLAG_8(res);
  17242.         FLAG_Z = res;
  17243.         FLAG_V = VFLAG_CLEAR;
  17244.         FLAG_C = CFLAG_CLEAR;
  17245. }
  17246.  
  17247.  
  17248. void m68k_op_move_8_d_pi(void)
  17249. {
  17250.         uint res = OPER_AY_PI_8();
  17251.         uint* r_dst = &DX;
  17252.  
  17253.         *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
  17254.  
  17255.         FLAG_N = NFLAG_8(res);
  17256.         FLAG_Z = res;
  17257.         FLAG_V = VFLAG_CLEAR;
  17258.         FLAG_C = CFLAG_CLEAR;
  17259. }
  17260.  
  17261.  
  17262. void m68k_op_move_8_d_pi7(void)
  17263. {
  17264.         uint res = OPER_A7_PI_8();
  17265.         uint* r_dst = &DX;
  17266.  
  17267.         *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
  17268.  
  17269.         FLAG_N = NFLAG_8(res);
  17270.         FLAG_Z = res;
  17271.         FLAG_V = VFLAG_CLEAR;
  17272.         FLAG_C = CFLAG_CLEAR;
  17273. }
  17274.  
  17275.  
  17276. void m68k_op_move_8_d_pd(void)
  17277. {
  17278.         uint res = OPER_AY_PD_8();
  17279.         uint* r_dst = &DX;
  17280.  
  17281.         *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
  17282.  
  17283.         FLAG_N = NFLAG_8(res);
  17284.         FLAG_Z = res;
  17285.         FLAG_V = VFLAG_CLEAR;
  17286.         FLAG_C = CFLAG_CLEAR;
  17287. }
  17288.  
  17289.  
  17290. void m68k_op_move_8_d_pd7(void)
  17291. {
  17292.         uint res = OPER_A7_PD_8();
  17293.         uint* r_dst = &DX;
  17294.  
  17295.         *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
  17296.  
  17297.         FLAG_N = NFLAG_8(res);
  17298.         FLAG_Z = res;
  17299.         FLAG_V = VFLAG_CLEAR;
  17300.         FLAG_C = CFLAG_CLEAR;
  17301. }
  17302.  
  17303.  
  17304. void m68k_op_move_8_d_di(void)
  17305. {
  17306.         uint res = OPER_AY_DI_8();
  17307.         uint* r_dst = &DX;
  17308.  
  17309.         *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
  17310.  
  17311.         FLAG_N = NFLAG_8(res);
  17312.         FLAG_Z = res;
  17313.         FLAG_V = VFLAG_CLEAR;
  17314.         FLAG_C = CFLAG_CLEAR;
  17315. }
  17316.  
  17317.  
  17318. void m68k_op_move_8_d_ix(void)
  17319. {
  17320.         uint res = OPER_AY_IX_8();
  17321.         uint* r_dst = &DX;
  17322.  
  17323.         *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
  17324.  
  17325.         FLAG_N = NFLAG_8(res);
  17326.         FLAG_Z = res;
  17327.         FLAG_V = VFLAG_CLEAR;
  17328.         FLAG_C = CFLAG_CLEAR;
  17329. }
  17330.  
  17331.  
  17332. void m68k_op_move_8_d_aw(void)
  17333. {
  17334.         uint res = OPER_AW_8();
  17335.         uint* r_dst = &DX;
  17336.  
  17337.         *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
  17338.  
  17339.         FLAG_N = NFLAG_8(res);
  17340.         FLAG_Z = res;
  17341.         FLAG_V = VFLAG_CLEAR;
  17342.         FLAG_C = CFLAG_CLEAR;
  17343. }
  17344.  
  17345.  
  17346. void m68k_op_move_8_d_al(void)
  17347. {
  17348.         uint res = OPER_AL_8();
  17349.         uint* r_dst = &DX;
  17350.  
  17351.         *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
  17352.  
  17353.         FLAG_N = NFLAG_8(res);
  17354.         FLAG_Z = res;
  17355.         FLAG_V = VFLAG_CLEAR;
  17356.         FLAG_C = CFLAG_CLEAR;
  17357. }
  17358.  
  17359.  
  17360. void m68k_op_move_8_d_pcdi(void)
  17361. {
  17362.         uint res = OPER_PCDI_8();
  17363.         uint* r_dst = &DX;
  17364.  
  17365.         *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
  17366.  
  17367.         FLAG_N = NFLAG_8(res);
  17368.         FLAG_Z = res;
  17369.         FLAG_V = VFLAG_CLEAR;
  17370.         FLAG_C = CFLAG_CLEAR;
  17371. }
  17372.  
  17373.  
  17374. void m68k_op_move_8_d_pcix(void)
  17375. {
  17376.         uint res = OPER_PCIX_8();
  17377.         uint* r_dst = &DX;
  17378.  
  17379.         *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
  17380.  
  17381.         FLAG_N = NFLAG_8(res);
  17382.         FLAG_Z = res;
  17383.         FLAG_V = VFLAG_CLEAR;
  17384.         FLAG_C = CFLAG_CLEAR;
  17385. }
  17386.  
  17387.  
  17388. void m68k_op_move_8_d_i(void)
  17389. {
  17390.         uint res = OPER_I_8();
  17391.         uint* r_dst = &DX;
  17392.  
  17393.         *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
  17394.  
  17395.         FLAG_N = NFLAG_8(res);
  17396.         FLAG_Z = res;
  17397.         FLAG_V = VFLAG_CLEAR;
  17398.         FLAG_C = CFLAG_CLEAR;
  17399. }
  17400.  
  17401.  
  17402. void m68k_op_move_8_ai_d(void)
  17403. {
  17404.         uint res = MASK_OUT_ABOVE_8(DY);
  17405.         uint ea = EA_AX_AI_8();
  17406.  
  17407.         m68ki_write_8(ea, res);
  17408.  
  17409.         FLAG_N = NFLAG_8(res);
  17410.         FLAG_Z = res;
  17411.         FLAG_V = VFLAG_CLEAR;
  17412.         FLAG_C = CFLAG_CLEAR;
  17413. }
  17414.  
  17415.  
  17416. void m68k_op_move_8_ai_ai(void)
  17417. {
  17418.         uint res = OPER_AY_AI_8();
  17419.         uint ea = EA_AX_AI_8();
  17420.  
  17421.         m68ki_write_8(ea, res);
  17422.  
  17423.         FLAG_N = NFLAG_8(res);
  17424.         FLAG_Z = res;
  17425.         FLAG_V = VFLAG_CLEAR;
  17426.         FLAG_C = CFLAG_CLEAR;
  17427. }
  17428.  
  17429.  
  17430. void m68k_op_move_8_ai_pi(void)
  17431. {
  17432.         uint res = OPER_AY_PI_8();
  17433.         uint ea = EA_AX_AI_8();
  17434.  
  17435.         m68ki_write_8(ea, res);
  17436.  
  17437.         FLAG_N = NFLAG_8(res);
  17438.         FLAG_Z = res;
  17439.         FLAG_V = VFLAG_CLEAR;
  17440.         FLAG_C = CFLAG_CLEAR;
  17441. }
  17442.  
  17443.  
  17444. void m68k_op_move_8_ai_pi7(void)
  17445. {
  17446.         uint res = OPER_A7_PI_8();
  17447.         uint ea = EA_AX_AI_8();
  17448.  
  17449.         m68ki_write_8(ea, res);
  17450.  
  17451.         FLAG_N = NFLAG_8(res);
  17452.         FLAG_Z = res;
  17453.         FLAG_V = VFLAG_CLEAR;
  17454.         FLAG_C = CFLAG_CLEAR;
  17455. }
  17456.  
  17457.  
  17458. void m68k_op_move_8_ai_pd(void)
  17459. {
  17460.         uint res = OPER_AY_PD_8();
  17461.         uint ea = EA_AX_AI_8();
  17462.  
  17463.         m68ki_write_8(ea, res);
  17464.  
  17465.         FLAG_N = NFLAG_8(res);
  17466.         FLAG_Z = res;
  17467.         FLAG_V = VFLAG_CLEAR;
  17468.         FLAG_C = CFLAG_CLEAR;
  17469. }
  17470.  
  17471.  
  17472. void m68k_op_move_8_ai_pd7(void)
  17473. {
  17474.         uint res = OPER_A7_PD_8();
  17475.         uint ea = EA_AX_AI_8();
  17476.  
  17477.         m68ki_write_8(ea, res);
  17478.  
  17479.         FLAG_N = NFLAG_8(res);
  17480.         FLAG_Z = res;
  17481.         FLAG_V = VFLAG_CLEAR;
  17482.         FLAG_C = CFLAG_CLEAR;
  17483. }
  17484.  
  17485.  
  17486. void m68k_op_move_8_ai_di(void)
  17487. {
  17488.         uint res = OPER_AY_DI_8();
  17489.         uint ea = EA_AX_AI_8();
  17490.  
  17491.         m68ki_write_8(ea, res);
  17492.  
  17493.         FLAG_N = NFLAG_8(res);
  17494.         FLAG_Z = res;
  17495.         FLAG_V = VFLAG_CLEAR;
  17496.         FLAG_C = CFLAG_CLEAR;
  17497. }
  17498.  
  17499.  
  17500. void m68k_op_move_8_ai_ix(void)
  17501. {
  17502.         uint res = OPER_AY_IX_8();
  17503.         uint ea = EA_AX_AI_8();
  17504.  
  17505.         m68ki_write_8(ea, res);
  17506.  
  17507.         FLAG_N = NFLAG_8(res);
  17508.         FLAG_Z = res;
  17509.         FLAG_V = VFLAG_CLEAR;
  17510.         FLAG_C = CFLAG_CLEAR;
  17511. }
  17512.  
  17513.  
  17514. void m68k_op_move_8_ai_aw(void)
  17515. {
  17516.         uint res = OPER_AW_8();
  17517.         uint ea = EA_AX_AI_8();
  17518.  
  17519.         m68ki_write_8(ea, res);
  17520.  
  17521.         FLAG_N = NFLAG_8(res);
  17522.         FLAG_Z = res;
  17523.         FLAG_V = VFLAG_CLEAR;
  17524.         FLAG_C = CFLAG_CLEAR;
  17525. }
  17526.  
  17527.  
  17528. void m68k_op_move_8_ai_al(void)
  17529. {
  17530.         uint res = OPER_AL_8();
  17531.         uint ea = EA_AX_AI_8();
  17532.  
  17533.         m68ki_write_8(ea, res);
  17534.  
  17535.         FLAG_N = NFLAG_8(res);
  17536.         FLAG_Z = res;
  17537.         FLAG_V = VFLAG_CLEAR;
  17538.         FLAG_C = CFLAG_CLEAR;
  17539. }
  17540.  
  17541.  
  17542. void m68k_op_move_8_ai_pcdi(void)
  17543. {
  17544.         uint res = OPER_PCDI_8();
  17545.         uint ea = EA_AX_AI_8();
  17546.  
  17547.         m68ki_write_8(ea, res);
  17548.  
  17549.         FLAG_N = NFLAG_8(res);
  17550.         FLAG_Z = res;
  17551.         FLAG_V = VFLAG_CLEAR;
  17552.         FLAG_C = CFLAG_CLEAR;
  17553. }
  17554.  
  17555.  
  17556. void m68k_op_move_8_ai_pcix(void)
  17557. {
  17558.         uint res = OPER_PCIX_8();
  17559.         uint ea = EA_AX_AI_8();
  17560.  
  17561.         m68ki_write_8(ea, res);
  17562.  
  17563.         FLAG_N = NFLAG_8(res);
  17564.         FLAG_Z = res;
  17565.         FLAG_V = VFLAG_CLEAR;
  17566.         FLAG_C = CFLAG_CLEAR;
  17567. }
  17568.  
  17569.  
  17570. void m68k_op_move_8_ai_i(void)
  17571. {
  17572.         uint res = OPER_I_8();
  17573.         uint ea = EA_AX_AI_8();
  17574.  
  17575.         m68ki_write_8(ea, res);
  17576.  
  17577.         FLAG_N = NFLAG_8(res);
  17578.         FLAG_Z = res;
  17579.         FLAG_V = VFLAG_CLEAR;
  17580.         FLAG_C = CFLAG_CLEAR;
  17581. }
  17582.  
  17583.  
  17584. void m68k_op_move_8_pi7_d(void)
  17585. {
  17586.         uint res = MASK_OUT_ABOVE_8(DY);
  17587.         uint ea = EA_A7_PI_8();
  17588.  
  17589.         m68ki_write_8(ea, res);
  17590.  
  17591.         FLAG_N = NFLAG_8(res);
  17592.         FLAG_Z = res;
  17593.         FLAG_V = VFLAG_CLEAR;
  17594.         FLAG_C = CFLAG_CLEAR;
  17595. }
  17596.  
  17597.  
  17598. void m68k_op_move_8_pi_d(void)
  17599. {
  17600.         uint res = MASK_OUT_ABOVE_8(DY);
  17601.         uint ea = EA_AX_PI_8();
  17602.  
  17603.         m68ki_write_8(ea, res);
  17604.  
  17605.         FLAG_N = NFLAG_8(res);
  17606.         FLAG_Z = res;
  17607.         FLAG_V = VFLAG_CLEAR;
  17608.         FLAG_C = CFLAG_CLEAR;
  17609. }
  17610.  
  17611.  
  17612. void m68k_op_move_8_pi7_ai(void)
  17613. {
  17614.         uint res = OPER_AY_AI_8();
  17615.         uint ea = EA_A7_PI_8();
  17616.  
  17617.         m68ki_write_8(ea, res);
  17618.  
  17619.         FLAG_N = NFLAG_8(res);
  17620.         FLAG_Z = res;
  17621.         FLAG_V = VFLAG_CLEAR;
  17622.         FLAG_C = CFLAG_CLEAR;
  17623. }
  17624.  
  17625.  
  17626. void m68k_op_move_8_pi7_pi(void)
  17627. {
  17628.         uint res = OPER_AY_PI_8();
  17629.         uint ea = EA_A7_PI_8();
  17630.  
  17631.         m68ki_write_8(ea, res);
  17632.  
  17633.         FLAG_N = NFLAG_8(res);
  17634.         FLAG_Z = res;
  17635.         FLAG_V = VFLAG_CLEAR;
  17636.         FLAG_C = CFLAG_CLEAR;
  17637. }
  17638.  
  17639.  
  17640. void m68k_op_move_8_pi7_pi7(void)
  17641. {
  17642.         uint res = OPER_A7_PI_8();
  17643.         uint ea = EA_A7_PI_8();
  17644.  
  17645.         m68ki_write_8(ea, res);
  17646.  
  17647.         FLAG_N = NFLAG_8(res);
  17648.         FLAG_Z = res;
  17649.         FLAG_V = VFLAG_CLEAR;
  17650.         FLAG_C = CFLAG_CLEAR;
  17651. }
  17652.  
  17653.  
  17654. void m68k_op_move_8_pi7_pd(void)
  17655. {
  17656.         uint res = OPER_AY_PD_8();
  17657.         uint ea = EA_A7_PI_8();
  17658.  
  17659.         m68ki_write_8(ea, res);
  17660.  
  17661.         FLAG_N = NFLAG_8(res);
  17662.         FLAG_Z = res;
  17663.         FLAG_V = VFLAG_CLEAR;
  17664.         FLAG_C = CFLAG_CLEAR;
  17665. }
  17666.  
  17667.  
  17668. void m68k_op_move_8_pi7_pd7(void)
  17669. {
  17670.         uint res = OPER_A7_PD_8();
  17671.         uint ea = EA_A7_PI_8();
  17672.  
  17673.         m68ki_write_8(ea, res);
  17674.  
  17675.         FLAG_N = NFLAG_8(res);
  17676.         FLAG_Z = res;
  17677.         FLAG_V = VFLAG_CLEAR;
  17678.         FLAG_C = CFLAG_CLEAR;
  17679. }
  17680.  
  17681.  
  17682. void m68k_op_move_8_pi7_di(void)
  17683. {
  17684.         uint res = OPER_AY_DI_8();
  17685.         uint ea = EA_A7_PI_8();
  17686.  
  17687.         m68ki_write_8(ea, res);
  17688.  
  17689.         FLAG_N = NFLAG_8(res);
  17690.         FLAG_Z = res;
  17691.         FLAG_V = VFLAG_CLEAR;
  17692.         FLAG_C = CFLAG_CLEAR;
  17693. }
  17694.  
  17695.  
  17696. void m68k_op_move_8_pi7_ix(void)
  17697. {
  17698.         uint res = OPER_AY_IX_8();
  17699.         uint ea = EA_A7_PI_8();
  17700.  
  17701.         m68ki_write_8(ea, res);
  17702.  
  17703.         FLAG_N = NFLAG_8(res);
  17704.         FLAG_Z = res;
  17705.         FLAG_V = VFLAG_CLEAR;
  17706.         FLAG_C = CFLAG_CLEAR;
  17707. }
  17708.  
  17709.  
  17710. void m68k_op_move_8_pi7_aw(void)
  17711. {
  17712.         uint res = OPER_AW_8();
  17713.         uint ea = EA_A7_PI_8();
  17714.  
  17715.         m68ki_write_8(ea, res);
  17716.  
  17717.         FLAG_N = NFLAG_8(res);
  17718.         FLAG_Z = res;
  17719.         FLAG_V = VFLAG_CLEAR;
  17720.         FLAG_C = CFLAG_CLEAR;
  17721. }
  17722.  
  17723.  
  17724. void m68k_op_move_8_pi7_al(void)
  17725. {
  17726.         uint res = OPER_AL_8();
  17727.         uint ea = EA_A7_PI_8();
  17728.  
  17729.         m68ki_write_8(ea, res);
  17730.  
  17731.         FLAG_N = NFLAG_8(res);
  17732.         FLAG_Z = res;
  17733.         FLAG_V = VFLAG_CLEAR;
  17734.         FLAG_C = CFLAG_CLEAR;
  17735. }
  17736.  
  17737.  
  17738. void m68k_op_move_8_pi7_pcdi(void)
  17739. {
  17740.         uint res = OPER_PCDI_8();
  17741.         uint ea = EA_A7_PI_8();
  17742.  
  17743.         m68ki_write_8(ea, res);
  17744.  
  17745.         FLAG_N = NFLAG_8(res);
  17746.         FLAG_Z = res;
  17747.         FLAG_V = VFLAG_CLEAR;
  17748.         FLAG_C = CFLAG_CLEAR;
  17749. }
  17750.  
  17751.  
  17752. void m68k_op_move_8_pi7_pcix(void)
  17753. {
  17754.         uint res = OPER_PCIX_8();
  17755.         uint ea = EA_A7_PI_8();
  17756.  
  17757.         m68ki_write_8(ea, res);
  17758.  
  17759.         FLAG_N = NFLAG_8(res);
  17760.         FLAG_Z = res;
  17761.         FLAG_V = VFLAG_CLEAR;
  17762.         FLAG_C = CFLAG_CLEAR;
  17763. }
  17764.  
  17765.  
  17766. void m68k_op_move_8_pi7_i(void)
  17767. {
  17768.         uint res = OPER_I_8();
  17769.         uint ea = EA_A7_PI_8();
  17770.  
  17771.         m68ki_write_8(ea, res);
  17772.  
  17773.         FLAG_N = NFLAG_8(res);
  17774.         FLAG_Z = res;
  17775.         FLAG_V = VFLAG_CLEAR;
  17776.         FLAG_C = CFLAG_CLEAR;
  17777. }
  17778.  
  17779.  
  17780. void m68k_op_move_8_pi_ai(void)
  17781. {
  17782.         uint res = OPER_AY_AI_8();
  17783.         uint ea = EA_AX_PI_8();
  17784.  
  17785.         m68ki_write_8(ea, res);
  17786.  
  17787.         FLAG_N = NFLAG_8(res);
  17788.         FLAG_Z = res;
  17789.         FLAG_V = VFLAG_CLEAR;
  17790.         FLAG_C = CFLAG_CLEAR;
  17791. }
  17792.  
  17793.  
  17794. void m68k_op_move_8_pi_pi(void)
  17795. {
  17796.         uint res = OPER_AY_PI_8();
  17797.         uint ea = EA_AX_PI_8();
  17798.  
  17799.         m68ki_write_8(ea, res);
  17800.  
  17801.         FLAG_N = NFLAG_8(res);
  17802.         FLAG_Z = res;
  17803.         FLAG_V = VFLAG_CLEAR;
  17804.         FLAG_C = CFLAG_CLEAR;
  17805. }
  17806.  
  17807.  
  17808. void m68k_op_move_8_pi_pi7(void)
  17809. {
  17810.         uint res = OPER_A7_PI_8();
  17811.         uint ea = EA_AX_PI_8();
  17812.  
  17813.         m68ki_write_8(ea, res);
  17814.  
  17815.         FLAG_N = NFLAG_8(res);
  17816.         FLAG_Z = res;
  17817.         FLAG_V = VFLAG_CLEAR;
  17818.         FLAG_C = CFLAG_CLEAR;
  17819. }
  17820.  
  17821.  
  17822. void m68k_op_move_8_pi_pd(void)
  17823. {
  17824.         uint res = OPER_AY_PD_8();
  17825.         uint ea = EA_AX_PI_8();
  17826.  
  17827.         m68ki_write_8(ea, res);
  17828.  
  17829.         FLAG_N = NFLAG_8(res);
  17830.         FLAG_Z = res;
  17831.         FLAG_V = VFLAG_CLEAR;
  17832.         FLAG_C = CFLAG_CLEAR;
  17833. }
  17834.  
  17835.  
  17836. void m68k_op_move_8_pi_pd7(void)
  17837. {
  17838.         uint res = OPER_A7_PD_8();
  17839.         uint ea = EA_AX_PI_8();
  17840.  
  17841.         m68ki_write_8(ea, res);
  17842.  
  17843.         FLAG_N = NFLAG_8(res);
  17844.         FLAG_Z = res;
  17845.         FLAG_V = VFLAG_CLEAR;
  17846.         FLAG_C = CFLAG_CLEAR;
  17847. }
  17848.  
  17849.  
  17850. void m68k_op_move_8_pi_di(void)
  17851. {
  17852.         uint res = OPER_AY_DI_8();
  17853.         uint ea = EA_AX_PI_8();
  17854.  
  17855.         m68ki_write_8(ea, res);
  17856.  
  17857.         FLAG_N = NFLAG_8(res);
  17858.         FLAG_Z = res;
  17859.         FLAG_V = VFLAG_CLEAR;
  17860.         FLAG_C = CFLAG_CLEAR;
  17861. }
  17862.  
  17863.  
  17864. void m68k_op_move_8_pi_ix(void)
  17865. {
  17866.         uint res = OPER_AY_IX_8();
  17867.         uint ea = EA_AX_PI_8();
  17868.  
  17869.         m68ki_write_8(ea, res);
  17870.  
  17871.         FLAG_N = NFLAG_8(res);
  17872.         FLAG_Z = res;
  17873.         FLAG_V = VFLAG_CLEAR;
  17874.         FLAG_C = CFLAG_CLEAR;
  17875. }
  17876.  
  17877.  
  17878. void m68k_op_move_8_pi_aw(void)
  17879. {
  17880.         uint res = OPER_AW_8();
  17881.         uint ea = EA_AX_PI_8();
  17882.  
  17883.         m68ki_write_8(ea, res);
  17884.  
  17885.         FLAG_N = NFLAG_8(res);
  17886.         FLAG_Z = res;
  17887.         FLAG_V = VFLAG_CLEAR;
  17888.         FLAG_C = CFLAG_CLEAR;
  17889. }
  17890.  
  17891.  
  17892. void m68k_op_move_8_pi_al(void)
  17893. {
  17894.         uint res = OPER_AL_8();
  17895.         uint ea = EA_AX_PI_8();
  17896.  
  17897.         m68ki_write_8(ea, res);
  17898.  
  17899.         FLAG_N = NFLAG_8(res);
  17900.         FLAG_Z = res;
  17901.         FLAG_V = VFLAG_CLEAR;
  17902.         FLAG_C = CFLAG_CLEAR;
  17903. }
  17904.  
  17905.  
  17906. void m68k_op_move_8_pi_pcdi(void)
  17907. {
  17908.         uint res = OPER_PCDI_8();
  17909.         uint ea = EA_AX_PI_8();
  17910.  
  17911.         m68ki_write_8(ea, res);
  17912.  
  17913.         FLAG_N = NFLAG_8(res);
  17914.         FLAG_Z = res;
  17915.         FLAG_V = VFLAG_CLEAR;
  17916.         FLAG_C = CFLAG_CLEAR;
  17917. }
  17918.  
  17919.  
  17920. void m68k_op_move_8_pi_pcix(void)
  17921. {
  17922.         uint res = OPER_PCIX_8();
  17923.         uint ea = EA_AX_PI_8();
  17924.  
  17925.         m68ki_write_8(ea, res);
  17926.  
  17927.         FLAG_N = NFLAG_8(res);
  17928.         FLAG_Z = res;
  17929.         FLAG_V = VFLAG_CLEAR;
  17930.         FLAG_C = CFLAG_CLEAR;
  17931. }
  17932.  
  17933.  
  17934. void m68k_op_move_8_pi_i(void)
  17935. {
  17936.         uint res = OPER_I_8();
  17937.         uint ea = EA_AX_PI_8();
  17938.  
  17939.         m68ki_write_8(ea, res);
  17940.  
  17941.         FLAG_N = NFLAG_8(res);
  17942.         FLAG_Z = res;
  17943.         FLAG_V = VFLAG_CLEAR;
  17944.         FLAG_C = CFLAG_CLEAR;
  17945. }
  17946.  
  17947.  
  17948. void m68k_op_move_8_pd7_d(void)
  17949. {
  17950.         uint res = MASK_OUT_ABOVE_8(DY);
  17951.         uint ea = EA_A7_PD_8();
  17952.  
  17953.         m68ki_write_8(ea, res);
  17954.  
  17955.         FLAG_N = NFLAG_8(res);
  17956.         FLAG_Z = res;
  17957.         FLAG_V = VFLAG_CLEAR;
  17958.         FLAG_C = CFLAG_CLEAR;
  17959. }
  17960.  
  17961.  
  17962. void m68k_op_move_8_pd_d(void)
  17963. {
  17964.         uint res = MASK_OUT_ABOVE_8(DY);
  17965.         uint ea = EA_AX_PD_8();
  17966.  
  17967.         m68ki_write_8(ea, res);
  17968.  
  17969.         FLAG_N = NFLAG_8(res);
  17970.         FLAG_Z = res;
  17971.         FLAG_V = VFLAG_CLEAR;
  17972.         FLAG_C = CFLAG_CLEAR;
  17973. }
  17974.  
  17975.  
  17976. void m68k_op_move_8_pd7_ai(void)
  17977. {
  17978.         uint res = OPER_AY_AI_8();
  17979.         uint ea = EA_A7_PD_8();
  17980.  
  17981.         m68ki_write_8(ea, res);
  17982.  
  17983.         FLAG_N = NFLAG_8(res);
  17984.         FLAG_Z = res;
  17985.         FLAG_V = VFLAG_CLEAR;
  17986.         FLAG_C = CFLAG_CLEAR;
  17987. }
  17988.  
  17989.  
  17990. void m68k_op_move_8_pd7_pi(void)
  17991. {
  17992.         uint res = OPER_AY_PI_8();
  17993.         uint ea = EA_A7_PD_8();
  17994.  
  17995.         m68ki_write_8(ea, res);
  17996.  
  17997.         FLAG_N = NFLAG_8(res);
  17998.         FLAG_Z = res;
  17999.         FLAG_V = VFLAG_CLEAR;
  18000.         FLAG_C = CFLAG_CLEAR;
  18001. }
  18002.  
  18003.  
  18004. void m68k_op_move_8_pd7_pi7(void)
  18005. {
  18006.         uint res = OPER_A7_PI_8();
  18007.         uint ea = EA_A7_PD_8();
  18008.  
  18009.         m68ki_write_8(ea, res);
  18010.  
  18011.         FLAG_N = NFLAG_8(res);
  18012.         FLAG_Z = res;
  18013.         FLAG_V = VFLAG_CLEAR;
  18014.         FLAG_C = CFLAG_CLEAR;
  18015. }
  18016.  
  18017.  
  18018. void m68k_op_move_8_pd7_pd(void)
  18019. {
  18020.         uint res = OPER_AY_PD_8();
  18021.         uint ea = EA_A7_PD_8();
  18022.  
  18023.         m68ki_write_8(ea, res);
  18024.  
  18025.         FLAG_N = NFLAG_8(res);
  18026.         FLAG_Z = res;
  18027.         FLAG_V = VFLAG_CLEAR;
  18028.         FLAG_C = CFLAG_CLEAR;
  18029. }
  18030.  
  18031.  
  18032. void m68k_op_move_8_pd7_pd7(void)
  18033. {
  18034.         uint res = OPER_A7_PD_8();
  18035.         uint ea = EA_A7_PD_8();
  18036.  
  18037.         m68ki_write_8(ea, res);
  18038.  
  18039.         FLAG_N = NFLAG_8(res);
  18040.         FLAG_Z = res;
  18041.         FLAG_V = VFLAG_CLEAR;
  18042.         FLAG_C = CFLAG_CLEAR;
  18043. }
  18044.  
  18045.  
  18046. void m68k_op_move_8_pd7_di(void)
  18047. {
  18048.         uint res = OPER_AY_DI_8();
  18049.         uint ea = EA_A7_PD_8();
  18050.  
  18051.         m68ki_write_8(ea, res);
  18052.  
  18053.         FLAG_N = NFLAG_8(res);
  18054.         FLAG_Z = res;
  18055.         FLAG_V = VFLAG_CLEAR;
  18056.         FLAG_C = CFLAG_CLEAR;
  18057. }
  18058.  
  18059.  
  18060. void m68k_op_move_8_pd7_ix(void)
  18061. {
  18062.         uint res = OPER_AY_IX_8();
  18063.         uint ea = EA_A7_PD_8();
  18064.  
  18065.         m68ki_write_8(ea, res);
  18066.  
  18067.         FLAG_N = NFLAG_8(res);
  18068.         FLAG_Z = res;
  18069.         FLAG_V = VFLAG_CLEAR;
  18070.         FLAG_C = CFLAG_CLEAR;
  18071. }
  18072.  
  18073.  
  18074. void m68k_op_move_8_pd7_aw(void)
  18075. {
  18076.         uint res = OPER_AW_8();
  18077.         uint ea = EA_A7_PD_8();
  18078.  
  18079.         m68ki_write_8(ea, res);
  18080.  
  18081.         FLAG_N = NFLAG_8(res);
  18082.         FLAG_Z = res;
  18083.         FLAG_V = VFLAG_CLEAR;
  18084.         FLAG_C = CFLAG_CLEAR;
  18085. }
  18086.  
  18087.  
  18088. void m68k_op_move_8_pd7_al(void)
  18089. {
  18090.         uint res = OPER_AL_8();
  18091.         uint ea = EA_A7_PD_8();
  18092.  
  18093.         m68ki_write_8(ea, res);
  18094.  
  18095.         FLAG_N = NFLAG_8(res);
  18096.         FLAG_Z = res;
  18097.         FLAG_V = VFLAG_CLEAR;
  18098.         FLAG_C = CFLAG_CLEAR;
  18099. }
  18100.  
  18101.  
  18102. void m68k_op_move_8_pd7_pcdi(void)
  18103. {
  18104.         uint res = OPER_PCDI_8();
  18105.         uint ea = EA_A7_PD_8();
  18106.  
  18107.         m68ki_write_8(ea, res);
  18108.  
  18109.         FLAG_N = NFLAG_8(res);
  18110.         FLAG_Z = res;
  18111.         FLAG_V = VFLAG_CLEAR;
  18112.         FLAG_C = CFLAG_CLEAR;
  18113. }
  18114.  
  18115.  
  18116. void m68k_op_move_8_pd7_pcix(void)
  18117. {
  18118.         uint res = OPER_PCIX_8();
  18119.         uint ea = EA_A7_PD_8();
  18120.  
  18121.         m68ki_write_8(ea, res);
  18122.  
  18123.         FLAG_N = NFLAG_8(res);
  18124.         FLAG_Z = res;
  18125.         FLAG_V = VFLAG_CLEAR;
  18126.         FLAG_C = CFLAG_CLEAR;
  18127. }
  18128.  
  18129.  
  18130. void m68k_op_move_8_pd7_i(void)
  18131. {
  18132.         uint res = OPER_I_8();
  18133.         uint ea = EA_A7_PD_8();
  18134.  
  18135.         m68ki_write_8(ea, res);
  18136.  
  18137.         FLAG_N = NFLAG_8(res);
  18138.         FLAG_Z = res;
  18139.         FLAG_V = VFLAG_CLEAR;
  18140.         FLAG_C = CFLAG_CLEAR;
  18141. }
  18142.  
  18143.  
  18144. void m68k_op_move_8_pd_ai(void)
  18145. {
  18146.         uint res = OPER_AY_AI_8();
  18147.         uint ea = EA_AX_PD_8();
  18148.  
  18149.         m68ki_write_8(ea, res);
  18150.  
  18151.         FLAG_N = NFLAG_8(res);
  18152.         FLAG_Z = res;
  18153.         FLAG_V = VFLAG_CLEAR;
  18154.         FLAG_C = CFLAG_CLEAR;
  18155. }
  18156.  
  18157.  
  18158. void m68k_op_move_8_pd_pi(void)
  18159. {
  18160.         uint res = OPER_AY_PI_8();
  18161.         uint ea = EA_AX_PD_8();
  18162.  
  18163.         m68ki_write_8(ea, res);
  18164.  
  18165.         FLAG_N = NFLAG_8(res);
  18166.         FLAG_Z = res;
  18167.         FLAG_V = VFLAG_CLEAR;
  18168.         FLAG_C = CFLAG_CLEAR;
  18169. }
  18170.  
  18171.  
  18172. void m68k_op_move_8_pd_pi7(void)
  18173. {
  18174.         uint res = OPER_A7_PI_8();
  18175.         uint ea = EA_AX_PD_8();
  18176.  
  18177.         m68ki_write_8(ea, res);
  18178.  
  18179.         FLAG_N = NFLAG_8(res);
  18180.         FLAG_Z = res;
  18181.         FLAG_V = VFLAG_CLEAR;
  18182.         FLAG_C = CFLAG_CLEAR;
  18183. }
  18184.  
  18185.  
  18186. void m68k_op_move_8_pd_pd(void)
  18187. {
  18188.         uint res = OPER_AY_PD_8();
  18189.         uint ea = EA_AX_PD_8();
  18190.  
  18191.         m68ki_write_8(ea, res);
  18192.  
  18193.         FLAG_N = NFLAG_8(res);
  18194.         FLAG_Z = res;
  18195.         FLAG_V = VFLAG_CLEAR;
  18196.         FLAG_C = CFLAG_CLEAR;
  18197. }
  18198.  
  18199.  
  18200. void m68k_op_move_8_pd_pd7(void)
  18201. {
  18202.         uint res = OPER_A7_PD_8();
  18203.         uint ea = EA_AX_PD_8();
  18204.  
  18205.         m68ki_write_8(ea, res);
  18206.  
  18207.         FLAG_N = NFLAG_8(res);
  18208.         FLAG_Z = res;
  18209.         FLAG_V = VFLAG_CLEAR;
  18210.         FLAG_C = CFLAG_CLEAR;
  18211. }
  18212.  
  18213.  
  18214. void m68k_op_move_8_pd_di(void)
  18215. {
  18216.         uint res = OPER_AY_DI_8();
  18217.         uint ea = EA_AX_PD_8();
  18218.  
  18219.         m68ki_write_8(ea, res);
  18220.  
  18221.         FLAG_N = NFLAG_8(res);
  18222.         FLAG_Z = res;
  18223.         FLAG_V = VFLAG_CLEAR;
  18224.         FLAG_C = CFLAG_CLEAR;
  18225. }
  18226.  
  18227.  
  18228. void m68k_op_move_8_pd_ix(void)
  18229. {
  18230.         uint res = OPER_AY_IX_8();
  18231.         uint ea = EA_AX_PD_8();
  18232.  
  18233.         m68ki_write_8(ea, res);
  18234.  
  18235.         FLAG_N = NFLAG_8(res);
  18236.         FLAG_Z = res;
  18237.         FLAG_V = VFLAG_CLEAR;
  18238.         FLAG_C = CFLAG_CLEAR;
  18239. }
  18240.  
  18241.  
  18242. void m68k_op_move_8_pd_aw(void)
  18243. {
  18244.         uint res = OPER_AW_8();
  18245.         uint ea = EA_AX_PD_8();
  18246.  
  18247.         m68ki_write_8(ea, res);
  18248.  
  18249.         FLAG_N = NFLAG_8(res);
  18250.         FLAG_Z = res;
  18251.         FLAG_V = VFLAG_CLEAR;
  18252.         FLAG_C = CFLAG_CLEAR;
  18253. }
  18254.  
  18255.  
  18256. void m68k_op_move_8_pd_al(void)
  18257. {
  18258.         uint res = OPER_AL_8();
  18259.         uint ea = EA_AX_PD_8();
  18260.  
  18261.         m68ki_write_8(ea, res);
  18262.  
  18263.         FLAG_N = NFLAG_8(res);
  18264.         FLAG_Z = res;
  18265.         FLAG_V = VFLAG_CLEAR;
  18266.         FLAG_C = CFLAG_CLEAR;
  18267. }
  18268.  
  18269.  
  18270. void m68k_op_move_8_pd_pcdi(void)
  18271. {
  18272.         uint res = OPER_PCDI_8();
  18273.         uint ea = EA_AX_PD_8();
  18274.  
  18275.         m68ki_write_8(ea, res);
  18276.  
  18277.         FLAG_N = NFLAG_8(res);
  18278.         FLAG_Z = res;
  18279.         FLAG_V = VFLAG_CLEAR;
  18280.         FLAG_C = CFLAG_CLEAR;
  18281. }
  18282.  
  18283.  
  18284. void m68k_op_move_8_pd_pcix(void)
  18285. {
  18286.         uint res = OPER_PCIX_8();
  18287.         uint ea = EA_AX_PD_8();
  18288.  
  18289.         m68ki_write_8(ea, res);
  18290.  
  18291.         FLAG_N = NFLAG_8(res);
  18292.         FLAG_Z = res;
  18293.         FLAG_V = VFLAG_CLEAR;
  18294.         FLAG_C = CFLAG_CLEAR;
  18295. }
  18296.  
  18297.  
  18298. void m68k_op_move_8_pd_i(void)
  18299. {
  18300.         uint res = OPER_I_8();
  18301.         uint ea = EA_AX_PD_8();
  18302.  
  18303.         m68ki_write_8(ea, res);
  18304.  
  18305.         FLAG_N = NFLAG_8(res);
  18306.         FLAG_Z = res;
  18307.         FLAG_V = VFLAG_CLEAR;
  18308.         FLAG_C = CFLAG_CLEAR;
  18309. }
  18310.  
  18311.  
  18312. void m68k_op_move_8_di_d(void)
  18313. {
  18314.         uint res = MASK_OUT_ABOVE_8(DY);
  18315.         uint ea = EA_AX_DI_8();
  18316.  
  18317.         m68ki_write_8(ea, res);
  18318.  
  18319.         FLAG_N = NFLAG_8(res);
  18320.         FLAG_Z = res;
  18321.         FLAG_V = VFLAG_CLEAR;
  18322.         FLAG_C = CFLAG_CLEAR;
  18323. }
  18324.  
  18325.  
  18326. void m68k_op_move_8_di_ai(void)
  18327. {
  18328.         uint res = OPER_AY_AI_8();
  18329.         uint ea = EA_AX_DI_8();
  18330.  
  18331.         m68ki_write_8(ea, res);
  18332.  
  18333.         FLAG_N = NFLAG_8(res);
  18334.         FLAG_Z = res;
  18335.         FLAG_V = VFLAG_CLEAR;
  18336.         FLAG_C = CFLAG_CLEAR;
  18337. }
  18338.  
  18339.  
  18340. void m68k_op_move_8_di_pi(void)
  18341. {
  18342.         uint res = OPER_AY_PI_8();
  18343.         uint ea = EA_AX_DI_8();
  18344.  
  18345.         m68ki_write_8(ea, res);
  18346.  
  18347.         FLAG_N = NFLAG_8(res);
  18348.         FLAG_Z = res;
  18349.         FLAG_V = VFLAG_CLEAR;
  18350.         FLAG_C = CFLAG_CLEAR;
  18351. }
  18352.  
  18353.  
  18354. void m68k_op_move_8_di_pi7(void)
  18355. {
  18356.         uint res = OPER_A7_PI_8();
  18357.         uint ea = EA_AX_DI_8();
  18358.  
  18359.         m68ki_write_8(ea, res);
  18360.  
  18361.         FLAG_N = NFLAG_8(res);
  18362.         FLAG_Z = res;
  18363.         FLAG_V = VFLAG_CLEAR;
  18364.         FLAG_C = CFLAG_CLEAR;
  18365. }
  18366.  
  18367.  
  18368. void m68k_op_move_8_di_pd(void)
  18369. {
  18370.         uint res = OPER_AY_PD_8();
  18371.         uint ea = EA_AX_DI_8();
  18372.  
  18373.         m68ki_write_8(ea, res);
  18374.  
  18375.         FLAG_N = NFLAG_8(res);
  18376.         FLAG_Z = res;
  18377.         FLAG_V = VFLAG_CLEAR;
  18378.         FLAG_C = CFLAG_CLEAR;
  18379. }
  18380.  
  18381.  
  18382. void m68k_op_move_8_di_pd7(void)
  18383. {
  18384.         uint res = OPER_A7_PD_8();
  18385.         uint ea = EA_AX_DI_8();
  18386.  
  18387.         m68ki_write_8(ea, res);
  18388.  
  18389.         FLAG_N = NFLAG_8(res);
  18390.         FLAG_Z = res;
  18391.         FLAG_V = VFLAG_CLEAR;
  18392.         FLAG_C = CFLAG_CLEAR;
  18393. }
  18394.  
  18395.  
  18396. void m68k_op_move_8_di_di(void)
  18397. {
  18398.         uint res = OPER_AY_DI_8();
  18399.         uint ea = EA_AX_DI_8();
  18400.  
  18401.         m68ki_write_8(ea, res);
  18402.  
  18403.         FLAG_N = NFLAG_8(res);
  18404.         FLAG_Z = res;
  18405.         FLAG_V = VFLAG_CLEAR;
  18406.         FLAG_C = CFLAG_CLEAR;
  18407. }
  18408.  
  18409.  
  18410. void m68k_op_move_8_di_ix(void)
  18411. {
  18412.         uint res = OPER_AY_IX_8();
  18413.         uint ea = EA_AX_DI_8();
  18414.  
  18415.         m68ki_write_8(ea, res);
  18416.  
  18417.         FLAG_N = NFLAG_8(res);
  18418.         FLAG_Z = res;
  18419.         FLAG_V = VFLAG_CLEAR;
  18420.         FLAG_C = CFLAG_CLEAR;
  18421. }
  18422.  
  18423.  
  18424. void m68k_op_move_8_di_aw(void)
  18425. {
  18426.         uint res = OPER_AW_8();
  18427.         uint ea = EA_AX_DI_8();
  18428.  
  18429.         m68ki_write_8(ea, res);
  18430.  
  18431.         FLAG_N = NFLAG_8(res);
  18432.         FLAG_Z = res;
  18433.         FLAG_V = VFLAG_CLEAR;
  18434.         FLAG_C = CFLAG_CLEAR;
  18435. }
  18436.  
  18437.  
  18438. void m68k_op_move_8_di_al(void)
  18439. {
  18440.         uint res = OPER_AL_8();
  18441.         uint ea = EA_AX_DI_8();
  18442.  
  18443.         m68ki_write_8(ea, res);
  18444.  
  18445.         FLAG_N = NFLAG_8(res);
  18446.         FLAG_Z = res;
  18447.         FLAG_V = VFLAG_CLEAR;
  18448.         FLAG_C = CFLAG_CLEAR;
  18449. }
  18450.  
  18451.  
  18452. void m68k_op_move_8_di_pcdi(void)
  18453. {
  18454.         uint res = OPER_PCDI_8();
  18455.         uint ea = EA_AX_DI_8();
  18456.  
  18457.         m68ki_write_8(ea, res);
  18458.  
  18459.         FLAG_N = NFLAG_8(res);
  18460.         FLAG_Z = res;
  18461.         FLAG_V = VFLAG_CLEAR;
  18462.         FLAG_C = CFLAG_CLEAR;
  18463. }
  18464.  
  18465.  
  18466. void m68k_op_move_8_di_pcix(void)
  18467. {
  18468.         uint res = OPER_PCIX_8();
  18469.         uint ea = EA_AX_DI_8();
  18470.  
  18471.         m68ki_write_8(ea, res);
  18472.  
  18473.         FLAG_N = NFLAG_8(res);
  18474.         FLAG_Z = res;
  18475.         FLAG_V = VFLAG_CLEAR;
  18476.         FLAG_C = CFLAG_CLEAR;
  18477. }
  18478.  
  18479.  
  18480. void m68k_op_move_8_di_i(void)
  18481. {
  18482.         uint res = OPER_I_8();
  18483.         uint ea = EA_AX_DI_8();
  18484.  
  18485.         m68ki_write_8(ea, res);
  18486.  
  18487.         FLAG_N = NFLAG_8(res);
  18488.         FLAG_Z = res;
  18489.         FLAG_V = VFLAG_CLEAR;
  18490.         FLAG_C = CFLAG_CLEAR;
  18491. }
  18492.  
  18493.  
  18494. void m68k_op_move_8_ix_d(void)
  18495. {
  18496.         uint res = MASK_OUT_ABOVE_8(DY);
  18497.         uint ea = EA_AX_IX_8();
  18498.  
  18499.         m68ki_write_8(ea, res);
  18500.  
  18501.         FLAG_N = NFLAG_8(res);
  18502.         FLAG_Z = res;
  18503.         FLAG_V = VFLAG_CLEAR;
  18504.         FLAG_C = CFLAG_CLEAR;
  18505. }
  18506.  
  18507.  
  18508. void m68k_op_move_8_ix_ai(void)
  18509. {
  18510.         uint res = OPER_AY_AI_8();
  18511.         uint ea = EA_AX_IX_8();
  18512.  
  18513.         m68ki_write_8(ea, res);
  18514.  
  18515.         FLAG_N = NFLAG_8(res);
  18516.         FLAG_Z = res;
  18517.         FLAG_V = VFLAG_CLEAR;
  18518.         FLAG_C = CFLAG_CLEAR;
  18519. }
  18520.  
  18521.  
  18522. void m68k_op_move_8_ix_pi(void)
  18523. {
  18524.         uint res = OPER_AY_PI_8();
  18525.         uint ea = EA_AX_IX_8();
  18526.  
  18527.         m68ki_write_8(ea, res);
  18528.  
  18529.         FLAG_N = NFLAG_8(res);
  18530.         FLAG_Z = res;
  18531.         FLAG_V = VFLAG_CLEAR;
  18532.         FLAG_C = CFLAG_CLEAR;
  18533. }
  18534.  
  18535.  
  18536. void m68k_op_move_8_ix_pi7(void)
  18537. {
  18538.         uint res = OPER_A7_PI_8();
  18539.         uint ea = EA_AX_IX_8();
  18540.  
  18541.         m68ki_write_8(ea, res);
  18542.  
  18543.         FLAG_N = NFLAG_8(res);
  18544.         FLAG_Z = res;
  18545.         FLAG_V = VFLAG_CLEAR;
  18546.         FLAG_C = CFLAG_CLEAR;
  18547. }
  18548.  
  18549.  
  18550. void m68k_op_move_8_ix_pd(void)
  18551. {
  18552.         uint res = OPER_AY_PD_8();
  18553.         uint ea = EA_AX_IX_8();
  18554.  
  18555.         m68ki_write_8(ea, res);
  18556.  
  18557.         FLAG_N = NFLAG_8(res);
  18558.         FLAG_Z = res;
  18559.         FLAG_V = VFLAG_CLEAR;
  18560.         FLAG_C = CFLAG_CLEAR;
  18561. }
  18562.  
  18563.  
  18564. void m68k_op_move_8_ix_pd7(void)
  18565. {
  18566.         uint res = OPER_A7_PD_8();
  18567.         uint ea = EA_AX_IX_8();
  18568.  
  18569.         m68ki_write_8(ea, res);
  18570.  
  18571.         FLAG_N = NFLAG_8(res);
  18572.         FLAG_Z = res;
  18573.         FLAG_V = VFLAG_CLEAR;
  18574.         FLAG_C = CFLAG_CLEAR;
  18575. }
  18576.  
  18577.  
  18578. void m68k_op_move_8_ix_di(void)
  18579. {
  18580.         uint res = OPER_AY_DI_8();
  18581.         uint ea = EA_AX_IX_8();
  18582.  
  18583.         m68ki_write_8(ea, res);
  18584.  
  18585.         FLAG_N = NFLAG_8(res);
  18586.         FLAG_Z = res;
  18587.         FLAG_V = VFLAG_CLEAR;
  18588.         FLAG_C = CFLAG_CLEAR;
  18589. }
  18590.  
  18591.  
  18592. void m68k_op_move_8_ix_ix(void)
  18593. {
  18594.         uint res = OPER_AY_IX_8();
  18595.         uint ea = EA_AX_IX_8();
  18596.  
  18597.         m68ki_write_8(ea, res);
  18598.  
  18599.         FLAG_N = NFLAG_8(res);
  18600.         FLAG_Z = res;
  18601.         FLAG_V = VFLAG_CLEAR;
  18602.         FLAG_C = CFLAG_CLEAR;
  18603. }
  18604.  
  18605.  
  18606. void m68k_op_move_8_ix_aw(void)
  18607. {
  18608.         uint res = OPER_AW_8();
  18609.         uint ea = EA_AX_IX_8();
  18610.  
  18611.         m68ki_write_8(ea, res);
  18612.  
  18613.         FLAG_N = NFLAG_8(res);
  18614.         FLAG_Z = res;
  18615.         FLAG_V = VFLAG_CLEAR;
  18616.         FLAG_C = CFLAG_CLEAR;
  18617. }
  18618.  
  18619.  
  18620. void m68k_op_move_8_ix_al(void)
  18621. {
  18622.         uint res = OPER_AL_8();
  18623.         uint ea = EA_AX_IX_8();
  18624.  
  18625.         m68ki_write_8(ea, res);
  18626.  
  18627.         FLAG_N = NFLAG_8(res);
  18628.         FLAG_Z = res;
  18629.         FLAG_V = VFLAG_CLEAR;
  18630.         FLAG_C = CFLAG_CLEAR;
  18631. }
  18632.  
  18633.  
  18634. void m68k_op_move_8_ix_pcdi(void)
  18635. {
  18636.         uint res = OPER_PCDI_8();
  18637.         uint ea = EA_AX_IX_8();
  18638.  
  18639.         m68ki_write_8(ea, res);
  18640.  
  18641.         FLAG_N = NFLAG_8(res);
  18642.         FLAG_Z = res;
  18643.         FLAG_V = VFLAG_CLEAR;
  18644.         FLAG_C = CFLAG_CLEAR;
  18645. }
  18646.  
  18647.  
  18648. void m68k_op_move_8_ix_pcix(void)
  18649. {
  18650.         uint res = OPER_PCIX_8();
  18651.         uint ea = EA_AX_IX_8();
  18652.  
  18653.         m68ki_write_8(ea, res);
  18654.  
  18655.         FLAG_N = NFLAG_8(res);
  18656.         FLAG_Z = res;
  18657.         FLAG_V = VFLAG_CLEAR;
  18658.         FLAG_C = CFLAG_CLEAR;
  18659. }
  18660.  
  18661.  
  18662. void m68k_op_move_8_ix_i(void)
  18663. {
  18664.         uint res = OPER_I_8();
  18665.         uint ea = EA_AX_IX_8();
  18666.  
  18667.         m68ki_write_8(ea, res);
  18668.  
  18669.         FLAG_N = NFLAG_8(res);
  18670.         FLAG_Z = res;
  18671.         FLAG_V = VFLAG_CLEAR;
  18672.         FLAG_C = CFLAG_CLEAR;
  18673. }
  18674.  
  18675.  
  18676. void m68k_op_move_8_aw_d(void)
  18677. {
  18678.         uint res = MASK_OUT_ABOVE_8(DY);
  18679.         uint ea = EA_AW_8();
  18680.  
  18681.         m68ki_write_8(ea, res);
  18682.  
  18683.         FLAG_N = NFLAG_8(res);
  18684.         FLAG_Z = res;
  18685.         FLAG_V = VFLAG_CLEAR;
  18686.         FLAG_C = CFLAG_CLEAR;
  18687. }
  18688.  
  18689.  
  18690. void m68k_op_move_8_aw_ai(void)
  18691. {
  18692.         uint res = OPER_AY_AI_8();
  18693.         uint ea = EA_AW_8();
  18694.  
  18695.         m68ki_write_8(ea, res);
  18696.  
  18697.         FLAG_N = NFLAG_8(res);
  18698.         FLAG_Z = res;
  18699.         FLAG_V = VFLAG_CLEAR;
  18700.         FLAG_C = CFLAG_CLEAR;
  18701. }
  18702.  
  18703.  
  18704. void m68k_op_move_8_aw_pi(void)
  18705. {
  18706.         uint res = OPER_AY_PI_8();
  18707.         uint ea = EA_AW_8();
  18708.  
  18709.         m68ki_write_8(ea, res);
  18710.  
  18711.         FLAG_N = NFLAG_8(res);
  18712.         FLAG_Z = res;
  18713.         FLAG_V = VFLAG_CLEAR;
  18714.         FLAG_C = CFLAG_CLEAR;
  18715. }
  18716.  
  18717.  
  18718. void m68k_op_move_8_aw_pi7(void)
  18719. {
  18720.         uint res = OPER_A7_PI_8();
  18721.         uint ea = EA_AW_8();
  18722.  
  18723.         m68ki_write_8(ea, res);
  18724.  
  18725.         FLAG_N = NFLAG_8(res);
  18726.         FLAG_Z = res;
  18727.         FLAG_V = VFLAG_CLEAR;
  18728.         FLAG_C = CFLAG_CLEAR;
  18729. }
  18730.  
  18731.  
  18732. void m68k_op_move_8_aw_pd(void)
  18733. {
  18734.         uint res = OPER_AY_PD_8();
  18735.         uint ea = EA_AW_8();
  18736.  
  18737.         m68ki_write_8(ea, res);
  18738.  
  18739.         FLAG_N = NFLAG_8(res);
  18740.         FLAG_Z = res;
  18741.         FLAG_V = VFLAG_CLEAR;
  18742.         FLAG_C = CFLAG_CLEAR;
  18743. }
  18744.  
  18745.  
  18746. void m68k_op_move_8_aw_pd7(void)
  18747. {
  18748.         uint res = OPER_A7_PD_8();
  18749.         uint ea = EA_AW_8();
  18750.  
  18751.         m68ki_write_8(ea, res);
  18752.  
  18753.         FLAG_N = NFLAG_8(res);
  18754.         FLAG_Z = res;
  18755.         FLAG_V = VFLAG_CLEAR;
  18756.         FLAG_C = CFLAG_CLEAR;
  18757. }
  18758.  
  18759.  
  18760. void m68k_op_move_8_aw_di(void)
  18761. {
  18762.         uint res = OPER_AY_DI_8();
  18763.         uint ea = EA_AW_8();
  18764.  
  18765.         m68ki_write_8(ea, res);
  18766.  
  18767.         FLAG_N = NFLAG_8(res);
  18768.         FLAG_Z = res;
  18769.         FLAG_V = VFLAG_CLEAR;
  18770.         FLAG_C = CFLAG_CLEAR;
  18771. }
  18772.  
  18773.  
  18774. void m68k_op_move_8_aw_ix(void)
  18775. {
  18776.         uint res = OPER_AY_IX_8();
  18777.         uint ea = EA_AW_8();
  18778.  
  18779.         m68ki_write_8(ea, res);
  18780.  
  18781.         FLAG_N = NFLAG_8(res);
  18782.         FLAG_Z = res;
  18783.         FLAG_V = VFLAG_CLEAR;
  18784.         FLAG_C = CFLAG_CLEAR;
  18785. }
  18786.  
  18787.  
  18788. void m68k_op_move_8_aw_aw(void)
  18789. {
  18790.         uint res = OPER_AW_8();
  18791.         uint ea = EA_AW_8();
  18792.  
  18793.         m68ki_write_8(ea, res);
  18794.  
  18795.         FLAG_N = NFLAG_8(res);
  18796.         FLAG_Z = res;
  18797.         FLAG_V = VFLAG_CLEAR;
  18798.         FLAG_C = CFLAG_CLEAR;
  18799. }
  18800.  
  18801.  
  18802. void m68k_op_move_8_aw_al(void)
  18803. {
  18804.         uint res = OPER_AL_8();
  18805.         uint ea = EA_AW_8();
  18806.  
  18807.         m68ki_write_8(ea, res);
  18808.  
  18809.         FLAG_N = NFLAG_8(res);
  18810.         FLAG_Z = res;
  18811.         FLAG_V = VFLAG_CLEAR;
  18812.         FLAG_C = CFLAG_CLEAR;
  18813. }
  18814.  
  18815.  
  18816. void m68k_op_move_8_aw_pcdi(void)
  18817. {
  18818.         uint res = OPER_PCDI_8();
  18819.         uint ea = EA_AW_8();
  18820.  
  18821.         m68ki_write_8(ea, res);
  18822.  
  18823.         FLAG_N = NFLAG_8(res);
  18824.         FLAG_Z = res;
  18825.         FLAG_V = VFLAG_CLEAR;
  18826.         FLAG_C = CFLAG_CLEAR;
  18827. }
  18828.  
  18829.  
  18830. void m68k_op_move_8_aw_pcix(void)
  18831. {
  18832.         uint res = OPER_PCIX_8();
  18833.         uint ea = EA_AW_8();
  18834.  
  18835.         m68ki_write_8(ea, res);
  18836.  
  18837.         FLAG_N = NFLAG_8(res);
  18838.         FLAG_Z = res;
  18839.         FLAG_V = VFLAG_CLEAR;
  18840.         FLAG_C = CFLAG_CLEAR;
  18841. }
  18842.  
  18843.  
  18844. void m68k_op_move_8_aw_i(void)
  18845. {
  18846.         uint res = OPER_I_8();
  18847.         uint ea = EA_AW_8();
  18848.  
  18849.         m68ki_write_8(ea, res);
  18850.  
  18851.         FLAG_N = NFLAG_8(res);
  18852.         FLAG_Z = res;
  18853.         FLAG_V = VFLAG_CLEAR;
  18854.         FLAG_C = CFLAG_CLEAR;
  18855. }
  18856.  
  18857.  
  18858. void m68k_op_move_8_al_d(void)
  18859. {
  18860.         uint res = MASK_OUT_ABOVE_8(DY);
  18861.         uint ea = EA_AL_8();
  18862.  
  18863.         m68ki_write_8(ea, res);
  18864.  
  18865.         FLAG_N = NFLAG_8(res);
  18866.         FLAG_Z = res;
  18867.         FLAG_V = VFLAG_CLEAR;
  18868.         FLAG_C = CFLAG_CLEAR;
  18869. }
  18870.  
  18871.  
  18872. void m68k_op_move_8_al_ai(void)
  18873. {
  18874.         uint res = OPER_AY_AI_8();
  18875.         uint ea = EA_AL_8();
  18876.  
  18877.         m68ki_write_8(ea, res);
  18878.  
  18879.         FLAG_N = NFLAG_8(res);
  18880.         FLAG_Z = res;
  18881.         FLAG_V = VFLAG_CLEAR;
  18882.         FLAG_C = CFLAG_CLEAR;
  18883. }
  18884.  
  18885.  
  18886. void m68k_op_move_8_al_pi(void)
  18887. {
  18888.         uint res = OPER_AY_PI_8();
  18889.         uint ea = EA_AL_8();
  18890.  
  18891.         m68ki_write_8(ea, res);
  18892.  
  18893.         FLAG_N = NFLAG_8(res);
  18894.         FLAG_Z = res;
  18895.         FLAG_V = VFLAG_CLEAR;
  18896.         FLAG_C = CFLAG_CLEAR;
  18897. }
  18898.  
  18899.  
  18900. void m68k_op_move_8_al_pi7(void)
  18901. {
  18902.         uint res = OPER_A7_PI_8();
  18903.         uint ea = EA_AL_8();
  18904.  
  18905.         m68ki_write_8(ea, res);
  18906.  
  18907.         FLAG_N = NFLAG_8(res);
  18908.         FLAG_Z = res;
  18909.         FLAG_V = VFLAG_CLEAR;
  18910.         FLAG_C = CFLAG_CLEAR;
  18911. }
  18912.  
  18913.  
  18914. void m68k_op_move_8_al_pd(void)
  18915. {
  18916.         uint res = OPER_AY_PD_8();
  18917.         uint ea = EA_AL_8();
  18918.  
  18919.         m68ki_write_8(ea, res);
  18920.  
  18921.         FLAG_N = NFLAG_8(res);
  18922.         FLAG_Z = res;
  18923.         FLAG_V = VFLAG_CLEAR;
  18924.         FLAG_C = CFLAG_CLEAR;
  18925. }
  18926.  
  18927.  
  18928. void m68k_op_move_8_al_pd7(void)
  18929. {
  18930.         uint res = OPER_A7_PD_8();
  18931.         uint ea = EA_AL_8();
  18932.  
  18933.         m68ki_write_8(ea, res);
  18934.  
  18935.         FLAG_N = NFLAG_8(res);
  18936.         FLAG_Z = res;
  18937.         FLAG_V = VFLAG_CLEAR;
  18938.         FLAG_C = CFLAG_CLEAR;
  18939. }
  18940.  
  18941.  
  18942. void m68k_op_move_8_al_di(void)
  18943. {
  18944.         uint res = OPER_AY_DI_8();
  18945.         uint ea = EA_AL_8();
  18946.  
  18947.         m68ki_write_8(ea, res);
  18948.  
  18949.         FLAG_N = NFLAG_8(res);
  18950.         FLAG_Z = res;
  18951.         FLAG_V = VFLAG_CLEAR;
  18952.         FLAG_C = CFLAG_CLEAR;
  18953. }
  18954.  
  18955.  
  18956. void m68k_op_move_8_al_ix(void)
  18957. {
  18958.         uint res = OPER_AY_IX_8();
  18959.         uint ea = EA_AL_8();
  18960.  
  18961.         m68ki_write_8(ea, res);
  18962.  
  18963.         FLAG_N = NFLAG_8(res);
  18964.         FLAG_Z = res;
  18965.         FLAG_V = VFLAG_CLEAR;
  18966.         FLAG_C = CFLAG_CLEAR;
  18967. }
  18968.  
  18969.  
  18970. void m68k_op_move_8_al_aw(void)
  18971. {
  18972.         uint res = OPER_AW_8();
  18973.         uint ea = EA_AL_8();
  18974.  
  18975.         m68ki_write_8(ea, res);
  18976.  
  18977.         FLAG_N = NFLAG_8(res);
  18978.         FLAG_Z = res;
  18979.         FLAG_V = VFLAG_CLEAR;
  18980.         FLAG_C = CFLAG_CLEAR;
  18981. }
  18982.  
  18983.  
  18984. void m68k_op_move_8_al_al(void)
  18985. {
  18986.         uint res = OPER_AL_8();
  18987.         uint ea = EA_AL_8();
  18988.  
  18989.         m68ki_write_8(ea, res);
  18990.  
  18991.         FLAG_N = NFLAG_8(res);
  18992.         FLAG_Z = res;
  18993.         FLAG_V = VFLAG_CLEAR;
  18994.         FLAG_C = CFLAG_CLEAR;
  18995. }
  18996.  
  18997.  
  18998. void m68k_op_move_8_al_pcdi(void)
  18999. {
  19000.         uint res = OPER_PCDI_8();
  19001.         uint ea = EA_AL_8();
  19002.  
  19003.         m68ki_write_8(ea, res);
  19004.  
  19005.         FLAG_N = NFLAG_8(res);
  19006.         FLAG_Z = res;
  19007.         FLAG_V = VFLAG_CLEAR;
  19008.         FLAG_C = CFLAG_CLEAR;
  19009. }
  19010.  
  19011.  
  19012. void m68k_op_move_8_al_pcix(void)
  19013. {
  19014.         uint res = OPER_PCIX_8();
  19015.         uint ea = EA_AL_8();
  19016.  
  19017.         m68ki_write_8(ea, res);
  19018.  
  19019.         FLAG_N = NFLAG_8(res);
  19020.         FLAG_Z = res;
  19021.         FLAG_V = VFLAG_CLEAR;
  19022.         FLAG_C = CFLAG_CLEAR;
  19023. }
  19024.  
  19025.  
  19026. void m68k_op_move_8_al_i(void)
  19027. {
  19028.         uint res = OPER_I_8();
  19029.         uint ea = EA_AL_8();
  19030.  
  19031.         m68ki_write_8(ea, res);
  19032.  
  19033.         FLAG_N = NFLAG_8(res);
  19034.         FLAG_Z = res;
  19035.         FLAG_V = VFLAG_CLEAR;
  19036.         FLAG_C = CFLAG_CLEAR;
  19037. }
  19038.  
  19039.  
  19040. void m68k_op_move_16_d_d(void)
  19041. {
  19042.         uint res = MASK_OUT_ABOVE_16(DY);
  19043.         uint* r_dst = &DX;
  19044.  
  19045.         *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
  19046.  
  19047.         FLAG_N = NFLAG_16(res);
  19048.         FLAG_Z = res;
  19049.         FLAG_V = VFLAG_CLEAR;
  19050.         FLAG_C = CFLAG_CLEAR;
  19051. }
  19052.  
  19053.  
  19054. void m68k_op_move_16_d_a(void)
  19055. {
  19056.         uint res = MASK_OUT_ABOVE_16(AY);
  19057.         uint* r_dst = &DX;
  19058.  
  19059.         *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
  19060.  
  19061.         FLAG_N = NFLAG_16(res);
  19062.         FLAG_Z = res;
  19063.         FLAG_V = VFLAG_CLEAR;
  19064.         FLAG_C = CFLAG_CLEAR;
  19065. }
  19066.  
  19067.  
  19068. void m68k_op_move_16_d_ai(void)
  19069. {
  19070.         uint res = OPER_AY_AI_16();
  19071.         uint* r_dst = &DX;
  19072.  
  19073.         *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
  19074.  
  19075.         FLAG_N = NFLAG_16(res);
  19076.         FLAG_Z = res;
  19077.         FLAG_V = VFLAG_CLEAR;
  19078.         FLAG_C = CFLAG_CLEAR;
  19079. }
  19080.  
  19081.  
  19082. void m68k_op_move_16_d_pi(void)
  19083. {
  19084.         uint res = OPER_AY_PI_16();
  19085.         uint* r_dst = &DX;
  19086.  
  19087.         *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
  19088.  
  19089.         FLAG_N = NFLAG_16(res);
  19090.         FLAG_Z = res;
  19091.         FLAG_V = VFLAG_CLEAR;
  19092.         FLAG_C = CFLAG_CLEAR;
  19093. }
  19094.  
  19095.  
  19096. void m68k_op_move_16_d_pd(void)
  19097. {
  19098.         uint res = OPER_AY_PD_16();
  19099.         uint* r_dst = &DX;
  19100.  
  19101.         *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
  19102.  
  19103.         FLAG_N = NFLAG_16(res);
  19104.         FLAG_Z = res;
  19105.         FLAG_V = VFLAG_CLEAR;
  19106.         FLAG_C = CFLAG_CLEAR;
  19107. }
  19108.  
  19109.  
  19110. void m68k_op_move_16_d_di(void)
  19111. {
  19112.         uint res = OPER_AY_DI_16();
  19113.         uint* r_dst = &DX;
  19114.  
  19115.         *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
  19116.  
  19117.         FLAG_N = NFLAG_16(res);
  19118.         FLAG_Z = res;
  19119.         FLAG_V = VFLAG_CLEAR;
  19120.         FLAG_C = CFLAG_CLEAR;
  19121. }
  19122.  
  19123.  
  19124. void m68k_op_move_16_d_ix(void)
  19125. {
  19126.         uint res = OPER_AY_IX_16();
  19127.         uint* r_dst = &DX;
  19128.  
  19129.         *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
  19130.  
  19131.         FLAG_N = NFLAG_16(res);
  19132.         FLAG_Z = res;
  19133.         FLAG_V = VFLAG_CLEAR;
  19134.         FLAG_C = CFLAG_CLEAR;
  19135. }
  19136.  
  19137.  
  19138. void m68k_op_move_16_d_aw(void)
  19139. {
  19140.         uint res = OPER_AW_16();
  19141.         uint* r_dst = &DX;
  19142.  
  19143.         *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
  19144.  
  19145.         FLAG_N = NFLAG_16(res);
  19146.         FLAG_Z = res;
  19147.         FLAG_V = VFLAG_CLEAR;
  19148.         FLAG_C = CFLAG_CLEAR;
  19149. }
  19150.  
  19151.  
  19152. void m68k_op_move_16_d_al(void)
  19153. {
  19154.         uint res = OPER_AL_16();
  19155.         uint* r_dst = &DX;
  19156.  
  19157.         *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
  19158.  
  19159.         FLAG_N = NFLAG_16(res);
  19160.         FLAG_Z = res;
  19161.         FLAG_V = VFLAG_CLEAR;
  19162.         FLAG_C = CFLAG_CLEAR;
  19163. }
  19164.  
  19165.  
  19166. void m68k_op_move_16_d_pcdi(void)
  19167. {
  19168.         uint res = OPER_PCDI_16();
  19169.         uint* r_dst = &DX;
  19170.  
  19171.         *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
  19172.  
  19173.         FLAG_N = NFLAG_16(res);
  19174.         FLAG_Z = res;
  19175.         FLAG_V = VFLAG_CLEAR;
  19176.         FLAG_C = CFLAG_CLEAR;
  19177. }
  19178.  
  19179.  
  19180. void m68k_op_move_16_d_pcix(void)
  19181. {
  19182.         uint res = OPER_PCIX_16();
  19183.         uint* r_dst = &DX;
  19184.  
  19185.         *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
  19186.  
  19187.         FLAG_N = NFLAG_16(res);
  19188.         FLAG_Z = res;
  19189.         FLAG_V = VFLAG_CLEAR;
  19190.         FLAG_C = CFLAG_CLEAR;
  19191. }
  19192.  
  19193.  
  19194. void m68k_op_move_16_d_i(void)
  19195. {
  19196.         uint res = OPER_I_16();
  19197.         uint* r_dst = &DX;
  19198.  
  19199.         *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
  19200.  
  19201.         FLAG_N = NFLAG_16(res);
  19202.         FLAG_Z = res;
  19203.         FLAG_V = VFLAG_CLEAR;
  19204.         FLAG_C = CFLAG_CLEAR;
  19205. }
  19206.  
  19207.  
  19208. void m68k_op_move_16_ai_d(void)
  19209. {
  19210.         uint res = MASK_OUT_ABOVE_16(DY);
  19211.         uint ea = EA_AX_AI_16();
  19212.  
  19213.         m68ki_write_16(ea, res);
  19214.  
  19215.         FLAG_N = NFLAG_16(res);
  19216.         FLAG_Z = res;
  19217.         FLAG_V = VFLAG_CLEAR;
  19218.         FLAG_C = CFLAG_CLEAR;
  19219. }
  19220.  
  19221.  
  19222. void m68k_op_move_16_ai_a(void)
  19223. {
  19224.         uint res = MASK_OUT_ABOVE_16(AY);
  19225.         uint ea = EA_AX_AI_16();
  19226.  
  19227.         m68ki_write_16(ea, res);
  19228.  
  19229.         FLAG_N = NFLAG_16(res);
  19230.         FLAG_Z = res;
  19231.         FLAG_V = VFLAG_CLEAR;
  19232.         FLAG_C = CFLAG_CLEAR;
  19233. }
  19234.  
  19235.  
  19236. void m68k_op_move_16_ai_ai(void)
  19237. {
  19238.         uint res = OPER_AY_AI_16();
  19239.         uint ea = EA_AX_AI_16();
  19240.  
  19241.         m68ki_write_16(ea, res);
  19242.  
  19243.         FLAG_N = NFLAG_16(res);
  19244.         FLAG_Z = res;
  19245.         FLAG_V = VFLAG_CLEAR;
  19246.         FLAG_C = CFLAG_CLEAR;
  19247. }
  19248.  
  19249.  
  19250. void m68k_op_move_16_ai_pi(void)
  19251. {
  19252.         uint res = OPER_AY_PI_16();
  19253.         uint ea = EA_AX_AI_16();
  19254.  
  19255.         m68ki_write_16(ea, res);
  19256.  
  19257.         FLAG_N = NFLAG_16(res);
  19258.         FLAG_Z = res;
  19259.         FLAG_V = VFLAG_CLEAR;
  19260.         FLAG_C = CFLAG_CLEAR;
  19261. }
  19262.  
  19263.  
  19264. void m68k_op_move_16_ai_pd(void)
  19265. {
  19266.         uint res = OPER_AY_PD_16();
  19267.         uint ea = EA_AX_AI_16();
  19268.  
  19269.         m68ki_write_16(ea, res);
  19270.  
  19271.         FLAG_N = NFLAG_16(res);
  19272.         FLAG_Z = res;
  19273.         FLAG_V = VFLAG_CLEAR;
  19274.         FLAG_C = CFLAG_CLEAR;
  19275. }
  19276.  
  19277.  
  19278. void m68k_op_move_16_ai_di(void)
  19279. {
  19280.         uint res = OPER_AY_DI_16();
  19281.         uint ea = EA_AX_AI_16();
  19282.  
  19283.         m68ki_write_16(ea, res);
  19284.  
  19285.         FLAG_N = NFLAG_16(res);
  19286.         FLAG_Z = res;
  19287.         FLAG_V = VFLAG_CLEAR;
  19288.         FLAG_C = CFLAG_CLEAR;
  19289. }
  19290.  
  19291.  
  19292. void m68k_op_move_16_ai_ix(void)
  19293. {
  19294.         uint res = OPER_AY_IX_16();
  19295.         uint ea = EA_AX_AI_16();
  19296.  
  19297.         m68ki_write_16(ea, res);
  19298.  
  19299.         FLAG_N = NFLAG_16(res);
  19300.         FLAG_Z = res;
  19301.         FLAG_V = VFLAG_CLEAR;
  19302.         FLAG_C = CFLAG_CLEAR;
  19303. }
  19304.  
  19305.  
  19306. void m68k_op_move_16_ai_aw(void)
  19307. {
  19308.         uint res = OPER_AW_16();
  19309.         uint ea = EA_AX_AI_16();
  19310.  
  19311.         m68ki_write_16(ea, res);
  19312.  
  19313.         FLAG_N = NFLAG_16(res);
  19314.         FLAG_Z = res;
  19315.         FLAG_V = VFLAG_CLEAR;
  19316.         FLAG_C = CFLAG_CLEAR;
  19317. }
  19318.  
  19319.  
  19320. void m68k_op_move_16_ai_al(void)
  19321. {
  19322.         uint res = OPER_AL_16();
  19323.         uint ea = EA_AX_AI_16();
  19324.  
  19325.         m68ki_write_16(ea, res);
  19326.  
  19327.         FLAG_N = NFLAG_16(res);
  19328.         FLAG_Z = res;
  19329.         FLAG_V = VFLAG_CLEAR;
  19330.         FLAG_C = CFLAG_CLEAR;
  19331. }
  19332.  
  19333.  
  19334. void m68k_op_move_16_ai_pcdi(void)
  19335. {
  19336.         uint res = OPER_PCDI_16();
  19337.         uint ea = EA_AX_AI_16();
  19338.  
  19339.         m68ki_write_16(ea, res);
  19340.  
  19341.         FLAG_N = NFLAG_16(res);
  19342.         FLAG_Z = res;
  19343.         FLAG_V = VFLAG_CLEAR;
  19344.         FLAG_C = CFLAG_CLEAR;
  19345. }
  19346.  
  19347.  
  19348. void m68k_op_move_16_ai_pcix(void)
  19349. {
  19350.         uint res = OPER_PCIX_16();
  19351.         uint ea = EA_AX_AI_16();
  19352.  
  19353.         m68ki_write_16(ea, res);
  19354.  
  19355.         FLAG_N = NFLAG_16(res);
  19356.         FLAG_Z = res;
  19357.         FLAG_V = VFLAG_CLEAR;
  19358.         FLAG_C = CFLAG_CLEAR;
  19359. }
  19360.  
  19361.  
  19362. void m68k_op_move_16_ai_i(void)
  19363. {
  19364.         uint res = OPER_I_16();
  19365.         uint ea = EA_AX_AI_16();
  19366.  
  19367.         m68ki_write_16(ea, res);
  19368.  
  19369.         FLAG_N = NFLAG_16(res);
  19370.         FLAG_Z = res;
  19371.         FLAG_V = VFLAG_CLEAR;
  19372.         FLAG_C = CFLAG_CLEAR;
  19373. }
  19374.  
  19375.  
  19376. void m68k_op_move_16_pi_d(void)
  19377. {
  19378.         uint res = MASK_OUT_ABOVE_16(DY);
  19379.         uint ea = EA_AX_PI_16();
  19380.  
  19381.         m68ki_write_16(ea, res);
  19382.  
  19383.         FLAG_N = NFLAG_16(res);
  19384.         FLAG_Z = res;
  19385.         FLAG_V = VFLAG_CLEAR;
  19386.         FLAG_C = CFLAG_CLEAR;
  19387. }
  19388.  
  19389.  
  19390. void m68k_op_move_16_pi_a(void)
  19391. {
  19392.         uint res = MASK_OUT_ABOVE_16(AY);
  19393.         uint ea = EA_AX_PI_16();
  19394.  
  19395.         m68ki_write_16(ea, res);
  19396.  
  19397.         FLAG_N = NFLAG_16(res);
  19398.         FLAG_Z = res;
  19399.         FLAG_V = VFLAG_CLEAR;
  19400.         FLAG_C = CFLAG_CLEAR;
  19401. }
  19402.  
  19403.  
  19404. void m68k_op_move_16_pi_ai(void)
  19405. {
  19406.         uint res = OPER_AY_AI_16();
  19407.         uint ea = EA_AX_PI_16();
  19408.  
  19409.         m68ki_write_16(ea, res);
  19410.  
  19411.         FLAG_N = NFLAG_16(res);
  19412.         FLAG_Z = res;
  19413.         FLAG_V = VFLAG_CLEAR;
  19414.         FLAG_C = CFLAG_CLEAR;
  19415. }
  19416.  
  19417.  
  19418. void m68k_op_move_16_pi_pi(void)
  19419. {
  19420.         uint res = OPER_AY_PI_16();
  19421.         uint ea = EA_AX_PI_16();
  19422.  
  19423.         m68ki_write_16(ea, res);
  19424.  
  19425.         FLAG_N = NFLAG_16(res);
  19426.         FLAG_Z = res;
  19427.         FLAG_V = VFLAG_CLEAR;
  19428.         FLAG_C = CFLAG_CLEAR;
  19429. }
  19430.  
  19431.  
  19432. void m68k_op_move_16_pi_pd(void)
  19433. {
  19434.         uint res = OPER_AY_PD_16();
  19435.         uint ea = EA_AX_PI_16();
  19436.  
  19437.         m68ki_write_16(ea, res);
  19438.  
  19439.         FLAG_N = NFLAG_16(res);
  19440.         FLAG_Z = res;
  19441.         FLAG_V = VFLAG_CLEAR;
  19442.         FLAG_C = CFLAG_CLEAR;
  19443. }
  19444.  
  19445.  
  19446. void m68k_op_move_16_pi_di(void)
  19447. {
  19448.         uint res = OPER_AY_DI_16();
  19449.         uint ea = EA_AX_PI_16();
  19450.  
  19451.         m68ki_write_16(ea, res);
  19452.  
  19453.         FLAG_N = NFLAG_16(res);
  19454.         FLAG_Z = res;
  19455.         FLAG_V = VFLAG_CLEAR;
  19456.         FLAG_C = CFLAG_CLEAR;
  19457. }
  19458.  
  19459.  
  19460. void m68k_op_move_16_pi_ix(void)
  19461. {
  19462.         uint res = OPER_AY_IX_16();
  19463.         uint ea = EA_AX_PI_16();
  19464.  
  19465.         m68ki_write_16(ea, res);
  19466.  
  19467.         FLAG_N = NFLAG_16(res);
  19468.         FLAG_Z = res;
  19469.         FLAG_V = VFLAG_CLEAR;
  19470.         FLAG_C = CFLAG_CLEAR;
  19471. }
  19472.  
  19473.  
  19474. void m68k_op_move_16_pi_aw(void)
  19475. {
  19476.         uint res = OPER_AW_16();
  19477.         uint ea = EA_AX_PI_16();
  19478.  
  19479.         m68ki_write_16(ea, res);
  19480.  
  19481.         FLAG_N = NFLAG_16(res);
  19482.         FLAG_Z = res;
  19483.         FLAG_V = VFLAG_CLEAR;
  19484.         FLAG_C = CFLAG_CLEAR;
  19485. }
  19486.  
  19487.  
  19488. void m68k_op_move_16_pi_al(void)
  19489. {
  19490.         uint res = OPER_AL_16();
  19491.         uint ea = EA_AX_PI_16();
  19492.  
  19493.         m68ki_write_16(ea, res);
  19494.  
  19495.         FLAG_N = NFLAG_16(res);
  19496.         FLAG_Z = res;
  19497.         FLAG_V = VFLAG_CLEAR;
  19498.         FLAG_C = CFLAG_CLEAR;
  19499. }
  19500.  
  19501.  
  19502. void m68k_op_move_16_pi_pcdi(void)
  19503. {
  19504.         uint res = OPER_PCDI_16();
  19505.         uint ea = EA_AX_PI_16();
  19506.  
  19507.         m68ki_write_16(ea, res);
  19508.  
  19509.         FLAG_N = NFLAG_16(res);
  19510.         FLAG_Z = res;
  19511.         FLAG_V = VFLAG_CLEAR;
  19512.         FLAG_C = CFLAG_CLEAR;
  19513. }
  19514.  
  19515.  
  19516. void m68k_op_move_16_pi_pcix(void)
  19517. {
  19518.         uint res = OPER_PCIX_16();
  19519.         uint ea = EA_AX_PI_16();
  19520.  
  19521.         m68ki_write_16(ea, res);
  19522.  
  19523.         FLAG_N = NFLAG_16(res);
  19524.         FLAG_Z = res;
  19525.         FLAG_V = VFLAG_CLEAR;
  19526.         FLAG_C = CFLAG_CLEAR;
  19527. }
  19528.  
  19529.  
  19530. void m68k_op_move_16_pi_i(void)
  19531. {
  19532.         uint res = OPER_I_16();
  19533.         uint ea = EA_AX_PI_16();
  19534.  
  19535.         m68ki_write_16(ea, res);
  19536.  
  19537.         FLAG_N = NFLAG_16(res);
  19538.         FLAG_Z = res;
  19539.         FLAG_V = VFLAG_CLEAR;
  19540.         FLAG_C = CFLAG_CLEAR;
  19541. }
  19542.  
  19543.  
  19544. void m68k_op_move_16_pd_d(void)
  19545. {
  19546.         uint res = MASK_OUT_ABOVE_16(DY);
  19547.         uint ea = EA_AX_PD_16();
  19548.  
  19549.         m68ki_write_16(ea, res);
  19550.  
  19551.         FLAG_N = NFLAG_16(res);
  19552.         FLAG_Z = res;
  19553.         FLAG_V = VFLAG_CLEAR;
  19554.         FLAG_C = CFLAG_CLEAR;
  19555. }
  19556.  
  19557.  
  19558. void m68k_op_move_16_pd_a(void)
  19559. {
  19560.         uint res = MASK_OUT_ABOVE_16(AY);
  19561.         uint ea = EA_AX_PD_16();
  19562.  
  19563.         m68ki_write_16(ea, res);
  19564.  
  19565.         FLAG_N = NFLAG_16(res);
  19566.         FLAG_Z = res;
  19567.         FLAG_V = VFLAG_CLEAR;
  19568.         FLAG_C = CFLAG_CLEAR;
  19569. }
  19570.  
  19571.  
  19572. void m68k_op_move_16_pd_ai(void)
  19573. {
  19574.         uint res = OPER_AY_AI_16();
  19575.         uint ea = EA_AX_PD_16();
  19576.  
  19577.         m68ki_write_16(ea, res);
  19578.  
  19579.         FLAG_N = NFLAG_16(res);
  19580.         FLAG_Z = res;
  19581.         FLAG_V = VFLAG_CLEAR;
  19582.         FLAG_C = CFLAG_CLEAR;
  19583. }
  19584.  
  19585.  
  19586. void m68k_op_move_16_pd_pi(void)
  19587. {
  19588.         uint res = OPER_AY_PI_16();
  19589.         uint ea = EA_AX_PD_16();
  19590.  
  19591.         m68ki_write_16(ea, res);
  19592.  
  19593.         FLAG_N = NFLAG_16(res);
  19594.         FLAG_Z = res;
  19595.         FLAG_V = VFLAG_CLEAR;
  19596.         FLAG_C = CFLAG_CLEAR;
  19597. }
  19598.  
  19599.  
  19600. void m68k_op_move_16_pd_pd(void)
  19601. {
  19602.         uint res = OPER_AY_PD_16();
  19603.         uint ea = EA_AX_PD_16();
  19604.  
  19605.         m68ki_write_16(ea, res);
  19606.  
  19607.         FLAG_N = NFLAG_16(res);
  19608.         FLAG_Z = res;
  19609.         FLAG_V = VFLAG_CLEAR;
  19610.         FLAG_C = CFLAG_CLEAR;
  19611. }
  19612.  
  19613.  
  19614. void m68k_op_move_16_pd_di(void)
  19615. {
  19616.         uint res = OPER_AY_DI_16();
  19617.         uint ea = EA_AX_PD_16();
  19618.  
  19619.         m68ki_write_16(ea, res);
  19620.  
  19621.         FLAG_N = NFLAG_16(res);
  19622.         FLAG_Z = res;
  19623.         FLAG_V = VFLAG_CLEAR;
  19624.         FLAG_C = CFLAG_CLEAR;
  19625. }
  19626.  
  19627.  
  19628. void m68k_op_move_16_pd_ix(void)
  19629. {
  19630.         uint res = OPER_AY_IX_16();
  19631.         uint ea = EA_AX_PD_16();
  19632.  
  19633.         m68ki_write_16(ea, res);
  19634.  
  19635.         FLAG_N = NFLAG_16(res);
  19636.         FLAG_Z = res;
  19637.         FLAG_V = VFLAG_CLEAR;
  19638.         FLAG_C = CFLAG_CLEAR;
  19639. }
  19640.  
  19641.  
  19642. void m68k_op_move_16_pd_aw(void)
  19643. {
  19644.         uint res = OPER_AW_16();
  19645.         uint ea = EA_AX_PD_16();
  19646.  
  19647.         m68ki_write_16(ea, res);
  19648.  
  19649.         FLAG_N = NFLAG_16(res);
  19650.         FLAG_Z = res;
  19651.         FLAG_V = VFLAG_CLEAR;
  19652.         FLAG_C = CFLAG_CLEAR;
  19653. }
  19654.  
  19655.  
  19656. void m68k_op_move_16_pd_al(void)
  19657. {
  19658.         uint res = OPER_AL_16();
  19659.         uint ea = EA_AX_PD_16();
  19660.  
  19661.         m68ki_write_16(ea, res);
  19662.  
  19663.         FLAG_N = NFLAG_16(res);
  19664.         FLAG_Z = res;
  19665.         FLAG_V = VFLAG_CLEAR;
  19666.         FLAG_C = CFLAG_CLEAR;
  19667. }
  19668.  
  19669.  
  19670. void m68k_op_move_16_pd_pcdi(void)
  19671. {
  19672.         uint res = OPER_PCDI_16();
  19673.         uint ea = EA_AX_PD_16();
  19674.  
  19675.         m68ki_write_16(ea, res);
  19676.  
  19677.         FLAG_N = NFLAG_16(res);
  19678.         FLAG_Z = res;
  19679.         FLAG_V = VFLAG_CLEAR;
  19680.         FLAG_C = CFLAG_CLEAR;
  19681. }
  19682.  
  19683.  
  19684. void m68k_op_move_16_pd_pcix(void)
  19685. {
  19686.         uint res = OPER_PCIX_16();
  19687.         uint ea = EA_AX_PD_16();
  19688.  
  19689.         m68ki_write_16(ea, res);
  19690.  
  19691.         FLAG_N = NFLAG_16(res);
  19692.         FLAG_Z = res;
  19693.         FLAG_V = VFLAG_CLEAR;
  19694.         FLAG_C = CFLAG_CLEAR;
  19695. }
  19696.  
  19697.  
  19698. void m68k_op_move_16_pd_i(void)
  19699. {
  19700.         uint res = OPER_I_16();
  19701.         uint ea = EA_AX_PD_16();
  19702.  
  19703.         m68ki_write_16(ea, res);
  19704.  
  19705.         FLAG_N = NFLAG_16(res);
  19706.         FLAG_Z = res;
  19707.         FLAG_V = VFLAG_CLEAR;
  19708.         FLAG_C = CFLAG_CLEAR;
  19709. }
  19710.  
  19711.  
  19712. void m68k_op_move_16_di_d(void)
  19713. {
  19714.         uint res = MASK_OUT_ABOVE_16(DY);
  19715.         uint ea = EA_AX_DI_16();
  19716.  
  19717.         m68ki_write_16(ea, res);
  19718.  
  19719.         FLAG_N = NFLAG_16(res);
  19720.         FLAG_Z = res;
  19721.         FLAG_V = VFLAG_CLEAR;
  19722.         FLAG_C = CFLAG_CLEAR;
  19723. }
  19724.  
  19725.  
  19726. void m68k_op_move_16_di_a(void)
  19727. {
  19728.         uint res = MASK_OUT_ABOVE_16(AY);
  19729.         uint ea = EA_AX_DI_16();
  19730.  
  19731.         m68ki_write_16(ea, res);
  19732.  
  19733.         FLAG_N = NFLAG_16(res);
  19734.         FLAG_Z = res;
  19735.         FLAG_V = VFLAG_CLEAR;
  19736.         FLAG_C = CFLAG_CLEAR;
  19737. }
  19738.  
  19739.  
  19740. void m68k_op_move_16_di_ai(void)
  19741. {
  19742.         uint res = OPER_AY_AI_16();
  19743.         uint ea = EA_AX_DI_16();
  19744.  
  19745.         m68ki_write_16(ea, res);
  19746.  
  19747.         FLAG_N = NFLAG_16(res);
  19748.         FLAG_Z = res;
  19749.         FLAG_V = VFLAG_CLEAR;
  19750.         FLAG_C = CFLAG_CLEAR;
  19751. }
  19752.  
  19753.  
  19754. void m68k_op_move_16_di_pi(void)
  19755. {
  19756.         uint res = OPER_AY_PI_16();
  19757.         uint ea = EA_AX_DI_16();
  19758.  
  19759.         m68ki_write_16(ea, res);
  19760.  
  19761.         FLAG_N = NFLAG_16(res);
  19762.         FLAG_Z = res;
  19763.         FLAG_V = VFLAG_CLEAR;
  19764.         FLAG_C = CFLAG_CLEAR;
  19765. }
  19766.  
  19767.  
  19768. void m68k_op_move_16_di_pd(void)
  19769. {
  19770.         uint res = OPER_AY_PD_16();
  19771.         uint ea = EA_AX_DI_16();
  19772.  
  19773.         m68ki_write_16(ea, res);
  19774.  
  19775.         FLAG_N = NFLAG_16(res);
  19776.         FLAG_Z = res;
  19777.         FLAG_V = VFLAG_CLEAR;
  19778.         FLAG_C = CFLAG_CLEAR;
  19779. }
  19780.  
  19781.  
  19782. void m68k_op_move_16_di_di(void)
  19783. {
  19784.         uint res = OPER_AY_DI_16();
  19785.         uint ea = EA_AX_DI_16();
  19786.  
  19787.         m68ki_write_16(ea, res);
  19788.  
  19789.         FLAG_N = NFLAG_16(res);
  19790.         FLAG_Z = res;
  19791.         FLAG_V = VFLAG_CLEAR;
  19792.         FLAG_C = CFLAG_CLEAR;
  19793. }
  19794.  
  19795.  
  19796. void m68k_op_move_16_di_ix(void)
  19797. {
  19798.         uint res = OPER_AY_IX_16();
  19799.         uint ea = EA_AX_DI_16();
  19800.  
  19801.         m68ki_write_16(ea, res);
  19802.  
  19803.         FLAG_N = NFLAG_16(res);
  19804.         FLAG_Z = res;
  19805.         FLAG_V = VFLAG_CLEAR;
  19806.         FLAG_C = CFLAG_CLEAR;
  19807. }
  19808.  
  19809.  
  19810. void m68k_op_move_16_di_aw(void)
  19811. {
  19812.         uint res = OPER_AW_16();
  19813.         uint ea = EA_AX_DI_16();
  19814.  
  19815.         m68ki_write_16(ea, res);
  19816.  
  19817.         FLAG_N = NFLAG_16(res);
  19818.         FLAG_Z = res;
  19819.         FLAG_V = VFLAG_CLEAR;
  19820.         FLAG_C = CFLAG_CLEAR;
  19821. }
  19822.  
  19823.  
  19824. void m68k_op_move_16_di_al(void)
  19825. {
  19826.         uint res = OPER_AL_16();
  19827.         uint ea = EA_AX_DI_16();
  19828.  
  19829.         m68ki_write_16(ea, res);
  19830.  
  19831.         FLAG_N = NFLAG_16(res);
  19832.         FLAG_Z = res;
  19833.         FLAG_V = VFLAG_CLEAR;
  19834.         FLAG_C = CFLAG_CLEAR;
  19835. }
  19836.  
  19837.  
  19838. void m68k_op_move_16_di_pcdi(void)
  19839. {
  19840.         uint res = OPER_PCDI_16();
  19841.         uint ea = EA_AX_DI_16();
  19842.  
  19843.         m68ki_write_16(ea, res);
  19844.  
  19845.         FLAG_N = NFLAG_16(res);
  19846.         FLAG_Z = res;
  19847.         FLAG_V = VFLAG_CLEAR;
  19848.         FLAG_C = CFLAG_CLEAR;
  19849. }
  19850.  
  19851.  
  19852. void m68k_op_move_16_di_pcix(void)
  19853. {
  19854.         uint res = OPER_PCIX_16();
  19855.         uint ea = EA_AX_DI_16();
  19856.  
  19857.         m68ki_write_16(ea, res);
  19858.  
  19859.         FLAG_N = NFLAG_16(res);
  19860.         FLAG_Z = res;
  19861.         FLAG_V = VFLAG_CLEAR;
  19862.         FLAG_C = CFLAG_CLEAR;
  19863. }
  19864.  
  19865.  
  19866. void m68k_op_move_16_di_i(void)
  19867. {
  19868.         uint res = OPER_I_16();
  19869.         uint ea = EA_AX_DI_16();
  19870.  
  19871.         m68ki_write_16(ea, res);
  19872.  
  19873.         FLAG_N = NFLAG_16(res);
  19874.         FLAG_Z = res;
  19875.         FLAG_V = VFLAG_CLEAR;
  19876.         FLAG_C = CFLAG_CLEAR;
  19877. }
  19878.  
  19879.  
  19880. void m68k_op_move_16_ix_d(void)
  19881. {
  19882.         uint res = MASK_OUT_ABOVE_16(DY);
  19883.         uint ea = EA_AX_IX_16();
  19884.  
  19885.         m68ki_write_16(ea, res);
  19886.  
  19887.         FLAG_N = NFLAG_16(res);
  19888.         FLAG_Z = res;
  19889.         FLAG_V = VFLAG_CLEAR;
  19890.         FLAG_C = CFLAG_CLEAR;
  19891. }
  19892.  
  19893.  
  19894. void m68k_op_move_16_ix_a(void)
  19895. {
  19896.         uint res = MASK_OUT_ABOVE_16(AY);
  19897.         uint ea = EA_AX_IX_16();
  19898.  
  19899.         m68ki_write_16(ea, res);
  19900.  
  19901.         FLAG_N = NFLAG_16(res);
  19902.         FLAG_Z = res;
  19903.         FLAG_V = VFLAG_CLEAR;
  19904.         FLAG_C = CFLAG_CLEAR;
  19905. }
  19906.  
  19907.  
  19908. void m68k_op_move_16_ix_ai(void)
  19909. {
  19910.         uint res = OPER_AY_AI_16();
  19911.         uint ea = EA_AX_IX_16();
  19912.  
  19913.         m68ki_write_16(ea, res);
  19914.  
  19915.         FLAG_N = NFLAG_16(res);
  19916.         FLAG_Z = res;
  19917.         FLAG_V = VFLAG_CLEAR;
  19918.         FLAG_C = CFLAG_CLEAR;
  19919. }
  19920.  
  19921.  
  19922. void m68k_op_move_16_ix_pi(void)
  19923. {
  19924.         uint res = OPER_AY_PI_16();
  19925.         uint ea = EA_AX_IX_16();
  19926.  
  19927.         m68ki_write_16(ea, res);
  19928.  
  19929.         FLAG_N = NFLAG_16(res);
  19930.         FLAG_Z = res;
  19931.         FLAG_V = VFLAG_CLEAR;
  19932.         FLAG_C = CFLAG_CLEAR;
  19933. }
  19934.  
  19935.  
  19936. void m68k_op_move_16_ix_pd(void)
  19937. {
  19938.         uint res = OPER_AY_PD_16();
  19939.         uint ea = EA_AX_IX_16();
  19940.  
  19941.         m68ki_write_16(ea, res);
  19942.  
  19943.         FLAG_N = NFLAG_16(res);
  19944.         FLAG_Z = res;
  19945.         FLAG_V = VFLAG_CLEAR;
  19946.         FLAG_C = CFLAG_CLEAR;
  19947. }
  19948.  
  19949.  
  19950. void m68k_op_move_16_ix_di(void)
  19951. {
  19952.         uint res = OPER_AY_DI_16();
  19953.         uint ea = EA_AX_IX_16();
  19954.  
  19955.         m68ki_write_16(ea, res);
  19956.  
  19957.         FLAG_N = NFLAG_16(res);
  19958.         FLAG_Z = res;
  19959.         FLAG_V = VFLAG_CLEAR;
  19960.         FLAG_C = CFLAG_CLEAR;
  19961. }
  19962.  
  19963.  
  19964. void m68k_op_move_16_ix_ix(void)
  19965. {
  19966.         uint res = OPER_AY_IX_16();
  19967.         uint ea = EA_AX_IX_16();
  19968.  
  19969.         m68ki_write_16(ea, res);
  19970.  
  19971.         FLAG_N = NFLAG_16(res);
  19972.         FLAG_Z = res;
  19973.         FLAG_V = VFLAG_CLEAR;
  19974.         FLAG_C = CFLAG_CLEAR;
  19975. }
  19976.  
  19977.  
  19978. void m68k_op_move_16_ix_aw(void)
  19979. {
  19980.         uint res = OPER_AW_16();
  19981.         uint ea = EA_AX_IX_16();
  19982.  
  19983.         m68ki_write_16(ea, res);
  19984.  
  19985.         FLAG_N = NFLAG_16(res);
  19986.         FLAG_Z = res;
  19987.         FLAG_V = VFLAG_CLEAR;
  19988.         FLAG_C = CFLAG_CLEAR;
  19989. }
  19990.  
  19991.  
  19992. void m68k_op_move_16_ix_al(void)
  19993. {
  19994.         uint res = OPER_AL_16();
  19995.         uint ea = EA_AX_IX_16();
  19996.  
  19997.         m68ki_write_16(ea, res);
  19998.  
  19999.         FLAG_N = NFLAG_16(res);
  20000.         FLAG_Z = res;
  20001.         FLAG_V = VFLAG_CLEAR;
  20002.         FLAG_C = CFLAG_CLEAR;
  20003. }
  20004.  
  20005.  
  20006. void m68k_op_move_16_ix_pcdi(void)
  20007. {
  20008.         uint res = OPER_PCDI_16();
  20009.         uint ea = EA_AX_IX_16();
  20010.  
  20011.         m68ki_write_16(ea, res);
  20012.  
  20013.         FLAG_N = NFLAG_16(res);
  20014.         FLAG_Z = res;
  20015.         FLAG_V = VFLAG_CLEAR;
  20016.         FLAG_C = CFLAG_CLEAR;
  20017. }
  20018.  
  20019.  
  20020. void m68k_op_move_16_ix_pcix(void)
  20021. {
  20022.         uint res = OPER_PCIX_16();
  20023.         uint ea = EA_AX_IX_16();
  20024.  
  20025.         m68ki_write_16(ea, res);
  20026.  
  20027.         FLAG_N = NFLAG_16(res);
  20028.         FLAG_Z = res;
  20029.         FLAG_V = VFLAG_CLEAR;
  20030.         FLAG_C = CFLAG_CLEAR;
  20031. }
  20032.  
  20033.  
  20034. void m68k_op_move_16_ix_i(void)
  20035. {
  20036.         uint res = OPER_I_16();
  20037.         uint ea = EA_AX_IX_16();
  20038.  
  20039.         m68ki_write_16(ea, res);
  20040.  
  20041.         FLAG_N = NFLAG_16(res);
  20042.         FLAG_Z = res;
  20043.         FLAG_V = VFLAG_CLEAR;
  20044.         FLAG_C = CFLAG_CLEAR;
  20045. }
  20046.  
  20047.  
  20048. void m68k_op_move_16_aw_d(void)
  20049. {
  20050.         uint res = MASK_OUT_ABOVE_16(DY);
  20051.         uint ea = EA_AW_16();
  20052.  
  20053.         m68ki_write_16(ea, res);
  20054.  
  20055.         FLAG_N = NFLAG_16(res);
  20056.         FLAG_Z = res;
  20057.         FLAG_V = VFLAG_CLEAR;
  20058.         FLAG_C = CFLAG_CLEAR;
  20059. }
  20060.  
  20061.  
  20062. void m68k_op_move_16_aw_a(void)
  20063. {
  20064.         uint res = MASK_OUT_ABOVE_16(AY);
  20065.         uint ea = EA_AW_16();
  20066.  
  20067.         m68ki_write_16(ea, res);
  20068.  
  20069.         FLAG_N = NFLAG_16(res);
  20070.         FLAG_Z = res;
  20071.         FLAG_V = VFLAG_CLEAR;
  20072.         FLAG_C = CFLAG_CLEAR;
  20073. }
  20074.  
  20075.  
  20076. void m68k_op_move_16_aw_ai(void)
  20077. {
  20078.         uint res = OPER_AY_AI_16();
  20079.         uint ea = EA_AW_16();
  20080.  
  20081.         m68ki_write_16(ea, res);
  20082.  
  20083.         FLAG_N = NFLAG_16(res);
  20084.         FLAG_Z = res;
  20085.         FLAG_V = VFLAG_CLEAR;
  20086.         FLAG_C = CFLAG_CLEAR;
  20087. }
  20088.  
  20089.  
  20090. void m68k_op_move_16_aw_pi(void)
  20091. {
  20092.         uint res = OPER_AY_PI_16();
  20093.         uint ea = EA_AW_16();
  20094.  
  20095.         m68ki_write_16(ea, res);
  20096.  
  20097.         FLAG_N = NFLAG_16(res);
  20098.         FLAG_Z = res;
  20099.         FLAG_V = VFLAG_CLEAR;
  20100.         FLAG_C = CFLAG_CLEAR;
  20101. }
  20102.  
  20103.  
  20104. void m68k_op_move_16_aw_pd(void)
  20105. {
  20106.         uint res = OPER_AY_PD_16();
  20107.         uint ea = EA_AW_16();
  20108.  
  20109.         m68ki_write_16(ea, res);
  20110.  
  20111.         FLAG_N = NFLAG_16(res);
  20112.         FLAG_Z = res;
  20113.         FLAG_V = VFLAG_CLEAR;
  20114.         FLAG_C = CFLAG_CLEAR;
  20115. }
  20116.  
  20117.  
  20118. void m68k_op_move_16_aw_di(void)
  20119. {
  20120.         uint res = OPER_AY_DI_16();
  20121.         uint ea = EA_AW_16();
  20122.  
  20123.         m68ki_write_16(ea, res);
  20124.  
  20125.         FLAG_N = NFLAG_16(res);
  20126.         FLAG_Z = res;
  20127.         FLAG_V = VFLAG_CLEAR;
  20128.         FLAG_C = CFLAG_CLEAR;
  20129. }
  20130.  
  20131.  
  20132. void m68k_op_move_16_aw_ix(void)
  20133. {
  20134.         uint res = OPER_AY_IX_16();
  20135.         uint ea = EA_AW_16();
  20136.  
  20137.         m68ki_write_16(ea, res);
  20138.  
  20139.         FLAG_N = NFLAG_16(res);
  20140.         FLAG_Z = res;
  20141.         FLAG_V = VFLAG_CLEAR;
  20142.         FLAG_C = CFLAG_CLEAR;
  20143. }
  20144.  
  20145.  
  20146. void m68k_op_move_16_aw_aw(void)
  20147. {
  20148.         uint res = OPER_AW_16();
  20149.         uint ea = EA_AW_16();
  20150.  
  20151.         m68ki_write_16(ea, res);
  20152.  
  20153.         FLAG_N = NFLAG_16(res);
  20154.         FLAG_Z = res;
  20155.         FLAG_V = VFLAG_CLEAR;
  20156.         FLAG_C = CFLAG_CLEAR;
  20157. }
  20158.  
  20159.  
  20160. void m68k_op_move_16_aw_al(void)
  20161. {
  20162.         uint res = OPER_AL_16();
  20163.         uint ea = EA_AW_16();
  20164.  
  20165.         m68ki_write_16(ea, res);
  20166.  
  20167.         FLAG_N = NFLAG_16(res);
  20168.         FLAG_Z = res;
  20169.         FLAG_V = VFLAG_CLEAR;
  20170.         FLAG_C = CFLAG_CLEAR;
  20171. }
  20172.  
  20173.  
  20174. void m68k_op_move_16_aw_pcdi(void)
  20175. {
  20176.         uint res = OPER_PCDI_16();
  20177.         uint ea = EA_AW_16();
  20178.  
  20179.         m68ki_write_16(ea, res);
  20180.  
  20181.         FLAG_N = NFLAG_16(res);
  20182.         FLAG_Z = res;
  20183.         FLAG_V = VFLAG_CLEAR;
  20184.         FLAG_C = CFLAG_CLEAR;
  20185. }
  20186.  
  20187.  
  20188. void m68k_op_move_16_aw_pcix(void)
  20189. {
  20190.         uint res = OPER_PCIX_16();
  20191.         uint ea = EA_AW_16();
  20192.  
  20193.         m68ki_write_16(ea, res);
  20194.  
  20195.         FLAG_N = NFLAG_16(res);
  20196.         FLAG_Z = res;
  20197.         FLAG_V = VFLAG_CLEAR;
  20198.         FLAG_C = CFLAG_CLEAR;
  20199. }
  20200.  
  20201.  
  20202. void m68k_op_move_16_aw_i(void)
  20203. {
  20204.         uint res = OPER_I_16();
  20205.         uint ea = EA_AW_16();
  20206.  
  20207.         m68ki_write_16(ea, res);
  20208.  
  20209.         FLAG_N = NFLAG_16(res);
  20210.         FLAG_Z = res;
  20211.         FLAG_V = VFLAG_CLEAR;
  20212.         FLAG_C = CFLAG_CLEAR;
  20213. }
  20214.  
  20215.  
  20216. void m68k_op_move_16_al_d(void)
  20217. {
  20218.         uint res = MASK_OUT_ABOVE_16(DY);
  20219.         uint ea = EA_AL_16();
  20220.  
  20221.         m68ki_write_16(ea, res);
  20222.  
  20223.         FLAG_N = NFLAG_16(res);
  20224.         FLAG_Z = res;
  20225.         FLAG_V = VFLAG_CLEAR;
  20226.         FLAG_C = CFLAG_CLEAR;
  20227. }
  20228.  
  20229.  
  20230. void m68k_op_move_16_al_a(void)
  20231. {
  20232.         uint res = MASK_OUT_ABOVE_16(AY);
  20233.         uint ea = EA_AL_16();
  20234.  
  20235.         m68ki_write_16(ea, res);
  20236.  
  20237.         FLAG_N = NFLAG_16(res);
  20238.         FLAG_Z = res;
  20239.         FLAG_V = VFLAG_CLEAR;
  20240.         FLAG_C = CFLAG_CLEAR;
  20241. }
  20242.  
  20243.  
  20244. void m68k_op_move_16_al_ai(void)
  20245. {
  20246.         uint res = OPER_AY_AI_16();
  20247.         uint ea = EA_AL_16();
  20248.  
  20249.         m68ki_write_16(ea, res);
  20250.  
  20251.         FLAG_N = NFLAG_16(res);
  20252.         FLAG_Z = res;
  20253.         FLAG_V = VFLAG_CLEAR;
  20254.         FLAG_C = CFLAG_CLEAR;
  20255. }
  20256.  
  20257.  
  20258. void m68k_op_move_16_al_pi(void)
  20259. {
  20260.         uint res = OPER_AY_PI_16();
  20261.         uint ea = EA_AL_16();
  20262.  
  20263.         m68ki_write_16(ea, res);
  20264.  
  20265.         FLAG_N = NFLAG_16(res);
  20266.         FLAG_Z = res;
  20267.         FLAG_V = VFLAG_CLEAR;
  20268.         FLAG_C = CFLAG_CLEAR;
  20269. }
  20270.  
  20271.  
  20272. void m68k_op_move_16_al_pd(void)
  20273. {
  20274.         uint res = OPER_AY_PD_16();
  20275.         uint ea = EA_AL_16();
  20276.  
  20277.         m68ki_write_16(ea, res);
  20278.  
  20279.         FLAG_N = NFLAG_16(res);
  20280.         FLAG_Z = res;
  20281.         FLAG_V = VFLAG_CLEAR;
  20282.         FLAG_C = CFLAG_CLEAR;
  20283. }
  20284.  
  20285.  
  20286. void m68k_op_move_16_al_di(void)
  20287. {
  20288.         uint res = OPER_AY_DI_16();
  20289.         uint ea = EA_AL_16();
  20290.  
  20291.         m68ki_write_16(ea, res);
  20292.  
  20293.         FLAG_N = NFLAG_16(res);
  20294.         FLAG_Z = res;
  20295.         FLAG_V = VFLAG_CLEAR;
  20296.         FLAG_C = CFLAG_CLEAR;
  20297. }
  20298.  
  20299.  
  20300. void m68k_op_move_16_al_ix(void)
  20301. {
  20302.         uint res = OPER_AY_IX_16();
  20303.         uint ea = EA_AL_16();
  20304.  
  20305.         m68ki_write_16(ea, res);
  20306.  
  20307.         FLAG_N = NFLAG_16(res);
  20308.         FLAG_Z = res;
  20309.         FLAG_V = VFLAG_CLEAR;
  20310.         FLAG_C = CFLAG_CLEAR;
  20311. }
  20312.  
  20313.  
  20314. void m68k_op_move_16_al_aw(void)
  20315. {
  20316.         uint res = OPER_AW_16();
  20317.         uint ea = EA_AL_16();
  20318.  
  20319.         m68ki_write_16(ea, res);
  20320.  
  20321.         FLAG_N = NFLAG_16(res);
  20322.         FLAG_Z = res;
  20323.         FLAG_V = VFLAG_CLEAR;
  20324.         FLAG_C = CFLAG_CLEAR;
  20325. }
  20326.  
  20327.  
  20328. void m68k_op_move_16_al_al(void)
  20329. {
  20330.         uint res = OPER_AL_16();
  20331.         uint ea = EA_AL_16();
  20332.  
  20333.         m68ki_write_16(ea, res);
  20334.  
  20335.         FLAG_N = NFLAG_16(res);
  20336.         FLAG_Z = res;
  20337.         FLAG_V = VFLAG_CLEAR;
  20338.         FLAG_C = CFLAG_CLEAR;
  20339. }
  20340.  
  20341.  
  20342. void m68k_op_move_16_al_pcdi(void)
  20343. {
  20344.         uint res = OPER_PCDI_16();
  20345.         uint ea = EA_AL_16();
  20346.  
  20347.         m68ki_write_16(ea, res);
  20348.  
  20349.         FLAG_N = NFLAG_16(res);
  20350.         FLAG_Z = res;
  20351.         FLAG_V = VFLAG_CLEAR;
  20352.         FLAG_C = CFLAG_CLEAR;
  20353. }
  20354.  
  20355.  
  20356. void m68k_op_move_16_al_pcix(void)
  20357. {
  20358.         uint res = OPER_PCIX_16();
  20359.         uint ea = EA_AL_16();
  20360.  
  20361.         m68ki_write_16(ea, res);
  20362.  
  20363.         FLAG_N = NFLAG_16(res);
  20364.         FLAG_Z = res;
  20365.         FLAG_V = VFLAG_CLEAR;
  20366.         FLAG_C = CFLAG_CLEAR;
  20367. }
  20368.  
  20369.  
  20370. void m68k_op_move_16_al_i(void)
  20371. {
  20372.         uint res = OPER_I_16();
  20373.         uint ea = EA_AL_16();
  20374.  
  20375.         m68ki_write_16(ea, res);
  20376.  
  20377.         FLAG_N = NFLAG_16(res);
  20378.         FLAG_Z = res;
  20379.         FLAG_V = VFLAG_CLEAR;
  20380.         FLAG_C = CFLAG_CLEAR;
  20381. }
  20382.  
  20383.  
  20384. void m68k_op_move_32_d_d(void)
  20385. {
  20386.         uint res = DY;
  20387.         uint* r_dst = &DX;
  20388.  
  20389.         *r_dst = res;
  20390.  
  20391.         FLAG_N = NFLAG_32(res);
  20392.         FLAG_Z = res;
  20393.         FLAG_V = VFLAG_CLEAR;
  20394.         FLAG_C = CFLAG_CLEAR;
  20395. }
  20396.  
  20397.  
  20398. void m68k_op_move_32_d_a(void)
  20399. {
  20400.         uint res = AY;
  20401.         uint* r_dst = &DX;
  20402.  
  20403.         *r_dst = res;
  20404.  
  20405.         FLAG_N = NFLAG_32(res);
  20406.         FLAG_Z = res;
  20407.         FLAG_V = VFLAG_CLEAR;
  20408.         FLAG_C = CFLAG_CLEAR;
  20409. }
  20410.  
  20411.  
  20412. void m68k_op_move_32_d_ai(void)
  20413. {
  20414.         uint res = OPER_AY_AI_32();
  20415.         uint* r_dst = &DX;
  20416.  
  20417.         *r_dst = res;
  20418.  
  20419.         FLAG_N = NFLAG_32(res);
  20420.         FLAG_Z = res;
  20421.         FLAG_V = VFLAG_CLEAR;
  20422.         FLAG_C = CFLAG_CLEAR;
  20423. }
  20424.  
  20425.  
  20426. void m68k_op_move_32_d_pi(void)
  20427. {
  20428.         uint res = OPER_AY_PI_32();
  20429.         uint* r_dst = &DX;
  20430.  
  20431.         *r_dst = res;
  20432.  
  20433.         FLAG_N = NFLAG_32(res);
  20434.         FLAG_Z = res;
  20435.         FLAG_V = VFLAG_CLEAR;
  20436.         FLAG_C = CFLAG_CLEAR;
  20437. }
  20438.  
  20439.  
  20440. void m68k_op_move_32_d_pd(void)
  20441. {
  20442.         uint res = OPER_AY_PD_32();
  20443.         uint* r_dst = &DX;
  20444.  
  20445.         *r_dst = res;
  20446.  
  20447.         FLAG_N = NFLAG_32(res);
  20448.         FLAG_Z = res;
  20449.         FLAG_V = VFLAG_CLEAR;
  20450.         FLAG_C = CFLAG_CLEAR;
  20451. }
  20452.  
  20453.  
  20454. void m68k_op_move_32_d_di(void)
  20455. {
  20456.         uint res = OPER_AY_DI_32();
  20457.         uint* r_dst = &DX;
  20458.  
  20459.         *r_dst = res;
  20460.  
  20461.         FLAG_N = NFLAG_32(res);
  20462.         FLAG_Z = res;
  20463.         FLAG_V = VFLAG_CLEAR;
  20464.         FLAG_C = CFLAG_CLEAR;
  20465. }
  20466.  
  20467.  
  20468. void m68k_op_move_32_d_ix(void)
  20469. {
  20470.         uint res = OPER_AY_IX_32();
  20471.         uint* r_dst = &DX;
  20472.  
  20473.         *r_dst = res;
  20474.  
  20475.         FLAG_N = NFLAG_32(res);
  20476.         FLAG_Z = res;
  20477.         FLAG_V = VFLAG_CLEAR;
  20478.         FLAG_C = CFLAG_CLEAR;
  20479. }
  20480.  
  20481.  
  20482. void m68k_op_move_32_d_aw(void)
  20483. {
  20484.         uint res = OPER_AW_32();
  20485.         uint* r_dst = &DX;
  20486.  
  20487.         *r_dst = res;
  20488.  
  20489.         FLAG_N = NFLAG_32(res);
  20490.         FLAG_Z = res;
  20491.         FLAG_V = VFLAG_CLEAR;
  20492.         FLAG_C = CFLAG_CLEAR;
  20493. }
  20494.  
  20495.  
  20496. void m68k_op_move_32_d_al(void)
  20497. {
  20498.         uint res = OPER_AL_32();
  20499.         uint* r_dst = &DX;
  20500.  
  20501.         *r_dst = res;
  20502.  
  20503.         FLAG_N = NFLAG_32(res);
  20504.         FLAG_Z = res;
  20505.         FLAG_V = VFLAG_CLEAR;
  20506.         FLAG_C = CFLAG_CLEAR;
  20507. }
  20508.  
  20509.  
  20510. void m68k_op_move_32_d_pcdi(void)
  20511. {
  20512.         uint res = OPER_PCDI_32();
  20513.         uint* r_dst = &DX;
  20514.  
  20515.         *r_dst = res;
  20516.  
  20517.         FLAG_N = NFLAG_32(res);
  20518.         FLAG_Z = res;
  20519.         FLAG_V = VFLAG_CLEAR;
  20520.         FLAG_C = CFLAG_CLEAR;
  20521. }
  20522.  
  20523.  
  20524. void m68k_op_move_32_d_pcix(void)
  20525. {
  20526.         uint res = OPER_PCIX_32();
  20527.         uint* r_dst = &DX;
  20528.  
  20529.         *r_dst = res;
  20530.  
  20531.         FLAG_N = NFLAG_32(res);
  20532.         FLAG_Z = res;
  20533.         FLAG_V = VFLAG_CLEAR;
  20534.         FLAG_C = CFLAG_CLEAR;
  20535. }
  20536.  
  20537.  
  20538. void m68k_op_move_32_d_i(void)
  20539. {
  20540.         uint res = OPER_I_32();
  20541.         uint* r_dst = &DX;
  20542.  
  20543.         *r_dst = res;
  20544.  
  20545.         FLAG_N = NFLAG_32(res);
  20546.         FLAG_Z = res;
  20547.         FLAG_V = VFLAG_CLEAR;
  20548.         FLAG_C = CFLAG_CLEAR;
  20549. }
  20550.  
  20551.  
  20552. void m68k_op_move_32_ai_d(void)
  20553. {
  20554.         uint res = DY;
  20555.         uint ea = EA_AX_AI_32();
  20556.  
  20557.         m68ki_write_32(ea, res);
  20558.  
  20559.         FLAG_N = NFLAG_32(res);
  20560.         FLAG_Z = res;
  20561.         FLAG_V = VFLAG_CLEAR;
  20562.         FLAG_C = CFLAG_CLEAR;
  20563. }
  20564.  
  20565.  
  20566. void m68k_op_move_32_ai_a(void)
  20567. {
  20568.         uint res = AY;
  20569.         uint ea = EA_AX_AI_32();
  20570.  
  20571.         m68ki_write_32(ea, res);
  20572.  
  20573.         FLAG_N = NFLAG_32(res);
  20574.         FLAG_Z = res;
  20575.         FLAG_V = VFLAG_CLEAR;
  20576.         FLAG_C = CFLAG_CLEAR;
  20577. }
  20578.  
  20579.  
  20580. void m68k_op_move_32_ai_ai(void)
  20581. {
  20582.         uint res = OPER_AY_AI_32();
  20583.         uint ea = EA_AX_AI_32();
  20584.  
  20585.         m68ki_write_32(ea, res);
  20586.  
  20587.         FLAG_N = NFLAG_32(res);
  20588.         FLAG_Z = res;
  20589.         FLAG_V = VFLAG_CLEAR;
  20590.         FLAG_C = CFLAG_CLEAR;
  20591. }
  20592.  
  20593.  
  20594. void m68k_op_move_32_ai_pi(void)
  20595. {
  20596.         uint res = OPER_AY_PI_32();
  20597.         uint ea = EA_AX_AI_32();
  20598.  
  20599.         m68ki_write_32(ea, res);
  20600.  
  20601.         FLAG_N = NFLAG_32(res);
  20602.         FLAG_Z = res;
  20603.         FLAG_V = VFLAG_CLEAR;
  20604.         FLAG_C = CFLAG_CLEAR;
  20605. }
  20606.  
  20607.  
  20608. void m68k_op_move_32_ai_pd(void)
  20609. {
  20610.         uint res = OPER_AY_PD_32();
  20611.         uint ea = EA_AX_AI_32();
  20612.  
  20613.         m68ki_write_32(ea, res);
  20614.  
  20615.         FLAG_N = NFLAG_32(res);
  20616.         FLAG_Z = res;
  20617.         FLAG_V = VFLAG_CLEAR;
  20618.         FLAG_C = CFLAG_CLEAR;
  20619. }
  20620.  
  20621.  
  20622. void m68k_op_move_32_ai_di(void)
  20623. {
  20624.         uint res = OPER_AY_DI_32();
  20625.         uint ea = EA_AX_AI_32();
  20626.  
  20627.         m68ki_write_32(ea, res);
  20628.  
  20629.         FLAG_N = NFLAG_32(res);
  20630.         FLAG_Z = res;
  20631.         FLAG_V = VFLAG_CLEAR;
  20632.         FLAG_C = CFLAG_CLEAR;
  20633. }
  20634.  
  20635.  
  20636. void m68k_op_move_32_ai_ix(void)
  20637. {
  20638.         uint res = OPER_AY_IX_32();
  20639.         uint ea = EA_AX_AI_32();
  20640.  
  20641.         m68ki_write_32(ea, res);
  20642.  
  20643.         FLAG_N = NFLAG_32(res);
  20644.         FLAG_Z = res;
  20645.         FLAG_V = VFLAG_CLEAR;
  20646.         FLAG_C = CFLAG_CLEAR;
  20647. }
  20648.  
  20649.  
  20650. void m68k_op_move_32_ai_aw(void)
  20651. {
  20652.         uint res = OPER_AW_32();
  20653.         uint ea = EA_AX_AI_32();
  20654.  
  20655.         m68ki_write_32(ea, res);
  20656.  
  20657.         FLAG_N = NFLAG_32(res);
  20658.         FLAG_Z = res;
  20659.         FLAG_V = VFLAG_CLEAR;
  20660.         FLAG_C = CFLAG_CLEAR;
  20661. }
  20662.  
  20663.  
  20664. void m68k_op_move_32_ai_al(void)
  20665. {
  20666.         uint res = OPER_AL_32();
  20667.         uint ea = EA_AX_AI_32();
  20668.  
  20669.         m68ki_write_32(ea, res);
  20670.  
  20671.         FLAG_N = NFLAG_32(res);
  20672.         FLAG_Z = res;
  20673.         FLAG_V = VFLAG_CLEAR;
  20674.         FLAG_C = CFLAG_CLEAR;
  20675. }
  20676.  
  20677.  
  20678. void m68k_op_move_32_ai_pcdi(void)
  20679. {
  20680.         uint res = OPER_PCDI_32();
  20681.         uint ea = EA_AX_AI_32();
  20682.  
  20683.         m68ki_write_32(ea, res);
  20684.  
  20685.         FLAG_N = NFLAG_32(res);
  20686.         FLAG_Z = res;
  20687.         FLAG_V = VFLAG_CLEAR;
  20688.         FLAG_C = CFLAG_CLEAR;
  20689. }
  20690.  
  20691.  
  20692. void m68k_op_move_32_ai_pcix(void)
  20693. {
  20694.         uint res = OPER_PCIX_32();
  20695.         uint ea = EA_AX_AI_32();
  20696.  
  20697.         m68ki_write_32(ea, res);
  20698.  
  20699.         FLAG_N = NFLAG_32(res);
  20700.         FLAG_Z = res;
  20701.         FLAG_V = VFLAG_CLEAR;
  20702.         FLAG_C = CFLAG_CLEAR;
  20703. }
  20704.  
  20705.  
  20706. void m68k_op_move_32_ai_i(void)
  20707. {
  20708.         uint res = OPER_I_32();
  20709.         uint ea = EA_AX_AI_32();
  20710.  
  20711.         m68ki_write_32(ea, res);
  20712.  
  20713.         FLAG_N = NFLAG_32(res);
  20714.         FLAG_Z = res;
  20715.         FLAG_V = VFLAG_CLEAR;
  20716.         FLAG_C = CFLAG_CLEAR;
  20717. }
  20718.  
  20719.  
  20720. void m68k_op_move_32_pi_d(void)
  20721. {
  20722.         uint res = DY;
  20723.         uint ea = EA_AX_PI_32();
  20724.  
  20725.         m68ki_write_32(ea, res);
  20726.  
  20727.         FLAG_N = NFLAG_32(res);
  20728.         FLAG_Z = res;
  20729.         FLAG_V = VFLAG_CLEAR;
  20730.         FLAG_C = CFLAG_CLEAR;
  20731. }
  20732.  
  20733.  
  20734. void m68k_op_move_32_pi_a(void)
  20735. {
  20736.         uint res = AY;
  20737.         uint ea = EA_AX_PI_32();
  20738.  
  20739.         m68ki_write_32(ea, res);
  20740.  
  20741.         FLAG_N = NFLAG_32(res);
  20742.         FLAG_Z = res;
  20743.         FLAG_V = VFLAG_CLEAR;
  20744.         FLAG_C = CFLAG_CLEAR;
  20745. }
  20746.  
  20747.  
  20748. void m68k_op_move_32_pi_ai(void)
  20749. {
  20750.         uint res = OPER_AY_AI_32();
  20751.         uint ea = EA_AX_PI_32();
  20752.  
  20753.         m68ki_write_32(ea, res);
  20754.  
  20755.         FLAG_N = NFLAG_32(res);
  20756.         FLAG_Z = res;
  20757.         FLAG_V = VFLAG_CLEAR;
  20758.         FLAG_C = CFLAG_CLEAR;
  20759. }
  20760.  
  20761.  
  20762. void m68k_op_move_32_pi_pi(void)
  20763. {
  20764.         uint res = OPER_AY_PI_32();
  20765.         uint ea = EA_AX_PI_32();
  20766.  
  20767.         m68ki_write_32(ea, res);
  20768.  
  20769.         FLAG_N = NFLAG_32(res);
  20770.         FLAG_Z = res;
  20771.         FLAG_V = VFLAG_CLEAR;
  20772.         FLAG_C = CFLAG_CLEAR;
  20773. }
  20774.  
  20775.  
  20776. void m68k_op_move_32_pi_pd(void)
  20777. {
  20778.         uint res = OPER_AY_PD_32();
  20779.         uint ea = EA_AX_PI_32();
  20780.  
  20781.         m68ki_write_32(ea, res);
  20782.  
  20783.         FLAG_N = NFLAG_32(res);
  20784.         FLAG_Z = res;
  20785.         FLAG_V = VFLAG_CLEAR;
  20786.         FLAG_C = CFLAG_CLEAR;
  20787. }
  20788.  
  20789.  
  20790. void m68k_op_move_32_pi_di(void)
  20791. {
  20792.         uint res = OPER_AY_DI_32();
  20793.         uint ea = EA_AX_PI_32();
  20794.  
  20795.         m68ki_write_32(ea, res);
  20796.  
  20797.         FLAG_N = NFLAG_32(res);
  20798.         FLAG_Z = res;
  20799.         FLAG_V = VFLAG_CLEAR;
  20800.         FLAG_C = CFLAG_CLEAR;
  20801. }
  20802.  
  20803.  
  20804. void m68k_op_move_32_pi_ix(void)
  20805. {
  20806.         uint res = OPER_AY_IX_32();
  20807.         uint ea = EA_AX_PI_32();
  20808.  
  20809.         m68ki_write_32(ea, res);
  20810.  
  20811.         FLAG_N = NFLAG_32(res);
  20812.         FLAG_Z = res;
  20813.         FLAG_V = VFLAG_CLEAR;
  20814.         FLAG_C = CFLAG_CLEAR;
  20815. }
  20816.  
  20817.  
  20818. void m68k_op_move_32_pi_aw(void)
  20819. {
  20820.         uint res = OPER_AW_32();
  20821.         uint ea = EA_AX_PI_32();
  20822.  
  20823.         m68ki_write_32(ea, res);
  20824.  
  20825.         FLAG_N = NFLAG_32(res);
  20826.         FLAG_Z = res;
  20827.         FLAG_V = VFLAG_CLEAR;
  20828.         FLAG_C = CFLAG_CLEAR;
  20829. }
  20830.  
  20831.  
  20832. void m68k_op_move_32_pi_al(void)
  20833. {
  20834.         uint res = OPER_AL_32();
  20835.         uint ea = EA_AX_PI_32();
  20836.  
  20837.         m68ki_write_32(ea, res);
  20838.  
  20839.         FLAG_N = NFLAG_32(res);
  20840.         FLAG_Z = res;
  20841.         FLAG_V = VFLAG_CLEAR;
  20842.         FLAG_C = CFLAG_CLEAR;
  20843. }
  20844.  
  20845.  
  20846. void m68k_op_move_32_pi_pcdi(void)
  20847. {
  20848.         uint res = OPER_PCDI_32();
  20849.         uint ea = EA_AX_PI_32();
  20850.  
  20851.         m68ki_write_32(ea, res);
  20852.  
  20853.         FLAG_N = NFLAG_32(res);
  20854.         FLAG_Z = res;
  20855.         FLAG_V = VFLAG_CLEAR;
  20856.         FLAG_C = CFLAG_CLEAR;
  20857. }
  20858.  
  20859.  
  20860. void m68k_op_move_32_pi_pcix(void)
  20861. {
  20862.         uint res = OPER_PCIX_32();
  20863.         uint ea = EA_AX_PI_32();
  20864.  
  20865.         m68ki_write_32(ea, res);
  20866.  
  20867.         FLAG_N = NFLAG_32(res);
  20868.         FLAG_Z = res;
  20869.         FLAG_V = VFLAG_CLEAR;
  20870.         FLAG_C = CFLAG_CLEAR;
  20871. }
  20872.  
  20873.  
  20874. void m68k_op_move_32_pi_i(void)
  20875. {
  20876.         uint res = OPER_I_32();
  20877.         uint ea = EA_AX_PI_32();
  20878.  
  20879.         m68ki_write_32(ea, res);
  20880.  
  20881.         FLAG_N = NFLAG_32(res);
  20882.         FLAG_Z = res;
  20883.         FLAG_V = VFLAG_CLEAR;
  20884.         FLAG_C = CFLAG_CLEAR;
  20885. }
  20886.  
  20887.  
  20888. void m68k_op_move_32_pd_d(void)
  20889. {
  20890.         uint res = DY;
  20891.         uint ea = EA_AX_PD_32();
  20892.  
  20893.         m68ki_write_16(ea+2, res & 0xFFFF );
  20894.         m68ki_write_16(ea, (res >> 16) & 0xFFFF );
  20895.  
  20896.         FLAG_N = NFLAG_32(res);
  20897.         FLAG_Z = res;
  20898.         FLAG_V = VFLAG_CLEAR;
  20899.         FLAG_C = CFLAG_CLEAR;
  20900. }
  20901.  
  20902.  
  20903. void m68k_op_move_32_pd_a(void)
  20904. {
  20905.         uint res = AY;
  20906.         uint ea = EA_AX_PD_32();
  20907.  
  20908.         m68ki_write_16(ea+2, res & 0xFFFF );
  20909.         m68ki_write_16(ea, (res >> 16) & 0xFFFF );
  20910.  
  20911.         FLAG_N = NFLAG_32(res);
  20912.         FLAG_Z = res;
  20913.         FLAG_V = VFLAG_CLEAR;
  20914.         FLAG_C = CFLAG_CLEAR;
  20915. }
  20916.  
  20917.  
  20918. void m68k_op_move_32_pd_ai(void)
  20919. {
  20920.         uint res = OPER_AY_AI_32();
  20921.         uint ea = EA_AX_PD_32();
  20922.  
  20923.         m68ki_write_16(ea+2, res & 0xFFFF );
  20924.         m68ki_write_16(ea, (res >> 16) & 0xFFFF );
  20925.  
  20926.         FLAG_N = NFLAG_32(res);
  20927.         FLAG_Z = res;
  20928.         FLAG_V = VFLAG_CLEAR;
  20929.         FLAG_C = CFLAG_CLEAR;
  20930. }
  20931.  
  20932.  
  20933. void m68k_op_move_32_pd_pi(void)
  20934. {
  20935.         uint res = OPER_AY_PI_32();
  20936.         uint ea = EA_AX_PD_32();
  20937.  
  20938.         m68ki_write_16(ea+2, res & 0xFFFF );
  20939.         m68ki_write_16(ea, (res >> 16) & 0xFFFF );
  20940.  
  20941.         FLAG_N = NFLAG_32(res);
  20942.         FLAG_Z = res;
  20943.         FLAG_V = VFLAG_CLEAR;
  20944.         FLAG_C = CFLAG_CLEAR;
  20945. }
  20946.  
  20947.  
  20948. void m68k_op_move_32_pd_pd(void)
  20949. {
  20950.         uint res = OPER_AY_PD_32();
  20951.         uint ea = EA_AX_PD_32();
  20952.  
  20953.         m68ki_write_16(ea+2, res & 0xFFFF );
  20954.         m68ki_write_16(ea, (res >> 16) & 0xFFFF );
  20955.  
  20956.         FLAG_N = NFLAG_32(res);
  20957.         FLAG_Z = res;
  20958.         FLAG_V = VFLAG_CLEAR;
  20959.         FLAG_C = CFLAG_CLEAR;
  20960. }
  20961.  
  20962.  
  20963. void m68k_op_move_32_pd_di(void)
  20964. {
  20965.         uint res = OPER_AY_DI_32();
  20966.         uint ea = EA_AX_PD_32();
  20967.  
  20968.         m68ki_write_16(ea+2, res & 0xFFFF );
  20969.         m68ki_write_16(ea, (res >> 16) & 0xFFFF );
  20970.  
  20971.         FLAG_N = NFLAG_32(res);
  20972.         FLAG_Z = res;
  20973.         FLAG_V = VFLAG_CLEAR;
  20974.         FLAG_C = CFLAG_CLEAR;
  20975. }
  20976.  
  20977.  
  20978. void m68k_op_move_32_pd_ix(void)
  20979. {
  20980.         uint res = OPER_AY_IX_32();
  20981.         uint ea = EA_AX_PD_32();
  20982.  
  20983.         m68ki_write_16(ea+2, res & 0xFFFF );
  20984.         m68ki_write_16(ea, (res >> 16) & 0xFFFF );
  20985.  
  20986.         FLAG_N = NFLAG_32(res);
  20987.         FLAG_Z = res;
  20988.         FLAG_V = VFLAG_CLEAR;
  20989.         FLAG_C = CFLAG_CLEAR;
  20990. }
  20991.  
  20992.  
  20993. void m68k_op_move_32_pd_aw(void)
  20994. {
  20995.         uint res = OPER_AW_32();
  20996.         uint ea = EA_AX_PD_32();
  20997.  
  20998.         m68ki_write_16(ea+2, res & 0xFFFF );
  20999.         m68ki_write_16(ea, (res >> 16) & 0xFFFF );
  21000.  
  21001.         FLAG_N = NFLAG_32(res);
  21002.         FLAG_Z = res;
  21003.         FLAG_V = VFLAG_CLEAR;
  21004.         FLAG_C = CFLAG_CLEAR;
  21005. }
  21006.  
  21007.  
  21008. void m68k_op_move_32_pd_al(void)
  21009. {
  21010.         uint res = OPER_AL_32();
  21011.         uint ea = EA_AX_PD_32();
  21012.  
  21013.         m68ki_write_16(ea+2, res & 0xFFFF );
  21014.         m68ki_write_16(ea, (res >> 16) & 0xFFFF );
  21015.  
  21016.         FLAG_N = NFLAG_32(res);
  21017.         FLAG_Z = res;
  21018.         FLAG_V = VFLAG_CLEAR;
  21019.         FLAG_C = CFLAG_CLEAR;
  21020. }
  21021.  
  21022.  
  21023. void m68k_op_move_32_pd_pcdi(void)
  21024. {
  21025.         uint res = OPER_PCDI_32();
  21026.         uint ea = EA_AX_PD_32();
  21027.  
  21028.         m68ki_write_16(ea+2, res & 0xFFFF );
  21029.         m68ki_write_16(ea, (res >> 16) & 0xFFFF );
  21030.  
  21031.         FLAG_N = NFLAG_32(res);
  21032.         FLAG_Z = res;
  21033.         FLAG_V = VFLAG_CLEAR;
  21034.         FLAG_C = CFLAG_CLEAR;
  21035. }
  21036.  
  21037.  
  21038. void m68k_op_move_32_pd_pcix(void)
  21039. {
  21040.         uint res = OPER_PCIX_32();
  21041.         uint ea = EA_AX_PD_32();
  21042.  
  21043.         m68ki_write_16(ea+2, res & 0xFFFF );
  21044.         m68ki_write_16(ea, (res >> 16) & 0xFFFF );
  21045.  
  21046.         FLAG_N = NFLAG_32(res);
  21047.         FLAG_Z = res;
  21048.         FLAG_V = VFLAG_CLEAR;
  21049.         FLAG_C = CFLAG_CLEAR;
  21050. }
  21051.  
  21052.  
  21053. void m68k_op_move_32_pd_i(void)
  21054. {
  21055.         uint res = OPER_I_32();
  21056.         uint ea = EA_AX_PD_32();
  21057.  
  21058.         m68ki_write_16(ea+2, res & 0xFFFF );
  21059.         m68ki_write_16(ea, (res >> 16) & 0xFFFF );
  21060.  
  21061.         FLAG_N = NFLAG_32(res);
  21062.         FLAG_Z = res;
  21063.         FLAG_V = VFLAG_CLEAR;
  21064.         FLAG_C = CFLAG_CLEAR;
  21065. }
  21066.  
  21067.  
  21068. void m68k_op_move_32_di_d(void)
  21069. {
  21070.         uint res = DY;
  21071.         uint ea = EA_AX_DI_32();
  21072.  
  21073.         m68ki_write_32(ea, res);
  21074.  
  21075.         FLAG_N = NFLAG_32(res);
  21076.         FLAG_Z = res;
  21077.         FLAG_V = VFLAG_CLEAR;
  21078.         FLAG_C = CFLAG_CLEAR;
  21079. }
  21080.  
  21081.  
  21082. void m68k_op_move_32_di_a(void)
  21083. {
  21084.         uint res = AY;
  21085.         uint ea = EA_AX_DI_32();
  21086.  
  21087.         m68ki_write_32(ea, res);
  21088.  
  21089.         FLAG_N = NFLAG_32(res);
  21090.         FLAG_Z = res;
  21091.         FLAG_V = VFLAG_CLEAR;
  21092.         FLAG_C = CFLAG_CLEAR;
  21093. }
  21094.  
  21095.  
  21096. void m68k_op_move_32_di_ai(void)
  21097. {
  21098.         uint res = OPER_AY_AI_32();
  21099.         uint ea = EA_AX_DI_32();
  21100.  
  21101.         m68ki_write_32(ea, res);
  21102.  
  21103.         FLAG_N = NFLAG_32(res);
  21104.         FLAG_Z = res;
  21105.         FLAG_V = VFLAG_CLEAR;
  21106.         FLAG_C = CFLAG_CLEAR;
  21107. }
  21108.  
  21109.  
  21110. void m68k_op_move_32_di_pi(void)
  21111. {
  21112.         uint res = OPER_AY_PI_32();
  21113.         uint ea = EA_AX_DI_32();
  21114.  
  21115.         m68ki_write_32(ea, res);
  21116.  
  21117.         FLAG_N = NFLAG_32(res);
  21118.         FLAG_Z = res;
  21119.         FLAG_V = VFLAG_CLEAR;
  21120.         FLAG_C = CFLAG_CLEAR;
  21121. }
  21122.  
  21123.  
  21124. void m68k_op_move_32_di_pd(void)
  21125. {
  21126.         uint res = OPER_AY_PD_32();
  21127.         uint ea = EA_AX_DI_32();
  21128.  
  21129.         m68ki_write_32(ea, res);
  21130.  
  21131.         FLAG_N = NFLAG_32(res);
  21132.         FLAG_Z = res;
  21133.         FLAG_V = VFLAG_CLEAR;
  21134.         FLAG_C = CFLAG_CLEAR;
  21135. }
  21136.  
  21137.  
  21138. void m68k_op_move_32_di_di(void)
  21139. {
  21140.         uint res = OPER_AY_DI_32();
  21141.         uint ea = EA_AX_DI_32();
  21142.  
  21143.         m68ki_write_32(ea, res);
  21144.  
  21145.         FLAG_N = NFLAG_32(res);
  21146.         FLAG_Z = res;
  21147.         FLAG_V = VFLAG_CLEAR;
  21148.         FLAG_C = CFLAG_CLEAR;
  21149. }
  21150.  
  21151.  
  21152. void m68k_op_move_32_di_ix(void)
  21153. {
  21154.         uint res = OPER_AY_IX_32();
  21155.         uint ea = EA_AX_DI_32();
  21156.  
  21157.         m68ki_write_32(ea, res);
  21158.  
  21159.         FLAG_N = NFLAG_32(res);
  21160.         FLAG_Z = res;
  21161.         FLAG_V = VFLAG_CLEAR;
  21162.         FLAG_C = CFLAG_CLEAR;
  21163. }
  21164.  
  21165.  
  21166. void m68k_op_move_32_di_aw(void)
  21167. {
  21168.         uint res = OPER_AW_32();
  21169.         uint ea = EA_AX_DI_32();
  21170.  
  21171.         m68ki_write_32(ea, res);
  21172.  
  21173.         FLAG_N = NFLAG_32(res);
  21174.         FLAG_Z = res;
  21175.         FLAG_V = VFLAG_CLEAR;
  21176.         FLAG_C = CFLAG_CLEAR;
  21177. }
  21178.  
  21179.  
  21180. void m68k_op_move_32_di_al(void)
  21181. {
  21182.         uint res = OPER_AL_32();
  21183.         uint ea = EA_AX_DI_32();
  21184.  
  21185.         m68ki_write_32(ea, res);
  21186.  
  21187.         FLAG_N = NFLAG_32(res);
  21188.         FLAG_Z = res;
  21189.         FLAG_V = VFLAG_CLEAR;
  21190.         FLAG_C = CFLAG_CLEAR;
  21191. }
  21192.  
  21193.  
  21194. void m68k_op_move_32_di_pcdi(void)
  21195. {
  21196.         uint res = OPER_PCDI_32();
  21197.         uint ea = EA_AX_DI_32();
  21198.  
  21199.         m68ki_write_32(ea, res);
  21200.  
  21201.         FLAG_N = NFLAG_32(res);
  21202.         FLAG_Z = res;
  21203.         FLAG_V = VFLAG_CLEAR;
  21204.         FLAG_C = CFLAG_CLEAR;
  21205. }
  21206.  
  21207.  
  21208. void m68k_op_move_32_di_pcix(void)
  21209. {
  21210.         uint res = OPER_PCIX_32();
  21211.         uint ea = EA_AX_DI_32();
  21212.  
  21213.         m68ki_write_32(ea, res);
  21214.  
  21215.         FLAG_N = NFLAG_32(res);
  21216.         FLAG_Z = res;
  21217.         FLAG_V = VFLAG_CLEAR;
  21218.         FLAG_C = CFLAG_CLEAR;
  21219. }
  21220.  
  21221.  
  21222. void m68k_op_move_32_di_i(void)
  21223. {
  21224.         uint res = OPER_I_32();
  21225.         uint ea = EA_AX_DI_32();
  21226.  
  21227.         m68ki_write_32(ea, res);
  21228.  
  21229.         FLAG_N = NFLAG_32(res);
  21230.         FLAG_Z = res;
  21231.         FLAG_V = VFLAG_CLEAR;
  21232.         FLAG_C = CFLAG_CLEAR;
  21233. }
  21234.  
  21235.  
  21236. void m68k_op_move_32_ix_d(void)
  21237. {
  21238.         uint res = DY;
  21239.         uint ea = EA_AX_IX_32();
  21240.  
  21241.         m68ki_write_32(ea, res);
  21242.  
  21243.         FLAG_N = NFLAG_32(res);
  21244.         FLAG_Z = res;
  21245.         FLAG_V = VFLAG_CLEAR;
  21246.         FLAG_C = CFLAG_CLEAR;
  21247. }
  21248.  
  21249.  
  21250. void m68k_op_move_32_ix_a(void)
  21251. {
  21252.         uint res = AY;
  21253.         uint ea = EA_AX_IX_32();
  21254.  
  21255.         m68ki_write_32(ea, res);
  21256.  
  21257.         FLAG_N = NFLAG_32(res);
  21258.         FLAG_Z = res;
  21259.         FLAG_V = VFLAG_CLEAR;
  21260.         FLAG_C = CFLAG_CLEAR;
  21261. }
  21262.  
  21263.  
  21264. void m68k_op_move_32_ix_ai(void)
  21265. {
  21266.         uint res = OPER_AY_AI_32();
  21267.         uint ea = EA_AX_IX_32();
  21268.  
  21269.         m68ki_write_32(ea, res);
  21270.  
  21271.         FLAG_N = NFLAG_32(res);
  21272.         FLAG_Z = res;
  21273.         FLAG_V = VFLAG_CLEAR;
  21274.         FLAG_C = CFLAG_CLEAR;
  21275. }
  21276.  
  21277.  
  21278. void m68k_op_move_32_ix_pi(void)
  21279. {
  21280.         uint res = OPER_AY_PI_32();
  21281.         uint ea = EA_AX_IX_32();
  21282.  
  21283.         m68ki_write_32(ea, res);
  21284.  
  21285.         FLAG_N = NFLAG_32(res);
  21286.         FLAG_Z = res;
  21287.         FLAG_V = VFLAG_CLEAR;
  21288.         FLAG_C = CFLAG_CLEAR;
  21289. }
  21290.  
  21291.  
  21292. void m68k_op_move_32_ix_pd(void)
  21293. {
  21294.         uint res = OPER_AY_PD_32();
  21295.         uint ea = EA_AX_IX_32();
  21296.  
  21297.         m68ki_write_32(ea, res);
  21298.  
  21299.         FLAG_N = NFLAG_32(res);
  21300.         FLAG_Z = res;
  21301.         FLAG_V = VFLAG_CLEAR;
  21302.         FLAG_C = CFLAG_CLEAR;
  21303. }
  21304.  
  21305.  
  21306. void m68k_op_move_32_ix_di(void)
  21307. {
  21308.         uint res = OPER_AY_DI_32();
  21309.         uint ea = EA_AX_IX_32();
  21310.  
  21311.         m68ki_write_32(ea, res);
  21312.  
  21313.         FLAG_N = NFLAG_32(res);
  21314.         FLAG_Z = res;
  21315.         FLAG_V = VFLAG_CLEAR;
  21316.         FLAG_C = CFLAG_CLEAR;
  21317. }
  21318.  
  21319.  
  21320. void m68k_op_move_32_ix_ix(void)
  21321. {
  21322.         uint res = OPER_AY_IX_32();
  21323.         uint ea = EA_AX_IX_32();
  21324.  
  21325.         m68ki_write_32(ea, res);
  21326.  
  21327.         FLAG_N = NFLAG_32(res);
  21328.         FLAG_Z = res;
  21329.         FLAG_V = VFLAG_CLEAR;
  21330.         FLAG_C = CFLAG_CLEAR;
  21331. }
  21332.  
  21333.  
  21334. void m68k_op_move_32_ix_aw(void)
  21335. {
  21336.         uint res = OPER_AW_32();
  21337.         uint ea = EA_AX_IX_32();
  21338.  
  21339.         m68ki_write_32(ea, res);
  21340.  
  21341.         FLAG_N = NFLAG_32(res);
  21342.         FLAG_Z = res;
  21343.         FLAG_V = VFLAG_CLEAR;
  21344.         FLAG_C = CFLAG_CLEAR;
  21345. }
  21346.  
  21347.  
  21348. void m68k_op_move_32_ix_al(void)
  21349. {
  21350.         uint res = OPER_AL_32();
  21351.         uint ea = EA_AX_IX_32();
  21352.  
  21353.         m68ki_write_32(ea, res);
  21354.  
  21355.         FLAG_N = NFLAG_32(res);
  21356.         FLAG_Z = res;
  21357.         FLAG_V = VFLAG_CLEAR;
  21358.         FLAG_C = CFLAG_CLEAR;
  21359. }
  21360.  
  21361.  
  21362. void m68k_op_move_32_ix_pcdi(void)
  21363. {
  21364.         uint res = OPER_PCDI_32();
  21365.         uint ea = EA_AX_IX_32();
  21366.  
  21367.         m68ki_write_32(ea, res);
  21368.  
  21369.         FLAG_N = NFLAG_32(res);
  21370.         FLAG_Z = res;
  21371.         FLAG_V = VFLAG_CLEAR;
  21372.         FLAG_C = CFLAG_CLEAR;
  21373. }
  21374.  
  21375.  
  21376. void m68k_op_move_32_ix_pcix(void)
  21377. {
  21378.         uint res = OPER_PCIX_32();
  21379.         uint ea = EA_AX_IX_32();
  21380.  
  21381.         m68ki_write_32(ea, res);
  21382.  
  21383.         FLAG_N = NFLAG_32(res);
  21384.         FLAG_Z = res;
  21385.         FLAG_V = VFLAG_CLEAR;
  21386.         FLAG_C = CFLAG_CLEAR;
  21387. }
  21388.  
  21389.  
  21390. void m68k_op_move_32_ix_i(void)
  21391. {
  21392.         uint res = OPER_I_32();
  21393.         uint ea = EA_AX_IX_32();
  21394.  
  21395.         m68ki_write_32(ea, res);
  21396.  
  21397.         FLAG_N = NFLAG_32(res);
  21398.         FLAG_Z = res;
  21399.         FLAG_V = VFLAG_CLEAR;
  21400.         FLAG_C = CFLAG_CLEAR;
  21401. }
  21402.  
  21403.  
  21404. void m68k_op_move_32_aw_d(void)
  21405. {
  21406.         uint res = DY;
  21407.         uint ea = EA_AW_32();
  21408.  
  21409.         m68ki_write_32(ea, res);
  21410.  
  21411.         FLAG_N = NFLAG_32(res);
  21412.         FLAG_Z = res;
  21413.         FLAG_V = VFLAG_CLEAR;
  21414.         FLAG_C = CFLAG_CLEAR;
  21415. }
  21416.  
  21417.  
  21418. void m68k_op_move_32_aw_a(void)
  21419. {
  21420.         uint res = AY;
  21421.         uint ea = EA_AW_32();
  21422.  
  21423.         m68ki_write_32(ea, res);
  21424.  
  21425.         FLAG_N = NFLAG_32(res);
  21426.         FLAG_Z = res;
  21427.         FLAG_V = VFLAG_CLEAR;
  21428.         FLAG_C = CFLAG_CLEAR;
  21429. }
  21430.  
  21431.  
  21432. void m68k_op_move_32_aw_ai(void)
  21433. {
  21434.         uint res = OPER_AY_AI_32();
  21435.         uint ea = EA_AW_32();
  21436.  
  21437.         m68ki_write_32(ea, res);
  21438.  
  21439.         FLAG_N = NFLAG_32(res);
  21440.         FLAG_Z = res;
  21441.         FLAG_V = VFLAG_CLEAR;
  21442.         FLAG_C = CFLAG_CLEAR;
  21443. }
  21444.  
  21445.  
  21446. void m68k_op_move_32_aw_pi(void)
  21447. {
  21448.         uint res = OPER_AY_PI_32();
  21449.         uint ea = EA_AW_32();
  21450.  
  21451.         m68ki_write_32(ea, res);
  21452.  
  21453.         FLAG_N = NFLAG_32(res);
  21454.         FLAG_Z = res;
  21455.         FLAG_V = VFLAG_CLEAR;
  21456.         FLAG_C = CFLAG_CLEAR;
  21457. }
  21458.  
  21459.  
  21460. void m68k_op_move_32_aw_pd(void)
  21461. {
  21462.         uint res = OPER_AY_PD_32();
  21463.         uint ea = EA_AW_32();
  21464.  
  21465.         m68ki_write_32(ea, res);
  21466.  
  21467.         FLAG_N = NFLAG_32(res);
  21468.         FLAG_Z = res;
  21469.         FLAG_V = VFLAG_CLEAR;
  21470.         FLAG_C = CFLAG_CLEAR;
  21471. }
  21472.  
  21473.  
  21474. void m68k_op_move_32_aw_di(void)
  21475. {
  21476.         uint res = OPER_AY_DI_32();
  21477.         uint ea = EA_AW_32();
  21478.  
  21479.         m68ki_write_32(ea, res);
  21480.  
  21481.         FLAG_N = NFLAG_32(res);
  21482.         FLAG_Z = res;
  21483.         FLAG_V = VFLAG_CLEAR;
  21484.         FLAG_C = CFLAG_CLEAR;
  21485. }
  21486.  
  21487.  
  21488. void m68k_op_move_32_aw_ix(void)
  21489. {
  21490.         uint res = OPER_AY_IX_32();
  21491.         uint ea = EA_AW_32();
  21492.  
  21493.         m68ki_write_32(ea, res);
  21494.  
  21495.         FLAG_N = NFLAG_32(res);
  21496.         FLAG_Z = res;
  21497.         FLAG_V = VFLAG_CLEAR;
  21498.         FLAG_C = CFLAG_CLEAR;
  21499. }
  21500.  
  21501.  
  21502. void m68k_op_move_32_aw_aw(void)
  21503. {
  21504.         uint res = OPER_AW_32();
  21505.         uint ea = EA_AW_32();
  21506.  
  21507.         m68ki_write_32(ea, res);
  21508.  
  21509.         FLAG_N = NFLAG_32(res);
  21510.         FLAG_Z = res;
  21511.         FLAG_V = VFLAG_CLEAR;
  21512.         FLAG_C = CFLAG_CLEAR;
  21513. }
  21514.  
  21515.  
  21516. void m68k_op_move_32_aw_al(void)
  21517. {
  21518.         uint res = OPER_AL_32();
  21519.         uint ea = EA_AW_32();
  21520.  
  21521.         m68ki_write_32(ea, res);
  21522.  
  21523.         FLAG_N = NFLAG_32(res);
  21524.         FLAG_Z = res;
  21525.         FLAG_V = VFLAG_CLEAR;
  21526.         FLAG_C = CFLAG_CLEAR;
  21527. }
  21528.  
  21529.  
  21530. void m68k_op_move_32_aw_pcdi(void)
  21531. {
  21532.         uint res = OPER_PCDI_32();
  21533.         uint ea = EA_AW_32();
  21534.  
  21535.         m68ki_write_32(ea, res);
  21536.  
  21537.         FLAG_N = NFLAG_32(res);
  21538.         FLAG_Z = res;
  21539.         FLAG_V = VFLAG_CLEAR;
  21540.         FLAG_C = CFLAG_CLEAR;
  21541. }
  21542.  
  21543.  
  21544. void m68k_op_move_32_aw_pcix(void)
  21545. {
  21546.         uint res = OPER_PCIX_32();
  21547.         uint ea = EA_AW_32();
  21548.  
  21549.         m68ki_write_32(ea, res);
  21550.  
  21551.         FLAG_N = NFLAG_32(res);
  21552.         FLAG_Z = res;
  21553.         FLAG_V = VFLAG_CLEAR;
  21554.         FLAG_C = CFLAG_CLEAR;
  21555. }
  21556.  
  21557.  
  21558. void m68k_op_move_32_aw_i(void)
  21559. {
  21560.         uint res = OPER_I_32();
  21561.         uint ea = EA_AW_32();
  21562.  
  21563.         m68ki_write_32(ea, res);
  21564.  
  21565.         FLAG_N = NFLAG_32(res);
  21566.         FLAG_Z = res;
  21567.         FLAG_V = VFLAG_CLEAR;
  21568.         FLAG_C = CFLAG_CLEAR;
  21569. }
  21570.  
  21571.  
  21572. void m68k_op_move_32_al_d(void)
  21573. {
  21574.         uint res = DY;
  21575.         uint ea = EA_AL_32();
  21576.  
  21577.         m68ki_write_32(ea, res);
  21578.  
  21579.         FLAG_N = NFLAG_32(res);
  21580.         FLAG_Z = res;
  21581.         FLAG_V = VFLAG_CLEAR;
  21582.         FLAG_C = CFLAG_CLEAR;
  21583. }
  21584.  
  21585.  
  21586. void m68k_op_move_32_al_a(void)
  21587. {
  21588.         uint res = AY;
  21589.         uint ea = EA_AL_32();
  21590.  
  21591.         m68ki_write_32(ea, res);
  21592.  
  21593.         FLAG_N = NFLAG_32(res);
  21594.         FLAG_Z = res;
  21595.         FLAG_V = VFLAG_CLEAR;
  21596.         FLAG_C = CFLAG_CLEAR;
  21597. }
  21598.  
  21599.  
  21600. void m68k_op_move_32_al_ai(void)
  21601. {
  21602.         uint res = OPER_AY_AI_32();
  21603.         uint ea = EA_AL_32();
  21604.  
  21605.         m68ki_write_32(ea, res);
  21606.  
  21607.         FLAG_N = NFLAG_32(res);
  21608.         FLAG_Z = res;
  21609.         FLAG_V = VFLAG_CLEAR;
  21610.         FLAG_C = CFLAG_CLEAR;
  21611. }
  21612.  
  21613.  
  21614. void m68k_op_move_32_al_pi(void)
  21615. {
  21616.         uint res = OPER_AY_PI_32();
  21617.         uint ea = EA_AL_32();
  21618.  
  21619.         m68ki_write_32(ea, res);
  21620.  
  21621.         FLAG_N = NFLAG_32(res);
  21622.         FLAG_Z = res;
  21623.         FLAG_V = VFLAG_CLEAR;
  21624.         FLAG_C = CFLAG_CLEAR;
  21625. }
  21626.  
  21627.  
  21628. void m68k_op_move_32_al_pd(void)
  21629. {
  21630.         uint res = OPER_AY_PD_32();
  21631.         uint ea = EA_AL_32();
  21632.  
  21633.         m68ki_write_32(ea, res);
  21634.  
  21635.         FLAG_N = NFLAG_32(res);
  21636.         FLAG_Z = res;
  21637.         FLAG_V = VFLAG_CLEAR;
  21638.         FLAG_C = CFLAG_CLEAR;
  21639. }
  21640.  
  21641.  
  21642. void m68k_op_move_32_al_di(void)
  21643. {
  21644.         uint res = OPER_AY_DI_32();
  21645.         uint ea = EA_AL_32();
  21646.  
  21647.         m68ki_write_32(ea, res);
  21648.  
  21649.         FLAG_N = NFLAG_32(res);
  21650.         FLAG_Z = res;
  21651.         FLAG_V = VFLAG_CLEAR;
  21652.         FLAG_C = CFLAG_CLEAR;
  21653. }
  21654.  
  21655.  
  21656. void m68k_op_move_32_al_ix(void)
  21657. {
  21658.         uint res = OPER_AY_IX_32();
  21659.         uint ea = EA_AL_32();
  21660.  
  21661.         m68ki_write_32(ea, res);
  21662.  
  21663.         FLAG_N = NFLAG_32(res);
  21664.         FLAG_Z = res;
  21665.         FLAG_V = VFLAG_CLEAR;
  21666.         FLAG_C = CFLAG_CLEAR;
  21667. }
  21668.  
  21669.  
  21670. void m68k_op_move_32_al_aw(void)
  21671. {
  21672.         uint res = OPER_AW_32();
  21673.         uint ea = EA_AL_32();
  21674.  
  21675.         m68ki_write_32(ea, res);
  21676.  
  21677.         FLAG_N = NFLAG_32(res);
  21678.         FLAG_Z = res;
  21679.         FLAG_V = VFLAG_CLEAR;
  21680.         FLAG_C = CFLAG_CLEAR;
  21681. }
  21682.  
  21683.  
  21684. void m68k_op_move_32_al_al(void)
  21685. {
  21686.         uint res = OPER_AL_32();
  21687.         uint ea = EA_AL_32();
  21688.  
  21689.         m68ki_write_32(ea, res);
  21690.  
  21691.         FLAG_N = NFLAG_32(res);
  21692.         FLAG_Z = res;
  21693.         FLAG_V = VFLAG_CLEAR;
  21694.         FLAG_C = CFLAG_CLEAR;
  21695. }
  21696.  
  21697.  
  21698. void m68k_op_move_32_al_pcdi(void)
  21699. {
  21700.         uint res = OPER_PCDI_32();
  21701.         uint ea = EA_AL_32();
  21702.  
  21703.         m68ki_write_32(ea, res);
  21704.  
  21705.         FLAG_N = NFLAG_32(res);
  21706.         FLAG_Z = res;
  21707.         FLAG_V = VFLAG_CLEAR;
  21708.         FLAG_C = CFLAG_CLEAR;
  21709. }
  21710.  
  21711.  
  21712. void m68k_op_move_32_al_pcix(void)
  21713. {
  21714.         uint res = OPER_PCIX_32();
  21715.         uint ea = EA_AL_32();
  21716.  
  21717.         m68ki_write_32(ea, res);
  21718.  
  21719.         FLAG_N = NFLAG_32(res);
  21720.         FLAG_Z = res;
  21721.         FLAG_V = VFLAG_CLEAR;
  21722.         FLAG_C = CFLAG_CLEAR;
  21723. }
  21724.  
  21725.  
  21726. void m68k_op_move_32_al_i(void)
  21727. {
  21728.         uint res = OPER_I_32();
  21729.         uint ea = EA_AL_32();
  21730.  
  21731.         m68ki_write_32(ea, res);
  21732.  
  21733.         FLAG_N = NFLAG_32(res);
  21734.         FLAG_Z = res;
  21735.         FLAG_V = VFLAG_CLEAR;
  21736.         FLAG_C = CFLAG_CLEAR;
  21737. }
  21738.  
  21739.  
  21740. void m68k_op_movea_16_d(void)
  21741. {
  21742.         AX = MAKE_INT_16(DY);
  21743. }
  21744.  
  21745.  
  21746. void m68k_op_movea_16_a(void)
  21747. {
  21748.         AX = MAKE_INT_16(AY);
  21749. }
  21750.  
  21751.  
  21752. void m68k_op_movea_16_ai(void)
  21753. {
  21754.         AX = MAKE_INT_16(OPER_AY_AI_16());
  21755. }
  21756.  
  21757.  
  21758. void m68k_op_movea_16_pi(void)
  21759. {
  21760.         AX = MAKE_INT_16(OPER_AY_PI_16());
  21761. }
  21762.  
  21763.  
  21764. void m68k_op_movea_16_pd(void)
  21765. {
  21766.         AX = MAKE_INT_16(OPER_AY_PD_16());
  21767. }
  21768.  
  21769.  
  21770. void m68k_op_movea_16_di(void)
  21771. {
  21772.         AX = MAKE_INT_16(OPER_AY_DI_16());
  21773. }
  21774.  
  21775.  
  21776. void m68k_op_movea_16_ix(void)
  21777. {
  21778.         AX = MAKE_INT_16(OPER_AY_IX_16());
  21779. }
  21780.  
  21781.  
  21782. void m68k_op_movea_16_aw(void)
  21783. {
  21784.         AX = MAKE_INT_16(OPER_AW_16());
  21785. }
  21786.  
  21787.  
  21788. void m68k_op_movea_16_al(void)
  21789. {
  21790.         AX = MAKE_INT_16(OPER_AL_16());
  21791. }
  21792.  
  21793.  
  21794. void m68k_op_movea_16_pcdi(void)
  21795. {
  21796.         AX = MAKE_INT_16(OPER_PCDI_16());
  21797. }
  21798.  
  21799.  
  21800. void m68k_op_movea_16_pcix(void)
  21801. {
  21802.         AX = MAKE_INT_16(OPER_PCIX_16());
  21803. }
  21804.  
  21805.  
  21806. void m68k_op_movea_16_i(void)
  21807. {
  21808.         AX = MAKE_INT_16(OPER_I_16());
  21809. }
  21810.  
  21811.  
  21812. void m68k_op_movea_32_d(void)
  21813. {
  21814.         AX = DY;
  21815. }
  21816.  
  21817.  
  21818. void m68k_op_movea_32_a(void)
  21819. {
  21820.         AX = AY;
  21821. }
  21822.  
  21823.  
  21824. void m68k_op_movea_32_ai(void)
  21825. {
  21826.         AX = OPER_AY_AI_32();
  21827. }
  21828.  
  21829.  
  21830. void m68k_op_movea_32_pi(void)
  21831. {
  21832.         AX = OPER_AY_PI_32();
  21833. }
  21834.  
  21835.  
  21836. void m68k_op_movea_32_pd(void)
  21837. {
  21838.         AX = OPER_AY_PD_32();
  21839. }
  21840.  
  21841.  
  21842. void m68k_op_movea_32_di(void)
  21843. {
  21844.         AX = OPER_AY_DI_32();
  21845. }
  21846.  
  21847.  
  21848. void m68k_op_movea_32_ix(void)
  21849. {
  21850.         AX = OPER_AY_IX_32();
  21851. }
  21852.  
  21853.  
  21854. void m68k_op_movea_32_aw(void)
  21855. {
  21856.         AX = OPER_AW_32();
  21857. }
  21858.  
  21859.  
  21860. void m68k_op_movea_32_al(void)
  21861. {
  21862.         AX = OPER_AL_32();
  21863. }
  21864.  
  21865.  
  21866. void m68k_op_movea_32_pcdi(void)
  21867. {
  21868.         AX = OPER_PCDI_32();
  21869. }
  21870.  
  21871.  
  21872. void m68k_op_movea_32_pcix(void)
  21873. {
  21874.         AX = OPER_PCIX_32();
  21875. }
  21876.  
  21877.  
  21878. void m68k_op_movea_32_i(void)
  21879. {
  21880.         AX = OPER_I_32();
  21881. }
  21882.  
  21883.  
  21884. void m68k_op_move_16_frc_d(void)
  21885. {
  21886.         if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
  21887.         {
  21888.                 DY = MASK_OUT_BELOW_16(DY) | m68ki_get_ccr();
  21889.                 return;
  21890.         }
  21891.         m68ki_exception_illegal();
  21892. }
  21893.  
  21894.  
  21895. void m68k_op_move_16_frc_ai(void)
  21896. {
  21897.         if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
  21898.         {
  21899.                 m68ki_write_16(EA_AY_AI_16(), m68ki_get_ccr());
  21900.                 return;
  21901.         }
  21902.         m68ki_exception_illegal();
  21903. }
  21904.  
  21905.  
  21906. void m68k_op_move_16_frc_pi(void)
  21907. {
  21908.         if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
  21909.         {
  21910.                 m68ki_write_16(EA_AY_PI_16(), m68ki_get_ccr());
  21911.                 return;
  21912.         }
  21913.         m68ki_exception_illegal();
  21914. }
  21915.  
  21916.  
  21917. void m68k_op_move_16_frc_pd(void)
  21918. {
  21919.         if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
  21920.         {
  21921.                 m68ki_write_16(EA_AY_PD_16(), m68ki_get_ccr());
  21922.                 return;
  21923.         }
  21924.         m68ki_exception_illegal();
  21925. }
  21926.  
  21927.  
  21928. void m68k_op_move_16_frc_di(void)
  21929. {
  21930.         if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
  21931.         {
  21932.                 m68ki_write_16(EA_AY_DI_16(), m68ki_get_ccr());
  21933.                 return;
  21934.         }
  21935.         m68ki_exception_illegal();
  21936. }
  21937.  
  21938.  
  21939. void m68k_op_move_16_frc_ix(void)
  21940. {
  21941.         if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
  21942.         {
  21943.                 m68ki_write_16(EA_AY_IX_16(), m68ki_get_ccr());
  21944.                 return;
  21945.         }
  21946.         m68ki_exception_illegal();
  21947. }
  21948.  
  21949.  
  21950. void m68k_op_move_16_frc_aw(void)
  21951. {
  21952.         if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
  21953.         {
  21954.                 m68ki_write_16(EA_AW_16(), m68ki_get_ccr());
  21955.                 return;
  21956.         }
  21957.         m68ki_exception_illegal();
  21958. }
  21959.  
  21960.  
  21961. void m68k_op_move_16_frc_al(void)
  21962. {
  21963.         if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
  21964.         {
  21965.                 m68ki_write_16(EA_AL_16(), m68ki_get_ccr());
  21966.                 return;
  21967.         }
  21968.         m68ki_exception_illegal();
  21969. }
  21970.  
  21971.  
  21972. void m68k_op_move_16_toc_d(void)
  21973. {
  21974.         m68ki_set_ccr(DY);
  21975. }
  21976.  
  21977.  
  21978. void m68k_op_move_16_toc_ai(void)
  21979. {
  21980.         m68ki_set_ccr(OPER_AY_AI_16());
  21981. }
  21982.  
  21983.  
  21984. void m68k_op_move_16_toc_pi(void)
  21985. {
  21986.         m68ki_set_ccr(OPER_AY_PI_16());
  21987. }
  21988.  
  21989.  
  21990. void m68k_op_move_16_toc_pd(void)
  21991. {
  21992.         m68ki_set_ccr(OPER_AY_PD_16());
  21993. }
  21994.  
  21995.  
  21996. void m68k_op_move_16_toc_di(void)
  21997. {
  21998.         m68ki_set_ccr(OPER_AY_DI_16());
  21999. }
  22000.  
  22001.  
  22002. void m68k_op_move_16_toc_ix(void)
  22003. {
  22004.         m68ki_set_ccr(OPER_AY_IX_16());
  22005. }
  22006.  
  22007.  
  22008. void m68k_op_move_16_toc_aw(void)
  22009. {
  22010.         m68ki_set_ccr(OPER_AW_16());
  22011. }
  22012.  
  22013.  
  22014. void m68k_op_move_16_toc_al(void)
  22015. {
  22016.         m68ki_set_ccr(OPER_AL_16());
  22017. }
  22018.  
  22019.  
  22020. void m68k_op_move_16_toc_pcdi(void)
  22021. {
  22022.         m68ki_set_ccr(OPER_PCDI_16());
  22023. }
  22024.  
  22025.  
  22026. void m68k_op_move_16_toc_pcix(void)
  22027. {
  22028.         m68ki_set_ccr(OPER_PCIX_16());
  22029. }
  22030.  
  22031.  
  22032. void m68k_op_move_16_toc_i(void)
  22033. {
  22034.         m68ki_set_ccr(OPER_I_16());
  22035. }
  22036.  
  22037.  
  22038. void m68k_op_move_16_frs_d(void)
  22039. {
  22040.         if(CPU_TYPE_IS_000(CPU_TYPE) || FLAG_S) /* NS990408 */
  22041.         {
  22042.                 DY = MASK_OUT_BELOW_16(DY) | m68ki_get_sr();
  22043.                 return;
  22044.         }
  22045.         m68ki_exception_privilege_violation();
  22046. }
  22047.  
  22048.  
  22049. void m68k_op_move_16_frs_ai(void)
  22050. {
  22051.         if(CPU_TYPE_IS_000(CPU_TYPE) || FLAG_S) /* NS990408 */
  22052.         {
  22053.                 uint ea = EA_AY_AI_16();
  22054.                 m68ki_write_16(ea, m68ki_get_sr());
  22055.                 return;
  22056.         }
  22057.         m68ki_exception_privilege_violation();
  22058. }
  22059.  
  22060.  
  22061. void m68k_op_move_16_frs_pi(void)
  22062. {
  22063.         if(CPU_TYPE_IS_000(CPU_TYPE) || FLAG_S) /* NS990408 */
  22064.         {
  22065.                 uint ea = EA_AY_PI_16();
  22066.                 m68ki_write_16(ea, m68ki_get_sr());
  22067.                 return;
  22068.         }
  22069.         m68ki_exception_privilege_violation();
  22070. }
  22071.  
  22072.  
  22073. void m68k_op_move_16_frs_pd(void)
  22074. {
  22075.         if(CPU_TYPE_IS_000(CPU_TYPE) || FLAG_S) /* NS990408 */
  22076.         {
  22077.                 uint ea = EA_AY_PD_16();
  22078.                 m68ki_write_16(ea, m68ki_get_sr());
  22079.                 return;
  22080.         }
  22081.         m68ki_exception_privilege_violation();
  22082. }
  22083.  
  22084.  
  22085. void m68k_op_move_16_frs_di(void)
  22086. {
  22087.         if(CPU_TYPE_IS_000(CPU_TYPE) || FLAG_S) /* NS990408 */
  22088.         {
  22089.                 uint ea = EA_AY_DI_16();
  22090.                 m68ki_write_16(ea, m68ki_get_sr());
  22091.                 return;
  22092.         }
  22093.         m68ki_exception_privilege_violation();
  22094. }
  22095.  
  22096.  
  22097. void m68k_op_move_16_frs_ix(void)
  22098. {
  22099.         if(CPU_TYPE_IS_000(CPU_TYPE) || FLAG_S) /* NS990408 */
  22100.         {
  22101.                 uint ea = EA_AY_IX_16();
  22102.                 m68ki_write_16(ea, m68ki_get_sr());
  22103.                 return;
  22104.         }
  22105.         m68ki_exception_privilege_violation();
  22106. }
  22107.  
  22108.  
  22109. void m68k_op_move_16_frs_aw(void)
  22110. {
  22111.         if(CPU_TYPE_IS_000(CPU_TYPE) || FLAG_S) /* NS990408 */
  22112.         {
  22113.                 uint ea = EA_AW_16();
  22114.                 m68ki_write_16(ea, m68ki_get_sr());
  22115.                 return;
  22116.         }
  22117.         m68ki_exception_privilege_violation();
  22118. }
  22119.  
  22120.  
  22121. void m68k_op_move_16_frs_al(void)
  22122. {
  22123.         if(CPU_TYPE_IS_000(CPU_TYPE) || FLAG_S) /* NS990408 */
  22124.         {
  22125.                 uint ea = EA_AL_16();
  22126.                 m68ki_write_16(ea, m68ki_get_sr());
  22127.                 return;
  22128.         }
  22129.         m68ki_exception_privilege_violation();
  22130. }
  22131.  
  22132.  
  22133. void m68k_op_move_16_tos_d(void)
  22134. {
  22135.         if(FLAG_S)
  22136.         {
  22137.                 m68ki_set_sr(DY);
  22138.                 return;
  22139.         }
  22140.         m68ki_exception_privilege_violation();
  22141. }
  22142.  
  22143.  
  22144. void m68k_op_move_16_tos_ai(void)
  22145. {
  22146.         if(FLAG_S)
  22147.         {
  22148.                 uint new_sr = OPER_AY_AI_16();
  22149.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  22150.                 m68ki_set_sr(new_sr);
  22151.                 return;
  22152.         }
  22153.         m68ki_exception_privilege_violation();
  22154. }
  22155.  
  22156.  
  22157. void m68k_op_move_16_tos_pi(void)
  22158. {
  22159.         if(FLAG_S)
  22160.         {
  22161.                 uint new_sr = OPER_AY_PI_16();
  22162.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  22163.                 m68ki_set_sr(new_sr);
  22164.                 return;
  22165.         }
  22166.         m68ki_exception_privilege_violation();
  22167. }
  22168.  
  22169.  
  22170. void m68k_op_move_16_tos_pd(void)
  22171. {
  22172.         if(FLAG_S)
  22173.         {
  22174.                 uint new_sr = OPER_AY_PD_16();
  22175.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  22176.                 m68ki_set_sr(new_sr);
  22177.                 return;
  22178.         }
  22179.         m68ki_exception_privilege_violation();
  22180. }
  22181.  
  22182.  
  22183. void m68k_op_move_16_tos_di(void)
  22184. {
  22185.         if(FLAG_S)
  22186.         {
  22187.                 uint new_sr = OPER_AY_DI_16();
  22188.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  22189.                 m68ki_set_sr(new_sr);
  22190.                 return;
  22191.         }
  22192.         m68ki_exception_privilege_violation();
  22193. }
  22194.  
  22195.  
  22196. void m68k_op_move_16_tos_ix(void)
  22197. {
  22198.         if(FLAG_S)
  22199.         {
  22200.                 uint new_sr = OPER_AY_IX_16();
  22201.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  22202.                 m68ki_set_sr(new_sr);
  22203.                 return;
  22204.         }
  22205.         m68ki_exception_privilege_violation();
  22206. }
  22207.  
  22208.  
  22209. void m68k_op_move_16_tos_aw(void)
  22210. {
  22211.         if(FLAG_S)
  22212.         {
  22213.                 uint new_sr = OPER_AW_16();
  22214.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  22215.                 m68ki_set_sr(new_sr);
  22216.                 return;
  22217.         }
  22218.         m68ki_exception_privilege_violation();
  22219. }
  22220.  
  22221.  
  22222. void m68k_op_move_16_tos_al(void)
  22223. {
  22224.         if(FLAG_S)
  22225.         {
  22226.                 uint new_sr = OPER_AL_16();
  22227.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  22228.                 m68ki_set_sr(new_sr);
  22229.                 return;
  22230.         }
  22231.         m68ki_exception_privilege_violation();
  22232. }
  22233.  
  22234.  
  22235. void m68k_op_move_16_tos_pcdi(void)
  22236. {
  22237.         if(FLAG_S)
  22238.         {
  22239.                 uint new_sr = OPER_PCDI_16();
  22240.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  22241.                 m68ki_set_sr(new_sr);
  22242.                 return;
  22243.         }
  22244.         m68ki_exception_privilege_violation();
  22245. }
  22246.  
  22247.  
  22248. void m68k_op_move_16_tos_pcix(void)
  22249. {
  22250.         if(FLAG_S)
  22251.         {
  22252.                 uint new_sr = OPER_PCIX_16();
  22253.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  22254.                 m68ki_set_sr(new_sr);
  22255.                 return;
  22256.         }
  22257.         m68ki_exception_privilege_violation();
  22258. }
  22259.  
  22260.  
  22261. void m68k_op_move_16_tos_i(void)
  22262. {
  22263.         if(FLAG_S)
  22264.         {
  22265.                 uint new_sr = OPER_I_16();
  22266.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  22267.                 m68ki_set_sr(new_sr);
  22268.                 return;
  22269.         }
  22270.         m68ki_exception_privilege_violation();
  22271. }
  22272.  
  22273.  
  22274. void m68k_op_move_32_fru(void)
  22275. {
  22276.         if(FLAG_S)
  22277.         {
  22278.                 AY = REG_USP;
  22279.                 return;
  22280.         }
  22281.         m68ki_exception_privilege_violation();
  22282. }
  22283.  
  22284.  
  22285. void m68k_op_move_32_tou(void)
  22286. {
  22287.         if(FLAG_S)
  22288.         {
  22289.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  22290.                 REG_USP = AY;
  22291.                 return;
  22292.         }
  22293.         m68ki_exception_privilege_violation();
  22294. }
  22295.  
  22296.  
  22297. void m68k_op_movec_32_cr(void)
  22298. {
  22299.         if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
  22300.         {
  22301.                 if(FLAG_S)
  22302.                 {
  22303.                         uint word2 = OPER_I_16();
  22304.  
  22305.                         m68ki_trace_t0();                  /* auto-disable (see m68kcpu.h) */
  22306.                         switch (word2 & 0xfff)
  22307.                         {
  22308.                         case 0x000:                        /* SFC */
  22309.                                 REG_DA[(word2 >> 12) & 15] = REG_SFC;
  22310.                                 return;
  22311.                         case 0x001:                        /* DFC */
  22312.                                 REG_DA[(word2 >> 12) & 15] = REG_DFC;
  22313.                                 return;
  22314.                         case 0x002:                        /* CACR */
  22315.                                 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  22316.                                 {
  22317.                                         REG_DA[(word2 >> 12) & 15] = REG_CACR;
  22318.                                         return;
  22319.                                 }
  22320.                                 return;
  22321.                         case 0x800:                        /* USP */
  22322.                                 REG_DA[(word2 >> 12) & 15] = REG_USP;
  22323.                                 return;
  22324.                         case 0x801:                        /* VBR */
  22325.                                 REG_DA[(word2 >> 12) & 15] = REG_VBR;
  22326.                                 return;
  22327.                         case 0x802:                        /* CAAR */
  22328.                                 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  22329.                                 {
  22330.                                         REG_DA[(word2 >> 12) & 15] = REG_CAAR;
  22331.                                         return;
  22332.                                 }
  22333.                                 m68ki_exception_illegal();
  22334.                                 break;
  22335.                         case 0x803:                        /* MSP */
  22336.                                 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  22337.                                 {
  22338.                                         REG_DA[(word2 >> 12) & 15] = FLAG_M ? REG_SP : REG_MSP;
  22339.                                         return;
  22340.                                 }
  22341.                                 m68ki_exception_illegal();
  22342.                                 return;
  22343.                         case 0x804:                        /* ISP */
  22344.                                 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  22345.                                 {
  22346.                                         REG_DA[(word2 >> 12) & 15] = FLAG_M ? REG_ISP : REG_SP;
  22347.                                         return;
  22348.                                 }
  22349.                                 m68ki_exception_illegal();
  22350.                                 return;
  22351.                         case 0x003:                             /* TC */
  22352.                                 if(CPU_TYPE_IS_040_PLUS(CPU_TYPE))
  22353.                                 {
  22354.                                         /* TODO */
  22355.                                         return;
  22356.                                 }
  22357.                                 m68ki_exception_illegal();
  22358.                                 return;
  22359.                         case 0x004:                             /* ITT0 */
  22360.                                 if(CPU_TYPE_IS_040_PLUS(CPU_TYPE))
  22361.                                 {
  22362.                                         /* TODO */
  22363.                                         return;
  22364.                                 }
  22365.                                 m68ki_exception_illegal();
  22366.                                 return;
  22367.                         case 0x005:                             /* ITT1 */
  22368.                                 if(CPU_TYPE_IS_040_PLUS(CPU_TYPE))
  22369.                                 {
  22370.                                         /* TODO */
  22371.                                         return;
  22372.                                 }
  22373.                                 m68ki_exception_illegal();
  22374.                                 return;
  22375.                         case 0x006:                             /* DTT0 */
  22376.                                 if(CPU_TYPE_IS_040_PLUS(CPU_TYPE))
  22377.                                 {
  22378.                                         /* TODO */
  22379.                                         return;
  22380.                                 }
  22381.                                 m68ki_exception_illegal();
  22382.                                 return;
  22383.                         case 0x007:                             /* DTT1 */
  22384.                                 if(CPU_TYPE_IS_040_PLUS(CPU_TYPE))
  22385.                                 {
  22386.                                         /* TODO */
  22387.                                         return;
  22388.                                 }
  22389.                                 m68ki_exception_illegal();
  22390.                                 return;
  22391.                         case 0x805:                             /* MMUSR */
  22392.                                 if(CPU_TYPE_IS_040_PLUS(CPU_TYPE))
  22393.                                 {
  22394.                                         /* TODO */
  22395.                                         return;
  22396.                                 }
  22397.                                 m68ki_exception_illegal();
  22398.                                 return;
  22399.                         case 0x806:                             /* URP */
  22400.                                 if(CPU_TYPE_IS_040_PLUS(CPU_TYPE))
  22401.                                 {
  22402.                                         /* TODO */
  22403.                                         return;
  22404.                                 }
  22405.                                 m68ki_exception_illegal();
  22406.                                 return;
  22407.                         case 0x807:                             /* SRP */
  22408.                                 if(CPU_TYPE_IS_040_PLUS(CPU_TYPE))
  22409.                                 {
  22410.                                         /* TODO */
  22411.                                         return;
  22412.                                 }
  22413.                                 m68ki_exception_illegal();
  22414.                                 return;
  22415.                         default:
  22416.                                 m68ki_exception_illegal();
  22417.                                 return;
  22418.                         }
  22419.                 }
  22420.                 m68ki_exception_privilege_violation();
  22421.                 return;
  22422.         }
  22423.         m68ki_exception_illegal();
  22424. }
  22425.  
  22426.  
  22427. void m68k_op_movec_32_rc(void)
  22428. {
  22429.         if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
  22430.         {
  22431.                 if(FLAG_S)
  22432.                 {
  22433.                         uint word2 = OPER_I_16();
  22434.  
  22435.                         m68ki_trace_t0();                  /* auto-disable (see m68kcpu.h) */
  22436.                         switch (word2 & 0xfff)
  22437.                         {
  22438.                         case 0x000:                        /* SFC */
  22439.                                 REG_SFC = REG_DA[(word2 >> 12) & 15] & 7;
  22440.                                 return;
  22441.                         case 0x001:                        /* DFC */
  22442.                                 REG_DFC = REG_DA[(word2 >> 12) & 15] & 7;
  22443.                                 return;
  22444.                         case 0x002:                        /* CACR */
  22445.                                 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  22446.                                 {
  22447.                                         if (CPU_TYPE_IS_040_PLUS(CPU_TYPE))
  22448.                                         {
  22449.                                                 REG_CACR = REG_DA[(word2 >> 12) & 15];
  22450.                                         }
  22451.                                         else
  22452.                                         {
  22453.                                                 /* non 68040 can only set the lower 4 bits (C,CE,F,E) */
  22454.                                                 REG_CACR = REG_DA[(word2 >> 12) & 15] & 0x0f;
  22455.                                         }
  22456.                                         return;
  22457.                                 }
  22458.                                 m68ki_exception_illegal();
  22459.                                 return;
  22460.                         case 0x800:                        /* USP */
  22461.                                 REG_USP = REG_DA[(word2 >> 12) & 15];
  22462.                                 return;
  22463.                         case 0x801:                        /* VBR */
  22464.                                 REG_VBR = REG_DA[(word2 >> 12) & 15];
  22465.                                 return;
  22466.                         case 0x802:                        /* CAAR */
  22467.                                 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  22468.                                 {
  22469.                                         REG_CAAR = REG_DA[(word2 >> 12) & 15];
  22470.                                         return;
  22471.                                 }
  22472.                                 m68ki_exception_illegal();
  22473.                                 return;
  22474.                         case 0x803:                        /* MSP */
  22475.                                 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  22476.                                 {
  22477.                                         /* we are in supervisor mode so just check for M flag */
  22478.                                         if(!FLAG_M)
  22479.                                         {
  22480.                                                 REG_MSP = REG_DA[(word2 >> 12) & 15];
  22481.                                                 return;
  22482.                                         }
  22483.                                         REG_SP = REG_DA[(word2 >> 12) & 15];
  22484.                                         return;
  22485.                                 }
  22486.                                 m68ki_exception_illegal();
  22487.                                 return;
  22488.                         case 0x804:                        /* ISP */
  22489.                                 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  22490.                                 {
  22491.                                         if(!FLAG_M)
  22492.                                         {
  22493.                                                 REG_SP = REG_DA[(word2 >> 12) & 15];
  22494.                                                 return;
  22495.                                         }
  22496.                                         REG_ISP = REG_DA[(word2 >> 12) & 15];
  22497.                                         return;
  22498.                                 }
  22499.                                 m68ki_exception_illegal();
  22500.                                 return;
  22501.                         case 0x003:                     /* TC */
  22502.                                 if (CPU_TYPE_IS_040_PLUS(CPU_TYPE))
  22503.                                 {
  22504.                                         /* TODO */
  22505.                                         return;
  22506.                                 }
  22507.                                 m68ki_exception_illegal();
  22508.                                 return;
  22509.                         case 0x004:                     /* ITT0 */
  22510.                                 if (CPU_TYPE_IS_040_PLUS(CPU_TYPE))
  22511.                                 {
  22512.                                         /* TODO */
  22513.                                         return;
  22514.                                 }
  22515.                                 m68ki_exception_illegal();
  22516.                                 return;
  22517.                         case 0x005:                     /* ITT1 */
  22518.                                 if (CPU_TYPE_IS_040_PLUS(CPU_TYPE))
  22519.                                 {
  22520.                                         /* TODO */
  22521.                                         return;
  22522.                                 }
  22523.                                 m68ki_exception_illegal();
  22524.                                 return;
  22525.                         case 0x006:                     /* DTT0 */
  22526.                                 if (CPU_TYPE_IS_040_PLUS(CPU_TYPE))
  22527.                                 {
  22528.                                         /* TODO */
  22529.                                         return;
  22530.                                 }
  22531.                                 m68ki_exception_illegal();
  22532.                                 return;
  22533.                         case 0x007:                     /* DTT1 */
  22534.                                 if (CPU_TYPE_IS_040_PLUS(CPU_TYPE))
  22535.                                 {
  22536.                                         /* TODO */
  22537.                                         return;
  22538.                                 }
  22539.                                 m68ki_exception_illegal();
  22540.                                 return;
  22541.                         case 0x805:                     /* MMUSR */
  22542.                                 if (CPU_TYPE_IS_040_PLUS(CPU_TYPE))
  22543.                                 {
  22544.                                         /* TODO */
  22545.                                         return;
  22546.                                 }
  22547.                                 m68ki_exception_illegal();
  22548.                                 return;
  22549.                         case 0x806:                     /* URP */
  22550.                                 if (CPU_TYPE_IS_040_PLUS(CPU_TYPE))
  22551.                                 {
  22552.                                         /* TODO */
  22553.                                         return;
  22554.                                 }
  22555.                                 m68ki_exception_illegal();
  22556.                                 return;
  22557.                         case 0x807:                     /* SRP */
  22558.                                 if (CPU_TYPE_IS_040_PLUS(CPU_TYPE))
  22559.                                 {
  22560.                                         /* TODO */
  22561.                                         return;
  22562.                                 }
  22563.                                 m68ki_exception_illegal();
  22564.                                 return;
  22565.                         default:
  22566.                                 m68ki_exception_illegal();
  22567.                                 return;
  22568.                         }
  22569.                 }
  22570.                 m68ki_exception_privilege_violation();
  22571.                 return;
  22572.         }
  22573.         m68ki_exception_illegal();
  22574. }
  22575.  
  22576.  
  22577. void m68k_op_movem_16_re_pd(void)
  22578. {
  22579.         uint i = 0;
  22580.         uint register_list = OPER_I_16();
  22581.         uint ea = AY;
  22582.         uint count = 0;
  22583.  
  22584.         for(; i < 16; i++)
  22585.                 if(register_list & (1 << i))
  22586.                 {
  22587.                         ea -= 2;
  22588.                         m68ki_write_16(ea, MASK_OUT_ABOVE_16(REG_DA[15-i]));
  22589.                         count++;
  22590.                 }
  22591.         AY = ea;
  22592.  
  22593.         USE_CYCLES(count<<CYC_MOVEM_W);
  22594. }
  22595.  
  22596.  
  22597. void m68k_op_movem_16_re_ai(void)
  22598. {
  22599.         uint i = 0;
  22600.         uint register_list = OPER_I_16();
  22601.         uint ea = EA_AY_AI_16();
  22602.         uint count = 0;
  22603.  
  22604.         for(; i < 16; i++)
  22605.                 if(register_list & (1 << i))
  22606.                 {
  22607.                         m68ki_write_16(ea, MASK_OUT_ABOVE_16(REG_DA[i]));
  22608.                         ea += 2;
  22609.                         count++;
  22610.                 }
  22611.  
  22612.         USE_CYCLES(count<<CYC_MOVEM_W);
  22613. }
  22614.  
  22615.  
  22616. void m68k_op_movem_16_re_di(void)
  22617. {
  22618.         uint i = 0;
  22619.         uint register_list = OPER_I_16();
  22620.         uint ea = EA_AY_DI_16();
  22621.         uint count = 0;
  22622.  
  22623.         for(; i < 16; i++)
  22624.                 if(register_list & (1 << i))
  22625.                 {
  22626.                         m68ki_write_16(ea, MASK_OUT_ABOVE_16(REG_DA[i]));
  22627.                         ea += 2;
  22628.                         count++;
  22629.                 }
  22630.  
  22631.         USE_CYCLES(count<<CYC_MOVEM_W);
  22632. }
  22633.  
  22634.  
  22635. void m68k_op_movem_16_re_ix(void)
  22636. {
  22637.         uint i = 0;
  22638.         uint register_list = OPER_I_16();
  22639.         uint ea = EA_AY_IX_16();
  22640.         uint count = 0;
  22641.  
  22642.         for(; i < 16; i++)
  22643.                 if(register_list & (1 << i))
  22644.                 {
  22645.                         m68ki_write_16(ea, MASK_OUT_ABOVE_16(REG_DA[i]));
  22646.                         ea += 2;
  22647.                         count++;
  22648.                 }
  22649.  
  22650.         USE_CYCLES(count<<CYC_MOVEM_W);
  22651. }
  22652.  
  22653.  
  22654. void m68k_op_movem_16_re_aw(void)
  22655. {
  22656.         uint i = 0;
  22657.         uint register_list = OPER_I_16();
  22658.         uint ea = EA_AW_16();
  22659.         uint count = 0;
  22660.  
  22661.         for(; i < 16; i++)
  22662.                 if(register_list & (1 << i))
  22663.                 {
  22664.                         m68ki_write_16(ea, MASK_OUT_ABOVE_16(REG_DA[i]));
  22665.                         ea += 2;
  22666.                         count++;
  22667.                 }
  22668.  
  22669.         USE_CYCLES(count<<CYC_MOVEM_W);
  22670. }
  22671.  
  22672.  
  22673. void m68k_op_movem_16_re_al(void)
  22674. {
  22675.         uint i = 0;
  22676.         uint register_list = OPER_I_16();
  22677.         uint ea = EA_AL_16();
  22678.         uint count = 0;
  22679.  
  22680.         for(; i < 16; i++)
  22681.                 if(register_list & (1 << i))
  22682.                 {
  22683.                         m68ki_write_16(ea, MASK_OUT_ABOVE_16(REG_DA[i]));
  22684.                         ea += 2;
  22685.                         count++;
  22686.                 }
  22687.  
  22688.         USE_CYCLES(count<<CYC_MOVEM_W);
  22689. }
  22690.  
  22691.  
  22692. void m68k_op_movem_32_re_pd(void)
  22693. {
  22694.         uint i = 0;
  22695.         uint register_list = OPER_I_16();
  22696.         uint ea = AY;
  22697.         uint count = 0;
  22698.  
  22699.         for(; i < 16; i++)
  22700.                 if(register_list & (1 << i))
  22701.                 {
  22702.                         ea -= 4;
  22703.                         m68ki_write_16(ea+2, REG_DA[15-i] & 0xFFFF );
  22704.                         m68ki_write_16(ea, (REG_DA[15-i] >> 16) & 0xFFFF );
  22705.                         count++;
  22706.                 }
  22707.         AY = ea;
  22708.  
  22709.         USE_CYCLES(count<<CYC_MOVEM_L);
  22710. }
  22711.  
  22712.  
  22713. void m68k_op_movem_32_re_ai(void)
  22714. {
  22715.         uint i = 0;
  22716.         uint register_list = OPER_I_16();
  22717.         uint ea = EA_AY_AI_32();
  22718.         uint count = 0;
  22719.  
  22720.         for(; i < 16; i++)
  22721.                 if(register_list & (1 << i))
  22722.                 {
  22723.                         m68ki_write_32(ea, REG_DA[i]);
  22724.                         ea += 4;
  22725.                         count++;
  22726.                 }
  22727.  
  22728.         USE_CYCLES(count<<CYC_MOVEM_L);
  22729. }
  22730.  
  22731.  
  22732. void m68k_op_movem_32_re_di(void)
  22733. {
  22734.         uint i = 0;
  22735.         uint register_list = OPER_I_16();
  22736.         uint ea = EA_AY_DI_32();
  22737.         uint count = 0;
  22738.  
  22739.         for(; i < 16; i++)
  22740.                 if(register_list & (1 << i))
  22741.                 {
  22742.                         m68ki_write_32(ea, REG_DA[i]);
  22743.                         ea += 4;
  22744.                         count++;
  22745.                 }
  22746.  
  22747.         USE_CYCLES(count<<CYC_MOVEM_L);
  22748. }
  22749.  
  22750.  
  22751. void m68k_op_movem_32_re_ix(void)
  22752. {
  22753.         uint i = 0;
  22754.         uint register_list = OPER_I_16();
  22755.         uint ea = EA_AY_IX_32();
  22756.         uint count = 0;
  22757.  
  22758.         for(; i < 16; i++)
  22759.                 if(register_list & (1 << i))
  22760.                 {
  22761.                         m68ki_write_32(ea, REG_DA[i]);
  22762.                         ea += 4;
  22763.                         count++;
  22764.                 }
  22765.  
  22766.         USE_CYCLES(count<<CYC_MOVEM_L);
  22767. }
  22768.  
  22769.  
  22770. void m68k_op_movem_32_re_aw(void)
  22771. {
  22772.         uint i = 0;
  22773.         uint register_list = OPER_I_16();
  22774.         uint ea = EA_AW_32();
  22775.         uint count = 0;
  22776.  
  22777.         for(; i < 16; i++)
  22778.                 if(register_list & (1 << i))
  22779.                 {
  22780.                         m68ki_write_32(ea, REG_DA[i]);
  22781.                         ea += 4;
  22782.                         count++;
  22783.                 }
  22784.  
  22785.         USE_CYCLES(count<<CYC_MOVEM_L);
  22786. }
  22787.  
  22788.  
  22789. void m68k_op_movem_32_re_al(void)
  22790. {
  22791.         uint i = 0;
  22792.         uint register_list = OPER_I_16();
  22793.         uint ea = EA_AL_32();
  22794.         uint count = 0;
  22795.  
  22796.         for(; i < 16; i++)
  22797.                 if(register_list & (1 << i))
  22798.                 {
  22799.                         m68ki_write_32(ea, REG_DA[i]);
  22800.                         ea += 4;
  22801.                         count++;
  22802.                 }
  22803.  
  22804.         USE_CYCLES(count<<CYC_MOVEM_L);
  22805. }
  22806.  
  22807.  
  22808. void m68k_op_movem_16_er_pi(void)
  22809. {
  22810.         uint i = 0;
  22811.         uint register_list = OPER_I_16();
  22812.         uint ea = AY;
  22813.         uint count = 0;
  22814.  
  22815.         for(; i < 16; i++)
  22816.                 if(register_list & (1 << i))
  22817.                 {
  22818.                         REG_DA[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_16(ea)));
  22819.                         ea += 2;
  22820.                         count++;
  22821.                 }
  22822.         AY = ea;
  22823.  
  22824.         USE_CYCLES(count<<CYC_MOVEM_W);
  22825. }
  22826.  
  22827.  
  22828. void m68k_op_movem_16_er_pcdi(void)
  22829. {
  22830.         uint i = 0;
  22831.         uint register_list = OPER_I_16();
  22832.         uint ea = EA_PCDI_16();
  22833.         uint count = 0;
  22834.  
  22835.         for(; i < 16; i++)
  22836.                 if(register_list & (1 << i))
  22837.                 {
  22838.                         REG_DA[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_pcrel_16(ea)));
  22839.                         ea += 2;
  22840.                         count++;
  22841.                 }
  22842.  
  22843.         USE_CYCLES(count<<CYC_MOVEM_W);
  22844. }
  22845.  
  22846.  
  22847. void m68k_op_movem_16_er_pcix(void)
  22848. {
  22849.         uint i = 0;
  22850.         uint register_list = OPER_I_16();
  22851.         uint ea = EA_PCIX_16();
  22852.         uint count = 0;
  22853.  
  22854.         for(; i < 16; i++)
  22855.                 if(register_list & (1 << i))
  22856.                 {
  22857.                         REG_DA[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_pcrel_16(ea)));
  22858.                         ea += 2;
  22859.                         count++;
  22860.                 }
  22861.  
  22862.         USE_CYCLES(count<<CYC_MOVEM_W);
  22863. }
  22864.  
  22865.  
  22866. void m68k_op_movem_16_er_ai(void)
  22867. {
  22868.         uint i = 0;
  22869.         uint register_list = OPER_I_16();
  22870.         uint ea = EA_AY_AI_16();
  22871.         uint count = 0;
  22872.  
  22873.         for(; i < 16; i++)
  22874.                 if(register_list & (1 << i))
  22875.                 {
  22876.                         REG_DA[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_16(ea)));
  22877.                         ea += 2;
  22878.                         count++;
  22879.                 }
  22880.  
  22881.         USE_CYCLES(count<<CYC_MOVEM_W);
  22882. }
  22883.  
  22884.  
  22885. void m68k_op_movem_16_er_di(void)
  22886. {
  22887.         uint i = 0;
  22888.         uint register_list = OPER_I_16();
  22889.         uint ea = EA_AY_DI_16();
  22890.         uint count = 0;
  22891.  
  22892.         for(; i < 16; i++)
  22893.                 if(register_list & (1 << i))
  22894.                 {
  22895.                         REG_DA[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_16(ea)));
  22896.                         ea += 2;
  22897.                         count++;
  22898.                 }
  22899.  
  22900.         USE_CYCLES(count<<CYC_MOVEM_W);
  22901. }
  22902.  
  22903.  
  22904. void m68k_op_movem_16_er_ix(void)
  22905. {
  22906.         uint i = 0;
  22907.         uint register_list = OPER_I_16();
  22908.         uint ea = EA_AY_IX_16();
  22909.         uint count = 0;
  22910.  
  22911.         for(; i < 16; i++)
  22912.                 if(register_list & (1 << i))
  22913.                 {
  22914.                         REG_DA[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_16(ea)));
  22915.                         ea += 2;
  22916.                         count++;
  22917.                 }
  22918.  
  22919.         USE_CYCLES(count<<CYC_MOVEM_W);
  22920. }
  22921.  
  22922.  
  22923. void m68k_op_movem_16_er_aw(void)
  22924. {
  22925.         uint i = 0;
  22926.         uint register_list = OPER_I_16();
  22927.         uint ea = EA_AW_16();
  22928.         uint count = 0;
  22929.  
  22930.         for(; i < 16; i++)
  22931.                 if(register_list & (1 << i))
  22932.                 {
  22933.                         REG_DA[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_16(ea)));
  22934.                         ea += 2;
  22935.                         count++;
  22936.                 }
  22937.  
  22938.         USE_CYCLES(count<<CYC_MOVEM_W);
  22939. }
  22940.  
  22941.  
  22942. void m68k_op_movem_16_er_al(void)
  22943. {
  22944.         uint i = 0;
  22945.         uint register_list = OPER_I_16();
  22946.         uint ea = EA_AL_16();
  22947.         uint count = 0;
  22948.  
  22949.         for(; i < 16; i++)
  22950.                 if(register_list & (1 << i))
  22951.                 {
  22952.                         REG_DA[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_16(ea)));
  22953.                         ea += 2;
  22954.                         count++;
  22955.                 }
  22956.  
  22957.         USE_CYCLES(count<<CYC_MOVEM_W);
  22958. }
  22959.  
  22960.  
  22961. void m68k_op_movem_32_er_pi(void)
  22962. {
  22963.         uint i = 0;
  22964.         uint register_list = OPER_I_16();
  22965.         uint ea = AY;
  22966.         uint count = 0;
  22967.  
  22968.         for(; i < 16; i++)
  22969.                 if(register_list & (1 << i))
  22970.                 {
  22971.                         REG_DA[i] = m68ki_read_32(ea);
  22972.                         ea += 4;
  22973.                         count++;
  22974.                 }
  22975.         AY = ea;
  22976.  
  22977.         USE_CYCLES(count<<CYC_MOVEM_L);
  22978. }
  22979.  
  22980.  
  22981. void m68k_op_movem_32_er_pcdi(void)
  22982. {
  22983.         uint i = 0;
  22984.         uint register_list = OPER_I_16();
  22985.         uint ea = EA_PCDI_32();
  22986.         uint count = 0;
  22987.  
  22988.         for(; i < 16; i++)
  22989.                 if(register_list & (1 << i))
  22990.                 {
  22991.                         REG_DA[i] = m68ki_read_pcrel_32(ea);
  22992.                         ea += 4;
  22993.                         count++;
  22994.                 }
  22995.  
  22996.         USE_CYCLES(count<<CYC_MOVEM_L);
  22997. }
  22998.  
  22999.  
  23000. void m68k_op_movem_32_er_pcix(void)
  23001. {
  23002.         uint i = 0;
  23003.         uint register_list = OPER_I_16();
  23004.         uint ea = EA_PCIX_32();
  23005.         uint count = 0;
  23006.  
  23007.         for(; i < 16; i++)
  23008.                 if(register_list & (1 << i))
  23009.                 {
  23010.                         REG_DA[i] = m68ki_read_pcrel_32(ea);
  23011.                         ea += 4;
  23012.                         count++;
  23013.                 }
  23014.  
  23015.         USE_CYCLES(count<<CYC_MOVEM_L);
  23016. }
  23017.  
  23018.  
  23019. void m68k_op_movem_32_er_ai(void)
  23020. {
  23021.         uint i = 0;
  23022.         uint register_list = OPER_I_16();
  23023.         uint ea = EA_AY_AI_32();
  23024.         uint count = 0;
  23025.  
  23026.         for(; i < 16; i++)
  23027.                 if(register_list & (1 << i))
  23028.                 {
  23029.                         REG_DA[i] = m68ki_read_32(ea);
  23030.                         ea += 4;
  23031.                         count++;
  23032.                 }
  23033.  
  23034.         USE_CYCLES(count<<CYC_MOVEM_L);
  23035. }
  23036.  
  23037.  
  23038. void m68k_op_movem_32_er_di(void)
  23039. {
  23040.         uint i = 0;
  23041.         uint register_list = OPER_I_16();
  23042.         uint ea = EA_AY_DI_32();
  23043.         uint count = 0;
  23044.  
  23045.         for(; i < 16; i++)
  23046.                 if(register_list & (1 << i))
  23047.                 {
  23048.                         REG_DA[i] = m68ki_read_32(ea);
  23049.                         ea += 4;
  23050.                         count++;
  23051.                 }
  23052.  
  23053.         USE_CYCLES(count<<CYC_MOVEM_L);
  23054. }
  23055.  
  23056.  
  23057. void m68k_op_movem_32_er_ix(void)
  23058. {
  23059.         uint i = 0;
  23060.         uint register_list = OPER_I_16();
  23061.         uint ea = EA_AY_IX_32();
  23062.         uint count = 0;
  23063.  
  23064.         for(; i < 16; i++)
  23065.                 if(register_list & (1 << i))
  23066.                 {
  23067.                         REG_DA[i] = m68ki_read_32(ea);
  23068.                         ea += 4;
  23069.                         count++;
  23070.                 }
  23071.  
  23072.         USE_CYCLES(count<<CYC_MOVEM_L);
  23073. }
  23074.  
  23075.  
  23076. void m68k_op_movem_32_er_aw(void)
  23077. {
  23078.         uint i = 0;
  23079.         uint register_list = OPER_I_16();
  23080.         uint ea = EA_AW_32();
  23081.         uint count = 0;
  23082.  
  23083.         for(; i < 16; i++)
  23084.                 if(register_list & (1 << i))
  23085.                 {
  23086.                         REG_DA[i] = m68ki_read_32(ea);
  23087.                         ea += 4;
  23088.                         count++;
  23089.                 }
  23090.  
  23091.         USE_CYCLES(count<<CYC_MOVEM_L);
  23092. }
  23093.  
  23094.  
  23095. void m68k_op_movem_32_er_al(void)
  23096. {
  23097.         uint i = 0;
  23098.         uint register_list = OPER_I_16();
  23099.         uint ea = EA_AL_32();
  23100.         uint count = 0;
  23101.  
  23102.         for(; i < 16; i++)
  23103.                 if(register_list & (1 << i))
  23104.                 {
  23105.                         REG_DA[i] = m68ki_read_32(ea);
  23106.                         ea += 4;
  23107.                         count++;
  23108.                 }
  23109.  
  23110.         USE_CYCLES(count<<CYC_MOVEM_L);
  23111. }
  23112.  
  23113.  
  23114. void m68k_op_movep_16_re(void)
  23115. {
  23116.         uint ea = EA_AY_DI_16();
  23117.         uint src = DX;
  23118.  
  23119.         m68ki_write_8(ea, MASK_OUT_ABOVE_8(src >> 8));
  23120.         m68ki_write_8(ea += 2, MASK_OUT_ABOVE_8(src));
  23121. }
  23122.  
  23123.  
  23124. void m68k_op_movep_32_re(void)
  23125. {
  23126.         uint ea = EA_AY_DI_32();
  23127.         uint src = DX;
  23128.  
  23129.         m68ki_write_8(ea, MASK_OUT_ABOVE_8(src >> 24));
  23130.         m68ki_write_8(ea += 2, MASK_OUT_ABOVE_8(src >> 16));
  23131.         m68ki_write_8(ea += 2, MASK_OUT_ABOVE_8(src >> 8));
  23132.         m68ki_write_8(ea += 2, MASK_OUT_ABOVE_8(src));
  23133. }
  23134.  
  23135.  
  23136. void m68k_op_movep_16_er(void)
  23137. {
  23138.         uint ea = EA_AY_DI_16();
  23139.         uint* r_dst = &DX;
  23140.  
  23141.         *r_dst = MASK_OUT_BELOW_16(*r_dst) | ((m68ki_read_8(ea) << 8) + m68ki_read_8(ea + 2));
  23142. }
  23143.  
  23144.  
  23145. void m68k_op_movep_32_er(void)
  23146. {
  23147.         uint ea = EA_AY_DI_32();
  23148.  
  23149.         DX = (m68ki_read_8(ea) << 24) + (m68ki_read_8(ea + 2) << 16)
  23150.                 + (m68ki_read_8(ea + 4) << 8) + m68ki_read_8(ea + 6);
  23151. }
  23152.  
  23153.  
  23154. void m68k_op_moves_8_ai(void)
  23155. {
  23156.         if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
  23157.         {
  23158.                 if(FLAG_S)
  23159.                 {
  23160.                         uint word2 = OPER_I_16();
  23161.                         uint ea = EA_AY_AI_8();
  23162.  
  23163.                         m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  23164.                         if(BIT_B(word2))                   /* Register to memory */
  23165.                         {
  23166.                                 m68ki_write_8_fc(ea, REG_DFC, MASK_OUT_ABOVE_8(REG_DA[(word2 >> 12) & 15]));
  23167.                                 return;
  23168.                         }
  23169.                         if(BIT_F(word2))                   /* Memory to address register */
  23170.                         {
  23171.                                 REG_A[(word2 >> 12) & 7] = MAKE_INT_8(m68ki_read_8_fc(ea, REG_SFC));
  23172.                                 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
  23173.                                         USE_CYCLES(2);
  23174.                                 return;
  23175.                         }
  23176.                         /* Memory to data register */
  23177.                         REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_8(REG_D[(word2 >> 12) & 7]) | m68ki_read_8_fc(ea, REG_SFC);
  23178.                         if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
  23179.                                 USE_CYCLES(2);
  23180.                         return;
  23181.                 }
  23182.                 m68ki_exception_privilege_violation();
  23183.                 return;
  23184.         }
  23185.         m68ki_exception_illegal();
  23186. }
  23187.  
  23188.  
  23189. void m68k_op_moves_8_pi(void)
  23190. {
  23191.         if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
  23192.         {
  23193.                 if(FLAG_S)
  23194.                 {
  23195.                         uint word2 = OPER_I_16();
  23196.                         uint ea = EA_AY_PI_8();
  23197.  
  23198.                         m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  23199.                         if(BIT_B(word2))                   /* Register to memory */
  23200.                         {
  23201.                                 m68ki_write_8_fc(ea, REG_DFC, MASK_OUT_ABOVE_8(REG_DA[(word2 >> 12) & 15]));
  23202.                                 return;
  23203.                         }
  23204.                         if(BIT_F(word2))                   /* Memory to address register */
  23205.                         {
  23206.                                 REG_A[(word2 >> 12) & 7] = MAKE_INT_8(m68ki_read_8_fc(ea, REG_SFC));
  23207.                                 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
  23208.                                         USE_CYCLES(2);
  23209.                                 return;
  23210.                         }
  23211.                         /* Memory to data register */
  23212.                         REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_8(REG_D[(word2 >> 12) & 7]) | m68ki_read_8_fc(ea, REG_SFC);
  23213.                         if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
  23214.                                 USE_CYCLES(2);
  23215.                         return;
  23216.                 }
  23217.                 m68ki_exception_privilege_violation();
  23218.                 return;
  23219.         }
  23220.         m68ki_exception_illegal();
  23221. }
  23222.  
  23223.  
  23224. void m68k_op_moves_8_pi7(void)
  23225. {
  23226.         if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
  23227.         {
  23228.                 if(FLAG_S)
  23229.                 {
  23230.                         uint word2 = OPER_I_16();
  23231.                         uint ea = EA_A7_PI_8();
  23232.  
  23233.                         m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  23234.                         if(BIT_B(word2))                   /* Register to memory */
  23235.                         {
  23236.                                 m68ki_write_8_fc(ea, REG_DFC, MASK_OUT_ABOVE_8(REG_DA[(word2 >> 12) & 15]));
  23237.                                 return;
  23238.                         }
  23239.                         if(BIT_F(word2))                   /* Memory to address register */
  23240.                         {
  23241.                                 REG_A[(word2 >> 12) & 7] = MAKE_INT_8(m68ki_read_8_fc(ea, REG_SFC));
  23242.                                 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
  23243.                                         USE_CYCLES(2);
  23244.                                 return;
  23245.                         }
  23246.                         /* Memory to data register */
  23247.                         REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_8(REG_D[(word2 >> 12) & 7]) | m68ki_read_8_fc(ea, REG_SFC);
  23248.                         if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
  23249.                                 USE_CYCLES(2);
  23250.                         return;
  23251.                 }
  23252.                 m68ki_exception_privilege_violation();
  23253.                 return;
  23254.         }
  23255.         m68ki_exception_illegal();
  23256. }
  23257.  
  23258.  
  23259. void m68k_op_moves_8_pd(void)
  23260. {
  23261.         if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
  23262.         {
  23263.                 if(FLAG_S)
  23264.                 {
  23265.                         uint word2 = OPER_I_16();
  23266.                         uint ea = EA_AY_PD_8();
  23267.  
  23268.                         m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  23269.                         if(BIT_B(word2))                   /* Register to memory */
  23270.                         {
  23271.                                 m68ki_write_8_fc(ea, REG_DFC, MASK_OUT_ABOVE_8(REG_DA[(word2 >> 12) & 15]));
  23272.                                 return;
  23273.                         }
  23274.                         if(BIT_F(word2))                   /* Memory to address register */
  23275.                         {
  23276.                                 REG_A[(word2 >> 12) & 7] = MAKE_INT_8(m68ki_read_8_fc(ea, REG_SFC));
  23277.                                 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
  23278.                                         USE_CYCLES(2);
  23279.                                 return;
  23280.                         }
  23281.                         /* Memory to data register */
  23282.                         REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_8(REG_D[(word2 >> 12) & 7]) | m68ki_read_8_fc(ea, REG_SFC);
  23283.                         if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
  23284.                                 USE_CYCLES(2);
  23285.                         return;
  23286.                 }
  23287.                 m68ki_exception_privilege_violation();
  23288.                 return;
  23289.         }
  23290.         m68ki_exception_illegal();
  23291. }
  23292.  
  23293.  
  23294. void m68k_op_moves_8_pd7(void)
  23295. {
  23296.         if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
  23297.         {
  23298.                 if(FLAG_S)
  23299.                 {
  23300.                         uint word2 = OPER_I_16();
  23301.                         uint ea = EA_A7_PD_8();
  23302.  
  23303.                         m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  23304.                         if(BIT_B(word2))                   /* Register to memory */
  23305.                         {
  23306.                                 m68ki_write_8_fc(ea, REG_DFC, MASK_OUT_ABOVE_8(REG_DA[(word2 >> 12) & 15]));
  23307.                                 return;
  23308.                         }
  23309.                         if(BIT_F(word2))                   /* Memory to address register */
  23310.                         {
  23311.                                 REG_A[(word2 >> 12) & 7] = MAKE_INT_8(m68ki_read_8_fc(ea, REG_SFC));
  23312.                                 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
  23313.                                         USE_CYCLES(2);
  23314.                                 return;
  23315.                         }
  23316.                         /* Memory to data register */
  23317.                         REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_8(REG_D[(word2 >> 12) & 7]) | m68ki_read_8_fc(ea, REG_SFC);
  23318.                         if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
  23319.                                 USE_CYCLES(2);
  23320.                         return;
  23321.                 }
  23322.                 m68ki_exception_privilege_violation();
  23323.                 return;
  23324.         }
  23325.         m68ki_exception_illegal();
  23326. }
  23327.  
  23328.  
  23329. void m68k_op_moves_8_di(void)
  23330. {
  23331.         if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
  23332.         {
  23333.                 if(FLAG_S)
  23334.                 {
  23335.                         uint word2 = OPER_I_16();
  23336.                         uint ea = EA_AY_DI_8();
  23337.  
  23338.                         m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  23339.                         if(BIT_B(word2))                   /* Register to memory */
  23340.                         {
  23341.                                 m68ki_write_8_fc(ea, REG_DFC, MASK_OUT_ABOVE_8(REG_DA[(word2 >> 12) & 15]));
  23342.                                 return;
  23343.                         }
  23344.                         if(BIT_F(word2))                   /* Memory to address register */
  23345.                         {
  23346.                                 REG_A[(word2 >> 12) & 7] = MAKE_INT_8(m68ki_read_8_fc(ea, REG_SFC));
  23347.                                 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
  23348.                                         USE_CYCLES(2);
  23349.                                 return;
  23350.                         }
  23351.                         /* Memory to data register */
  23352.                         REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_8(REG_D[(word2 >> 12) & 7]) | m68ki_read_8_fc(ea, REG_SFC);
  23353.                         if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
  23354.                                 USE_CYCLES(2);
  23355.                         return;
  23356.                 }
  23357.                 m68ki_exception_privilege_violation();
  23358.                 return;
  23359.         }
  23360.         m68ki_exception_illegal();
  23361. }
  23362.  
  23363.  
  23364. void m68k_op_moves_8_ix(void)
  23365. {
  23366.         if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
  23367.         {
  23368.                 if(FLAG_S)
  23369.                 {
  23370.                         uint word2 = OPER_I_16();
  23371.                         uint ea = EA_AY_IX_8();
  23372.  
  23373.                         m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  23374.                         if(BIT_B(word2))                   /* Register to memory */
  23375.                         {
  23376.                                 m68ki_write_8_fc(ea, REG_DFC, MASK_OUT_ABOVE_8(REG_DA[(word2 >> 12) & 15]));
  23377.                                 return;
  23378.                         }
  23379.                         if(BIT_F(word2))                   /* Memory to address register */
  23380.                         {
  23381.                                 REG_A[(word2 >> 12) & 7] = MAKE_INT_8(m68ki_read_8_fc(ea, REG_SFC));
  23382.                                 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
  23383.                                         USE_CYCLES(2);
  23384.                                 return;
  23385.                         }
  23386.                         /* Memory to data register */
  23387.                         REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_8(REG_D[(word2 >> 12) & 7]) | m68ki_read_8_fc(ea, REG_SFC);
  23388.                         if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
  23389.                                 USE_CYCLES(2);
  23390.                         return;
  23391.                 }
  23392.                 m68ki_exception_privilege_violation();
  23393.                 return;
  23394.         }
  23395.         m68ki_exception_illegal();
  23396. }
  23397.  
  23398.  
  23399. void m68k_op_moves_8_aw(void)
  23400. {
  23401.         if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
  23402.         {
  23403.                 if(FLAG_S)
  23404.                 {
  23405.                         uint word2 = OPER_I_16();
  23406.                         uint ea = EA_AW_8();
  23407.  
  23408.                         m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  23409.                         if(BIT_B(word2))                   /* Register to memory */
  23410.                         {
  23411.                                 m68ki_write_8_fc(ea, REG_DFC, MASK_OUT_ABOVE_8(REG_DA[(word2 >> 12) & 15]));
  23412.                                 return;
  23413.                         }
  23414.                         if(BIT_F(word2))                   /* Memory to address register */
  23415.                         {
  23416.                                 REG_A[(word2 >> 12) & 7] = MAKE_INT_8(m68ki_read_8_fc(ea, REG_SFC));
  23417.                                 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
  23418.                                         USE_CYCLES(2);
  23419.                                 return;
  23420.                         }
  23421.                         /* Memory to data register */
  23422.                         REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_8(REG_D[(word2 >> 12) & 7]) | m68ki_read_8_fc(ea, REG_SFC);
  23423.                         if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
  23424.                                 USE_CYCLES(2);
  23425.                         return;
  23426.                 }
  23427.                 m68ki_exception_privilege_violation();
  23428.                 return;
  23429.         }
  23430.         m68ki_exception_illegal();
  23431. }
  23432.  
  23433.  
  23434. void m68k_op_moves_8_al(void)
  23435. {
  23436.         if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
  23437.         {
  23438.                 if(FLAG_S)
  23439.                 {
  23440.                         uint word2 = OPER_I_16();
  23441.                         uint ea = EA_AL_8();
  23442.  
  23443.                         m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  23444.                         if(BIT_B(word2))                   /* Register to memory */
  23445.                         {
  23446.                                 m68ki_write_8_fc(ea, REG_DFC, MASK_OUT_ABOVE_8(REG_DA[(word2 >> 12) & 15]));
  23447.                                 return;
  23448.                         }
  23449.                         if(BIT_F(word2))                   /* Memory to address register */
  23450.                         {
  23451.                                 REG_A[(word2 >> 12) & 7] = MAKE_INT_8(m68ki_read_8_fc(ea, REG_SFC));
  23452.                                 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
  23453.                                         USE_CYCLES(2);
  23454.                                 return;
  23455.                         }
  23456.                         /* Memory to data register */
  23457.                         REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_8(REG_D[(word2 >> 12) & 7]) | m68ki_read_8_fc(ea, REG_SFC);
  23458.                         if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
  23459.                                 USE_CYCLES(2);
  23460.                         return;
  23461.                 }
  23462.                 m68ki_exception_privilege_violation();
  23463.                 return;
  23464.         }
  23465.         m68ki_exception_illegal();
  23466. }
  23467.  
  23468.  
  23469. void m68k_op_moves_16_ai(void)
  23470. {
  23471.         if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
  23472.         {
  23473.                 if(FLAG_S)
  23474.                 {
  23475.                         uint word2 = OPER_I_16();
  23476.                         uint ea = EA_AY_AI_16();
  23477.  
  23478.                         m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  23479.                         if(BIT_B(word2))                   /* Register to memory */
  23480.                         {
  23481.                                 m68ki_write_16_fc(ea, REG_DFC, MASK_OUT_ABOVE_16(REG_DA[(word2 >> 12) & 15]));
  23482.                                 return;
  23483.                         }
  23484.                         if(BIT_F(word2))                   /* Memory to address register */
  23485.                         {
  23486.                                 REG_A[(word2 >> 12) & 7] = MAKE_INT_16(m68ki_read_16_fc(ea, REG_SFC));
  23487.                                 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
  23488.                                         USE_CYCLES(2);
  23489.                                 return;
  23490.                         }
  23491.                         /* Memory to data register */
  23492.                         REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_16(REG_D[(word2 >> 12) & 7]) | m68ki_read_16_fc(ea, REG_SFC);
  23493.                         if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
  23494.                                 USE_CYCLES(2);
  23495.                         return;
  23496.                 }
  23497.                 m68ki_exception_privilege_violation();
  23498.                 return;
  23499.         }
  23500.         m68ki_exception_illegal();
  23501. }
  23502.  
  23503.  
  23504. void m68k_op_moves_16_pi(void)
  23505. {
  23506.         if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
  23507.         {
  23508.                 if(FLAG_S)
  23509.                 {
  23510.                         uint word2 = OPER_I_16();
  23511.                         uint ea = EA_AY_PI_16();
  23512.  
  23513.                         m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  23514.                         if(BIT_B(word2))                   /* Register to memory */
  23515.                         {
  23516.                                 m68ki_write_16_fc(ea, REG_DFC, MASK_OUT_ABOVE_16(REG_DA[(word2 >> 12) & 15]));
  23517.                                 return;
  23518.                         }
  23519.                         if(BIT_F(word2))                   /* Memory to address register */
  23520.                         {
  23521.                                 REG_A[(word2 >> 12) & 7] = MAKE_INT_16(m68ki_read_16_fc(ea, REG_SFC));
  23522.                                 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
  23523.                                         USE_CYCLES(2);
  23524.                                 return;
  23525.                         }
  23526.                         /* Memory to data register */
  23527.                         REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_16(REG_D[(word2 >> 12) & 7]) | m68ki_read_16_fc(ea, REG_SFC);
  23528.                         if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
  23529.                                 USE_CYCLES(2);
  23530.                         return;
  23531.                 }
  23532.                 m68ki_exception_privilege_violation();
  23533.                 return;
  23534.         }
  23535.         m68ki_exception_illegal();
  23536. }
  23537.  
  23538.  
  23539. void m68k_op_moves_16_pd(void)
  23540. {
  23541.         if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
  23542.         {
  23543.                 if(FLAG_S)
  23544.                 {
  23545.                         uint word2 = OPER_I_16();
  23546.                         uint ea = EA_AY_PD_16();
  23547.  
  23548.                         m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  23549.                         if(BIT_B(word2))                   /* Register to memory */
  23550.                         {
  23551.                                 m68ki_write_16_fc(ea, REG_DFC, MASK_OUT_ABOVE_16(REG_DA[(word2 >> 12) & 15]));
  23552.                                 return;
  23553.                         }
  23554.                         if(BIT_F(word2))                   /* Memory to address register */
  23555.                         {
  23556.                                 REG_A[(word2 >> 12) & 7] = MAKE_INT_16(m68ki_read_16_fc(ea, REG_SFC));
  23557.                                 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
  23558.                                         USE_CYCLES(2);
  23559.                                 return;
  23560.                         }
  23561.                         /* Memory to data register */
  23562.                         REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_16(REG_D[(word2 >> 12) & 7]) | m68ki_read_16_fc(ea, REG_SFC);
  23563.                         if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
  23564.                                 USE_CYCLES(2);
  23565.                         return;
  23566.                 }
  23567.                 m68ki_exception_privilege_violation();
  23568.                 return;
  23569.         }
  23570.         m68ki_exception_illegal();
  23571. }
  23572.  
  23573.  
  23574. void m68k_op_moves_16_di(void)
  23575. {
  23576.         if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
  23577.         {
  23578.                 if(FLAG_S)
  23579.                 {
  23580.                         uint word2 = OPER_I_16();
  23581.                         uint ea = EA_AY_DI_16();
  23582.  
  23583.                         m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  23584.                         if(BIT_B(word2))                   /* Register to memory */
  23585.                         {
  23586.                                 m68ki_write_16_fc(ea, REG_DFC, MASK_OUT_ABOVE_16(REG_DA[(word2 >> 12) & 15]));
  23587.                                 return;
  23588.                         }
  23589.                         if(BIT_F(word2))                   /* Memory to address register */
  23590.                         {
  23591.                                 REG_A[(word2 >> 12) & 7] = MAKE_INT_16(m68ki_read_16_fc(ea, REG_SFC));
  23592.                                 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
  23593.                                         USE_CYCLES(2);
  23594.                                 return;
  23595.                         }
  23596.                         /* Memory to data register */
  23597.                         REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_16(REG_D[(word2 >> 12) & 7]) | m68ki_read_16_fc(ea, REG_SFC);
  23598.                         if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
  23599.                                 USE_CYCLES(2);
  23600.                         return;
  23601.                 }
  23602.                 m68ki_exception_privilege_violation();
  23603.                 return;
  23604.         }
  23605.         m68ki_exception_illegal();
  23606. }
  23607.  
  23608.  
  23609. void m68k_op_moves_16_ix(void)
  23610. {
  23611.         if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
  23612.         {
  23613.                 if(FLAG_S)
  23614.                 {
  23615.                         uint word2 = OPER_I_16();
  23616.                         uint ea = EA_AY_IX_16();
  23617.  
  23618.                         m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  23619.                         if(BIT_B(word2))                   /* Register to memory */
  23620.                         {
  23621.                                 m68ki_write_16_fc(ea, REG_DFC, MASK_OUT_ABOVE_16(REG_DA[(word2 >> 12) & 15]));
  23622.                                 return;
  23623.                         }
  23624.                         if(BIT_F(word2))                   /* Memory to address register */
  23625.                         {
  23626.                                 REG_A[(word2 >> 12) & 7] = MAKE_INT_16(m68ki_read_16_fc(ea, REG_SFC));
  23627.                                 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
  23628.                                         USE_CYCLES(2);
  23629.                                 return;
  23630.                         }
  23631.                         /* Memory to data register */
  23632.                         REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_16(REG_D[(word2 >> 12) & 7]) | m68ki_read_16_fc(ea, REG_SFC);
  23633.                         if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
  23634.                                 USE_CYCLES(2);
  23635.                         return;
  23636.                 }
  23637.                 m68ki_exception_privilege_violation();
  23638.                 return;
  23639.         }
  23640.         m68ki_exception_illegal();
  23641. }
  23642.  
  23643.  
  23644. void m68k_op_moves_16_aw(void)
  23645. {
  23646.         if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
  23647.         {
  23648.                 if(FLAG_S)
  23649.                 {
  23650.                         uint word2 = OPER_I_16();
  23651.                         uint ea = EA_AW_16();
  23652.  
  23653.                         m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  23654.                         if(BIT_B(word2))                   /* Register to memory */
  23655.                         {
  23656.                                 m68ki_write_16_fc(ea, REG_DFC, MASK_OUT_ABOVE_16(REG_DA[(word2 >> 12) & 15]));
  23657.                                 return;
  23658.                         }
  23659.                         if(BIT_F(word2))                   /* Memory to address register */
  23660.                         {
  23661.                                 REG_A[(word2 >> 12) & 7] = MAKE_INT_16(m68ki_read_16_fc(ea, REG_SFC));
  23662.                                 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
  23663.                                         USE_CYCLES(2);
  23664.                                 return;
  23665.                         }
  23666.                         /* Memory to data register */
  23667.                         REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_16(REG_D[(word2 >> 12) & 7]) | m68ki_read_16_fc(ea, REG_SFC);
  23668.                         if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
  23669.                                 USE_CYCLES(2);
  23670.                         return;
  23671.                 }
  23672.                 m68ki_exception_privilege_violation();
  23673.                 return;
  23674.         }
  23675.         m68ki_exception_illegal();
  23676. }
  23677.  
  23678.  
  23679. void m68k_op_moves_16_al(void)
  23680. {
  23681.         if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
  23682.         {
  23683.                 if(FLAG_S)
  23684.                 {
  23685.                         uint word2 = OPER_I_16();
  23686.                         uint ea = EA_AL_16();
  23687.  
  23688.                         m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  23689.                         if(BIT_B(word2))                   /* Register to memory */
  23690.                         {
  23691.                                 m68ki_write_16_fc(ea, REG_DFC, MASK_OUT_ABOVE_16(REG_DA[(word2 >> 12) & 15]));
  23692.                                 return;
  23693.                         }
  23694.                         if(BIT_F(word2))                   /* Memory to address register */
  23695.                         {
  23696.                                 REG_A[(word2 >> 12) & 7] = MAKE_INT_16(m68ki_read_16_fc(ea, REG_SFC));
  23697.                                 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
  23698.                                         USE_CYCLES(2);
  23699.                                 return;
  23700.                         }
  23701.                         /* Memory to data register */
  23702.                         REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_16(REG_D[(word2 >> 12) & 7]) | m68ki_read_16_fc(ea, REG_SFC);
  23703.                         if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
  23704.                                 USE_CYCLES(2);
  23705.                         return;
  23706.                 }
  23707.                 m68ki_exception_privilege_violation();
  23708.                 return;
  23709.         }
  23710.         m68ki_exception_illegal();
  23711. }
  23712.  
  23713.  
  23714. void m68k_op_moves_32_ai(void)
  23715. {
  23716.         if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
  23717.         {
  23718.                 if(FLAG_S)
  23719.                 {
  23720.                         uint word2 = OPER_I_16();
  23721.                         uint ea = EA_AY_AI_32();
  23722.  
  23723.                         m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  23724.                         if(BIT_B(word2))                   /* Register to memory */
  23725.                         {
  23726.                                 m68ki_write_32_fc(ea, REG_DFC, REG_DA[(word2 >> 12) & 15]);
  23727.                                 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
  23728.                                         USE_CYCLES(2);
  23729.                                 return;
  23730.                         }
  23731.                         /* Memory to register */
  23732.                         REG_DA[(word2 >> 12) & 15] = m68ki_read_32_fc(ea, REG_SFC);
  23733.                         if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
  23734.                                 USE_CYCLES(2);
  23735.                         return;
  23736.                 }
  23737.                 m68ki_exception_privilege_violation();
  23738.                 return;
  23739.         }
  23740.         m68ki_exception_illegal();
  23741. }
  23742.  
  23743.  
  23744. void m68k_op_moves_32_pi(void)
  23745. {
  23746.         if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
  23747.         {
  23748.                 if(FLAG_S)
  23749.                 {
  23750.                         uint word2 = OPER_I_16();
  23751.                         uint ea = EA_AY_PI_32();
  23752.  
  23753.                         m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  23754.                         if(BIT_B(word2))                   /* Register to memory */
  23755.                         {
  23756.                                 m68ki_write_32_fc(ea, REG_DFC, REG_DA[(word2 >> 12) & 15]);
  23757.                                 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
  23758.                                         USE_CYCLES(2);
  23759.                                 return;
  23760.                         }
  23761.                         /* Memory to register */
  23762.                         REG_DA[(word2 >> 12) & 15] = m68ki_read_32_fc(ea, REG_SFC);
  23763.                         if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
  23764.                                 USE_CYCLES(2);
  23765.                         return;
  23766.                 }
  23767.                 m68ki_exception_privilege_violation();
  23768.                 return;
  23769.         }
  23770.         m68ki_exception_illegal();
  23771. }
  23772.  
  23773.  
  23774. void m68k_op_moves_32_pd(void)
  23775. {
  23776.         if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
  23777.         {
  23778.                 if(FLAG_S)
  23779.                 {
  23780.                         uint word2 = OPER_I_16();
  23781.                         uint ea = EA_AY_PD_32();
  23782.  
  23783.                         m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  23784.                         if(BIT_B(word2))                   /* Register to memory */
  23785.                         {
  23786.                                 m68ki_write_32_fc(ea, REG_DFC, REG_DA[(word2 >> 12) & 15]);
  23787.                                 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
  23788.                                         USE_CYCLES(2);
  23789.                                 return;
  23790.                         }
  23791.                         /* Memory to register */
  23792.                         REG_DA[(word2 >> 12) & 15] = m68ki_read_32_fc(ea, REG_SFC);
  23793.                         if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
  23794.                                 USE_CYCLES(2);
  23795.                         return;
  23796.                 }
  23797.                 m68ki_exception_privilege_violation();
  23798.                 return;
  23799.         }
  23800.         m68ki_exception_illegal();
  23801. }
  23802.  
  23803.  
  23804. void m68k_op_moves_32_di(void)
  23805. {
  23806.         if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
  23807.         {
  23808.                 if(FLAG_S)
  23809.                 {
  23810.                         uint word2 = OPER_I_16();
  23811.                         uint ea = EA_AY_DI_32();
  23812.  
  23813.                         m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  23814.                         if(BIT_B(word2))                   /* Register to memory */
  23815.                         {
  23816.                                 m68ki_write_32_fc(ea, REG_DFC, REG_DA[(word2 >> 12) & 15]);
  23817.                                 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
  23818.                                         USE_CYCLES(2);
  23819.                                 return;
  23820.                         }
  23821.                         /* Memory to register */
  23822.                         REG_DA[(word2 >> 12) & 15] = m68ki_read_32_fc(ea, REG_SFC);
  23823.                         if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
  23824.                                 USE_CYCLES(2);
  23825.                         return;
  23826.                 }
  23827.                 m68ki_exception_privilege_violation();
  23828.                 return;
  23829.         }
  23830.         m68ki_exception_illegal();
  23831. }
  23832.  
  23833.  
  23834. void m68k_op_moves_32_ix(void)
  23835. {
  23836.         if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
  23837.         {
  23838.                 if(FLAG_S)
  23839.                 {
  23840.                         uint word2 = OPER_I_16();
  23841.                         uint ea = EA_AY_IX_32();
  23842.  
  23843.                         m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  23844.                         if(BIT_B(word2))                   /* Register to memory */
  23845.                         {
  23846.                                 m68ki_write_32_fc(ea, REG_DFC, REG_DA[(word2 >> 12) & 15]);
  23847.                                 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
  23848.                                         USE_CYCLES(2);
  23849.                                 return;
  23850.                         }
  23851.                         /* Memory to register */
  23852.                         REG_DA[(word2 >> 12) & 15] = m68ki_read_32_fc(ea, REG_SFC);
  23853.                         if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
  23854.                                 USE_CYCLES(2);
  23855.                         return;
  23856.                 }
  23857.                 m68ki_exception_privilege_violation();
  23858.                 return;
  23859.         }
  23860.         m68ki_exception_illegal();
  23861. }
  23862.  
  23863.  
  23864. void m68k_op_moves_32_aw(void)
  23865. {
  23866.         if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
  23867.         {
  23868.                 if(FLAG_S)
  23869.                 {
  23870.                         uint word2 = OPER_I_16();
  23871.                         uint ea = EA_AW_32();
  23872.  
  23873.                         m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  23874.                         if(BIT_B(word2))                   /* Register to memory */
  23875.                         {
  23876.                                 m68ki_write_32_fc(ea, REG_DFC, REG_DA[(word2 >> 12) & 15]);
  23877.                                 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
  23878.                                         USE_CYCLES(2);
  23879.                                 return;
  23880.                         }
  23881.                         /* Memory to register */
  23882.                         REG_DA[(word2 >> 12) & 15] = m68ki_read_32_fc(ea, REG_SFC);
  23883.                         if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
  23884.                                 USE_CYCLES(2);
  23885.                         return;
  23886.                 }
  23887.                 m68ki_exception_privilege_violation();
  23888.                 return;
  23889.         }
  23890.         m68ki_exception_illegal();
  23891. }
  23892.  
  23893.  
  23894. void m68k_op_moves_32_al(void)
  23895. {
  23896.         if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
  23897.         {
  23898.                 if(FLAG_S)
  23899.                 {
  23900.                         uint word2 = OPER_I_16();
  23901.                         uint ea = EA_AL_32();
  23902.  
  23903.                         m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  23904.                         if(BIT_B(word2))                   /* Register to memory */
  23905.                         {
  23906.                                 m68ki_write_32_fc(ea, REG_DFC, REG_DA[(word2 >> 12) & 15]);
  23907.                                 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
  23908.                                         USE_CYCLES(2);
  23909.                                 return;
  23910.                         }
  23911.                         /* Memory to register */
  23912.                         REG_DA[(word2 >> 12) & 15] = m68ki_read_32_fc(ea, REG_SFC);
  23913.                         if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
  23914.                                 USE_CYCLES(2);
  23915.                         return;
  23916.                 }
  23917.                 m68ki_exception_privilege_violation();
  23918.                 return;
  23919.         }
  23920.         m68ki_exception_illegal();
  23921. }
  23922.  
  23923.  
  23924. void m68k_op_moveq_32(void)
  23925. {
  23926.         uint res = DX = MAKE_INT_8(MASK_OUT_ABOVE_8(REG_IR));
  23927.  
  23928.         FLAG_N = NFLAG_32(res);
  23929.         FLAG_Z = res;
  23930.         FLAG_V = VFLAG_CLEAR;
  23931.         FLAG_C = CFLAG_CLEAR;
  23932. }
  23933.  
  23934.  
  23935. void m68k_op_move16_32(void)
  23936. {
  23937.         UINT16 w2 = OPER_I_16();
  23938.         int ax = REG_IR & 7;
  23939.         int ay = (w2 >> 12) & 7;
  23940.  
  23941.         m68ki_write_32(REG_A[ay],    m68ki_read_32(REG_A[ax]));
  23942.         m68ki_write_32(REG_A[ay]+4,  m68ki_read_32(REG_A[ax]+4));
  23943.         m68ki_write_32(REG_A[ay]+8,  m68ki_read_32(REG_A[ax]+8));
  23944.         m68ki_write_32(REG_A[ay]+12, m68ki_read_32(REG_A[ax]+12));
  23945.  
  23946.         REG_A[ax] += 16;
  23947.         REG_A[ay] += 16;
  23948. }
  23949.  
  23950.  
  23951. void m68k_op_muls_16_d(void)
  23952. {
  23953.         uint* r_dst = &DX;
  23954.         uint res = MASK_OUT_ABOVE_32(MAKE_INT_16(DY) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst)));
  23955.  
  23956.         *r_dst = res;
  23957.  
  23958.         FLAG_Z = res;
  23959.         FLAG_N = NFLAG_32(res);
  23960.         FLAG_V = VFLAG_CLEAR;
  23961.         FLAG_C = CFLAG_CLEAR;
  23962. }
  23963.  
  23964.  
  23965. void m68k_op_muls_16_ai(void)
  23966. {
  23967.         uint* r_dst = &DX;
  23968.         uint res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_AY_AI_16()) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst)));
  23969.  
  23970.         *r_dst = res;
  23971.  
  23972.         FLAG_Z = res;
  23973.         FLAG_N = NFLAG_32(res);
  23974.         FLAG_V = VFLAG_CLEAR;
  23975.         FLAG_C = CFLAG_CLEAR;
  23976. }
  23977.  
  23978.  
  23979. void m68k_op_muls_16_pi(void)
  23980. {
  23981.         uint* r_dst = &DX;
  23982.         uint res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_AY_PI_16()) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst)));
  23983.  
  23984.         *r_dst = res;
  23985.  
  23986.         FLAG_Z = res;
  23987.         FLAG_N = NFLAG_32(res);
  23988.         FLAG_V = VFLAG_CLEAR;
  23989.         FLAG_C = CFLAG_CLEAR;
  23990. }
  23991.  
  23992.  
  23993. void m68k_op_muls_16_pd(void)
  23994. {
  23995.         uint* r_dst = &DX;
  23996.         uint res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_AY_PD_16()) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst)));
  23997.  
  23998.         *r_dst = res;
  23999.  
  24000.         FLAG_Z = res;
  24001.         FLAG_N = NFLAG_32(res);
  24002.         FLAG_V = VFLAG_CLEAR;
  24003.         FLAG_C = CFLAG_CLEAR;
  24004. }
  24005.  
  24006.  
  24007. void m68k_op_muls_16_di(void)
  24008. {
  24009.         uint* r_dst = &DX;
  24010.         uint res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_AY_DI_16()) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst)));
  24011.  
  24012.         *r_dst = res;
  24013.  
  24014.         FLAG_Z = res;
  24015.         FLAG_N = NFLAG_32(res);
  24016.         FLAG_V = VFLAG_CLEAR;
  24017.         FLAG_C = CFLAG_CLEAR;
  24018. }
  24019.  
  24020.  
  24021. void m68k_op_muls_16_ix(void)
  24022. {
  24023.         uint* r_dst = &DX;
  24024.         uint res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_AY_IX_16()) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst)));
  24025.  
  24026.         *r_dst = res;
  24027.  
  24028.         FLAG_Z = res;
  24029.         FLAG_N = NFLAG_32(res);
  24030.         FLAG_V = VFLAG_CLEAR;
  24031.         FLAG_C = CFLAG_CLEAR;
  24032. }
  24033.  
  24034.  
  24035. void m68k_op_muls_16_aw(void)
  24036. {
  24037.         uint* r_dst = &DX;
  24038.         uint res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_AW_16()) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst)));
  24039.  
  24040.         *r_dst = res;
  24041.  
  24042.         FLAG_Z = res;
  24043.         FLAG_N = NFLAG_32(res);
  24044.         FLAG_V = VFLAG_CLEAR;
  24045.         FLAG_C = CFLAG_CLEAR;
  24046. }
  24047.  
  24048.  
  24049. void m68k_op_muls_16_al(void)
  24050. {
  24051.         uint* r_dst = &DX;
  24052.         uint res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_AL_16()) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst)));
  24053.  
  24054.         *r_dst = res;
  24055.  
  24056.         FLAG_Z = res;
  24057.         FLAG_N = NFLAG_32(res);
  24058.         FLAG_V = VFLAG_CLEAR;
  24059.         FLAG_C = CFLAG_CLEAR;
  24060. }
  24061.  
  24062.  
  24063. void m68k_op_muls_16_pcdi(void)
  24064. {
  24065.         uint* r_dst = &DX;
  24066.         uint res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_PCDI_16()) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst)));
  24067.  
  24068.         *r_dst = res;
  24069.  
  24070.         FLAG_Z = res;
  24071.         FLAG_N = NFLAG_32(res);
  24072.         FLAG_V = VFLAG_CLEAR;
  24073.         FLAG_C = CFLAG_CLEAR;
  24074. }
  24075.  
  24076.  
  24077. void m68k_op_muls_16_pcix(void)
  24078. {
  24079.         uint* r_dst = &DX;
  24080.         uint res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_PCIX_16()) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst)));
  24081.  
  24082.         *r_dst = res;
  24083.  
  24084.         FLAG_Z = res;
  24085.         FLAG_N = NFLAG_32(res);
  24086.         FLAG_V = VFLAG_CLEAR;
  24087.         FLAG_C = CFLAG_CLEAR;
  24088. }
  24089.  
  24090.  
  24091. void m68k_op_muls_16_i(void)
  24092. {
  24093.         uint* r_dst = &DX;
  24094.         uint res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_I_16()) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst)));
  24095.  
  24096.         *r_dst = res;
  24097.  
  24098.         FLAG_Z = res;
  24099.         FLAG_N = NFLAG_32(res);
  24100.         FLAG_V = VFLAG_CLEAR;
  24101.         FLAG_C = CFLAG_CLEAR;
  24102. }
  24103.  
  24104.  
  24105. void m68k_op_mulu_16_d(void)
  24106. {
  24107.         uint* r_dst = &DX;
  24108.         uint res = MASK_OUT_ABOVE_16(DY) * MASK_OUT_ABOVE_16(*r_dst);
  24109.  
  24110.         *r_dst = res;
  24111.  
  24112.         FLAG_Z = res;
  24113.         FLAG_N = NFLAG_32(res);
  24114.         FLAG_V = VFLAG_CLEAR;
  24115.         FLAG_C = CFLAG_CLEAR;
  24116. }
  24117.  
  24118.  
  24119. void m68k_op_mulu_16_ai(void)
  24120. {
  24121.         uint* r_dst = &DX;
  24122.         uint res = OPER_AY_AI_16() * MASK_OUT_ABOVE_16(*r_dst);
  24123.  
  24124.         *r_dst = res;
  24125.  
  24126.         FLAG_Z = res;
  24127.         FLAG_N = NFLAG_32(res);
  24128.         FLAG_V = VFLAG_CLEAR;
  24129.         FLAG_C = CFLAG_CLEAR;
  24130. }
  24131.  
  24132.  
  24133. void m68k_op_mulu_16_pi(void)
  24134. {
  24135.         uint* r_dst = &DX;
  24136.         uint res = OPER_AY_PI_16() * MASK_OUT_ABOVE_16(*r_dst);
  24137.  
  24138.         *r_dst = res;
  24139.  
  24140.         FLAG_Z = res;
  24141.         FLAG_N = NFLAG_32(res);
  24142.         FLAG_V = VFLAG_CLEAR;
  24143.         FLAG_C = CFLAG_CLEAR;
  24144. }
  24145.  
  24146.  
  24147. void m68k_op_mulu_16_pd(void)
  24148. {
  24149.         uint* r_dst = &DX;
  24150.         uint res = OPER_AY_PD_16() * MASK_OUT_ABOVE_16(*r_dst);
  24151.  
  24152.         *r_dst = res;
  24153.  
  24154.         FLAG_Z = res;
  24155.         FLAG_N = NFLAG_32(res);
  24156.         FLAG_V = VFLAG_CLEAR;
  24157.         FLAG_C = CFLAG_CLEAR;
  24158. }
  24159.  
  24160.  
  24161. void m68k_op_mulu_16_di(void)
  24162. {
  24163.         uint* r_dst = &DX;
  24164.         uint res = OPER_AY_DI_16() * MASK_OUT_ABOVE_16(*r_dst);
  24165.  
  24166.         *r_dst = res;
  24167.  
  24168.         FLAG_Z = res;
  24169.         FLAG_N = NFLAG_32(res);
  24170.         FLAG_V = VFLAG_CLEAR;
  24171.         FLAG_C = CFLAG_CLEAR;
  24172. }
  24173.  
  24174.  
  24175. void m68k_op_mulu_16_ix(void)
  24176. {
  24177.         uint* r_dst = &DX;
  24178.         uint res = OPER_AY_IX_16() * MASK_OUT_ABOVE_16(*r_dst);
  24179.  
  24180.         *r_dst = res;
  24181.  
  24182.         FLAG_Z = res;
  24183.         FLAG_N = NFLAG_32(res);
  24184.         FLAG_V = VFLAG_CLEAR;
  24185.         FLAG_C = CFLAG_CLEAR;
  24186. }
  24187.  
  24188.  
  24189. void m68k_op_mulu_16_aw(void)
  24190. {
  24191.         uint* r_dst = &DX;
  24192.         uint res = OPER_AW_16() * MASK_OUT_ABOVE_16(*r_dst);
  24193.  
  24194.         *r_dst = res;
  24195.  
  24196.         FLAG_Z = res;
  24197.         FLAG_N = NFLAG_32(res);
  24198.         FLAG_V = VFLAG_CLEAR;
  24199.         FLAG_C = CFLAG_CLEAR;
  24200. }
  24201.  
  24202.  
  24203. void m68k_op_mulu_16_al(void)
  24204. {
  24205.         uint* r_dst = &DX;
  24206.         uint res = OPER_AL_16() * MASK_OUT_ABOVE_16(*r_dst);
  24207.  
  24208.         *r_dst = res;
  24209.  
  24210.         FLAG_Z = res;
  24211.         FLAG_N = NFLAG_32(res);
  24212.         FLAG_V = VFLAG_CLEAR;
  24213.         FLAG_C = CFLAG_CLEAR;
  24214. }
  24215.  
  24216.  
  24217. void m68k_op_mulu_16_pcdi(void)
  24218. {
  24219.         uint* r_dst = &DX;
  24220.         uint res = OPER_PCDI_16() * MASK_OUT_ABOVE_16(*r_dst);
  24221.  
  24222.         *r_dst = res;
  24223.  
  24224.         FLAG_Z = res;
  24225.         FLAG_N = NFLAG_32(res);
  24226.         FLAG_V = VFLAG_CLEAR;
  24227.         FLAG_C = CFLAG_CLEAR;
  24228. }
  24229.  
  24230.  
  24231. void m68k_op_mulu_16_pcix(void)
  24232. {
  24233.         uint* r_dst = &DX;
  24234.         uint res = OPER_PCIX_16() * MASK_OUT_ABOVE_16(*r_dst);
  24235.  
  24236.         *r_dst = res;
  24237.  
  24238.         FLAG_Z = res;
  24239.         FLAG_N = NFLAG_32(res);
  24240.         FLAG_V = VFLAG_CLEAR;
  24241.         FLAG_C = CFLAG_CLEAR;
  24242. }
  24243.  
  24244.  
  24245. void m68k_op_mulu_16_i(void)
  24246. {
  24247.         uint* r_dst = &DX;
  24248.         uint res = OPER_I_16() * MASK_OUT_ABOVE_16(*r_dst);
  24249.  
  24250.         *r_dst = res;
  24251.  
  24252.         FLAG_Z = res;
  24253.         FLAG_N = NFLAG_32(res);
  24254.         FLAG_V = VFLAG_CLEAR;
  24255.         FLAG_C = CFLAG_CLEAR;
  24256. }
  24257.  
  24258.  
  24259. void m68k_op_mull_32_d(void)
  24260. {
  24261. #if M68K_USE_64_BIT
  24262.  
  24263.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  24264.         {
  24265.                 uint word2 = OPER_I_16();
  24266.                 uint64 src = DY;
  24267.                 uint64 dst = REG_D[(word2 >> 12) & 7];
  24268.                 uint64 res;
  24269.  
  24270.                 FLAG_C = CFLAG_CLEAR;
  24271.  
  24272.                 if(BIT_B(word2))                           /* signed */
  24273.                 {
  24274.                         res = (sint64)((sint32)src) * (sint64)((sint32)dst);
  24275.                         if(!BIT_A(word2))
  24276.                         {
  24277.                                 FLAG_Z = MASK_OUT_ABOVE_32(res);
  24278.                                 FLAG_N = NFLAG_32(res);
  24279.                                 FLAG_V = ((sint64)res != (sint32)res)<<7;
  24280.                                 REG_D[(word2 >> 12) & 7] = FLAG_Z;
  24281.                                 return;
  24282.                         }
  24283.                         FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);
  24284.                         FLAG_N = NFLAG_64(res);
  24285.                         FLAG_V = VFLAG_CLEAR;
  24286.                         REG_D[word2 & 7] = (res >> 32);
  24287.                         REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
  24288.                         return;
  24289.                 }
  24290.  
  24291.                 res = src * dst;
  24292.                 if(!BIT_A(word2))
  24293.                 {
  24294.                         FLAG_Z = MASK_OUT_ABOVE_32(res);
  24295.                         FLAG_N = NFLAG_32(res);
  24296.                         FLAG_V = (res > 0xffffffff)<<7;
  24297.                         REG_D[(word2 >> 12) & 7] = FLAG_Z;
  24298.                         return;
  24299.                 }
  24300.                 FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);
  24301.                 FLAG_N = NFLAG_64(res);
  24302.                 FLAG_V = VFLAG_CLEAR;
  24303.                 REG_D[word2 & 7] = (res >> 32);
  24304.                 REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
  24305.                 return;
  24306.         }
  24307.         m68ki_exception_illegal();
  24308.  
  24309. #else
  24310.  
  24311.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  24312.         {
  24313.                 uint word2 = OPER_I_16();
  24314.                 uint src = DY;
  24315.                 uint dst = REG_D[(word2 >> 12) & 7];
  24316.                 uint neg = GET_MSB_32(src ^ dst);
  24317.                 uint src1;
  24318.                 uint src2;
  24319.                 uint dst1;
  24320.                 uint dst2;
  24321.                 uint r1;
  24322.                 uint r2;
  24323.                 uint r3;
  24324.                 uint r4;
  24325.                 uint lo;
  24326.                 uint hi;
  24327.  
  24328.                 FLAG_C = CFLAG_CLEAR;
  24329.  
  24330.                 if(BIT_B(word2))                           /* signed */
  24331.                 {
  24332.                         if(GET_MSB_32(src))
  24333.                                 src = (uint)MASK_OUT_ABOVE_32(-(sint)src);
  24334.                         if(GET_MSB_32(dst))
  24335.                                 dst = (uint)MASK_OUT_ABOVE_32(-(sint)dst);
  24336.                 }
  24337.  
  24338.                 src1 = MASK_OUT_ABOVE_16(src);
  24339.                 src2 = src>>16;
  24340.                 dst1 = MASK_OUT_ABOVE_16(dst);
  24341.                 dst2 = dst>>16;
  24342.  
  24343.  
  24344.                 r1 = src1 * dst1;
  24345.                 r2 = src1 * dst2;
  24346.                 r3 = src2 * dst1;
  24347.                 r4 = src2 * dst2;
  24348.  
  24349.                 lo = r1 + (MASK_OUT_ABOVE_16(r2)<<16) + (MASK_OUT_ABOVE_16(r3)<<16);
  24350.                 hi = r4 + (r2>>16) + (r3>>16) + (((r1>>16) + MASK_OUT_ABOVE_16(r2) + MASK_OUT_ABOVE_16(r3)) >> 16);
  24351.  
  24352.                 if(BIT_B(word2) && neg)
  24353.                 {
  24354.                         hi = (uint)MASK_OUT_ABOVE_32((-(sint)hi) - (lo != 0));
  24355.                         lo = (uint)MASK_OUT_ABOVE_32(-(sint)lo);
  24356.                 }
  24357.  
  24358.                 if(BIT_A(word2))
  24359.                 {
  24360.                         REG_D[word2 & 7] = hi;
  24361.                         REG_D[(word2 >> 12) & 7] = lo;
  24362.                         FLAG_N = NFLAG_32(hi);
  24363.                         FLAG_Z = hi | lo;
  24364.                         FLAG_V = VFLAG_CLEAR;
  24365.                         return;
  24366.                 }
  24367.  
  24368.                 REG_D[(word2 >> 12) & 7] = lo;
  24369.                 FLAG_N = NFLAG_32(lo);
  24370.                 FLAG_Z = lo;
  24371.                 if(BIT_B(word2))
  24372.                         FLAG_V = (!((GET_MSB_32(lo) && hi == 0xffffffff) || (!GET_MSB_32(lo) && !hi)))<<7;
  24373.                 else
  24374.                         FLAG_V = (hi != 0) << 7;
  24375.                 return;
  24376.         }
  24377.         m68ki_exception_illegal();
  24378.  
  24379. #endif
  24380. }
  24381.  
  24382.  
  24383. void m68k_op_mull_32_ai(void)
  24384. {
  24385. #if M68K_USE_64_BIT
  24386.  
  24387.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  24388.         {
  24389.                 uint word2 = OPER_I_16();
  24390.                 uint64 src = OPER_AY_AI_32();
  24391.                 uint64 dst = REG_D[(word2 >> 12) & 7];
  24392.                 uint64 res;
  24393.  
  24394.                 FLAG_C = CFLAG_CLEAR;
  24395.  
  24396.                 if(BIT_B(word2))                           /* signed */
  24397.                 {
  24398.                         res = (sint64)((sint32)src) * (sint64)((sint32)dst);
  24399.                         if(!BIT_A(word2))
  24400.                         {
  24401.                                 FLAG_Z = MASK_OUT_ABOVE_32(res);
  24402.                                 FLAG_N = NFLAG_32(res);
  24403.                                 FLAG_V = ((sint64)res != (sint32)res)<<7;
  24404.                                 REG_D[(word2 >> 12) & 7] = FLAG_Z;
  24405.                                 return;
  24406.                         }
  24407.                         FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);
  24408.                         FLAG_N = NFLAG_64(res);
  24409.                         FLAG_V = VFLAG_CLEAR;
  24410.                         REG_D[word2 & 7] = (res >> 32);
  24411.                         REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
  24412.                         return;
  24413.                 }
  24414.  
  24415.                 res = src * dst;
  24416.                 if(!BIT_A(word2))
  24417.                 {
  24418.                         FLAG_Z = MASK_OUT_ABOVE_32(res);
  24419.                         FLAG_N = NFLAG_32(res);
  24420.                         FLAG_V = (res > 0xffffffff)<<7;
  24421.                         REG_D[(word2 >> 12) & 7] = FLAG_Z;
  24422.                         return;
  24423.                 }
  24424.                 FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);
  24425.                 FLAG_N = NFLAG_64(res);
  24426.                 FLAG_V = VFLAG_CLEAR;
  24427.                 REG_D[word2 & 7] = (res >> 32);
  24428.                 REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
  24429.                 return;
  24430.         }
  24431.         m68ki_exception_illegal();
  24432.  
  24433. #else
  24434.  
  24435.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  24436.         {
  24437.                 uint word2 = OPER_I_16();
  24438.                 uint src = OPER_AY_AI_32();
  24439.                 uint dst = REG_D[(word2 >> 12) & 7];
  24440.                 uint neg = GET_MSB_32(src ^ dst);
  24441.                 uint src1;
  24442.                 uint src2;
  24443.                 uint dst1;
  24444.                 uint dst2;
  24445.                 uint r1;
  24446.                 uint r2;
  24447.                 uint r3;
  24448.                 uint r4;
  24449.                 uint lo;
  24450.                 uint hi;
  24451.  
  24452.                 FLAG_C = CFLAG_CLEAR;
  24453.  
  24454.                 if(BIT_B(word2))                           /* signed */
  24455.                 {
  24456.                         if(GET_MSB_32(src))
  24457.                                 src = (uint)MASK_OUT_ABOVE_32(-(sint)src);
  24458.                         if(GET_MSB_32(dst))
  24459.                                 dst = (uint)MASK_OUT_ABOVE_32(-(sint)dst);
  24460.                 }
  24461.  
  24462.                 src1 = MASK_OUT_ABOVE_16(src);
  24463.                 src2 = src>>16;
  24464.                 dst1 = MASK_OUT_ABOVE_16(dst);
  24465.                 dst2 = dst>>16;
  24466.  
  24467.  
  24468.                 r1 = src1 * dst1;
  24469.                 r2 = src1 * dst2;
  24470.                 r3 = src2 * dst1;
  24471.                 r4 = src2 * dst2;
  24472.  
  24473.                 lo = r1 + (MASK_OUT_ABOVE_16(r2)<<16) + (MASK_OUT_ABOVE_16(r3)<<16);
  24474.                 hi = r4 + (r2>>16) + (r3>>16) + (((r1>>16) + MASK_OUT_ABOVE_16(r2) + MASK_OUT_ABOVE_16(r3)) >> 16);
  24475.  
  24476.                 if(BIT_B(word2) && neg)
  24477.                 {
  24478.                         hi = (uint)MASK_OUT_ABOVE_32((-(sint)hi) - (lo != 0));
  24479.                         lo = (uint)MASK_OUT_ABOVE_32(-(sint)lo);
  24480.                 }
  24481.  
  24482.                 if(BIT_A(word2))
  24483.                 {
  24484.                         REG_D[word2 & 7] = hi;
  24485.                         REG_D[(word2 >> 12) & 7] = lo;
  24486.                         FLAG_N = NFLAG_32(hi);
  24487.                         FLAG_Z = hi | lo;
  24488.                         FLAG_V = VFLAG_CLEAR;
  24489.                         return;
  24490.                 }
  24491.  
  24492.                 REG_D[(word2 >> 12) & 7] = lo;
  24493.                 FLAG_N = NFLAG_32(lo);
  24494.                 FLAG_Z = lo;
  24495.                 if(BIT_B(word2))
  24496.                         FLAG_V = (!((GET_MSB_32(lo) && hi == 0xffffffff) || (!GET_MSB_32(lo) && !hi)))<<7;
  24497.                 else
  24498.                         FLAG_V = (hi != 0) << 7;
  24499.                 return;
  24500.         }
  24501.         m68ki_exception_illegal();
  24502.  
  24503. #endif
  24504. }
  24505.  
  24506.  
  24507. void m68k_op_mull_32_pi(void)
  24508. {
  24509. #if M68K_USE_64_BIT
  24510.  
  24511.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  24512.         {
  24513.                 uint word2 = OPER_I_16();
  24514.                 uint64 src = OPER_AY_PI_32();
  24515.                 uint64 dst = REG_D[(word2 >> 12) & 7];
  24516.                 uint64 res;
  24517.  
  24518.                 FLAG_C = CFLAG_CLEAR;
  24519.  
  24520.                 if(BIT_B(word2))                           /* signed */
  24521.                 {
  24522.                         res = (sint64)((sint32)src) * (sint64)((sint32)dst);
  24523.                         if(!BIT_A(word2))
  24524.                         {
  24525.                                 FLAG_Z = MASK_OUT_ABOVE_32(res);
  24526.                                 FLAG_N = NFLAG_32(res);
  24527.                                 FLAG_V = ((sint64)res != (sint32)res)<<7;
  24528.                                 REG_D[(word2 >> 12) & 7] = FLAG_Z;
  24529.                                 return;
  24530.                         }
  24531.                         FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);
  24532.                         FLAG_N = NFLAG_64(res);
  24533.                         FLAG_V = VFLAG_CLEAR;
  24534.                         REG_D[word2 & 7] = (res >> 32);
  24535.                         REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
  24536.                         return;
  24537.                 }
  24538.  
  24539.                 res = src * dst;
  24540.                 if(!BIT_A(word2))
  24541.                 {
  24542.                         FLAG_Z = MASK_OUT_ABOVE_32(res);
  24543.                         FLAG_N = NFLAG_32(res);
  24544.                         FLAG_V = (res > 0xffffffff)<<7;
  24545.                         REG_D[(word2 >> 12) & 7] = FLAG_Z;
  24546.                         return;
  24547.                 }
  24548.                 FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);
  24549.                 FLAG_N = NFLAG_64(res);
  24550.                 FLAG_V = VFLAG_CLEAR;
  24551.                 REG_D[word2 & 7] = (res >> 32);
  24552.                 REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
  24553.                 return;
  24554.         }
  24555.         m68ki_exception_illegal();
  24556.  
  24557. #else
  24558.  
  24559.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  24560.         {
  24561.                 uint word2 = OPER_I_16();
  24562.                 uint src = OPER_AY_PI_32();
  24563.                 uint dst = REG_D[(word2 >> 12) & 7];
  24564.                 uint neg = GET_MSB_32(src ^ dst);
  24565.                 uint src1;
  24566.                 uint src2;
  24567.                 uint dst1;
  24568.                 uint dst2;
  24569.                 uint r1;
  24570.                 uint r2;
  24571.                 uint r3;
  24572.                 uint r4;
  24573.                 uint lo;
  24574.                 uint hi;
  24575.  
  24576.                 FLAG_C = CFLAG_CLEAR;
  24577.  
  24578.                 if(BIT_B(word2))                           /* signed */
  24579.                 {
  24580.                         if(GET_MSB_32(src))
  24581.                                 src = (uint)MASK_OUT_ABOVE_32(-(sint)src);
  24582.                         if(GET_MSB_32(dst))
  24583.                                 dst = (uint)MASK_OUT_ABOVE_32(-(sint)dst);
  24584.                 }
  24585.  
  24586.                 src1 = MASK_OUT_ABOVE_16(src);
  24587.                 src2 = src>>16;
  24588.                 dst1 = MASK_OUT_ABOVE_16(dst);
  24589.                 dst2 = dst>>16;
  24590.  
  24591.  
  24592.                 r1 = src1 * dst1;
  24593.                 r2 = src1 * dst2;
  24594.                 r3 = src2 * dst1;
  24595.                 r4 = src2 * dst2;
  24596.  
  24597.                 lo = r1 + (MASK_OUT_ABOVE_16(r2)<<16) + (MASK_OUT_ABOVE_16(r3)<<16);
  24598.                 hi = r4 + (r2>>16) + (r3>>16) + (((r1>>16) + MASK_OUT_ABOVE_16(r2) + MASK_OUT_ABOVE_16(r3)) >> 16);
  24599.  
  24600.                 if(BIT_B(word2) && neg)
  24601.                 {
  24602.                         hi = (uint)MASK_OUT_ABOVE_32((-(sint)hi) - (lo != 0));
  24603.                         lo = (uint)MASK_OUT_ABOVE_32(-(sint)lo);
  24604.                 }
  24605.  
  24606.                 if(BIT_A(word2))
  24607.                 {
  24608.                         REG_D[word2 & 7] = hi;
  24609.                         REG_D[(word2 >> 12) & 7] = lo;
  24610.                         FLAG_N = NFLAG_32(hi);
  24611.                         FLAG_Z = hi | lo;
  24612.                         FLAG_V = VFLAG_CLEAR;
  24613.                         return;
  24614.                 }
  24615.  
  24616.                 REG_D[(word2 >> 12) & 7] = lo;
  24617.                 FLAG_N = NFLAG_32(lo);
  24618.                 FLAG_Z = lo;
  24619.                 if(BIT_B(word2))
  24620.                         FLAG_V = (!((GET_MSB_32(lo) && hi == 0xffffffff) || (!GET_MSB_32(lo) && !hi)))<<7;
  24621.                 else
  24622.                         FLAG_V = (hi != 0) << 7;
  24623.                 return;
  24624.         }
  24625.         m68ki_exception_illegal();
  24626.  
  24627. #endif
  24628. }
  24629.  
  24630.  
  24631. void m68k_op_mull_32_pd(void)
  24632. {
  24633. #if M68K_USE_64_BIT
  24634.  
  24635.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  24636.         {
  24637.                 uint word2 = OPER_I_16();
  24638.                 uint64 src = OPER_AY_PD_32();
  24639.                 uint64 dst = REG_D[(word2 >> 12) & 7];
  24640.                 uint64 res;
  24641.  
  24642.                 FLAG_C = CFLAG_CLEAR;
  24643.  
  24644.                 if(BIT_B(word2))                           /* signed */
  24645.                 {
  24646.                         res = (sint64)((sint32)src) * (sint64)((sint32)dst);
  24647.                         if(!BIT_A(word2))
  24648.                         {
  24649.                                 FLAG_Z = MASK_OUT_ABOVE_32(res);
  24650.                                 FLAG_N = NFLAG_32(res);
  24651.                                 FLAG_V = ((sint64)res != (sint32)res)<<7;
  24652.                                 REG_D[(word2 >> 12) & 7] = FLAG_Z;
  24653.                                 return;
  24654.                         }
  24655.                         FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);
  24656.                         FLAG_N = NFLAG_64(res);
  24657.                         FLAG_V = VFLAG_CLEAR;
  24658.                         REG_D[word2 & 7] = (res >> 32);
  24659.                         REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
  24660.                         return;
  24661.                 }
  24662.  
  24663.                 res = src * dst;
  24664.                 if(!BIT_A(word2))
  24665.                 {
  24666.                         FLAG_Z = MASK_OUT_ABOVE_32(res);
  24667.                         FLAG_N = NFLAG_32(res);
  24668.                         FLAG_V = (res > 0xffffffff)<<7;
  24669.                         REG_D[(word2 >> 12) & 7] = FLAG_Z;
  24670.                         return;
  24671.                 }
  24672.                 FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);
  24673.                 FLAG_N = NFLAG_64(res);
  24674.                 FLAG_V = VFLAG_CLEAR;
  24675.                 REG_D[word2 & 7] = (res >> 32);
  24676.                 REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
  24677.                 return;
  24678.         }
  24679.         m68ki_exception_illegal();
  24680.  
  24681. #else
  24682.  
  24683.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  24684.         {
  24685.                 uint word2 = OPER_I_16();
  24686.                 uint src = OPER_AY_PD_32();
  24687.                 uint dst = REG_D[(word2 >> 12) & 7];
  24688.                 uint neg = GET_MSB_32(src ^ dst);
  24689.                 uint src1;
  24690.                 uint src2;
  24691.                 uint dst1;
  24692.                 uint dst2;
  24693.                 uint r1;
  24694.                 uint r2;
  24695.                 uint r3;
  24696.                 uint r4;
  24697.                 uint lo;
  24698.                 uint hi;
  24699.  
  24700.                 FLAG_C = CFLAG_CLEAR;
  24701.  
  24702.                 if(BIT_B(word2))                           /* signed */
  24703.                 {
  24704.                         if(GET_MSB_32(src))
  24705.                                 src = (uint)MASK_OUT_ABOVE_32(-(sint)src);
  24706.                         if(GET_MSB_32(dst))
  24707.                                 dst = (uint)MASK_OUT_ABOVE_32(-(sint)dst);
  24708.                 }
  24709.  
  24710.                 src1 = MASK_OUT_ABOVE_16(src);
  24711.                 src2 = src>>16;
  24712.                 dst1 = MASK_OUT_ABOVE_16(dst);
  24713.                 dst2 = dst>>16;
  24714.  
  24715.  
  24716.                 r1 = src1 * dst1;
  24717.                 r2 = src1 * dst2;
  24718.                 r3 = src2 * dst1;
  24719.                 r4 = src2 * dst2;
  24720.  
  24721.                 lo = r1 + (MASK_OUT_ABOVE_16(r2)<<16) + (MASK_OUT_ABOVE_16(r3)<<16);
  24722.                 hi = r4 + (r2>>16) + (r3>>16) + (((r1>>16) + MASK_OUT_ABOVE_16(r2) + MASK_OUT_ABOVE_16(r3)) >> 16);
  24723.  
  24724.                 if(BIT_B(word2) && neg)
  24725.                 {
  24726.                         hi = (uint)MASK_OUT_ABOVE_32((-(sint)hi) - (lo != 0));
  24727.                         lo = (uint)MASK_OUT_ABOVE_32(-(sint)lo);
  24728.                 }
  24729.  
  24730.                 if(BIT_A(word2))
  24731.                 {
  24732.                         REG_D[word2 & 7] = hi;
  24733.                         REG_D[(word2 >> 12) & 7] = lo;
  24734.                         FLAG_N = NFLAG_32(hi);
  24735.                         FLAG_Z = hi | lo;
  24736.                         FLAG_V = VFLAG_CLEAR;
  24737.                         return;
  24738.                 }
  24739.  
  24740.                 REG_D[(word2 >> 12) & 7] = lo;
  24741.                 FLAG_N = NFLAG_32(lo);
  24742.                 FLAG_Z = lo;
  24743.                 if(BIT_B(word2))
  24744.                         FLAG_V = (!((GET_MSB_32(lo) && hi == 0xffffffff) || (!GET_MSB_32(lo) && !hi)))<<7;
  24745.                 else
  24746.                         FLAG_V = (hi != 0) << 7;
  24747.                 return;
  24748.         }
  24749.         m68ki_exception_illegal();
  24750.  
  24751. #endif
  24752. }
  24753.  
  24754.  
  24755. void m68k_op_mull_32_di(void)
  24756. {
  24757. #if M68K_USE_64_BIT
  24758.  
  24759.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  24760.         {
  24761.                 uint word2 = OPER_I_16();
  24762.                 uint64 src = OPER_AY_DI_32();
  24763.                 uint64 dst = REG_D[(word2 >> 12) & 7];
  24764.                 uint64 res;
  24765.  
  24766.                 FLAG_C = CFLAG_CLEAR;
  24767.  
  24768.                 if(BIT_B(word2))                           /* signed */
  24769.                 {
  24770.                         res = (sint64)((sint32)src) * (sint64)((sint32)dst);
  24771.                         if(!BIT_A(word2))
  24772.                         {
  24773.                                 FLAG_Z = MASK_OUT_ABOVE_32(res);
  24774.                                 FLAG_N = NFLAG_32(res);
  24775.                                 FLAG_V = ((sint64)res != (sint32)res)<<7;
  24776.                                 REG_D[(word2 >> 12) & 7] = FLAG_Z;
  24777.                                 return;
  24778.                         }
  24779.                         FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);
  24780.                         FLAG_N = NFLAG_64(res);
  24781.                         FLAG_V = VFLAG_CLEAR;
  24782.                         REG_D[word2 & 7] = (res >> 32);
  24783.                         REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
  24784.                         return;
  24785.                 }
  24786.  
  24787.                 res = src * dst;
  24788.                 if(!BIT_A(word2))
  24789.                 {
  24790.                         FLAG_Z = MASK_OUT_ABOVE_32(res);
  24791.                         FLAG_N = NFLAG_32(res);
  24792.                         FLAG_V = (res > 0xffffffff)<<7;
  24793.                         REG_D[(word2 >> 12) & 7] = FLAG_Z;
  24794.                         return;
  24795.                 }
  24796.                 FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);
  24797.                 FLAG_N = NFLAG_64(res);
  24798.                 FLAG_V = VFLAG_CLEAR;
  24799.                 REG_D[word2 & 7] = (res >> 32);
  24800.                 REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
  24801.                 return;
  24802.         }
  24803.         m68ki_exception_illegal();
  24804.  
  24805. #else
  24806.  
  24807.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  24808.         {
  24809.                 uint word2 = OPER_I_16();
  24810.                 uint src = OPER_AY_DI_32();
  24811.                 uint dst = REG_D[(word2 >> 12) & 7];
  24812.                 uint neg = GET_MSB_32(src ^ dst);
  24813.                 uint src1;
  24814.                 uint src2;
  24815.                 uint dst1;
  24816.                 uint dst2;
  24817.                 uint r1;
  24818.                 uint r2;
  24819.                 uint r3;
  24820.                 uint r4;
  24821.                 uint lo;
  24822.                 uint hi;
  24823.  
  24824.                 FLAG_C = CFLAG_CLEAR;
  24825.  
  24826.                 if(BIT_B(word2))                           /* signed */
  24827.                 {
  24828.                         if(GET_MSB_32(src))
  24829.                                 src = (uint)MASK_OUT_ABOVE_32(-(sint)src);
  24830.                         if(GET_MSB_32(dst))
  24831.                                 dst = (uint)MASK_OUT_ABOVE_32(-(sint)dst);
  24832.                 }
  24833.  
  24834.                 src1 = MASK_OUT_ABOVE_16(src);
  24835.                 src2 = src>>16;
  24836.                 dst1 = MASK_OUT_ABOVE_16(dst);
  24837.                 dst2 = dst>>16;
  24838.  
  24839.  
  24840.                 r1 = src1 * dst1;
  24841.                 r2 = src1 * dst2;
  24842.                 r3 = src2 * dst1;
  24843.                 r4 = src2 * dst2;
  24844.  
  24845.                 lo = r1 + (MASK_OUT_ABOVE_16(r2)<<16) + (MASK_OUT_ABOVE_16(r3)<<16);
  24846.                 hi = r4 + (r2>>16) + (r3>>16) + (((r1>>16) + MASK_OUT_ABOVE_16(r2) + MASK_OUT_ABOVE_16(r3)) >> 16);
  24847.  
  24848.                 if(BIT_B(word2) && neg)
  24849.                 {
  24850.                         hi = (uint)MASK_OUT_ABOVE_32((-(sint)hi) - (lo != 0));
  24851.                         lo = (uint)MASK_OUT_ABOVE_32(-(sint)lo);
  24852.                 }
  24853.  
  24854.                 if(BIT_A(word2))
  24855.                 {
  24856.                         REG_D[word2 & 7] = hi;
  24857.                         REG_D[(word2 >> 12) & 7] = lo;
  24858.                         FLAG_N = NFLAG_32(hi);
  24859.                         FLAG_Z = hi | lo;
  24860.                         FLAG_V = VFLAG_CLEAR;
  24861.                         return;
  24862.                 }
  24863.  
  24864.                 REG_D[(word2 >> 12) & 7] = lo;
  24865.                 FLAG_N = NFLAG_32(lo);
  24866.                 FLAG_Z = lo;
  24867.                 if(BIT_B(word2))
  24868.                         FLAG_V = (!((GET_MSB_32(lo) && hi == 0xffffffff) || (!GET_MSB_32(lo) && !hi)))<<7;
  24869.                 else
  24870.                         FLAG_V = (hi != 0) << 7;
  24871.                 return;
  24872.         }
  24873.         m68ki_exception_illegal();
  24874.  
  24875. #endif
  24876. }
  24877.  
  24878.  
  24879. void m68k_op_mull_32_ix(void)
  24880. {
  24881. #if M68K_USE_64_BIT
  24882.  
  24883.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  24884.         {
  24885.                 uint word2 = OPER_I_16();
  24886.                 uint64 src = OPER_AY_IX_32();
  24887.                 uint64 dst = REG_D[(word2 >> 12) & 7];
  24888.                 uint64 res;
  24889.  
  24890.                 FLAG_C = CFLAG_CLEAR;
  24891.  
  24892.                 if(BIT_B(word2))                           /* signed */
  24893.                 {
  24894.                         res = (sint64)((sint32)src) * (sint64)((sint32)dst);
  24895.                         if(!BIT_A(word2))
  24896.                         {
  24897.                                 FLAG_Z = MASK_OUT_ABOVE_32(res);
  24898.                                 FLAG_N = NFLAG_32(res);
  24899.                                 FLAG_V = ((sint64)res != (sint32)res)<<7;
  24900.                                 REG_D[(word2 >> 12) & 7] = FLAG_Z;
  24901.                                 return;
  24902.                         }
  24903.                         FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);
  24904.                         FLAG_N = NFLAG_64(res);
  24905.                         FLAG_V = VFLAG_CLEAR;
  24906.                         REG_D[word2 & 7] = (res >> 32);
  24907.                         REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
  24908.                         return;
  24909.                 }
  24910.  
  24911.                 res = src * dst;
  24912.                 if(!BIT_A(word2))
  24913.                 {
  24914.                         FLAG_Z = MASK_OUT_ABOVE_32(res);
  24915.                         FLAG_N = NFLAG_32(res);
  24916.                         FLAG_V = (res > 0xffffffff)<<7;
  24917.                         REG_D[(word2 >> 12) & 7] = FLAG_Z;
  24918.                         return;
  24919.                 }
  24920.                 FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);
  24921.                 FLAG_N = NFLAG_64(res);
  24922.                 FLAG_V = VFLAG_CLEAR;
  24923.                 REG_D[word2 & 7] = (res >> 32);
  24924.                 REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
  24925.                 return;
  24926.         }
  24927.         m68ki_exception_illegal();
  24928.  
  24929. #else
  24930.  
  24931.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  24932.         {
  24933.                 uint word2 = OPER_I_16();
  24934.                 uint src = OPER_AY_IX_32();
  24935.                 uint dst = REG_D[(word2 >> 12) & 7];
  24936.                 uint neg = GET_MSB_32(src ^ dst);
  24937.                 uint src1;
  24938.                 uint src2;
  24939.                 uint dst1;
  24940.                 uint dst2;
  24941.                 uint r1;
  24942.                 uint r2;
  24943.                 uint r3;
  24944.                 uint r4;
  24945.                 uint lo;
  24946.                 uint hi;
  24947.  
  24948.                 FLAG_C = CFLAG_CLEAR;
  24949.  
  24950.                 if(BIT_B(word2))                           /* signed */
  24951.                 {
  24952.                         if(GET_MSB_32(src))
  24953.                                 src = (uint)MASK_OUT_ABOVE_32(-(sint)src);
  24954.                         if(GET_MSB_32(dst))
  24955.                                 dst = (uint)MASK_OUT_ABOVE_32(-(sint)dst);
  24956.                 }
  24957.  
  24958.                 src1 = MASK_OUT_ABOVE_16(src);
  24959.                 src2 = src>>16;
  24960.                 dst1 = MASK_OUT_ABOVE_16(dst);
  24961.                 dst2 = dst>>16;
  24962.  
  24963.  
  24964.                 r1 = src1 * dst1;
  24965.                 r2 = src1 * dst2;
  24966.                 r3 = src2 * dst1;
  24967.                 r4 = src2 * dst2;
  24968.  
  24969.                 lo = r1 + (MASK_OUT_ABOVE_16(r2)<<16) + (MASK_OUT_ABOVE_16(r3)<<16);
  24970.                 hi = r4 + (r2>>16) + (r3>>16) + (((r1>>16) + MASK_OUT_ABOVE_16(r2) + MASK_OUT_ABOVE_16(r3)) >> 16);
  24971.  
  24972.                 if(BIT_B(word2) && neg)
  24973.                 {
  24974.                         hi = (uint)MASK_OUT_ABOVE_32((-(sint)hi) - (lo != 0));
  24975.                         lo = (uint)MASK_OUT_ABOVE_32(-(sint)lo);
  24976.                 }
  24977.  
  24978.                 if(BIT_A(word2))
  24979.                 {
  24980.                         REG_D[word2 & 7] = hi;
  24981.                         REG_D[(word2 >> 12) & 7] = lo;
  24982.                         FLAG_N = NFLAG_32(hi);
  24983.                         FLAG_Z = hi | lo;
  24984.                         FLAG_V = VFLAG_CLEAR;
  24985.                         return;
  24986.                 }
  24987.  
  24988.                 REG_D[(word2 >> 12) & 7] = lo;
  24989.                 FLAG_N = NFLAG_32(lo);
  24990.                 FLAG_Z = lo;
  24991.                 if(BIT_B(word2))
  24992.                         FLAG_V = (!((GET_MSB_32(lo) && hi == 0xffffffff) || (!GET_MSB_32(lo) && !hi)))<<7;
  24993.                 else
  24994.                         FLAG_V = (hi != 0) << 7;
  24995.                 return;
  24996.         }
  24997.         m68ki_exception_illegal();
  24998.  
  24999. #endif
  25000. }
  25001.  
  25002.  
  25003. void m68k_op_mull_32_aw(void)
  25004. {
  25005. #if M68K_USE_64_BIT
  25006.  
  25007.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  25008.         {
  25009.                 uint word2 = OPER_I_16();
  25010.                 uint64 src = OPER_AW_32();
  25011.                 uint64 dst = REG_D[(word2 >> 12) & 7];
  25012.                 uint64 res;
  25013.  
  25014.                 FLAG_C = CFLAG_CLEAR;
  25015.  
  25016.                 if(BIT_B(word2))                           /* signed */
  25017.                 {
  25018.                         res = (sint64)((sint32)src) * (sint64)((sint32)dst);
  25019.                         if(!BIT_A(word2))
  25020.                         {
  25021.                                 FLAG_Z = MASK_OUT_ABOVE_32(res);
  25022.                                 FLAG_N = NFLAG_32(res);
  25023.                                 FLAG_V = ((sint64)res != (sint32)res)<<7;
  25024.                                 REG_D[(word2 >> 12) & 7] = FLAG_Z;
  25025.                                 return;
  25026.                         }
  25027.                         FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);
  25028.                         FLAG_N = NFLAG_64(res);
  25029.                         FLAG_V = VFLAG_CLEAR;
  25030.                         REG_D[word2 & 7] = (res >> 32);
  25031.                         REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
  25032.                         return;
  25033.                 }
  25034.  
  25035.                 res = src * dst;
  25036.                 if(!BIT_A(word2))
  25037.                 {
  25038.                         FLAG_Z = MASK_OUT_ABOVE_32(res);
  25039.                         FLAG_N = NFLAG_32(res);
  25040.                         FLAG_V = (res > 0xffffffff)<<7;
  25041.                         REG_D[(word2 >> 12) & 7] = FLAG_Z;
  25042.                         return;
  25043.                 }
  25044.                 FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);
  25045.                 FLAG_N = NFLAG_64(res);
  25046.                 FLAG_V = VFLAG_CLEAR;
  25047.                 REG_D[word2 & 7] = (res >> 32);
  25048.                 REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
  25049.                 return;
  25050.         }
  25051.         m68ki_exception_illegal();
  25052.  
  25053. #else
  25054.  
  25055.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  25056.         {
  25057.                 uint word2 = OPER_I_16();
  25058.                 uint src = OPER_AW_32();
  25059.                 uint dst = REG_D[(word2 >> 12) & 7];
  25060.                 uint neg = GET_MSB_32(src ^ dst);
  25061.                 uint src1;
  25062.                 uint src2;
  25063.                 uint dst1;
  25064.                 uint dst2;
  25065.                 uint r1;
  25066.                 uint r2;
  25067.                 uint r3;
  25068.                 uint r4;
  25069.                 uint lo;
  25070.                 uint hi;
  25071.  
  25072.                 FLAG_C = CFLAG_CLEAR;
  25073.  
  25074.                 if(BIT_B(word2))                           /* signed */
  25075.                 {
  25076.                         if(GET_MSB_32(src))
  25077.                                 src = (uint)MASK_OUT_ABOVE_32(-(sint)src);
  25078.                         if(GET_MSB_32(dst))
  25079.                                 dst = (uint)MASK_OUT_ABOVE_32(-(sint)dst);
  25080.                 }
  25081.  
  25082.                 src1 = MASK_OUT_ABOVE_16(src);
  25083.                 src2 = src>>16;
  25084.                 dst1 = MASK_OUT_ABOVE_16(dst);
  25085.                 dst2 = dst>>16;
  25086.  
  25087.  
  25088.                 r1 = src1 * dst1;
  25089.                 r2 = src1 * dst2;
  25090.                 r3 = src2 * dst1;
  25091.                 r4 = src2 * dst2;
  25092.  
  25093.                 lo = r1 + (MASK_OUT_ABOVE_16(r2)<<16) + (MASK_OUT_ABOVE_16(r3)<<16);
  25094.                 hi = r4 + (r2>>16) + (r3>>16) + (((r1>>16) + MASK_OUT_ABOVE_16(r2) + MASK_OUT_ABOVE_16(r3)) >> 16);
  25095.  
  25096.                 if(BIT_B(word2) && neg)
  25097.                 {
  25098.                         hi = (uint)MASK_OUT_ABOVE_32((-(sint)hi) - (lo != 0));
  25099.                         lo = (uint)MASK_OUT_ABOVE_32(-(sint)lo);
  25100.                 }
  25101.  
  25102.                 if(BIT_A(word2))
  25103.                 {
  25104.                         REG_D[word2 & 7] = hi;
  25105.                         REG_D[(word2 >> 12) & 7] = lo;
  25106.                         FLAG_N = NFLAG_32(hi);
  25107.                         FLAG_Z = hi | lo;
  25108.                         FLAG_V = VFLAG_CLEAR;
  25109.                         return;
  25110.                 }
  25111.  
  25112.                 REG_D[(word2 >> 12) & 7] = lo;
  25113.                 FLAG_N = NFLAG_32(lo);
  25114.                 FLAG_Z = lo;
  25115.                 if(BIT_B(word2))
  25116.                         FLAG_V = (!((GET_MSB_32(lo) && hi == 0xffffffff) || (!GET_MSB_32(lo) && !hi)))<<7;
  25117.                 else
  25118.                         FLAG_V = (hi != 0) << 7;
  25119.                 return;
  25120.         }
  25121.         m68ki_exception_illegal();
  25122.  
  25123. #endif
  25124. }
  25125.  
  25126.  
  25127. void m68k_op_mull_32_al(void)
  25128. {
  25129. #if M68K_USE_64_BIT
  25130.  
  25131.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  25132.         {
  25133.                 uint word2 = OPER_I_16();
  25134.                 uint64 src = OPER_AL_32();
  25135.                 uint64 dst = REG_D[(word2 >> 12) & 7];
  25136.                 uint64 res;
  25137.  
  25138.                 FLAG_C = CFLAG_CLEAR;
  25139.  
  25140.                 if(BIT_B(word2))                           /* signed */
  25141.                 {
  25142.                         res = (sint64)((sint32)src) * (sint64)((sint32)dst);
  25143.                         if(!BIT_A(word2))
  25144.                         {
  25145.                                 FLAG_Z = MASK_OUT_ABOVE_32(res);
  25146.                                 FLAG_N = NFLAG_32(res);
  25147.                                 FLAG_V = ((sint64)res != (sint32)res)<<7;
  25148.                                 REG_D[(word2 >> 12) & 7] = FLAG_Z;
  25149.                                 return;
  25150.                         }
  25151.                         FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);
  25152.                         FLAG_N = NFLAG_64(res);
  25153.                         FLAG_V = VFLAG_CLEAR;
  25154.                         REG_D[word2 & 7] = (res >> 32);
  25155.                         REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
  25156.                         return;
  25157.                 }
  25158.  
  25159.                 res = src * dst;
  25160.                 if(!BIT_A(word2))
  25161.                 {
  25162.                         FLAG_Z = MASK_OUT_ABOVE_32(res);
  25163.                         FLAG_N = NFLAG_32(res);
  25164.                         FLAG_V = (res > 0xffffffff)<<7;
  25165.                         REG_D[(word2 >> 12) & 7] = FLAG_Z;
  25166.                         return;
  25167.                 }
  25168.                 FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);
  25169.                 FLAG_N = NFLAG_64(res);
  25170.                 FLAG_V = VFLAG_CLEAR;
  25171.                 REG_D[word2 & 7] = (res >> 32);
  25172.                 REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
  25173.                 return;
  25174.         }
  25175.         m68ki_exception_illegal();
  25176.  
  25177. #else
  25178.  
  25179.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  25180.         {
  25181.                 uint word2 = OPER_I_16();
  25182.                 uint src = OPER_AL_32();
  25183.                 uint dst = REG_D[(word2 >> 12) & 7];
  25184.                 uint neg = GET_MSB_32(src ^ dst);
  25185.                 uint src1;
  25186.                 uint src2;
  25187.                 uint dst1;
  25188.                 uint dst2;
  25189.                 uint r1;
  25190.                 uint r2;
  25191.                 uint r3;
  25192.                 uint r4;
  25193.                 uint lo;
  25194.                 uint hi;
  25195.  
  25196.                 FLAG_C = CFLAG_CLEAR;
  25197.  
  25198.                 if(BIT_B(word2))                           /* signed */
  25199.                 {
  25200.                         if(GET_MSB_32(src))
  25201.                                 src = (uint)MASK_OUT_ABOVE_32(-(sint)src);
  25202.                         if(GET_MSB_32(dst))
  25203.                                 dst = (uint)MASK_OUT_ABOVE_32(-(sint)dst);
  25204.                 }
  25205.  
  25206.                 src1 = MASK_OUT_ABOVE_16(src);
  25207.                 src2 = src>>16;
  25208.                 dst1 = MASK_OUT_ABOVE_16(dst);
  25209.                 dst2 = dst>>16;
  25210.  
  25211.  
  25212.                 r1 = src1 * dst1;
  25213.                 r2 = src1 * dst2;
  25214.                 r3 = src2 * dst1;
  25215.                 r4 = src2 * dst2;
  25216.  
  25217.                 lo = r1 + (MASK_OUT_ABOVE_16(r2)<<16) + (MASK_OUT_ABOVE_16(r3)<<16);
  25218.                 hi = r4 + (r2>>16) + (r3>>16) + (((r1>>16) + MASK_OUT_ABOVE_16(r2) + MASK_OUT_ABOVE_16(r3)) >> 16);
  25219.  
  25220.                 if(BIT_B(word2) && neg)
  25221.                 {
  25222.                         hi = (uint)MASK_OUT_ABOVE_32((-(sint)hi) - (lo != 0));
  25223.                         lo = (uint)MASK_OUT_ABOVE_32(-(sint)lo);
  25224.                 }
  25225.  
  25226.                 if(BIT_A(word2))
  25227.                 {
  25228.                         REG_D[word2 & 7] = hi;
  25229.                         REG_D[(word2 >> 12) & 7] = lo;
  25230.                         FLAG_N = NFLAG_32(hi);
  25231.                         FLAG_Z = hi | lo;
  25232.                         FLAG_V = VFLAG_CLEAR;
  25233.                         return;
  25234.                 }
  25235.  
  25236.                 REG_D[(word2 >> 12) & 7] = lo;
  25237.                 FLAG_N = NFLAG_32(lo);
  25238.                 FLAG_Z = lo;
  25239.                 if(BIT_B(word2))
  25240.                         FLAG_V = (!((GET_MSB_32(lo) && hi == 0xffffffff) || (!GET_MSB_32(lo) && !hi)))<<7;
  25241.                 else
  25242.                         FLAG_V = (hi != 0) << 7;
  25243.                 return;
  25244.         }
  25245.         m68ki_exception_illegal();
  25246.  
  25247. #endif
  25248. }
  25249.  
  25250.  
  25251. void m68k_op_mull_32_pcdi(void)
  25252. {
  25253. #if M68K_USE_64_BIT
  25254.  
  25255.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  25256.         {
  25257.                 uint word2 = OPER_I_16();
  25258.                 uint64 src = OPER_PCDI_32();
  25259.                 uint64 dst = REG_D[(word2 >> 12) & 7];
  25260.                 uint64 res;
  25261.  
  25262.                 FLAG_C = CFLAG_CLEAR;
  25263.  
  25264.                 if(BIT_B(word2))                           /* signed */
  25265.                 {
  25266.                         res = (sint64)((sint32)src) * (sint64)((sint32)dst);
  25267.                         if(!BIT_A(word2))
  25268.                         {
  25269.                                 FLAG_Z = MASK_OUT_ABOVE_32(res);
  25270.                                 FLAG_N = NFLAG_32(res);
  25271.                                 FLAG_V = ((sint64)res != (sint32)res)<<7;
  25272.                                 REG_D[(word2 >> 12) & 7] = FLAG_Z;
  25273.                                 return;
  25274.                         }
  25275.                         FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);
  25276.                         FLAG_N = NFLAG_64(res);
  25277.                         FLAG_V = VFLAG_CLEAR;
  25278.                         REG_D[word2 & 7] = (res >> 32);
  25279.                         REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
  25280.                         return;
  25281.                 }
  25282.  
  25283.                 res = src * dst;
  25284.                 if(!BIT_A(word2))
  25285.                 {
  25286.                         FLAG_Z = MASK_OUT_ABOVE_32(res);
  25287.                         FLAG_N = NFLAG_32(res);
  25288.                         FLAG_V = (res > 0xffffffff)<<7;
  25289.                         REG_D[(word2 >> 12) & 7] = FLAG_Z;
  25290.                         return;
  25291.                 }
  25292.                 FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);
  25293.                 FLAG_N = NFLAG_64(res);
  25294.                 FLAG_V = VFLAG_CLEAR;
  25295.                 REG_D[word2 & 7] = (res >> 32);
  25296.                 REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
  25297.                 return;
  25298.         }
  25299.         m68ki_exception_illegal();
  25300.  
  25301. #else
  25302.  
  25303.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  25304.         {
  25305.                 uint word2 = OPER_I_16();
  25306.                 uint src = OPER_PCDI_32();
  25307.                 uint dst = REG_D[(word2 >> 12) & 7];
  25308.                 uint neg = GET_MSB_32(src ^ dst);
  25309.                 uint src1;
  25310.                 uint src2;
  25311.                 uint dst1;
  25312.                 uint dst2;
  25313.                 uint r1;
  25314.                 uint r2;
  25315.                 uint r3;
  25316.                 uint r4;
  25317.                 uint lo;
  25318.                 uint hi;
  25319.  
  25320.                 FLAG_C = CFLAG_CLEAR;
  25321.  
  25322.                 if(BIT_B(word2))                           /* signed */
  25323.                 {
  25324.                         if(GET_MSB_32(src))
  25325.                                 src = (uint)MASK_OUT_ABOVE_32(-(sint)src);
  25326.                         if(GET_MSB_32(dst))
  25327.                                 dst = (uint)MASK_OUT_ABOVE_32(-(sint)dst);
  25328.                 }
  25329.  
  25330.                 src1 = MASK_OUT_ABOVE_16(src);
  25331.                 src2 = src>>16;
  25332.                 dst1 = MASK_OUT_ABOVE_16(dst);
  25333.                 dst2 = dst>>16;
  25334.  
  25335.  
  25336.                 r1 = src1 * dst1;
  25337.                 r2 = src1 * dst2;
  25338.                 r3 = src2 * dst1;
  25339.                 r4 = src2 * dst2;
  25340.  
  25341.                 lo = r1 + (MASK_OUT_ABOVE_16(r2)<<16) + (MASK_OUT_ABOVE_16(r3)<<16);
  25342.                 hi = r4 + (r2>>16) + (r3>>16) + (((r1>>16) + MASK_OUT_ABOVE_16(r2) + MASK_OUT_ABOVE_16(r3)) >> 16);
  25343.  
  25344.                 if(BIT_B(word2) && neg)
  25345.                 {
  25346.                         hi = (uint)MASK_OUT_ABOVE_32((-(sint)hi) - (lo != 0));
  25347.                         lo = (uint)MASK_OUT_ABOVE_32(-(sint)lo);
  25348.                 }
  25349.  
  25350.                 if(BIT_A(word2))
  25351.                 {
  25352.                         REG_D[word2 & 7] = hi;
  25353.                         REG_D[(word2 >> 12) & 7] = lo;
  25354.                         FLAG_N = NFLAG_32(hi);
  25355.                         FLAG_Z = hi | lo;
  25356.                         FLAG_V = VFLAG_CLEAR;
  25357.                         return;
  25358.                 }
  25359.  
  25360.                 REG_D[(word2 >> 12) & 7] = lo;
  25361.                 FLAG_N = NFLAG_32(lo);
  25362.                 FLAG_Z = lo;
  25363.                 if(BIT_B(word2))
  25364.                         FLAG_V = (!((GET_MSB_32(lo) && hi == 0xffffffff) || (!GET_MSB_32(lo) && !hi)))<<7;
  25365.                 else
  25366.                         FLAG_V = (hi != 0) << 7;
  25367.                 return;
  25368.         }
  25369.         m68ki_exception_illegal();
  25370.  
  25371. #endif
  25372. }
  25373.  
  25374.  
  25375. void m68k_op_mull_32_pcix(void)
  25376. {
  25377. #if M68K_USE_64_BIT
  25378.  
  25379.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  25380.         {
  25381.                 uint word2 = OPER_I_16();
  25382.                 uint64 src = OPER_PCIX_32();
  25383.                 uint64 dst = REG_D[(word2 >> 12) & 7];
  25384.                 uint64 res;
  25385.  
  25386.                 FLAG_C = CFLAG_CLEAR;
  25387.  
  25388.                 if(BIT_B(word2))                           /* signed */
  25389.                 {
  25390.                         res = (sint64)((sint32)src) * (sint64)((sint32)dst);
  25391.                         if(!BIT_A(word2))
  25392.                         {
  25393.                                 FLAG_Z = MASK_OUT_ABOVE_32(res);
  25394.                                 FLAG_N = NFLAG_32(res);
  25395.                                 FLAG_V = ((sint64)res != (sint32)res)<<7;
  25396.                                 REG_D[(word2 >> 12) & 7] = FLAG_Z;
  25397.                                 return;
  25398.                         }
  25399.                         FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);
  25400.                         FLAG_N = NFLAG_64(res);
  25401.                         FLAG_V = VFLAG_CLEAR;
  25402.                         REG_D[word2 & 7] = (res >> 32);
  25403.                         REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
  25404.                         return;
  25405.                 }
  25406.  
  25407.                 res = src * dst;
  25408.                 if(!BIT_A(word2))
  25409.                 {
  25410.                         FLAG_Z = MASK_OUT_ABOVE_32(res);
  25411.                         FLAG_N = NFLAG_32(res);
  25412.                         FLAG_V = (res > 0xffffffff)<<7;
  25413.                         REG_D[(word2 >> 12) & 7] = FLAG_Z;
  25414.                         return;
  25415.                 }
  25416.                 FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);
  25417.                 FLAG_N = NFLAG_64(res);
  25418.                 FLAG_V = VFLAG_CLEAR;
  25419.                 REG_D[word2 & 7] = (res >> 32);
  25420.                 REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
  25421.                 return;
  25422.         }
  25423.         m68ki_exception_illegal();
  25424.  
  25425. #else
  25426.  
  25427.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  25428.         {
  25429.                 uint word2 = OPER_I_16();
  25430.                 uint src = OPER_PCIX_32();
  25431.                 uint dst = REG_D[(word2 >> 12) & 7];
  25432.                 uint neg = GET_MSB_32(src ^ dst);
  25433.                 uint src1;
  25434.                 uint src2;
  25435.                 uint dst1;
  25436.                 uint dst2;
  25437.                 uint r1;
  25438.                 uint r2;
  25439.                 uint r3;
  25440.                 uint r4;
  25441.                 uint lo;
  25442.                 uint hi;
  25443.  
  25444.                 FLAG_C = CFLAG_CLEAR;
  25445.  
  25446.                 if(BIT_B(word2))                           /* signed */
  25447.                 {
  25448.                         if(GET_MSB_32(src))
  25449.                                 src = (uint)MASK_OUT_ABOVE_32(-(sint)src);
  25450.                         if(GET_MSB_32(dst))
  25451.                                 dst = (uint)MASK_OUT_ABOVE_32(-(sint)dst);
  25452.                 }
  25453.  
  25454.                 src1 = MASK_OUT_ABOVE_16(src);
  25455.                 src2 = src>>16;
  25456.                 dst1 = MASK_OUT_ABOVE_16(dst);
  25457.                 dst2 = dst>>16;
  25458.  
  25459.  
  25460.                 r1 = src1 * dst1;
  25461.                 r2 = src1 * dst2;
  25462.                 r3 = src2 * dst1;
  25463.                 r4 = src2 * dst2;
  25464.  
  25465.                 lo = r1 + (MASK_OUT_ABOVE_16(r2)<<16) + (MASK_OUT_ABOVE_16(r3)<<16);
  25466.                 hi = r4 + (r2>>16) + (r3>>16) + (((r1>>16) + MASK_OUT_ABOVE_16(r2) + MASK_OUT_ABOVE_16(r3)) >> 16);
  25467.  
  25468.                 if(BIT_B(word2) && neg)
  25469.                 {
  25470.                         hi = (uint)MASK_OUT_ABOVE_32((-(sint)hi) - (lo != 0));
  25471.                         lo = (uint)MASK_OUT_ABOVE_32(-(sint)lo);
  25472.                 }
  25473.  
  25474.                 if(BIT_A(word2))
  25475.                 {
  25476.                         REG_D[word2 & 7] = hi;
  25477.                         REG_D[(word2 >> 12) & 7] = lo;
  25478.                         FLAG_N = NFLAG_32(hi);
  25479.                         FLAG_Z = hi | lo;
  25480.                         FLAG_V = VFLAG_CLEAR;
  25481.                         return;
  25482.                 }
  25483.  
  25484.                 REG_D[(word2 >> 12) & 7] = lo;
  25485.                 FLAG_N = NFLAG_32(lo);
  25486.                 FLAG_Z = lo;
  25487.                 if(BIT_B(word2))
  25488.                         FLAG_V = (!((GET_MSB_32(lo) && hi == 0xffffffff) || (!GET_MSB_32(lo) && !hi)))<<7;
  25489.                 else
  25490.                         FLAG_V = (hi != 0) << 7;
  25491.                 return;
  25492.         }
  25493.         m68ki_exception_illegal();
  25494.  
  25495. #endif
  25496. }
  25497.  
  25498.  
  25499. void m68k_op_mull_32_i(void)
  25500. {
  25501. #if M68K_USE_64_BIT
  25502.  
  25503.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  25504.         {
  25505.                 uint word2 = OPER_I_16();
  25506.                 uint64 src = OPER_I_32();
  25507.                 uint64 dst = REG_D[(word2 >> 12) & 7];
  25508.                 uint64 res;
  25509.  
  25510.                 FLAG_C = CFLAG_CLEAR;
  25511.  
  25512.                 if(BIT_B(word2))                           /* signed */
  25513.                 {
  25514.                         res = (sint64)((sint32)src) * (sint64)((sint32)dst);
  25515.                         if(!BIT_A(word2))
  25516.                         {
  25517.                                 FLAG_Z = MASK_OUT_ABOVE_32(res);
  25518.                                 FLAG_N = NFLAG_32(res);
  25519.                                 FLAG_V = ((sint64)res != (sint32)res)<<7;
  25520.                                 REG_D[(word2 >> 12) & 7] = FLAG_Z;
  25521.                                 return;
  25522.                         }
  25523.                         FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);
  25524.                         FLAG_N = NFLAG_64(res);
  25525.                         FLAG_V = VFLAG_CLEAR;
  25526.                         REG_D[word2 & 7] = (res >> 32);
  25527.                         REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
  25528.                         return;
  25529.                 }
  25530.  
  25531.                 res = src * dst;
  25532.                 if(!BIT_A(word2))
  25533.                 {
  25534.                         FLAG_Z = MASK_OUT_ABOVE_32(res);
  25535.                         FLAG_N = NFLAG_32(res);
  25536.                         FLAG_V = (res > 0xffffffff)<<7;
  25537.                         REG_D[(word2 >> 12) & 7] = FLAG_Z;
  25538.                         return;
  25539.                 }
  25540.                 FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);
  25541.                 FLAG_N = NFLAG_64(res);
  25542.                 FLAG_V = VFLAG_CLEAR;
  25543.                 REG_D[word2 & 7] = (res >> 32);
  25544.                 REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
  25545.                 return;
  25546.         }
  25547.         m68ki_exception_illegal();
  25548.  
  25549. #else
  25550.  
  25551.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  25552.         {
  25553.                 uint word2 = OPER_I_16();
  25554.                 uint src = OPER_I_32();
  25555.                 uint dst = REG_D[(word2 >> 12) & 7];
  25556.                 uint neg = GET_MSB_32(src ^ dst);
  25557.                 uint src1;
  25558.                 uint src2;
  25559.                 uint dst1;
  25560.                 uint dst2;
  25561.                 uint r1;
  25562.                 uint r2;
  25563.                 uint r3;
  25564.                 uint r4;
  25565.                 uint lo;
  25566.                 uint hi;
  25567.  
  25568.                 FLAG_C = CFLAG_CLEAR;
  25569.  
  25570.                 if(BIT_B(word2))                           /* signed */
  25571.                 {
  25572.                         if(GET_MSB_32(src))
  25573.                                 src = (uint)MASK_OUT_ABOVE_32(-(sint)src);
  25574.                         if(GET_MSB_32(dst))
  25575.                                 dst = (uint)MASK_OUT_ABOVE_32(-(sint)dst);
  25576.                 }
  25577.  
  25578.                 src1 = MASK_OUT_ABOVE_16(src);
  25579.                 src2 = src>>16;
  25580.                 dst1 = MASK_OUT_ABOVE_16(dst);
  25581.                 dst2 = dst>>16;
  25582.  
  25583.  
  25584.                 r1 = src1 * dst1;
  25585.                 r2 = src1 * dst2;
  25586.                 r3 = src2 * dst1;
  25587.                 r4 = src2 * dst2;
  25588.  
  25589.                 lo = r1 + (MASK_OUT_ABOVE_16(r2)<<16) + (MASK_OUT_ABOVE_16(r3)<<16);
  25590.                 hi = r4 + (r2>>16) + (r3>>16) + (((r1>>16) + MASK_OUT_ABOVE_16(r2) + MASK_OUT_ABOVE_16(r3)) >> 16);
  25591.  
  25592.                 if(BIT_B(word2) && neg)
  25593.                 {
  25594.                         hi = (uint)MASK_OUT_ABOVE_32((-(sint)hi) - (lo != 0));
  25595.                         lo = (uint)MASK_OUT_ABOVE_32(-(sint)lo);
  25596.                 }
  25597.  
  25598.                 if(BIT_A(word2))
  25599.                 {
  25600.                         REG_D[word2 & 7] = hi;
  25601.                         REG_D[(word2 >> 12) & 7] = lo;
  25602.                         FLAG_N = NFLAG_32(hi);
  25603.                         FLAG_Z = hi | lo;
  25604.                         FLAG_V = VFLAG_CLEAR;
  25605.                         return;
  25606.                 }
  25607.  
  25608.                 REG_D[(word2 >> 12) & 7] = lo;
  25609.                 FLAG_N = NFLAG_32(lo);
  25610.                 FLAG_Z = lo;
  25611.                 if(BIT_B(word2))
  25612.                         FLAG_V = (!((GET_MSB_32(lo) && hi == 0xffffffff) || (!GET_MSB_32(lo) && !hi)))<<7;
  25613.                 else
  25614.                         FLAG_V = (hi != 0) << 7;
  25615.                 return;
  25616.         }
  25617.         m68ki_exception_illegal();
  25618.  
  25619. #endif
  25620. }
  25621.  
  25622.  
  25623. void m68k_op_nbcd_8_d(void)
  25624. {
  25625.         uint* r_dst = &DY;
  25626.         uint dst = *r_dst;
  25627.         uint res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1());
  25628.  
  25629.         if(res != 0x9a)
  25630.         {
  25631.                 FLAG_V = ~res; /* Undefined V behavior */
  25632.  
  25633.                 if((res & 0x0f) == 0xa)
  25634.                         res = (res & 0xf0) + 0x10;
  25635.  
  25636.                 res = MASK_OUT_ABOVE_8(res);
  25637.  
  25638.                 FLAG_V &= res; /* Undefined V behavior part II */
  25639.  
  25640.                 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
  25641.  
  25642.                 FLAG_Z |= res;
  25643.                 FLAG_C = CFLAG_SET;
  25644.                 FLAG_X = XFLAG_SET;
  25645.         }
  25646.         else
  25647.         {
  25648.                 FLAG_V = VFLAG_CLEAR;
  25649.                 FLAG_C = CFLAG_CLEAR;
  25650.                 FLAG_X = XFLAG_CLEAR;
  25651.         }
  25652.         FLAG_N = NFLAG_8(res);  /* Undefined N behavior */
  25653. }
  25654.  
  25655.  
  25656. void m68k_op_nbcd_8_ai(void)
  25657. {
  25658.         uint ea = EA_AY_AI_8();
  25659.         uint dst = m68ki_read_8(ea);
  25660.         uint res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1());
  25661.  
  25662.         if(res != 0x9a)
  25663.         {
  25664.                 FLAG_V = ~res; /* Undefined V behavior */
  25665.  
  25666.                 if((res & 0x0f) == 0xa)
  25667.                         res = (res & 0xf0) + 0x10;
  25668.  
  25669.                 res = MASK_OUT_ABOVE_8(res);
  25670.  
  25671.                 FLAG_V &= res; /* Undefined V behavior part II */
  25672.  
  25673.                 m68ki_write_8(ea, MASK_OUT_ABOVE_8(res));
  25674.  
  25675.                 FLAG_Z |= res;
  25676.                 FLAG_C = CFLAG_SET;
  25677.                 FLAG_X = XFLAG_SET;
  25678.         }
  25679.         else
  25680.         {
  25681.                 FLAG_V = VFLAG_CLEAR;
  25682.                 FLAG_C = CFLAG_CLEAR;
  25683.                 FLAG_X = XFLAG_CLEAR;
  25684.         }
  25685.         FLAG_N = NFLAG_8(res);  /* Undefined N behavior */
  25686. }
  25687.  
  25688.  
  25689. void m68k_op_nbcd_8_pi(void)
  25690. {
  25691.         uint ea = EA_AY_PI_8();
  25692.         uint dst = m68ki_read_8(ea);
  25693.         uint res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1());
  25694.  
  25695.         if(res != 0x9a)
  25696.         {
  25697.                 FLAG_V = ~res; /* Undefined V behavior */
  25698.  
  25699.                 if((res & 0x0f) == 0xa)
  25700.                         res = (res & 0xf0) + 0x10;
  25701.  
  25702.                 res = MASK_OUT_ABOVE_8(res);
  25703.  
  25704.                 FLAG_V &= res; /* Undefined V behavior part II */
  25705.  
  25706.                 m68ki_write_8(ea, MASK_OUT_ABOVE_8(res));
  25707.  
  25708.                 FLAG_Z |= res;
  25709.                 FLAG_C = CFLAG_SET;
  25710.                 FLAG_X = XFLAG_SET;
  25711.         }
  25712.         else
  25713.         {
  25714.                 FLAG_V = VFLAG_CLEAR;
  25715.                 FLAG_C = CFLAG_CLEAR;
  25716.                 FLAG_X = XFLAG_CLEAR;
  25717.         }
  25718.         FLAG_N = NFLAG_8(res);  /* Undefined N behavior */
  25719. }
  25720.  
  25721.  
  25722. void m68k_op_nbcd_8_pi7(void)
  25723. {
  25724.         uint ea = EA_A7_PI_8();
  25725.         uint dst = m68ki_read_8(ea);
  25726.         uint res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1());
  25727.  
  25728.         if(res != 0x9a)
  25729.         {
  25730.                 FLAG_V = ~res; /* Undefined V behavior */
  25731.  
  25732.                 if((res & 0x0f) == 0xa)
  25733.                         res = (res & 0xf0) + 0x10;
  25734.  
  25735.                 res = MASK_OUT_ABOVE_8(res);
  25736.  
  25737.                 FLAG_V &= res; /* Undefined V behavior part II */
  25738.  
  25739.                 m68ki_write_8(ea, MASK_OUT_ABOVE_8(res));
  25740.  
  25741.                 FLAG_Z |= res;
  25742.                 FLAG_C = CFLAG_SET;
  25743.                 FLAG_X = XFLAG_SET;
  25744.         }
  25745.         else
  25746.         {
  25747.                 FLAG_V = VFLAG_CLEAR;
  25748.                 FLAG_C = CFLAG_CLEAR;
  25749.                 FLAG_X = XFLAG_CLEAR;
  25750.         }
  25751.         FLAG_N = NFLAG_8(res);  /* Undefined N behavior */
  25752. }
  25753.  
  25754.  
  25755. void m68k_op_nbcd_8_pd(void)
  25756. {
  25757.         uint ea = EA_AY_PD_8();
  25758.         uint dst = m68ki_read_8(ea);
  25759.         uint res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1());
  25760.  
  25761.         if(res != 0x9a)
  25762.         {
  25763.                 FLAG_V = ~res; /* Undefined V behavior */
  25764.  
  25765.                 if((res & 0x0f) == 0xa)
  25766.                         res = (res & 0xf0) + 0x10;
  25767.  
  25768.                 res = MASK_OUT_ABOVE_8(res);
  25769.  
  25770.                 FLAG_V &= res; /* Undefined V behavior part II */
  25771.  
  25772.                 m68ki_write_8(ea, MASK_OUT_ABOVE_8(res));
  25773.  
  25774.                 FLAG_Z |= res;
  25775.                 FLAG_C = CFLAG_SET;
  25776.                 FLAG_X = XFLAG_SET;
  25777.         }
  25778.         else
  25779.         {
  25780.                 FLAG_V = VFLAG_CLEAR;
  25781.                 FLAG_C = CFLAG_CLEAR;
  25782.                 FLAG_X = XFLAG_CLEAR;
  25783.         }
  25784.         FLAG_N = NFLAG_8(res);  /* Undefined N behavior */
  25785. }
  25786.  
  25787.  
  25788. void m68k_op_nbcd_8_pd7(void)
  25789. {
  25790.         uint ea = EA_A7_PD_8();
  25791.         uint dst = m68ki_read_8(ea);
  25792.         uint res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1());
  25793.  
  25794.         if(res != 0x9a)
  25795.         {
  25796.                 FLAG_V = ~res; /* Undefined V behavior */
  25797.  
  25798.                 if((res & 0x0f) == 0xa)
  25799.                         res = (res & 0xf0) + 0x10;
  25800.  
  25801.                 res = MASK_OUT_ABOVE_8(res);
  25802.  
  25803.                 FLAG_V &= res; /* Undefined V behavior part II */
  25804.  
  25805.                 m68ki_write_8(ea, MASK_OUT_ABOVE_8(res));
  25806.  
  25807.                 FLAG_Z |= res;
  25808.                 FLAG_C = CFLAG_SET;
  25809.                 FLAG_X = XFLAG_SET;
  25810.         }
  25811.         else
  25812.         {
  25813.                 FLAG_V = VFLAG_CLEAR;
  25814.                 FLAG_C = CFLAG_CLEAR;
  25815.                 FLAG_X = XFLAG_CLEAR;
  25816.         }
  25817.         FLAG_N = NFLAG_8(res);  /* Undefined N behavior */
  25818. }
  25819.  
  25820.  
  25821. void m68k_op_nbcd_8_di(void)
  25822. {
  25823.         uint ea = EA_AY_DI_8();
  25824.         uint dst = m68ki_read_8(ea);
  25825.         uint res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1());
  25826.  
  25827.         if(res != 0x9a)
  25828.         {
  25829.                 FLAG_V = ~res; /* Undefined V behavior */
  25830.  
  25831.                 if((res & 0x0f) == 0xa)
  25832.                         res = (res & 0xf0) + 0x10;
  25833.  
  25834.                 res = MASK_OUT_ABOVE_8(res);
  25835.  
  25836.                 FLAG_V &= res; /* Undefined V behavior part II */
  25837.  
  25838.                 m68ki_write_8(ea, MASK_OUT_ABOVE_8(res));
  25839.  
  25840.                 FLAG_Z |= res;
  25841.                 FLAG_C = CFLAG_SET;
  25842.                 FLAG_X = XFLAG_SET;
  25843.         }
  25844.         else
  25845.         {
  25846.                 FLAG_V = VFLAG_CLEAR;
  25847.                 FLAG_C = CFLAG_CLEAR;
  25848.                 FLAG_X = XFLAG_CLEAR;
  25849.         }
  25850.         FLAG_N = NFLAG_8(res);  /* Undefined N behavior */
  25851. }
  25852.  
  25853.  
  25854. void m68k_op_nbcd_8_ix(void)
  25855. {
  25856.         uint ea = EA_AY_IX_8();
  25857.         uint dst = m68ki_read_8(ea);
  25858.         uint res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1());
  25859.  
  25860.         if(res != 0x9a)
  25861.         {
  25862.                 FLAG_V = ~res; /* Undefined V behavior */
  25863.  
  25864.                 if((res & 0x0f) == 0xa)
  25865.                         res = (res & 0xf0) + 0x10;
  25866.  
  25867.                 res = MASK_OUT_ABOVE_8(res);
  25868.  
  25869.                 FLAG_V &= res; /* Undefined V behavior part II */
  25870.  
  25871.                 m68ki_write_8(ea, MASK_OUT_ABOVE_8(res));
  25872.  
  25873.                 FLAG_Z |= res;
  25874.                 FLAG_C = CFLAG_SET;
  25875.                 FLAG_X = XFLAG_SET;
  25876.         }
  25877.         else
  25878.         {
  25879.                 FLAG_V = VFLAG_CLEAR;
  25880.                 FLAG_C = CFLAG_CLEAR;
  25881.                 FLAG_X = XFLAG_CLEAR;
  25882.         }
  25883.         FLAG_N = NFLAG_8(res);  /* Undefined N behavior */
  25884. }
  25885.  
  25886.  
  25887. void m68k_op_nbcd_8_aw(void)
  25888. {
  25889.         uint ea = EA_AW_8();
  25890.         uint dst = m68ki_read_8(ea);
  25891.         uint res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1());
  25892.  
  25893.         if(res != 0x9a)
  25894.         {
  25895.                 FLAG_V = ~res; /* Undefined V behavior */
  25896.  
  25897.                 if((res & 0x0f) == 0xa)
  25898.                         res = (res & 0xf0) + 0x10;
  25899.  
  25900.                 res = MASK_OUT_ABOVE_8(res);
  25901.  
  25902.                 FLAG_V &= res; /* Undefined V behavior part II */
  25903.  
  25904.                 m68ki_write_8(ea, MASK_OUT_ABOVE_8(res));
  25905.  
  25906.                 FLAG_Z |= res;
  25907.                 FLAG_C = CFLAG_SET;
  25908.                 FLAG_X = XFLAG_SET;
  25909.         }
  25910.         else
  25911.         {
  25912.                 FLAG_V = VFLAG_CLEAR;
  25913.                 FLAG_C = CFLAG_CLEAR;
  25914.                 FLAG_X = XFLAG_CLEAR;
  25915.         }
  25916.         FLAG_N = NFLAG_8(res);  /* Undefined N behavior */
  25917. }
  25918.  
  25919.  
  25920. void m68k_op_nbcd_8_al(void)
  25921. {
  25922.         uint ea = EA_AL_8();
  25923.         uint dst = m68ki_read_8(ea);
  25924.         uint res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1());
  25925.  
  25926.         if(res != 0x9a)
  25927.         {
  25928.                 FLAG_V = ~res; /* Undefined V behavior */
  25929.  
  25930.                 if((res & 0x0f) == 0xa)
  25931.                         res = (res & 0xf0) + 0x10;
  25932.  
  25933.                 res = MASK_OUT_ABOVE_8(res);
  25934.  
  25935.                 FLAG_V &= res; /* Undefined V behavior part II */
  25936.  
  25937.                 m68ki_write_8(ea, MASK_OUT_ABOVE_8(res));
  25938.  
  25939.                 FLAG_Z |= res;
  25940.                 FLAG_C = CFLAG_SET;
  25941.                 FLAG_X = XFLAG_SET;
  25942.         }
  25943.         else
  25944.         {
  25945.                 FLAG_V = VFLAG_CLEAR;
  25946.                 FLAG_C = CFLAG_CLEAR;
  25947.                 FLAG_X = XFLAG_CLEAR;
  25948.         }
  25949.         FLAG_N = NFLAG_8(res);  /* Undefined N behavior */
  25950. }
  25951.  
  25952.  
  25953. void m68k_op_neg_8_d(void)
  25954. {
  25955.         uint* r_dst = &DY;
  25956.         uint res = 0 - MASK_OUT_ABOVE_8(*r_dst);
  25957.  
  25958.         FLAG_N = NFLAG_8(res);
  25959.         FLAG_C = FLAG_X = CFLAG_8(res);
  25960.         FLAG_V = *r_dst & res;
  25961.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  25962.  
  25963.         *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
  25964. }
  25965.  
  25966.  
  25967. void m68k_op_neg_8_ai(void)
  25968. {
  25969.         uint ea = EA_AY_AI_8();
  25970.         uint src = m68ki_read_8(ea);
  25971.         uint res = 0 - src;
  25972.  
  25973.         FLAG_N = NFLAG_8(res);
  25974.         FLAG_C = FLAG_X = CFLAG_8(res);
  25975.         FLAG_V = src & res;
  25976.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  25977.  
  25978.         m68ki_write_8(ea, FLAG_Z);
  25979. }
  25980.  
  25981.  
  25982. void m68k_op_neg_8_pi(void)
  25983. {
  25984.         uint ea = EA_AY_PI_8();
  25985.         uint src = m68ki_read_8(ea);
  25986.         uint res = 0 - src;
  25987.  
  25988.         FLAG_N = NFLAG_8(res);
  25989.         FLAG_C = FLAG_X = CFLAG_8(res);
  25990.         FLAG_V = src & res;
  25991.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  25992.  
  25993.         m68ki_write_8(ea, FLAG_Z);
  25994. }
  25995.  
  25996.  
  25997. void m68k_op_neg_8_pi7(void)
  25998. {
  25999.         uint ea = EA_A7_PI_8();
  26000.         uint src = m68ki_read_8(ea);
  26001.         uint res = 0 - src;
  26002.  
  26003.         FLAG_N = NFLAG_8(res);
  26004.         FLAG_C = FLAG_X = CFLAG_8(res);
  26005.         FLAG_V = src & res;
  26006.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  26007.  
  26008.         m68ki_write_8(ea, FLAG_Z);
  26009. }
  26010.  
  26011.  
  26012. void m68k_op_neg_8_pd(void)
  26013. {
  26014.         uint ea = EA_AY_PD_8();
  26015.         uint src = m68ki_read_8(ea);
  26016.         uint res = 0 - src;
  26017.  
  26018.         FLAG_N = NFLAG_8(res);
  26019.         FLAG_C = FLAG_X = CFLAG_8(res);
  26020.         FLAG_V = src & res;
  26021.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  26022.  
  26023.         m68ki_write_8(ea, FLAG_Z);
  26024. }
  26025.  
  26026.  
  26027. void m68k_op_neg_8_pd7(void)
  26028. {
  26029.         uint ea = EA_A7_PD_8();
  26030.         uint src = m68ki_read_8(ea);
  26031.         uint res = 0 - src;
  26032.  
  26033.         FLAG_N = NFLAG_8(res);
  26034.         FLAG_C = FLAG_X = CFLAG_8(res);
  26035.         FLAG_V = src & res;
  26036.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  26037.  
  26038.         m68ki_write_8(ea, FLAG_Z);
  26039. }
  26040.  
  26041.  
  26042. void m68k_op_neg_8_di(void)
  26043. {
  26044.         uint ea = EA_AY_DI_8();
  26045.         uint src = m68ki_read_8(ea);
  26046.         uint res = 0 - src;
  26047.  
  26048.         FLAG_N = NFLAG_8(res);
  26049.         FLAG_C = FLAG_X = CFLAG_8(res);
  26050.         FLAG_V = src & res;
  26051.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  26052.  
  26053.         m68ki_write_8(ea, FLAG_Z);
  26054. }
  26055.  
  26056.  
  26057. void m68k_op_neg_8_ix(void)
  26058. {
  26059.         uint ea = EA_AY_IX_8();
  26060.         uint src = m68ki_read_8(ea);
  26061.         uint res = 0 - src;
  26062.  
  26063.         FLAG_N = NFLAG_8(res);
  26064.         FLAG_C = FLAG_X = CFLAG_8(res);
  26065.         FLAG_V = src & res;
  26066.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  26067.  
  26068.         m68ki_write_8(ea, FLAG_Z);
  26069. }
  26070.  
  26071.  
  26072. void m68k_op_neg_8_aw(void)
  26073. {
  26074.         uint ea = EA_AW_8();
  26075.         uint src = m68ki_read_8(ea);
  26076.         uint res = 0 - src;
  26077.  
  26078.         FLAG_N = NFLAG_8(res);
  26079.         FLAG_C = FLAG_X = CFLAG_8(res);
  26080.         FLAG_V = src & res;
  26081.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  26082.  
  26083.         m68ki_write_8(ea, FLAG_Z);
  26084. }
  26085.  
  26086.  
  26087. void m68k_op_neg_8_al(void)
  26088. {
  26089.         uint ea = EA_AL_8();
  26090.         uint src = m68ki_read_8(ea);
  26091.         uint res = 0 - src;
  26092.  
  26093.         FLAG_N = NFLAG_8(res);
  26094.         FLAG_C = FLAG_X = CFLAG_8(res);
  26095.         FLAG_V = src & res;
  26096.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  26097.  
  26098.         m68ki_write_8(ea, FLAG_Z);
  26099. }
  26100.  
  26101.  
  26102. void m68k_op_neg_16_d(void)
  26103. {
  26104.         uint* r_dst = &DY;
  26105.         uint res = 0 - MASK_OUT_ABOVE_16(*r_dst);
  26106.  
  26107.         FLAG_N = NFLAG_16(res);
  26108.         FLAG_C = FLAG_X = CFLAG_16(res);
  26109.         FLAG_V = (*r_dst & res)>>8;
  26110.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  26111.  
  26112.         *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
  26113. }
  26114.  
  26115.  
  26116. void m68k_op_neg_16_ai(void)
  26117. {
  26118.         uint ea = EA_AY_AI_16();
  26119.         uint src = m68ki_read_16(ea);
  26120.         uint res = 0 - src;
  26121.  
  26122.         FLAG_N = NFLAG_16(res);
  26123.         FLAG_C = FLAG_X = CFLAG_16(res);
  26124.         FLAG_V = (src & res)>>8;
  26125.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  26126.  
  26127.         m68ki_write_16(ea, FLAG_Z);
  26128. }
  26129.  
  26130.  
  26131. void m68k_op_neg_16_pi(void)
  26132. {
  26133.         uint ea = EA_AY_PI_16();
  26134.         uint src = m68ki_read_16(ea);
  26135.         uint res = 0 - src;
  26136.  
  26137.         FLAG_N = NFLAG_16(res);
  26138.         FLAG_C = FLAG_X = CFLAG_16(res);
  26139.         FLAG_V = (src & res)>>8;
  26140.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  26141.  
  26142.         m68ki_write_16(ea, FLAG_Z);
  26143. }
  26144.  
  26145.  
  26146. void m68k_op_neg_16_pd(void)
  26147. {
  26148.         uint ea = EA_AY_PD_16();
  26149.         uint src = m68ki_read_16(ea);
  26150.         uint res = 0 - src;
  26151.  
  26152.         FLAG_N = NFLAG_16(res);
  26153.         FLAG_C = FLAG_X = CFLAG_16(res);
  26154.         FLAG_V = (src & res)>>8;
  26155.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  26156.  
  26157.         m68ki_write_16(ea, FLAG_Z);
  26158. }
  26159.  
  26160.  
  26161. void m68k_op_neg_16_di(void)
  26162. {
  26163.         uint ea = EA_AY_DI_16();
  26164.         uint src = m68ki_read_16(ea);
  26165.         uint res = 0 - src;
  26166.  
  26167.         FLAG_N = NFLAG_16(res);
  26168.         FLAG_C = FLAG_X = CFLAG_16(res);
  26169.         FLAG_V = (src & res)>>8;
  26170.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  26171.  
  26172.         m68ki_write_16(ea, FLAG_Z);
  26173. }
  26174.  
  26175.  
  26176. void m68k_op_neg_16_ix(void)
  26177. {
  26178.         uint ea = EA_AY_IX_16();
  26179.         uint src = m68ki_read_16(ea);
  26180.         uint res = 0 - src;
  26181.  
  26182.         FLAG_N = NFLAG_16(res);
  26183.         FLAG_C = FLAG_X = CFLAG_16(res);
  26184.         FLAG_V = (src & res)>>8;
  26185.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  26186.  
  26187.         m68ki_write_16(ea, FLAG_Z);
  26188. }
  26189.  
  26190.  
  26191. void m68k_op_neg_16_aw(void)
  26192. {
  26193.         uint ea = EA_AW_16();
  26194.         uint src = m68ki_read_16(ea);
  26195.         uint res = 0 - src;
  26196.  
  26197.         FLAG_N = NFLAG_16(res);
  26198.         FLAG_C = FLAG_X = CFLAG_16(res);
  26199.         FLAG_V = (src & res)>>8;
  26200.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  26201.  
  26202.         m68ki_write_16(ea, FLAG_Z);
  26203. }
  26204.  
  26205.  
  26206. void m68k_op_neg_16_al(void)
  26207. {
  26208.         uint ea = EA_AL_16();
  26209.         uint src = m68ki_read_16(ea);
  26210.         uint res = 0 - src;
  26211.  
  26212.         FLAG_N = NFLAG_16(res);
  26213.         FLAG_C = FLAG_X = CFLAG_16(res);
  26214.         FLAG_V = (src & res)>>8;
  26215.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  26216.  
  26217.         m68ki_write_16(ea, FLAG_Z);
  26218. }
  26219.  
  26220.  
  26221. void m68k_op_neg_32_d(void)
  26222. {
  26223.         uint* r_dst = &DY;
  26224.         uint res = 0 - *r_dst;
  26225.  
  26226.         FLAG_N = NFLAG_32(res);
  26227.         FLAG_C = FLAG_X = CFLAG_SUB_32(*r_dst, 0, res);
  26228.         FLAG_V = (*r_dst & res)>>24;
  26229.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  26230.  
  26231.         *r_dst = FLAG_Z;
  26232. }
  26233.  
  26234.  
  26235. void m68k_op_neg_32_ai(void)
  26236. {
  26237.         uint ea = EA_AY_AI_32();
  26238.         uint src = m68ki_read_32(ea);
  26239.         uint res = 0 - src;
  26240.  
  26241.         FLAG_N = NFLAG_32(res);
  26242.         FLAG_C = FLAG_X = CFLAG_SUB_32(src, 0, res);
  26243.         FLAG_V = (src & res)>>24;
  26244.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  26245.  
  26246.         m68ki_write_32(ea, FLAG_Z);
  26247. }
  26248.  
  26249.  
  26250. void m68k_op_neg_32_pi(void)
  26251. {
  26252.         uint ea = EA_AY_PI_32();
  26253.         uint src = m68ki_read_32(ea);
  26254.         uint res = 0 - src;
  26255.  
  26256.         FLAG_N = NFLAG_32(res);
  26257.         FLAG_C = FLAG_X = CFLAG_SUB_32(src, 0, res);
  26258.         FLAG_V = (src & res)>>24;
  26259.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  26260.  
  26261.         m68ki_write_32(ea, FLAG_Z);
  26262. }
  26263.  
  26264.  
  26265. void m68k_op_neg_32_pd(void)
  26266. {
  26267.         uint ea = EA_AY_PD_32();
  26268.         uint src = m68ki_read_32(ea);
  26269.         uint res = 0 - src;
  26270.  
  26271.         FLAG_N = NFLAG_32(res);
  26272.         FLAG_C = FLAG_X = CFLAG_SUB_32(src, 0, res);
  26273.         FLAG_V = (src & res)>>24;
  26274.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  26275.  
  26276.         m68ki_write_32(ea, FLAG_Z);
  26277. }
  26278.  
  26279.  
  26280. void m68k_op_neg_32_di(void)
  26281. {
  26282.         uint ea = EA_AY_DI_32();
  26283.         uint src = m68ki_read_32(ea);
  26284.         uint res = 0 - src;
  26285.  
  26286.         FLAG_N = NFLAG_32(res);
  26287.         FLAG_C = FLAG_X = CFLAG_SUB_32(src, 0, res);
  26288.         FLAG_V = (src & res)>>24;
  26289.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  26290.  
  26291.         m68ki_write_32(ea, FLAG_Z);
  26292. }
  26293.  
  26294.  
  26295. void m68k_op_neg_32_ix(void)
  26296. {
  26297.         uint ea = EA_AY_IX_32();
  26298.         uint src = m68ki_read_32(ea);
  26299.         uint res = 0 - src;
  26300.  
  26301.         FLAG_N = NFLAG_32(res);
  26302.         FLAG_C = FLAG_X = CFLAG_SUB_32(src, 0, res);
  26303.         FLAG_V = (src & res)>>24;
  26304.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  26305.  
  26306.         m68ki_write_32(ea, FLAG_Z);
  26307. }
  26308.  
  26309.  
  26310. void m68k_op_neg_32_aw(void)
  26311. {
  26312.         uint ea = EA_AW_32();
  26313.         uint src = m68ki_read_32(ea);
  26314.         uint res = 0 - src;
  26315.  
  26316.         FLAG_N = NFLAG_32(res);
  26317.         FLAG_C = FLAG_X = CFLAG_SUB_32(src, 0, res);
  26318.         FLAG_V = (src & res)>>24;
  26319.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  26320.  
  26321.         m68ki_write_32(ea, FLAG_Z);
  26322. }
  26323.  
  26324.  
  26325. void m68k_op_neg_32_al(void)
  26326. {
  26327.         uint ea = EA_AL_32();
  26328.         uint src = m68ki_read_32(ea);
  26329.         uint res = 0 - src;
  26330.  
  26331.         FLAG_N = NFLAG_32(res);
  26332.         FLAG_C = FLAG_X = CFLAG_SUB_32(src, 0, res);
  26333.         FLAG_V = (src & res)>>24;
  26334.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  26335.  
  26336.         m68ki_write_32(ea, FLAG_Z);
  26337. }
  26338.  
  26339.  
  26340. void m68k_op_negx_8_d(void)
  26341. {
  26342.         uint* r_dst = &DY;
  26343.         uint res = 0 - MASK_OUT_ABOVE_8(*r_dst) - XFLAG_AS_1();
  26344.  
  26345.         FLAG_N = NFLAG_8(res);
  26346.         FLAG_X = FLAG_C = CFLAG_8(res);
  26347.         FLAG_V = *r_dst & res;
  26348.  
  26349.         res = MASK_OUT_ABOVE_8(res);
  26350.         FLAG_Z |= res;
  26351.  
  26352.         *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
  26353. }
  26354.  
  26355.  
  26356. void m68k_op_negx_8_ai(void)
  26357. {
  26358.         uint ea = EA_AY_AI_8();
  26359.         uint src = m68ki_read_8(ea);
  26360.         uint res = 0 - src - XFLAG_AS_1();
  26361.  
  26362.         FLAG_N = NFLAG_8(res);
  26363.         FLAG_X = FLAG_C = CFLAG_8(res);
  26364.         FLAG_V = src & res;
  26365.  
  26366.         res = MASK_OUT_ABOVE_8(res);
  26367.         FLAG_Z |= res;
  26368.  
  26369.         m68ki_write_8(ea, res);
  26370. }
  26371.  
  26372.  
  26373. void m68k_op_negx_8_pi(void)
  26374. {
  26375.         uint ea = EA_AY_PI_8();
  26376.         uint src = m68ki_read_8(ea);
  26377.         uint res = 0 - src - XFLAG_AS_1();
  26378.  
  26379.         FLAG_N = NFLAG_8(res);
  26380.         FLAG_X = FLAG_C = CFLAG_8(res);
  26381.         FLAG_V = src & res;
  26382.  
  26383.         res = MASK_OUT_ABOVE_8(res);
  26384.         FLAG_Z |= res;
  26385.  
  26386.         m68ki_write_8(ea, res);
  26387. }
  26388.  
  26389.  
  26390. void m68k_op_negx_8_pi7(void)
  26391. {
  26392.         uint ea = EA_A7_PI_8();
  26393.         uint src = m68ki_read_8(ea);
  26394.         uint res = 0 - src - XFLAG_AS_1();
  26395.  
  26396.         FLAG_N = NFLAG_8(res);
  26397.         FLAG_X = FLAG_C = CFLAG_8(res);
  26398.         FLAG_V = src & res;
  26399.  
  26400.         res = MASK_OUT_ABOVE_8(res);
  26401.         FLAG_Z |= res;
  26402.  
  26403.         m68ki_write_8(ea, res);
  26404. }
  26405.  
  26406.  
  26407. void m68k_op_negx_8_pd(void)
  26408. {
  26409.         uint ea = EA_AY_PD_8();
  26410.         uint src = m68ki_read_8(ea);
  26411.         uint res = 0 - src - XFLAG_AS_1();
  26412.  
  26413.         FLAG_N = NFLAG_8(res);
  26414.         FLAG_X = FLAG_C = CFLAG_8(res);
  26415.         FLAG_V = src & res;
  26416.  
  26417.         res = MASK_OUT_ABOVE_8(res);
  26418.         FLAG_Z |= res;
  26419.  
  26420.         m68ki_write_8(ea, res);
  26421. }
  26422.  
  26423.  
  26424. void m68k_op_negx_8_pd7(void)
  26425. {
  26426.         uint ea = EA_A7_PD_8();
  26427.         uint src = m68ki_read_8(ea);
  26428.         uint res = 0 - src - XFLAG_AS_1();
  26429.  
  26430.         FLAG_N = NFLAG_8(res);
  26431.         FLAG_X = FLAG_C = CFLAG_8(res);
  26432.         FLAG_V = src & res;
  26433.  
  26434.         res = MASK_OUT_ABOVE_8(res);
  26435.         FLAG_Z |= res;
  26436.  
  26437.         m68ki_write_8(ea, res);
  26438. }
  26439.  
  26440.  
  26441. void m68k_op_negx_8_di(void)
  26442. {
  26443.         uint ea = EA_AY_DI_8();
  26444.         uint src = m68ki_read_8(ea);
  26445.         uint res = 0 - src - XFLAG_AS_1();
  26446.  
  26447.         FLAG_N = NFLAG_8(res);
  26448.         FLAG_X = FLAG_C = CFLAG_8(res);
  26449.         FLAG_V = src & res;
  26450.  
  26451.         res = MASK_OUT_ABOVE_8(res);
  26452.         FLAG_Z |= res;
  26453.  
  26454.         m68ki_write_8(ea, res);
  26455. }
  26456.  
  26457.  
  26458. void m68k_op_negx_8_ix(void)
  26459. {
  26460.         uint ea = EA_AY_IX_8();
  26461.         uint src = m68ki_read_8(ea);
  26462.         uint res = 0 - src - XFLAG_AS_1();
  26463.  
  26464.         FLAG_N = NFLAG_8(res);
  26465.         FLAG_X = FLAG_C = CFLAG_8(res);
  26466.         FLAG_V = src & res;
  26467.  
  26468.         res = MASK_OUT_ABOVE_8(res);
  26469.         FLAG_Z |= res;
  26470.  
  26471.         m68ki_write_8(ea, res);
  26472. }
  26473.  
  26474.  
  26475. void m68k_op_negx_8_aw(void)
  26476. {
  26477.         uint ea = EA_AW_8();
  26478.         uint src = m68ki_read_8(ea);
  26479.         uint res = 0 - src - XFLAG_AS_1();
  26480.  
  26481.         FLAG_N = NFLAG_8(res);
  26482.         FLAG_X = FLAG_C = CFLAG_8(res);
  26483.         FLAG_V = src & res;
  26484.  
  26485.         res = MASK_OUT_ABOVE_8(res);
  26486.         FLAG_Z |= res;
  26487.  
  26488.         m68ki_write_8(ea, res);
  26489. }
  26490.  
  26491.  
  26492. void m68k_op_negx_8_al(void)
  26493. {
  26494.         uint ea = EA_AL_8();
  26495.         uint src = m68ki_read_8(ea);
  26496.         uint res = 0 - src - XFLAG_AS_1();
  26497.  
  26498.         FLAG_N = NFLAG_8(res);
  26499.         FLAG_X = FLAG_C = CFLAG_8(res);
  26500.         FLAG_V = src & res;
  26501.  
  26502.         res = MASK_OUT_ABOVE_8(res);
  26503.         FLAG_Z |= res;
  26504.  
  26505.         m68ki_write_8(ea, res);
  26506. }
  26507.  
  26508.  
  26509. void m68k_op_negx_16_d(void)
  26510. {
  26511.         uint* r_dst = &DY;
  26512.         uint res = 0 - MASK_OUT_ABOVE_16(*r_dst) - XFLAG_AS_1();
  26513.  
  26514.         FLAG_N = NFLAG_16(res);
  26515.         FLAG_X = FLAG_C = CFLAG_16(res);
  26516.         FLAG_V = (*r_dst & res)>>8;
  26517.  
  26518.         res = MASK_OUT_ABOVE_16(res);
  26519.         FLAG_Z |= res;
  26520.  
  26521.         *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
  26522. }
  26523.  
  26524.  
  26525. void m68k_op_negx_16_ai(void)
  26526. {
  26527.         uint ea  = EA_AY_AI_16();
  26528.         uint src = m68ki_read_16(ea);
  26529.         uint res = 0 - MASK_OUT_ABOVE_16(src) - XFLAG_AS_1();
  26530.  
  26531.         FLAG_N = NFLAG_16(res);
  26532.         FLAG_X = FLAG_C = CFLAG_16(res);
  26533.         FLAG_V = (src & res)>>8;
  26534.  
  26535.         res = MASK_OUT_ABOVE_16(res);
  26536.         FLAG_Z |= res;
  26537.  
  26538.         m68ki_write_16(ea, res);
  26539. }
  26540.  
  26541.  
  26542. void m68k_op_negx_16_pi(void)
  26543. {
  26544.         uint ea  = EA_AY_PI_16();
  26545.         uint src = m68ki_read_16(ea);
  26546.         uint res = 0 - MASK_OUT_ABOVE_16(src) - XFLAG_AS_1();
  26547.  
  26548.         FLAG_N = NFLAG_16(res);
  26549.         FLAG_X = FLAG_C = CFLAG_16(res);
  26550.         FLAG_V = (src & res)>>8;
  26551.  
  26552.         res = MASK_OUT_ABOVE_16(res);
  26553.         FLAG_Z |= res;
  26554.  
  26555.         m68ki_write_16(ea, res);
  26556. }
  26557.  
  26558.  
  26559. void m68k_op_negx_16_pd(void)
  26560. {
  26561.         uint ea  = EA_AY_PD_16();
  26562.         uint src = m68ki_read_16(ea);
  26563.         uint res = 0 - MASK_OUT_ABOVE_16(src) - XFLAG_AS_1();
  26564.  
  26565.         FLAG_N = NFLAG_16(res);
  26566.         FLAG_X = FLAG_C = CFLAG_16(res);
  26567.         FLAG_V = (src & res)>>8;
  26568.  
  26569.         res = MASK_OUT_ABOVE_16(res);
  26570.         FLAG_Z |= res;
  26571.  
  26572.         m68ki_write_16(ea, res);
  26573. }
  26574.  
  26575.  
  26576. void m68k_op_negx_16_di(void)
  26577. {
  26578.         uint ea  = EA_AY_DI_16();
  26579.         uint src = m68ki_read_16(ea);
  26580.         uint res = 0 - MASK_OUT_ABOVE_16(src) - XFLAG_AS_1();
  26581.  
  26582.         FLAG_N = NFLAG_16(res);
  26583.         FLAG_X = FLAG_C = CFLAG_16(res);
  26584.         FLAG_V = (src & res)>>8;
  26585.  
  26586.         res = MASK_OUT_ABOVE_16(res);
  26587.         FLAG_Z |= res;
  26588.  
  26589.         m68ki_write_16(ea, res);
  26590. }
  26591.  
  26592.  
  26593. void m68k_op_negx_16_ix(void)
  26594. {
  26595.         uint ea  = EA_AY_IX_16();
  26596.         uint src = m68ki_read_16(ea);
  26597.         uint res = 0 - MASK_OUT_ABOVE_16(src) - XFLAG_AS_1();
  26598.  
  26599.         FLAG_N = NFLAG_16(res);
  26600.         FLAG_X = FLAG_C = CFLAG_16(res);
  26601.         FLAG_V = (src & res)>>8;
  26602.  
  26603.         res = MASK_OUT_ABOVE_16(res);
  26604.         FLAG_Z |= res;
  26605.  
  26606.         m68ki_write_16(ea, res);
  26607. }
  26608.  
  26609.  
  26610. void m68k_op_negx_16_aw(void)
  26611. {
  26612.         uint ea  = EA_AW_16();
  26613.         uint src = m68ki_read_16(ea);
  26614.         uint res = 0 - MASK_OUT_ABOVE_16(src) - XFLAG_AS_1();
  26615.  
  26616.         FLAG_N = NFLAG_16(res);
  26617.         FLAG_X = FLAG_C = CFLAG_16(res);
  26618.         FLAG_V = (src & res)>>8;
  26619.  
  26620.         res = MASK_OUT_ABOVE_16(res);
  26621.         FLAG_Z |= res;
  26622.  
  26623.         m68ki_write_16(ea, res);
  26624. }
  26625.  
  26626.  
  26627. void m68k_op_negx_16_al(void)
  26628. {
  26629.         uint ea  = EA_AL_16();
  26630.         uint src = m68ki_read_16(ea);
  26631.         uint res = 0 - MASK_OUT_ABOVE_16(src) - XFLAG_AS_1();
  26632.  
  26633.         FLAG_N = NFLAG_16(res);
  26634.         FLAG_X = FLAG_C = CFLAG_16(res);
  26635.         FLAG_V = (src & res)>>8;
  26636.  
  26637.         res = MASK_OUT_ABOVE_16(res);
  26638.         FLAG_Z |= res;
  26639.  
  26640.         m68ki_write_16(ea, res);
  26641. }
  26642.  
  26643.  
  26644. void m68k_op_negx_32_d(void)
  26645. {
  26646.         uint* r_dst = &DY;
  26647.         uint res = 0 - MASK_OUT_ABOVE_32(*r_dst) - XFLAG_AS_1();
  26648.  
  26649.         FLAG_N = NFLAG_32(res);
  26650.         FLAG_X = FLAG_C = CFLAG_SUB_32(*r_dst, 0, res);
  26651.         FLAG_V = (*r_dst & res)>>24;
  26652.  
  26653.         res = MASK_OUT_ABOVE_32(res);
  26654.         FLAG_Z |= res;
  26655.  
  26656.         *r_dst = res;
  26657. }
  26658.  
  26659.  
  26660. void m68k_op_negx_32_ai(void)
  26661. {
  26662.         uint ea  = EA_AY_AI_32();
  26663.         uint src = m68ki_read_32(ea);
  26664.         uint res = 0 - MASK_OUT_ABOVE_32(src) - XFLAG_AS_1();
  26665.  
  26666.         FLAG_N = NFLAG_32(res);
  26667.         FLAG_X = FLAG_C = CFLAG_SUB_32(src, 0, res);
  26668.         FLAG_V = (src & res)>>24;
  26669.  
  26670.         res = MASK_OUT_ABOVE_32(res);
  26671.         FLAG_Z |= res;
  26672.  
  26673.         m68ki_write_32(ea, res);
  26674. }
  26675.  
  26676.  
  26677. void m68k_op_negx_32_pi(void)
  26678. {
  26679.         uint ea  = EA_AY_PI_32();
  26680.         uint src = m68ki_read_32(ea);
  26681.         uint res = 0 - MASK_OUT_ABOVE_32(src) - XFLAG_AS_1();
  26682.  
  26683.         FLAG_N = NFLAG_32(res);
  26684.         FLAG_X = FLAG_C = CFLAG_SUB_32(src, 0, res);
  26685.         FLAG_V = (src & res)>>24;
  26686.  
  26687.         res = MASK_OUT_ABOVE_32(res);
  26688.         FLAG_Z |= res;
  26689.  
  26690.         m68ki_write_32(ea, res);
  26691. }
  26692.  
  26693.  
  26694. void m68k_op_negx_32_pd(void)
  26695. {
  26696.         uint ea  = EA_AY_PD_32();
  26697.         uint src = m68ki_read_32(ea);
  26698.         uint res = 0 - MASK_OUT_ABOVE_32(src) - XFLAG_AS_1();
  26699.  
  26700.         FLAG_N = NFLAG_32(res);
  26701.         FLAG_X = FLAG_C = CFLAG_SUB_32(src, 0, res);
  26702.         FLAG_V = (src & res)>>24;
  26703.  
  26704.         res = MASK_OUT_ABOVE_32(res);
  26705.         FLAG_Z |= res;
  26706.  
  26707.         m68ki_write_32(ea, res);
  26708. }
  26709.  
  26710.  
  26711. void m68k_op_negx_32_di(void)
  26712. {
  26713.         uint ea  = EA_AY_DI_32();
  26714.         uint src = m68ki_read_32(ea);
  26715.         uint res = 0 - MASK_OUT_ABOVE_32(src) - XFLAG_AS_1();
  26716.  
  26717.         FLAG_N = NFLAG_32(res);
  26718.         FLAG_X = FLAG_C = CFLAG_SUB_32(src, 0, res);
  26719.         FLAG_V = (src & res)>>24;
  26720.  
  26721.         res = MASK_OUT_ABOVE_32(res);
  26722.         FLAG_Z |= res;
  26723.  
  26724.         m68ki_write_32(ea, res);
  26725. }
  26726.  
  26727.  
  26728. void m68k_op_negx_32_ix(void)
  26729. {
  26730.         uint ea  = EA_AY_IX_32();
  26731.         uint src = m68ki_read_32(ea);
  26732.         uint res = 0 - MASK_OUT_ABOVE_32(src) - XFLAG_AS_1();
  26733.  
  26734.         FLAG_N = NFLAG_32(res);
  26735.         FLAG_X = FLAG_C = CFLAG_SUB_32(src, 0, res);
  26736.         FLAG_V = (src & res)>>24;
  26737.  
  26738.         res = MASK_OUT_ABOVE_32(res);
  26739.         FLAG_Z |= res;
  26740.  
  26741.         m68ki_write_32(ea, res);
  26742. }
  26743.  
  26744.  
  26745. void m68k_op_negx_32_aw(void)
  26746. {
  26747.         uint ea  = EA_AW_32();
  26748.         uint src = m68ki_read_32(ea);
  26749.         uint res = 0 - MASK_OUT_ABOVE_32(src) - XFLAG_AS_1();
  26750.  
  26751.         FLAG_N = NFLAG_32(res);
  26752.         FLAG_X = FLAG_C = CFLAG_SUB_32(src, 0, res);
  26753.         FLAG_V = (src & res)>>24;
  26754.  
  26755.         res = MASK_OUT_ABOVE_32(res);
  26756.         FLAG_Z |= res;
  26757.  
  26758.         m68ki_write_32(ea, res);
  26759. }
  26760.  
  26761.  
  26762. void m68k_op_negx_32_al(void)
  26763. {
  26764.         uint ea  = EA_AL_32();
  26765.         uint src = m68ki_read_32(ea);
  26766.         uint res = 0 - MASK_OUT_ABOVE_32(src) - XFLAG_AS_1();
  26767.  
  26768.         FLAG_N = NFLAG_32(res);
  26769.         FLAG_X = FLAG_C = CFLAG_SUB_32(src, 0, res);
  26770.         FLAG_V = (src & res)>>24;
  26771.  
  26772.         res = MASK_OUT_ABOVE_32(res);
  26773.         FLAG_Z |= res;
  26774.  
  26775.         m68ki_write_32(ea, res);
  26776. }
  26777.  
  26778.  
  26779. void m68k_op_nop(void)
  26780. {
  26781.         m68ki_trace_t0();                                  /* auto-disable (see m68kcpu.h) */
  26782. }
  26783.  
  26784.  
  26785. void m68k_op_not_8_d(void)
  26786. {
  26787.         uint* r_dst = &DY;
  26788.         uint res = MASK_OUT_ABOVE_8(~*r_dst);
  26789.  
  26790.         *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
  26791.  
  26792.         FLAG_N = NFLAG_8(res);
  26793.         FLAG_Z = res;
  26794.         FLAG_C = CFLAG_CLEAR;
  26795.         FLAG_V = VFLAG_CLEAR;
  26796. }
  26797.  
  26798.  
  26799. void m68k_op_not_8_ai(void)
  26800. {
  26801.         uint ea = EA_AY_AI_8();
  26802.         uint res = MASK_OUT_ABOVE_8(~m68ki_read_8(ea));
  26803.  
  26804.         m68ki_write_8(ea, res);
  26805.  
  26806.         FLAG_N = NFLAG_8(res);
  26807.         FLAG_Z = res;
  26808.         FLAG_C = CFLAG_CLEAR;
  26809.         FLAG_V = VFLAG_CLEAR;
  26810. }
  26811.  
  26812.  
  26813. void m68k_op_not_8_pi(void)
  26814. {
  26815.         uint ea = EA_AY_PI_8();
  26816.         uint res = MASK_OUT_ABOVE_8(~m68ki_read_8(ea));
  26817.  
  26818.         m68ki_write_8(ea, res);
  26819.  
  26820.         FLAG_N = NFLAG_8(res);
  26821.         FLAG_Z = res;
  26822.         FLAG_C = CFLAG_CLEAR;
  26823.         FLAG_V = VFLAG_CLEAR;
  26824. }
  26825.  
  26826.  
  26827. void m68k_op_not_8_pi7(void)
  26828. {
  26829.         uint ea = EA_A7_PI_8();
  26830.         uint res = MASK_OUT_ABOVE_8(~m68ki_read_8(ea));
  26831.  
  26832.         m68ki_write_8(ea, res);
  26833.  
  26834.         FLAG_N = NFLAG_8(res);
  26835.         FLAG_Z = res;
  26836.         FLAG_C = CFLAG_CLEAR;
  26837.         FLAG_V = VFLAG_CLEAR;
  26838. }
  26839.  
  26840.  
  26841. void m68k_op_not_8_pd(void)
  26842. {
  26843.         uint ea = EA_AY_PD_8();
  26844.         uint res = MASK_OUT_ABOVE_8(~m68ki_read_8(ea));
  26845.  
  26846.         m68ki_write_8(ea, res);
  26847.  
  26848.         FLAG_N = NFLAG_8(res);
  26849.         FLAG_Z = res;
  26850.         FLAG_C = CFLAG_CLEAR;
  26851.         FLAG_V = VFLAG_CLEAR;
  26852. }
  26853.  
  26854.  
  26855. void m68k_op_not_8_pd7(void)
  26856. {
  26857.         uint ea = EA_A7_PD_8();
  26858.         uint res = MASK_OUT_ABOVE_8(~m68ki_read_8(ea));
  26859.  
  26860.         m68ki_write_8(ea, res);
  26861.  
  26862.         FLAG_N = NFLAG_8(res);
  26863.         FLAG_Z = res;
  26864.         FLAG_C = CFLAG_CLEAR;
  26865.         FLAG_V = VFLAG_CLEAR;
  26866. }
  26867.  
  26868.  
  26869. void m68k_op_not_8_di(void)
  26870. {
  26871.         uint ea = EA_AY_DI_8();
  26872.         uint res = MASK_OUT_ABOVE_8(~m68ki_read_8(ea));
  26873.  
  26874.         m68ki_write_8(ea, res);
  26875.  
  26876.         FLAG_N = NFLAG_8(res);
  26877.         FLAG_Z = res;
  26878.         FLAG_C = CFLAG_CLEAR;
  26879.         FLAG_V = VFLAG_CLEAR;
  26880. }
  26881.  
  26882.  
  26883. void m68k_op_not_8_ix(void)
  26884. {
  26885.         uint ea = EA_AY_IX_8();
  26886.         uint res = MASK_OUT_ABOVE_8(~m68ki_read_8(ea));
  26887.  
  26888.         m68ki_write_8(ea, res);
  26889.  
  26890.         FLAG_N = NFLAG_8(res);
  26891.         FLAG_Z = res;
  26892.         FLAG_C = CFLAG_CLEAR;
  26893.         FLAG_V = VFLAG_CLEAR;
  26894. }
  26895.  
  26896.  
  26897. void m68k_op_not_8_aw(void)
  26898. {
  26899.         uint ea = EA_AW_8();
  26900.         uint res = MASK_OUT_ABOVE_8(~m68ki_read_8(ea));
  26901.  
  26902.         m68ki_write_8(ea, res);
  26903.  
  26904.         FLAG_N = NFLAG_8(res);
  26905.         FLAG_Z = res;
  26906.         FLAG_C = CFLAG_CLEAR;
  26907.         FLAG_V = VFLAG_CLEAR;
  26908. }
  26909.  
  26910.  
  26911. void m68k_op_not_8_al(void)
  26912. {
  26913.         uint ea = EA_AL_8();
  26914.         uint res = MASK_OUT_ABOVE_8(~m68ki_read_8(ea));
  26915.  
  26916.         m68ki_write_8(ea, res);
  26917.  
  26918.         FLAG_N = NFLAG_8(res);
  26919.         FLAG_Z = res;
  26920.         FLAG_C = CFLAG_CLEAR;
  26921.         FLAG_V = VFLAG_CLEAR;
  26922. }
  26923.  
  26924.  
  26925. void m68k_op_not_16_d(void)
  26926. {
  26927.         uint* r_dst = &DY;
  26928.         uint res = MASK_OUT_ABOVE_16(~*r_dst);
  26929.  
  26930.         *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
  26931.  
  26932.         FLAG_N = NFLAG_16(res);
  26933.         FLAG_Z = res;
  26934.         FLAG_C = CFLAG_CLEAR;
  26935.         FLAG_V = VFLAG_CLEAR;
  26936. }
  26937.  
  26938.  
  26939. void m68k_op_not_16_ai(void)
  26940. {
  26941.         uint ea = EA_AY_AI_16();
  26942.         uint res = MASK_OUT_ABOVE_16(~m68ki_read_16(ea));
  26943.  
  26944.         m68ki_write_16(ea, res);
  26945.  
  26946.         FLAG_N = NFLAG_16(res);
  26947.         FLAG_Z = res;
  26948.         FLAG_C = CFLAG_CLEAR;
  26949.         FLAG_V = VFLAG_CLEAR;
  26950. }
  26951.  
  26952.  
  26953. void m68k_op_not_16_pi(void)
  26954. {
  26955.         uint ea = EA_AY_PI_16();
  26956.         uint res = MASK_OUT_ABOVE_16(~m68ki_read_16(ea));
  26957.  
  26958.         m68ki_write_16(ea, res);
  26959.  
  26960.         FLAG_N = NFLAG_16(res);
  26961.         FLAG_Z = res;
  26962.         FLAG_C = CFLAG_CLEAR;
  26963.         FLAG_V = VFLAG_CLEAR;
  26964. }
  26965.  
  26966.  
  26967. void m68k_op_not_16_pd(void)
  26968. {
  26969.         uint ea = EA_AY_PD_16();
  26970.         uint res = MASK_OUT_ABOVE_16(~m68ki_read_16(ea));
  26971.  
  26972.         m68ki_write_16(ea, res);
  26973.  
  26974.         FLAG_N = NFLAG_16(res);
  26975.         FLAG_Z = res;
  26976.         FLAG_C = CFLAG_CLEAR;
  26977.         FLAG_V = VFLAG_CLEAR;
  26978. }
  26979.  
  26980.  
  26981. void m68k_op_not_16_di(void)
  26982. {
  26983.         uint ea = EA_AY_DI_16();
  26984.         uint res = MASK_OUT_ABOVE_16(~m68ki_read_16(ea));
  26985.  
  26986.         m68ki_write_16(ea, res);
  26987.  
  26988.         FLAG_N = NFLAG_16(res);
  26989.         FLAG_Z = res;
  26990.         FLAG_C = CFLAG_CLEAR;
  26991.         FLAG_V = VFLAG_CLEAR;
  26992. }
  26993.  
  26994.  
  26995. void m68k_op_not_16_ix(void)
  26996. {
  26997.         uint ea = EA_AY_IX_16();
  26998.         uint res = MASK_OUT_ABOVE_16(~m68ki_read_16(ea));
  26999.  
  27000.         m68ki_write_16(ea, res);
  27001.  
  27002.         FLAG_N = NFLAG_16(res);
  27003.         FLAG_Z = res;
  27004.         FLAG_C = CFLAG_CLEAR;
  27005.         FLAG_V = VFLAG_CLEAR;
  27006. }
  27007.  
  27008.  
  27009. void m68k_op_not_16_aw(void)
  27010. {
  27011.         uint ea = EA_AW_16();
  27012.         uint res = MASK_OUT_ABOVE_16(~m68ki_read_16(ea));
  27013.  
  27014.         m68ki_write_16(ea, res);
  27015.  
  27016.         FLAG_N = NFLAG_16(res);
  27017.         FLAG_Z = res;
  27018.         FLAG_C = CFLAG_CLEAR;
  27019.         FLAG_V = VFLAG_CLEAR;
  27020. }
  27021.  
  27022.  
  27023. void m68k_op_not_16_al(void)
  27024. {
  27025.         uint ea = EA_AL_16();
  27026.         uint res = MASK_OUT_ABOVE_16(~m68ki_read_16(ea));
  27027.  
  27028.         m68ki_write_16(ea, res);
  27029.  
  27030.         FLAG_N = NFLAG_16(res);
  27031.         FLAG_Z = res;
  27032.         FLAG_C = CFLAG_CLEAR;
  27033.         FLAG_V = VFLAG_CLEAR;
  27034. }
  27035.  
  27036.  
  27037. void m68k_op_not_32_d(void)
  27038. {
  27039.         uint* r_dst = &DY;
  27040.         uint res = *r_dst = MASK_OUT_ABOVE_32(~*r_dst);
  27041.  
  27042.         FLAG_N = NFLAG_32(res);
  27043.         FLAG_Z = res;
  27044.         FLAG_C = CFLAG_CLEAR;
  27045.         FLAG_V = VFLAG_CLEAR;
  27046. }
  27047.  
  27048.  
  27049. void m68k_op_not_32_ai(void)
  27050. {
  27051.         uint ea = EA_AY_AI_32();
  27052.         uint res = MASK_OUT_ABOVE_32(~m68ki_read_32(ea));
  27053.  
  27054.         m68ki_write_32(ea, res);
  27055.  
  27056.         FLAG_N = NFLAG_32(res);
  27057.         FLAG_Z = res;
  27058.         FLAG_C = CFLAG_CLEAR;
  27059.         FLAG_V = VFLAG_CLEAR;
  27060. }
  27061.  
  27062.  
  27063. void m68k_op_not_32_pi(void)
  27064. {
  27065.         uint ea = EA_AY_PI_32();
  27066.         uint res = MASK_OUT_ABOVE_32(~m68ki_read_32(ea));
  27067.  
  27068.         m68ki_write_32(ea, res);
  27069.  
  27070.         FLAG_N = NFLAG_32(res);
  27071.         FLAG_Z = res;
  27072.         FLAG_C = CFLAG_CLEAR;
  27073.         FLAG_V = VFLAG_CLEAR;
  27074. }
  27075.  
  27076.  
  27077. void m68k_op_not_32_pd(void)
  27078. {
  27079.         uint ea = EA_AY_PD_32();
  27080.         uint res = MASK_OUT_ABOVE_32(~m68ki_read_32(ea));
  27081.  
  27082.         m68ki_write_32(ea, res);
  27083.  
  27084.         FLAG_N = NFLAG_32(res);
  27085.         FLAG_Z = res;
  27086.         FLAG_C = CFLAG_CLEAR;
  27087.         FLAG_V = VFLAG_CLEAR;
  27088. }
  27089.  
  27090.  
  27091. void m68k_op_not_32_di(void)
  27092. {
  27093.         uint ea = EA_AY_DI_32();
  27094.         uint res = MASK_OUT_ABOVE_32(~m68ki_read_32(ea));
  27095.  
  27096.         m68ki_write_32(ea, res);
  27097.  
  27098.         FLAG_N = NFLAG_32(res);
  27099.         FLAG_Z = res;
  27100.         FLAG_C = CFLAG_CLEAR;
  27101.         FLAG_V = VFLAG_CLEAR;
  27102. }
  27103.  
  27104.  
  27105. void m68k_op_not_32_ix(void)
  27106. {
  27107.         uint ea = EA_AY_IX_32();
  27108.         uint res = MASK_OUT_ABOVE_32(~m68ki_read_32(ea));
  27109.  
  27110.         m68ki_write_32(ea, res);
  27111.  
  27112.         FLAG_N = NFLAG_32(res);
  27113.         FLAG_Z = res;
  27114.         FLAG_C = CFLAG_CLEAR;
  27115.         FLAG_V = VFLAG_CLEAR;
  27116. }
  27117.  
  27118.  
  27119. void m68k_op_not_32_aw(void)
  27120. {
  27121.         uint ea = EA_AW_32();
  27122.         uint res = MASK_OUT_ABOVE_32(~m68ki_read_32(ea));
  27123.  
  27124.         m68ki_write_32(ea, res);
  27125.  
  27126.         FLAG_N = NFLAG_32(res);
  27127.         FLAG_Z = res;
  27128.         FLAG_C = CFLAG_CLEAR;
  27129.         FLAG_V = VFLAG_CLEAR;
  27130. }
  27131.  
  27132.  
  27133. void m68k_op_not_32_al(void)
  27134. {
  27135.         uint ea = EA_AL_32();
  27136.         uint res = MASK_OUT_ABOVE_32(~m68ki_read_32(ea));
  27137.  
  27138.         m68ki_write_32(ea, res);
  27139.  
  27140.         FLAG_N = NFLAG_32(res);
  27141.         FLAG_Z = res;
  27142.         FLAG_C = CFLAG_CLEAR;
  27143.         FLAG_V = VFLAG_CLEAR;
  27144. }
  27145.  
  27146.  
  27147. void m68k_op_or_8_er_d(void)
  27148. {
  27149.         uint res = MASK_OUT_ABOVE_8((DX |= MASK_OUT_ABOVE_8(DY)));
  27150.  
  27151.         FLAG_N = NFLAG_8(res);
  27152.         FLAG_Z = res;
  27153.         FLAG_C = CFLAG_CLEAR;
  27154.         FLAG_V = VFLAG_CLEAR;
  27155. }
  27156.  
  27157.  
  27158. void m68k_op_or_8_er_ai(void)
  27159. {
  27160.         uint res = MASK_OUT_ABOVE_8((DX |= OPER_AY_AI_8()));
  27161.  
  27162.         FLAG_N = NFLAG_8(res);
  27163.         FLAG_Z = res;
  27164.         FLAG_C = CFLAG_CLEAR;
  27165.         FLAG_V = VFLAG_CLEAR;
  27166. }
  27167.  
  27168.  
  27169. void m68k_op_or_8_er_pi(void)
  27170. {
  27171.         uint res = MASK_OUT_ABOVE_8((DX |= OPER_AY_PI_8()));
  27172.  
  27173.         FLAG_N = NFLAG_8(res);
  27174.         FLAG_Z = res;
  27175.         FLAG_C = CFLAG_CLEAR;
  27176.         FLAG_V = VFLAG_CLEAR;
  27177. }
  27178.  
  27179.  
  27180. void m68k_op_or_8_er_pi7(void)
  27181. {
  27182.         uint res = MASK_OUT_ABOVE_8((DX |= OPER_A7_PI_8()));
  27183.  
  27184.         FLAG_N = NFLAG_8(res);
  27185.         FLAG_Z = res;
  27186.         FLAG_C = CFLAG_CLEAR;
  27187.         FLAG_V = VFLAG_CLEAR;
  27188. }
  27189.  
  27190.  
  27191. void m68k_op_or_8_er_pd(void)
  27192. {
  27193.         uint res = MASK_OUT_ABOVE_8((DX |= OPER_AY_PD_8()));
  27194.  
  27195.         FLAG_N = NFLAG_8(res);
  27196.         FLAG_Z = res;
  27197.         FLAG_C = CFLAG_CLEAR;
  27198.         FLAG_V = VFLAG_CLEAR;
  27199. }
  27200.  
  27201.  
  27202. void m68k_op_or_8_er_pd7(void)
  27203. {
  27204.         uint res = MASK_OUT_ABOVE_8((DX |= OPER_A7_PD_8()));
  27205.  
  27206.         FLAG_N = NFLAG_8(res);
  27207.         FLAG_Z = res;
  27208.         FLAG_C = CFLAG_CLEAR;
  27209.         FLAG_V = VFLAG_CLEAR;
  27210. }
  27211.  
  27212.  
  27213. void m68k_op_or_8_er_di(void)
  27214. {
  27215.         uint res = MASK_OUT_ABOVE_8((DX |= OPER_AY_DI_8()));
  27216.  
  27217.         FLAG_N = NFLAG_8(res);
  27218.         FLAG_Z = res;
  27219.         FLAG_C = CFLAG_CLEAR;
  27220.         FLAG_V = VFLAG_CLEAR;
  27221. }
  27222.  
  27223.  
  27224. void m68k_op_or_8_er_ix(void)
  27225. {
  27226.         uint res = MASK_OUT_ABOVE_8((DX |= OPER_AY_IX_8()));
  27227.  
  27228.         FLAG_N = NFLAG_8(res);
  27229.         FLAG_Z = res;
  27230.         FLAG_C = CFLAG_CLEAR;
  27231.         FLAG_V = VFLAG_CLEAR;
  27232. }
  27233.  
  27234.  
  27235. void m68k_op_or_8_er_aw(void)
  27236. {
  27237.         uint res = MASK_OUT_ABOVE_8((DX |= OPER_AW_8()));
  27238.  
  27239.         FLAG_N = NFLAG_8(res);
  27240.         FLAG_Z = res;
  27241.         FLAG_C = CFLAG_CLEAR;
  27242.         FLAG_V = VFLAG_CLEAR;
  27243. }
  27244.  
  27245.  
  27246. void m68k_op_or_8_er_al(void)
  27247. {
  27248.         uint res = MASK_OUT_ABOVE_8((DX |= OPER_AL_8()));
  27249.  
  27250.         FLAG_N = NFLAG_8(res);
  27251.         FLAG_Z = res;
  27252.         FLAG_C = CFLAG_CLEAR;
  27253.         FLAG_V = VFLAG_CLEAR;
  27254. }
  27255.  
  27256.  
  27257. void m68k_op_or_8_er_pcdi(void)
  27258. {
  27259.         uint res = MASK_OUT_ABOVE_8((DX |= OPER_PCDI_8()));
  27260.  
  27261.         FLAG_N = NFLAG_8(res);
  27262.         FLAG_Z = res;
  27263.         FLAG_C = CFLAG_CLEAR;
  27264.         FLAG_V = VFLAG_CLEAR;
  27265. }
  27266.  
  27267.  
  27268. void m68k_op_or_8_er_pcix(void)
  27269. {
  27270.         uint res = MASK_OUT_ABOVE_8((DX |= OPER_PCIX_8()));
  27271.  
  27272.         FLAG_N = NFLAG_8(res);
  27273.         FLAG_Z = res;
  27274.         FLAG_C = CFLAG_CLEAR;
  27275.         FLAG_V = VFLAG_CLEAR;
  27276. }
  27277.  
  27278.  
  27279. void m68k_op_or_8_er_i(void)
  27280. {
  27281.         uint res = MASK_OUT_ABOVE_8((DX |= OPER_I_8()));
  27282.  
  27283.         FLAG_N = NFLAG_8(res);
  27284.         FLAG_Z = res;
  27285.         FLAG_C = CFLAG_CLEAR;
  27286.         FLAG_V = VFLAG_CLEAR;
  27287. }
  27288.  
  27289.  
  27290. void m68k_op_or_16_er_d(void)
  27291. {
  27292.         uint res = MASK_OUT_ABOVE_16((DX |= MASK_OUT_ABOVE_16(DY)));
  27293.  
  27294.         FLAG_N = NFLAG_16(res);
  27295.         FLAG_Z = res;
  27296.         FLAG_C = CFLAG_CLEAR;
  27297.         FLAG_V = VFLAG_CLEAR;
  27298. }
  27299.  
  27300.  
  27301. void m68k_op_or_16_er_ai(void)
  27302. {
  27303.         uint res = MASK_OUT_ABOVE_16((DX |= OPER_AY_AI_16()));
  27304.  
  27305.         FLAG_N = NFLAG_16(res);
  27306.         FLAG_Z = res;
  27307.         FLAG_C = CFLAG_CLEAR;
  27308.         FLAG_V = VFLAG_CLEAR;
  27309. }
  27310.  
  27311.  
  27312. void m68k_op_or_16_er_pi(void)
  27313. {
  27314.         uint res = MASK_OUT_ABOVE_16((DX |= OPER_AY_PI_16()));
  27315.  
  27316.         FLAG_N = NFLAG_16(res);
  27317.         FLAG_Z = res;
  27318.         FLAG_C = CFLAG_CLEAR;
  27319.         FLAG_V = VFLAG_CLEAR;
  27320. }
  27321.  
  27322.  
  27323. void m68k_op_or_16_er_pd(void)
  27324. {
  27325.         uint res = MASK_OUT_ABOVE_16((DX |= OPER_AY_PD_16()));
  27326.  
  27327.         FLAG_N = NFLAG_16(res);
  27328.         FLAG_Z = res;
  27329.         FLAG_C = CFLAG_CLEAR;
  27330.         FLAG_V = VFLAG_CLEAR;
  27331. }
  27332.  
  27333.  
  27334. void m68k_op_or_16_er_di(void)
  27335. {
  27336.         uint res = MASK_OUT_ABOVE_16((DX |= OPER_AY_DI_16()));
  27337.  
  27338.         FLAG_N = NFLAG_16(res);
  27339.         FLAG_Z = res;
  27340.         FLAG_C = CFLAG_CLEAR;
  27341.         FLAG_V = VFLAG_CLEAR;
  27342. }
  27343.  
  27344.  
  27345. void m68k_op_or_16_er_ix(void)
  27346. {
  27347.         uint res = MASK_OUT_ABOVE_16((DX |= OPER_AY_IX_16()));
  27348.  
  27349.         FLAG_N = NFLAG_16(res);
  27350.         FLAG_Z = res;
  27351.         FLAG_C = CFLAG_CLEAR;
  27352.         FLAG_V = VFLAG_CLEAR;
  27353. }
  27354.  
  27355.  
  27356. void m68k_op_or_16_er_aw(void)
  27357. {
  27358.         uint res = MASK_OUT_ABOVE_16((DX |= OPER_AW_16()));
  27359.  
  27360.         FLAG_N = NFLAG_16(res);
  27361.         FLAG_Z = res;
  27362.         FLAG_C = CFLAG_CLEAR;
  27363.         FLAG_V = VFLAG_CLEAR;
  27364. }
  27365.  
  27366.  
  27367. void m68k_op_or_16_er_al(void)
  27368. {
  27369.         uint res = MASK_OUT_ABOVE_16((DX |= OPER_AL_16()));
  27370.  
  27371.         FLAG_N = NFLAG_16(res);
  27372.         FLAG_Z = res;
  27373.         FLAG_C = CFLAG_CLEAR;
  27374.         FLAG_V = VFLAG_CLEAR;
  27375. }
  27376.  
  27377.  
  27378. void m68k_op_or_16_er_pcdi(void)
  27379. {
  27380.         uint res = MASK_OUT_ABOVE_16((DX |= OPER_PCDI_16()));
  27381.  
  27382.         FLAG_N = NFLAG_16(res);
  27383.         FLAG_Z = res;
  27384.         FLAG_C = CFLAG_CLEAR;
  27385.         FLAG_V = VFLAG_CLEAR;
  27386. }
  27387.  
  27388.  
  27389. void m68k_op_or_16_er_pcix(void)
  27390. {
  27391.         uint res = MASK_OUT_ABOVE_16((DX |= OPER_PCIX_16()));
  27392.  
  27393.         FLAG_N = NFLAG_16(res);
  27394.         FLAG_Z = res;
  27395.         FLAG_C = CFLAG_CLEAR;
  27396.         FLAG_V = VFLAG_CLEAR;
  27397. }
  27398.  
  27399.  
  27400. void m68k_op_or_16_er_i(void)
  27401. {
  27402.         uint res = MASK_OUT_ABOVE_16((DX |= OPER_I_16()));
  27403.  
  27404.         FLAG_N = NFLAG_16(res);
  27405.         FLAG_Z = res;
  27406.         FLAG_C = CFLAG_CLEAR;
  27407.         FLAG_V = VFLAG_CLEAR;
  27408. }
  27409.  
  27410.  
  27411. void m68k_op_or_32_er_d(void)
  27412. {
  27413.         uint res = DX |= DY;
  27414.  
  27415.         FLAG_N = NFLAG_32(res);
  27416.         FLAG_Z = res;
  27417.         FLAG_C = CFLAG_CLEAR;
  27418.         FLAG_V = VFLAG_CLEAR;
  27419. }
  27420.  
  27421.  
  27422. void m68k_op_or_32_er_ai(void)
  27423. {
  27424.         uint res = DX |= OPER_AY_AI_32();
  27425.  
  27426.         FLAG_N = NFLAG_32(res);
  27427.         FLAG_Z = res;
  27428.         FLAG_C = CFLAG_CLEAR;
  27429.         FLAG_V = VFLAG_CLEAR;
  27430. }
  27431.  
  27432.  
  27433. void m68k_op_or_32_er_pi(void)
  27434. {
  27435.         uint res = DX |= OPER_AY_PI_32();
  27436.  
  27437.         FLAG_N = NFLAG_32(res);
  27438.         FLAG_Z = res;
  27439.         FLAG_C = CFLAG_CLEAR;
  27440.         FLAG_V = VFLAG_CLEAR;
  27441. }
  27442.  
  27443.  
  27444. void m68k_op_or_32_er_pd(void)
  27445. {
  27446.         uint res = DX |= OPER_AY_PD_32();
  27447.  
  27448.         FLAG_N = NFLAG_32(res);
  27449.         FLAG_Z = res;
  27450.         FLAG_C = CFLAG_CLEAR;
  27451.         FLAG_V = VFLAG_CLEAR;
  27452. }
  27453.  
  27454.  
  27455. void m68k_op_or_32_er_di(void)
  27456. {
  27457.         uint res = DX |= OPER_AY_DI_32();
  27458.  
  27459.         FLAG_N = NFLAG_32(res);
  27460.         FLAG_Z = res;
  27461.         FLAG_C = CFLAG_CLEAR;
  27462.         FLAG_V = VFLAG_CLEAR;
  27463. }
  27464.  
  27465.  
  27466. void m68k_op_or_32_er_ix(void)
  27467. {
  27468.         uint res = DX |= OPER_AY_IX_32();
  27469.  
  27470.         FLAG_N = NFLAG_32(res);
  27471.         FLAG_Z = res;
  27472.         FLAG_C = CFLAG_CLEAR;
  27473.         FLAG_V = VFLAG_CLEAR;
  27474. }
  27475.  
  27476.  
  27477. void m68k_op_or_32_er_aw(void)
  27478. {
  27479.         uint res = DX |= OPER_AW_32();
  27480.  
  27481.         FLAG_N = NFLAG_32(res);
  27482.         FLAG_Z = res;
  27483.         FLAG_C = CFLAG_CLEAR;
  27484.         FLAG_V = VFLAG_CLEAR;
  27485. }
  27486.  
  27487.  
  27488. void m68k_op_or_32_er_al(void)
  27489. {
  27490.         uint res = DX |= OPER_AL_32();
  27491.  
  27492.         FLAG_N = NFLAG_32(res);
  27493.         FLAG_Z = res;
  27494.         FLAG_C = CFLAG_CLEAR;
  27495.         FLAG_V = VFLAG_CLEAR;
  27496. }
  27497.  
  27498.  
  27499. void m68k_op_or_32_er_pcdi(void)
  27500. {
  27501.         uint res = DX |= OPER_PCDI_32();
  27502.  
  27503.         FLAG_N = NFLAG_32(res);
  27504.         FLAG_Z = res;
  27505.         FLAG_C = CFLAG_CLEAR;
  27506.         FLAG_V = VFLAG_CLEAR;
  27507. }
  27508.  
  27509.  
  27510. void m68k_op_or_32_er_pcix(void)
  27511. {
  27512.         uint res = DX |= OPER_PCIX_32();
  27513.  
  27514.         FLAG_N = NFLAG_32(res);
  27515.         FLAG_Z = res;
  27516.         FLAG_C = CFLAG_CLEAR;
  27517.         FLAG_V = VFLAG_CLEAR;
  27518. }
  27519.  
  27520.  
  27521. void m68k_op_or_32_er_i(void)
  27522. {
  27523.         uint res = DX |= OPER_I_32();
  27524.  
  27525.         FLAG_N = NFLAG_32(res);
  27526.         FLAG_Z = res;
  27527.         FLAG_C = CFLAG_CLEAR;
  27528.         FLAG_V = VFLAG_CLEAR;
  27529. }
  27530.  
  27531.  
  27532. void m68k_op_or_8_re_ai(void)
  27533. {
  27534.         uint ea = EA_AY_AI_8();
  27535.         uint res = MASK_OUT_ABOVE_8(DX | m68ki_read_8(ea));
  27536.  
  27537.         m68ki_write_8(ea, res);
  27538.  
  27539.         FLAG_N = NFLAG_8(res);
  27540.         FLAG_Z = res;
  27541.         FLAG_C = CFLAG_CLEAR;
  27542.         FLAG_V = VFLAG_CLEAR;
  27543. }
  27544.  
  27545.  
  27546. void m68k_op_or_8_re_pi(void)
  27547. {
  27548.         uint ea = EA_AY_PI_8();
  27549.         uint res = MASK_OUT_ABOVE_8(DX | m68ki_read_8(ea));
  27550.  
  27551.         m68ki_write_8(ea, res);
  27552.  
  27553.         FLAG_N = NFLAG_8(res);
  27554.         FLAG_Z = res;
  27555.         FLAG_C = CFLAG_CLEAR;
  27556.         FLAG_V = VFLAG_CLEAR;
  27557. }
  27558.  
  27559.  
  27560. void m68k_op_or_8_re_pi7(void)
  27561. {
  27562.         uint ea = EA_A7_PI_8();
  27563.         uint res = MASK_OUT_ABOVE_8(DX | m68ki_read_8(ea));
  27564.  
  27565.         m68ki_write_8(ea, res);
  27566.  
  27567.         FLAG_N = NFLAG_8(res);
  27568.         FLAG_Z = res;
  27569.         FLAG_C = CFLAG_CLEAR;
  27570.         FLAG_V = VFLAG_CLEAR;
  27571. }
  27572.  
  27573.  
  27574. void m68k_op_or_8_re_pd(void)
  27575. {
  27576.         uint ea = EA_AY_PD_8();
  27577.         uint res = MASK_OUT_ABOVE_8(DX | m68ki_read_8(ea));
  27578.  
  27579.         m68ki_write_8(ea, res);
  27580.  
  27581.         FLAG_N = NFLAG_8(res);
  27582.         FLAG_Z = res;
  27583.         FLAG_C = CFLAG_CLEAR;
  27584.         FLAG_V = VFLAG_CLEAR;
  27585. }
  27586.  
  27587.  
  27588. void m68k_op_or_8_re_pd7(void)
  27589. {
  27590.         uint ea = EA_A7_PD_8();
  27591.         uint res = MASK_OUT_ABOVE_8(DX | m68ki_read_8(ea));
  27592.  
  27593.         m68ki_write_8(ea, res);
  27594.  
  27595.         FLAG_N = NFLAG_8(res);
  27596.         FLAG_Z = res;
  27597.         FLAG_C = CFLAG_CLEAR;
  27598.         FLAG_V = VFLAG_CLEAR;
  27599. }
  27600.  
  27601.  
  27602. void m68k_op_or_8_re_di(void)
  27603. {
  27604.         uint ea = EA_AY_DI_8();
  27605.         uint res = MASK_OUT_ABOVE_8(DX | m68ki_read_8(ea));
  27606.  
  27607.         m68ki_write_8(ea, res);
  27608.  
  27609.         FLAG_N = NFLAG_8(res);
  27610.         FLAG_Z = res;
  27611.         FLAG_C = CFLAG_CLEAR;
  27612.         FLAG_V = VFLAG_CLEAR;
  27613. }
  27614.  
  27615.  
  27616. void m68k_op_or_8_re_ix(void)
  27617. {
  27618.         uint ea = EA_AY_IX_8();
  27619.         uint res = MASK_OUT_ABOVE_8(DX | m68ki_read_8(ea));
  27620.  
  27621.         m68ki_write_8(ea, res);
  27622.  
  27623.         FLAG_N = NFLAG_8(res);
  27624.         FLAG_Z = res;
  27625.         FLAG_C = CFLAG_CLEAR;
  27626.         FLAG_V = VFLAG_CLEAR;
  27627. }
  27628.  
  27629.  
  27630. void m68k_op_or_8_re_aw(void)
  27631. {
  27632.         uint ea = EA_AW_8();
  27633.         uint res = MASK_OUT_ABOVE_8(DX | m68ki_read_8(ea));
  27634.  
  27635.         m68ki_write_8(ea, res);
  27636.  
  27637.         FLAG_N = NFLAG_8(res);
  27638.         FLAG_Z = res;
  27639.         FLAG_C = CFLAG_CLEAR;
  27640.         FLAG_V = VFLAG_CLEAR;
  27641. }
  27642.  
  27643.  
  27644. void m68k_op_or_8_re_al(void)
  27645. {
  27646.         uint ea = EA_AL_8();
  27647.         uint res = MASK_OUT_ABOVE_8(DX | m68ki_read_8(ea));
  27648.  
  27649.         m68ki_write_8(ea, res);
  27650.  
  27651.         FLAG_N = NFLAG_8(res);
  27652.         FLAG_Z = res;
  27653.         FLAG_C = CFLAG_CLEAR;
  27654.         FLAG_V = VFLAG_CLEAR;
  27655. }
  27656.  
  27657.  
  27658. void m68k_op_or_16_re_ai(void)
  27659. {
  27660.         uint ea = EA_AY_AI_16();
  27661.         uint res = MASK_OUT_ABOVE_16(DX | m68ki_read_16(ea));
  27662.  
  27663.         m68ki_write_16(ea, res);
  27664.  
  27665.         FLAG_N = NFLAG_16(res);
  27666.         FLAG_Z = res;
  27667.         FLAG_C = CFLAG_CLEAR;
  27668.         FLAG_V = VFLAG_CLEAR;
  27669. }
  27670.  
  27671.  
  27672. void m68k_op_or_16_re_pi(void)
  27673. {
  27674.         uint ea = EA_AY_PI_16();
  27675.         uint res = MASK_OUT_ABOVE_16(DX | m68ki_read_16(ea));
  27676.  
  27677.         m68ki_write_16(ea, res);
  27678.  
  27679.         FLAG_N = NFLAG_16(res);
  27680.         FLAG_Z = res;
  27681.         FLAG_C = CFLAG_CLEAR;
  27682.         FLAG_V = VFLAG_CLEAR;
  27683. }
  27684.  
  27685.  
  27686. void m68k_op_or_16_re_pd(void)
  27687. {
  27688.         uint ea = EA_AY_PD_16();
  27689.         uint res = MASK_OUT_ABOVE_16(DX | m68ki_read_16(ea));
  27690.  
  27691.         m68ki_write_16(ea, res);
  27692.  
  27693.         FLAG_N = NFLAG_16(res);
  27694.         FLAG_Z = res;
  27695.         FLAG_C = CFLAG_CLEAR;
  27696.         FLAG_V = VFLAG_CLEAR;
  27697. }
  27698.  
  27699.  
  27700. void m68k_op_or_16_re_di(void)
  27701. {
  27702.         uint ea = EA_AY_DI_16();
  27703.         uint res = MASK_OUT_ABOVE_16(DX | m68ki_read_16(ea));
  27704.  
  27705.         m68ki_write_16(ea, res);
  27706.  
  27707.         FLAG_N = NFLAG_16(res);
  27708.         FLAG_Z = res;
  27709.         FLAG_C = CFLAG_CLEAR;
  27710.         FLAG_V = VFLAG_CLEAR;
  27711. }
  27712.  
  27713.  
  27714. void m68k_op_or_16_re_ix(void)
  27715. {
  27716.         uint ea = EA_AY_IX_16();
  27717.         uint res = MASK_OUT_ABOVE_16(DX | m68ki_read_16(ea));
  27718.  
  27719.         m68ki_write_16(ea, res);
  27720.  
  27721.         FLAG_N = NFLAG_16(res);
  27722.         FLAG_Z = res;
  27723.         FLAG_C = CFLAG_CLEAR;
  27724.         FLAG_V = VFLAG_CLEAR;
  27725. }
  27726.  
  27727.  
  27728. void m68k_op_or_16_re_aw(void)
  27729. {
  27730.         uint ea = EA_AW_16();
  27731.         uint res = MASK_OUT_ABOVE_16(DX | m68ki_read_16(ea));
  27732.  
  27733.         m68ki_write_16(ea, res);
  27734.  
  27735.         FLAG_N = NFLAG_16(res);
  27736.         FLAG_Z = res;
  27737.         FLAG_C = CFLAG_CLEAR;
  27738.         FLAG_V = VFLAG_CLEAR;
  27739. }
  27740.  
  27741.  
  27742. void m68k_op_or_16_re_al(void)
  27743. {
  27744.         uint ea = EA_AL_16();
  27745.         uint res = MASK_OUT_ABOVE_16(DX | m68ki_read_16(ea));
  27746.  
  27747.         m68ki_write_16(ea, res);
  27748.  
  27749.         FLAG_N = NFLAG_16(res);
  27750.         FLAG_Z = res;
  27751.         FLAG_C = CFLAG_CLEAR;
  27752.         FLAG_V = VFLAG_CLEAR;
  27753. }
  27754.  
  27755.  
  27756. void m68k_op_or_32_re_ai(void)
  27757. {
  27758.         uint ea = EA_AY_AI_32();
  27759.         uint res = DX | m68ki_read_32(ea);
  27760.  
  27761.         m68ki_write_32(ea, res);
  27762.  
  27763.         FLAG_N = NFLAG_32(res);
  27764.         FLAG_Z = res;
  27765.         FLAG_C = CFLAG_CLEAR;
  27766.         FLAG_V = VFLAG_CLEAR;
  27767. }
  27768.  
  27769.  
  27770. void m68k_op_or_32_re_pi(void)
  27771. {
  27772.         uint ea = EA_AY_PI_32();
  27773.         uint res = DX | m68ki_read_32(ea);
  27774.  
  27775.         m68ki_write_32(ea, res);
  27776.  
  27777.         FLAG_N = NFLAG_32(res);
  27778.         FLAG_Z = res;
  27779.         FLAG_C = CFLAG_CLEAR;
  27780.         FLAG_V = VFLAG_CLEAR;
  27781. }
  27782.  
  27783.  
  27784. void m68k_op_or_32_re_pd(void)
  27785. {
  27786.         uint ea = EA_AY_PD_32();
  27787.         uint res = DX | m68ki_read_32(ea);
  27788.  
  27789.         m68ki_write_32(ea, res);
  27790.  
  27791.         FLAG_N = NFLAG_32(res);
  27792.         FLAG_Z = res;
  27793.         FLAG_C = CFLAG_CLEAR;
  27794.         FLAG_V = VFLAG_CLEAR;
  27795. }
  27796.  
  27797.  
  27798. void m68k_op_or_32_re_di(void)
  27799. {
  27800.         uint ea = EA_AY_DI_32();
  27801.         uint res = DX | m68ki_read_32(ea);
  27802.  
  27803.         m68ki_write_32(ea, res);
  27804.  
  27805.         FLAG_N = NFLAG_32(res);
  27806.         FLAG_Z = res;
  27807.         FLAG_C = CFLAG_CLEAR;
  27808.         FLAG_V = VFLAG_CLEAR;
  27809. }
  27810.  
  27811.  
  27812. void m68k_op_or_32_re_ix(void)
  27813. {
  27814.         uint ea = EA_AY_IX_32();
  27815.         uint res = DX | m68ki_read_32(ea);
  27816.  
  27817.         m68ki_write_32(ea, res);
  27818.  
  27819.         FLAG_N = NFLAG_32(res);
  27820.         FLAG_Z = res;
  27821.         FLAG_C = CFLAG_CLEAR;
  27822.         FLAG_V = VFLAG_CLEAR;
  27823. }
  27824.  
  27825.  
  27826. void m68k_op_or_32_re_aw(void)
  27827. {
  27828.         uint ea = EA_AW_32();
  27829.         uint res = DX | m68ki_read_32(ea);
  27830.  
  27831.         m68ki_write_32(ea, res);
  27832.  
  27833.         FLAG_N = NFLAG_32(res);
  27834.         FLAG_Z = res;
  27835.         FLAG_C = CFLAG_CLEAR;
  27836.         FLAG_V = VFLAG_CLEAR;
  27837. }
  27838.  
  27839.  
  27840. void m68k_op_or_32_re_al(void)
  27841. {
  27842.         uint ea = EA_AL_32();
  27843.         uint res = DX | m68ki_read_32(ea);
  27844.  
  27845.         m68ki_write_32(ea, res);
  27846.  
  27847.         FLAG_N = NFLAG_32(res);
  27848.         FLAG_Z = res;
  27849.         FLAG_C = CFLAG_CLEAR;
  27850.         FLAG_V = VFLAG_CLEAR;
  27851. }
  27852.  
  27853.  
  27854. void m68k_op_ori_8_d(void)
  27855. {
  27856.         uint res = MASK_OUT_ABOVE_8((DY |= OPER_I_8()));
  27857.  
  27858.         FLAG_N = NFLAG_8(res);
  27859.         FLAG_Z = res;
  27860.         FLAG_C = CFLAG_CLEAR;
  27861.         FLAG_V = VFLAG_CLEAR;
  27862. }
  27863.  
  27864.  
  27865. void m68k_op_ori_8_ai(void)
  27866. {
  27867.         uint src = OPER_I_8();
  27868.         uint ea = EA_AY_AI_8();
  27869.         uint res = MASK_OUT_ABOVE_8(src | m68ki_read_8(ea));
  27870.  
  27871.         m68ki_write_8(ea, res);
  27872.  
  27873.         FLAG_N = NFLAG_8(res);
  27874.         FLAG_Z = res;
  27875.         FLAG_C = CFLAG_CLEAR;
  27876.         FLAG_V = VFLAG_CLEAR;
  27877. }
  27878.  
  27879.  
  27880. void m68k_op_ori_8_pi(void)
  27881. {
  27882.         uint src = OPER_I_8();
  27883.         uint ea = EA_AY_PI_8();
  27884.         uint res = MASK_OUT_ABOVE_8(src | m68ki_read_8(ea));
  27885.  
  27886.         m68ki_write_8(ea, res);
  27887.  
  27888.         FLAG_N = NFLAG_8(res);
  27889.         FLAG_Z = res;
  27890.         FLAG_C = CFLAG_CLEAR;
  27891.         FLAG_V = VFLAG_CLEAR;
  27892. }
  27893.  
  27894.  
  27895. void m68k_op_ori_8_pi7(void)
  27896. {
  27897.         uint src = OPER_I_8();
  27898.         uint ea = EA_A7_PI_8();
  27899.         uint res = MASK_OUT_ABOVE_8(src | m68ki_read_8(ea));
  27900.  
  27901.         m68ki_write_8(ea, res);
  27902.  
  27903.         FLAG_N = NFLAG_8(res);
  27904.         FLAG_Z = res;
  27905.         FLAG_C = CFLAG_CLEAR;
  27906.         FLAG_V = VFLAG_CLEAR;
  27907. }
  27908.  
  27909.  
  27910. void m68k_op_ori_8_pd(void)
  27911. {
  27912.         uint src = OPER_I_8();
  27913.         uint ea = EA_AY_PD_8();
  27914.         uint res = MASK_OUT_ABOVE_8(src | m68ki_read_8(ea));
  27915.  
  27916.         m68ki_write_8(ea, res);
  27917.  
  27918.         FLAG_N = NFLAG_8(res);
  27919.         FLAG_Z = res;
  27920.         FLAG_C = CFLAG_CLEAR;
  27921.         FLAG_V = VFLAG_CLEAR;
  27922. }
  27923.  
  27924.  
  27925. void m68k_op_ori_8_pd7(void)
  27926. {
  27927.         uint src = OPER_I_8();
  27928.         uint ea = EA_A7_PD_8();
  27929.         uint res = MASK_OUT_ABOVE_8(src | m68ki_read_8(ea));
  27930.  
  27931.         m68ki_write_8(ea, res);
  27932.  
  27933.         FLAG_N = NFLAG_8(res);
  27934.         FLAG_Z = res;
  27935.         FLAG_C = CFLAG_CLEAR;
  27936.         FLAG_V = VFLAG_CLEAR;
  27937. }
  27938.  
  27939.  
  27940. void m68k_op_ori_8_di(void)
  27941. {
  27942.         uint src = OPER_I_8();
  27943.         uint ea = EA_AY_DI_8();
  27944.         uint res = MASK_OUT_ABOVE_8(src | m68ki_read_8(ea));
  27945.  
  27946.         m68ki_write_8(ea, res);
  27947.  
  27948.         FLAG_N = NFLAG_8(res);
  27949.         FLAG_Z = res;
  27950.         FLAG_C = CFLAG_CLEAR;
  27951.         FLAG_V = VFLAG_CLEAR;
  27952. }
  27953.  
  27954.  
  27955. void m68k_op_ori_8_ix(void)
  27956. {
  27957.         uint src = OPER_I_8();
  27958.         uint ea = EA_AY_IX_8();
  27959.         uint res = MASK_OUT_ABOVE_8(src | m68ki_read_8(ea));
  27960.  
  27961.         m68ki_write_8(ea, res);
  27962.  
  27963.         FLAG_N = NFLAG_8(res);
  27964.         FLAG_Z = res;
  27965.         FLAG_C = CFLAG_CLEAR;
  27966.         FLAG_V = VFLAG_CLEAR;
  27967. }
  27968.  
  27969.  
  27970. void m68k_op_ori_8_aw(void)
  27971. {
  27972.         uint src = OPER_I_8();
  27973.         uint ea = EA_AW_8();
  27974.         uint res = MASK_OUT_ABOVE_8(src | m68ki_read_8(ea));
  27975.  
  27976.         m68ki_write_8(ea, res);
  27977.  
  27978.         FLAG_N = NFLAG_8(res);
  27979.         FLAG_Z = res;
  27980.         FLAG_C = CFLAG_CLEAR;
  27981.         FLAG_V = VFLAG_CLEAR;
  27982. }
  27983.  
  27984.  
  27985. void m68k_op_ori_8_al(void)
  27986. {
  27987.         uint src = OPER_I_8();
  27988.         uint ea = EA_AL_8();
  27989.         uint res = MASK_OUT_ABOVE_8(src | m68ki_read_8(ea));
  27990.  
  27991.         m68ki_write_8(ea, res);
  27992.  
  27993.         FLAG_N = NFLAG_8(res);
  27994.         FLAG_Z = res;
  27995.         FLAG_C = CFLAG_CLEAR;
  27996.         FLAG_V = VFLAG_CLEAR;
  27997. }
  27998.  
  27999.  
  28000. void m68k_op_ori_16_d(void)
  28001. {
  28002.         uint res = MASK_OUT_ABOVE_16(DY |= OPER_I_16());
  28003.  
  28004.         FLAG_N = NFLAG_16(res);
  28005.         FLAG_Z = res;
  28006.         FLAG_C = CFLAG_CLEAR;
  28007.         FLAG_V = VFLAG_CLEAR;
  28008. }
  28009.  
  28010.  
  28011. void m68k_op_ori_16_ai(void)
  28012. {
  28013.         uint src = OPER_I_16();
  28014.         uint ea = EA_AY_AI_16();
  28015.         uint res = MASK_OUT_ABOVE_16(src | m68ki_read_16(ea));
  28016.  
  28017.         m68ki_write_16(ea, res);
  28018.  
  28019.         FLAG_N = NFLAG_16(res);
  28020.         FLAG_Z = res;
  28021.         FLAG_C = CFLAG_CLEAR;
  28022.         FLAG_V = VFLAG_CLEAR;
  28023. }
  28024.  
  28025.  
  28026. void m68k_op_ori_16_pi(void)
  28027. {
  28028.         uint src = OPER_I_16();
  28029.         uint ea = EA_AY_PI_16();
  28030.         uint res = MASK_OUT_ABOVE_16(src | m68ki_read_16(ea));
  28031.  
  28032.         m68ki_write_16(ea, res);
  28033.  
  28034.         FLAG_N = NFLAG_16(res);
  28035.         FLAG_Z = res;
  28036.         FLAG_C = CFLAG_CLEAR;
  28037.         FLAG_V = VFLAG_CLEAR;
  28038. }
  28039.  
  28040.  
  28041. void m68k_op_ori_16_pd(void)
  28042. {
  28043.         uint src = OPER_I_16();
  28044.         uint ea = EA_AY_PD_16();
  28045.         uint res = MASK_OUT_ABOVE_16(src | m68ki_read_16(ea));
  28046.  
  28047.         m68ki_write_16(ea, res);
  28048.  
  28049.         FLAG_N = NFLAG_16(res);
  28050.         FLAG_Z = res;
  28051.         FLAG_C = CFLAG_CLEAR;
  28052.         FLAG_V = VFLAG_CLEAR;
  28053. }
  28054.  
  28055.  
  28056. void m68k_op_ori_16_di(void)
  28057. {
  28058.         uint src = OPER_I_16();
  28059.         uint ea = EA_AY_DI_16();
  28060.         uint res = MASK_OUT_ABOVE_16(src | m68ki_read_16(ea));
  28061.  
  28062.         m68ki_write_16(ea, res);
  28063.  
  28064.         FLAG_N = NFLAG_16(res);
  28065.         FLAG_Z = res;
  28066.         FLAG_C = CFLAG_CLEAR;
  28067.         FLAG_V = VFLAG_CLEAR;
  28068. }
  28069.  
  28070.  
  28071. void m68k_op_ori_16_ix(void)
  28072. {
  28073.         uint src = OPER_I_16();
  28074.         uint ea = EA_AY_IX_16();
  28075.         uint res = MASK_OUT_ABOVE_16(src | m68ki_read_16(ea));
  28076.  
  28077.         m68ki_write_16(ea, res);
  28078.  
  28079.         FLAG_N = NFLAG_16(res);
  28080.         FLAG_Z = res;
  28081.         FLAG_C = CFLAG_CLEAR;
  28082.         FLAG_V = VFLAG_CLEAR;
  28083. }
  28084.  
  28085.  
  28086. void m68k_op_ori_16_aw(void)
  28087. {
  28088.         uint src = OPER_I_16();
  28089.         uint ea = EA_AW_16();
  28090.         uint res = MASK_OUT_ABOVE_16(src | m68ki_read_16(ea));
  28091.  
  28092.         m68ki_write_16(ea, res);
  28093.  
  28094.         FLAG_N = NFLAG_16(res);
  28095.         FLAG_Z = res;
  28096.         FLAG_C = CFLAG_CLEAR;
  28097.         FLAG_V = VFLAG_CLEAR;
  28098. }
  28099.  
  28100.  
  28101. void m68k_op_ori_16_al(void)
  28102. {
  28103.         uint src = OPER_I_16();
  28104.         uint ea = EA_AL_16();
  28105.         uint res = MASK_OUT_ABOVE_16(src | m68ki_read_16(ea));
  28106.  
  28107.         m68ki_write_16(ea, res);
  28108.  
  28109.         FLAG_N = NFLAG_16(res);
  28110.         FLAG_Z = res;
  28111.         FLAG_C = CFLAG_CLEAR;
  28112.         FLAG_V = VFLAG_CLEAR;
  28113. }
  28114.  
  28115.  
  28116. void m68k_op_ori_32_d(void)
  28117. {
  28118.         uint res = DY |= OPER_I_32();
  28119.  
  28120.         FLAG_N = NFLAG_32(res);
  28121.         FLAG_Z = res;
  28122.         FLAG_C = CFLAG_CLEAR;
  28123.         FLAG_V = VFLAG_CLEAR;
  28124. }
  28125.  
  28126.  
  28127. void m68k_op_ori_32_ai(void)
  28128. {
  28129.         uint src = OPER_I_32();
  28130.         uint ea = EA_AY_AI_32();
  28131.         uint res = src | m68ki_read_32(ea);
  28132.  
  28133.         m68ki_write_32(ea, res);
  28134.  
  28135.         FLAG_N = NFLAG_32(res);
  28136.         FLAG_Z = res;
  28137.         FLAG_C = CFLAG_CLEAR;
  28138.         FLAG_V = VFLAG_CLEAR;
  28139. }
  28140.  
  28141.  
  28142. void m68k_op_ori_32_pi(void)
  28143. {
  28144.         uint src = OPER_I_32();
  28145.         uint ea = EA_AY_PI_32();
  28146.         uint res = src | m68ki_read_32(ea);
  28147.  
  28148.         m68ki_write_32(ea, res);
  28149.  
  28150.         FLAG_N = NFLAG_32(res);
  28151.         FLAG_Z = res;
  28152.         FLAG_C = CFLAG_CLEAR;
  28153.         FLAG_V = VFLAG_CLEAR;
  28154. }
  28155.  
  28156.  
  28157. void m68k_op_ori_32_pd(void)
  28158. {
  28159.         uint src = OPER_I_32();
  28160.         uint ea = EA_AY_PD_32();
  28161.         uint res = src | m68ki_read_32(ea);
  28162.  
  28163.         m68ki_write_32(ea, res);
  28164.  
  28165.         FLAG_N = NFLAG_32(res);
  28166.         FLAG_Z = res;
  28167.         FLAG_C = CFLAG_CLEAR;
  28168.         FLAG_V = VFLAG_CLEAR;
  28169. }
  28170.  
  28171.  
  28172. void m68k_op_ori_32_di(void)
  28173. {
  28174.         uint src = OPER_I_32();
  28175.         uint ea = EA_AY_DI_32();
  28176.         uint res = src | m68ki_read_32(ea);
  28177.  
  28178.         m68ki_write_32(ea, res);
  28179.  
  28180.         FLAG_N = NFLAG_32(res);
  28181.         FLAG_Z = res;
  28182.         FLAG_C = CFLAG_CLEAR;
  28183.         FLAG_V = VFLAG_CLEAR;
  28184. }
  28185.  
  28186.  
  28187. void m68k_op_ori_32_ix(void)
  28188. {
  28189.         uint src = OPER_I_32();
  28190.         uint ea = EA_AY_IX_32();
  28191.         uint res = src | m68ki_read_32(ea);
  28192.  
  28193.         m68ki_write_32(ea, res);
  28194.  
  28195.         FLAG_N = NFLAG_32(res);
  28196.         FLAG_Z = res;
  28197.         FLAG_C = CFLAG_CLEAR;
  28198.         FLAG_V = VFLAG_CLEAR;
  28199. }
  28200.  
  28201.  
  28202. void m68k_op_ori_32_aw(void)
  28203. {
  28204.         uint src = OPER_I_32();
  28205.         uint ea = EA_AW_32();
  28206.         uint res = src | m68ki_read_32(ea);
  28207.  
  28208.         m68ki_write_32(ea, res);
  28209.  
  28210.         FLAG_N = NFLAG_32(res);
  28211.         FLAG_Z = res;
  28212.         FLAG_C = CFLAG_CLEAR;
  28213.         FLAG_V = VFLAG_CLEAR;
  28214. }
  28215.  
  28216.  
  28217. void m68k_op_ori_32_al(void)
  28218. {
  28219.         uint src = OPER_I_32();
  28220.         uint ea = EA_AL_32();
  28221.         uint res = src | m68ki_read_32(ea);
  28222.  
  28223.         m68ki_write_32(ea, res);
  28224.  
  28225.         FLAG_N = NFLAG_32(res);
  28226.         FLAG_Z = res;
  28227.         FLAG_C = CFLAG_CLEAR;
  28228.         FLAG_V = VFLAG_CLEAR;
  28229. }
  28230.  
  28231.  
  28232. void m68k_op_ori_16_toc(void)
  28233. {
  28234.         m68ki_set_ccr(m68ki_get_ccr() | OPER_I_16());
  28235. }
  28236.  
  28237.  
  28238. void m68k_op_ori_16_tos(void)
  28239. {
  28240.         if(FLAG_S)
  28241.         {
  28242.                 uint src = OPER_I_16();
  28243.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  28244.                 m68ki_set_sr(m68ki_get_sr() | src);
  28245.                 return;
  28246.         }
  28247.         m68ki_exception_privilege_violation();
  28248. }
  28249.  
  28250.  
  28251. void m68k_op_pack_16_rr(void)
  28252. {
  28253.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  28254.         {
  28255.                 /* Note: DX and DY are reversed in Motorola's docs */
  28256.                 uint src = DY + OPER_I_16();
  28257.                 uint* r_dst = &DX;
  28258.  
  28259.                 *r_dst = MASK_OUT_BELOW_8(*r_dst) | ((src >> 4) & 0x00f0) | (src & 0x000f);
  28260.                 return;
  28261.         }
  28262.         m68ki_exception_illegal();
  28263. }
  28264.  
  28265.  
  28266. void m68k_op_pack_16_mm_ax7(void)
  28267. {
  28268.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  28269.         {
  28270.                 /* Note: AX and AY are reversed in Motorola's docs */
  28271.                 uint ea_src = EA_AY_PD_8();
  28272.                 uint src = m68ki_read_8(ea_src);
  28273.                 ea_src = EA_AY_PD_8();
  28274.                 src = ((src << 8) | m68ki_read_8(ea_src)) + OPER_I_16();
  28275.  
  28276.                 m68ki_write_8(EA_A7_PD_8(), ((src >> 4) & 0x00f0) | (src & 0x000f));
  28277.                 return;
  28278.         }
  28279.         m68ki_exception_illegal();
  28280. }
  28281.  
  28282.  
  28283. void m68k_op_pack_16_mm_ay7(void)
  28284. {
  28285.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  28286.         {
  28287.                 /* Note: AX and AY are reversed in Motorola's docs */
  28288.                 uint ea_src = EA_A7_PD_8();
  28289.                 uint src = m68ki_read_8(ea_src);
  28290.                 ea_src = EA_A7_PD_8();
  28291.                 src = ((src << 8) | m68ki_read_8(ea_src)) + OPER_I_16();
  28292.  
  28293.                 m68ki_write_8(EA_AX_PD_8(), ((src >> 4) & 0x00f0) | (src & 0x000f));
  28294.                 return;
  28295.         }
  28296.         m68ki_exception_illegal();
  28297. }
  28298.  
  28299.  
  28300. void m68k_op_pack_16_mm_axy7(void)
  28301. {
  28302.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  28303.         {
  28304.                 uint ea_src = EA_A7_PD_8();
  28305.                 uint src = m68ki_read_8(ea_src);
  28306.                 ea_src = EA_A7_PD_8();
  28307.                 src = ((src << 8) | m68ki_read_8(ea_src)) + OPER_I_16();
  28308.  
  28309.                 m68ki_write_8(EA_A7_PD_8(), ((src >> 4) & 0x00f0) | (src & 0x000f));
  28310.                 return;
  28311.         }
  28312.         m68ki_exception_illegal();
  28313. }
  28314.  
  28315.  
  28316. void m68k_op_pack_16_mm(void)
  28317. {
  28318.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  28319.         {
  28320.                 /* Note: AX and AY are reversed in Motorola's docs */
  28321.                 uint ea_src = EA_AY_PD_8();
  28322.                 uint src = m68ki_read_8(ea_src);
  28323.                 ea_src = EA_AY_PD_8();
  28324.                 src = ((src << 8) | m68ki_read_8(ea_src)) + OPER_I_16();
  28325.  
  28326.                 m68ki_write_8(EA_AX_PD_8(), ((src >> 4) & 0x00f0) | (src & 0x000f));
  28327.                 return;
  28328.         }
  28329.         m68ki_exception_illegal();
  28330. }
  28331.  
  28332.  
  28333. void m68k_op_pea_32_ai(void)
  28334. {
  28335.         uint ea = EA_AY_AI_32();
  28336.  
  28337.         m68ki_push_32(ea);
  28338. }
  28339.  
  28340.  
  28341. void m68k_op_pea_32_di(void)
  28342. {
  28343.         uint ea = EA_AY_DI_32();
  28344.  
  28345.         m68ki_push_32(ea);
  28346. }
  28347.  
  28348.  
  28349. void m68k_op_pea_32_ix(void)
  28350. {
  28351.         uint ea = EA_AY_IX_32();
  28352.  
  28353.         m68ki_push_32(ea);
  28354. }
  28355.  
  28356.  
  28357. void m68k_op_pea_32_aw(void)
  28358. {
  28359.         uint ea = EA_AW_32();
  28360.  
  28361.         m68ki_push_32(ea);
  28362. }
  28363.  
  28364.  
  28365. void m68k_op_pea_32_al(void)
  28366. {
  28367.         uint ea = EA_AL_32();
  28368.  
  28369.         m68ki_push_32(ea);
  28370. }
  28371.  
  28372.  
  28373. void m68k_op_pea_32_pcdi(void)
  28374. {
  28375.         uint ea = EA_PCDI_32();
  28376.  
  28377.         m68ki_push_32(ea);
  28378. }
  28379.  
  28380.  
  28381. void m68k_op_pea_32_pcix(void)
  28382. {
  28383.         uint ea = EA_PCIX_32();
  28384.  
  28385.         m68ki_push_32(ea);
  28386. }
  28387.  
  28388.  
  28389. void m68k_op_pflush_32(void)
  28390. {
  28391.         if(CPU_TYPE_IS_040_PLUS(CPU_TYPE))
  28392.         {
  28393.                 // Nothing to do, unless address translation cache is emulated
  28394.                 return;
  28395.         }
  28396.         m68ki_exception_illegal();
  28397. }
  28398.  
  28399.  
  28400. void m68k_op_reset(void)
  28401. {
  28402.         if(FLAG_S)
  28403.         {
  28404.                 m68ki_output_reset();              /* auto-disable (see m68kcpu.h) */
  28405.                 USE_CYCLES(CYC_RESET);
  28406.                 return;
  28407.         }
  28408.         m68ki_exception_privilege_violation();
  28409. }
  28410.  
  28411.  
  28412. void m68k_op_ror_8_s(void)
  28413. {
  28414.         uint* r_dst = &DY;
  28415.         uint orig_shift = (((REG_IR >> 9) - 1) & 7) + 1;
  28416.         uint shift = orig_shift & 7;
  28417.         uint src = MASK_OUT_ABOVE_8(*r_dst);
  28418.         uint res = ROR_8(src, shift);
  28419.  
  28420.         if(orig_shift != 0)
  28421.                 USE_CYCLES(orig_shift<<CYC_SHIFT);
  28422.  
  28423.         *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
  28424.  
  28425.         FLAG_N = NFLAG_8(res);
  28426.         FLAG_Z = res;
  28427.         FLAG_C = src << (9-orig_shift);
  28428.         FLAG_V = VFLAG_CLEAR;
  28429. }
  28430.  
  28431.  
  28432. void m68k_op_ror_16_s(void)
  28433. {
  28434.         uint* r_dst = &DY;
  28435.         uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
  28436.         uint src = MASK_OUT_ABOVE_16(*r_dst);
  28437.         uint res = ROR_16(src, shift);
  28438.  
  28439.         if(shift != 0)
  28440.                 USE_CYCLES(shift<<CYC_SHIFT);
  28441.  
  28442.         *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
  28443.  
  28444.         FLAG_N = NFLAG_16(res);
  28445.         FLAG_Z = res;
  28446.         FLAG_C = src << (9-shift);
  28447.         FLAG_V = VFLAG_CLEAR;
  28448. }
  28449.  
  28450.  
  28451. void m68k_op_ror_32_s(void)
  28452. {
  28453.         uint* r_dst = &DY;
  28454.         uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
  28455.         uint64 src = *r_dst;
  28456.         uint res = ROR_32(src, shift);
  28457.  
  28458.         if(shift != 0)
  28459.                 USE_CYCLES(shift<<CYC_SHIFT);
  28460.  
  28461.         *r_dst = res;
  28462.  
  28463.         FLAG_N = NFLAG_32(res);
  28464.         FLAG_Z = res;
  28465.         FLAG_C = src << (9-shift);
  28466.         FLAG_V = VFLAG_CLEAR;
  28467. }
  28468.  
  28469.  
  28470. void m68k_op_ror_8_r(void)
  28471. {
  28472.         uint* r_dst = &DY;
  28473.         uint orig_shift = DX & 0x3f;
  28474.         uint shift = orig_shift & 7;
  28475.         uint src = MASK_OUT_ABOVE_8(*r_dst);
  28476.         uint res = ROR_8(src, shift);
  28477.  
  28478.         if(orig_shift != 0)
  28479.         {
  28480.                 USE_CYCLES(orig_shift<<CYC_SHIFT);
  28481.  
  28482.                 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
  28483.                 FLAG_C = src << (8-((shift-1)&7));
  28484.                 FLAG_N = NFLAG_8(res);
  28485.                 FLAG_Z = res;
  28486.                 FLAG_V = VFLAG_CLEAR;
  28487.                 return;
  28488.         }
  28489.  
  28490.         FLAG_C = CFLAG_CLEAR;
  28491.         FLAG_N = NFLAG_8(src);
  28492.         FLAG_Z = src;
  28493.         FLAG_V = VFLAG_CLEAR;
  28494. }
  28495.  
  28496.  
  28497. void m68k_op_ror_16_r(void)
  28498. {
  28499.         uint* r_dst = &DY;
  28500.         uint orig_shift = DX & 0x3f;
  28501.         uint shift = orig_shift & 15;
  28502.         uint src = MASK_OUT_ABOVE_16(*r_dst);
  28503.         uint res = ROR_16(src, shift);
  28504.  
  28505.         if(orig_shift != 0)
  28506.         {
  28507.                 USE_CYCLES(orig_shift<<CYC_SHIFT);
  28508.  
  28509.                 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
  28510.                 FLAG_C = (src >> ((shift - 1) & 15)) << 8;
  28511.                 FLAG_N = NFLAG_16(res);
  28512.                 FLAG_Z = res;
  28513.                 FLAG_V = VFLAG_CLEAR;
  28514.                 return;
  28515.         }
  28516.  
  28517.         FLAG_C = CFLAG_CLEAR;
  28518.         FLAG_N = NFLAG_16(src);
  28519.         FLAG_Z = src;
  28520.         FLAG_V = VFLAG_CLEAR;
  28521. }
  28522.  
  28523.  
  28524. void m68k_op_ror_32_r(void)
  28525. {
  28526.         uint* r_dst = &DY;
  28527.         uint orig_shift = DX & 0x3f;
  28528.         uint shift = orig_shift & 31;
  28529.         uint64 src = *r_dst;
  28530.         uint res = ROR_32(src, shift);
  28531.  
  28532.         if(orig_shift != 0)
  28533.         {
  28534.                 USE_CYCLES(orig_shift<<CYC_SHIFT);
  28535.  
  28536.                 *r_dst = res;
  28537.                 FLAG_C = (src >> ((shift - 1) & 31)) << 8;
  28538.                 FLAG_N = NFLAG_32(res);
  28539.                 FLAG_Z = res;
  28540.                 FLAG_V = VFLAG_CLEAR;
  28541.                 return;
  28542.         }
  28543.  
  28544.         FLAG_C = CFLAG_CLEAR;
  28545.         FLAG_N = NFLAG_32(src);
  28546.         FLAG_Z = src;
  28547.         FLAG_V = VFLAG_CLEAR;
  28548. }
  28549.  
  28550.  
  28551. void m68k_op_ror_16_ai(void)
  28552. {
  28553.         uint ea = EA_AY_AI_16();
  28554.         uint src = m68ki_read_16(ea);
  28555.         uint res = ROR_16(src, 1);
  28556.  
  28557.         m68ki_write_16(ea, res);
  28558.  
  28559.         FLAG_N = NFLAG_16(res);
  28560.         FLAG_Z = res;
  28561.         FLAG_C = src << 8;
  28562.         FLAG_V = VFLAG_CLEAR;
  28563. }
  28564.  
  28565.  
  28566. void m68k_op_ror_16_pi(void)
  28567. {
  28568.         uint ea = EA_AY_PI_16();
  28569.         uint src = m68ki_read_16(ea);
  28570.         uint res = ROR_16(src, 1);
  28571.  
  28572.         m68ki_write_16(ea, res);
  28573.  
  28574.         FLAG_N = NFLAG_16(res);
  28575.         FLAG_Z = res;
  28576.         FLAG_C = src << 8;
  28577.         FLAG_V = VFLAG_CLEAR;
  28578. }
  28579.  
  28580.  
  28581. void m68k_op_ror_16_pd(void)
  28582. {
  28583.         uint ea = EA_AY_PD_16();
  28584.         uint src = m68ki_read_16(ea);
  28585.         uint res = ROR_16(src, 1);
  28586.  
  28587.         m68ki_write_16(ea, res);
  28588.  
  28589.         FLAG_N = NFLAG_16(res);
  28590.         FLAG_Z = res;
  28591.         FLAG_C = src << 8;
  28592.         FLAG_V = VFLAG_CLEAR;
  28593. }
  28594.  
  28595.  
  28596. void m68k_op_ror_16_di(void)
  28597. {
  28598.         uint ea = EA_AY_DI_16();
  28599.         uint src = m68ki_read_16(ea);
  28600.         uint res = ROR_16(src, 1);
  28601.  
  28602.         m68ki_write_16(ea, res);
  28603.  
  28604.         FLAG_N = NFLAG_16(res);
  28605.         FLAG_Z = res;
  28606.         FLAG_C = src << 8;
  28607.         FLAG_V = VFLAG_CLEAR;
  28608. }
  28609.  
  28610.  
  28611. void m68k_op_ror_16_ix(void)
  28612. {
  28613.         uint ea = EA_AY_IX_16();
  28614.         uint src = m68ki_read_16(ea);
  28615.         uint res = ROR_16(src, 1);
  28616.  
  28617.         m68ki_write_16(ea, res);
  28618.  
  28619.         FLAG_N = NFLAG_16(res);
  28620.         FLAG_Z = res;
  28621.         FLAG_C = src << 8;
  28622.         FLAG_V = VFLAG_CLEAR;
  28623. }
  28624.  
  28625.  
  28626. void m68k_op_ror_16_aw(void)
  28627. {
  28628.         uint ea = EA_AW_16();
  28629.         uint src = m68ki_read_16(ea);
  28630.         uint res = ROR_16(src, 1);
  28631.  
  28632.         m68ki_write_16(ea, res);
  28633.  
  28634.         FLAG_N = NFLAG_16(res);
  28635.         FLAG_Z = res;
  28636.         FLAG_C = src << 8;
  28637.         FLAG_V = VFLAG_CLEAR;
  28638. }
  28639.  
  28640.  
  28641. void m68k_op_ror_16_al(void)
  28642. {
  28643.         uint ea = EA_AL_16();
  28644.         uint src = m68ki_read_16(ea);
  28645.         uint res = ROR_16(src, 1);
  28646.  
  28647.         m68ki_write_16(ea, res);
  28648.  
  28649.         FLAG_N = NFLAG_16(res);
  28650.         FLAG_Z = res;
  28651.         FLAG_C = src << 8;
  28652.         FLAG_V = VFLAG_CLEAR;
  28653. }
  28654.  
  28655.  
  28656. void m68k_op_rol_8_s(void)
  28657. {
  28658.         uint* r_dst = &DY;
  28659.         uint orig_shift = (((REG_IR >> 9) - 1) & 7) + 1;
  28660.         uint shift = orig_shift & 7;
  28661.         uint src = MASK_OUT_ABOVE_8(*r_dst);
  28662.         uint res = ROL_8(src, shift);
  28663.  
  28664.         if(orig_shift != 0)
  28665.                 USE_CYCLES(orig_shift<<CYC_SHIFT);
  28666.  
  28667.         *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
  28668.  
  28669.         FLAG_N = NFLAG_8(res);
  28670.         FLAG_Z = res;
  28671.         FLAG_C = src << orig_shift;
  28672.         FLAG_V = VFLAG_CLEAR;
  28673. }
  28674.  
  28675.  
  28676. void m68k_op_rol_16_s(void)
  28677. {
  28678.         uint* r_dst = &DY;
  28679.         uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
  28680.         uint src = MASK_OUT_ABOVE_16(*r_dst);
  28681.         uint res = ROL_16(src, shift);
  28682.  
  28683.         if(shift != 0)
  28684.                 USE_CYCLES(shift<<CYC_SHIFT);
  28685.  
  28686.         *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
  28687.  
  28688.         FLAG_N = NFLAG_16(res);
  28689.         FLAG_Z = res;
  28690.         FLAG_C = src >> (8-shift);
  28691.         FLAG_V = VFLAG_CLEAR;
  28692. }
  28693.  
  28694.  
  28695. void m68k_op_rol_32_s(void)
  28696. {
  28697.         uint* r_dst = &DY;
  28698.         uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
  28699.         uint64 src = *r_dst;
  28700.         uint res = ROL_32(src, shift);
  28701.  
  28702.         if(shift != 0)
  28703.                 USE_CYCLES(shift<<CYC_SHIFT);
  28704.  
  28705.         *r_dst = res;
  28706.  
  28707.         FLAG_N = NFLAG_32(res);
  28708.         FLAG_Z = res;
  28709.         FLAG_C = src >> (24-shift);
  28710.         FLAG_V = VFLAG_CLEAR;
  28711. }
  28712.  
  28713.  
  28714. void m68k_op_rol_8_r(void)
  28715. {
  28716.         uint* r_dst = &DY;
  28717.         uint orig_shift = DX & 0x3f;
  28718.         uint shift = orig_shift & 7;
  28719.         uint src = MASK_OUT_ABOVE_8(*r_dst);
  28720.         uint res = ROL_8(src, shift);
  28721.  
  28722.         if(orig_shift != 0)
  28723.         {
  28724.                 USE_CYCLES(orig_shift<<CYC_SHIFT);
  28725.  
  28726.                 if(shift != 0)
  28727.                 {
  28728.                         *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
  28729.                         FLAG_C = src << shift;
  28730.                         FLAG_N = NFLAG_8(res);
  28731.                         FLAG_Z = res;
  28732.                         FLAG_V = VFLAG_CLEAR;
  28733.                         return;
  28734.                 }
  28735.                 FLAG_C = (src & 1)<<8;
  28736.                 FLAG_N = NFLAG_8(src);
  28737.                 FLAG_Z = src;
  28738.                 FLAG_V = VFLAG_CLEAR;
  28739.                 return;
  28740.         }
  28741.  
  28742.         FLAG_C = CFLAG_CLEAR;
  28743.         FLAG_N = NFLAG_8(src);
  28744.         FLAG_Z = src;
  28745.         FLAG_V = VFLAG_CLEAR;
  28746. }
  28747.  
  28748.  
  28749. void m68k_op_rol_16_r(void)
  28750. {
  28751.         uint* r_dst = &DY;
  28752.         uint orig_shift = DX & 0x3f;
  28753.         uint shift = orig_shift & 15;
  28754.         uint src = MASK_OUT_ABOVE_16(*r_dst);
  28755.         uint res = MASK_OUT_ABOVE_16(ROL_16(src, shift));
  28756.  
  28757.         if(orig_shift != 0)
  28758.         {
  28759.                 USE_CYCLES(orig_shift<<CYC_SHIFT);
  28760.  
  28761.                 if(shift != 0)
  28762.                 {
  28763.                         *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
  28764.                         FLAG_C = (src << shift) >> 8;
  28765.                         FLAG_N = NFLAG_16(res);
  28766.                         FLAG_Z = res;
  28767.                         FLAG_V = VFLAG_CLEAR;
  28768.                         return;
  28769.                 }
  28770.                 FLAG_C = (src & 1)<<8;
  28771.                 FLAG_N = NFLAG_16(src);
  28772.                 FLAG_Z = src;
  28773.                 FLAG_V = VFLAG_CLEAR;
  28774.                 return;
  28775.         }
  28776.  
  28777.         FLAG_C = CFLAG_CLEAR;
  28778.         FLAG_N = NFLAG_16(src);
  28779.         FLAG_Z = src;
  28780.         FLAG_V = VFLAG_CLEAR;
  28781. }
  28782.  
  28783.  
  28784. void m68k_op_rol_32_r(void)
  28785. {
  28786.         uint* r_dst = &DY;
  28787.         uint orig_shift = DX & 0x3f;
  28788.         uint shift = orig_shift & 31;
  28789.         uint64 src = *r_dst;
  28790.         uint res = ROL_32(src, shift);
  28791.  
  28792.         if(orig_shift != 0)
  28793.         {
  28794.                 USE_CYCLES(orig_shift<<CYC_SHIFT);
  28795.  
  28796.                 *r_dst = res;
  28797.  
  28798.                 FLAG_C = (src >> ((32 - shift) & 0x1f)) << 8;
  28799.                 FLAG_N = NFLAG_32(res);
  28800.                 FLAG_Z = res;
  28801.                 FLAG_V = VFLAG_CLEAR;
  28802.                 return;
  28803.         }
  28804.  
  28805.         FLAG_C = CFLAG_CLEAR;
  28806.         FLAG_N = NFLAG_32(src);
  28807.         FLAG_Z = src;
  28808.         FLAG_V = VFLAG_CLEAR;
  28809. }
  28810.  
  28811.  
  28812. void m68k_op_rol_16_ai(void)
  28813. {
  28814.         uint ea = EA_AY_AI_16();
  28815.         uint src = m68ki_read_16(ea);
  28816.         uint res = MASK_OUT_ABOVE_16(ROL_16(src, 1));
  28817.  
  28818.         m68ki_write_16(ea, res);
  28819.  
  28820.         FLAG_N = NFLAG_16(res);
  28821.         FLAG_Z = res;
  28822.         FLAG_C = src >> 7;
  28823.         FLAG_V = VFLAG_CLEAR;
  28824. }
  28825.  
  28826.  
  28827. void m68k_op_rol_16_pi(void)
  28828. {
  28829.         uint ea = EA_AY_PI_16();
  28830.         uint src = m68ki_read_16(ea);
  28831.         uint res = MASK_OUT_ABOVE_16(ROL_16(src, 1));
  28832.  
  28833.         m68ki_write_16(ea, res);
  28834.  
  28835.         FLAG_N = NFLAG_16(res);
  28836.         FLAG_Z = res;
  28837.         FLAG_C = src >> 7;
  28838.         FLAG_V = VFLAG_CLEAR;
  28839. }
  28840.  
  28841.  
  28842. void m68k_op_rol_16_pd(void)
  28843. {
  28844.         uint ea = EA_AY_PD_16();
  28845.         uint src = m68ki_read_16(ea);
  28846.         uint res = MASK_OUT_ABOVE_16(ROL_16(src, 1));
  28847.  
  28848.         m68ki_write_16(ea, res);
  28849.  
  28850.         FLAG_N = NFLAG_16(res);
  28851.         FLAG_Z = res;
  28852.         FLAG_C = src >> 7;
  28853.         FLAG_V = VFLAG_CLEAR;
  28854. }
  28855.  
  28856.  
  28857. void m68k_op_rol_16_di(void)
  28858. {
  28859.         uint ea = EA_AY_DI_16();
  28860.         uint src = m68ki_read_16(ea);
  28861.         uint res = MASK_OUT_ABOVE_16(ROL_16(src, 1));
  28862.  
  28863.         m68ki_write_16(ea, res);
  28864.  
  28865.         FLAG_N = NFLAG_16(res);
  28866.         FLAG_Z = res;
  28867.         FLAG_C = src >> 7;
  28868.         FLAG_V = VFLAG_CLEAR;
  28869. }
  28870.  
  28871.  
  28872. void m68k_op_rol_16_ix(void)
  28873. {
  28874.         uint ea = EA_AY_IX_16();
  28875.         uint src = m68ki_read_16(ea);
  28876.         uint res = MASK_OUT_ABOVE_16(ROL_16(src, 1));
  28877.  
  28878.         m68ki_write_16(ea, res);
  28879.  
  28880.         FLAG_N = NFLAG_16(res);
  28881.         FLAG_Z = res;
  28882.         FLAG_C = src >> 7;
  28883.         FLAG_V = VFLAG_CLEAR;
  28884. }
  28885.  
  28886.  
  28887. void m68k_op_rol_16_aw(void)
  28888. {
  28889.         uint ea = EA_AW_16();
  28890.         uint src = m68ki_read_16(ea);
  28891.         uint res = MASK_OUT_ABOVE_16(ROL_16(src, 1));
  28892.  
  28893.         m68ki_write_16(ea, res);
  28894.  
  28895.         FLAG_N = NFLAG_16(res);
  28896.         FLAG_Z = res;
  28897.         FLAG_C = src >> 7;
  28898.         FLAG_V = VFLAG_CLEAR;
  28899. }
  28900.  
  28901.  
  28902. void m68k_op_rol_16_al(void)
  28903. {
  28904.         uint ea = EA_AL_16();
  28905.         uint src = m68ki_read_16(ea);
  28906.         uint res = MASK_OUT_ABOVE_16(ROL_16(src, 1));
  28907.  
  28908.         m68ki_write_16(ea, res);
  28909.  
  28910.         FLAG_N = NFLAG_16(res);
  28911.         FLAG_Z = res;
  28912.         FLAG_C = src >> 7;
  28913.         FLAG_V = VFLAG_CLEAR;
  28914. }
  28915.  
  28916.  
  28917. void m68k_op_roxr_8_s(void)
  28918. {
  28919.         uint* r_dst = &DY;
  28920.         uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
  28921.         uint src = MASK_OUT_ABOVE_8(*r_dst);
  28922.         uint res = ROR_9(src | (XFLAG_AS_1() << 8), shift);
  28923.  
  28924.         if(shift != 0)
  28925.                 USE_CYCLES(shift<<CYC_SHIFT);
  28926.  
  28927.         FLAG_C = FLAG_X = res;
  28928.         res = MASK_OUT_ABOVE_8(res);
  28929.  
  28930.         *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
  28931.  
  28932.         FLAG_N = NFLAG_8(res);
  28933.         FLAG_Z = res;
  28934.         FLAG_V = VFLAG_CLEAR;
  28935. }
  28936.  
  28937.  
  28938. void m68k_op_roxr_16_s(void)
  28939. {
  28940.         uint* r_dst = &DY;
  28941.         uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
  28942.         uint src = MASK_OUT_ABOVE_16(*r_dst);
  28943.         uint res = ROR_17(src | (XFLAG_AS_1() << 16), shift);
  28944.  
  28945.         if(shift != 0)
  28946.                 USE_CYCLES(shift<<CYC_SHIFT);
  28947.  
  28948.         FLAG_C = FLAG_X = res >> 8;
  28949.         res = MASK_OUT_ABOVE_16(res);
  28950.  
  28951.         *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
  28952.  
  28953.         FLAG_N = NFLAG_16(res);
  28954.         FLAG_Z = res;
  28955.         FLAG_V = VFLAG_CLEAR;
  28956. }
  28957.  
  28958.  
  28959. void m68k_op_roxr_32_s(void)
  28960. {
  28961. #if M68K_USE_64_BIT
  28962.  
  28963.         uint*  r_dst = &DY;
  28964.         uint   shift = (((REG_IR >> 9) - 1) & 7) + 1;
  28965.         uint64 src   = *r_dst;
  28966.         uint64 res   = src | (((uint64)XFLAG_AS_1()) << 32);
  28967.  
  28968.         if(shift != 0)
  28969.                 USE_CYCLES(shift<<CYC_SHIFT);
  28970.  
  28971.         res = ROR_33_64(res, shift);
  28972.  
  28973.         FLAG_C = FLAG_X = res >> 24;
  28974.         res = MASK_OUT_ABOVE_32(res);
  28975.  
  28976.         *r_dst =  res;
  28977.  
  28978.         FLAG_N = NFLAG_32(res);
  28979.         FLAG_Z = res;
  28980.         FLAG_V = VFLAG_CLEAR;
  28981.  
  28982. #else
  28983.  
  28984.         uint* r_dst = &DY;
  28985.         uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
  28986.         uint src = *r_dst;
  28987.         uint res = MASK_OUT_ABOVE_32((ROR_33(src, shift) & ~(1 << (32 - shift))) | (XFLAG_AS_1() << (32 - shift)));
  28988.         uint new_x_flag = src & (1 << (shift - 1));
  28989.  
  28990.         if(shift != 0)
  28991.                 USE_CYCLES(shift<<CYC_SHIFT);
  28992.  
  28993.         *r_dst = res;
  28994.  
  28995.         FLAG_C = FLAG_X = (new_x_flag != 0)<<8;
  28996.         FLAG_N = NFLAG_32(res);
  28997.         FLAG_Z = res;
  28998.         FLAG_V = VFLAG_CLEAR;
  28999.  
  29000. #endif
  29001. }
  29002.  
  29003.  
  29004. void m68k_op_roxr_8_r(void)
  29005. {
  29006.         uint* r_dst = &DY;
  29007.         uint orig_shift = DX & 0x3f;
  29008.  
  29009.         if(orig_shift != 0)
  29010.         {
  29011.                 uint shift = orig_shift % 9;
  29012.                 uint src   = MASK_OUT_ABOVE_8(*r_dst);
  29013.                 uint res   = ROR_9(src | (XFLAG_AS_1() << 8), shift);
  29014.  
  29015.                 USE_CYCLES(orig_shift<<CYC_SHIFT);
  29016.  
  29017.                 FLAG_C = FLAG_X = res;
  29018.                 res = MASK_OUT_ABOVE_8(res);
  29019.  
  29020.                 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
  29021.                 FLAG_N = NFLAG_8(res);
  29022.                 FLAG_Z = res;
  29023.                 FLAG_V = VFLAG_CLEAR;
  29024.                 return;
  29025.         }
  29026.  
  29027.         FLAG_C = FLAG_X;
  29028.         FLAG_N = NFLAG_8(*r_dst);
  29029.         FLAG_Z = MASK_OUT_ABOVE_8(*r_dst);
  29030.         FLAG_V = VFLAG_CLEAR;
  29031. }
  29032.  
  29033.  
  29034. void m68k_op_roxr_16_r(void)
  29035. {
  29036.         uint* r_dst = &DY;
  29037.         uint orig_shift = DX & 0x3f;
  29038.  
  29039.         if(orig_shift != 0)
  29040.         {
  29041.                 uint shift = orig_shift % 17;
  29042.                 uint src   = MASK_OUT_ABOVE_16(*r_dst);
  29043.                 uint res   = ROR_17(src | (XFLAG_AS_1() << 16), shift);
  29044.  
  29045.                 USE_CYCLES(orig_shift<<CYC_SHIFT);
  29046.  
  29047.                 FLAG_C = FLAG_X = res >> 8;
  29048.                 res = MASK_OUT_ABOVE_16(res);
  29049.  
  29050.                 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
  29051.                 FLAG_N = NFLAG_16(res);
  29052.                 FLAG_Z = res;
  29053.                 FLAG_V = VFLAG_CLEAR;
  29054.                 return;
  29055.         }
  29056.  
  29057.         FLAG_C = FLAG_X;
  29058.         FLAG_N = NFLAG_16(*r_dst);
  29059.         FLAG_Z = MASK_OUT_ABOVE_16(*r_dst);
  29060.         FLAG_V = VFLAG_CLEAR;
  29061. }
  29062.  
  29063.  
  29064. void m68k_op_roxr_32_r(void)
  29065. {
  29066. #if M68K_USE_64_BIT
  29067.  
  29068.         uint*  r_dst = &DY;
  29069.         uint   orig_shift = DX & 0x3f;
  29070.  
  29071.         if(orig_shift != 0)
  29072.         {
  29073.                 uint   shift = orig_shift % 33;
  29074.                 uint64 src   = *r_dst;
  29075.                 uint64 res   = src | (((uint64)XFLAG_AS_1()) << 32);
  29076.  
  29077.                 res = ROR_33_64(res, shift);
  29078.  
  29079.                 USE_CYCLES(orig_shift<<CYC_SHIFT);
  29080.  
  29081.                 FLAG_C = FLAG_X = res >> 24;
  29082.                 res = MASK_OUT_ABOVE_32(res);
  29083.  
  29084.                 *r_dst = res;
  29085.                 FLAG_N = NFLAG_32(res);
  29086.                 FLAG_Z = res;
  29087.                 FLAG_V = VFLAG_CLEAR;
  29088.                 return;
  29089.         }
  29090.  
  29091.         FLAG_C = FLAG_X;
  29092.         FLAG_N = NFLAG_32(*r_dst);
  29093.         FLAG_Z = *r_dst;
  29094.         FLAG_V = VFLAG_CLEAR;
  29095.  
  29096. #else
  29097.  
  29098.         uint* r_dst = &DY;
  29099.         uint orig_shift = DX & 0x3f;
  29100.         uint shift = orig_shift % 33;
  29101.         uint src = *r_dst;
  29102.         uint res = MASK_OUT_ABOVE_32((ROR_33(src, shift) & ~(1 << (32 - shift))) | (XFLAG_AS_1() << (32 - shift)));
  29103.         uint new_x_flag = src & (1 << (shift - 1));
  29104.  
  29105.         if(orig_shift != 0)
  29106.                 USE_CYCLES(orig_shift<<CYC_SHIFT);
  29107.  
  29108.         if(shift != 0)
  29109.         {
  29110.                 *r_dst = res;
  29111.                 FLAG_X = (new_x_flag != 0)<<8;
  29112.         }
  29113.         else
  29114.                 res = src;
  29115.         FLAG_C = FLAG_X;
  29116.         FLAG_N = NFLAG_32(res);
  29117.         FLAG_Z = res;
  29118.         FLAG_V = VFLAG_CLEAR;
  29119.  
  29120. #endif
  29121. }
  29122.  
  29123.  
  29124. void m68k_op_roxr_16_ai(void)
  29125. {
  29126.         uint ea = EA_AY_AI_16();
  29127.         uint src = m68ki_read_16(ea);
  29128.         uint res = ROR_17(src | (XFLAG_AS_1() << 16), 1);
  29129.  
  29130.         FLAG_C = FLAG_X = res >> 8;
  29131.         res = MASK_OUT_ABOVE_16(res);
  29132.  
  29133.         m68ki_write_16(ea, res);
  29134.  
  29135.         FLAG_N = NFLAG_16(res);
  29136.         FLAG_Z = res;
  29137.         FLAG_V = VFLAG_CLEAR;
  29138. }
  29139.  
  29140.  
  29141. void m68k_op_roxr_16_pi(void)
  29142. {
  29143.         uint ea = EA_AY_PI_16();
  29144.         uint src = m68ki_read_16(ea);
  29145.         uint res = ROR_17(src | (XFLAG_AS_1() << 16), 1);
  29146.  
  29147.         FLAG_C = FLAG_X = res >> 8;
  29148.         res = MASK_OUT_ABOVE_16(res);
  29149.  
  29150.         m68ki_write_16(ea, res);
  29151.  
  29152.         FLAG_N = NFLAG_16(res);
  29153.         FLAG_Z = res;
  29154.         FLAG_V = VFLAG_CLEAR;
  29155. }
  29156.  
  29157.  
  29158. void m68k_op_roxr_16_pd(void)
  29159. {
  29160.         uint ea = EA_AY_PD_16();
  29161.         uint src = m68ki_read_16(ea);
  29162.         uint res = ROR_17(src | (XFLAG_AS_1() << 16), 1);
  29163.  
  29164.         FLAG_C = FLAG_X = res >> 8;
  29165.         res = MASK_OUT_ABOVE_16(res);
  29166.  
  29167.         m68ki_write_16(ea, res);
  29168.  
  29169.         FLAG_N = NFLAG_16(res);
  29170.         FLAG_Z = res;
  29171.         FLAG_V = VFLAG_CLEAR;
  29172. }
  29173.  
  29174.  
  29175. void m68k_op_roxr_16_di(void)
  29176. {
  29177.         uint ea = EA_AY_DI_16();
  29178.         uint src = m68ki_read_16(ea);
  29179.         uint res = ROR_17(src | (XFLAG_AS_1() << 16), 1);
  29180.  
  29181.         FLAG_C = FLAG_X = res >> 8;
  29182.         res = MASK_OUT_ABOVE_16(res);
  29183.  
  29184.         m68ki_write_16(ea, res);
  29185.  
  29186.         FLAG_N = NFLAG_16(res);
  29187.         FLAG_Z = res;
  29188.         FLAG_V = VFLAG_CLEAR;
  29189. }
  29190.  
  29191.  
  29192. void m68k_op_roxr_16_ix(void)
  29193. {
  29194.         uint ea = EA_AY_IX_16();
  29195.         uint src = m68ki_read_16(ea);
  29196.         uint res = ROR_17(src | (XFLAG_AS_1() << 16), 1);
  29197.  
  29198.         FLAG_C = FLAG_X = res >> 8;
  29199.         res = MASK_OUT_ABOVE_16(res);
  29200.  
  29201.         m68ki_write_16(ea, res);
  29202.  
  29203.         FLAG_N = NFLAG_16(res);
  29204.         FLAG_Z = res;
  29205.         FLAG_V = VFLAG_CLEAR;
  29206. }
  29207.  
  29208.  
  29209. void m68k_op_roxr_16_aw(void)
  29210. {
  29211.         uint ea = EA_AW_16();
  29212.         uint src = m68ki_read_16(ea);
  29213.         uint res = ROR_17(src | (XFLAG_AS_1() << 16), 1);
  29214.  
  29215.         FLAG_C = FLAG_X = res >> 8;
  29216.         res = MASK_OUT_ABOVE_16(res);
  29217.  
  29218.         m68ki_write_16(ea, res);
  29219.  
  29220.         FLAG_N = NFLAG_16(res);
  29221.         FLAG_Z = res;
  29222.         FLAG_V = VFLAG_CLEAR;
  29223. }
  29224.  
  29225.  
  29226. void m68k_op_roxr_16_al(void)
  29227. {
  29228.         uint ea = EA_AL_16();
  29229.         uint src = m68ki_read_16(ea);
  29230.         uint res = ROR_17(src | (XFLAG_AS_1() << 16), 1);
  29231.  
  29232.         FLAG_C = FLAG_X = res >> 8;
  29233.         res = MASK_OUT_ABOVE_16(res);
  29234.  
  29235.         m68ki_write_16(ea, res);
  29236.  
  29237.         FLAG_N = NFLAG_16(res);
  29238.         FLAG_Z = res;
  29239.         FLAG_V = VFLAG_CLEAR;
  29240. }
  29241.  
  29242.  
  29243. void m68k_op_roxl_8_s(void)
  29244. {
  29245.         uint* r_dst = &DY;
  29246.         uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
  29247.         uint src = MASK_OUT_ABOVE_8(*r_dst);
  29248.         uint res = ROL_9(src | (XFLAG_AS_1() << 8), shift);
  29249.  
  29250.         if(shift != 0)
  29251.                 USE_CYCLES(shift<<CYC_SHIFT);
  29252.  
  29253.         FLAG_C = FLAG_X = res;
  29254.         res = MASK_OUT_ABOVE_8(res);
  29255.  
  29256.         *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
  29257.  
  29258.         FLAG_N = NFLAG_8(res);
  29259.         FLAG_Z = res;
  29260.         FLAG_V = VFLAG_CLEAR;
  29261. }
  29262.  
  29263.  
  29264. void m68k_op_roxl_16_s(void)
  29265. {
  29266.         uint* r_dst = &DY;
  29267.         uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
  29268.         uint src = MASK_OUT_ABOVE_16(*r_dst);
  29269.         uint res = ROL_17(src | (XFLAG_AS_1() << 16), shift);
  29270.  
  29271.         if(shift != 0)
  29272.                 USE_CYCLES(shift<<CYC_SHIFT);
  29273.  
  29274.         FLAG_C = FLAG_X = res >> 8;
  29275.         res = MASK_OUT_ABOVE_16(res);
  29276.  
  29277.         *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
  29278.  
  29279.         FLAG_N = NFLAG_16(res);
  29280.         FLAG_Z = res;
  29281.         FLAG_V = VFLAG_CLEAR;
  29282. }
  29283.  
  29284.  
  29285. void m68k_op_roxl_32_s(void)
  29286. {
  29287. #if M68K_USE_64_BIT
  29288.  
  29289.         uint*  r_dst = &DY;
  29290.         uint   shift = (((REG_IR >> 9) - 1) & 7) + 1;
  29291.         uint64 src   = *r_dst;
  29292.         uint64 res   = src | (((uint64)XFLAG_AS_1()) << 32);
  29293.  
  29294.         if(shift != 0)
  29295.                 USE_CYCLES(shift<<CYC_SHIFT);
  29296.  
  29297.         res = ROL_33_64(res, shift);
  29298.  
  29299.         FLAG_C = FLAG_X = res >> 24;
  29300.         res = MASK_OUT_ABOVE_32(res);
  29301.  
  29302.         *r_dst = res;
  29303.  
  29304.         FLAG_N = NFLAG_32(res);
  29305.         FLAG_Z = res;
  29306.         FLAG_V = VFLAG_CLEAR;
  29307.  
  29308. #else
  29309.  
  29310.         uint* r_dst = &DY;
  29311.         uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
  29312.         uint src = *r_dst;
  29313.         uint res = MASK_OUT_ABOVE_32((ROL_33(src, shift) & ~(1 << (shift - 1))) | (XFLAG_AS_1() << (shift - 1)));
  29314.         uint new_x_flag = src & (1 << (32 - shift));
  29315.  
  29316.         if(shift != 0)
  29317.                 USE_CYCLES(shift<<CYC_SHIFT);
  29318.  
  29319.         *r_dst = res;
  29320.  
  29321.         FLAG_C = FLAG_X = (new_x_flag != 0)<<8;
  29322.         FLAG_N = NFLAG_32(res);
  29323.         FLAG_Z = res;
  29324.         FLAG_V = VFLAG_CLEAR;
  29325.  
  29326. #endif
  29327. }
  29328.  
  29329.  
  29330. void m68k_op_roxl_8_r(void)
  29331. {
  29332.         uint* r_dst = &DY;
  29333.         uint orig_shift = DX & 0x3f;
  29334.  
  29335.  
  29336.         if(orig_shift != 0)
  29337.         {
  29338.                 uint shift = orig_shift % 9;
  29339.                 uint src   = MASK_OUT_ABOVE_8(*r_dst);
  29340.                 uint res   = ROL_9(src | (XFLAG_AS_1() << 8), shift);
  29341.  
  29342.                 USE_CYCLES(orig_shift<<CYC_SHIFT);
  29343.  
  29344.                 FLAG_C = FLAG_X = res;
  29345.                 res = MASK_OUT_ABOVE_8(res);
  29346.  
  29347.                 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
  29348.                 FLAG_N = NFLAG_8(res);
  29349.                 FLAG_Z = res;
  29350.                 FLAG_V = VFLAG_CLEAR;
  29351.                 return;
  29352.         }
  29353.  
  29354.         FLAG_C = FLAG_X;
  29355.         FLAG_N = NFLAG_8(*r_dst);
  29356.         FLAG_Z = MASK_OUT_ABOVE_8(*r_dst);
  29357.         FLAG_V = VFLAG_CLEAR;
  29358. }
  29359.  
  29360.  
  29361. void m68k_op_roxl_16_r(void)
  29362. {
  29363.         uint* r_dst = &DY;
  29364.         uint orig_shift = DX & 0x3f;
  29365.  
  29366.         if(orig_shift != 0)
  29367.         {
  29368.                 uint shift = orig_shift % 17;
  29369.                 uint src   = MASK_OUT_ABOVE_16(*r_dst);
  29370.                 uint res   = ROL_17(src | (XFLAG_AS_1() << 16), shift);
  29371.  
  29372.                 USE_CYCLES(orig_shift<<CYC_SHIFT);
  29373.  
  29374.                 FLAG_C = FLAG_X = res >> 8;
  29375.                 res = MASK_OUT_ABOVE_16(res);
  29376.  
  29377.                 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
  29378.                 FLAG_N = NFLAG_16(res);
  29379.                 FLAG_Z = res;
  29380.                 FLAG_V = VFLAG_CLEAR;
  29381.                 return;
  29382.         }
  29383.  
  29384.         FLAG_C = FLAG_X;
  29385.         FLAG_N = NFLAG_16(*r_dst);
  29386.         FLAG_Z = MASK_OUT_ABOVE_16(*r_dst);
  29387.         FLAG_V = VFLAG_CLEAR;
  29388. }
  29389.  
  29390.  
  29391. void m68k_op_roxl_32_r(void)
  29392. {
  29393. #if M68K_USE_64_BIT
  29394.  
  29395.         uint*  r_dst = &DY;
  29396.         uint   orig_shift = DX & 0x3f;
  29397.  
  29398.         if(orig_shift != 0)
  29399.         {
  29400.                 uint   shift = orig_shift % 33;
  29401.                 uint64 src   = *r_dst;
  29402.                 uint64 res   = src | (((uint64)XFLAG_AS_1()) << 32);
  29403.  
  29404.                 res = ROL_33_64(res, shift);
  29405.  
  29406.                 USE_CYCLES(orig_shift<<CYC_SHIFT);
  29407.  
  29408.                 FLAG_C = FLAG_X = res >> 24;
  29409.                 res = MASK_OUT_ABOVE_32(res);
  29410.  
  29411.                 *r_dst = res;
  29412.                 FLAG_N = NFLAG_32(res);
  29413.                 FLAG_Z = res;
  29414.                 FLAG_V = VFLAG_CLEAR;
  29415.                 return;
  29416.         }
  29417.  
  29418.         FLAG_C = FLAG_X;
  29419.         FLAG_N = NFLAG_32(*r_dst);
  29420.         FLAG_Z = *r_dst;
  29421.         FLAG_V = VFLAG_CLEAR;
  29422.  
  29423. #else
  29424.  
  29425.         uint* r_dst = &DY;
  29426.         uint orig_shift = DX & 0x3f;
  29427.         uint shift = orig_shift % 33;
  29428.         uint src = *r_dst;
  29429.         uint res = MASK_OUT_ABOVE_32((ROL_33(src, shift) & ~(1 << (shift - 1))) | (XFLAG_AS_1() << (shift - 1)));
  29430.         uint new_x_flag = src & (1 << (32 - shift));
  29431.  
  29432.         if(orig_shift != 0)
  29433.                 USE_CYCLES(orig_shift<<CYC_SHIFT);
  29434.  
  29435.         if(shift != 0)
  29436.         {
  29437.                 *r_dst = res;
  29438.                 FLAG_X = (new_x_flag != 0)<<8;
  29439.         }
  29440.         else
  29441.                 res = src;
  29442.         FLAG_C = FLAG_X;
  29443.         FLAG_N = NFLAG_32(res);
  29444.         FLAG_Z = res;
  29445.         FLAG_V = VFLAG_CLEAR;
  29446.  
  29447. #endif
  29448. }
  29449.  
  29450.  
  29451. void m68k_op_roxl_16_ai(void)
  29452. {
  29453.         uint ea = EA_AY_AI_16();
  29454.         uint src = m68ki_read_16(ea);
  29455.         uint res = ROL_17(src | (XFLAG_AS_1() << 16), 1);
  29456.  
  29457.         FLAG_C = FLAG_X = res >> 8;
  29458.         res = MASK_OUT_ABOVE_16(res);
  29459.  
  29460.         m68ki_write_16(ea, res);
  29461.  
  29462.         FLAG_N = NFLAG_16(res);
  29463.         FLAG_Z = res;
  29464.         FLAG_V = VFLAG_CLEAR;
  29465. }
  29466.  
  29467.  
  29468. void m68k_op_roxl_16_pi(void)
  29469. {
  29470.         uint ea = EA_AY_PI_16();
  29471.         uint src = m68ki_read_16(ea);
  29472.         uint res = ROL_17(src | (XFLAG_AS_1() << 16), 1);
  29473.  
  29474.         FLAG_C = FLAG_X = res >> 8;
  29475.         res = MASK_OUT_ABOVE_16(res);
  29476.  
  29477.         m68ki_write_16(ea, res);
  29478.  
  29479.         FLAG_N = NFLAG_16(res);
  29480.         FLAG_Z = res;
  29481.         FLAG_V = VFLAG_CLEAR;
  29482. }
  29483.  
  29484.  
  29485. void m68k_op_roxl_16_pd(void)
  29486. {
  29487.         uint ea = EA_AY_PD_16();
  29488.         uint src = m68ki_read_16(ea);
  29489.         uint res = ROL_17(src | (XFLAG_AS_1() << 16), 1);
  29490.  
  29491.         FLAG_C = FLAG_X = res >> 8;
  29492.         res = MASK_OUT_ABOVE_16(res);
  29493.  
  29494.         m68ki_write_16(ea, res);
  29495.  
  29496.         FLAG_N = NFLAG_16(res);
  29497.         FLAG_Z = res;
  29498.         FLAG_V = VFLAG_CLEAR;
  29499. }
  29500.  
  29501.  
  29502. void m68k_op_roxl_16_di(void)
  29503. {
  29504.         uint ea = EA_AY_DI_16();
  29505.         uint src = m68ki_read_16(ea);
  29506.         uint res = ROL_17(src | (XFLAG_AS_1() << 16), 1);
  29507.  
  29508.         FLAG_C = FLAG_X = res >> 8;
  29509.         res = MASK_OUT_ABOVE_16(res);
  29510.  
  29511.         m68ki_write_16(ea, res);
  29512.  
  29513.         FLAG_N = NFLAG_16(res);
  29514.         FLAG_Z = res;
  29515.         FLAG_V = VFLAG_CLEAR;
  29516. }
  29517.  
  29518.  
  29519. void m68k_op_roxl_16_ix(void)
  29520. {
  29521.         uint ea = EA_AY_IX_16();
  29522.         uint src = m68ki_read_16(ea);
  29523.         uint res = ROL_17(src | (XFLAG_AS_1() << 16), 1);
  29524.  
  29525.         FLAG_C = FLAG_X = res >> 8;
  29526.         res = MASK_OUT_ABOVE_16(res);
  29527.  
  29528.         m68ki_write_16(ea, res);
  29529.  
  29530.         FLAG_N = NFLAG_16(res);
  29531.         FLAG_Z = res;
  29532.         FLAG_V = VFLAG_CLEAR;
  29533. }
  29534.  
  29535.  
  29536. void m68k_op_roxl_16_aw(void)
  29537. {
  29538.         uint ea = EA_AW_16();
  29539.         uint src = m68ki_read_16(ea);
  29540.         uint res = ROL_17(src | (XFLAG_AS_1() << 16), 1);
  29541.  
  29542.         FLAG_C = FLAG_X = res >> 8;
  29543.         res = MASK_OUT_ABOVE_16(res);
  29544.  
  29545.         m68ki_write_16(ea, res);
  29546.  
  29547.         FLAG_N = NFLAG_16(res);
  29548.         FLAG_Z = res;
  29549.         FLAG_V = VFLAG_CLEAR;
  29550. }
  29551.  
  29552.  
  29553. void m68k_op_roxl_16_al(void)
  29554. {
  29555.         uint ea = EA_AL_16();
  29556.         uint src = m68ki_read_16(ea);
  29557.         uint res = ROL_17(src | (XFLAG_AS_1() << 16), 1);
  29558.  
  29559.         FLAG_C = FLAG_X = res >> 8;
  29560.         res = MASK_OUT_ABOVE_16(res);
  29561.  
  29562.         m68ki_write_16(ea, res);
  29563.  
  29564.         FLAG_N = NFLAG_16(res);
  29565.         FLAG_Z = res;
  29566.         FLAG_V = VFLAG_CLEAR;
  29567. }
  29568.  
  29569.  
  29570. void m68k_op_rtd_32(void)
  29571. {
  29572.         if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
  29573.         {
  29574.                 uint new_pc = m68ki_pull_32();
  29575.  
  29576.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  29577.                 REG_A[7] = MASK_OUT_ABOVE_32(REG_A[7] + MAKE_INT_16(OPER_I_16()));
  29578.                 m68ki_jump(new_pc);
  29579.                 return;
  29580.         }
  29581.         m68ki_exception_illegal();
  29582. }
  29583.  
  29584.  
  29585. void m68k_op_rte_32(void)
  29586. {
  29587.         if(FLAG_S)
  29588.         {
  29589.                 uint new_sr;
  29590.                 uint new_pc;
  29591.                 uint format_word;
  29592.  
  29593.                 m68ki_rte_callback();              /* auto-disable (see m68kcpu.h) */
  29594.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  29595.  
  29596.                 if(CPU_TYPE_IS_000(CPU_TYPE))
  29597.                 {
  29598.                         new_sr = m68ki_pull_16();
  29599.                         new_pc = m68ki_pull_32();
  29600.                         m68ki_jump(new_pc);
  29601.                         m68ki_set_sr(new_sr);
  29602.  
  29603.                         CPU_INSTR_MODE = INSTRUCTION_YES;
  29604.                         CPU_RUN_MODE = RUN_MODE_NORMAL;
  29605.  
  29606.                         return;
  29607.                 }
  29608.  
  29609.                 if(CPU_TYPE_IS_010(CPU_TYPE))
  29610.                 {
  29611.                         format_word = m68ki_read_16(REG_A[7]+6) >> 12;
  29612.                         if(format_word == 0)
  29613.                         {
  29614.                                 new_sr = m68ki_pull_16();
  29615.                                 new_pc = m68ki_pull_32();
  29616.                                 m68ki_fake_pull_16();   /* format word */
  29617.                                 m68ki_jump(new_pc);
  29618.                                 m68ki_set_sr(new_sr);
  29619.                                 CPU_INSTR_MODE = INSTRUCTION_YES;
  29620.                                 CPU_RUN_MODE = RUN_MODE_NORMAL;
  29621.                                 return;
  29622.                         }
  29623.                         CPU_INSTR_MODE = INSTRUCTION_YES;
  29624.                         CPU_RUN_MODE = RUN_MODE_NORMAL;
  29625.                         /* Not handling bus fault (9) */
  29626.                         m68ki_exception_format_error();
  29627.                         return;
  29628.                 }
  29629.  
  29630.                 /* Otherwise it's 020 */
  29631. rte_loop:
  29632.                 format_word = m68ki_read_16(REG_A[7]+6) >> 12;
  29633.                 switch(format_word)
  29634.                 {
  29635.                         case 0: /* Normal */
  29636.                                 new_sr = m68ki_pull_16();
  29637.                                 new_pc = m68ki_pull_32();
  29638.                                 m68ki_fake_pull_16();   /* format word */
  29639.                                 m68ki_jump(new_pc);
  29640.                                 m68ki_set_sr(new_sr);
  29641.                                 CPU_INSTR_MODE = INSTRUCTION_YES;
  29642.                                 CPU_RUN_MODE = RUN_MODE_NORMAL;
  29643.                                 return;
  29644.                         case 1: /* Throwaway */
  29645.                                 new_sr = m68ki_pull_16();
  29646.                                 m68ki_fake_pull_32();   /* program counter */
  29647.                                 m68ki_fake_pull_16();   /* format word */
  29648.                                 m68ki_set_sr_noint(new_sr);
  29649.                                 goto rte_loop;
  29650.                         case 2: /* Trap */
  29651.                                 new_sr = m68ki_pull_16();
  29652.                                 new_pc = m68ki_pull_32();
  29653.                                 m68ki_fake_pull_16();   /* format word */
  29654.                                 m68ki_fake_pull_32();   /* address */
  29655.                                 m68ki_jump(new_pc);
  29656.                                 m68ki_set_sr(new_sr);
  29657.                                 CPU_INSTR_MODE = INSTRUCTION_YES;
  29658.                                 CPU_RUN_MODE = RUN_MODE_NORMAL;
  29659.                                 return;
  29660.                 }
  29661.                 /* Not handling long or short bus fault */
  29662.                 CPU_INSTR_MODE = INSTRUCTION_YES;
  29663.                 CPU_RUN_MODE = RUN_MODE_NORMAL;
  29664.                 m68ki_exception_format_error();
  29665.                 return;
  29666.         }
  29667.         m68ki_exception_privilege_violation();
  29668. }
  29669.  
  29670.  
  29671. void m68k_op_rtm_32(void)
  29672. {
  29673.         if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
  29674.         {
  29675.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  29676.                 M68K_DO_LOG((M68K_LOG_FILEHANDLE "%s at %08x: called unimplemented instruction %04x (%s)\n",
  29677.                                          m68ki_cpu_names[CPU_TYPE], ADDRESS_68K(REG_PC - 2), REG_IR,
  29678.                                          m68k_disassemble_quick(ADDRESS_68K(REG_PC - 2))));
  29679.                 return;
  29680.         }
  29681.         m68ki_exception_illegal();
  29682. }
  29683.  
  29684.  
  29685. void m68k_op_rtr_32(void)
  29686. {
  29687.         m68ki_trace_t0();                                  /* auto-disable (see m68kcpu.h) */
  29688.         m68ki_set_ccr(m68ki_pull_16());
  29689.         m68ki_jump(m68ki_pull_32());
  29690. }
  29691.  
  29692.  
  29693. void m68k_op_rts_32(void)
  29694. {
  29695.         m68ki_trace_t0();                                  /* auto-disable (see m68kcpu.h) */
  29696.         m68ki_jump(m68ki_pull_32());
  29697. }
  29698.  
  29699.  
  29700. void m68k_op_sbcd_8_rr(void)
  29701. {
  29702.         uint* r_dst = &DX;
  29703.         uint src = DY;
  29704.         uint dst = *r_dst;
  29705.         uint res = LOW_NIBBLE(dst) - LOW_NIBBLE(src) - XFLAG_AS_1();
  29706.  
  29707. //  FLAG_V = ~res; /* Undefined V behavior */
  29708.         FLAG_V = VFLAG_CLEAR;   /* Undefined in Motorola's M68000PM/AD rev.1 and safer to assume cleared. */
  29709.  
  29710.         if(res > 9)
  29711.                 res -= 6;
  29712.         res += HIGH_NIBBLE(dst) - HIGH_NIBBLE(src);
  29713.         if(res > 0x99)
  29714.         {
  29715.                 res += 0xa0;
  29716.                 FLAG_X = FLAG_C = CFLAG_SET;
  29717.                 FLAG_N = NFLAG_SET;     /* Undefined in Motorola's M68000PM/AD rev.1 and safer to follow carry. */
  29718.         }
  29719.         else
  29720.                 FLAG_N = FLAG_X = FLAG_C = 0;
  29721.  
  29722.         res = MASK_OUT_ABOVE_8(res);
  29723.  
  29724. //  FLAG_V &= res; /* Undefined V behavior part II */
  29725. //  FLAG_N = NFLAG_8(res); /* Undefined N behavior */
  29726.         FLAG_Z |= res;
  29727.  
  29728.         *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
  29729. }
  29730.  
  29731.  
  29732. void m68k_op_sbcd_8_mm_ax7(void)
  29733. {
  29734.         uint src = OPER_AY_PD_8();
  29735.         uint ea  = EA_A7_PD_8();
  29736.         uint dst = m68ki_read_8(ea);
  29737.         uint res = LOW_NIBBLE(dst) - LOW_NIBBLE(src) - XFLAG_AS_1();
  29738.  
  29739. //  FLAG_V = ~res; /* Undefined V behavior */
  29740.         FLAG_V = VFLAG_CLEAR;   /* Undefined in Motorola's M68000PM/AD rev.1 and safer to return zero. */
  29741.  
  29742.         if(res > 9)
  29743.                 res -= 6;
  29744.         res += HIGH_NIBBLE(dst) - HIGH_NIBBLE(src);
  29745.         if(res > 0x99)
  29746.         {
  29747.                 res += 0xa0;
  29748.                 FLAG_X = FLAG_C = CFLAG_SET;
  29749.                 FLAG_N = NFLAG_SET;     /* Undefined in Motorola's M68000PM/AD rev.1 and safer to follow carry. */
  29750.         }
  29751.         else
  29752.                 FLAG_N = FLAG_X = FLAG_C = 0;
  29753.  
  29754.         res = MASK_OUT_ABOVE_8(res);
  29755.  
  29756. //  FLAG_V &= res; /* Undefined V behavior part II */
  29757. //  FLAG_N = NFLAG_8(res); /* Undefined N behavior */
  29758.         FLAG_Z |= res;
  29759.  
  29760.         m68ki_write_8(ea, res);
  29761. }
  29762.  
  29763.  
  29764. void m68k_op_sbcd_8_mm_ay7(void)
  29765. {
  29766.         uint src = OPER_A7_PD_8();
  29767.         uint ea  = EA_AX_PD_8();
  29768.         uint dst = m68ki_read_8(ea);
  29769.         uint res = LOW_NIBBLE(dst) - LOW_NIBBLE(src) - XFLAG_AS_1();
  29770.  
  29771. //  FLAG_V = ~res; /* Undefined V behavior */
  29772.         FLAG_V = VFLAG_CLEAR;   /* Undefined in Motorola's M68000PM/AD rev.1 and safer to return zero. */
  29773.  
  29774.         if(res > 9)
  29775.                 res -= 6;
  29776.         res += HIGH_NIBBLE(dst) - HIGH_NIBBLE(src);
  29777.         if(res > 0x99)
  29778.         {
  29779.                 res += 0xa0;
  29780.                 FLAG_X = FLAG_C = CFLAG_SET;
  29781.                 FLAG_N = NFLAG_SET;     /* Undefined in Motorola's M68000PM/AD rev.1 and safer to follow carry. */
  29782.         }
  29783.         else
  29784.                 FLAG_N = FLAG_X = FLAG_C = 0;
  29785.  
  29786.         res = MASK_OUT_ABOVE_8(res);
  29787.  
  29788. //  FLAG_V &= res; /* Undefined V behavior part II */
  29789. //  FLAG_N = NFLAG_8(res); /* Undefined N behavior */
  29790.         FLAG_Z |= res;
  29791.  
  29792.         m68ki_write_8(ea, res);
  29793. }
  29794.  
  29795.  
  29796. void m68k_op_sbcd_8_mm_axy7(void)
  29797. {
  29798.         uint src = OPER_A7_PD_8();
  29799.         uint ea  = EA_A7_PD_8();
  29800.         uint dst = m68ki_read_8(ea);
  29801.         uint res = LOW_NIBBLE(dst) - LOW_NIBBLE(src) - XFLAG_AS_1();
  29802.  
  29803. //  FLAG_V = ~res; /* Undefined V behavior */
  29804.         FLAG_V = VFLAG_CLEAR;   /* Undefined in Motorola's M68000PM/AD rev.1 and safer to return zero. */
  29805.  
  29806.         if(res > 9)
  29807.                 res -= 6;
  29808.         res += HIGH_NIBBLE(dst) - HIGH_NIBBLE(src);
  29809.         if(res > 0x99)
  29810.         {
  29811.                 res += 0xa0;
  29812.                 FLAG_X = FLAG_C = CFLAG_SET;
  29813.                 FLAG_N = NFLAG_SET;     /* Undefined in Motorola's M68000PM/AD rev.1 and safer to follow carry. */
  29814.         }
  29815.         else
  29816.                 FLAG_N = FLAG_X = FLAG_C = 0;
  29817.  
  29818.         res = MASK_OUT_ABOVE_8(res);
  29819.  
  29820. //  FLAG_V &= res; /* Undefined V behavior part II */
  29821. //  FLAG_N = NFLAG_8(res); /* Undefined N behavior */
  29822.         FLAG_Z |= res;
  29823.  
  29824.         m68ki_write_8(ea, res);
  29825. }
  29826.  
  29827.  
  29828. void m68k_op_sbcd_8_mm(void)
  29829. {
  29830.         uint src = OPER_AY_PD_8();
  29831.         uint ea  = EA_AX_PD_8();
  29832.         uint dst = m68ki_read_8(ea);
  29833.         uint res = LOW_NIBBLE(dst) - LOW_NIBBLE(src) - XFLAG_AS_1();
  29834.  
  29835. //  FLAG_V = ~res; /* Undefined V behavior */
  29836.         FLAG_V = VFLAG_CLEAR;   /* Undefined in Motorola's M68000PM/AD rev.1 and safer to return zero. */
  29837.  
  29838.         if(res > 9)
  29839.                 res -= 6;
  29840.         res += HIGH_NIBBLE(dst) - HIGH_NIBBLE(src);
  29841.         if(res > 0x99)
  29842.         {
  29843.                 res += 0xa0;
  29844.                 FLAG_X = FLAG_C = CFLAG_SET;
  29845.                 FLAG_N = NFLAG_SET;     /* Undefined in Motorola's M68000PM/AD rev.1 and safer to follow carry. */
  29846.         }
  29847.         else
  29848.                 FLAG_N = FLAG_X = FLAG_C = 0;
  29849.  
  29850.         res = MASK_OUT_ABOVE_8(res);
  29851.  
  29852. //  FLAG_V &= res; /* Undefined V behavior part II */
  29853. //  FLAG_N = NFLAG_8(res); /* Undefined N behavior */
  29854.         FLAG_Z |= res;
  29855.  
  29856.         m68ki_write_8(ea, res);
  29857. }
  29858.  
  29859.  
  29860. void m68k_op_st_8_d(void)
  29861. {
  29862.         DY |= 0xff;
  29863. }
  29864.  
  29865.  
  29866. void m68k_op_st_8_ai(void)
  29867. {
  29868.         m68ki_write_8(EA_AY_AI_8(), 0xff);
  29869. }
  29870.  
  29871.  
  29872. void m68k_op_st_8_pi(void)
  29873. {
  29874.         m68ki_write_8(EA_AY_PI_8(), 0xff);
  29875. }
  29876.  
  29877.  
  29878. void m68k_op_st_8_pi7(void)
  29879. {
  29880.         m68ki_write_8(EA_A7_PI_8(), 0xff);
  29881. }
  29882.  
  29883.  
  29884. void m68k_op_st_8_pd(void)
  29885. {
  29886.         m68ki_write_8(EA_AY_PD_8(), 0xff);
  29887. }
  29888.  
  29889.  
  29890. void m68k_op_st_8_pd7(void)
  29891. {
  29892.         m68ki_write_8(EA_A7_PD_8(), 0xff);
  29893. }
  29894.  
  29895.  
  29896. void m68k_op_st_8_di(void)
  29897. {
  29898.         m68ki_write_8(EA_AY_DI_8(), 0xff);
  29899. }
  29900.  
  29901.  
  29902. void m68k_op_st_8_ix(void)
  29903. {
  29904.         m68ki_write_8(EA_AY_IX_8(), 0xff);
  29905. }
  29906.  
  29907.  
  29908. void m68k_op_st_8_aw(void)
  29909. {
  29910.         m68ki_write_8(EA_AW_8(), 0xff);
  29911. }
  29912.  
  29913.  
  29914. void m68k_op_st_8_al(void)
  29915. {
  29916.         m68ki_write_8(EA_AL_8(), 0xff);
  29917. }
  29918.  
  29919.  
  29920. void m68k_op_sf_8_d(void)
  29921. {
  29922.         DY &= 0xffffff00;
  29923. }
  29924.  
  29925.  
  29926. void m68k_op_sf_8_ai(void)
  29927. {
  29928.         m68ki_write_8(EA_AY_AI_8(), 0);
  29929. }
  29930.  
  29931.  
  29932. void m68k_op_sf_8_pi(void)
  29933. {
  29934.         m68ki_write_8(EA_AY_PI_8(), 0);
  29935. }
  29936.  
  29937.  
  29938. void m68k_op_sf_8_pi7(void)
  29939. {
  29940.         m68ki_write_8(EA_A7_PI_8(), 0);
  29941. }
  29942.  
  29943.  
  29944. void m68k_op_sf_8_pd(void)
  29945. {
  29946.         m68ki_write_8(EA_AY_PD_8(), 0);
  29947. }
  29948.  
  29949.  
  29950. void m68k_op_sf_8_pd7(void)
  29951. {
  29952.         m68ki_write_8(EA_A7_PD_8(), 0);
  29953. }
  29954.  
  29955.  
  29956. void m68k_op_sf_8_di(void)
  29957. {
  29958.         m68ki_write_8(EA_AY_DI_8(), 0);
  29959. }
  29960.  
  29961.  
  29962. void m68k_op_sf_8_ix(void)
  29963. {
  29964.         m68ki_write_8(EA_AY_IX_8(), 0);
  29965. }
  29966.  
  29967.  
  29968. void m68k_op_sf_8_aw(void)
  29969. {
  29970.         m68ki_write_8(EA_AW_8(), 0);
  29971. }
  29972.  
  29973.  
  29974. void m68k_op_sf_8_al(void)
  29975. {
  29976.         m68ki_write_8(EA_AL_8(), 0);
  29977. }
  29978.  
  29979.  
  29980. void m68k_op_shi_8_d(void)
  29981. {
  29982.         if(COND_HI())
  29983.         {
  29984.                 DY |= 0xff;
  29985.                 USE_CYCLES(CYC_SCC_R_TRUE);
  29986.                 return;
  29987.         }
  29988.         DY &= 0xffffff00;
  29989. }
  29990.  
  29991.  
  29992. void m68k_op_sls_8_d(void)
  29993. {
  29994.         if(COND_LS())
  29995.         {
  29996.                 DY |= 0xff;
  29997.                 USE_CYCLES(CYC_SCC_R_TRUE);
  29998.                 return;
  29999.         }
  30000.         DY &= 0xffffff00;
  30001. }
  30002.  
  30003.  
  30004. void m68k_op_scc_8_d(void)
  30005. {
  30006.         if(COND_CC())
  30007.         {
  30008.                 DY |= 0xff;
  30009.                 USE_CYCLES(CYC_SCC_R_TRUE);
  30010.                 return;
  30011.         }
  30012.         DY &= 0xffffff00;
  30013. }
  30014.  
  30015.  
  30016. void m68k_op_scs_8_d(void)
  30017. {
  30018.         if(COND_CS())
  30019.         {
  30020.                 DY |= 0xff;
  30021.                 USE_CYCLES(CYC_SCC_R_TRUE);
  30022.                 return;
  30023.         }
  30024.         DY &= 0xffffff00;
  30025. }
  30026.  
  30027.  
  30028. void m68k_op_sne_8_d(void)
  30029. {
  30030.         if(COND_NE())
  30031.         {
  30032.                 DY |= 0xff;
  30033.                 USE_CYCLES(CYC_SCC_R_TRUE);
  30034.                 return;
  30035.         }
  30036.         DY &= 0xffffff00;
  30037. }
  30038.  
  30039.  
  30040. void m68k_op_seq_8_d(void)
  30041. {
  30042.         if(COND_EQ())
  30043.         {
  30044.                 DY |= 0xff;
  30045.                 USE_CYCLES(CYC_SCC_R_TRUE);
  30046.                 return;
  30047.         }
  30048.         DY &= 0xffffff00;
  30049. }
  30050.  
  30051.  
  30052. void m68k_op_svc_8_d(void)
  30053. {
  30054.         if(COND_VC())
  30055.         {
  30056.                 DY |= 0xff;
  30057.                 USE_CYCLES(CYC_SCC_R_TRUE);
  30058.                 return;
  30059.         }
  30060.         DY &= 0xffffff00;
  30061. }
  30062.  
  30063.  
  30064. void m68k_op_svs_8_d(void)
  30065. {
  30066.         if(COND_VS())
  30067.         {
  30068.                 DY |= 0xff;
  30069.                 USE_CYCLES(CYC_SCC_R_TRUE);
  30070.                 return;
  30071.         }
  30072.         DY &= 0xffffff00;
  30073. }
  30074.  
  30075.  
  30076. void m68k_op_spl_8_d(void)
  30077. {
  30078.         if(COND_PL())
  30079.         {
  30080.                 DY |= 0xff;
  30081.                 USE_CYCLES(CYC_SCC_R_TRUE);
  30082.                 return;
  30083.         }
  30084.         DY &= 0xffffff00;
  30085. }
  30086.  
  30087.  
  30088. void m68k_op_smi_8_d(void)
  30089. {
  30090.         if(COND_MI())
  30091.         {
  30092.                 DY |= 0xff;
  30093.                 USE_CYCLES(CYC_SCC_R_TRUE);
  30094.                 return;
  30095.         }
  30096.         DY &= 0xffffff00;
  30097. }
  30098.  
  30099.  
  30100. void m68k_op_sge_8_d(void)
  30101. {
  30102.         if(COND_GE())
  30103.         {
  30104.                 DY |= 0xff;
  30105.                 USE_CYCLES(CYC_SCC_R_TRUE);
  30106.                 return;
  30107.         }
  30108.         DY &= 0xffffff00;
  30109. }
  30110.  
  30111.  
  30112. void m68k_op_slt_8_d(void)
  30113. {
  30114.         if(COND_LT())
  30115.         {
  30116.                 DY |= 0xff;
  30117.                 USE_CYCLES(CYC_SCC_R_TRUE);
  30118.                 return;
  30119.         }
  30120.         DY &= 0xffffff00;
  30121. }
  30122.  
  30123.  
  30124. void m68k_op_sgt_8_d(void)
  30125. {
  30126.         if(COND_GT())
  30127.         {
  30128.                 DY |= 0xff;
  30129.                 USE_CYCLES(CYC_SCC_R_TRUE);
  30130.                 return;
  30131.         }
  30132.         DY &= 0xffffff00;
  30133. }
  30134.  
  30135.  
  30136. void m68k_op_sle_8_d(void)
  30137. {
  30138.         if(COND_LE())
  30139.         {
  30140.                 DY |= 0xff;
  30141.                 USE_CYCLES(CYC_SCC_R_TRUE);
  30142.                 return;
  30143.         }
  30144.         DY &= 0xffffff00;
  30145. }
  30146.  
  30147.  
  30148. void m68k_op_shi_8_ai(void)
  30149. {
  30150.         m68ki_write_8(EA_AY_AI_8(), COND_HI() ? 0xff : 0);
  30151. }
  30152.  
  30153.  
  30154. void m68k_op_shi_8_pi(void)
  30155. {
  30156.         m68ki_write_8(EA_AY_PI_8(), COND_HI() ? 0xff : 0);
  30157. }
  30158.  
  30159.  
  30160. void m68k_op_shi_8_pi7(void)
  30161. {
  30162.         m68ki_write_8(EA_A7_PI_8(), COND_HI() ? 0xff : 0);
  30163. }
  30164.  
  30165.  
  30166. void m68k_op_shi_8_pd(void)
  30167. {
  30168.         m68ki_write_8(EA_AY_PD_8(), COND_HI() ? 0xff : 0);
  30169. }
  30170.  
  30171.  
  30172. void m68k_op_shi_8_pd7(void)
  30173. {
  30174.         m68ki_write_8(EA_A7_PD_8(), COND_HI() ? 0xff : 0);
  30175. }
  30176.  
  30177.  
  30178. void m68k_op_shi_8_di(void)
  30179. {
  30180.         m68ki_write_8(EA_AY_DI_8(), COND_HI() ? 0xff : 0);
  30181. }
  30182.  
  30183.  
  30184. void m68k_op_shi_8_ix(void)
  30185. {
  30186.         m68ki_write_8(EA_AY_IX_8(), COND_HI() ? 0xff : 0);
  30187. }
  30188.  
  30189.  
  30190. void m68k_op_shi_8_aw(void)
  30191. {
  30192.         m68ki_write_8(EA_AW_8(), COND_HI() ? 0xff : 0);
  30193. }
  30194.  
  30195.  
  30196. void m68k_op_shi_8_al(void)
  30197. {
  30198.         m68ki_write_8(EA_AL_8(), COND_HI() ? 0xff : 0);
  30199. }
  30200.  
  30201.  
  30202. void m68k_op_sls_8_ai(void)
  30203. {
  30204.         m68ki_write_8(EA_AY_AI_8(), COND_LS() ? 0xff : 0);
  30205. }
  30206.  
  30207.  
  30208. void m68k_op_sls_8_pi(void)
  30209. {
  30210.         m68ki_write_8(EA_AY_PI_8(), COND_LS() ? 0xff : 0);
  30211. }
  30212.  
  30213.  
  30214. void m68k_op_sls_8_pi7(void)
  30215. {
  30216.         m68ki_write_8(EA_A7_PI_8(), COND_LS() ? 0xff : 0);
  30217. }
  30218.  
  30219.  
  30220. void m68k_op_sls_8_pd(void)
  30221. {
  30222.         m68ki_write_8(EA_AY_PD_8(), COND_LS() ? 0xff : 0);
  30223. }
  30224.  
  30225.  
  30226. void m68k_op_sls_8_pd7(void)
  30227. {
  30228.         m68ki_write_8(EA_A7_PD_8(), COND_LS() ? 0xff : 0);
  30229. }
  30230.  
  30231.  
  30232. void m68k_op_sls_8_di(void)
  30233. {
  30234.         m68ki_write_8(EA_AY_DI_8(), COND_LS() ? 0xff : 0);
  30235. }
  30236.  
  30237.  
  30238. void m68k_op_sls_8_ix(void)
  30239. {
  30240.         m68ki_write_8(EA_AY_IX_8(), COND_LS() ? 0xff : 0);
  30241. }
  30242.  
  30243.  
  30244. void m68k_op_sls_8_aw(void)
  30245. {
  30246.         m68ki_write_8(EA_AW_8(), COND_LS() ? 0xff : 0);
  30247. }
  30248.  
  30249.  
  30250. void m68k_op_sls_8_al(void)
  30251. {
  30252.         m68ki_write_8(EA_AL_8(), COND_LS() ? 0xff : 0);
  30253. }
  30254.  
  30255.  
  30256. void m68k_op_scc_8_ai(void)
  30257. {
  30258.         m68ki_write_8(EA_AY_AI_8(), COND_CC() ? 0xff : 0);
  30259. }
  30260.  
  30261.  
  30262. void m68k_op_scc_8_pi(void)
  30263. {
  30264.         m68ki_write_8(EA_AY_PI_8(), COND_CC() ? 0xff : 0);
  30265. }
  30266.  
  30267.  
  30268. void m68k_op_scc_8_pi7(void)
  30269. {
  30270.         m68ki_write_8(EA_A7_PI_8(), COND_CC() ? 0xff : 0);
  30271. }
  30272.  
  30273.  
  30274. void m68k_op_scc_8_pd(void)
  30275. {
  30276.         m68ki_write_8(EA_AY_PD_8(), COND_CC() ? 0xff : 0);
  30277. }
  30278.  
  30279.  
  30280. void m68k_op_scc_8_pd7(void)
  30281. {
  30282.         m68ki_write_8(EA_A7_PD_8(), COND_CC() ? 0xff : 0);
  30283. }
  30284.  
  30285.  
  30286. void m68k_op_scc_8_di(void)
  30287. {
  30288.         m68ki_write_8(EA_AY_DI_8(), COND_CC() ? 0xff : 0);
  30289. }
  30290.  
  30291.  
  30292. void m68k_op_scc_8_ix(void)
  30293. {
  30294.         m68ki_write_8(EA_AY_IX_8(), COND_CC() ? 0xff : 0);
  30295. }
  30296.  
  30297.  
  30298. void m68k_op_scc_8_aw(void)
  30299. {
  30300.         m68ki_write_8(EA_AW_8(), COND_CC() ? 0xff : 0);
  30301. }
  30302.  
  30303.  
  30304. void m68k_op_scc_8_al(void)
  30305. {
  30306.         m68ki_write_8(EA_AL_8(), COND_CC() ? 0xff : 0);
  30307. }
  30308.  
  30309.  
  30310. void m68k_op_scs_8_ai(void)
  30311. {
  30312.         m68ki_write_8(EA_AY_AI_8(), COND_CS() ? 0xff : 0);
  30313. }
  30314.  
  30315.  
  30316. void m68k_op_scs_8_pi(void)
  30317. {
  30318.         m68ki_write_8(EA_AY_PI_8(), COND_CS() ? 0xff : 0);
  30319. }
  30320.  
  30321.  
  30322. void m68k_op_scs_8_pi7(void)
  30323. {
  30324.         m68ki_write_8(EA_A7_PI_8(), COND_CS() ? 0xff : 0);
  30325. }
  30326.  
  30327.  
  30328. void m68k_op_scs_8_pd(void)
  30329. {
  30330.         m68ki_write_8(EA_AY_PD_8(), COND_CS() ? 0xff : 0);
  30331. }
  30332.  
  30333.  
  30334. void m68k_op_scs_8_pd7(void)
  30335. {
  30336.         m68ki_write_8(EA_A7_PD_8(), COND_CS() ? 0xff : 0);
  30337. }
  30338.  
  30339.  
  30340. void m68k_op_scs_8_di(void)
  30341. {
  30342.         m68ki_write_8(EA_AY_DI_8(), COND_CS() ? 0xff : 0);
  30343. }
  30344.  
  30345.  
  30346. void m68k_op_scs_8_ix(void)
  30347. {
  30348.         m68ki_write_8(EA_AY_IX_8(), COND_CS() ? 0xff : 0);
  30349. }
  30350.  
  30351.  
  30352. void m68k_op_scs_8_aw(void)
  30353. {
  30354.         m68ki_write_8(EA_AW_8(), COND_CS() ? 0xff : 0);
  30355. }
  30356.  
  30357.  
  30358. void m68k_op_scs_8_al(void)
  30359. {
  30360.         m68ki_write_8(EA_AL_8(), COND_CS() ? 0xff : 0);
  30361. }
  30362.  
  30363.  
  30364. void m68k_op_sne_8_ai(void)
  30365. {
  30366.         m68ki_write_8(EA_AY_AI_8(), COND_NE() ? 0xff : 0);
  30367. }
  30368.  
  30369.  
  30370. void m68k_op_sne_8_pi(void)
  30371. {
  30372.         m68ki_write_8(EA_AY_PI_8(), COND_NE() ? 0xff : 0);
  30373. }
  30374.  
  30375.  
  30376. void m68k_op_sne_8_pi7(void)
  30377. {
  30378.         m68ki_write_8(EA_A7_PI_8(), COND_NE() ? 0xff : 0);
  30379. }
  30380.  
  30381.  
  30382. void m68k_op_sne_8_pd(void)
  30383. {
  30384.         m68ki_write_8(EA_AY_PD_8(), COND_NE() ? 0xff : 0);
  30385. }
  30386.  
  30387.  
  30388. void m68k_op_sne_8_pd7(void)
  30389. {
  30390.         m68ki_write_8(EA_A7_PD_8(), COND_NE() ? 0xff : 0);
  30391. }
  30392.  
  30393.  
  30394. void m68k_op_sne_8_di(void)
  30395. {
  30396.         m68ki_write_8(EA_AY_DI_8(), COND_NE() ? 0xff : 0);
  30397. }
  30398.  
  30399.  
  30400. void m68k_op_sne_8_ix(void)
  30401. {
  30402.         m68ki_write_8(EA_AY_IX_8(), COND_NE() ? 0xff : 0);
  30403. }
  30404.  
  30405.  
  30406. void m68k_op_sne_8_aw(void)
  30407. {
  30408.         m68ki_write_8(EA_AW_8(), COND_NE() ? 0xff : 0);
  30409. }
  30410.  
  30411.  
  30412. void m68k_op_sne_8_al(void)
  30413. {
  30414.         m68ki_write_8(EA_AL_8(), COND_NE() ? 0xff : 0);
  30415. }
  30416.  
  30417.  
  30418. void m68k_op_seq_8_ai(void)
  30419. {
  30420.         m68ki_write_8(EA_AY_AI_8(), COND_EQ() ? 0xff : 0);
  30421. }
  30422.  
  30423.  
  30424. void m68k_op_seq_8_pi(void)
  30425. {
  30426.         m68ki_write_8(EA_AY_PI_8(), COND_EQ() ? 0xff : 0);
  30427. }
  30428.  
  30429.  
  30430. void m68k_op_seq_8_pi7(void)
  30431. {
  30432.         m68ki_write_8(EA_A7_PI_8(), COND_EQ() ? 0xff : 0);
  30433. }
  30434.  
  30435.  
  30436. void m68k_op_seq_8_pd(void)
  30437. {
  30438.         m68ki_write_8(EA_AY_PD_8(), COND_EQ() ? 0xff : 0);
  30439. }
  30440.  
  30441.  
  30442. void m68k_op_seq_8_pd7(void)
  30443. {
  30444.         m68ki_write_8(EA_A7_PD_8(), COND_EQ() ? 0xff : 0);
  30445. }
  30446.  
  30447.  
  30448. void m68k_op_seq_8_di(void)
  30449. {
  30450.         m68ki_write_8(EA_AY_DI_8(), COND_EQ() ? 0xff : 0);
  30451. }
  30452.  
  30453.  
  30454. void m68k_op_seq_8_ix(void)
  30455. {
  30456.         m68ki_write_8(EA_AY_IX_8(), COND_EQ() ? 0xff : 0);
  30457. }
  30458.  
  30459.  
  30460. void m68k_op_seq_8_aw(void)
  30461. {
  30462.         m68ki_write_8(EA_AW_8(), COND_EQ() ? 0xff : 0);
  30463. }
  30464.  
  30465.  
  30466. void m68k_op_seq_8_al(void)
  30467. {
  30468.         m68ki_write_8(EA_AL_8(), COND_EQ() ? 0xff : 0);
  30469. }
  30470.  
  30471.  
  30472. void m68k_op_svc_8_ai(void)
  30473. {
  30474.         m68ki_write_8(EA_AY_AI_8(), COND_VC() ? 0xff : 0);
  30475. }
  30476.  
  30477.  
  30478. void m68k_op_svc_8_pi(void)
  30479. {
  30480.         m68ki_write_8(EA_AY_PI_8(), COND_VC() ? 0xff : 0);
  30481. }
  30482.  
  30483.  
  30484. void m68k_op_svc_8_pi7(void)
  30485. {
  30486.         m68ki_write_8(EA_A7_PI_8(), COND_VC() ? 0xff : 0);
  30487. }
  30488.  
  30489.  
  30490. void m68k_op_svc_8_pd(void)
  30491. {
  30492.         m68ki_write_8(EA_AY_PD_8(), COND_VC() ? 0xff : 0);
  30493. }
  30494.  
  30495.  
  30496. void m68k_op_svc_8_pd7(void)
  30497. {
  30498.         m68ki_write_8(EA_A7_PD_8(), COND_VC() ? 0xff : 0);
  30499. }
  30500.  
  30501.  
  30502. void m68k_op_svc_8_di(void)
  30503. {
  30504.         m68ki_write_8(EA_AY_DI_8(), COND_VC() ? 0xff : 0);
  30505. }
  30506.  
  30507.  
  30508. void m68k_op_svc_8_ix(void)
  30509. {
  30510.         m68ki_write_8(EA_AY_IX_8(), COND_VC() ? 0xff : 0);
  30511. }
  30512.  
  30513.  
  30514. void m68k_op_svc_8_aw(void)
  30515. {
  30516.         m68ki_write_8(EA_AW_8(), COND_VC() ? 0xff : 0);
  30517. }
  30518.  
  30519.  
  30520. void m68k_op_svc_8_al(void)
  30521. {
  30522.         m68ki_write_8(EA_AL_8(), COND_VC() ? 0xff : 0);
  30523. }
  30524.  
  30525.  
  30526. void m68k_op_svs_8_ai(void)
  30527. {
  30528.         m68ki_write_8(EA_AY_AI_8(), COND_VS() ? 0xff : 0);
  30529. }
  30530.  
  30531.  
  30532. void m68k_op_svs_8_pi(void)
  30533. {
  30534.         m68ki_write_8(EA_AY_PI_8(), COND_VS() ? 0xff : 0);
  30535. }
  30536.  
  30537.  
  30538. void m68k_op_svs_8_pi7(void)
  30539. {
  30540.         m68ki_write_8(EA_A7_PI_8(), COND_VS() ? 0xff : 0);
  30541. }
  30542.  
  30543.  
  30544. void m68k_op_svs_8_pd(void)
  30545. {
  30546.         m68ki_write_8(EA_AY_PD_8(), COND_VS() ? 0xff : 0);
  30547. }
  30548.  
  30549.  
  30550. void m68k_op_svs_8_pd7(void)
  30551. {
  30552.         m68ki_write_8(EA_A7_PD_8(), COND_VS() ? 0xff : 0);
  30553. }
  30554.  
  30555.  
  30556. void m68k_op_svs_8_di(void)
  30557. {
  30558.         m68ki_write_8(EA_AY_DI_8(), COND_VS() ? 0xff : 0);
  30559. }
  30560.  
  30561.  
  30562. void m68k_op_svs_8_ix(void)
  30563. {
  30564.         m68ki_write_8(EA_AY_IX_8(), COND_VS() ? 0xff : 0);
  30565. }
  30566.  
  30567.  
  30568. void m68k_op_svs_8_aw(void)
  30569. {
  30570.         m68ki_write_8(EA_AW_8(), COND_VS() ? 0xff : 0);
  30571. }
  30572.  
  30573.  
  30574. void m68k_op_svs_8_al(void)
  30575. {
  30576.         m68ki_write_8(EA_AL_8(), COND_VS() ? 0xff : 0);
  30577. }
  30578.  
  30579.  
  30580. void m68k_op_spl_8_ai(void)
  30581. {
  30582.         m68ki_write_8(EA_AY_AI_8(), COND_PL() ? 0xff : 0);
  30583. }
  30584.  
  30585.  
  30586. void m68k_op_spl_8_pi(void)
  30587. {
  30588.         m68ki_write_8(EA_AY_PI_8(), COND_PL() ? 0xff : 0);
  30589. }
  30590.  
  30591.  
  30592. void m68k_op_spl_8_pi7(void)
  30593. {
  30594.         m68ki_write_8(EA_A7_PI_8(), COND_PL() ? 0xff : 0);
  30595. }
  30596.  
  30597.  
  30598. void m68k_op_spl_8_pd(void)
  30599. {
  30600.         m68ki_write_8(EA_AY_PD_8(), COND_PL() ? 0xff : 0);
  30601. }
  30602.  
  30603.  
  30604. void m68k_op_spl_8_pd7(void)
  30605. {
  30606.         m68ki_write_8(EA_A7_PD_8(), COND_PL() ? 0xff : 0);
  30607. }
  30608.  
  30609.  
  30610. void m68k_op_spl_8_di(void)
  30611. {
  30612.         m68ki_write_8(EA_AY_DI_8(), COND_PL() ? 0xff : 0);
  30613. }
  30614.  
  30615.  
  30616. void m68k_op_spl_8_ix(void)
  30617. {
  30618.         m68ki_write_8(EA_AY_IX_8(), COND_PL() ? 0xff : 0);
  30619. }
  30620.  
  30621.  
  30622. void m68k_op_spl_8_aw(void)
  30623. {
  30624.         m68ki_write_8(EA_AW_8(), COND_PL() ? 0xff : 0);
  30625. }
  30626.  
  30627.  
  30628. void m68k_op_spl_8_al(void)
  30629. {
  30630.         m68ki_write_8(EA_AL_8(), COND_PL() ? 0xff : 0);
  30631. }
  30632.  
  30633.  
  30634. void m68k_op_smi_8_ai(void)
  30635. {
  30636.         m68ki_write_8(EA_AY_AI_8(), COND_MI() ? 0xff : 0);
  30637. }
  30638.  
  30639.  
  30640. void m68k_op_smi_8_pi(void)
  30641. {
  30642.         m68ki_write_8(EA_AY_PI_8(), COND_MI() ? 0xff : 0);
  30643. }
  30644.  
  30645.  
  30646. void m68k_op_smi_8_pi7(void)
  30647. {
  30648.         m68ki_write_8(EA_A7_PI_8(), COND_MI() ? 0xff : 0);
  30649. }
  30650.  
  30651.  
  30652. void m68k_op_smi_8_pd(void)
  30653. {
  30654.         m68ki_write_8(EA_AY_PD_8(), COND_MI() ? 0xff : 0);
  30655. }
  30656.  
  30657.  
  30658. void m68k_op_smi_8_pd7(void)
  30659. {
  30660.         m68ki_write_8(EA_A7_PD_8(), COND_MI() ? 0xff : 0);
  30661. }
  30662.  
  30663.  
  30664. void m68k_op_smi_8_di(void)
  30665. {
  30666.         m68ki_write_8(EA_AY_DI_8(), COND_MI() ? 0xff : 0);
  30667. }
  30668.  
  30669.  
  30670. void m68k_op_smi_8_ix(void)
  30671. {
  30672.         m68ki_write_8(EA_AY_IX_8(), COND_MI() ? 0xff : 0);
  30673. }
  30674.  
  30675.  
  30676. void m68k_op_smi_8_aw(void)
  30677. {
  30678.         m68ki_write_8(EA_AW_8(), COND_MI() ? 0xff : 0);
  30679. }
  30680.  
  30681.  
  30682. void m68k_op_smi_8_al(void)
  30683. {
  30684.         m68ki_write_8(EA_AL_8(), COND_MI() ? 0xff : 0);
  30685. }
  30686.  
  30687.  
  30688. void m68k_op_sge_8_ai(void)
  30689. {
  30690.         m68ki_write_8(EA_AY_AI_8(), COND_GE() ? 0xff : 0);
  30691. }
  30692.  
  30693.  
  30694. void m68k_op_sge_8_pi(void)
  30695. {
  30696.         m68ki_write_8(EA_AY_PI_8(), COND_GE() ? 0xff : 0);
  30697. }
  30698.  
  30699.  
  30700. void m68k_op_sge_8_pi7(void)
  30701. {
  30702.         m68ki_write_8(EA_A7_PI_8(), COND_GE() ? 0xff : 0);
  30703. }
  30704.  
  30705.  
  30706. void m68k_op_sge_8_pd(void)
  30707. {
  30708.         m68ki_write_8(EA_AY_PD_8(), COND_GE() ? 0xff : 0);
  30709. }
  30710.  
  30711.  
  30712. void m68k_op_sge_8_pd7(void)
  30713. {
  30714.         m68ki_write_8(EA_A7_PD_8(), COND_GE() ? 0xff : 0);
  30715. }
  30716.  
  30717.  
  30718. void m68k_op_sge_8_di(void)
  30719. {
  30720.         m68ki_write_8(EA_AY_DI_8(), COND_GE() ? 0xff : 0);
  30721. }
  30722.  
  30723.  
  30724. void m68k_op_sge_8_ix(void)
  30725. {
  30726.         m68ki_write_8(EA_AY_IX_8(), COND_GE() ? 0xff : 0);
  30727. }
  30728.  
  30729.  
  30730. void m68k_op_sge_8_aw(void)
  30731. {
  30732.         m68ki_write_8(EA_AW_8(), COND_GE() ? 0xff : 0);
  30733. }
  30734.  
  30735.  
  30736. void m68k_op_sge_8_al(void)
  30737. {
  30738.         m68ki_write_8(EA_AL_8(), COND_GE() ? 0xff : 0);
  30739. }
  30740.  
  30741.  
  30742. void m68k_op_slt_8_ai(void)
  30743. {
  30744.         m68ki_write_8(EA_AY_AI_8(), COND_LT() ? 0xff : 0);
  30745. }
  30746.  
  30747.  
  30748. void m68k_op_slt_8_pi(void)
  30749. {
  30750.         m68ki_write_8(EA_AY_PI_8(), COND_LT() ? 0xff : 0);
  30751. }
  30752.  
  30753.  
  30754. void m68k_op_slt_8_pi7(void)
  30755. {
  30756.         m68ki_write_8(EA_A7_PI_8(), COND_LT() ? 0xff : 0);
  30757. }
  30758.  
  30759.  
  30760. void m68k_op_slt_8_pd(void)
  30761. {
  30762.         m68ki_write_8(EA_AY_PD_8(), COND_LT() ? 0xff : 0);
  30763. }
  30764.  
  30765.  
  30766. void m68k_op_slt_8_pd7(void)
  30767. {
  30768.         m68ki_write_8(EA_A7_PD_8(), COND_LT() ? 0xff : 0);
  30769. }
  30770.  
  30771.  
  30772. void m68k_op_slt_8_di(void)
  30773. {
  30774.         m68ki_write_8(EA_AY_DI_8(), COND_LT() ? 0xff : 0);
  30775. }
  30776.  
  30777.  
  30778. void m68k_op_slt_8_ix(void)
  30779. {
  30780.         m68ki_write_8(EA_AY_IX_8(), COND_LT() ? 0xff : 0);
  30781. }
  30782.  
  30783.  
  30784. void m68k_op_slt_8_aw(void)
  30785. {
  30786.         m68ki_write_8(EA_AW_8(), COND_LT() ? 0xff : 0);
  30787. }
  30788.  
  30789.  
  30790. void m68k_op_slt_8_al(void)
  30791. {
  30792.         m68ki_write_8(EA_AL_8(), COND_LT() ? 0xff : 0);
  30793. }
  30794.  
  30795.  
  30796. void m68k_op_sgt_8_ai(void)
  30797. {
  30798.         m68ki_write_8(EA_AY_AI_8(), COND_GT() ? 0xff : 0);
  30799. }
  30800.  
  30801.  
  30802. void m68k_op_sgt_8_pi(void)
  30803. {
  30804.         m68ki_write_8(EA_AY_PI_8(), COND_GT() ? 0xff : 0);
  30805. }
  30806.  
  30807.  
  30808. void m68k_op_sgt_8_pi7(void)
  30809. {
  30810.         m68ki_write_8(EA_A7_PI_8(), COND_GT() ? 0xff : 0);
  30811. }
  30812.  
  30813.  
  30814. void m68k_op_sgt_8_pd(void)
  30815. {
  30816.         m68ki_write_8(EA_AY_PD_8(), COND_GT() ? 0xff : 0);
  30817. }
  30818.  
  30819.  
  30820. void m68k_op_sgt_8_pd7(void)
  30821. {
  30822.         m68ki_write_8(EA_A7_PD_8(), COND_GT() ? 0xff : 0);
  30823. }
  30824.  
  30825.  
  30826. void m68k_op_sgt_8_di(void)
  30827. {
  30828.         m68ki_write_8(EA_AY_DI_8(), COND_GT() ? 0xff : 0);
  30829. }
  30830.  
  30831.  
  30832. void m68k_op_sgt_8_ix(void)
  30833. {
  30834.         m68ki_write_8(EA_AY_IX_8(), COND_GT() ? 0xff : 0);
  30835. }
  30836.  
  30837.  
  30838. void m68k_op_sgt_8_aw(void)
  30839. {
  30840.         m68ki_write_8(EA_AW_8(), COND_GT() ? 0xff : 0);
  30841. }
  30842.  
  30843.  
  30844. void m68k_op_sgt_8_al(void)
  30845. {
  30846.         m68ki_write_8(EA_AL_8(), COND_GT() ? 0xff : 0);
  30847. }
  30848.  
  30849.  
  30850. void m68k_op_sle_8_ai(void)
  30851. {
  30852.         m68ki_write_8(EA_AY_AI_8(), COND_LE() ? 0xff : 0);
  30853. }
  30854.  
  30855.  
  30856. void m68k_op_sle_8_pi(void)
  30857. {
  30858.         m68ki_write_8(EA_AY_PI_8(), COND_LE() ? 0xff : 0);
  30859. }
  30860.  
  30861.  
  30862. void m68k_op_sle_8_pi7(void)
  30863. {
  30864.         m68ki_write_8(EA_A7_PI_8(), COND_LE() ? 0xff : 0);
  30865. }
  30866.  
  30867.  
  30868. void m68k_op_sle_8_pd(void)
  30869. {
  30870.         m68ki_write_8(EA_AY_PD_8(), COND_LE() ? 0xff : 0);
  30871. }
  30872.  
  30873.  
  30874. void m68k_op_sle_8_pd7(void)
  30875. {
  30876.         m68ki_write_8(EA_A7_PD_8(), COND_LE() ? 0xff : 0);
  30877. }
  30878.  
  30879.  
  30880. void m68k_op_sle_8_di(void)
  30881. {
  30882.         m68ki_write_8(EA_AY_DI_8(), COND_LE() ? 0xff : 0);
  30883. }
  30884.  
  30885.  
  30886. void m68k_op_sle_8_ix(void)
  30887. {
  30888.         m68ki_write_8(EA_AY_IX_8(), COND_LE() ? 0xff : 0);
  30889. }
  30890.  
  30891.  
  30892. void m68k_op_sle_8_aw(void)
  30893. {
  30894.         m68ki_write_8(EA_AW_8(), COND_LE() ? 0xff : 0);
  30895. }
  30896.  
  30897.  
  30898. void m68k_op_sle_8_al(void)
  30899. {
  30900.         m68ki_write_8(EA_AL_8(), COND_LE() ? 0xff : 0);
  30901. }
  30902.  
  30903.  
  30904. void m68k_op_stop(void)
  30905. {
  30906.         if(FLAG_S)
  30907.         {
  30908.                 uint new_sr = OPER_I_16();
  30909.                 m68ki_trace_t0();                          /* auto-disable (see m68kcpu.h) */
  30910.                 CPU_STOPPED |= STOP_LEVEL_STOP;
  30911.                 m68ki_set_sr(new_sr);
  30912.                 m68ki_remaining_cycles = 0;
  30913.                 return;
  30914.         }
  30915.         m68ki_exception_privilege_violation();
  30916. }
  30917.  
  30918.  
  30919. void m68k_op_sub_8_er_d(void)
  30920. {
  30921.         uint* r_dst = &DX;
  30922.         uint src = MASK_OUT_ABOVE_8(DY);
  30923.         uint dst = MASK_OUT_ABOVE_8(*r_dst);
  30924.         uint res = dst - src;
  30925.  
  30926.         FLAG_N = NFLAG_8(res);
  30927.         FLAG_X = FLAG_C = CFLAG_8(res);
  30928.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  30929.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  30930.  
  30931.         *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
  30932. }
  30933.  
  30934.  
  30935. void m68k_op_sub_8_er_ai(void)
  30936. {
  30937.         uint* r_dst = &DX;
  30938.         uint src = OPER_AY_AI_8();
  30939.         uint dst = MASK_OUT_ABOVE_8(*r_dst);
  30940.         uint res = dst - src;
  30941.  
  30942.         FLAG_N = NFLAG_8(res);
  30943.         FLAG_X = FLAG_C = CFLAG_8(res);
  30944.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  30945.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  30946.  
  30947.         *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
  30948. }
  30949.  
  30950.  
  30951. void m68k_op_sub_8_er_pi(void)
  30952. {
  30953.         uint* r_dst = &DX;
  30954.         uint src = OPER_AY_PI_8();
  30955.         uint dst = MASK_OUT_ABOVE_8(*r_dst);
  30956.         uint res = dst - src;
  30957.  
  30958.         FLAG_N = NFLAG_8(res);
  30959.         FLAG_X = FLAG_C = CFLAG_8(res);
  30960.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  30961.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  30962.  
  30963.         *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
  30964. }
  30965.  
  30966.  
  30967. void m68k_op_sub_8_er_pi7(void)
  30968. {
  30969.         uint* r_dst = &DX;
  30970.         uint src = OPER_A7_PI_8();
  30971.         uint dst = MASK_OUT_ABOVE_8(*r_dst);
  30972.         uint res = dst - src;
  30973.  
  30974.         FLAG_N = NFLAG_8(res);
  30975.         FLAG_X = FLAG_C = CFLAG_8(res);
  30976.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  30977.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  30978.  
  30979.         *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
  30980. }
  30981.  
  30982.  
  30983. void m68k_op_sub_8_er_pd(void)
  30984. {
  30985.         uint* r_dst = &DX;
  30986.         uint src = OPER_AY_PD_8();
  30987.         uint dst = MASK_OUT_ABOVE_8(*r_dst);
  30988.         uint res = dst - src;
  30989.  
  30990.         FLAG_N = NFLAG_8(res);
  30991.         FLAG_X = FLAG_C = CFLAG_8(res);
  30992.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  30993.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  30994.  
  30995.         *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
  30996. }
  30997.  
  30998.  
  30999. void m68k_op_sub_8_er_pd7(void)
  31000. {
  31001.         uint* r_dst = &DX;
  31002.         uint src = OPER_A7_PD_8();
  31003.         uint dst = MASK_OUT_ABOVE_8(*r_dst);
  31004.         uint res = dst - src;
  31005.  
  31006.         FLAG_N = NFLAG_8(res);
  31007.         FLAG_X = FLAG_C = CFLAG_8(res);
  31008.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  31009.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  31010.  
  31011.         *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
  31012. }
  31013.  
  31014.  
  31015. void m68k_op_sub_8_er_di(void)
  31016. {
  31017.         uint* r_dst = &DX;
  31018.         uint src = OPER_AY_DI_8();
  31019.         uint dst = MASK_OUT_ABOVE_8(*r_dst);
  31020.         uint res = dst - src;
  31021.  
  31022.         FLAG_N = NFLAG_8(res);
  31023.         FLAG_X = FLAG_C = CFLAG_8(res);
  31024.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  31025.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  31026.  
  31027.         *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
  31028. }
  31029.  
  31030.  
  31031. void m68k_op_sub_8_er_ix(void)
  31032. {
  31033.         uint* r_dst = &DX;
  31034.         uint src = OPER_AY_IX_8();
  31035.         uint dst = MASK_OUT_ABOVE_8(*r_dst);
  31036.         uint res = dst - src;
  31037.  
  31038.         FLAG_N = NFLAG_8(res);
  31039.         FLAG_X = FLAG_C = CFLAG_8(res);
  31040.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  31041.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  31042.  
  31043.         *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
  31044. }
  31045.  
  31046.  
  31047. void m68k_op_sub_8_er_aw(void)
  31048. {
  31049.         uint* r_dst = &DX;
  31050.         uint src = OPER_AW_8();
  31051.         uint dst = MASK_OUT_ABOVE_8(*r_dst);
  31052.         uint res = dst - src;
  31053.  
  31054.         FLAG_N = NFLAG_8(res);
  31055.         FLAG_X = FLAG_C = CFLAG_8(res);
  31056.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  31057.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  31058.  
  31059.         *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
  31060. }
  31061.  
  31062.  
  31063. void m68k_op_sub_8_er_al(void)
  31064. {
  31065.         uint* r_dst = &DX;
  31066.         uint src = OPER_AL_8();
  31067.         uint dst = MASK_OUT_ABOVE_8(*r_dst);
  31068.         uint res = dst - src;
  31069.  
  31070.         FLAG_N = NFLAG_8(res);
  31071.         FLAG_X = FLAG_C = CFLAG_8(res);
  31072.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  31073.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  31074.  
  31075.         *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
  31076. }
  31077.  
  31078.  
  31079. void m68k_op_sub_8_er_pcdi(void)
  31080. {
  31081.         uint* r_dst = &DX;
  31082.         uint src = OPER_PCDI_8();
  31083.         uint dst = MASK_OUT_ABOVE_8(*r_dst);
  31084.         uint res = dst - src;
  31085.  
  31086.         FLAG_N = NFLAG_8(res);
  31087.         FLAG_X = FLAG_C = CFLAG_8(res);
  31088.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  31089.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  31090.  
  31091.         *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
  31092. }
  31093.  
  31094.  
  31095. void m68k_op_sub_8_er_pcix(void)
  31096. {
  31097.         uint* r_dst = &DX;
  31098.         uint src = OPER_PCIX_8();
  31099.         uint dst = MASK_OUT_ABOVE_8(*r_dst);
  31100.         uint res = dst - src;
  31101.  
  31102.         FLAG_N = NFLAG_8(res);
  31103.         FLAG_X = FLAG_C = CFLAG_8(res);
  31104.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  31105.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  31106.  
  31107.         *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
  31108. }
  31109.  
  31110.  
  31111. void m68k_op_sub_8_er_i(void)
  31112. {
  31113.         uint* r_dst = &DX;
  31114.         uint src = OPER_I_8();
  31115.         uint dst = MASK_OUT_ABOVE_8(*r_dst);
  31116.         uint res = dst - src;
  31117.  
  31118.         FLAG_N = NFLAG_8(res);
  31119.         FLAG_X = FLAG_C = CFLAG_8(res);
  31120.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  31121.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  31122.  
  31123.         *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
  31124. }
  31125.  
  31126.  
  31127. void m68k_op_sub_16_er_d(void)
  31128. {
  31129.         uint* r_dst = &DX;
  31130.         uint src = MASK_OUT_ABOVE_16(DY);
  31131.         uint dst = MASK_OUT_ABOVE_16(*r_dst);
  31132.         uint res = dst - src;
  31133.  
  31134.         FLAG_N = NFLAG_16(res);
  31135.         FLAG_X = FLAG_C = CFLAG_16(res);
  31136.         FLAG_V = VFLAG_SUB_16(src, dst, res);
  31137.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  31138.  
  31139.         *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
  31140. }
  31141.  
  31142.  
  31143. void m68k_op_sub_16_er_a(void)
  31144. {
  31145.         uint* r_dst = &DX;
  31146.         uint src = MASK_OUT_ABOVE_16(AY);
  31147.         uint dst = MASK_OUT_ABOVE_16(*r_dst);
  31148.         uint res = dst - src;
  31149.  
  31150.         FLAG_N = NFLAG_16(res);
  31151.         FLAG_X = FLAG_C = CFLAG_16(res);
  31152.         FLAG_V = VFLAG_SUB_16(src, dst, res);
  31153.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  31154.  
  31155.         *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
  31156. }
  31157.  
  31158.  
  31159. void m68k_op_sub_16_er_ai(void)
  31160. {
  31161.         uint* r_dst = &DX;
  31162.         uint src = OPER_AY_AI_16();
  31163.         uint dst = MASK_OUT_ABOVE_16(*r_dst);
  31164.         uint res = dst - src;
  31165.  
  31166.         FLAG_N = NFLAG_16(res);
  31167.         FLAG_X = FLAG_C = CFLAG_16(res);
  31168.         FLAG_V = VFLAG_SUB_16(src, dst, res);
  31169.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  31170.  
  31171.         *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
  31172. }
  31173.  
  31174.  
  31175. void m68k_op_sub_16_er_pi(void)
  31176. {
  31177.         uint* r_dst = &DX;
  31178.         uint src = OPER_AY_PI_16();
  31179.         uint dst = MASK_OUT_ABOVE_16(*r_dst);
  31180.         uint res = dst - src;
  31181.  
  31182.         FLAG_N = NFLAG_16(res);
  31183.         FLAG_X = FLAG_C = CFLAG_16(res);
  31184.         FLAG_V = VFLAG_SUB_16(src, dst, res);
  31185.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  31186.  
  31187.         *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
  31188. }
  31189.  
  31190.  
  31191. void m68k_op_sub_16_er_pd(void)
  31192. {
  31193.         uint* r_dst = &DX;
  31194.         uint src = OPER_AY_PD_16();
  31195.         uint dst = MASK_OUT_ABOVE_16(*r_dst);
  31196.         uint res = dst - src;
  31197.  
  31198.         FLAG_N = NFLAG_16(res);
  31199.         FLAG_X = FLAG_C = CFLAG_16(res);
  31200.         FLAG_V = VFLAG_SUB_16(src, dst, res);
  31201.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  31202.  
  31203.         *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
  31204. }
  31205.  
  31206.  
  31207. void m68k_op_sub_16_er_di(void)
  31208. {
  31209.         uint* r_dst = &DX;
  31210.         uint src = OPER_AY_DI_16();
  31211.         uint dst = MASK_OUT_ABOVE_16(*r_dst);
  31212.         uint res = dst - src;
  31213.  
  31214.         FLAG_N = NFLAG_16(res);
  31215.         FLAG_X = FLAG_C = CFLAG_16(res);
  31216.         FLAG_V = VFLAG_SUB_16(src, dst, res);
  31217.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  31218.  
  31219.         *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
  31220. }
  31221.  
  31222.  
  31223. void m68k_op_sub_16_er_ix(void)
  31224. {
  31225.         uint* r_dst = &DX;
  31226.         uint src = OPER_AY_IX_16();
  31227.         uint dst = MASK_OUT_ABOVE_16(*r_dst);
  31228.         uint res = dst - src;
  31229.  
  31230.         FLAG_N = NFLAG_16(res);
  31231.         FLAG_X = FLAG_C = CFLAG_16(res);
  31232.         FLAG_V = VFLAG_SUB_16(src, dst, res);
  31233.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  31234.  
  31235.         *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
  31236. }
  31237.  
  31238.  
  31239. void m68k_op_sub_16_er_aw(void)
  31240. {
  31241.         uint* r_dst = &DX;
  31242.         uint src = OPER_AW_16();
  31243.         uint dst = MASK_OUT_ABOVE_16(*r_dst);
  31244.         uint res = dst - src;
  31245.  
  31246.         FLAG_N = NFLAG_16(res);
  31247.         FLAG_X = FLAG_C = CFLAG_16(res);
  31248.         FLAG_V = VFLAG_SUB_16(src, dst, res);
  31249.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  31250.  
  31251.         *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
  31252. }
  31253.  
  31254.  
  31255. void m68k_op_sub_16_er_al(void)
  31256. {
  31257.         uint* r_dst = &DX;
  31258.         uint src = OPER_AL_16();
  31259.         uint dst = MASK_OUT_ABOVE_16(*r_dst);
  31260.         uint res = dst - src;
  31261.  
  31262.         FLAG_N = NFLAG_16(res);
  31263.         FLAG_X = FLAG_C = CFLAG_16(res);
  31264.         FLAG_V = VFLAG_SUB_16(src, dst, res);
  31265.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  31266.  
  31267.         *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
  31268. }
  31269.  
  31270.  
  31271. void m68k_op_sub_16_er_pcdi(void)
  31272. {
  31273.         uint* r_dst = &DX;
  31274.         uint src = OPER_PCDI_16();
  31275.         uint dst = MASK_OUT_ABOVE_16(*r_dst);
  31276.         uint res = dst - src;
  31277.  
  31278.         FLAG_N = NFLAG_16(res);
  31279.         FLAG_X = FLAG_C = CFLAG_16(res);
  31280.         FLAG_V = VFLAG_SUB_16(src, dst, res);
  31281.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  31282.  
  31283.         *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
  31284. }
  31285.  
  31286.  
  31287. void m68k_op_sub_16_er_pcix(void)
  31288. {
  31289.         uint* r_dst = &DX;
  31290.         uint src = OPER_PCIX_16();
  31291.         uint dst = MASK_OUT_ABOVE_16(*r_dst);
  31292.         uint res = dst - src;
  31293.  
  31294.         FLAG_N = NFLAG_16(res);
  31295.         FLAG_X = FLAG_C = CFLAG_16(res);
  31296.         FLAG_V = VFLAG_SUB_16(src, dst, res);
  31297.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  31298.  
  31299.         *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
  31300. }
  31301.  
  31302.  
  31303. void m68k_op_sub_16_er_i(void)
  31304. {
  31305.         uint* r_dst = &DX;
  31306.         uint src = OPER_I_16();
  31307.         uint dst = MASK_OUT_ABOVE_16(*r_dst);
  31308.         uint res = dst - src;
  31309.  
  31310.         FLAG_N = NFLAG_16(res);
  31311.         FLAG_X = FLAG_C = CFLAG_16(res);
  31312.         FLAG_V = VFLAG_SUB_16(src, dst, res);
  31313.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  31314.  
  31315.         *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
  31316. }
  31317.  
  31318.  
  31319. void m68k_op_sub_32_er_d(void)
  31320. {
  31321.         uint* r_dst = &DX;
  31322.         uint src = DY;
  31323.         uint dst = *r_dst;
  31324.         uint res = dst - src;
  31325.  
  31326.         FLAG_N = NFLAG_32(res);
  31327.         FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
  31328.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  31329.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  31330.  
  31331.         *r_dst = FLAG_Z;
  31332. }
  31333.  
  31334.  
  31335. void m68k_op_sub_32_er_a(void)
  31336. {
  31337.         uint* r_dst = &DX;
  31338.         uint src = AY;
  31339.         uint dst = *r_dst;
  31340.         uint res = dst - src;
  31341.  
  31342.         FLAG_N = NFLAG_32(res);
  31343.         FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
  31344.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  31345.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  31346.  
  31347.         *r_dst = FLAG_Z;
  31348. }
  31349.  
  31350.  
  31351. void m68k_op_sub_32_er_ai(void)
  31352. {
  31353.         uint* r_dst = &DX;
  31354.         uint src = OPER_AY_AI_32();
  31355.         uint dst = *r_dst;
  31356.         uint res = dst - src;
  31357.  
  31358.         FLAG_N = NFLAG_32(res);
  31359.         FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
  31360.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  31361.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  31362.  
  31363.         *r_dst = FLAG_Z;
  31364. }
  31365.  
  31366.  
  31367. void m68k_op_sub_32_er_pi(void)
  31368. {
  31369.         uint* r_dst = &DX;
  31370.         uint src = OPER_AY_PI_32();
  31371.         uint dst = *r_dst;
  31372.         uint res = dst - src;
  31373.  
  31374.         FLAG_N = NFLAG_32(res);
  31375.         FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
  31376.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  31377.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  31378.  
  31379.         *r_dst = FLAG_Z;
  31380. }
  31381.  
  31382.  
  31383. void m68k_op_sub_32_er_pd(void)
  31384. {
  31385.         uint* r_dst = &DX;
  31386.         uint src = OPER_AY_PD_32();
  31387.         uint dst = *r_dst;
  31388.         uint res = dst - src;
  31389.  
  31390.         FLAG_N = NFLAG_32(res);
  31391.         FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
  31392.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  31393.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  31394.  
  31395.         *r_dst = FLAG_Z;
  31396. }
  31397.  
  31398.  
  31399. void m68k_op_sub_32_er_di(void)
  31400. {
  31401.         uint* r_dst = &DX;
  31402.         uint src = OPER_AY_DI_32();
  31403.         uint dst = *r_dst;
  31404.         uint res = dst - src;
  31405.  
  31406.         FLAG_N = NFLAG_32(res);
  31407.         FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
  31408.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  31409.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  31410.  
  31411.         *r_dst = FLAG_Z;
  31412. }
  31413.  
  31414.  
  31415. void m68k_op_sub_32_er_ix(void)
  31416. {
  31417.         uint* r_dst = &DX;
  31418.         uint src = OPER_AY_IX_32();
  31419.         uint dst = *r_dst;
  31420.         uint res = dst - src;
  31421.  
  31422.         FLAG_N = NFLAG_32(res);
  31423.         FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
  31424.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  31425.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  31426.  
  31427.         *r_dst = FLAG_Z;
  31428. }
  31429.  
  31430.  
  31431. void m68k_op_sub_32_er_aw(void)
  31432. {
  31433.         uint* r_dst = &DX;
  31434.         uint src = OPER_AW_32();
  31435.         uint dst = *r_dst;
  31436.         uint res = dst - src;
  31437.  
  31438.         FLAG_N = NFLAG_32(res);
  31439.         FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
  31440.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  31441.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  31442.  
  31443.         *r_dst = FLAG_Z;
  31444. }
  31445.  
  31446.  
  31447. void m68k_op_sub_32_er_al(void)
  31448. {
  31449.         uint* r_dst = &DX;
  31450.         uint src = OPER_AL_32();
  31451.         uint dst = *r_dst;
  31452.         uint res = dst - src;
  31453.  
  31454.         FLAG_N = NFLAG_32(res);
  31455.         FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
  31456.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  31457.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  31458.  
  31459.         *r_dst = FLAG_Z;
  31460. }
  31461.  
  31462.  
  31463. void m68k_op_sub_32_er_pcdi(void)
  31464. {
  31465.         uint* r_dst = &DX;
  31466.         uint src = OPER_PCDI_32();
  31467.         uint dst = *r_dst;
  31468.         uint res = dst - src;
  31469.  
  31470.         FLAG_N = NFLAG_32(res);
  31471.         FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
  31472.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  31473.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  31474.  
  31475.         *r_dst = FLAG_Z;
  31476. }
  31477.  
  31478.  
  31479. void m68k_op_sub_32_er_pcix(void)
  31480. {
  31481.         uint* r_dst = &DX;
  31482.         uint src = OPER_PCIX_32();
  31483.         uint dst = *r_dst;
  31484.         uint res = dst - src;
  31485.  
  31486.         FLAG_N = NFLAG_32(res);
  31487.         FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
  31488.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  31489.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  31490.  
  31491.         *r_dst = FLAG_Z;
  31492. }
  31493.  
  31494.  
  31495. void m68k_op_sub_32_er_i(void)
  31496. {
  31497.         uint* r_dst = &DX;
  31498.         uint src = OPER_I_32();
  31499.         uint dst = *r_dst;
  31500.         uint res = dst - src;
  31501.  
  31502.         FLAG_N = NFLAG_32(res);
  31503.         FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
  31504.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  31505.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  31506.  
  31507.         *r_dst = FLAG_Z;
  31508. }
  31509.  
  31510.  
  31511. void m68k_op_sub_8_re_ai(void)
  31512. {
  31513.         uint ea = EA_AY_AI_8();
  31514.         uint src = MASK_OUT_ABOVE_8(DX);
  31515.         uint dst = m68ki_read_8(ea);
  31516.         uint res = dst - src;
  31517.  
  31518.         FLAG_N = NFLAG_8(res);
  31519.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  31520.         FLAG_X = FLAG_C = CFLAG_8(res);
  31521.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  31522.  
  31523.         m68ki_write_8(ea, FLAG_Z);
  31524. }
  31525.  
  31526.  
  31527. void m68k_op_sub_8_re_pi(void)
  31528. {
  31529.         uint ea = EA_AY_PI_8();
  31530.         uint src = MASK_OUT_ABOVE_8(DX);
  31531.         uint dst = m68ki_read_8(ea);
  31532.         uint res = dst - src;
  31533.  
  31534.         FLAG_N = NFLAG_8(res);
  31535.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  31536.         FLAG_X = FLAG_C = CFLAG_8(res);
  31537.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  31538.  
  31539.         m68ki_write_8(ea, FLAG_Z);
  31540. }
  31541.  
  31542.  
  31543. void m68k_op_sub_8_re_pi7(void)
  31544. {
  31545.         uint ea = EA_A7_PI_8();
  31546.         uint src = MASK_OUT_ABOVE_8(DX);
  31547.         uint dst = m68ki_read_8(ea);
  31548.         uint res = dst - src;
  31549.  
  31550.         FLAG_N = NFLAG_8(res);
  31551.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  31552.         FLAG_X = FLAG_C = CFLAG_8(res);
  31553.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  31554.  
  31555.         m68ki_write_8(ea, FLAG_Z);
  31556. }
  31557.  
  31558.  
  31559. void m68k_op_sub_8_re_pd(void)
  31560. {
  31561.         uint ea = EA_AY_PD_8();
  31562.         uint src = MASK_OUT_ABOVE_8(DX);
  31563.         uint dst = m68ki_read_8(ea);
  31564.         uint res = dst - src;
  31565.  
  31566.         FLAG_N = NFLAG_8(res);
  31567.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  31568.         FLAG_X = FLAG_C = CFLAG_8(res);
  31569.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  31570.  
  31571.         m68ki_write_8(ea, FLAG_Z);
  31572. }
  31573.  
  31574.  
  31575. void m68k_op_sub_8_re_pd7(void)
  31576. {
  31577.         uint ea = EA_A7_PD_8();
  31578.         uint src = MASK_OUT_ABOVE_8(DX);
  31579.         uint dst = m68ki_read_8(ea);
  31580.         uint res = dst - src;
  31581.  
  31582.         FLAG_N = NFLAG_8(res);
  31583.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  31584.         FLAG_X = FLAG_C = CFLAG_8(res);
  31585.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  31586.  
  31587.         m68ki_write_8(ea, FLAG_Z);
  31588. }
  31589.  
  31590.  
  31591. void m68k_op_sub_8_re_di(void)
  31592. {
  31593.         uint ea = EA_AY_DI_8();
  31594.         uint src = MASK_OUT_ABOVE_8(DX);
  31595.         uint dst = m68ki_read_8(ea);
  31596.         uint res = dst - src;
  31597.  
  31598.         FLAG_N = NFLAG_8(res);
  31599.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  31600.         FLAG_X = FLAG_C = CFLAG_8(res);
  31601.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  31602.  
  31603.         m68ki_write_8(ea, FLAG_Z);
  31604. }
  31605.  
  31606.  
  31607. void m68k_op_sub_8_re_ix(void)
  31608. {
  31609.         uint ea = EA_AY_IX_8();
  31610.         uint src = MASK_OUT_ABOVE_8(DX);
  31611.         uint dst = m68ki_read_8(ea);
  31612.         uint res = dst - src;
  31613.  
  31614.         FLAG_N = NFLAG_8(res);
  31615.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  31616.         FLAG_X = FLAG_C = CFLAG_8(res);
  31617.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  31618.  
  31619.         m68ki_write_8(ea, FLAG_Z);
  31620. }
  31621.  
  31622.  
  31623. void m68k_op_sub_8_re_aw(void)
  31624. {
  31625.         uint ea = EA_AW_8();
  31626.         uint src = MASK_OUT_ABOVE_8(DX);
  31627.         uint dst = m68ki_read_8(ea);
  31628.         uint res = dst - src;
  31629.  
  31630.         FLAG_N = NFLAG_8(res);
  31631.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  31632.         FLAG_X = FLAG_C = CFLAG_8(res);
  31633.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  31634.  
  31635.         m68ki_write_8(ea, FLAG_Z);
  31636. }
  31637.  
  31638.  
  31639. void m68k_op_sub_8_re_al(void)
  31640. {
  31641.         uint ea = EA_AL_8();
  31642.         uint src = MASK_OUT_ABOVE_8(DX);
  31643.         uint dst = m68ki_read_8(ea);
  31644.         uint res = dst - src;
  31645.  
  31646.         FLAG_N = NFLAG_8(res);
  31647.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  31648.         FLAG_X = FLAG_C = CFLAG_8(res);
  31649.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  31650.  
  31651.         m68ki_write_8(ea, FLAG_Z);
  31652. }
  31653.  
  31654.  
  31655. void m68k_op_sub_16_re_ai(void)
  31656. {
  31657.         uint ea = EA_AY_AI_16();
  31658.         uint src = MASK_OUT_ABOVE_16(DX);
  31659.         uint dst = m68ki_read_16(ea);
  31660.         uint res = dst - src;
  31661.  
  31662.         FLAG_N = NFLAG_16(res);
  31663.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  31664.         FLAG_X = FLAG_C = CFLAG_16(res);
  31665.         FLAG_V = VFLAG_SUB_16(src, dst, res);
  31666.  
  31667.         m68ki_write_16(ea, FLAG_Z);
  31668. }
  31669.  
  31670.  
  31671. void m68k_op_sub_16_re_pi(void)
  31672. {
  31673.         uint ea = EA_AY_PI_16();
  31674.         uint src = MASK_OUT_ABOVE_16(DX);
  31675.         uint dst = m68ki_read_16(ea);
  31676.         uint res = dst - src;
  31677.  
  31678.         FLAG_N = NFLAG_16(res);
  31679.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  31680.         FLAG_X = FLAG_C = CFLAG_16(res);
  31681.         FLAG_V = VFLAG_SUB_16(src, dst, res);
  31682.  
  31683.         m68ki_write_16(ea, FLAG_Z);
  31684. }
  31685.  
  31686.  
  31687. void m68k_op_sub_16_re_pd(void)
  31688. {
  31689.         uint ea = EA_AY_PD_16();
  31690.         uint src = MASK_OUT_ABOVE_16(DX);
  31691.         uint dst = m68ki_read_16(ea);
  31692.         uint res = dst - src;
  31693.  
  31694.         FLAG_N = NFLAG_16(res);
  31695.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  31696.         FLAG_X = FLAG_C = CFLAG_16(res);
  31697.         FLAG_V = VFLAG_SUB_16(src, dst, res);
  31698.  
  31699.         m68ki_write_16(ea, FLAG_Z);
  31700. }
  31701.  
  31702.  
  31703. void m68k_op_sub_16_re_di(void)
  31704. {
  31705.         uint ea = EA_AY_DI_16();
  31706.         uint src = MASK_OUT_ABOVE_16(DX);
  31707.         uint dst = m68ki_read_16(ea);
  31708.         uint res = dst - src;
  31709.  
  31710.         FLAG_N = NFLAG_16(res);
  31711.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  31712.         FLAG_X = FLAG_C = CFLAG_16(res);
  31713.         FLAG_V = VFLAG_SUB_16(src, dst, res);
  31714.  
  31715.         m68ki_write_16(ea, FLAG_Z);
  31716. }
  31717.  
  31718.  
  31719. void m68k_op_sub_16_re_ix(void)
  31720. {
  31721.         uint ea = EA_AY_IX_16();
  31722.         uint src = MASK_OUT_ABOVE_16(DX);
  31723.         uint dst = m68ki_read_16(ea);
  31724.         uint res = dst - src;
  31725.  
  31726.         FLAG_N = NFLAG_16(res);
  31727.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  31728.         FLAG_X = FLAG_C = CFLAG_16(res);
  31729.         FLAG_V = VFLAG_SUB_16(src, dst, res);
  31730.  
  31731.         m68ki_write_16(ea, FLAG_Z);
  31732. }
  31733.  
  31734.  
  31735. void m68k_op_sub_16_re_aw(void)
  31736. {
  31737.         uint ea = EA_AW_16();
  31738.         uint src = MASK_OUT_ABOVE_16(DX);
  31739.         uint dst = m68ki_read_16(ea);
  31740.         uint res = dst - src;
  31741.  
  31742.         FLAG_N = NFLAG_16(res);
  31743.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  31744.         FLAG_X = FLAG_C = CFLAG_16(res);
  31745.         FLAG_V = VFLAG_SUB_16(src, dst, res);
  31746.  
  31747.         m68ki_write_16(ea, FLAG_Z);
  31748. }
  31749.  
  31750.  
  31751. void m68k_op_sub_16_re_al(void)
  31752. {
  31753.         uint ea = EA_AL_16();
  31754.         uint src = MASK_OUT_ABOVE_16(DX);
  31755.         uint dst = m68ki_read_16(ea);
  31756.         uint res = dst - src;
  31757.  
  31758.         FLAG_N = NFLAG_16(res);
  31759.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  31760.         FLAG_X = FLAG_C = CFLAG_16(res);
  31761.         FLAG_V = VFLAG_SUB_16(src, dst, res);
  31762.  
  31763.         m68ki_write_16(ea, FLAG_Z);
  31764. }
  31765.  
  31766.  
  31767. void m68k_op_sub_32_re_ai(void)
  31768. {
  31769.         uint ea = EA_AY_AI_32();
  31770.         uint src = DX;
  31771.         uint dst = m68ki_read_32(ea);
  31772.         uint res = dst - src;
  31773.  
  31774.         FLAG_N = NFLAG_32(res);
  31775.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  31776.         FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
  31777.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  31778.  
  31779.         m68ki_write_32(ea, FLAG_Z);
  31780. }
  31781.  
  31782.  
  31783. void m68k_op_sub_32_re_pi(void)
  31784. {
  31785.         uint ea = EA_AY_PI_32();
  31786.         uint src = DX;
  31787.         uint dst = m68ki_read_32(ea);
  31788.         uint res = dst - src;
  31789.  
  31790.         FLAG_N = NFLAG_32(res);
  31791.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  31792.         FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
  31793.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  31794.  
  31795.         m68ki_write_32(ea, FLAG_Z);
  31796. }
  31797.  
  31798.  
  31799. void m68k_op_sub_32_re_pd(void)
  31800. {
  31801.         uint ea = EA_AY_PD_32();
  31802.         uint src = DX;
  31803.         uint dst = m68ki_read_32(ea);
  31804.         uint res = dst - src;
  31805.  
  31806.         FLAG_N = NFLAG_32(res);
  31807.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  31808.         FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
  31809.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  31810.  
  31811.         m68ki_write_32(ea, FLAG_Z);
  31812. }
  31813.  
  31814.  
  31815. void m68k_op_sub_32_re_di(void)
  31816. {
  31817.         uint ea = EA_AY_DI_32();
  31818.         uint src = DX;
  31819.         uint dst = m68ki_read_32(ea);
  31820.         uint res = dst - src;
  31821.  
  31822.         FLAG_N = NFLAG_32(res);
  31823.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  31824.         FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
  31825.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  31826.  
  31827.         m68ki_write_32(ea, FLAG_Z);
  31828. }
  31829.  
  31830.  
  31831. void m68k_op_sub_32_re_ix(void)
  31832. {
  31833.         uint ea = EA_AY_IX_32();
  31834.         uint src = DX;
  31835.         uint dst = m68ki_read_32(ea);
  31836.         uint res = dst - src;
  31837.  
  31838.         FLAG_N = NFLAG_32(res);
  31839.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  31840.         FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
  31841.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  31842.  
  31843.         m68ki_write_32(ea, FLAG_Z);
  31844. }
  31845.  
  31846.  
  31847. void m68k_op_sub_32_re_aw(void)
  31848. {
  31849.         uint ea = EA_AW_32();
  31850.         uint src = DX;
  31851.         uint dst = m68ki_read_32(ea);
  31852.         uint res = dst - src;
  31853.  
  31854.         FLAG_N = NFLAG_32(res);
  31855.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  31856.         FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
  31857.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  31858.  
  31859.         m68ki_write_32(ea, FLAG_Z);
  31860. }
  31861.  
  31862.  
  31863. void m68k_op_sub_32_re_al(void)
  31864. {
  31865.         uint ea = EA_AL_32();
  31866.         uint src = DX;
  31867.         uint dst = m68ki_read_32(ea);
  31868.         uint res = dst - src;
  31869.  
  31870.         FLAG_N = NFLAG_32(res);
  31871.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  31872.         FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
  31873.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  31874.  
  31875.         m68ki_write_32(ea, FLAG_Z);
  31876. }
  31877.  
  31878.  
  31879. void m68k_op_suba_16_d(void)
  31880. {
  31881.         uint* r_dst = &AX;
  31882.  
  31883.         *r_dst = MASK_OUT_ABOVE_32(*r_dst - MAKE_INT_16(DY));
  31884. }
  31885.  
  31886.  
  31887. void m68k_op_suba_16_a(void)
  31888. {
  31889.         uint* r_dst = &AX;
  31890.  
  31891.         *r_dst = MASK_OUT_ABOVE_32(*r_dst - MAKE_INT_16(AY));
  31892. }
  31893.  
  31894.  
  31895. void m68k_op_suba_16_ai(void)
  31896. {
  31897.         uint* r_dst = &AX;
  31898.         uint src = MAKE_INT_16(OPER_AY_AI_16());
  31899.  
  31900.         *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
  31901. }
  31902.  
  31903.  
  31904. void m68k_op_suba_16_pi(void)
  31905. {
  31906.         uint* r_dst = &AX;
  31907.         uint src = MAKE_INT_16(OPER_AY_PI_16());
  31908.  
  31909.         *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
  31910. }
  31911.  
  31912.  
  31913. void m68k_op_suba_16_pd(void)
  31914. {
  31915.         uint* r_dst = &AX;
  31916.         uint src = MAKE_INT_16(OPER_AY_PD_16());
  31917.  
  31918.         *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
  31919. }
  31920.  
  31921.  
  31922. void m68k_op_suba_16_di(void)
  31923. {
  31924.         uint* r_dst = &AX;
  31925.         uint src = MAKE_INT_16(OPER_AY_DI_16());
  31926.  
  31927.         *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
  31928. }
  31929.  
  31930.  
  31931. void m68k_op_suba_16_ix(void)
  31932. {
  31933.         uint* r_dst = &AX;
  31934.         uint src = MAKE_INT_16(OPER_AY_IX_16());
  31935.  
  31936.         *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
  31937. }
  31938.  
  31939.  
  31940. void m68k_op_suba_16_aw(void)
  31941. {
  31942.         uint* r_dst = &AX;
  31943.         uint src = MAKE_INT_16(OPER_AW_16());
  31944.  
  31945.         *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
  31946. }
  31947.  
  31948.  
  31949. void m68k_op_suba_16_al(void)
  31950. {
  31951.         uint* r_dst = &AX;
  31952.         uint src = MAKE_INT_16(OPER_AL_16());
  31953.  
  31954.         *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
  31955. }
  31956.  
  31957.  
  31958. void m68k_op_suba_16_pcdi(void)
  31959. {
  31960.         uint* r_dst = &AX;
  31961.         uint src = MAKE_INT_16(OPER_PCDI_16());
  31962.  
  31963.         *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
  31964. }
  31965.  
  31966.  
  31967. void m68k_op_suba_16_pcix(void)
  31968. {
  31969.         uint* r_dst = &AX;
  31970.         uint src = MAKE_INT_16(OPER_PCIX_16());
  31971.  
  31972.         *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
  31973. }
  31974.  
  31975.  
  31976. void m68k_op_suba_16_i(void)
  31977. {
  31978.         uint* r_dst = &AX;
  31979.         uint src = MAKE_INT_16(OPER_I_16());
  31980.  
  31981.         *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
  31982. }
  31983.  
  31984.  
  31985. void m68k_op_suba_32_d(void)
  31986. {
  31987.         uint* r_dst = &AX;
  31988.  
  31989.         *r_dst = MASK_OUT_ABOVE_32(*r_dst - DY);
  31990. }
  31991.  
  31992.  
  31993. void m68k_op_suba_32_a(void)
  31994. {
  31995.         uint* r_dst = &AX;
  31996.  
  31997.         *r_dst = MASK_OUT_ABOVE_32(*r_dst - AY);
  31998. }
  31999.  
  32000.  
  32001. void m68k_op_suba_32_ai(void)
  32002. {
  32003.         uint* r_dst = &AX;
  32004.         uint src = OPER_AY_AI_32();
  32005.  
  32006.         *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
  32007. }
  32008.  
  32009.  
  32010. void m68k_op_suba_32_pi(void)
  32011. {
  32012.         uint* r_dst = &AX;
  32013.         uint src = OPER_AY_PI_32();
  32014.  
  32015.         *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
  32016. }
  32017.  
  32018.  
  32019. void m68k_op_suba_32_pd(void)
  32020. {
  32021.         uint* r_dst = &AX;
  32022.         uint src = OPER_AY_PD_32();
  32023.  
  32024.         *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
  32025. }
  32026.  
  32027.  
  32028. void m68k_op_suba_32_di(void)
  32029. {
  32030.         uint* r_dst = &AX;
  32031.         uint src = OPER_AY_DI_32();
  32032.  
  32033.         *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
  32034. }
  32035.  
  32036.  
  32037. void m68k_op_suba_32_ix(void)
  32038. {
  32039.         uint* r_dst = &AX;
  32040.         uint src = OPER_AY_IX_32();
  32041.  
  32042.         *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
  32043. }
  32044.  
  32045.  
  32046. void m68k_op_suba_32_aw(void)
  32047. {
  32048.         uint* r_dst = &AX;
  32049.         uint src = OPER_AW_32();
  32050.  
  32051.         *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
  32052. }
  32053.  
  32054.  
  32055. void m68k_op_suba_32_al(void)
  32056. {
  32057.         uint* r_dst = &AX;
  32058.         uint src = OPER_AL_32();
  32059.  
  32060.         *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
  32061. }
  32062.  
  32063.  
  32064. void m68k_op_suba_32_pcdi(void)
  32065. {
  32066.         uint* r_dst = &AX;
  32067.         uint src = OPER_PCDI_32();
  32068.  
  32069.         *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
  32070. }
  32071.  
  32072.  
  32073. void m68k_op_suba_32_pcix(void)
  32074. {
  32075.         uint* r_dst = &AX;
  32076.         uint src = OPER_PCIX_32();
  32077.  
  32078.         *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
  32079. }
  32080.  
  32081.  
  32082. void m68k_op_suba_32_i(void)
  32083. {
  32084.         uint* r_dst = &AX;
  32085.         uint src = OPER_I_32();
  32086.  
  32087.         *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
  32088. }
  32089.  
  32090.  
  32091. void m68k_op_subi_8_d(void)
  32092. {
  32093.         uint* r_dst = &DY;
  32094.         uint src = OPER_I_8();
  32095.         uint dst = MASK_OUT_ABOVE_8(*r_dst);
  32096.         uint res = dst - src;
  32097.  
  32098.         FLAG_N = NFLAG_8(res);
  32099.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  32100.         FLAG_X = FLAG_C = CFLAG_8(res);
  32101.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  32102.  
  32103.         *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
  32104. }
  32105.  
  32106.  
  32107. void m68k_op_subi_8_ai(void)
  32108. {
  32109.         uint src = OPER_I_8();
  32110.         uint ea = EA_AY_AI_8();
  32111.         uint dst = m68ki_read_8(ea);
  32112.         uint res = dst - src;
  32113.  
  32114.         FLAG_N = NFLAG_8(res);
  32115.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  32116.         FLAG_X = FLAG_C = CFLAG_8(res);
  32117.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  32118.  
  32119.         m68ki_write_8(ea, FLAG_Z);
  32120. }
  32121.  
  32122.  
  32123. void m68k_op_subi_8_pi(void)
  32124. {
  32125.         uint src = OPER_I_8();
  32126.         uint ea = EA_AY_PI_8();
  32127.         uint dst = m68ki_read_8(ea);
  32128.         uint res = dst - src;
  32129.  
  32130.         FLAG_N = NFLAG_8(res);
  32131.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  32132.         FLAG_X = FLAG_C = CFLAG_8(res);
  32133.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  32134.  
  32135.         m68ki_write_8(ea, FLAG_Z);
  32136. }
  32137.  
  32138.  
  32139. void m68k_op_subi_8_pi7(void)
  32140. {
  32141.         uint src = OPER_I_8();
  32142.         uint ea = EA_A7_PI_8();
  32143.         uint dst = m68ki_read_8(ea);
  32144.         uint res = dst - src;
  32145.  
  32146.         FLAG_N = NFLAG_8(res);
  32147.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  32148.         FLAG_X = FLAG_C = CFLAG_8(res);
  32149.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  32150.  
  32151.         m68ki_write_8(ea, FLAG_Z);
  32152. }
  32153.  
  32154.  
  32155. void m68k_op_subi_8_pd(void)
  32156. {
  32157.         uint src = OPER_I_8();
  32158.         uint ea = EA_AY_PD_8();
  32159.         uint dst = m68ki_read_8(ea);
  32160.         uint res = dst - src;
  32161.  
  32162.         FLAG_N = NFLAG_8(res);
  32163.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  32164.         FLAG_X = FLAG_C = CFLAG_8(res);
  32165.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  32166.  
  32167.         m68ki_write_8(ea, FLAG_Z);
  32168. }
  32169.  
  32170.  
  32171. void m68k_op_subi_8_pd7(void)
  32172. {
  32173.         uint src = OPER_I_8();
  32174.         uint ea = EA_A7_PD_8();
  32175.         uint dst = m68ki_read_8(ea);
  32176.         uint res = dst - src;
  32177.  
  32178.         FLAG_N = NFLAG_8(res);
  32179.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  32180.         FLAG_X = FLAG_C = CFLAG_8(res);
  32181.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  32182.  
  32183.         m68ki_write_8(ea, FLAG_Z);
  32184. }
  32185.  
  32186.  
  32187. void m68k_op_subi_8_di(void)
  32188. {
  32189.         uint src = OPER_I_8();
  32190.         uint ea = EA_AY_DI_8();
  32191.         uint dst = m68ki_read_8(ea);
  32192.         uint res = dst - src;
  32193.  
  32194.         FLAG_N = NFLAG_8(res);
  32195.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  32196.         FLAG_X = FLAG_C = CFLAG_8(res);
  32197.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  32198.  
  32199.         m68ki_write_8(ea, FLAG_Z);
  32200. }
  32201.  
  32202.  
  32203. void m68k_op_subi_8_ix(void)
  32204. {
  32205.         uint src = OPER_I_8();
  32206.         uint ea = EA_AY_IX_8();
  32207.         uint dst = m68ki_read_8(ea);
  32208.         uint res = dst - src;
  32209.  
  32210.         FLAG_N = NFLAG_8(res);
  32211.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  32212.         FLAG_X = FLAG_C = CFLAG_8(res);
  32213.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  32214.  
  32215.         m68ki_write_8(ea, FLAG_Z);
  32216. }
  32217.  
  32218.  
  32219. void m68k_op_subi_8_aw(void)
  32220. {
  32221.         uint src = OPER_I_8();
  32222.         uint ea = EA_AW_8();
  32223.         uint dst = m68ki_read_8(ea);
  32224.         uint res = dst - src;
  32225.  
  32226.         FLAG_N = NFLAG_8(res);
  32227.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  32228.         FLAG_X = FLAG_C = CFLAG_8(res);
  32229.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  32230.  
  32231.         m68ki_write_8(ea, FLAG_Z);
  32232. }
  32233.  
  32234.  
  32235. void m68k_op_subi_8_al(void)
  32236. {
  32237.         uint src = OPER_I_8();
  32238.         uint ea = EA_AL_8();
  32239.         uint dst = m68ki_read_8(ea);
  32240.         uint res = dst - src;
  32241.  
  32242.         FLAG_N = NFLAG_8(res);
  32243.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  32244.         FLAG_X = FLAG_C = CFLAG_8(res);
  32245.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  32246.  
  32247.         m68ki_write_8(ea, FLAG_Z);
  32248. }
  32249.  
  32250.  
  32251. void m68k_op_subi_16_d(void)
  32252. {
  32253.         uint* r_dst = &DY;
  32254.         uint src = OPER_I_16();
  32255.         uint dst = MASK_OUT_ABOVE_16(*r_dst);
  32256.         uint res = dst - src;
  32257.  
  32258.         FLAG_N = NFLAG_16(res);
  32259.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  32260.         FLAG_X = FLAG_C = CFLAG_16(res);
  32261.         FLAG_V = VFLAG_SUB_16(src, dst, res);
  32262.  
  32263.         *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
  32264. }
  32265.  
  32266.  
  32267. void m68k_op_subi_16_ai(void)
  32268. {
  32269.         uint src = OPER_I_16();
  32270.         uint ea = EA_AY_AI_16();
  32271.         uint dst = m68ki_read_16(ea);
  32272.         uint res = dst - src;
  32273.  
  32274.         FLAG_N = NFLAG_16(res);
  32275.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  32276.         FLAG_X = FLAG_C = CFLAG_16(res);
  32277.         FLAG_V = VFLAG_SUB_16(src, dst, res);
  32278.  
  32279.         m68ki_write_16(ea, FLAG_Z);
  32280. }
  32281.  
  32282.  
  32283. void m68k_op_subi_16_pi(void)
  32284. {
  32285.         uint src = OPER_I_16();
  32286.         uint ea = EA_AY_PI_16();
  32287.         uint dst = m68ki_read_16(ea);
  32288.         uint res = dst - src;
  32289.  
  32290.         FLAG_N = NFLAG_16(res);
  32291.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  32292.         FLAG_X = FLAG_C = CFLAG_16(res);
  32293.         FLAG_V = VFLAG_SUB_16(src, dst, res);
  32294.  
  32295.         m68ki_write_16(ea, FLAG_Z);
  32296. }
  32297.  
  32298.  
  32299. void m68k_op_subi_16_pd(void)
  32300. {
  32301.         uint src = OPER_I_16();
  32302.         uint ea = EA_AY_PD_16();
  32303.         uint dst = m68ki_read_16(ea);
  32304.         uint res = dst - src;
  32305.  
  32306.         FLAG_N = NFLAG_16(res);
  32307.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  32308.         FLAG_X = FLAG_C = CFLAG_16(res);
  32309.         FLAG_V = VFLAG_SUB_16(src, dst, res);
  32310.  
  32311.         m68ki_write_16(ea, FLAG_Z);
  32312. }
  32313.  
  32314.  
  32315. void m68k_op_subi_16_di(void)
  32316. {
  32317.         uint src = OPER_I_16();
  32318.         uint ea = EA_AY_DI_16();
  32319.         uint dst = m68ki_read_16(ea);
  32320.         uint res = dst - src;
  32321.  
  32322.         FLAG_N = NFLAG_16(res);
  32323.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  32324.         FLAG_X = FLAG_C = CFLAG_16(res);
  32325.         FLAG_V = VFLAG_SUB_16(src, dst, res);
  32326.  
  32327.         m68ki_write_16(ea, FLAG_Z);
  32328. }
  32329.  
  32330.  
  32331. void m68k_op_subi_16_ix(void)
  32332. {
  32333.         uint src = OPER_I_16();
  32334.         uint ea = EA_AY_IX_16();
  32335.         uint dst = m68ki_read_16(ea);
  32336.         uint res = dst - src;
  32337.  
  32338.         FLAG_N = NFLAG_16(res);
  32339.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  32340.         FLAG_X = FLAG_C = CFLAG_16(res);
  32341.         FLAG_V = VFLAG_SUB_16(src, dst, res);
  32342.  
  32343.         m68ki_write_16(ea, FLAG_Z);
  32344. }
  32345.  
  32346.  
  32347. void m68k_op_subi_16_aw(void)
  32348. {
  32349.         uint src = OPER_I_16();
  32350.         uint ea = EA_AW_16();
  32351.         uint dst = m68ki_read_16(ea);
  32352.         uint res = dst - src;
  32353.  
  32354.         FLAG_N = NFLAG_16(res);
  32355.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  32356.         FLAG_X = FLAG_C = CFLAG_16(res);
  32357.         FLAG_V = VFLAG_SUB_16(src, dst, res);
  32358.  
  32359.         m68ki_write_16(ea, FLAG_Z);
  32360. }
  32361.  
  32362.  
  32363. void m68k_op_subi_16_al(void)
  32364. {
  32365.         uint src = OPER_I_16();
  32366.         uint ea = EA_AL_16();
  32367.         uint dst = m68ki_read_16(ea);
  32368.         uint res = dst - src;
  32369.  
  32370.         FLAG_N = NFLAG_16(res);
  32371.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  32372.         FLAG_X = FLAG_C = CFLAG_16(res);
  32373.         FLAG_V = VFLAG_SUB_16(src, dst, res);
  32374.  
  32375.         m68ki_write_16(ea, FLAG_Z);
  32376. }
  32377.  
  32378.  
  32379. void m68k_op_subi_32_d(void)
  32380. {
  32381.         uint* r_dst = &DY;
  32382.         uint src = OPER_I_32();
  32383.         uint dst = *r_dst;
  32384.         uint res = dst - src;
  32385.  
  32386.         FLAG_N = NFLAG_32(res);
  32387.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  32388.         FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
  32389.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  32390.  
  32391.         *r_dst = FLAG_Z;
  32392. }
  32393.  
  32394.  
  32395. void m68k_op_subi_32_ai(void)
  32396. {
  32397.         uint src = OPER_I_32();
  32398.         uint ea = EA_AY_AI_32();
  32399.         uint dst = m68ki_read_32(ea);
  32400.         uint res = dst - src;
  32401.  
  32402.         FLAG_N = NFLAG_32(res);
  32403.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  32404.         FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
  32405.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  32406.  
  32407.         m68ki_write_32(ea, FLAG_Z);
  32408. }
  32409.  
  32410.  
  32411. void m68k_op_subi_32_pi(void)
  32412. {
  32413.         uint src = OPER_I_32();
  32414.         uint ea = EA_AY_PI_32();
  32415.         uint dst = m68ki_read_32(ea);
  32416.         uint res = dst - src;
  32417.  
  32418.         FLAG_N = NFLAG_32(res);
  32419.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  32420.         FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
  32421.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  32422.  
  32423.         m68ki_write_32(ea, FLAG_Z);
  32424. }
  32425.  
  32426.  
  32427. void m68k_op_subi_32_pd(void)
  32428. {
  32429.         uint src = OPER_I_32();
  32430.         uint ea = EA_AY_PD_32();
  32431.         uint dst = m68ki_read_32(ea);
  32432.         uint res = dst - src;
  32433.  
  32434.         FLAG_N = NFLAG_32(res);
  32435.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  32436.         FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
  32437.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  32438.  
  32439.         m68ki_write_32(ea, FLAG_Z);
  32440. }
  32441.  
  32442.  
  32443. void m68k_op_subi_32_di(void)
  32444. {
  32445.         uint src = OPER_I_32();
  32446.         uint ea = EA_AY_DI_32();
  32447.         uint dst = m68ki_read_32(ea);
  32448.         uint res = dst - src;
  32449.  
  32450.         FLAG_N = NFLAG_32(res);
  32451.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  32452.         FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
  32453.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  32454.  
  32455.         m68ki_write_32(ea, FLAG_Z);
  32456. }
  32457.  
  32458.  
  32459. void m68k_op_subi_32_ix(void)
  32460. {
  32461.         uint src = OPER_I_32();
  32462.         uint ea = EA_AY_IX_32();
  32463.         uint dst = m68ki_read_32(ea);
  32464.         uint res = dst - src;
  32465.  
  32466.         FLAG_N = NFLAG_32(res);
  32467.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  32468.         FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
  32469.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  32470.  
  32471.         m68ki_write_32(ea, FLAG_Z);
  32472. }
  32473.  
  32474.  
  32475. void m68k_op_subi_32_aw(void)
  32476. {
  32477.         uint src = OPER_I_32();
  32478.         uint ea = EA_AW_32();
  32479.         uint dst = m68ki_read_32(ea);
  32480.         uint res = dst - src;
  32481.  
  32482.         FLAG_N = NFLAG_32(res);
  32483.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  32484.         FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
  32485.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  32486.  
  32487.         m68ki_write_32(ea, FLAG_Z);
  32488. }
  32489.  
  32490.  
  32491. void m68k_op_subi_32_al(void)
  32492. {
  32493.         uint src = OPER_I_32();
  32494.         uint ea = EA_AL_32();
  32495.         uint dst = m68ki_read_32(ea);
  32496.         uint res = dst - src;
  32497.  
  32498.         FLAG_N = NFLAG_32(res);
  32499.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  32500.         FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
  32501.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  32502.  
  32503.         m68ki_write_32(ea, FLAG_Z);
  32504. }
  32505.  
  32506.  
  32507. void m68k_op_subq_8_d(void)
  32508. {
  32509.         uint* r_dst = &DY;
  32510.         uint src = (((REG_IR >> 9) - 1) & 7) + 1;
  32511.         uint dst = MASK_OUT_ABOVE_8(*r_dst);
  32512.         uint res = dst - src;
  32513.  
  32514.         FLAG_N = NFLAG_8(res);
  32515.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  32516.         FLAG_X = FLAG_C = CFLAG_8(res);
  32517.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  32518.  
  32519.         *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
  32520. }
  32521.  
  32522.  
  32523. void m68k_op_subq_8_ai(void)
  32524. {
  32525.         uint src = (((REG_IR >> 9) - 1) & 7) + 1;
  32526.         uint ea = EA_AY_AI_8();
  32527.         uint dst = m68ki_read_8(ea);
  32528.         uint res = dst - src;
  32529.  
  32530.         FLAG_N = NFLAG_8(res);
  32531.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  32532.         FLAG_X = FLAG_C = CFLAG_8(res);
  32533.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  32534.  
  32535.         m68ki_write_8(ea, FLAG_Z);
  32536. }
  32537.  
  32538.  
  32539. void m68k_op_subq_8_pi(void)
  32540. {
  32541.         uint src = (((REG_IR >> 9) - 1) & 7) + 1;
  32542.         uint ea = EA_AY_PI_8();
  32543.         uint dst = m68ki_read_8(ea);
  32544.         uint res = dst - src;
  32545.  
  32546.         FLAG_N = NFLAG_8(res);
  32547.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  32548.         FLAG_X = FLAG_C = CFLAG_8(res);
  32549.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  32550.  
  32551.         m68ki_write_8(ea, FLAG_Z);
  32552. }
  32553.  
  32554.  
  32555. void m68k_op_subq_8_pi7(void)
  32556. {
  32557.         uint src = (((REG_IR >> 9) - 1) & 7) + 1;
  32558.         uint ea = EA_A7_PI_8();
  32559.         uint dst = m68ki_read_8(ea);
  32560.         uint res = dst - src;
  32561.  
  32562.         FLAG_N = NFLAG_8(res);
  32563.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  32564.         FLAG_X = FLAG_C = CFLAG_8(res);
  32565.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  32566.  
  32567.         m68ki_write_8(ea, FLAG_Z);
  32568. }
  32569.  
  32570.  
  32571. void m68k_op_subq_8_pd(void)
  32572. {
  32573.         uint src = (((REG_IR >> 9) - 1) & 7) + 1;
  32574.         uint ea = EA_AY_PD_8();
  32575.         uint dst = m68ki_read_8(ea);
  32576.         uint res = dst - src;
  32577.  
  32578.         FLAG_N = NFLAG_8(res);
  32579.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  32580.         FLAG_X = FLAG_C = CFLAG_8(res);
  32581.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  32582.  
  32583.         m68ki_write_8(ea, FLAG_Z);
  32584. }
  32585.  
  32586.  
  32587. void m68k_op_subq_8_pd7(void)
  32588. {
  32589.         uint src = (((REG_IR >> 9) - 1) & 7) + 1;
  32590.         uint ea = EA_A7_PD_8();
  32591.         uint dst = m68ki_read_8(ea);
  32592.         uint res = dst - src;
  32593.  
  32594.         FLAG_N = NFLAG_8(res);
  32595.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  32596.         FLAG_X = FLAG_C = CFLAG_8(res);
  32597.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  32598.  
  32599.         m68ki_write_8(ea, FLAG_Z);
  32600. }
  32601.  
  32602.  
  32603. void m68k_op_subq_8_di(void)
  32604. {
  32605.         uint src = (((REG_IR >> 9) - 1) & 7) + 1;
  32606.         uint ea = EA_AY_DI_8();
  32607.         uint dst = m68ki_read_8(ea);
  32608.         uint res = dst - src;
  32609.  
  32610.         FLAG_N = NFLAG_8(res);
  32611.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  32612.         FLAG_X = FLAG_C = CFLAG_8(res);
  32613.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  32614.  
  32615.         m68ki_write_8(ea, FLAG_Z);
  32616. }
  32617.  
  32618.  
  32619. void m68k_op_subq_8_ix(void)
  32620. {
  32621.         uint src = (((REG_IR >> 9) - 1) & 7) + 1;
  32622.         uint ea = EA_AY_IX_8();
  32623.         uint dst = m68ki_read_8(ea);
  32624.         uint res = dst - src;
  32625.  
  32626.         FLAG_N = NFLAG_8(res);
  32627.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  32628.         FLAG_X = FLAG_C = CFLAG_8(res);
  32629.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  32630.  
  32631.         m68ki_write_8(ea, FLAG_Z);
  32632. }
  32633.  
  32634.  
  32635. void m68k_op_subq_8_aw(void)
  32636. {
  32637.         uint src = (((REG_IR >> 9) - 1) & 7) + 1;
  32638.         uint ea = EA_AW_8();
  32639.         uint dst = m68ki_read_8(ea);
  32640.         uint res = dst - src;
  32641.  
  32642.         FLAG_N = NFLAG_8(res);
  32643.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  32644.         FLAG_X = FLAG_C = CFLAG_8(res);
  32645.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  32646.  
  32647.         m68ki_write_8(ea, FLAG_Z);
  32648. }
  32649.  
  32650.  
  32651. void m68k_op_subq_8_al(void)
  32652. {
  32653.         uint src = (((REG_IR >> 9) - 1) & 7) + 1;
  32654.         uint ea = EA_AL_8();
  32655.         uint dst = m68ki_read_8(ea);
  32656.         uint res = dst - src;
  32657.  
  32658.         FLAG_N = NFLAG_8(res);
  32659.         FLAG_Z = MASK_OUT_ABOVE_8(res);
  32660.         FLAG_X = FLAG_C = CFLAG_8(res);
  32661.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  32662.  
  32663.         m68ki_write_8(ea, FLAG_Z);
  32664. }
  32665.  
  32666.  
  32667. void m68k_op_subq_16_d(void)
  32668. {
  32669.         uint* r_dst = &DY;
  32670.         uint src = (((REG_IR >> 9) - 1) & 7) + 1;
  32671.         uint dst = MASK_OUT_ABOVE_16(*r_dst);
  32672.         uint res = dst - src;
  32673.  
  32674.         FLAG_N = NFLAG_16(res);
  32675.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  32676.         FLAG_X = FLAG_C = CFLAG_16(res);
  32677.         FLAG_V = VFLAG_SUB_16(src, dst, res);
  32678.  
  32679.         *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
  32680. }
  32681.  
  32682.  
  32683. void m68k_op_subq_16_a(void)
  32684. {
  32685.         uint* r_dst = &AY;
  32686.  
  32687.         *r_dst = MASK_OUT_ABOVE_32(*r_dst - ((((REG_IR >> 9) - 1) & 7) + 1));
  32688. }
  32689.  
  32690.  
  32691. void m68k_op_subq_16_ai(void)
  32692. {
  32693.         uint src = (((REG_IR >> 9) - 1) & 7) + 1;
  32694.         uint ea = EA_AY_AI_16();
  32695.         uint dst = m68ki_read_16(ea);
  32696.         uint res = dst - src;
  32697.  
  32698.         FLAG_N = NFLAG_16(res);
  32699.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  32700.         FLAG_X = FLAG_C = CFLAG_16(res);
  32701.         FLAG_V = VFLAG_SUB_16(src, dst, res);
  32702.  
  32703.         m68ki_write_16(ea, FLAG_Z);
  32704. }
  32705.  
  32706.  
  32707. void m68k_op_subq_16_pi(void)
  32708. {
  32709.         uint src = (((REG_IR >> 9) - 1) & 7) + 1;
  32710.         uint ea = EA_AY_PI_16();
  32711.         uint dst = m68ki_read_16(ea);
  32712.         uint res = dst - src;
  32713.  
  32714.         FLAG_N = NFLAG_16(res);
  32715.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  32716.         FLAG_X = FLAG_C = CFLAG_16(res);
  32717.         FLAG_V = VFLAG_SUB_16(src, dst, res);
  32718.  
  32719.         m68ki_write_16(ea, FLAG_Z);
  32720. }
  32721.  
  32722.  
  32723. void m68k_op_subq_16_pd(void)
  32724. {
  32725.         uint src = (((REG_IR >> 9) - 1) & 7) + 1;
  32726.         uint ea = EA_AY_PD_16();
  32727.         uint dst = m68ki_read_16(ea);
  32728.         uint res = dst - src;
  32729.  
  32730.         FLAG_N = NFLAG_16(res);
  32731.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  32732.         FLAG_X = FLAG_C = CFLAG_16(res);
  32733.         FLAG_V = VFLAG_SUB_16(src, dst, res);
  32734.  
  32735.         m68ki_write_16(ea, FLAG_Z);
  32736. }
  32737.  
  32738.  
  32739. void m68k_op_subq_16_di(void)
  32740. {
  32741.         uint src = (((REG_IR >> 9) - 1) & 7) + 1;
  32742.         uint ea = EA_AY_DI_16();
  32743.         uint dst = m68ki_read_16(ea);
  32744.         uint res = dst - src;
  32745.  
  32746.         FLAG_N = NFLAG_16(res);
  32747.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  32748.         FLAG_X = FLAG_C = CFLAG_16(res);
  32749.         FLAG_V = VFLAG_SUB_16(src, dst, res);
  32750.  
  32751.         m68ki_write_16(ea, FLAG_Z);
  32752. }
  32753.  
  32754.  
  32755. void m68k_op_subq_16_ix(void)
  32756. {
  32757.         uint src = (((REG_IR >> 9) - 1) & 7) + 1;
  32758.         uint ea = EA_AY_IX_16();
  32759.         uint dst = m68ki_read_16(ea);
  32760.         uint res = dst - src;
  32761.  
  32762.         FLAG_N = NFLAG_16(res);
  32763.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  32764.         FLAG_X = FLAG_C = CFLAG_16(res);
  32765.         FLAG_V = VFLAG_SUB_16(src, dst, res);
  32766.  
  32767.         m68ki_write_16(ea, FLAG_Z);
  32768. }
  32769.  
  32770.  
  32771. void m68k_op_subq_16_aw(void)
  32772. {
  32773.         uint src = (((REG_IR >> 9) - 1) & 7) + 1;
  32774.         uint ea = EA_AW_16();
  32775.         uint dst = m68ki_read_16(ea);
  32776.         uint res = dst - src;
  32777.  
  32778.         FLAG_N = NFLAG_16(res);
  32779.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  32780.         FLAG_X = FLAG_C = CFLAG_16(res);
  32781.         FLAG_V = VFLAG_SUB_16(src, dst, res);
  32782.  
  32783.         m68ki_write_16(ea, FLAG_Z);
  32784. }
  32785.  
  32786.  
  32787. void m68k_op_subq_16_al(void)
  32788. {
  32789.         uint src = (((REG_IR >> 9) - 1) & 7) + 1;
  32790.         uint ea = EA_AL_16();
  32791.         uint dst = m68ki_read_16(ea);
  32792.         uint res = dst - src;
  32793.  
  32794.         FLAG_N = NFLAG_16(res);
  32795.         FLAG_Z = MASK_OUT_ABOVE_16(res);
  32796.         FLAG_X = FLAG_C = CFLAG_16(res);
  32797.         FLAG_V = VFLAG_SUB_16(src, dst, res);
  32798.  
  32799.         m68ki_write_16(ea, FLAG_Z);
  32800. }
  32801.  
  32802.  
  32803. void m68k_op_subq_32_d(void)
  32804. {
  32805.         uint* r_dst = &DY;
  32806.         uint src = (((REG_IR >> 9) - 1) & 7) + 1;
  32807.         uint dst = *r_dst;
  32808.         uint res = dst - src;
  32809.  
  32810.         FLAG_N = NFLAG_32(res);
  32811.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  32812.         FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
  32813.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  32814.  
  32815.         *r_dst = FLAG_Z;
  32816. }
  32817.  
  32818.  
  32819. void m68k_op_subq_32_a(void)
  32820. {
  32821.         uint* r_dst = &AY;
  32822.  
  32823.         *r_dst = MASK_OUT_ABOVE_32(*r_dst - ((((REG_IR >> 9) - 1) & 7) + 1));
  32824. }
  32825.  
  32826.  
  32827. void m68k_op_subq_32_ai(void)
  32828. {
  32829.         uint src = (((REG_IR >> 9) - 1) & 7) + 1;
  32830.         uint ea = EA_AY_AI_32();
  32831.         uint dst = m68ki_read_32(ea);
  32832.         uint res = dst - src;
  32833.  
  32834.         FLAG_N = NFLAG_32(res);
  32835.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  32836.         FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
  32837.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  32838.  
  32839.         m68ki_write_32(ea, FLAG_Z);
  32840. }
  32841.  
  32842.  
  32843. void m68k_op_subq_32_pi(void)
  32844. {
  32845.         uint src = (((REG_IR >> 9) - 1) & 7) + 1;
  32846.         uint ea = EA_AY_PI_32();
  32847.         uint dst = m68ki_read_32(ea);
  32848.         uint res = dst - src;
  32849.  
  32850.         FLAG_N = NFLAG_32(res);
  32851.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  32852.         FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
  32853.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  32854.  
  32855.         m68ki_write_32(ea, FLAG_Z);
  32856. }
  32857.  
  32858.  
  32859. void m68k_op_subq_32_pd(void)
  32860. {
  32861.         uint src = (((REG_IR >> 9) - 1) & 7) + 1;
  32862.         uint ea = EA_AY_PD_32();
  32863.         uint dst = m68ki_read_32(ea);
  32864.         uint res = dst - src;
  32865.  
  32866.         FLAG_N = NFLAG_32(res);
  32867.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  32868.         FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
  32869.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  32870.  
  32871.         m68ki_write_32(ea, FLAG_Z);
  32872. }
  32873.  
  32874.  
  32875. void m68k_op_subq_32_di(void)
  32876. {
  32877.         uint src = (((REG_IR >> 9) - 1) & 7) + 1;
  32878.         uint ea = EA_AY_DI_32();
  32879.         uint dst = m68ki_read_32(ea);
  32880.         uint res = dst - src;
  32881.  
  32882.         FLAG_N = NFLAG_32(res);
  32883.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  32884.         FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
  32885.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  32886.  
  32887.         m68ki_write_32(ea, FLAG_Z);
  32888. }
  32889.  
  32890.  
  32891. void m68k_op_subq_32_ix(void)
  32892. {
  32893.         uint src = (((REG_IR >> 9) - 1) & 7) + 1;
  32894.         uint ea = EA_AY_IX_32();
  32895.         uint dst = m68ki_read_32(ea);
  32896.         uint res = dst - src;
  32897.  
  32898.         FLAG_N = NFLAG_32(res);
  32899.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  32900.         FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
  32901.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  32902.  
  32903.         m68ki_write_32(ea, FLAG_Z);
  32904. }
  32905.  
  32906.  
  32907. void m68k_op_subq_32_aw(void)
  32908. {
  32909.         uint src = (((REG_IR >> 9) - 1) & 7) + 1;
  32910.         uint ea = EA_AW_32();
  32911.         uint dst = m68ki_read_32(ea);
  32912.         uint res = dst - src;
  32913.  
  32914.         FLAG_N = NFLAG_32(res);
  32915.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  32916.         FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
  32917.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  32918.  
  32919.         m68ki_write_32(ea, FLAG_Z);
  32920. }
  32921.  
  32922.  
  32923. void m68k_op_subq_32_al(void)
  32924. {
  32925.         uint src = (((REG_IR >> 9) - 1) & 7) + 1;
  32926.         uint ea = EA_AL_32();
  32927.         uint dst = m68ki_read_32(ea);
  32928.         uint res = dst - src;
  32929.  
  32930.         FLAG_N = NFLAG_32(res);
  32931.         FLAG_Z = MASK_OUT_ABOVE_32(res);
  32932.         FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
  32933.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  32934.  
  32935.         m68ki_write_32(ea, FLAG_Z);
  32936. }
  32937.  
  32938.  
  32939. void m68k_op_subx_8_rr(void)
  32940. {
  32941.         uint* r_dst = &DX;
  32942.         uint src = MASK_OUT_ABOVE_8(DY);
  32943.         uint dst = MASK_OUT_ABOVE_8(*r_dst);
  32944.         uint res = dst - src - XFLAG_AS_1();
  32945.  
  32946.         FLAG_N = NFLAG_8(res);
  32947.         FLAG_X = FLAG_C = CFLAG_8(res);
  32948.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  32949.  
  32950.         res = MASK_OUT_ABOVE_8(res);
  32951.         FLAG_Z |= res;
  32952.  
  32953.         *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
  32954. }
  32955.  
  32956.  
  32957. void m68k_op_subx_16_rr(void)
  32958. {
  32959.         uint* r_dst = &DX;
  32960.         uint src = MASK_OUT_ABOVE_16(DY);
  32961.         uint dst = MASK_OUT_ABOVE_16(*r_dst);
  32962.         uint res = dst - src - XFLAG_AS_1();
  32963.  
  32964.         FLAG_N = NFLAG_16(res);
  32965.         FLAG_X = FLAG_C = CFLAG_16(res);
  32966.         FLAG_V = VFLAG_SUB_16(src, dst, res);
  32967.  
  32968.         res = MASK_OUT_ABOVE_16(res);
  32969.         FLAG_Z |= res;
  32970.  
  32971.         *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
  32972. }
  32973.  
  32974.  
  32975. void m68k_op_subx_32_rr(void)
  32976. {
  32977.         uint* r_dst = &DX;
  32978.         uint src = DY;
  32979.         uint dst = *r_dst;
  32980.         uint res = dst - src - XFLAG_AS_1();
  32981.  
  32982.         FLAG_N = NFLAG_32(res);
  32983.         FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
  32984.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  32985.  
  32986.         res = MASK_OUT_ABOVE_32(res);
  32987.         FLAG_Z |= res;
  32988.  
  32989.         *r_dst = res;
  32990. }
  32991.  
  32992.  
  32993. void m68k_op_subx_8_mm_ax7(void)
  32994. {
  32995.         uint src = OPER_AY_PD_8();
  32996.         uint ea  = EA_A7_PD_8();
  32997.         uint dst = m68ki_read_8(ea);
  32998.         uint res = dst - src - XFLAG_AS_1();
  32999.  
  33000.         FLAG_N = NFLAG_8(res);
  33001.         FLAG_X = FLAG_C = CFLAG_8(res);
  33002.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  33003.  
  33004.         res = MASK_OUT_ABOVE_8(res);
  33005.         FLAG_Z |= res;
  33006.  
  33007.         m68ki_write_8(ea, res);
  33008. }
  33009.  
  33010.  
  33011. void m68k_op_subx_8_mm_ay7(void)
  33012. {
  33013.         uint src = OPER_A7_PD_8();
  33014.         uint ea  = EA_AX_PD_8();
  33015.         uint dst = m68ki_read_8(ea);
  33016.         uint res = dst - src - XFLAG_AS_1();
  33017.  
  33018.         FLAG_N = NFLAG_8(res);
  33019.         FLAG_X = FLAG_C = CFLAG_8(res);
  33020.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  33021.  
  33022.         res = MASK_OUT_ABOVE_8(res);
  33023.         FLAG_Z |= res;
  33024.  
  33025.         m68ki_write_8(ea, res);
  33026. }
  33027.  
  33028.  
  33029. void m68k_op_subx_8_mm_axy7(void)
  33030. {
  33031.         uint src = OPER_A7_PD_8();
  33032.         uint ea  = EA_A7_PD_8();
  33033.         uint dst = m68ki_read_8(ea);
  33034.         uint res = dst - src - XFLAG_AS_1();
  33035.  
  33036.         FLAG_N = NFLAG_8(res);
  33037.         FLAG_X = FLAG_C = CFLAG_8(res);
  33038.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  33039.  
  33040.         res = MASK_OUT_ABOVE_8(res);
  33041.         FLAG_Z |= res;
  33042.  
  33043.         m68ki_write_8(ea, res);
  33044. }
  33045.  
  33046.  
  33047. void m68k_op_subx_8_mm(void)
  33048. {
  33049.         uint src = OPER_AY_PD_8();
  33050.         uint ea  = EA_AX_PD_8();
  33051.         uint dst = m68ki_read_8(ea);
  33052.         uint res = dst - src - XFLAG_AS_1();
  33053.  
  33054.         FLAG_N = NFLAG_8(res);
  33055.         FLAG_X = FLAG_C = CFLAG_8(res);
  33056.         FLAG_V = VFLAG_SUB_8(src, dst, res);
  33057.  
  33058.         res = MASK_OUT_ABOVE_8(res);
  33059.         FLAG_Z |= res;
  33060.  
  33061.         m68ki_write_8(ea, res);
  33062. }
  33063.  
  33064.  
  33065. void m68k_op_subx_16_mm(void)
  33066. {
  33067.         uint src = OPER_AY_PD_16();
  33068.         uint ea  = EA_AX_PD_16();
  33069.         uint dst = m68ki_read_16(ea);
  33070.         uint res = dst - src - XFLAG_AS_1();
  33071.  
  33072.         FLAG_N = NFLAG_16(res);
  33073.         FLAG_X = FLAG_C = CFLAG_16(res);
  33074.         FLAG_V = VFLAG_SUB_16(src, dst, res);
  33075.  
  33076.         res = MASK_OUT_ABOVE_16(res);
  33077.         FLAG_Z |= res;
  33078.  
  33079.         m68ki_write_16(ea, res);
  33080. }
  33081.  
  33082.  
  33083. void m68k_op_subx_32_mm(void)
  33084. {
  33085.         uint src = OPER_AY_PD_32();
  33086.         uint ea  = EA_AX_PD_32();
  33087.         uint dst = m68ki_read_32(ea);
  33088.         uint res = dst - src - XFLAG_AS_1();
  33089.  
  33090.         FLAG_N = NFLAG_32(res);
  33091.         FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
  33092.         FLAG_V = VFLAG_SUB_32(src, dst, res);
  33093.  
  33094.         res = MASK_OUT_ABOVE_32(res);
  33095.         FLAG_Z |= res;
  33096.  
  33097.         m68ki_write_32(ea, res);
  33098. }
  33099.  
  33100.  
  33101. void m68k_op_swap_32(void)
  33102. {
  33103.         uint* r_dst = &DY;
  33104.  
  33105.         FLAG_Z = MASK_OUT_ABOVE_32(*r_dst<<16);
  33106.         *r_dst = (*r_dst>>16) | FLAG_Z;
  33107.  
  33108.         FLAG_Z = *r_dst;
  33109.         FLAG_N = NFLAG_32(*r_dst);
  33110.         FLAG_C = CFLAG_CLEAR;
  33111.         FLAG_V = VFLAG_CLEAR;
  33112. }
  33113.  
  33114.  
  33115. void m68k_op_tas_8_d(void)
  33116. {
  33117.         uint* r_dst = &DY;
  33118.  
  33119.         FLAG_Z = MASK_OUT_ABOVE_8(*r_dst);
  33120.         FLAG_N = NFLAG_8(*r_dst);
  33121.         FLAG_V = VFLAG_CLEAR;
  33122.         FLAG_C = CFLAG_CLEAR;
  33123.         *r_dst |= 0x80;
  33124. }
  33125.  
  33126.  
  33127. void m68k_op_tas_8_ai(void)
  33128. {
  33129.         uint ea = EA_AY_AI_8();
  33130.         uint dst = m68ki_read_8(ea);
  33131.         uint allow_writeback;
  33132.  
  33133.         FLAG_Z = dst;
  33134.         FLAG_N = NFLAG_8(dst);
  33135.         FLAG_V = VFLAG_CLEAR;
  33136.         FLAG_C = CFLAG_CLEAR;
  33137.  
  33138.         /* The Genesis/Megadrive games Gargoyles and Ex-Mutants need the TAS writeback
  33139.        disabled in order to function properly.  Some Amiga software may also rely
  33140.        on this, but only when accessing specific addresses so additional functionality
  33141.        will be needed. */
  33142.         allow_writeback = m68ki_tas_callback();
  33143.  
  33144.         if (allow_writeback==1) m68ki_write_8(ea, dst | 0x80);
  33145. }
  33146.  
  33147.  
  33148. void m68k_op_tas_8_pi(void)
  33149. {
  33150.         uint ea = EA_AY_PI_8();
  33151.         uint dst = m68ki_read_8(ea);
  33152.         uint allow_writeback;
  33153.  
  33154.         FLAG_Z = dst;
  33155.         FLAG_N = NFLAG_8(dst);
  33156.         FLAG_V = VFLAG_CLEAR;
  33157.         FLAG_C = CFLAG_CLEAR;
  33158.  
  33159.         /* The Genesis/Megadrive games Gargoyles and Ex-Mutants need the TAS writeback
  33160.        disabled in order to function properly.  Some Amiga software may also rely
  33161.        on this, but only when accessing specific addresses so additional functionality
  33162.        will be needed. */
  33163.         allow_writeback = m68ki_tas_callback();
  33164.  
  33165.         if (allow_writeback==1) m68ki_write_8(ea, dst | 0x80);
  33166. }
  33167.  
  33168.  
  33169. void m68k_op_tas_8_pi7(void)
  33170. {
  33171.         uint ea = EA_A7_PI_8();
  33172.         uint dst = m68ki_read_8(ea);
  33173.         uint allow_writeback;
  33174.  
  33175.         FLAG_Z = dst;
  33176.         FLAG_N = NFLAG_8(dst);
  33177.         FLAG_V = VFLAG_CLEAR;
  33178.         FLAG_C = CFLAG_CLEAR;
  33179.  
  33180.         /* The Genesis/Megadrive games Gargoyles and Ex-Mutants need the TAS writeback
  33181.        disabled in order to function properly.  Some Amiga software may also rely
  33182.        on this, but only when accessing specific addresses so additional functionality
  33183.        will be needed. */
  33184.         allow_writeback = m68ki_tas_callback();
  33185.  
  33186.         if (allow_writeback==1) m68ki_write_8(ea, dst | 0x80);
  33187. }
  33188.  
  33189.  
  33190. void m68k_op_tas_8_pd(void)
  33191. {
  33192.         uint ea = EA_AY_PD_8();
  33193.         uint dst = m68ki_read_8(ea);
  33194.         uint allow_writeback;
  33195.  
  33196.         FLAG_Z = dst;
  33197.         FLAG_N = NFLAG_8(dst);
  33198.         FLAG_V = VFLAG_CLEAR;
  33199.         FLAG_C = CFLAG_CLEAR;
  33200.  
  33201.         /* The Genesis/Megadrive games Gargoyles and Ex-Mutants need the TAS writeback
  33202.        disabled in order to function properly.  Some Amiga software may also rely
  33203.        on this, but only when accessing specific addresses so additional functionality
  33204.        will be needed. */
  33205.         allow_writeback = m68ki_tas_callback();
  33206.  
  33207.         if (allow_writeback==1) m68ki_write_8(ea, dst | 0x80);
  33208. }
  33209.  
  33210.  
  33211. void m68k_op_tas_8_pd7(void)
  33212. {
  33213.         uint ea = EA_A7_PD_8();
  33214.         uint dst = m68ki_read_8(ea);
  33215.         uint allow_writeback;
  33216.  
  33217.         FLAG_Z = dst;
  33218.         FLAG_N = NFLAG_8(dst);
  33219.         FLAG_V = VFLAG_CLEAR;
  33220.         FLAG_C = CFLAG_CLEAR;
  33221.  
  33222.         /* The Genesis/Megadrive games Gargoyles and Ex-Mutants need the TAS writeback
  33223.        disabled in order to function properly.  Some Amiga software may also rely
  33224.        on this, but only when accessing specific addresses so additional functionality
  33225.        will be needed. */
  33226.         allow_writeback = m68ki_tas_callback();
  33227.  
  33228.         if (allow_writeback==1) m68ki_write_8(ea, dst | 0x80);
  33229. }
  33230.  
  33231.  
  33232. void m68k_op_tas_8_di(void)
  33233. {
  33234.         uint ea = EA_AY_DI_8();
  33235.         uint dst = m68ki_read_8(ea);
  33236.         uint allow_writeback;
  33237.  
  33238.         FLAG_Z = dst;
  33239.         FLAG_N = NFLAG_8(dst);
  33240.         FLAG_V = VFLAG_CLEAR;
  33241.         FLAG_C = CFLAG_CLEAR;
  33242.  
  33243.         /* The Genesis/Megadrive games Gargoyles and Ex-Mutants need the TAS writeback
  33244.        disabled in order to function properly.  Some Amiga software may also rely
  33245.        on this, but only when accessing specific addresses so additional functionality
  33246.        will be needed. */
  33247.         allow_writeback = m68ki_tas_callback();
  33248.  
  33249.         if (allow_writeback==1) m68ki_write_8(ea, dst | 0x80);
  33250. }
  33251.  
  33252.  
  33253. void m68k_op_tas_8_ix(void)
  33254. {
  33255.         uint ea = EA_AY_IX_8();
  33256.         uint dst = m68ki_read_8(ea);
  33257.         uint allow_writeback;
  33258.  
  33259.         FLAG_Z = dst;
  33260.         FLAG_N = NFLAG_8(dst);
  33261.         FLAG_V = VFLAG_CLEAR;
  33262.         FLAG_C = CFLAG_CLEAR;
  33263.  
  33264.         /* The Genesis/Megadrive games Gargoyles and Ex-Mutants need the TAS writeback
  33265.        disabled in order to function properly.  Some Amiga software may also rely
  33266.        on this, but only when accessing specific addresses so additional functionality
  33267.        will be needed. */
  33268.         allow_writeback = m68ki_tas_callback();
  33269.  
  33270.         if (allow_writeback==1) m68ki_write_8(ea, dst | 0x80);
  33271. }
  33272.  
  33273.  
  33274. void m68k_op_tas_8_aw(void)
  33275. {
  33276.         uint ea = EA_AW_8();
  33277.         uint dst = m68ki_read_8(ea);
  33278.         uint allow_writeback;
  33279.  
  33280.         FLAG_Z = dst;
  33281.         FLAG_N = NFLAG_8(dst);
  33282.         FLAG_V = VFLAG_CLEAR;
  33283.         FLAG_C = CFLAG_CLEAR;
  33284.  
  33285.         /* The Genesis/Megadrive games Gargoyles and Ex-Mutants need the TAS writeback
  33286.        disabled in order to function properly.  Some Amiga software may also rely
  33287.        on this, but only when accessing specific addresses so additional functionality
  33288.        will be needed. */
  33289.         allow_writeback = m68ki_tas_callback();
  33290.  
  33291.         if (allow_writeback==1) m68ki_write_8(ea, dst | 0x80);
  33292. }
  33293.  
  33294.  
  33295. void m68k_op_tas_8_al(void)
  33296. {
  33297.         uint ea = EA_AL_8();
  33298.         uint dst = m68ki_read_8(ea);
  33299.         uint allow_writeback;
  33300.  
  33301.         FLAG_Z = dst;
  33302.         FLAG_N = NFLAG_8(dst);
  33303.         FLAG_V = VFLAG_CLEAR;
  33304.         FLAG_C = CFLAG_CLEAR;
  33305.  
  33306.         /* The Genesis/Megadrive games Gargoyles and Ex-Mutants need the TAS writeback
  33307.        disabled in order to function properly.  Some Amiga software may also rely
  33308.        on this, but only when accessing specific addresses so additional functionality
  33309.        will be needed. */
  33310.         allow_writeback = m68ki_tas_callback();
  33311.  
  33312.         if (allow_writeback==1) m68ki_write_8(ea, dst | 0x80);
  33313. }
  33314.  
  33315.  
  33316. void m68k_op_trap(void)
  33317. {
  33318.         /* Trap#n stacks exception frame type 0 */
  33319.         m68ki_exception_trapN(EXCEPTION_TRAP_BASE + (REG_IR & 0xf));    /* HJB 990403 */
  33320. }
  33321.  
  33322.  
  33323. void m68k_op_trapt(void)
  33324. {
  33325.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  33326.         {
  33327.                 m68ki_exception_trap(EXCEPTION_TRAPV);  /* HJB 990403 */
  33328.                 return;
  33329.         }
  33330.         m68ki_exception_illegal();
  33331. }
  33332.  
  33333.  
  33334. void m68k_op_trapt_16(void)
  33335. {
  33336.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  33337.         {
  33338.                 m68ki_exception_trap(EXCEPTION_TRAPV);  /* HJB 990403 */
  33339.                 return;
  33340.         }
  33341.         m68ki_exception_illegal();
  33342. }
  33343.  
  33344.  
  33345. void m68k_op_trapt_32(void)
  33346. {
  33347.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  33348.         {
  33349.                 m68ki_exception_trap(EXCEPTION_TRAPV);  /* HJB 990403 */
  33350.                 return;
  33351.         }
  33352.         m68ki_exception_illegal();
  33353. }
  33354.  
  33355.  
  33356. void m68k_op_trapf(void)
  33357. {
  33358.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  33359.         {
  33360.                 return;
  33361.         }
  33362.         m68ki_exception_illegal();
  33363. }
  33364.  
  33365.  
  33366. void m68k_op_trapf_16(void)
  33367. {
  33368.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  33369.         {
  33370.                 REG_PC += 2;
  33371.                 return;
  33372.         }
  33373.         m68ki_exception_illegal();
  33374. }
  33375.  
  33376.  
  33377. void m68k_op_trapf_32(void)
  33378. {
  33379.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  33380.         {
  33381.                 REG_PC += 4;
  33382.                 return;
  33383.         }
  33384.         m68ki_exception_illegal();
  33385. }
  33386.  
  33387.  
  33388. void m68k_op_traphi(void)
  33389. {
  33390.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  33391.         {
  33392.                 if(COND_HI())
  33393.                         m68ki_exception_trap(EXCEPTION_TRAPV);  /* HJB 990403 */
  33394.                 return;
  33395.         }
  33396.         m68ki_exception_illegal();
  33397. }
  33398.  
  33399.  
  33400. void m68k_op_trapls(void)
  33401. {
  33402.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  33403.         {
  33404.                 if(COND_LS())
  33405.                         m68ki_exception_trap(EXCEPTION_TRAPV);  /* HJB 990403 */
  33406.                 return;
  33407.         }
  33408.         m68ki_exception_illegal();
  33409. }
  33410.  
  33411.  
  33412. void m68k_op_trapcc(void)
  33413. {
  33414.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  33415.         {
  33416.                 if(COND_CC())
  33417.                         m68ki_exception_trap(EXCEPTION_TRAPV);  /* HJB 990403 */
  33418.                 return;
  33419.         }
  33420.         m68ki_exception_illegal();
  33421. }
  33422.  
  33423.  
  33424. void m68k_op_trapcs(void)
  33425. {
  33426.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  33427.         {
  33428.                 if(COND_CS())
  33429.                         m68ki_exception_trap(EXCEPTION_TRAPV);  /* HJB 990403 */
  33430.                 return;
  33431.         }
  33432.         m68ki_exception_illegal();
  33433. }
  33434.  
  33435.  
  33436. void m68k_op_trapne(void)
  33437. {
  33438.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  33439.         {
  33440.                 if(COND_NE())
  33441.                         m68ki_exception_trap(EXCEPTION_TRAPV);  /* HJB 990403 */
  33442.                 return;
  33443.         }
  33444.         m68ki_exception_illegal();
  33445. }
  33446.  
  33447.  
  33448. void m68k_op_trapeq(void)
  33449. {
  33450.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  33451.         {
  33452.                 if(COND_EQ())
  33453.                         m68ki_exception_trap(EXCEPTION_TRAPV);  /* HJB 990403 */
  33454.                 return;
  33455.         }
  33456.         m68ki_exception_illegal();
  33457. }
  33458.  
  33459.  
  33460. void m68k_op_trapvc(void)
  33461. {
  33462.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  33463.         {
  33464.                 if(COND_VC())
  33465.                         m68ki_exception_trap(EXCEPTION_TRAPV);  /* HJB 990403 */
  33466.                 return;
  33467.         }
  33468.         m68ki_exception_illegal();
  33469. }
  33470.  
  33471.  
  33472. void m68k_op_trapvs(void)
  33473. {
  33474.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  33475.         {
  33476.                 if(COND_VS())
  33477.                         m68ki_exception_trap(EXCEPTION_TRAPV);  /* HJB 990403 */
  33478.                 return;
  33479.         }
  33480.         m68ki_exception_illegal();
  33481. }
  33482.  
  33483.  
  33484. void m68k_op_trappl(void)
  33485. {
  33486.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  33487.         {
  33488.                 if(COND_PL())
  33489.                         m68ki_exception_trap(EXCEPTION_TRAPV);  /* HJB 990403 */
  33490.                 return;
  33491.         }
  33492.         m68ki_exception_illegal();
  33493. }
  33494.  
  33495.  
  33496. void m68k_op_trapmi(void)
  33497. {
  33498.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  33499.         {
  33500.                 if(COND_MI())
  33501.                         m68ki_exception_trap(EXCEPTION_TRAPV);  /* HJB 990403 */
  33502.                 return;
  33503.         }
  33504.         m68ki_exception_illegal();
  33505. }
  33506.  
  33507.  
  33508. void m68k_op_trapge(void)
  33509. {
  33510.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  33511.         {
  33512.                 if(COND_GE())
  33513.                         m68ki_exception_trap(EXCEPTION_TRAPV);  /* HJB 990403 */
  33514.                 return;
  33515.         }
  33516.         m68ki_exception_illegal();
  33517. }
  33518.  
  33519.  
  33520. void m68k_op_traplt(void)
  33521. {
  33522.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  33523.         {
  33524.                 if(COND_LT())
  33525.                         m68ki_exception_trap(EXCEPTION_TRAPV);  /* HJB 990403 */
  33526.                 return;
  33527.         }
  33528.         m68ki_exception_illegal();
  33529. }
  33530.  
  33531.  
  33532. void m68k_op_trapgt(void)
  33533. {
  33534.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  33535.         {
  33536.                 if(COND_GT())
  33537.                         m68ki_exception_trap(EXCEPTION_TRAPV);  /* HJB 990403 */
  33538.                 return;
  33539.         }
  33540.         m68ki_exception_illegal();
  33541. }
  33542.  
  33543.  
  33544. void m68k_op_traple(void)
  33545. {
  33546.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  33547.         {
  33548.                 if(COND_LE())
  33549.                         m68ki_exception_trap(EXCEPTION_TRAPV);  /* HJB 990403 */
  33550.                 return;
  33551.         }
  33552.         m68ki_exception_illegal();
  33553. }
  33554.  
  33555.  
  33556. void m68k_op_traphi_16(void)
  33557. {
  33558.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  33559.         {
  33560.                 if(COND_HI())
  33561.                 {
  33562.                         m68ki_exception_trap(EXCEPTION_TRAPV);  /* HJB 990403 */
  33563.                         return;
  33564.                 }
  33565.                 REG_PC += 2;
  33566.                 return;
  33567.         }
  33568.         m68ki_exception_illegal();
  33569. }
  33570.  
  33571.  
  33572. void m68k_op_trapls_16(void)
  33573. {
  33574.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  33575.         {
  33576.                 if(COND_LS())
  33577.                 {
  33578.                         m68ki_exception_trap(EXCEPTION_TRAPV);  /* HJB 990403 */
  33579.                         return;
  33580.                 }
  33581.                 REG_PC += 2;
  33582.                 return;
  33583.         }
  33584.         m68ki_exception_illegal();
  33585. }
  33586.  
  33587.  
  33588. void m68k_op_trapcc_16(void)
  33589. {
  33590.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  33591.         {
  33592.                 if(COND_CC())
  33593.                 {
  33594.                         m68ki_exception_trap(EXCEPTION_TRAPV);  /* HJB 990403 */
  33595.                         return;
  33596.                 }
  33597.                 REG_PC += 2;
  33598.                 return;
  33599.         }
  33600.         m68ki_exception_illegal();
  33601. }
  33602.  
  33603.  
  33604. void m68k_op_trapcs_16(void)
  33605. {
  33606.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  33607.         {
  33608.                 if(COND_CS())
  33609.                 {
  33610.                         m68ki_exception_trap(EXCEPTION_TRAPV);  /* HJB 990403 */
  33611.                         return;
  33612.                 }
  33613.                 REG_PC += 2;
  33614.                 return;
  33615.         }
  33616.         m68ki_exception_illegal();
  33617. }
  33618.  
  33619.  
  33620. void m68k_op_trapne_16(void)
  33621. {
  33622.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  33623.         {
  33624.                 if(COND_NE())
  33625.                 {
  33626.                         m68ki_exception_trap(EXCEPTION_TRAPV);  /* HJB 990403 */
  33627.                         return;
  33628.                 }
  33629.                 REG_PC += 2;
  33630.                 return;
  33631.         }
  33632.         m68ki_exception_illegal();
  33633. }
  33634.  
  33635.  
  33636. void m68k_op_trapeq_16(void)
  33637. {
  33638.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  33639.         {
  33640.                 if(COND_EQ())
  33641.                 {
  33642.                         m68ki_exception_trap(EXCEPTION_TRAPV);  /* HJB 990403 */
  33643.                         return;
  33644.                 }
  33645.                 REG_PC += 2;
  33646.                 return;
  33647.         }
  33648.         m68ki_exception_illegal();
  33649. }
  33650.  
  33651.  
  33652. void m68k_op_trapvc_16(void)
  33653. {
  33654.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  33655.         {
  33656.                 if(COND_VC())
  33657.                 {
  33658.                         m68ki_exception_trap(EXCEPTION_TRAPV);  /* HJB 990403 */
  33659.                         return;
  33660.                 }
  33661.                 REG_PC += 2;
  33662.                 return;
  33663.         }
  33664.         m68ki_exception_illegal();
  33665. }
  33666.  
  33667.  
  33668. void m68k_op_trapvs_16(void)
  33669. {
  33670.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  33671.         {
  33672.                 if(COND_VS())
  33673.                 {
  33674.                         m68ki_exception_trap(EXCEPTION_TRAPV);  /* HJB 990403 */
  33675.                         return;
  33676.                 }
  33677.                 REG_PC += 2;
  33678.                 return;
  33679.         }
  33680.         m68ki_exception_illegal();
  33681. }
  33682.  
  33683.  
  33684. void m68k_op_trappl_16(void)
  33685. {
  33686.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  33687.         {
  33688.                 if(COND_PL())
  33689.                 {
  33690.                         m68ki_exception_trap(EXCEPTION_TRAPV);  /* HJB 990403 */
  33691.                         return;
  33692.                 }
  33693.                 REG_PC += 2;
  33694.                 return;
  33695.         }
  33696.         m68ki_exception_illegal();
  33697. }
  33698.  
  33699.  
  33700. void m68k_op_trapmi_16(void)
  33701. {
  33702.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  33703.         {
  33704.                 if(COND_MI())
  33705.                 {
  33706.                         m68ki_exception_trap(EXCEPTION_TRAPV);  /* HJB 990403 */
  33707.                         return;
  33708.                 }
  33709.                 REG_PC += 2;
  33710.                 return;
  33711.         }
  33712.         m68ki_exception_illegal();
  33713. }
  33714.  
  33715.  
  33716. void m68k_op_trapge_16(void)
  33717. {
  33718.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  33719.         {
  33720.                 if(COND_GE())
  33721.                 {
  33722.                         m68ki_exception_trap(EXCEPTION_TRAPV);  /* HJB 990403 */
  33723.                         return;
  33724.                 }
  33725.                 REG_PC += 2;
  33726.                 return;
  33727.         }
  33728.         m68ki_exception_illegal();
  33729. }
  33730.  
  33731.  
  33732. void m68k_op_traplt_16(void)
  33733. {
  33734.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  33735.         {
  33736.                 if(COND_LT())
  33737.                 {
  33738.                         m68ki_exception_trap(EXCEPTION_TRAPV);  /* HJB 990403 */
  33739.                         return;
  33740.                 }
  33741.                 REG_PC += 2;
  33742.                 return;
  33743.         }
  33744.         m68ki_exception_illegal();
  33745. }
  33746.  
  33747.  
  33748. void m68k_op_trapgt_16(void)
  33749. {
  33750.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  33751.         {
  33752.                 if(COND_GT())
  33753.                 {
  33754.                         m68ki_exception_trap(EXCEPTION_TRAPV);  /* HJB 990403 */
  33755.                         return;
  33756.                 }
  33757.                 REG_PC += 2;
  33758.                 return;
  33759.         }
  33760.         m68ki_exception_illegal();
  33761. }
  33762.  
  33763.  
  33764. void m68k_op_traple_16(void)
  33765. {
  33766.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  33767.         {
  33768.                 if(COND_LE())
  33769.                 {
  33770.                         m68ki_exception_trap(EXCEPTION_TRAPV);  /* HJB 990403 */
  33771.                         return;
  33772.                 }
  33773.                 REG_PC += 2;
  33774.                 return;
  33775.         }
  33776.         m68ki_exception_illegal();
  33777. }
  33778.  
  33779.  
  33780. void m68k_op_traphi_32(void)
  33781. {
  33782.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  33783.         {
  33784.                 if(COND_HI())
  33785.                 {
  33786.                         m68ki_exception_trap(EXCEPTION_TRAPV);  /* HJB 990403 */
  33787.                         return;
  33788.                 }
  33789.                 REG_PC += 4;
  33790.                 return;
  33791.         }
  33792.         m68ki_exception_illegal();
  33793. }
  33794.  
  33795.  
  33796. void m68k_op_trapls_32(void)
  33797. {
  33798.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  33799.         {
  33800.                 if(COND_LS())
  33801.                 {
  33802.                         m68ki_exception_trap(EXCEPTION_TRAPV);  /* HJB 990403 */
  33803.                         return;
  33804.                 }
  33805.                 REG_PC += 4;
  33806.                 return;
  33807.         }
  33808.         m68ki_exception_illegal();
  33809. }
  33810.  
  33811.  
  33812. void m68k_op_trapcc_32(void)
  33813. {
  33814.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  33815.         {
  33816.                 if(COND_CC())
  33817.                 {
  33818.                         m68ki_exception_trap(EXCEPTION_TRAPV);  /* HJB 990403 */
  33819.                         return;
  33820.                 }
  33821.                 REG_PC += 4;
  33822.                 return;
  33823.         }
  33824.         m68ki_exception_illegal();
  33825. }
  33826.  
  33827.  
  33828. void m68k_op_trapcs_32(void)
  33829. {
  33830.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  33831.         {
  33832.                 if(COND_CS())
  33833.                 {
  33834.                         m68ki_exception_trap(EXCEPTION_TRAPV);  /* HJB 990403 */
  33835.                         return;
  33836.                 }
  33837.                 REG_PC += 4;
  33838.                 return;
  33839.         }
  33840.         m68ki_exception_illegal();
  33841. }
  33842.  
  33843.  
  33844. void m68k_op_trapne_32(void)
  33845. {
  33846.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  33847.         {
  33848.                 if(COND_NE())
  33849.                 {
  33850.                         m68ki_exception_trap(EXCEPTION_TRAPV);  /* HJB 990403 */
  33851.                         return;
  33852.                 }
  33853.                 REG_PC += 4;
  33854.                 return;
  33855.         }
  33856.         m68ki_exception_illegal();
  33857. }
  33858.  
  33859.  
  33860. void m68k_op_trapeq_32(void)
  33861. {
  33862.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  33863.         {
  33864.                 if(COND_EQ())
  33865.                 {
  33866.                         m68ki_exception_trap(EXCEPTION_TRAPV);  /* HJB 990403 */
  33867.                         return;
  33868.                 }
  33869.                 REG_PC += 4;
  33870.                 return;
  33871.         }
  33872.         m68ki_exception_illegal();
  33873. }
  33874.  
  33875.  
  33876. void m68k_op_trapvc_32(void)
  33877. {
  33878.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  33879.         {
  33880.                 if(COND_VC())
  33881.                 {
  33882.                         m68ki_exception_trap(EXCEPTION_TRAPV);  /* HJB 990403 */
  33883.                         return;
  33884.                 }
  33885.                 REG_PC += 4;
  33886.                 return;
  33887.         }
  33888.         m68ki_exception_illegal();
  33889. }
  33890.  
  33891.  
  33892. void m68k_op_trapvs_32(void)
  33893. {
  33894.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  33895.         {
  33896.                 if(COND_VS())
  33897.                 {
  33898.                         m68ki_exception_trap(EXCEPTION_TRAPV);  /* HJB 990403 */
  33899.                         return;
  33900.                 }
  33901.                 REG_PC += 4;
  33902.                 return;
  33903.         }
  33904.         m68ki_exception_illegal();
  33905. }
  33906.  
  33907.  
  33908. void m68k_op_trappl_32(void)
  33909. {
  33910.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  33911.         {
  33912.                 if(COND_PL())
  33913.                 {
  33914.                         m68ki_exception_trap(EXCEPTION_TRAPV);  /* HJB 990403 */
  33915.                         return;
  33916.                 }
  33917.                 REG_PC += 4;
  33918.                 return;
  33919.         }
  33920.         m68ki_exception_illegal();
  33921. }
  33922.  
  33923.  
  33924. void m68k_op_trapmi_32(void)
  33925. {
  33926.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  33927.         {
  33928.                 if(COND_MI())
  33929.                 {
  33930.                         m68ki_exception_trap(EXCEPTION_TRAPV);  /* HJB 990403 */
  33931.                         return;
  33932.                 }
  33933.                 REG_PC += 4;
  33934.                 return;
  33935.         }
  33936.         m68ki_exception_illegal();
  33937. }
  33938.  
  33939.  
  33940. void m68k_op_trapge_32(void)
  33941. {
  33942.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  33943.         {
  33944.                 if(COND_GE())
  33945.                 {
  33946.                         m68ki_exception_trap(EXCEPTION_TRAPV);  /* HJB 990403 */
  33947.                         return;
  33948.                 }
  33949.                 REG_PC += 4;
  33950.                 return;
  33951.         }
  33952.         m68ki_exception_illegal();
  33953. }
  33954.  
  33955.  
  33956. void m68k_op_traplt_32(void)
  33957. {
  33958.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  33959.         {
  33960.                 if(COND_LT())
  33961.                 {
  33962.                         m68ki_exception_trap(EXCEPTION_TRAPV);  /* HJB 990403 */
  33963.                         return;
  33964.                 }
  33965.                 REG_PC += 4;
  33966.                 return;
  33967.         }
  33968.         m68ki_exception_illegal();
  33969. }
  33970.  
  33971.  
  33972. void m68k_op_trapgt_32(void)
  33973. {
  33974.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  33975.         {
  33976.                 if(COND_GT())
  33977.                 {
  33978.                         m68ki_exception_trap(EXCEPTION_TRAPV);  /* HJB 990403 */
  33979.                         return;
  33980.                 }
  33981.                 REG_PC += 4;
  33982.                 return;
  33983.         }
  33984.         m68ki_exception_illegal();
  33985. }
  33986.  
  33987.  
  33988. void m68k_op_traple_32(void)
  33989. {
  33990.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  33991.         {
  33992.                 if(COND_LE())
  33993.                 {
  33994.                         m68ki_exception_trap(EXCEPTION_TRAPV);  /* HJB 990403 */
  33995.                         return;
  33996.                 }
  33997.                 REG_PC += 4;
  33998.                 return;
  33999.         }
  34000.         m68ki_exception_illegal();
  34001. }
  34002.  
  34003.  
  34004. void m68k_op_trapv(void)
  34005. {
  34006.         if(COND_VC())
  34007.         {
  34008.                 return;
  34009.         }
  34010.         m68ki_exception_trap(EXCEPTION_TRAPV);  /* HJB 990403 */
  34011. }
  34012.  
  34013.  
  34014. void m68k_op_tst_8_d(void)
  34015. {
  34016.         uint res = MASK_OUT_ABOVE_8(DY);
  34017.  
  34018.         FLAG_N = NFLAG_8(res);
  34019.         FLAG_Z = res;
  34020.         FLAG_V = VFLAG_CLEAR;
  34021.         FLAG_C = CFLAG_CLEAR;
  34022. }
  34023.  
  34024.  
  34025. void m68k_op_tst_8_ai(void)
  34026. {
  34027.         uint res = OPER_AY_AI_8();
  34028.  
  34029.         FLAG_N = NFLAG_8(res);
  34030.         FLAG_Z = res;
  34031.         FLAG_V = VFLAG_CLEAR;
  34032.         FLAG_C = CFLAG_CLEAR;
  34033. }
  34034.  
  34035.  
  34036. void m68k_op_tst_8_pi(void)
  34037. {
  34038.         uint res = OPER_AY_PI_8();
  34039.  
  34040.         FLAG_N = NFLAG_8(res);
  34041.         FLAG_Z = res;
  34042.         FLAG_V = VFLAG_CLEAR;
  34043.         FLAG_C = CFLAG_CLEAR;
  34044. }
  34045.  
  34046.  
  34047. void m68k_op_tst_8_pi7(void)
  34048. {
  34049.         uint res = OPER_A7_PI_8();
  34050.  
  34051.         FLAG_N = NFLAG_8(res);
  34052.         FLAG_Z = res;
  34053.         FLAG_V = VFLAG_CLEAR;
  34054.         FLAG_C = CFLAG_CLEAR;
  34055. }
  34056.  
  34057.  
  34058. void m68k_op_tst_8_pd(void)
  34059. {
  34060.         uint res = OPER_AY_PD_8();
  34061.  
  34062.         FLAG_N = NFLAG_8(res);
  34063.         FLAG_Z = res;
  34064.         FLAG_V = VFLAG_CLEAR;
  34065.         FLAG_C = CFLAG_CLEAR;
  34066. }
  34067.  
  34068.  
  34069. void m68k_op_tst_8_pd7(void)
  34070. {
  34071.         uint res = OPER_A7_PD_8();
  34072.  
  34073.         FLAG_N = NFLAG_8(res);
  34074.         FLAG_Z = res;
  34075.         FLAG_V = VFLAG_CLEAR;
  34076.         FLAG_C = CFLAG_CLEAR;
  34077. }
  34078.  
  34079.  
  34080. void m68k_op_tst_8_di(void)
  34081. {
  34082.         uint res = OPER_AY_DI_8();
  34083.  
  34084.         FLAG_N = NFLAG_8(res);
  34085.         FLAG_Z = res;
  34086.         FLAG_V = VFLAG_CLEAR;
  34087.         FLAG_C = CFLAG_CLEAR;
  34088. }
  34089.  
  34090.  
  34091. void m68k_op_tst_8_ix(void)
  34092. {
  34093.         uint res = OPER_AY_IX_8();
  34094.  
  34095.         FLAG_N = NFLAG_8(res);
  34096.         FLAG_Z = res;
  34097.         FLAG_V = VFLAG_CLEAR;
  34098.         FLAG_C = CFLAG_CLEAR;
  34099. }
  34100.  
  34101.  
  34102. void m68k_op_tst_8_aw(void)
  34103. {
  34104.         uint res = OPER_AW_8();
  34105.  
  34106.         FLAG_N = NFLAG_8(res);
  34107.         FLAG_Z = res;
  34108.         FLAG_V = VFLAG_CLEAR;
  34109.         FLAG_C = CFLAG_CLEAR;
  34110. }
  34111.  
  34112.  
  34113. void m68k_op_tst_8_al(void)
  34114. {
  34115.         uint res = OPER_AL_8();
  34116.  
  34117.         FLAG_N = NFLAG_8(res);
  34118.         FLAG_Z = res;
  34119.         FLAG_V = VFLAG_CLEAR;
  34120.         FLAG_C = CFLAG_CLEAR;
  34121. }
  34122.  
  34123.  
  34124. void m68k_op_tst_8_pcdi(void)
  34125. {
  34126.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  34127.         {
  34128.                 uint res = OPER_PCDI_8();
  34129.  
  34130.                 FLAG_N = NFLAG_8(res);
  34131.                 FLAG_Z = res;
  34132.                 FLAG_V = VFLAG_CLEAR;
  34133.                 FLAG_C = CFLAG_CLEAR;
  34134.                 return;
  34135.         }
  34136.         m68ki_exception_illegal();
  34137. }
  34138.  
  34139.  
  34140. void m68k_op_tst_8_pcix(void)
  34141. {
  34142.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  34143.         {
  34144.                 uint res = OPER_PCIX_8();
  34145.  
  34146.                 FLAG_N = NFLAG_8(res);
  34147.                 FLAG_Z = res;
  34148.                 FLAG_V = VFLAG_CLEAR;
  34149.                 FLAG_C = CFLAG_CLEAR;
  34150.                 return;
  34151.         }
  34152.         m68ki_exception_illegal();
  34153. }
  34154.  
  34155.  
  34156. void m68k_op_tst_8_i(void)
  34157. {
  34158.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  34159.         {
  34160.                 uint res = OPER_I_8();
  34161.  
  34162.                 FLAG_N = NFLAG_8(res);
  34163.                 FLAG_Z = res;
  34164.                 FLAG_V = VFLAG_CLEAR;
  34165.                 FLAG_C = CFLAG_CLEAR;
  34166.                 return;
  34167.         }
  34168.         m68ki_exception_illegal();
  34169. }
  34170.  
  34171.  
  34172. void m68k_op_tst_16_d(void)
  34173. {
  34174.         uint res = MASK_OUT_ABOVE_16(DY);
  34175.  
  34176.         FLAG_N = NFLAG_16(res);
  34177.         FLAG_Z = res;
  34178.         FLAG_V = VFLAG_CLEAR;
  34179.         FLAG_C = CFLAG_CLEAR;
  34180. }
  34181.  
  34182.  
  34183. void m68k_op_tst_16_a(void)
  34184. {
  34185.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  34186.         {
  34187.                 uint res = MAKE_INT_16(AY);
  34188.  
  34189.                 FLAG_N = NFLAG_16(res);
  34190.                 FLAG_Z = res;
  34191.                 FLAG_V = VFLAG_CLEAR;
  34192.                 FLAG_C = CFLAG_CLEAR;
  34193.                 return;
  34194.         }
  34195.         m68ki_exception_illegal();
  34196. }
  34197.  
  34198.  
  34199. void m68k_op_tst_16_ai(void)
  34200. {
  34201.         uint res = OPER_AY_AI_16();
  34202.  
  34203.         FLAG_N = NFLAG_16(res);
  34204.         FLAG_Z = res;
  34205.         FLAG_V = VFLAG_CLEAR;
  34206.         FLAG_C = CFLAG_CLEAR;
  34207. }
  34208.  
  34209.  
  34210. void m68k_op_tst_16_pi(void)
  34211. {
  34212.         uint res = OPER_AY_PI_16();
  34213.  
  34214.         FLAG_N = NFLAG_16(res);
  34215.         FLAG_Z = res;
  34216.         FLAG_V = VFLAG_CLEAR;
  34217.         FLAG_C = CFLAG_CLEAR;
  34218. }
  34219.  
  34220.  
  34221. void m68k_op_tst_16_pd(void)
  34222. {
  34223.         uint res = OPER_AY_PD_16();
  34224.  
  34225.         FLAG_N = NFLAG_16(res);
  34226.         FLAG_Z = res;
  34227.         FLAG_V = VFLAG_CLEAR;
  34228.         FLAG_C = CFLAG_CLEAR;
  34229. }
  34230.  
  34231.  
  34232. void m68k_op_tst_16_di(void)
  34233. {
  34234.         uint res = OPER_AY_DI_16();
  34235.  
  34236.         FLAG_N = NFLAG_16(res);
  34237.         FLAG_Z = res;
  34238.         FLAG_V = VFLAG_CLEAR;
  34239.         FLAG_C = CFLAG_CLEAR;
  34240. }
  34241.  
  34242.  
  34243. void m68k_op_tst_16_ix(void)
  34244. {
  34245.         uint res = OPER_AY_IX_16();
  34246.  
  34247.         FLAG_N = NFLAG_16(res);
  34248.         FLAG_Z = res;
  34249.         FLAG_V = VFLAG_CLEAR;
  34250.         FLAG_C = CFLAG_CLEAR;
  34251. }
  34252.  
  34253.  
  34254. void m68k_op_tst_16_aw(void)
  34255. {
  34256.         uint res = OPER_AW_16();
  34257.  
  34258.         FLAG_N = NFLAG_16(res);
  34259.         FLAG_Z = res;
  34260.         FLAG_V = VFLAG_CLEAR;
  34261.         FLAG_C = CFLAG_CLEAR;
  34262. }
  34263.  
  34264.  
  34265. void m68k_op_tst_16_al(void)
  34266. {
  34267.         uint res = OPER_AL_16();
  34268.  
  34269.         FLAG_N = NFLAG_16(res);
  34270.         FLAG_Z = res;
  34271.         FLAG_V = VFLAG_CLEAR;
  34272.         FLAG_C = CFLAG_CLEAR;
  34273. }
  34274.  
  34275.  
  34276. void m68k_op_tst_16_pcdi(void)
  34277. {
  34278.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  34279.         {
  34280.                 uint res = OPER_PCDI_16();
  34281.  
  34282.                 FLAG_N = NFLAG_16(res);
  34283.                 FLAG_Z = res;
  34284.                 FLAG_V = VFLAG_CLEAR;
  34285.                 FLAG_C = CFLAG_CLEAR;
  34286.                 return;
  34287.         }
  34288.         m68ki_exception_illegal();
  34289. }
  34290.  
  34291.  
  34292. void m68k_op_tst_16_pcix(void)
  34293. {
  34294.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  34295.         {
  34296.                 uint res = OPER_PCIX_16();
  34297.  
  34298.                 FLAG_N = NFLAG_16(res);
  34299.                 FLAG_Z = res;
  34300.                 FLAG_V = VFLAG_CLEAR;
  34301.                 FLAG_C = CFLAG_CLEAR;
  34302.                 return;
  34303.         }
  34304.         m68ki_exception_illegal();
  34305. }
  34306.  
  34307.  
  34308. void m68k_op_tst_16_i(void)
  34309. {
  34310.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  34311.         {
  34312.                 uint res = OPER_I_16();
  34313.  
  34314.                 FLAG_N = NFLAG_16(res);
  34315.                 FLAG_Z = res;
  34316.                 FLAG_V = VFLAG_CLEAR;
  34317.                 FLAG_C = CFLAG_CLEAR;
  34318.                 return;
  34319.         }
  34320.         m68ki_exception_illegal();
  34321. }
  34322.  
  34323.  
  34324. void m68k_op_tst_32_d(void)
  34325. {
  34326.         uint res = DY;
  34327.  
  34328.         FLAG_N = NFLAG_32(res);
  34329.         FLAG_Z = res;
  34330.         FLAG_V = VFLAG_CLEAR;
  34331.         FLAG_C = CFLAG_CLEAR;
  34332. }
  34333.  
  34334.  
  34335. void m68k_op_tst_32_a(void)
  34336. {
  34337.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  34338.         {
  34339.                 uint res = AY;
  34340.  
  34341.                 FLAG_N = NFLAG_32(res);
  34342.                 FLAG_Z = res;
  34343.                 FLAG_V = VFLAG_CLEAR;
  34344.                 FLAG_C = CFLAG_CLEAR;
  34345.                 return;
  34346.         }
  34347.         m68ki_exception_illegal();
  34348. }
  34349.  
  34350.  
  34351. void m68k_op_tst_32_ai(void)
  34352. {
  34353.         uint res = OPER_AY_AI_32();
  34354.  
  34355.         FLAG_N = NFLAG_32(res);
  34356.         FLAG_Z = res;
  34357.         FLAG_V = VFLAG_CLEAR;
  34358.         FLAG_C = CFLAG_CLEAR;
  34359. }
  34360.  
  34361.  
  34362. void m68k_op_tst_32_pi(void)
  34363. {
  34364.         uint res = OPER_AY_PI_32();
  34365.  
  34366.         FLAG_N = NFLAG_32(res);
  34367.         FLAG_Z = res;
  34368.         FLAG_V = VFLAG_CLEAR;
  34369.         FLAG_C = CFLAG_CLEAR;
  34370. }
  34371.  
  34372.  
  34373. void m68k_op_tst_32_pd(void)
  34374. {
  34375.         uint res = OPER_AY_PD_32();
  34376.  
  34377.         FLAG_N = NFLAG_32(res);
  34378.         FLAG_Z = res;
  34379.         FLAG_V = VFLAG_CLEAR;
  34380.         FLAG_C = CFLAG_CLEAR;
  34381. }
  34382.  
  34383.  
  34384. void m68k_op_tst_32_di(void)
  34385. {
  34386.         uint res = OPER_AY_DI_32();
  34387.  
  34388.         FLAG_N = NFLAG_32(res);
  34389.         FLAG_Z = res;
  34390.         FLAG_V = VFLAG_CLEAR;
  34391.         FLAG_C = CFLAG_CLEAR;
  34392. }
  34393.  
  34394.  
  34395. void m68k_op_tst_32_ix(void)
  34396. {
  34397.         uint res = OPER_AY_IX_32();
  34398.  
  34399.         FLAG_N = NFLAG_32(res);
  34400.         FLAG_Z = res;
  34401.         FLAG_V = VFLAG_CLEAR;
  34402.         FLAG_C = CFLAG_CLEAR;
  34403. }
  34404.  
  34405.  
  34406. void m68k_op_tst_32_aw(void)
  34407. {
  34408.         uint res = OPER_AW_32();
  34409.  
  34410.         FLAG_N = NFLAG_32(res);
  34411.         FLAG_Z = res;
  34412.         FLAG_V = VFLAG_CLEAR;
  34413.         FLAG_C = CFLAG_CLEAR;
  34414. }
  34415.  
  34416.  
  34417. void m68k_op_tst_32_al(void)
  34418. {
  34419.         uint res = OPER_AL_32();
  34420.  
  34421.         FLAG_N = NFLAG_32(res);
  34422.         FLAG_Z = res;
  34423.         FLAG_V = VFLAG_CLEAR;
  34424.         FLAG_C = CFLAG_CLEAR;
  34425. }
  34426.  
  34427.  
  34428. void m68k_op_tst_32_pcdi(void)
  34429. {
  34430.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  34431.         {
  34432.                 uint res = OPER_PCDI_32();
  34433.  
  34434.                 FLAG_N = NFLAG_32(res);
  34435.                 FLAG_Z = res;
  34436.                 FLAG_V = VFLAG_CLEAR;
  34437.                 FLAG_C = CFLAG_CLEAR;
  34438.                 return;
  34439.         }
  34440.         m68ki_exception_illegal();
  34441. }
  34442.  
  34443.  
  34444. void m68k_op_tst_32_pcix(void)
  34445. {
  34446.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  34447.         {
  34448.                 uint res = OPER_PCIX_32();
  34449.  
  34450.                 FLAG_N = NFLAG_32(res);
  34451.                 FLAG_Z = res;
  34452.                 FLAG_V = VFLAG_CLEAR;
  34453.                 FLAG_C = CFLAG_CLEAR;
  34454.                 return;
  34455.         }
  34456.         m68ki_exception_illegal();
  34457. }
  34458.  
  34459.  
  34460. void m68k_op_tst_32_i(void)
  34461. {
  34462.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  34463.         {
  34464.                 uint res = OPER_I_32();
  34465.  
  34466.                 FLAG_N = NFLAG_32(res);
  34467.                 FLAG_Z = res;
  34468.                 FLAG_V = VFLAG_CLEAR;
  34469.                 FLAG_C = CFLAG_CLEAR;
  34470.                 return;
  34471.         }
  34472.         m68ki_exception_illegal();
  34473. }
  34474.  
  34475.  
  34476. void m68k_op_unlk_32_a7(void)
  34477. {
  34478.         REG_A[7] = m68ki_read_32(REG_A[7]);
  34479. }
  34480.  
  34481.  
  34482. void m68k_op_unlk_32(void)
  34483. {
  34484.         uint* r_dst = &AY;
  34485.  
  34486.         REG_A[7] = *r_dst;
  34487.         *r_dst = m68ki_pull_32();
  34488. }
  34489.  
  34490.  
  34491. void m68k_op_unpk_16_rr(void)
  34492. {
  34493.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  34494.         {
  34495.                 /* Note: DX and DY are reversed in Motorola's docs */
  34496.                 uint src = DY;
  34497.                 uint* r_dst = &DX;
  34498.  
  34499.                 *r_dst = MASK_OUT_BELOW_16(*r_dst) | (((((src << 4) & 0x0f00) | (src & 0x000f)) + OPER_I_16()) & 0xffff);
  34500.                 return;
  34501.         }
  34502.         m68ki_exception_illegal();
  34503. }
  34504.  
  34505.  
  34506. void m68k_op_unpk_16_mm_ax7(void)
  34507. {
  34508.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  34509.         {
  34510.                 /* Note: AX and AY are reversed in Motorola's docs */
  34511.                 uint src = OPER_AY_PD_8();
  34512.                 uint ea_dst;
  34513.  
  34514.                 src = (((src << 4) & 0x0f00) | (src & 0x000f)) + OPER_I_16();
  34515.                 ea_dst = EA_A7_PD_8();
  34516.                 m68ki_write_8(ea_dst, (src >> 8) & 0xff);
  34517.                 ea_dst = EA_A7_PD_8();
  34518.                 m68ki_write_8(ea_dst, src & 0xff);
  34519.                 return;
  34520.         }
  34521.         m68ki_exception_illegal();
  34522. }
  34523.  
  34524.  
  34525. void m68k_op_unpk_16_mm_ay7(void)
  34526. {
  34527.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  34528.         {
  34529.                 /* Note: AX and AY are reversed in Motorola's docs */
  34530.                 uint src = OPER_A7_PD_8();
  34531.                 uint ea_dst;
  34532.  
  34533.                 src = (((src << 4) & 0x0f00) | (src & 0x000f)) + OPER_I_16();
  34534.                 ea_dst = EA_AX_PD_8();
  34535.                 m68ki_write_8(ea_dst, (src >> 8) & 0xff);
  34536.                 ea_dst = EA_AX_PD_8();
  34537.                 m68ki_write_8(ea_dst, src & 0xff);
  34538.                 return;
  34539.         }
  34540.         m68ki_exception_illegal();
  34541. }
  34542.  
  34543.  
  34544. void m68k_op_unpk_16_mm_axy7(void)
  34545. {
  34546.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  34547.         {
  34548.                 uint src = OPER_A7_PD_8();
  34549.                 uint ea_dst;
  34550.  
  34551.                 src = (((src << 4) & 0x0f00) | (src & 0x000f)) + OPER_I_16();
  34552.                 ea_dst = EA_A7_PD_8();
  34553.                 m68ki_write_8(ea_dst, (src >> 8) & 0xff);
  34554.                 ea_dst = EA_A7_PD_8();
  34555.                 m68ki_write_8(ea_dst, src & 0xff);
  34556.                 return;
  34557.         }
  34558.         m68ki_exception_illegal();
  34559. }
  34560.  
  34561.  
  34562. void m68k_op_unpk_16_mm(void)
  34563. {
  34564.         if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
  34565.         {
  34566.                 /* Note: AX and AY are reversed in Motorola's docs */
  34567.                 uint src = OPER_AY_PD_8();
  34568.                 uint ea_dst;
  34569.  
  34570.                 src = (((src << 4) & 0x0f00) | (src & 0x000f)) + OPER_I_16();
  34571.                 ea_dst = EA_AX_PD_8();
  34572.                 m68ki_write_8(ea_dst, (src >> 8) & 0xff);
  34573.                 ea_dst = EA_AX_PD_8();
  34574.                 m68ki_write_8(ea_dst, src & 0xff);
  34575.                 return;
  34576.         }
  34577.         m68ki_exception_illegal();
  34578. }
  34579.  
  34580.  
  34581. /* ======================================================================== */
  34582. /* ============================== END OF FILE ============================= */
  34583. /* ======================================================================== */
  34584.  
  34585.  
  34586. /* ======================================================================== */
  34587. /* ========================= OPCODE TABLE BUILDER ========================= */
  34588. /* ======================================================================== */
  34589.  
  34590. #include "m68kops.h"
  34591.  
  34592. #define NUM_CPU_TYPES 4
  34593.  
  34594. void  (*m68ki_instruction_jump_table[0x10000])(void); /* opcode handler jump table */
  34595. unsigned char m68ki_cycles[NUM_CPU_TYPES][0x10000]; /* Cycles used by CPU type */
  34596.  
  34597. /* This is used to generate the opcode handler jump table */
  34598. typedef struct
  34599. {
  34600.         void (*opcode_handler)(void);        /* handler function */
  34601.         unsigned int  mask;                  /* mask on opcode */
  34602.         unsigned int  match;                 /* what to match after masking */
  34603.         unsigned char cycles[NUM_CPU_TYPES]; /* cycles each cpu type takes */
  34604. } opcode_handler_struct;
  34605.  
  34606.  
  34607. /* Opcode handler table */
  34608. static opcode_handler_struct m68k_opcode_handler_table[] =
  34609. {
  34610. /*   function                      mask    match    000  010  020  040 *//* Build the opcode handler jump table */
  34611. void m68ki_build_opcode_table(void)
  34612. {
  34613.         opcode_handler_struct *ostruct;
  34614.         int instr;
  34615.         int i;
  34616.         int j;
  34617.         int k;
  34618.  
  34619.         for(i = 0; i < 0x10000; i++)
  34620.         {
  34621.                 /* default to illegal */
  34622.                 m68ki_instruction_jump_table[i] = m68k_op_illegal;
  34623.                 for(k=0;k<NUM_CPU_TYPES;k++)
  34624.                         m68ki_cycles[k][i] = 0;
  34625.         }
  34626.  
  34627.         ostruct = m68k_opcode_handler_table;
  34628.         while(ostruct->mask != 0xff00)
  34629.         {
  34630.                 for(i = 0;i < 0x10000;i++)
  34631.                 {
  34632.                         if((i & ostruct->mask) == ostruct->match)
  34633.                         {
  34634.                                 m68ki_instruction_jump_table[i] = ostruct->opcode_handler;
  34635.                                 for(k=0;k<NUM_CPU_TYPES;k++)
  34636.                                         m68ki_cycles[k][i] = ostruct->cycles[k];
  34637.                         }
  34638.                 }
  34639.                 ostruct++;
  34640.         }
  34641.         while(ostruct->mask == 0xff00)
  34642.         {
  34643.                 for(i = 0;i <= 0xff;i++)
  34644.                 {
  34645.                         m68ki_instruction_jump_table[ostruct->match | i] = ostruct->opcode_handler;
  34646.                         for(k=0;k<NUM_CPU_TYPES;k++)
  34647.                                 m68ki_cycles[k][ostruct->match | i] = ostruct->cycles[k];
  34648.                 }
  34649.                 ostruct++;
  34650.         }
  34651.         while(ostruct->mask == 0xf1f8)
  34652.         {
  34653.                 for(i = 0;i < 8;i++)
  34654.                 {
  34655.                         for(j = 0;j < 8;j++)
  34656.                         {
  34657.                                 instr = ostruct->match | (i << 9) | j;
  34658.                                 m68ki_instruction_jump_table[instr] = ostruct->opcode_handler;
  34659.                                 for(k=0;k<NUM_CPU_TYPES;k++)
  34660.                                         m68ki_cycles[k][instr] = ostruct->cycles[k];
  34661.                         }
  34662.                 }
  34663.                 ostruct++;
  34664.         }
  34665.         while(ostruct->mask == 0xfff0)
  34666.         {
  34667.                 for(i = 0;i <= 0x0f;i++)
  34668.                 {
  34669.                         m68ki_instruction_jump_table[ostruct->match | i] = ostruct->opcode_handler;
  34670.                         for(k=0;k<NUM_CPU_TYPES;k++)
  34671.                                 m68ki_cycles[k][ostruct->match | i] = ostruct->cycles[k];
  34672.                 }
  34673.                 ostruct++;
  34674.         }
  34675.         while(ostruct->mask == 0xf1ff)
  34676.         {
  34677.                 for(i = 0;i <= 0x07;i++)
  34678.                 {
  34679.                         m68ki_instruction_jump_table[ostruct->match | (i << 9)] = ostruct->opcode_handler;
  34680.                         for(k=0;k<NUM_CPU_TYPES;k++)
  34681.                                 m68ki_cycles[k][ostruct->match | (i << 9)] = ostruct->cycles[k];
  34682.                 }
  34683.                 ostruct++;
  34684.         }
  34685.         while(ostruct->mask == 0xfff8)
  34686.         {
  34687.                 for(i = 0;i <= 0x07;i++)
  34688.                 {
  34689.                         m68ki_instruction_jump_table[ostruct->match | i] = ostruct->opcode_handler;
  34690.                         for(k=0;k<NUM_CPU_TYPES;k++)
  34691.                                 m68ki_cycles[k][ostruct->match | i] = ostruct->cycles[k];
  34692.                 }
  34693.                 ostruct++;
  34694.         }
  34695.         while(ostruct->mask == 0xffff)
  34696.         {
  34697.                 m68ki_instruction_jump_table[ostruct->match] = ostruct->opcode_handler;
  34698.                 for(k=0;k<NUM_CPU_TYPES;k++)
  34699.                         m68ki_cycles[k][ostruct->match] = ostruct->cycles[k];
  34700.                 ostruct++;
  34701.         }
  34702. }
  34703.  
  34704.  
  34705. /* ======================================================================== */
  34706. /* ============================== END OF FILE ============================= */
  34707. /* ======================================================================== */
  34708.  
  34709.  
  34710.