3 /* ======================================================================== */
\r
4 /* ========================= INSTRUCTION HANDLERS ========================= */
\r
5 /* ======================================================================== */
\r
8 void m68k_op_dbt_16(void)
\r
14 void m68k_op_dbf_16(void)
\r
17 uint res = MASK_OUT_ABOVE_16(*r_dst - 1);
\r
19 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
\r
22 uint offset = OPER_I_16();
\r
24 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
\r
25 m68ki_branch_16(offset);
\r
26 USE_CYCLES(CYC_DBCC_F_NOEXP);
\r
30 USE_CYCLES(CYC_DBCC_F_EXP);
\r
34 void m68k_op_dbhi_16(void)
\r
39 uint res = MASK_OUT_ABOVE_16(*r_dst - 1);
\r
41 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
\r
44 uint offset = OPER_I_16();
\r
46 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
\r
47 m68ki_branch_16(offset);
\r
48 USE_CYCLES(CYC_DBCC_F_NOEXP);
\r
52 USE_CYCLES(CYC_DBCC_F_EXP);
\r
59 void m68k_op_dbls_16(void)
\r
64 uint res = MASK_OUT_ABOVE_16(*r_dst - 1);
\r
66 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
\r
69 uint offset = OPER_I_16();
\r
71 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
\r
72 m68ki_branch_16(offset);
\r
73 USE_CYCLES(CYC_DBCC_F_NOEXP);
\r
77 USE_CYCLES(CYC_DBCC_F_EXP);
\r
84 void m68k_op_dbcc_16(void)
\r
89 uint res = MASK_OUT_ABOVE_16(*r_dst - 1);
\r
91 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
\r
94 uint offset = OPER_I_16();
\r
96 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
\r
97 m68ki_branch_16(offset);
\r
98 USE_CYCLES(CYC_DBCC_F_NOEXP);
\r
102 USE_CYCLES(CYC_DBCC_F_EXP);
\r
109 void m68k_op_dbcs_16(void)
\r
114 uint res = MASK_OUT_ABOVE_16(*r_dst - 1);
\r
116 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
\r
119 uint offset = OPER_I_16();
\r
121 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
\r
122 m68ki_branch_16(offset);
\r
123 USE_CYCLES(CYC_DBCC_F_NOEXP);
\r
127 USE_CYCLES(CYC_DBCC_F_EXP);
\r
134 void m68k_op_dbne_16(void)
\r
139 uint res = MASK_OUT_ABOVE_16(*r_dst - 1);
\r
141 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
\r
144 uint offset = OPER_I_16();
\r
146 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
\r
147 m68ki_branch_16(offset);
\r
148 USE_CYCLES(CYC_DBCC_F_NOEXP);
\r
152 USE_CYCLES(CYC_DBCC_F_EXP);
\r
159 void m68k_op_dbeq_16(void)
\r
164 uint res = MASK_OUT_ABOVE_16(*r_dst - 1);
\r
166 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
\r
169 uint offset = OPER_I_16();
\r
171 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
\r
172 m68ki_branch_16(offset);
\r
173 USE_CYCLES(CYC_DBCC_F_NOEXP);
\r
177 USE_CYCLES(CYC_DBCC_F_EXP);
\r
184 void m68k_op_dbvc_16(void)
\r
189 uint res = MASK_OUT_ABOVE_16(*r_dst - 1);
\r
191 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
\r
194 uint offset = OPER_I_16();
\r
196 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
\r
197 m68ki_branch_16(offset);
\r
198 USE_CYCLES(CYC_DBCC_F_NOEXP);
\r
202 USE_CYCLES(CYC_DBCC_F_EXP);
\r
209 void m68k_op_dbvs_16(void)
\r
214 uint res = MASK_OUT_ABOVE_16(*r_dst - 1);
\r
216 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
\r
219 uint offset = OPER_I_16();
\r
221 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
\r
222 m68ki_branch_16(offset);
\r
223 USE_CYCLES(CYC_DBCC_F_NOEXP);
\r
227 USE_CYCLES(CYC_DBCC_F_EXP);
\r
234 void m68k_op_dbpl_16(void)
\r
239 uint res = MASK_OUT_ABOVE_16(*r_dst - 1);
\r
241 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
\r
244 uint offset = OPER_I_16();
\r
246 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
\r
247 m68ki_branch_16(offset);
\r
248 USE_CYCLES(CYC_DBCC_F_NOEXP);
\r
252 USE_CYCLES(CYC_DBCC_F_EXP);
\r
259 void m68k_op_dbmi_16(void)
\r
264 uint res = MASK_OUT_ABOVE_16(*r_dst - 1);
\r
266 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
\r
269 uint offset = OPER_I_16();
\r
271 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
\r
272 m68ki_branch_16(offset);
\r
273 USE_CYCLES(CYC_DBCC_F_NOEXP);
\r
277 USE_CYCLES(CYC_DBCC_F_EXP);
\r
284 void m68k_op_dbge_16(void)
\r
289 uint res = MASK_OUT_ABOVE_16(*r_dst - 1);
\r
291 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
\r
294 uint offset = OPER_I_16();
\r
296 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
\r
297 m68ki_branch_16(offset);
\r
298 USE_CYCLES(CYC_DBCC_F_NOEXP);
\r
302 USE_CYCLES(CYC_DBCC_F_EXP);
\r
309 void m68k_op_dblt_16(void)
\r
314 uint res = MASK_OUT_ABOVE_16(*r_dst - 1);
\r
316 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
\r
319 uint offset = OPER_I_16();
\r
321 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
\r
322 m68ki_branch_16(offset);
\r
323 USE_CYCLES(CYC_DBCC_F_NOEXP);
\r
327 USE_CYCLES(CYC_DBCC_F_EXP);
\r
334 void m68k_op_dbgt_16(void)
\r
339 uint res = MASK_OUT_ABOVE_16(*r_dst - 1);
\r
341 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
\r
344 uint offset = OPER_I_16();
\r
346 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
\r
347 m68ki_branch_16(offset);
\r
348 USE_CYCLES(CYC_DBCC_F_NOEXP);
\r
352 USE_CYCLES(CYC_DBCC_F_EXP);
\r
359 void m68k_op_dble_16(void)
\r
364 uint res = MASK_OUT_ABOVE_16(*r_dst - 1);
\r
366 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
\r
369 uint offset = OPER_I_16();
\r
371 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
\r
372 m68ki_branch_16(offset);
\r
373 USE_CYCLES(CYC_DBCC_F_NOEXP);
\r
377 USE_CYCLES(CYC_DBCC_F_EXP);
\r
384 void m68k_op_divs_16_d(void)
\r
387 sint src = MAKE_INT_16(DY);
\r
393 if((uint32)*r_dst == 0x80000000 && src == -1)
\r
396 FLAG_N = NFLAG_CLEAR;
\r
397 FLAG_V = VFLAG_CLEAR;
\r
398 FLAG_C = CFLAG_CLEAR;
\r
403 quotient = MAKE_INT_32(*r_dst) / src;
\r
404 remainder = MAKE_INT_32(*r_dst) % src;
\r
406 if(quotient == MAKE_INT_16(quotient))
\r
409 FLAG_N = NFLAG_16(quotient);
\r
410 FLAG_V = VFLAG_CLEAR;
\r
411 FLAG_C = CFLAG_CLEAR;
\r
412 *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
\r
415 FLAG_V = VFLAG_SET;
\r
418 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
\r
422 void m68k_op_divs_16_ai(void)
\r
425 sint src = MAKE_INT_16(OPER_AY_AI_16());
\r
431 if((uint32)*r_dst == 0x80000000 && src == -1)
\r
434 FLAG_N = NFLAG_CLEAR;
\r
435 FLAG_V = VFLAG_CLEAR;
\r
436 FLAG_C = CFLAG_CLEAR;
\r
441 quotient = MAKE_INT_32(*r_dst) / src;
\r
442 remainder = MAKE_INT_32(*r_dst) % src;
\r
444 if(quotient == MAKE_INT_16(quotient))
\r
447 FLAG_N = NFLAG_16(quotient);
\r
448 FLAG_V = VFLAG_CLEAR;
\r
449 FLAG_C = CFLAG_CLEAR;
\r
450 *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
\r
453 FLAG_V = VFLAG_SET;
\r
456 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
\r
460 void m68k_op_divs_16_pi(void)
\r
463 sint src = MAKE_INT_16(OPER_AY_PI_16());
\r
469 if((uint32)*r_dst == 0x80000000 && src == -1)
\r
472 FLAG_N = NFLAG_CLEAR;
\r
473 FLAG_V = VFLAG_CLEAR;
\r
474 FLAG_C = CFLAG_CLEAR;
\r
479 quotient = MAKE_INT_32(*r_dst) / src;
\r
480 remainder = MAKE_INT_32(*r_dst) % src;
\r
482 if(quotient == MAKE_INT_16(quotient))
\r
485 FLAG_N = NFLAG_16(quotient);
\r
486 FLAG_V = VFLAG_CLEAR;
\r
487 FLAG_C = CFLAG_CLEAR;
\r
488 *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
\r
491 FLAG_V = VFLAG_SET;
\r
494 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
\r
498 void m68k_op_divs_16_pd(void)
\r
501 sint src = MAKE_INT_16(OPER_AY_PD_16());
\r
507 if((uint32)*r_dst == 0x80000000 && src == -1)
\r
510 FLAG_N = NFLAG_CLEAR;
\r
511 FLAG_V = VFLAG_CLEAR;
\r
512 FLAG_C = CFLAG_CLEAR;
\r
517 quotient = MAKE_INT_32(*r_dst) / src;
\r
518 remainder = MAKE_INT_32(*r_dst) % src;
\r
520 if(quotient == MAKE_INT_16(quotient))
\r
523 FLAG_N = NFLAG_16(quotient);
\r
524 FLAG_V = VFLAG_CLEAR;
\r
525 FLAG_C = CFLAG_CLEAR;
\r
526 *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
\r
529 FLAG_V = VFLAG_SET;
\r
532 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
\r
536 void m68k_op_divs_16_di(void)
\r
539 sint src = MAKE_INT_16(OPER_AY_DI_16());
\r
545 if((uint32)*r_dst == 0x80000000 && src == -1)
\r
548 FLAG_N = NFLAG_CLEAR;
\r
549 FLAG_V = VFLAG_CLEAR;
\r
550 FLAG_C = CFLAG_CLEAR;
\r
555 quotient = MAKE_INT_32(*r_dst) / src;
\r
556 remainder = MAKE_INT_32(*r_dst) % src;
\r
558 if(quotient == MAKE_INT_16(quotient))
\r
561 FLAG_N = NFLAG_16(quotient);
\r
562 FLAG_V = VFLAG_CLEAR;
\r
563 FLAG_C = CFLAG_CLEAR;
\r
564 *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
\r
567 FLAG_V = VFLAG_SET;
\r
570 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
\r
574 void m68k_op_divs_16_ix(void)
\r
577 sint src = MAKE_INT_16(OPER_AY_IX_16());
\r
583 if((uint32)*r_dst == 0x80000000 && src == -1)
\r
586 FLAG_N = NFLAG_CLEAR;
\r
587 FLAG_V = VFLAG_CLEAR;
\r
588 FLAG_C = CFLAG_CLEAR;
\r
593 quotient = MAKE_INT_32(*r_dst) / src;
\r
594 remainder = MAKE_INT_32(*r_dst) % src;
\r
596 if(quotient == MAKE_INT_16(quotient))
\r
599 FLAG_N = NFLAG_16(quotient);
\r
600 FLAG_V = VFLAG_CLEAR;
\r
601 FLAG_C = CFLAG_CLEAR;
\r
602 *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
\r
605 FLAG_V = VFLAG_SET;
\r
608 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
\r
612 void m68k_op_divs_16_aw(void)
\r
615 sint src = MAKE_INT_16(OPER_AW_16());
\r
621 if((uint32)*r_dst == 0x80000000 && src == -1)
\r
624 FLAG_N = NFLAG_CLEAR;
\r
625 FLAG_V = VFLAG_CLEAR;
\r
626 FLAG_C = CFLAG_CLEAR;
\r
631 quotient = MAKE_INT_32(*r_dst) / src;
\r
632 remainder = MAKE_INT_32(*r_dst) % src;
\r
634 if(quotient == MAKE_INT_16(quotient))
\r
637 FLAG_N = NFLAG_16(quotient);
\r
638 FLAG_V = VFLAG_CLEAR;
\r
639 FLAG_C = CFLAG_CLEAR;
\r
640 *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
\r
643 FLAG_V = VFLAG_SET;
\r
646 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
\r
650 void m68k_op_divs_16_al(void)
\r
653 sint src = MAKE_INT_16(OPER_AL_16());
\r
659 if((uint32)*r_dst == 0x80000000 && src == -1)
\r
662 FLAG_N = NFLAG_CLEAR;
\r
663 FLAG_V = VFLAG_CLEAR;
\r
664 FLAG_C = CFLAG_CLEAR;
\r
669 quotient = MAKE_INT_32(*r_dst) / src;
\r
670 remainder = MAKE_INT_32(*r_dst) % src;
\r
672 if(quotient == MAKE_INT_16(quotient))
\r
675 FLAG_N = NFLAG_16(quotient);
\r
676 FLAG_V = VFLAG_CLEAR;
\r
677 FLAG_C = CFLAG_CLEAR;
\r
678 *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
\r
681 FLAG_V = VFLAG_SET;
\r
684 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
\r
688 void m68k_op_divs_16_pcdi(void)
\r
691 sint src = MAKE_INT_16(OPER_PCDI_16());
\r
697 if((uint32)*r_dst == 0x80000000 && src == -1)
\r
700 FLAG_N = NFLAG_CLEAR;
\r
701 FLAG_V = VFLAG_CLEAR;
\r
702 FLAG_C = CFLAG_CLEAR;
\r
707 quotient = MAKE_INT_32(*r_dst) / src;
\r
708 remainder = MAKE_INT_32(*r_dst) % src;
\r
710 if(quotient == MAKE_INT_16(quotient))
\r
713 FLAG_N = NFLAG_16(quotient);
\r
714 FLAG_V = VFLAG_CLEAR;
\r
715 FLAG_C = CFLAG_CLEAR;
\r
716 *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
\r
719 FLAG_V = VFLAG_SET;
\r
722 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
\r
726 void m68k_op_divs_16_pcix(void)
\r
729 sint src = MAKE_INT_16(OPER_PCIX_16());
\r
735 if((uint32)*r_dst == 0x80000000 && src == -1)
\r
738 FLAG_N = NFLAG_CLEAR;
\r
739 FLAG_V = VFLAG_CLEAR;
\r
740 FLAG_C = CFLAG_CLEAR;
\r
745 quotient = MAKE_INT_32(*r_dst) / src;
\r
746 remainder = MAKE_INT_32(*r_dst) % src;
\r
748 if(quotient == MAKE_INT_16(quotient))
\r
751 FLAG_N = NFLAG_16(quotient);
\r
752 FLAG_V = VFLAG_CLEAR;
\r
753 FLAG_C = CFLAG_CLEAR;
\r
754 *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
\r
757 FLAG_V = VFLAG_SET;
\r
760 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
\r
764 void m68k_op_divs_16_i(void)
\r
767 sint src = MAKE_INT_16(OPER_I_16());
\r
773 if((uint32)*r_dst == 0x80000000 && src == -1)
\r
776 FLAG_N = NFLAG_CLEAR;
\r
777 FLAG_V = VFLAG_CLEAR;
\r
778 FLAG_C = CFLAG_CLEAR;
\r
783 quotient = MAKE_INT_32(*r_dst) / src;
\r
784 remainder = MAKE_INT_32(*r_dst) % src;
\r
786 if(quotient == MAKE_INT_16(quotient))
\r
789 FLAG_N = NFLAG_16(quotient);
\r
790 FLAG_V = VFLAG_CLEAR;
\r
791 FLAG_C = CFLAG_CLEAR;
\r
792 *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
\r
795 FLAG_V = VFLAG_SET;
\r
798 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
\r
802 void m68k_op_divu_16_d(void)
\r
805 uint src = MASK_OUT_ABOVE_16(DY);
\r
809 uint quotient = *r_dst / src;
\r
810 uint remainder = *r_dst % src;
\r
812 if(quotient < 0x10000)
\r
815 FLAG_N = NFLAG_16(quotient);
\r
816 FLAG_V = VFLAG_CLEAR;
\r
817 FLAG_C = CFLAG_CLEAR;
\r
818 *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
\r
821 FLAG_V = VFLAG_SET;
\r
824 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
\r
828 void m68k_op_divu_16_ai(void)
\r
831 uint src = OPER_AY_AI_16();
\r
835 uint quotient = *r_dst / src;
\r
836 uint remainder = *r_dst % src;
\r
838 if(quotient < 0x10000)
\r
841 FLAG_N = NFLAG_16(quotient);
\r
842 FLAG_V = VFLAG_CLEAR;
\r
843 FLAG_C = CFLAG_CLEAR;
\r
844 *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
\r
847 FLAG_V = VFLAG_SET;
\r
850 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
\r
854 void m68k_op_divu_16_pi(void)
\r
857 uint src = OPER_AY_PI_16();
\r
861 uint quotient = *r_dst / src;
\r
862 uint remainder = *r_dst % src;
\r
864 if(quotient < 0x10000)
\r
867 FLAG_N = NFLAG_16(quotient);
\r
868 FLAG_V = VFLAG_CLEAR;
\r
869 FLAG_C = CFLAG_CLEAR;
\r
870 *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
\r
873 FLAG_V = VFLAG_SET;
\r
876 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
\r
880 void m68k_op_divu_16_pd(void)
\r
883 uint src = OPER_AY_PD_16();
\r
887 uint quotient = *r_dst / src;
\r
888 uint remainder = *r_dst % src;
\r
890 if(quotient < 0x10000)
\r
893 FLAG_N = NFLAG_16(quotient);
\r
894 FLAG_V = VFLAG_CLEAR;
\r
895 FLAG_C = CFLAG_CLEAR;
\r
896 *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
\r
899 FLAG_V = VFLAG_SET;
\r
902 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
\r
906 void m68k_op_divu_16_di(void)
\r
909 uint src = OPER_AY_DI_16();
\r
913 uint quotient = *r_dst / src;
\r
914 uint remainder = *r_dst % src;
\r
916 if(quotient < 0x10000)
\r
919 FLAG_N = NFLAG_16(quotient);
\r
920 FLAG_V = VFLAG_CLEAR;
\r
921 FLAG_C = CFLAG_CLEAR;
\r
922 *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
\r
925 FLAG_V = VFLAG_SET;
\r
928 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
\r
932 void m68k_op_divu_16_ix(void)
\r
935 uint src = OPER_AY_IX_16();
\r
939 uint quotient = *r_dst / src;
\r
940 uint remainder = *r_dst % src;
\r
942 if(quotient < 0x10000)
\r
945 FLAG_N = NFLAG_16(quotient);
\r
946 FLAG_V = VFLAG_CLEAR;
\r
947 FLAG_C = CFLAG_CLEAR;
\r
948 *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
\r
951 FLAG_V = VFLAG_SET;
\r
954 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
\r
958 void m68k_op_divu_16_aw(void)
\r
961 uint src = OPER_AW_16();
\r
965 uint quotient = *r_dst / src;
\r
966 uint remainder = *r_dst % src;
\r
968 if(quotient < 0x10000)
\r
971 FLAG_N = NFLAG_16(quotient);
\r
972 FLAG_V = VFLAG_CLEAR;
\r
973 FLAG_C = CFLAG_CLEAR;
\r
974 *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
\r
977 FLAG_V = VFLAG_SET;
\r
980 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
\r
984 void m68k_op_divu_16_al(void)
\r
987 uint src = OPER_AL_16();
\r
991 uint quotient = *r_dst / src;
\r
992 uint remainder = *r_dst % src;
\r
994 if(quotient < 0x10000)
\r
997 FLAG_N = NFLAG_16(quotient);
\r
998 FLAG_V = VFLAG_CLEAR;
\r
999 FLAG_C = CFLAG_CLEAR;
\r
1000 *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
\r
1003 FLAG_V = VFLAG_SET;
\r
1006 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
\r
1010 void m68k_op_divu_16_pcdi(void)
\r
1012 uint* r_dst = &DX;
\r
1013 uint src = OPER_PCDI_16();
\r
1017 uint quotient = *r_dst / src;
\r
1018 uint remainder = *r_dst % src;
\r
1020 if(quotient < 0x10000)
\r
1022 FLAG_Z = quotient;
\r
1023 FLAG_N = NFLAG_16(quotient);
\r
1024 FLAG_V = VFLAG_CLEAR;
\r
1025 FLAG_C = CFLAG_CLEAR;
\r
1026 *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
\r
1029 FLAG_V = VFLAG_SET;
\r
1032 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
\r
1036 void m68k_op_divu_16_pcix(void)
\r
1038 uint* r_dst = &DX;
\r
1039 uint src = OPER_PCIX_16();
\r
1043 uint quotient = *r_dst / src;
\r
1044 uint remainder = *r_dst % src;
\r
1046 if(quotient < 0x10000)
\r
1048 FLAG_Z = quotient;
\r
1049 FLAG_N = NFLAG_16(quotient);
\r
1050 FLAG_V = VFLAG_CLEAR;
\r
1051 FLAG_C = CFLAG_CLEAR;
\r
1052 *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
\r
1055 FLAG_V = VFLAG_SET;
\r
1058 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
\r
1062 void m68k_op_divu_16_i(void)
\r
1064 uint* r_dst = &DX;
\r
1065 uint src = OPER_I_16();
\r
1069 uint quotient = *r_dst / src;
\r
1070 uint remainder = *r_dst % src;
\r
1072 if(quotient < 0x10000)
\r
1074 FLAG_Z = quotient;
\r
1075 FLAG_N = NFLAG_16(quotient);
\r
1076 FLAG_V = VFLAG_CLEAR;
\r
1077 FLAG_C = CFLAG_CLEAR;
\r
1078 *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16));
\r
1081 FLAG_V = VFLAG_SET;
\r
1084 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
\r
1088 void m68k_op_divl_32_d(void)
\r
1090 #if M68K_USE_64_BIT
\r
1092 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
\r
1094 uint word2 = OPER_I_16();
\r
1095 uint64 divisor = DY;
\r
1096 uint64 dividend = 0;
\r
1097 uint64 quotient = 0;
\r
1098 uint64 remainder = 0;
\r
1102 if(BIT_A(word2)) /* 64 bit */
\r
1104 dividend = REG_D[word2 & 7];
\r
1106 dividend |= REG_D[(word2 >> 12) & 7];
\r
1108 if(BIT_B(word2)) /* signed */
\r
1110 quotient = (uint64)((sint64)dividend / (sint64)((sint32)divisor));
\r
1111 remainder = (uint64)((sint64)dividend % (sint64)((sint32)divisor));
\r
1112 if((sint64)quotient != (sint64)((sint32)quotient))
\r
1114 FLAG_V = VFLAG_SET;
\r
1118 else /* unsigned */
\r
1120 quotient = dividend / divisor;
\r
1121 if(quotient > 0xffffffff)
\r
1123 FLAG_V = VFLAG_SET;
\r
1126 remainder = dividend % divisor;
\r
1131 dividend = REG_D[(word2 >> 12) & 7];
\r
1132 if(BIT_B(word2)) /* signed */
\r
1134 quotient = (uint64)((sint64)((sint32)dividend) / (sint64)((sint32)divisor));
\r
1135 remainder = (uint64)((sint64)((sint32)dividend) % (sint64)((sint32)divisor));
\r
1137 else /* unsigned */
\r
1139 quotient = dividend / divisor;
\r
1140 remainder = dividend % divisor;
\r
1144 REG_D[word2 & 7] = remainder;
\r
1145 REG_D[(word2 >> 12) & 7] = quotient;
\r
1147 FLAG_N = NFLAG_32(quotient);
\r
1148 FLAG_Z = quotient;
\r
1149 FLAG_V = VFLAG_CLEAR;
\r
1150 FLAG_C = CFLAG_CLEAR;
\r
1153 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
\r
1156 m68ki_exception_illegal();
\r
1160 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
\r
1162 uint word2 = OPER_I_16();
\r
1163 uint divisor = DY;
\r
1164 uint dividend_hi = REG_D[word2 & 7];
\r
1165 uint dividend_lo = REG_D[(word2 >> 12) & 7];
\r
1166 uint quotient = 0;
\r
1167 uint remainder = 0;
\r
1168 uint dividend_neg = 0;
\r
1169 uint divisor_neg = 0;
\r
1175 /* quad / long : long quotient, long remainder */
\r
1178 if(BIT_B(word2)) /* signed */
\r
1180 /* special case in signed divide */
\r
1181 if(dividend_hi == 0 && dividend_lo == 0x80000000 && divisor == 0xffffffff)
\r
1183 REG_D[word2 & 7] = 0;
\r
1184 REG_D[(word2 >> 12) & 7] = 0x80000000;
\r
1186 FLAG_N = NFLAG_SET;
\r
1187 FLAG_Z = ZFLAG_CLEAR;
\r
1188 FLAG_V = VFLAG_CLEAR;
\r
1189 FLAG_C = CFLAG_CLEAR;
\r
1192 if(GET_MSB_32(dividend_hi))
\r
1195 dividend_hi = (uint)MASK_OUT_ABOVE_32((-(sint)dividend_hi) - (dividend_lo != 0));
\r
1196 dividend_lo = (uint)MASK_OUT_ABOVE_32(-(sint)dividend_lo);
\r
1198 if(GET_MSB_32(divisor))
\r
1201 divisor = (uint)MASK_OUT_ABOVE_32(-(sint)divisor);
\r
1206 /* if the upper long is greater than the divisor, we're overflowing. */
\r
1207 if(dividend_hi >= divisor)
\r
1209 FLAG_V = VFLAG_SET;
\r
1213 for(i = 31; i >= 0; i--)
\r
1216 remainder = (remainder << 1) + ((dividend_hi >> i) & 1);
\r
1217 if(remainder >= divisor)
\r
1219 remainder -= divisor;
\r
1223 for(i = 31; i >= 0; i--)
\r
1226 overflow = GET_MSB_32(remainder);
\r
1227 remainder = (remainder << 1) + ((dividend_lo >> i) & 1);
\r
1228 if(remainder >= divisor || overflow)
\r
1230 remainder -= divisor;
\r
1235 if(BIT_B(word2)) /* signed */
\r
1237 if(quotient > 0x7fffffff)
\r
1239 FLAG_V = VFLAG_SET;
\r
1244 remainder = (uint)MASK_OUT_ABOVE_32(-(sint)remainder);
\r
1245 quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);
\r
1248 quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);
\r
1251 REG_D[word2 & 7] = remainder;
\r
1252 REG_D[(word2 >> 12) & 7] = quotient;
\r
1254 FLAG_N = NFLAG_32(quotient);
\r
1255 FLAG_Z = quotient;
\r
1256 FLAG_V = VFLAG_CLEAR;
\r
1257 FLAG_C = CFLAG_CLEAR;
\r
1261 /* long / long: long quotient, maybe long remainder */
\r
1262 if(BIT_B(word2)) /* signed */
\r
1264 /* Special case in divide */
\r
1265 if(dividend_lo == 0x80000000 && divisor == 0xffffffff)
\r
1267 FLAG_N = NFLAG_SET;
\r
1268 FLAG_Z = ZFLAG_CLEAR;
\r
1269 FLAG_V = VFLAG_CLEAR;
\r
1270 FLAG_C = CFLAG_CLEAR;
\r
1271 REG_D[(word2 >> 12) & 7] = 0x80000000;
\r
1272 REG_D[word2 & 7] = 0;
\r
1275 REG_D[word2 & 7] = MAKE_INT_32(dividend_lo) % MAKE_INT_32(divisor);
\r
1276 quotient = REG_D[(word2 >> 12) & 7] = MAKE_INT_32(dividend_lo) / MAKE_INT_32(divisor);
\r
1280 REG_D[word2 & 7] = MASK_OUT_ABOVE_32(dividend_lo) % MASK_OUT_ABOVE_32(divisor);
\r
1281 quotient = REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(dividend_lo) / MASK_OUT_ABOVE_32(divisor);
\r
1284 FLAG_N = NFLAG_32(quotient);
\r
1285 FLAG_Z = quotient;
\r
1286 FLAG_V = VFLAG_CLEAR;
\r
1287 FLAG_C = CFLAG_CLEAR;
\r
1290 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
\r
1293 m68ki_exception_illegal();
\r
1299 void m68k_op_divl_32_ai(void)
\r
1301 #if M68K_USE_64_BIT
\r
1303 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
\r
1305 uint word2 = OPER_I_16();
\r
1306 uint64 divisor = OPER_AY_AI_32();
\r
1307 uint64 dividend = 0;
\r
1308 uint64 quotient = 0;
\r
1309 uint64 remainder = 0;
\r
1313 if(BIT_A(word2)) /* 64 bit */
\r
1315 dividend = REG_D[word2 & 7];
\r
1317 dividend |= REG_D[(word2 >> 12) & 7];
\r
1319 if(BIT_B(word2)) /* signed */
\r
1321 quotient = (uint64)((sint64)dividend / (sint64)((sint32)divisor));
\r
1322 remainder = (uint64)((sint64)dividend % (sint64)((sint32)divisor));
\r
1323 if((sint64)quotient != (sint64)((sint32)quotient))
\r
1325 FLAG_V = VFLAG_SET;
\r
1329 else /* unsigned */
\r
1331 quotient = dividend / divisor;
\r
1332 if(quotient > 0xffffffff)
\r
1334 FLAG_V = VFLAG_SET;
\r
1337 remainder = dividend % divisor;
\r
1342 dividend = REG_D[(word2 >> 12) & 7];
\r
1343 if(BIT_B(word2)) /* signed */
\r
1345 quotient = (uint64)((sint64)((sint32)dividend) / (sint64)((sint32)divisor));
\r
1346 remainder = (uint64)((sint64)((sint32)dividend) % (sint64)((sint32)divisor));
\r
1348 else /* unsigned */
\r
1350 quotient = dividend / divisor;
\r
1351 remainder = dividend % divisor;
\r
1355 REG_D[word2 & 7] = remainder;
\r
1356 REG_D[(word2 >> 12) & 7] = quotient;
\r
1358 FLAG_N = NFLAG_32(quotient);
\r
1359 FLAG_Z = quotient;
\r
1360 FLAG_V = VFLAG_CLEAR;
\r
1361 FLAG_C = CFLAG_CLEAR;
\r
1364 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
\r
1367 m68ki_exception_illegal();
\r
1371 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
\r
1373 uint word2 = OPER_I_16();
\r
1374 uint divisor = OPER_AY_AI_32();
\r
1375 uint dividend_hi = REG_D[word2 & 7];
\r
1376 uint dividend_lo = REG_D[(word2 >> 12) & 7];
\r
1377 uint quotient = 0;
\r
1378 uint remainder = 0;
\r
1379 uint dividend_neg = 0;
\r
1380 uint divisor_neg = 0;
\r
1386 /* quad / long : long quotient, long remainder */
\r
1389 if(BIT_B(word2)) /* signed */
\r
1391 /* special case in signed divide */
\r
1392 if(dividend_hi == 0 && dividend_lo == 0x80000000 && divisor == 0xffffffff)
\r
1394 REG_D[word2 & 7] = 0;
\r
1395 REG_D[(word2 >> 12) & 7] = 0x80000000;
\r
1397 FLAG_N = NFLAG_SET;
\r
1398 FLAG_Z = ZFLAG_CLEAR;
\r
1399 FLAG_V = VFLAG_CLEAR;
\r
1400 FLAG_C = CFLAG_CLEAR;
\r
1403 if(GET_MSB_32(dividend_hi))
\r
1406 dividend_hi = (uint)MASK_OUT_ABOVE_32((-(sint)dividend_hi) - (dividend_lo != 0));
\r
1407 dividend_lo = (uint)MASK_OUT_ABOVE_32(-(sint)dividend_lo);
\r
1409 if(GET_MSB_32(divisor))
\r
1412 divisor = (uint)MASK_OUT_ABOVE_32(-(sint)divisor);
\r
1417 /* if the upper long is greater than the divisor, we're overflowing. */
\r
1418 if(dividend_hi >= divisor)
\r
1420 FLAG_V = VFLAG_SET;
\r
1424 for(i = 31; i >= 0; i--)
\r
1427 remainder = (remainder << 1) + ((dividend_hi >> i) & 1);
\r
1428 if(remainder >= divisor)
\r
1430 remainder -= divisor;
\r
1434 for(i = 31; i >= 0; i--)
\r
1437 overflow = GET_MSB_32(remainder);
\r
1438 remainder = (remainder << 1) + ((dividend_lo >> i) & 1);
\r
1439 if(remainder >= divisor || overflow)
\r
1441 remainder -= divisor;
\r
1446 if(BIT_B(word2)) /* signed */
\r
1448 if(quotient > 0x7fffffff)
\r
1450 FLAG_V = VFLAG_SET;
\r
1455 remainder = (uint)MASK_OUT_ABOVE_32(-(sint)remainder);
\r
1456 quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);
\r
1459 quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);
\r
1462 REG_D[word2 & 7] = remainder;
\r
1463 REG_D[(word2 >> 12) & 7] = quotient;
\r
1465 FLAG_N = NFLAG_32(quotient);
\r
1466 FLAG_Z = quotient;
\r
1467 FLAG_V = VFLAG_CLEAR;
\r
1468 FLAG_C = CFLAG_CLEAR;
\r
1472 /* long / long: long quotient, maybe long remainder */
\r
1473 if(BIT_B(word2)) /* signed */
\r
1475 /* Special case in divide */
\r
1476 if(dividend_lo == 0x80000000 && divisor == 0xffffffff)
\r
1478 FLAG_N = NFLAG_SET;
\r
1479 FLAG_Z = ZFLAG_CLEAR;
\r
1480 FLAG_V = VFLAG_CLEAR;
\r
1481 FLAG_C = CFLAG_CLEAR;
\r
1482 REG_D[(word2 >> 12) & 7] = 0x80000000;
\r
1483 REG_D[word2 & 7] = 0;
\r
1486 REG_D[word2 & 7] = MAKE_INT_32(dividend_lo) % MAKE_INT_32(divisor);
\r
1487 quotient = REG_D[(word2 >> 12) & 7] = MAKE_INT_32(dividend_lo) / MAKE_INT_32(divisor);
\r
1491 REG_D[word2 & 7] = MASK_OUT_ABOVE_32(dividend_lo) % MASK_OUT_ABOVE_32(divisor);
\r
1492 quotient = REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(dividend_lo) / MASK_OUT_ABOVE_32(divisor);
\r
1495 FLAG_N = NFLAG_32(quotient);
\r
1496 FLAG_Z = quotient;
\r
1497 FLAG_V = VFLAG_CLEAR;
\r
1498 FLAG_C = CFLAG_CLEAR;
\r
1501 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
\r
1504 m68ki_exception_illegal();
\r
1510 void m68k_op_divl_32_pi(void)
\r
1512 #if M68K_USE_64_BIT
\r
1514 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
\r
1516 uint word2 = OPER_I_16();
\r
1517 uint64 divisor = OPER_AY_PI_32();
\r
1518 uint64 dividend = 0;
\r
1519 uint64 quotient = 0;
\r
1520 uint64 remainder = 0;
\r
1524 if(BIT_A(word2)) /* 64 bit */
\r
1526 dividend = REG_D[word2 & 7];
\r
1528 dividend |= REG_D[(word2 >> 12) & 7];
\r
1530 if(BIT_B(word2)) /* signed */
\r
1532 quotient = (uint64)((sint64)dividend / (sint64)((sint32)divisor));
\r
1533 remainder = (uint64)((sint64)dividend % (sint64)((sint32)divisor));
\r
1534 if((sint64)quotient != (sint64)((sint32)quotient))
\r
1536 FLAG_V = VFLAG_SET;
\r
1540 else /* unsigned */
\r
1542 quotient = dividend / divisor;
\r
1543 if(quotient > 0xffffffff)
\r
1545 FLAG_V = VFLAG_SET;
\r
1548 remainder = dividend % divisor;
\r
1553 dividend = REG_D[(word2 >> 12) & 7];
\r
1554 if(BIT_B(word2)) /* signed */
\r
1556 quotient = (uint64)((sint64)((sint32)dividend) / (sint64)((sint32)divisor));
\r
1557 remainder = (uint64)((sint64)((sint32)dividend) % (sint64)((sint32)divisor));
\r
1559 else /* unsigned */
\r
1561 quotient = dividend / divisor;
\r
1562 remainder = dividend % divisor;
\r
1566 REG_D[word2 & 7] = remainder;
\r
1567 REG_D[(word2 >> 12) & 7] = quotient;
\r
1569 FLAG_N = NFLAG_32(quotient);
\r
1570 FLAG_Z = quotient;
\r
1571 FLAG_V = VFLAG_CLEAR;
\r
1572 FLAG_C = CFLAG_CLEAR;
\r
1575 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
\r
1578 m68ki_exception_illegal();
\r
1582 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
\r
1584 uint word2 = OPER_I_16();
\r
1585 uint divisor = OPER_AY_PI_32();
\r
1586 uint dividend_hi = REG_D[word2 & 7];
\r
1587 uint dividend_lo = REG_D[(word2 >> 12) & 7];
\r
1588 uint quotient = 0;
\r
1589 uint remainder = 0;
\r
1590 uint dividend_neg = 0;
\r
1591 uint divisor_neg = 0;
\r
1597 /* quad / long : long quotient, long remainder */
\r
1600 if(BIT_B(word2)) /* signed */
\r
1602 /* special case in signed divide */
\r
1603 if(dividend_hi == 0 && dividend_lo == 0x80000000 && divisor == 0xffffffff)
\r
1605 REG_D[word2 & 7] = 0;
\r
1606 REG_D[(word2 >> 12) & 7] = 0x80000000;
\r
1608 FLAG_N = NFLAG_SET;
\r
1609 FLAG_Z = ZFLAG_CLEAR;
\r
1610 FLAG_V = VFLAG_CLEAR;
\r
1611 FLAG_C = CFLAG_CLEAR;
\r
1614 if(GET_MSB_32(dividend_hi))
\r
1617 dividend_hi = (uint)MASK_OUT_ABOVE_32((-(sint)dividend_hi) - (dividend_lo != 0));
\r
1618 dividend_lo = (uint)MASK_OUT_ABOVE_32(-(sint)dividend_lo);
\r
1620 if(GET_MSB_32(divisor))
\r
1623 divisor = (uint)MASK_OUT_ABOVE_32(-(sint)divisor);
\r
1628 /* if the upper long is greater than the divisor, we're overflowing. */
\r
1629 if(dividend_hi >= divisor)
\r
1631 FLAG_V = VFLAG_SET;
\r
1635 for(i = 31; i >= 0; i--)
\r
1638 remainder = (remainder << 1) + ((dividend_hi >> i) & 1);
\r
1639 if(remainder >= divisor)
\r
1641 remainder -= divisor;
\r
1645 for(i = 31; i >= 0; i--)
\r
1648 overflow = GET_MSB_32(remainder);
\r
1649 remainder = (remainder << 1) + ((dividend_lo >> i) & 1);
\r
1650 if(remainder >= divisor || overflow)
\r
1652 remainder -= divisor;
\r
1657 if(BIT_B(word2)) /* signed */
\r
1659 if(quotient > 0x7fffffff)
\r
1661 FLAG_V = VFLAG_SET;
\r
1666 remainder = (uint)MASK_OUT_ABOVE_32(-(sint)remainder);
\r
1667 quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);
\r
1670 quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);
\r
1673 REG_D[word2 & 7] = remainder;
\r
1674 REG_D[(word2 >> 12) & 7] = quotient;
\r
1676 FLAG_N = NFLAG_32(quotient);
\r
1677 FLAG_Z = quotient;
\r
1678 FLAG_V = VFLAG_CLEAR;
\r
1679 FLAG_C = CFLAG_CLEAR;
\r
1683 /* long / long: long quotient, maybe long remainder */
\r
1684 if(BIT_B(word2)) /* signed */
\r
1686 /* Special case in divide */
\r
1687 if(dividend_lo == 0x80000000 && divisor == 0xffffffff)
\r
1689 FLAG_N = NFLAG_SET;
\r
1690 FLAG_Z = ZFLAG_CLEAR;
\r
1691 FLAG_V = VFLAG_CLEAR;
\r
1692 FLAG_C = CFLAG_CLEAR;
\r
1693 REG_D[(word2 >> 12) & 7] = 0x80000000;
\r
1694 REG_D[word2 & 7] = 0;
\r
1697 REG_D[word2 & 7] = MAKE_INT_32(dividend_lo) % MAKE_INT_32(divisor);
\r
1698 quotient = REG_D[(word2 >> 12) & 7] = MAKE_INT_32(dividend_lo) / MAKE_INT_32(divisor);
\r
1702 REG_D[word2 & 7] = MASK_OUT_ABOVE_32(dividend_lo) % MASK_OUT_ABOVE_32(divisor);
\r
1703 quotient = REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(dividend_lo) / MASK_OUT_ABOVE_32(divisor);
\r
1706 FLAG_N = NFLAG_32(quotient);
\r
1707 FLAG_Z = quotient;
\r
1708 FLAG_V = VFLAG_CLEAR;
\r
1709 FLAG_C = CFLAG_CLEAR;
\r
1712 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
\r
1715 m68ki_exception_illegal();
\r
1721 void m68k_op_divl_32_pd(void)
\r
1723 #if M68K_USE_64_BIT
\r
1725 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
\r
1727 uint word2 = OPER_I_16();
\r
1728 uint64 divisor = OPER_AY_PD_32();
\r
1729 uint64 dividend = 0;
\r
1730 uint64 quotient = 0;
\r
1731 uint64 remainder = 0;
\r
1735 if(BIT_A(word2)) /* 64 bit */
\r
1737 dividend = REG_D[word2 & 7];
\r
1739 dividend |= REG_D[(word2 >> 12) & 7];
\r
1741 if(BIT_B(word2)) /* signed */
\r
1743 quotient = (uint64)((sint64)dividend / (sint64)((sint32)divisor));
\r
1744 remainder = (uint64)((sint64)dividend % (sint64)((sint32)divisor));
\r
1745 if((sint64)quotient != (sint64)((sint32)quotient))
\r
1747 FLAG_V = VFLAG_SET;
\r
1751 else /* unsigned */
\r
1753 quotient = dividend / divisor;
\r
1754 if(quotient > 0xffffffff)
\r
1756 FLAG_V = VFLAG_SET;
\r
1759 remainder = dividend % divisor;
\r
1764 dividend = REG_D[(word2 >> 12) & 7];
\r
1765 if(BIT_B(word2)) /* signed */
\r
1767 quotient = (uint64)((sint64)((sint32)dividend) / (sint64)((sint32)divisor));
\r
1768 remainder = (uint64)((sint64)((sint32)dividend) % (sint64)((sint32)divisor));
\r
1770 else /* unsigned */
\r
1772 quotient = dividend / divisor;
\r
1773 remainder = dividend % divisor;
\r
1777 REG_D[word2 & 7] = remainder;
\r
1778 REG_D[(word2 >> 12) & 7] = quotient;
\r
1780 FLAG_N = NFLAG_32(quotient);
\r
1781 FLAG_Z = quotient;
\r
1782 FLAG_V = VFLAG_CLEAR;
\r
1783 FLAG_C = CFLAG_CLEAR;
\r
1786 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
\r
1789 m68ki_exception_illegal();
\r
1793 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
\r
1795 uint word2 = OPER_I_16();
\r
1796 uint divisor = OPER_AY_PD_32();
\r
1797 uint dividend_hi = REG_D[word2 & 7];
\r
1798 uint dividend_lo = REG_D[(word2 >> 12) & 7];
\r
1799 uint quotient = 0;
\r
1800 uint remainder = 0;
\r
1801 uint dividend_neg = 0;
\r
1802 uint divisor_neg = 0;
\r
1808 /* quad / long : long quotient, long remainder */
\r
1811 if(BIT_B(word2)) /* signed */
\r
1813 /* special case in signed divide */
\r
1814 if(dividend_hi == 0 && dividend_lo == 0x80000000 && divisor == 0xffffffff)
\r
1816 REG_D[word2 & 7] = 0;
\r
1817 REG_D[(word2 >> 12) & 7] = 0x80000000;
\r
1819 FLAG_N = NFLAG_SET;
\r
1820 FLAG_Z = ZFLAG_CLEAR;
\r
1821 FLAG_V = VFLAG_CLEAR;
\r
1822 FLAG_C = CFLAG_CLEAR;
\r
1825 if(GET_MSB_32(dividend_hi))
\r
1828 dividend_hi = (uint)MASK_OUT_ABOVE_32((-(sint)dividend_hi) - (dividend_lo != 0));
\r
1829 dividend_lo = (uint)MASK_OUT_ABOVE_32(-(sint)dividend_lo);
\r
1831 if(GET_MSB_32(divisor))
\r
1834 divisor = (uint)MASK_OUT_ABOVE_32(-(sint)divisor);
\r
1839 /* if the upper long is greater than the divisor, we're overflowing. */
\r
1840 if(dividend_hi >= divisor)
\r
1842 FLAG_V = VFLAG_SET;
\r
1846 for(i = 31; i >= 0; i--)
\r
1849 remainder = (remainder << 1) + ((dividend_hi >> i) & 1);
\r
1850 if(remainder >= divisor)
\r
1852 remainder -= divisor;
\r
1856 for(i = 31; i >= 0; i--)
\r
1859 overflow = GET_MSB_32(remainder);
\r
1860 remainder = (remainder << 1) + ((dividend_lo >> i) & 1);
\r
1861 if(remainder >= divisor || overflow)
\r
1863 remainder -= divisor;
\r
1868 if(BIT_B(word2)) /* signed */
\r
1870 if(quotient > 0x7fffffff)
\r
1872 FLAG_V = VFLAG_SET;
\r
1877 remainder = (uint)MASK_OUT_ABOVE_32(-(sint)remainder);
\r
1878 quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);
\r
1881 quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);
\r
1884 REG_D[word2 & 7] = remainder;
\r
1885 REG_D[(word2 >> 12) & 7] = quotient;
\r
1887 FLAG_N = NFLAG_32(quotient);
\r
1888 FLAG_Z = quotient;
\r
1889 FLAG_V = VFLAG_CLEAR;
\r
1890 FLAG_C = CFLAG_CLEAR;
\r
1894 /* long / long: long quotient, maybe long remainder */
\r
1895 if(BIT_B(word2)) /* signed */
\r
1897 /* Special case in divide */
\r
1898 if(dividend_lo == 0x80000000 && divisor == 0xffffffff)
\r
1900 FLAG_N = NFLAG_SET;
\r
1901 FLAG_Z = ZFLAG_CLEAR;
\r
1902 FLAG_V = VFLAG_CLEAR;
\r
1903 FLAG_C = CFLAG_CLEAR;
\r
1904 REG_D[(word2 >> 12) & 7] = 0x80000000;
\r
1905 REG_D[word2 & 7] = 0;
\r
1908 REG_D[word2 & 7] = MAKE_INT_32(dividend_lo) % MAKE_INT_32(divisor);
\r
1909 quotient = REG_D[(word2 >> 12) & 7] = MAKE_INT_32(dividend_lo) / MAKE_INT_32(divisor);
\r
1913 REG_D[word2 & 7] = MASK_OUT_ABOVE_32(dividend_lo) % MASK_OUT_ABOVE_32(divisor);
\r
1914 quotient = REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(dividend_lo) / MASK_OUT_ABOVE_32(divisor);
\r
1917 FLAG_N = NFLAG_32(quotient);
\r
1918 FLAG_Z = quotient;
\r
1919 FLAG_V = VFLAG_CLEAR;
\r
1920 FLAG_C = CFLAG_CLEAR;
\r
1923 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
\r
1926 m68ki_exception_illegal();
\r
1932 void m68k_op_divl_32_di(void)
\r
1934 #if M68K_USE_64_BIT
\r
1936 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
\r
1938 uint word2 = OPER_I_16();
\r
1939 uint64 divisor = OPER_AY_DI_32();
\r
1940 uint64 dividend = 0;
\r
1941 uint64 quotient = 0;
\r
1942 uint64 remainder = 0;
\r
1946 if(BIT_A(word2)) /* 64 bit */
\r
1948 dividend = REG_D[word2 & 7];
\r
1950 dividend |= REG_D[(word2 >> 12) & 7];
\r
1952 if(BIT_B(word2)) /* signed */
\r
1954 quotient = (uint64)((sint64)dividend / (sint64)((sint32)divisor));
\r
1955 remainder = (uint64)((sint64)dividend % (sint64)((sint32)divisor));
\r
1956 if((sint64)quotient != (sint64)((sint32)quotient))
\r
1958 FLAG_V = VFLAG_SET;
\r
1962 else /* unsigned */
\r
1964 quotient = dividend / divisor;
\r
1965 if(quotient > 0xffffffff)
\r
1967 FLAG_V = VFLAG_SET;
\r
1970 remainder = dividend % divisor;
\r
1975 dividend = REG_D[(word2 >> 12) & 7];
\r
1976 if(BIT_B(word2)) /* signed */
\r
1978 quotient = (uint64)((sint64)((sint32)dividend) / (sint64)((sint32)divisor));
\r
1979 remainder = (uint64)((sint64)((sint32)dividend) % (sint64)((sint32)divisor));
\r
1981 else /* unsigned */
\r
1983 quotient = dividend / divisor;
\r
1984 remainder = dividend % divisor;
\r
1988 REG_D[word2 & 7] = remainder;
\r
1989 REG_D[(word2 >> 12) & 7] = quotient;
\r
1991 FLAG_N = NFLAG_32(quotient);
\r
1992 FLAG_Z = quotient;
\r
1993 FLAG_V = VFLAG_CLEAR;
\r
1994 FLAG_C = CFLAG_CLEAR;
\r
1997 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
\r
2000 m68ki_exception_illegal();
\r
2004 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
\r
2006 uint word2 = OPER_I_16();
\r
2007 uint divisor = OPER_AY_DI_32();
\r
2008 uint dividend_hi = REG_D[word2 & 7];
\r
2009 uint dividend_lo = REG_D[(word2 >> 12) & 7];
\r
2010 uint quotient = 0;
\r
2011 uint remainder = 0;
\r
2012 uint dividend_neg = 0;
\r
2013 uint divisor_neg = 0;
\r
2019 /* quad / long : long quotient, long remainder */
\r
2022 if(BIT_B(word2)) /* signed */
\r
2024 /* special case in signed divide */
\r
2025 if(dividend_hi == 0 && dividend_lo == 0x80000000 && divisor == 0xffffffff)
\r
2027 REG_D[word2 & 7] = 0;
\r
2028 REG_D[(word2 >> 12) & 7] = 0x80000000;
\r
2030 FLAG_N = NFLAG_SET;
\r
2031 FLAG_Z = ZFLAG_CLEAR;
\r
2032 FLAG_V = VFLAG_CLEAR;
\r
2033 FLAG_C = CFLAG_CLEAR;
\r
2036 if(GET_MSB_32(dividend_hi))
\r
2039 dividend_hi = (uint)MASK_OUT_ABOVE_32((-(sint)dividend_hi) - (dividend_lo != 0));
\r
2040 dividend_lo = (uint)MASK_OUT_ABOVE_32(-(sint)dividend_lo);
\r
2042 if(GET_MSB_32(divisor))
\r
2045 divisor = (uint)MASK_OUT_ABOVE_32(-(sint)divisor);
\r
2050 /* if the upper long is greater than the divisor, we're overflowing. */
\r
2051 if(dividend_hi >= divisor)
\r
2053 FLAG_V = VFLAG_SET;
\r
2057 for(i = 31; i >= 0; i--)
\r
2060 remainder = (remainder << 1) + ((dividend_hi >> i) & 1);
\r
2061 if(remainder >= divisor)
\r
2063 remainder -= divisor;
\r
2067 for(i = 31; i >= 0; i--)
\r
2070 overflow = GET_MSB_32(remainder);
\r
2071 remainder = (remainder << 1) + ((dividend_lo >> i) & 1);
\r
2072 if(remainder >= divisor || overflow)
\r
2074 remainder -= divisor;
\r
2079 if(BIT_B(word2)) /* signed */
\r
2081 if(quotient > 0x7fffffff)
\r
2083 FLAG_V = VFLAG_SET;
\r
2088 remainder = (uint)MASK_OUT_ABOVE_32(-(sint)remainder);
\r
2089 quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);
\r
2092 quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);
\r
2095 REG_D[word2 & 7] = remainder;
\r
2096 REG_D[(word2 >> 12) & 7] = quotient;
\r
2098 FLAG_N = NFLAG_32(quotient);
\r
2099 FLAG_Z = quotient;
\r
2100 FLAG_V = VFLAG_CLEAR;
\r
2101 FLAG_C = CFLAG_CLEAR;
\r
2105 /* long / long: long quotient, maybe long remainder */
\r
2106 if(BIT_B(word2)) /* signed */
\r
2108 /* Special case in divide */
\r
2109 if(dividend_lo == 0x80000000 && divisor == 0xffffffff)
\r
2111 FLAG_N = NFLAG_SET;
\r
2112 FLAG_Z = ZFLAG_CLEAR;
\r
2113 FLAG_V = VFLAG_CLEAR;
\r
2114 FLAG_C = CFLAG_CLEAR;
\r
2115 REG_D[(word2 >> 12) & 7] = 0x80000000;
\r
2116 REG_D[word2 & 7] = 0;
\r
2119 REG_D[word2 & 7] = MAKE_INT_32(dividend_lo) % MAKE_INT_32(divisor);
\r
2120 quotient = REG_D[(word2 >> 12) & 7] = MAKE_INT_32(dividend_lo) / MAKE_INT_32(divisor);
\r
2124 REG_D[word2 & 7] = MASK_OUT_ABOVE_32(dividend_lo) % MASK_OUT_ABOVE_32(divisor);
\r
2125 quotient = REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(dividend_lo) / MASK_OUT_ABOVE_32(divisor);
\r
2128 FLAG_N = NFLAG_32(quotient);
\r
2129 FLAG_Z = quotient;
\r
2130 FLAG_V = VFLAG_CLEAR;
\r
2131 FLAG_C = CFLAG_CLEAR;
\r
2134 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
\r
2137 m68ki_exception_illegal();
\r
2143 void m68k_op_divl_32_ix(void)
\r
2145 #if M68K_USE_64_BIT
\r
2147 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
\r
2149 uint word2 = OPER_I_16();
\r
2150 uint64 divisor = OPER_AY_IX_32();
\r
2151 uint64 dividend = 0;
\r
2152 uint64 quotient = 0;
\r
2153 uint64 remainder = 0;
\r
2157 if(BIT_A(word2)) /* 64 bit */
\r
2159 dividend = REG_D[word2 & 7];
\r
2161 dividend |= REG_D[(word2 >> 12) & 7];
\r
2163 if(BIT_B(word2)) /* signed */
\r
2165 quotient = (uint64)((sint64)dividend / (sint64)((sint32)divisor));
\r
2166 remainder = (uint64)((sint64)dividend % (sint64)((sint32)divisor));
\r
2167 if((sint64)quotient != (sint64)((sint32)quotient))
\r
2169 FLAG_V = VFLAG_SET;
\r
2173 else /* unsigned */
\r
2175 quotient = dividend / divisor;
\r
2176 if(quotient > 0xffffffff)
\r
2178 FLAG_V = VFLAG_SET;
\r
2181 remainder = dividend % divisor;
\r
2186 dividend = REG_D[(word2 >> 12) & 7];
\r
2187 if(BIT_B(word2)) /* signed */
\r
2189 quotient = (uint64)((sint64)((sint32)dividend) / (sint64)((sint32)divisor));
\r
2190 remainder = (uint64)((sint64)((sint32)dividend) % (sint64)((sint32)divisor));
\r
2192 else /* unsigned */
\r
2194 quotient = dividend / divisor;
\r
2195 remainder = dividend % divisor;
\r
2199 REG_D[word2 & 7] = remainder;
\r
2200 REG_D[(word2 >> 12) & 7] = quotient;
\r
2202 FLAG_N = NFLAG_32(quotient);
\r
2203 FLAG_Z = quotient;
\r
2204 FLAG_V = VFLAG_CLEAR;
\r
2205 FLAG_C = CFLAG_CLEAR;
\r
2208 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
\r
2211 m68ki_exception_illegal();
\r
2215 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
\r
2217 uint word2 = OPER_I_16();
\r
2218 uint divisor = OPER_AY_IX_32();
\r
2219 uint dividend_hi = REG_D[word2 & 7];
\r
2220 uint dividend_lo = REG_D[(word2 >> 12) & 7];
\r
2221 uint quotient = 0;
\r
2222 uint remainder = 0;
\r
2223 uint dividend_neg = 0;
\r
2224 uint divisor_neg = 0;
\r
2230 /* quad / long : long quotient, long remainder */
\r
2233 if(BIT_B(word2)) /* signed */
\r
2235 /* special case in signed divide */
\r
2236 if(dividend_hi == 0 && dividend_lo == 0x80000000 && divisor == 0xffffffff)
\r
2238 REG_D[word2 & 7] = 0;
\r
2239 REG_D[(word2 >> 12) & 7] = 0x80000000;
\r
2241 FLAG_N = NFLAG_SET;
\r
2242 FLAG_Z = ZFLAG_CLEAR;
\r
2243 FLAG_V = VFLAG_CLEAR;
\r
2244 FLAG_C = CFLAG_CLEAR;
\r
2247 if(GET_MSB_32(dividend_hi))
\r
2250 dividend_hi = (uint)MASK_OUT_ABOVE_32((-(sint)dividend_hi) - (dividend_lo != 0));
\r
2251 dividend_lo = (uint)MASK_OUT_ABOVE_32(-(sint)dividend_lo);
\r
2253 if(GET_MSB_32(divisor))
\r
2256 divisor = (uint)MASK_OUT_ABOVE_32(-(sint)divisor);
\r
2261 /* if the upper long is greater than the divisor, we're overflowing. */
\r
2262 if(dividend_hi >= divisor)
\r
2264 FLAG_V = VFLAG_SET;
\r
2268 for(i = 31; i >= 0; i--)
\r
2271 remainder = (remainder << 1) + ((dividend_hi >> i) & 1);
\r
2272 if(remainder >= divisor)
\r
2274 remainder -= divisor;
\r
2278 for(i = 31; i >= 0; i--)
\r
2281 overflow = GET_MSB_32(remainder);
\r
2282 remainder = (remainder << 1) + ((dividend_lo >> i) & 1);
\r
2283 if(remainder >= divisor || overflow)
\r
2285 remainder -= divisor;
\r
2290 if(BIT_B(word2)) /* signed */
\r
2292 if(quotient > 0x7fffffff)
\r
2294 FLAG_V = VFLAG_SET;
\r
2299 remainder = (uint)MASK_OUT_ABOVE_32(-(sint)remainder);
\r
2300 quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);
\r
2303 quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);
\r
2306 REG_D[word2 & 7] = remainder;
\r
2307 REG_D[(word2 >> 12) & 7] = quotient;
\r
2309 FLAG_N = NFLAG_32(quotient);
\r
2310 FLAG_Z = quotient;
\r
2311 FLAG_V = VFLAG_CLEAR;
\r
2312 FLAG_C = CFLAG_CLEAR;
\r
2316 /* long / long: long quotient, maybe long remainder */
\r
2317 if(BIT_B(word2)) /* signed */
\r
2319 /* Special case in divide */
\r
2320 if(dividend_lo == 0x80000000 && divisor == 0xffffffff)
\r
2322 FLAG_N = NFLAG_SET;
\r
2323 FLAG_Z = ZFLAG_CLEAR;
\r
2324 FLAG_V = VFLAG_CLEAR;
\r
2325 FLAG_C = CFLAG_CLEAR;
\r
2326 REG_D[(word2 >> 12) & 7] = 0x80000000;
\r
2327 REG_D[word2 & 7] = 0;
\r
2330 REG_D[word2 & 7] = MAKE_INT_32(dividend_lo) % MAKE_INT_32(divisor);
\r
2331 quotient = REG_D[(word2 >> 12) & 7] = MAKE_INT_32(dividend_lo) / MAKE_INT_32(divisor);
\r
2335 REG_D[word2 & 7] = MASK_OUT_ABOVE_32(dividend_lo) % MASK_OUT_ABOVE_32(divisor);
\r
2336 quotient = REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(dividend_lo) / MASK_OUT_ABOVE_32(divisor);
\r
2339 FLAG_N = NFLAG_32(quotient);
\r
2340 FLAG_Z = quotient;
\r
2341 FLAG_V = VFLAG_CLEAR;
\r
2342 FLAG_C = CFLAG_CLEAR;
\r
2345 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
\r
2348 m68ki_exception_illegal();
\r
2354 void m68k_op_divl_32_aw(void)
\r
2356 #if M68K_USE_64_BIT
\r
2358 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
\r
2360 uint word2 = OPER_I_16();
\r
2361 uint64 divisor = OPER_AW_32();
\r
2362 uint64 dividend = 0;
\r
2363 uint64 quotient = 0;
\r
2364 uint64 remainder = 0;
\r
2368 if(BIT_A(word2)) /* 64 bit */
\r
2370 dividend = REG_D[word2 & 7];
\r
2372 dividend |= REG_D[(word2 >> 12) & 7];
\r
2374 if(BIT_B(word2)) /* signed */
\r
2376 quotient = (uint64)((sint64)dividend / (sint64)((sint32)divisor));
\r
2377 remainder = (uint64)((sint64)dividend % (sint64)((sint32)divisor));
\r
2378 if((sint64)quotient != (sint64)((sint32)quotient))
\r
2380 FLAG_V = VFLAG_SET;
\r
2384 else /* unsigned */
\r
2386 quotient = dividend / divisor;
\r
2387 if(quotient > 0xffffffff)
\r
2389 FLAG_V = VFLAG_SET;
\r
2392 remainder = dividend % divisor;
\r
2397 dividend = REG_D[(word2 >> 12) & 7];
\r
2398 if(BIT_B(word2)) /* signed */
\r
2400 quotient = (uint64)((sint64)((sint32)dividend) / (sint64)((sint32)divisor));
\r
2401 remainder = (uint64)((sint64)((sint32)dividend) % (sint64)((sint32)divisor));
\r
2403 else /* unsigned */
\r
2405 quotient = dividend / divisor;
\r
2406 remainder = dividend % divisor;
\r
2410 REG_D[word2 & 7] = remainder;
\r
2411 REG_D[(word2 >> 12) & 7] = quotient;
\r
2413 FLAG_N = NFLAG_32(quotient);
\r
2414 FLAG_Z = quotient;
\r
2415 FLAG_V = VFLAG_CLEAR;
\r
2416 FLAG_C = CFLAG_CLEAR;
\r
2419 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
\r
2422 m68ki_exception_illegal();
\r
2426 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
\r
2428 uint word2 = OPER_I_16();
\r
2429 uint divisor = OPER_AW_32();
\r
2430 uint dividend_hi = REG_D[word2 & 7];
\r
2431 uint dividend_lo = REG_D[(word2 >> 12) & 7];
\r
2432 uint quotient = 0;
\r
2433 uint remainder = 0;
\r
2434 uint dividend_neg = 0;
\r
2435 uint divisor_neg = 0;
\r
2441 /* quad / long : long quotient, long remainder */
\r
2444 if(BIT_B(word2)) /* signed */
\r
2446 /* special case in signed divide */
\r
2447 if(dividend_hi == 0 && dividend_lo == 0x80000000 && divisor == 0xffffffff)
\r
2449 REG_D[word2 & 7] = 0;
\r
2450 REG_D[(word2 >> 12) & 7] = 0x80000000;
\r
2452 FLAG_N = NFLAG_SET;
\r
2453 FLAG_Z = ZFLAG_CLEAR;
\r
2454 FLAG_V = VFLAG_CLEAR;
\r
2455 FLAG_C = CFLAG_CLEAR;
\r
2458 if(GET_MSB_32(dividend_hi))
\r
2461 dividend_hi = (uint)MASK_OUT_ABOVE_32((-(sint)dividend_hi) - (dividend_lo != 0));
\r
2462 dividend_lo = (uint)MASK_OUT_ABOVE_32(-(sint)dividend_lo);
\r
2464 if(GET_MSB_32(divisor))
\r
2467 divisor = (uint)MASK_OUT_ABOVE_32(-(sint)divisor);
\r
2472 /* if the upper long is greater than the divisor, we're overflowing. */
\r
2473 if(dividend_hi >= divisor)
\r
2475 FLAG_V = VFLAG_SET;
\r
2479 for(i = 31; i >= 0; i--)
\r
2482 remainder = (remainder << 1) + ((dividend_hi >> i) & 1);
\r
2483 if(remainder >= divisor)
\r
2485 remainder -= divisor;
\r
2489 for(i = 31; i >= 0; i--)
\r
2492 overflow = GET_MSB_32(remainder);
\r
2493 remainder = (remainder << 1) + ((dividend_lo >> i) & 1);
\r
2494 if(remainder >= divisor || overflow)
\r
2496 remainder -= divisor;
\r
2501 if(BIT_B(word2)) /* signed */
\r
2503 if(quotient > 0x7fffffff)
\r
2505 FLAG_V = VFLAG_SET;
\r
2510 remainder = (uint)MASK_OUT_ABOVE_32(-(sint)remainder);
\r
2511 quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);
\r
2514 quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);
\r
2517 REG_D[word2 & 7] = remainder;
\r
2518 REG_D[(word2 >> 12) & 7] = quotient;
\r
2520 FLAG_N = NFLAG_32(quotient);
\r
2521 FLAG_Z = quotient;
\r
2522 FLAG_V = VFLAG_CLEAR;
\r
2523 FLAG_C = CFLAG_CLEAR;
\r
2527 /* long / long: long quotient, maybe long remainder */
\r
2528 if(BIT_B(word2)) /* signed */
\r
2530 /* Special case in divide */
\r
2531 if(dividend_lo == 0x80000000 && divisor == 0xffffffff)
\r
2533 FLAG_N = NFLAG_SET;
\r
2534 FLAG_Z = ZFLAG_CLEAR;
\r
2535 FLAG_V = VFLAG_CLEAR;
\r
2536 FLAG_C = CFLAG_CLEAR;
\r
2537 REG_D[(word2 >> 12) & 7] = 0x80000000;
\r
2538 REG_D[word2 & 7] = 0;
\r
2541 REG_D[word2 & 7] = MAKE_INT_32(dividend_lo) % MAKE_INT_32(divisor);
\r
2542 quotient = REG_D[(word2 >> 12) & 7] = MAKE_INT_32(dividend_lo) / MAKE_INT_32(divisor);
\r
2546 REG_D[word2 & 7] = MASK_OUT_ABOVE_32(dividend_lo) % MASK_OUT_ABOVE_32(divisor);
\r
2547 quotient = REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(dividend_lo) / MASK_OUT_ABOVE_32(divisor);
\r
2550 FLAG_N = NFLAG_32(quotient);
\r
2551 FLAG_Z = quotient;
\r
2552 FLAG_V = VFLAG_CLEAR;
\r
2553 FLAG_C = CFLAG_CLEAR;
\r
2556 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
\r
2559 m68ki_exception_illegal();
\r
2565 void m68k_op_divl_32_al(void)
\r
2567 #if M68K_USE_64_BIT
\r
2569 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
\r
2571 uint word2 = OPER_I_16();
\r
2572 uint64 divisor = OPER_AL_32();
\r
2573 uint64 dividend = 0;
\r
2574 uint64 quotient = 0;
\r
2575 uint64 remainder = 0;
\r
2579 if(BIT_A(word2)) /* 64 bit */
\r
2581 dividend = REG_D[word2 & 7];
\r
2583 dividend |= REG_D[(word2 >> 12) & 7];
\r
2585 if(BIT_B(word2)) /* signed */
\r
2587 quotient = (uint64)((sint64)dividend / (sint64)((sint32)divisor));
\r
2588 remainder = (uint64)((sint64)dividend % (sint64)((sint32)divisor));
\r
2589 if((sint64)quotient != (sint64)((sint32)quotient))
\r
2591 FLAG_V = VFLAG_SET;
\r
2595 else /* unsigned */
\r
2597 quotient = dividend / divisor;
\r
2598 if(quotient > 0xffffffff)
\r
2600 FLAG_V = VFLAG_SET;
\r
2603 remainder = dividend % divisor;
\r
2608 dividend = REG_D[(word2 >> 12) & 7];
\r
2609 if(BIT_B(word2)) /* signed */
\r
2611 quotient = (uint64)((sint64)((sint32)dividend) / (sint64)((sint32)divisor));
\r
2612 remainder = (uint64)((sint64)((sint32)dividend) % (sint64)((sint32)divisor));
\r
2614 else /* unsigned */
\r
2616 quotient = dividend / divisor;
\r
2617 remainder = dividend % divisor;
\r
2621 REG_D[word2 & 7] = remainder;
\r
2622 REG_D[(word2 >> 12) & 7] = quotient;
\r
2624 FLAG_N = NFLAG_32(quotient);
\r
2625 FLAG_Z = quotient;
\r
2626 FLAG_V = VFLAG_CLEAR;
\r
2627 FLAG_C = CFLAG_CLEAR;
\r
2630 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
\r
2633 m68ki_exception_illegal();
\r
2637 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
\r
2639 uint word2 = OPER_I_16();
\r
2640 uint divisor = OPER_AL_32();
\r
2641 uint dividend_hi = REG_D[word2 & 7];
\r
2642 uint dividend_lo = REG_D[(word2 >> 12) & 7];
\r
2643 uint quotient = 0;
\r
2644 uint remainder = 0;
\r
2645 uint dividend_neg = 0;
\r
2646 uint divisor_neg = 0;
\r
2652 /* quad / long : long quotient, long remainder */
\r
2655 if(BIT_B(word2)) /* signed */
\r
2657 /* special case in signed divide */
\r
2658 if(dividend_hi == 0 && dividend_lo == 0x80000000 && divisor == 0xffffffff)
\r
2660 REG_D[word2 & 7] = 0;
\r
2661 REG_D[(word2 >> 12) & 7] = 0x80000000;
\r
2663 FLAG_N = NFLAG_SET;
\r
2664 FLAG_Z = ZFLAG_CLEAR;
\r
2665 FLAG_V = VFLAG_CLEAR;
\r
2666 FLAG_C = CFLAG_CLEAR;
\r
2669 if(GET_MSB_32(dividend_hi))
\r
2672 dividend_hi = (uint)MASK_OUT_ABOVE_32((-(sint)dividend_hi) - (dividend_lo != 0));
\r
2673 dividend_lo = (uint)MASK_OUT_ABOVE_32(-(sint)dividend_lo);
\r
2675 if(GET_MSB_32(divisor))
\r
2678 divisor = (uint)MASK_OUT_ABOVE_32(-(sint)divisor);
\r
2683 /* if the upper long is greater than the divisor, we're overflowing. */
\r
2684 if(dividend_hi >= divisor)
\r
2686 FLAG_V = VFLAG_SET;
\r
2690 for(i = 31; i >= 0; i--)
\r
2693 remainder = (remainder << 1) + ((dividend_hi >> i) & 1);
\r
2694 if(remainder >= divisor)
\r
2696 remainder -= divisor;
\r
2700 for(i = 31; i >= 0; i--)
\r
2703 overflow = GET_MSB_32(remainder);
\r
2704 remainder = (remainder << 1) + ((dividend_lo >> i) & 1);
\r
2705 if(remainder >= divisor || overflow)
\r
2707 remainder -= divisor;
\r
2712 if(BIT_B(word2)) /* signed */
\r
2714 if(quotient > 0x7fffffff)
\r
2716 FLAG_V = VFLAG_SET;
\r
2721 remainder = (uint)MASK_OUT_ABOVE_32(-(sint)remainder);
\r
2722 quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);
\r
2725 quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);
\r
2728 REG_D[word2 & 7] = remainder;
\r
2729 REG_D[(word2 >> 12) & 7] = quotient;
\r
2731 FLAG_N = NFLAG_32(quotient);
\r
2732 FLAG_Z = quotient;
\r
2733 FLAG_V = VFLAG_CLEAR;
\r
2734 FLAG_C = CFLAG_CLEAR;
\r
2738 /* long / long: long quotient, maybe long remainder */
\r
2739 if(BIT_B(word2)) /* signed */
\r
2741 /* Special case in divide */
\r
2742 if(dividend_lo == 0x80000000 && divisor == 0xffffffff)
\r
2744 FLAG_N = NFLAG_SET;
\r
2745 FLAG_Z = ZFLAG_CLEAR;
\r
2746 FLAG_V = VFLAG_CLEAR;
\r
2747 FLAG_C = CFLAG_CLEAR;
\r
2748 REG_D[(word2 >> 12) & 7] = 0x80000000;
\r
2749 REG_D[word2 & 7] = 0;
\r
2752 REG_D[word2 & 7] = MAKE_INT_32(dividend_lo) % MAKE_INT_32(divisor);
\r
2753 quotient = REG_D[(word2 >> 12) & 7] = MAKE_INT_32(dividend_lo) / MAKE_INT_32(divisor);
\r
2757 REG_D[word2 & 7] = MASK_OUT_ABOVE_32(dividend_lo) % MASK_OUT_ABOVE_32(divisor);
\r
2758 quotient = REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(dividend_lo) / MASK_OUT_ABOVE_32(divisor);
\r
2761 FLAG_N = NFLAG_32(quotient);
\r
2762 FLAG_Z = quotient;
\r
2763 FLAG_V = VFLAG_CLEAR;
\r
2764 FLAG_C = CFLAG_CLEAR;
\r
2767 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
\r
2770 m68ki_exception_illegal();
\r
2776 void m68k_op_divl_32_pcdi(void)
\r
2778 #if M68K_USE_64_BIT
\r
2780 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
\r
2782 uint word2 = OPER_I_16();
\r
2783 uint64 divisor = OPER_PCDI_32();
\r
2784 uint64 dividend = 0;
\r
2785 uint64 quotient = 0;
\r
2786 uint64 remainder = 0;
\r
2790 if(BIT_A(word2)) /* 64 bit */
\r
2792 dividend = REG_D[word2 & 7];
\r
2794 dividend |= REG_D[(word2 >> 12) & 7];
\r
2796 if(BIT_B(word2)) /* signed */
\r
2798 quotient = (uint64)((sint64)dividend / (sint64)((sint32)divisor));
\r
2799 remainder = (uint64)((sint64)dividend % (sint64)((sint32)divisor));
\r
2800 if((sint64)quotient != (sint64)((sint32)quotient))
\r
2802 FLAG_V = VFLAG_SET;
\r
2806 else /* unsigned */
\r
2808 quotient = dividend / divisor;
\r
2809 if(quotient > 0xffffffff)
\r
2811 FLAG_V = VFLAG_SET;
\r
2814 remainder = dividend % divisor;
\r
2819 dividend = REG_D[(word2 >> 12) & 7];
\r
2820 if(BIT_B(word2)) /* signed */
\r
2822 quotient = (uint64)((sint64)((sint32)dividend) / (sint64)((sint32)divisor));
\r
2823 remainder = (uint64)((sint64)((sint32)dividend) % (sint64)((sint32)divisor));
\r
2825 else /* unsigned */
\r
2827 quotient = dividend / divisor;
\r
2828 remainder = dividend % divisor;
\r
2832 REG_D[word2 & 7] = remainder;
\r
2833 REG_D[(word2 >> 12) & 7] = quotient;
\r
2835 FLAG_N = NFLAG_32(quotient);
\r
2836 FLAG_Z = quotient;
\r
2837 FLAG_V = VFLAG_CLEAR;
\r
2838 FLAG_C = CFLAG_CLEAR;
\r
2841 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
\r
2844 m68ki_exception_illegal();
\r
2848 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
\r
2850 uint word2 = OPER_I_16();
\r
2851 uint divisor = OPER_PCDI_32();
\r
2852 uint dividend_hi = REG_D[word2 & 7];
\r
2853 uint dividend_lo = REG_D[(word2 >> 12) & 7];
\r
2854 uint quotient = 0;
\r
2855 uint remainder = 0;
\r
2856 uint dividend_neg = 0;
\r
2857 uint divisor_neg = 0;
\r
2863 /* quad / long : long quotient, long remainder */
\r
2866 if(BIT_B(word2)) /* signed */
\r
2868 /* special case in signed divide */
\r
2869 if(dividend_hi == 0 && dividend_lo == 0x80000000 && divisor == 0xffffffff)
\r
2871 REG_D[word2 & 7] = 0;
\r
2872 REG_D[(word2 >> 12) & 7] = 0x80000000;
\r
2874 FLAG_N = NFLAG_SET;
\r
2875 FLAG_Z = ZFLAG_CLEAR;
\r
2876 FLAG_V = VFLAG_CLEAR;
\r
2877 FLAG_C = CFLAG_CLEAR;
\r
2880 if(GET_MSB_32(dividend_hi))
\r
2883 dividend_hi = (uint)MASK_OUT_ABOVE_32((-(sint)dividend_hi) - (dividend_lo != 0));
\r
2884 dividend_lo = (uint)MASK_OUT_ABOVE_32(-(sint)dividend_lo);
\r
2886 if(GET_MSB_32(divisor))
\r
2889 divisor = (uint)MASK_OUT_ABOVE_32(-(sint)divisor);
\r
2894 /* if the upper long is greater than the divisor, we're overflowing. */
\r
2895 if(dividend_hi >= divisor)
\r
2897 FLAG_V = VFLAG_SET;
\r
2901 for(i = 31; i >= 0; i--)
\r
2904 remainder = (remainder << 1) + ((dividend_hi >> i) & 1);
\r
2905 if(remainder >= divisor)
\r
2907 remainder -= divisor;
\r
2911 for(i = 31; i >= 0; i--)
\r
2914 overflow = GET_MSB_32(remainder);
\r
2915 remainder = (remainder << 1) + ((dividend_lo >> i) & 1);
\r
2916 if(remainder >= divisor || overflow)
\r
2918 remainder -= divisor;
\r
2923 if(BIT_B(word2)) /* signed */
\r
2925 if(quotient > 0x7fffffff)
\r
2927 FLAG_V = VFLAG_SET;
\r
2932 remainder = (uint)MASK_OUT_ABOVE_32(-(sint)remainder);
\r
2933 quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);
\r
2936 quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);
\r
2939 REG_D[word2 & 7] = remainder;
\r
2940 REG_D[(word2 >> 12) & 7] = quotient;
\r
2942 FLAG_N = NFLAG_32(quotient);
\r
2943 FLAG_Z = quotient;
\r
2944 FLAG_V = VFLAG_CLEAR;
\r
2945 FLAG_C = CFLAG_CLEAR;
\r
2949 /* long / long: long quotient, maybe long remainder */
\r
2950 if(BIT_B(word2)) /* signed */
\r
2952 /* Special case in divide */
\r
2953 if(dividend_lo == 0x80000000 && divisor == 0xffffffff)
\r
2955 FLAG_N = NFLAG_SET;
\r
2956 FLAG_Z = ZFLAG_CLEAR;
\r
2957 FLAG_V = VFLAG_CLEAR;
\r
2958 FLAG_C = CFLAG_CLEAR;
\r
2959 REG_D[(word2 >> 12) & 7] = 0x80000000;
\r
2960 REG_D[word2 & 7] = 0;
\r
2963 REG_D[word2 & 7] = MAKE_INT_32(dividend_lo) % MAKE_INT_32(divisor);
\r
2964 quotient = REG_D[(word2 >> 12) & 7] = MAKE_INT_32(dividend_lo) / MAKE_INT_32(divisor);
\r
2968 REG_D[word2 & 7] = MASK_OUT_ABOVE_32(dividend_lo) % MASK_OUT_ABOVE_32(divisor);
\r
2969 quotient = REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(dividend_lo) / MASK_OUT_ABOVE_32(divisor);
\r
2972 FLAG_N = NFLAG_32(quotient);
\r
2973 FLAG_Z = quotient;
\r
2974 FLAG_V = VFLAG_CLEAR;
\r
2975 FLAG_C = CFLAG_CLEAR;
\r
2978 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
\r
2981 m68ki_exception_illegal();
\r
2987 void m68k_op_divl_32_pcix(void)
\r
2989 #if M68K_USE_64_BIT
\r
2991 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
\r
2993 uint word2 = OPER_I_16();
\r
2994 uint64 divisor = OPER_PCIX_32();
\r
2995 uint64 dividend = 0;
\r
2996 uint64 quotient = 0;
\r
2997 uint64 remainder = 0;
\r
3001 if(BIT_A(word2)) /* 64 bit */
\r
3003 dividend = REG_D[word2 & 7];
\r
3005 dividend |= REG_D[(word2 >> 12) & 7];
\r
3007 if(BIT_B(word2)) /* signed */
\r
3009 quotient = (uint64)((sint64)dividend / (sint64)((sint32)divisor));
\r
3010 remainder = (uint64)((sint64)dividend % (sint64)((sint32)divisor));
\r
3011 if((sint64)quotient != (sint64)((sint32)quotient))
\r
3013 FLAG_V = VFLAG_SET;
\r
3017 else /* unsigned */
\r
3019 quotient = dividend / divisor;
\r
3020 if(quotient > 0xffffffff)
\r
3022 FLAG_V = VFLAG_SET;
\r
3025 remainder = dividend % divisor;
\r
3030 dividend = REG_D[(word2 >> 12) & 7];
\r
3031 if(BIT_B(word2)) /* signed */
\r
3033 quotient = (uint64)((sint64)((sint32)dividend) / (sint64)((sint32)divisor));
\r
3034 remainder = (uint64)((sint64)((sint32)dividend) % (sint64)((sint32)divisor));
\r
3036 else /* unsigned */
\r
3038 quotient = dividend / divisor;
\r
3039 remainder = dividend % divisor;
\r
3043 REG_D[word2 & 7] = remainder;
\r
3044 REG_D[(word2 >> 12) & 7] = quotient;
\r
3046 FLAG_N = NFLAG_32(quotient);
\r
3047 FLAG_Z = quotient;
\r
3048 FLAG_V = VFLAG_CLEAR;
\r
3049 FLAG_C = CFLAG_CLEAR;
\r
3052 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
\r
3055 m68ki_exception_illegal();
\r
3059 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
\r
3061 uint word2 = OPER_I_16();
\r
3062 uint divisor = OPER_PCIX_32();
\r
3063 uint dividend_hi = REG_D[word2 & 7];
\r
3064 uint dividend_lo = REG_D[(word2 >> 12) & 7];
\r
3065 uint quotient = 0;
\r
3066 uint remainder = 0;
\r
3067 uint dividend_neg = 0;
\r
3068 uint divisor_neg = 0;
\r
3074 /* quad / long : long quotient, long remainder */
\r
3077 if(BIT_B(word2)) /* signed */
\r
3079 /* special case in signed divide */
\r
3080 if(dividend_hi == 0 && dividend_lo == 0x80000000 && divisor == 0xffffffff)
\r
3082 REG_D[word2 & 7] = 0;
\r
3083 REG_D[(word2 >> 12) & 7] = 0x80000000;
\r
3085 FLAG_N = NFLAG_SET;
\r
3086 FLAG_Z = ZFLAG_CLEAR;
\r
3087 FLAG_V = VFLAG_CLEAR;
\r
3088 FLAG_C = CFLAG_CLEAR;
\r
3091 if(GET_MSB_32(dividend_hi))
\r
3094 dividend_hi = (uint)MASK_OUT_ABOVE_32((-(sint)dividend_hi) - (dividend_lo != 0));
\r
3095 dividend_lo = (uint)MASK_OUT_ABOVE_32(-(sint)dividend_lo);
\r
3097 if(GET_MSB_32(divisor))
\r
3100 divisor = (uint)MASK_OUT_ABOVE_32(-(sint)divisor);
\r
3105 /* if the upper long is greater than the divisor, we're overflowing. */
\r
3106 if(dividend_hi >= divisor)
\r
3108 FLAG_V = VFLAG_SET;
\r
3112 for(i = 31; i >= 0; i--)
\r
3115 remainder = (remainder << 1) + ((dividend_hi >> i) & 1);
\r
3116 if(remainder >= divisor)
\r
3118 remainder -= divisor;
\r
3122 for(i = 31; i >= 0; i--)
\r
3125 overflow = GET_MSB_32(remainder);
\r
3126 remainder = (remainder << 1) + ((dividend_lo >> i) & 1);
\r
3127 if(remainder >= divisor || overflow)
\r
3129 remainder -= divisor;
\r
3134 if(BIT_B(word2)) /* signed */
\r
3136 if(quotient > 0x7fffffff)
\r
3138 FLAG_V = VFLAG_SET;
\r
3143 remainder = (uint)MASK_OUT_ABOVE_32(-(sint)remainder);
\r
3144 quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);
\r
3147 quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);
\r
3150 REG_D[word2 & 7] = remainder;
\r
3151 REG_D[(word2 >> 12) & 7] = quotient;
\r
3153 FLAG_N = NFLAG_32(quotient);
\r
3154 FLAG_Z = quotient;
\r
3155 FLAG_V = VFLAG_CLEAR;
\r
3156 FLAG_C = CFLAG_CLEAR;
\r
3160 /* long / long: long quotient, maybe long remainder */
\r
3161 if(BIT_B(word2)) /* signed */
\r
3163 /* Special case in divide */
\r
3164 if(dividend_lo == 0x80000000 && divisor == 0xffffffff)
\r
3166 FLAG_N = NFLAG_SET;
\r
3167 FLAG_Z = ZFLAG_CLEAR;
\r
3168 FLAG_V = VFLAG_CLEAR;
\r
3169 FLAG_C = CFLAG_CLEAR;
\r
3170 REG_D[(word2 >> 12) & 7] = 0x80000000;
\r
3171 REG_D[word2 & 7] = 0;
\r
3174 REG_D[word2 & 7] = MAKE_INT_32(dividend_lo) % MAKE_INT_32(divisor);
\r
3175 quotient = REG_D[(word2 >> 12) & 7] = MAKE_INT_32(dividend_lo) / MAKE_INT_32(divisor);
\r
3179 REG_D[word2 & 7] = MASK_OUT_ABOVE_32(dividend_lo) % MASK_OUT_ABOVE_32(divisor);
\r
3180 quotient = REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(dividend_lo) / MASK_OUT_ABOVE_32(divisor);
\r
3183 FLAG_N = NFLAG_32(quotient);
\r
3184 FLAG_Z = quotient;
\r
3185 FLAG_V = VFLAG_CLEAR;
\r
3186 FLAG_C = CFLAG_CLEAR;
\r
3189 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
\r
3192 m68ki_exception_illegal();
\r
3198 void m68k_op_divl_32_i(void)
\r
3200 #if M68K_USE_64_BIT
\r
3202 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
\r
3204 uint word2 = OPER_I_16();
\r
3205 uint64 divisor = OPER_I_32();
\r
3206 uint64 dividend = 0;
\r
3207 uint64 quotient = 0;
\r
3208 uint64 remainder = 0;
\r
3212 if(BIT_A(word2)) /* 64 bit */
\r
3214 dividend = REG_D[word2 & 7];
\r
3216 dividend |= REG_D[(word2 >> 12) & 7];
\r
3218 if(BIT_B(word2)) /* signed */
\r
3220 quotient = (uint64)((sint64)dividend / (sint64)((sint32)divisor));
\r
3221 remainder = (uint64)((sint64)dividend % (sint64)((sint32)divisor));
\r
3222 if((sint64)quotient != (sint64)((sint32)quotient))
\r
3224 FLAG_V = VFLAG_SET;
\r
3228 else /* unsigned */
\r
3230 quotient = dividend / divisor;
\r
3231 if(quotient > 0xffffffff)
\r
3233 FLAG_V = VFLAG_SET;
\r
3236 remainder = dividend % divisor;
\r
3241 dividend = REG_D[(word2 >> 12) & 7];
\r
3242 if(BIT_B(word2)) /* signed */
\r
3244 quotient = (uint64)((sint64)((sint32)dividend) / (sint64)((sint32)divisor));
\r
3245 remainder = (uint64)((sint64)((sint32)dividend) % (sint64)((sint32)divisor));
\r
3247 else /* unsigned */
\r
3249 quotient = dividend / divisor;
\r
3250 remainder = dividend % divisor;
\r
3254 REG_D[word2 & 7] = remainder;
\r
3255 REG_D[(word2 >> 12) & 7] = quotient;
\r
3257 FLAG_N = NFLAG_32(quotient);
\r
3258 FLAG_Z = quotient;
\r
3259 FLAG_V = VFLAG_CLEAR;
\r
3260 FLAG_C = CFLAG_CLEAR;
\r
3263 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
\r
3266 m68ki_exception_illegal();
\r
3270 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
\r
3272 uint word2 = OPER_I_16();
\r
3273 uint divisor = OPER_I_32();
\r
3274 uint dividend_hi = REG_D[word2 & 7];
\r
3275 uint dividend_lo = REG_D[(word2 >> 12) & 7];
\r
3276 uint quotient = 0;
\r
3277 uint remainder = 0;
\r
3278 uint dividend_neg = 0;
\r
3279 uint divisor_neg = 0;
\r
3285 /* quad / long : long quotient, long remainder */
\r
3288 if(BIT_B(word2)) /* signed */
\r
3290 /* special case in signed divide */
\r
3291 if(dividend_hi == 0 && dividend_lo == 0x80000000 && divisor == 0xffffffff)
\r
3293 REG_D[word2 & 7] = 0;
\r
3294 REG_D[(word2 >> 12) & 7] = 0x80000000;
\r
3296 FLAG_N = NFLAG_SET;
\r
3297 FLAG_Z = ZFLAG_CLEAR;
\r
3298 FLAG_V = VFLAG_CLEAR;
\r
3299 FLAG_C = CFLAG_CLEAR;
\r
3302 if(GET_MSB_32(dividend_hi))
\r
3305 dividend_hi = (uint)MASK_OUT_ABOVE_32((-(sint)dividend_hi) - (dividend_lo != 0));
\r
3306 dividend_lo = (uint)MASK_OUT_ABOVE_32(-(sint)dividend_lo);
\r
3308 if(GET_MSB_32(divisor))
\r
3311 divisor = (uint)MASK_OUT_ABOVE_32(-(sint)divisor);
\r
3316 /* if the upper long is greater than the divisor, we're overflowing. */
\r
3317 if(dividend_hi >= divisor)
\r
3319 FLAG_V = VFLAG_SET;
\r
3323 for(i = 31; i >= 0; i--)
\r
3326 remainder = (remainder << 1) + ((dividend_hi >> i) & 1);
\r
3327 if(remainder >= divisor)
\r
3329 remainder -= divisor;
\r
3333 for(i = 31; i >= 0; i--)
\r
3336 overflow = GET_MSB_32(remainder);
\r
3337 remainder = (remainder << 1) + ((dividend_lo >> i) & 1);
\r
3338 if(remainder >= divisor || overflow)
\r
3340 remainder -= divisor;
\r
3345 if(BIT_B(word2)) /* signed */
\r
3347 if(quotient > 0x7fffffff)
\r
3349 FLAG_V = VFLAG_SET;
\r
3354 remainder = (uint)MASK_OUT_ABOVE_32(-(sint)remainder);
\r
3355 quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);
\r
3358 quotient = (uint)MASK_OUT_ABOVE_32(-(sint)quotient);
\r
3361 REG_D[word2 & 7] = remainder;
\r
3362 REG_D[(word2 >> 12) & 7] = quotient;
\r
3364 FLAG_N = NFLAG_32(quotient);
\r
3365 FLAG_Z = quotient;
\r
3366 FLAG_V = VFLAG_CLEAR;
\r
3367 FLAG_C = CFLAG_CLEAR;
\r
3371 /* long / long: long quotient, maybe long remainder */
\r
3372 if(BIT_B(word2)) /* signed */
\r
3374 /* Special case in divide */
\r
3375 if(dividend_lo == 0x80000000 && divisor == 0xffffffff)
\r
3377 FLAG_N = NFLAG_SET;
\r
3378 FLAG_Z = ZFLAG_CLEAR;
\r
3379 FLAG_V = VFLAG_CLEAR;
\r
3380 FLAG_C = CFLAG_CLEAR;
\r
3381 REG_D[(word2 >> 12) & 7] = 0x80000000;
\r
3382 REG_D[word2 & 7] = 0;
\r
3385 REG_D[word2 & 7] = MAKE_INT_32(dividend_lo) % MAKE_INT_32(divisor);
\r
3386 quotient = REG_D[(word2 >> 12) & 7] = MAKE_INT_32(dividend_lo) / MAKE_INT_32(divisor);
\r
3390 REG_D[word2 & 7] = MASK_OUT_ABOVE_32(dividend_lo) % MASK_OUT_ABOVE_32(divisor);
\r
3391 quotient = REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(dividend_lo) / MASK_OUT_ABOVE_32(divisor);
\r
3394 FLAG_N = NFLAG_32(quotient);
\r
3395 FLAG_Z = quotient;
\r
3396 FLAG_V = VFLAG_CLEAR;
\r
3397 FLAG_C = CFLAG_CLEAR;
\r
3400 m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE);
\r
3403 m68ki_exception_illegal();
\r
3409 void m68k_op_eor_8_d(void)
\r
3411 uint res = MASK_OUT_ABOVE_8(DY ^= MASK_OUT_ABOVE_8(DX));
\r
3413 FLAG_N = NFLAG_8(res);
\r
3415 FLAG_C = CFLAG_CLEAR;
\r
3416 FLAG_V = VFLAG_CLEAR;
\r
3420 void m68k_op_eor_8_ai(void)
\r
3422 uint ea = EA_AY_AI_8();
\r
3423 uint res = MASK_OUT_ABOVE_8(DX ^ m68ki_read_8(ea));
\r
3425 m68ki_write_8(ea, res);
\r
3427 FLAG_N = NFLAG_8(res);
\r
3429 FLAG_C = CFLAG_CLEAR;
\r
3430 FLAG_V = VFLAG_CLEAR;
\r
3434 void m68k_op_eor_8_pi(void)
\r
3436 uint ea = EA_AY_PI_8();
\r
3437 uint res = MASK_OUT_ABOVE_8(DX ^ m68ki_read_8(ea));
\r
3439 m68ki_write_8(ea, res);
\r
3441 FLAG_N = NFLAG_8(res);
\r
3443 FLAG_C = CFLAG_CLEAR;
\r
3444 FLAG_V = VFLAG_CLEAR;
\r
3448 void m68k_op_eor_8_pi7(void)
\r
3450 uint ea = EA_A7_PI_8();
\r
3451 uint res = MASK_OUT_ABOVE_8(DX ^ m68ki_read_8(ea));
\r
3453 m68ki_write_8(ea, res);
\r
3455 FLAG_N = NFLAG_8(res);
\r
3457 FLAG_C = CFLAG_CLEAR;
\r
3458 FLAG_V = VFLAG_CLEAR;
\r
3462 void m68k_op_eor_8_pd(void)
\r
3464 uint ea = EA_AY_PD_8();
\r
3465 uint res = MASK_OUT_ABOVE_8(DX ^ m68ki_read_8(ea));
\r
3467 m68ki_write_8(ea, res);
\r
3469 FLAG_N = NFLAG_8(res);
\r
3471 FLAG_C = CFLAG_CLEAR;
\r
3472 FLAG_V = VFLAG_CLEAR;
\r
3476 void m68k_op_eor_8_pd7(void)
\r
3478 uint ea = EA_A7_PD_8();
\r
3479 uint res = MASK_OUT_ABOVE_8(DX ^ m68ki_read_8(ea));
\r
3481 m68ki_write_8(ea, res);
\r
3483 FLAG_N = NFLAG_8(res);
\r
3485 FLAG_C = CFLAG_CLEAR;
\r
3486 FLAG_V = VFLAG_CLEAR;
\r
3490 void m68k_op_eor_8_di(void)
\r
3492 uint ea = EA_AY_DI_8();
\r
3493 uint res = MASK_OUT_ABOVE_8(DX ^ m68ki_read_8(ea));
\r
3495 m68ki_write_8(ea, res);
\r
3497 FLAG_N = NFLAG_8(res);
\r
3499 FLAG_C = CFLAG_CLEAR;
\r
3500 FLAG_V = VFLAG_CLEAR;
\r
3504 void m68k_op_eor_8_ix(void)
\r
3506 uint ea = EA_AY_IX_8();
\r
3507 uint res = MASK_OUT_ABOVE_8(DX ^ m68ki_read_8(ea));
\r
3509 m68ki_write_8(ea, res);
\r
3511 FLAG_N = NFLAG_8(res);
\r
3513 FLAG_C = CFLAG_CLEAR;
\r
3514 FLAG_V = VFLAG_CLEAR;
\r
3518 void m68k_op_eor_8_aw(void)
\r
3520 uint ea = EA_AW_8();
\r
3521 uint res = MASK_OUT_ABOVE_8(DX ^ m68ki_read_8(ea));
\r
3523 m68ki_write_8(ea, res);
\r
3525 FLAG_N = NFLAG_8(res);
\r
3527 FLAG_C = CFLAG_CLEAR;
\r
3528 FLAG_V = VFLAG_CLEAR;
\r
3532 void m68k_op_eor_8_al(void)
\r
3534 uint ea = EA_AL_8();
\r
3535 uint res = MASK_OUT_ABOVE_8(DX ^ m68ki_read_8(ea));
\r
3537 m68ki_write_8(ea, res);
\r
3539 FLAG_N = NFLAG_8(res);
\r
3541 FLAG_C = CFLAG_CLEAR;
\r
3542 FLAG_V = VFLAG_CLEAR;
\r
3546 void m68k_op_eor_16_d(void)
\r
3548 uint res = MASK_OUT_ABOVE_16(DY ^= MASK_OUT_ABOVE_16(DX));
\r
3550 FLAG_N = NFLAG_16(res);
\r
3552 FLAG_C = CFLAG_CLEAR;
\r
3553 FLAG_V = VFLAG_CLEAR;
\r
3557 void m68k_op_eor_16_ai(void)
\r
3559 uint ea = EA_AY_AI_16();
\r
3560 uint res = MASK_OUT_ABOVE_16(DX ^ m68ki_read_16(ea));
\r
3562 m68ki_write_16(ea, res);
\r
3564 FLAG_N = NFLAG_16(res);
\r
3566 FLAG_C = CFLAG_CLEAR;
\r
3567 FLAG_V = VFLAG_CLEAR;
\r
3571 void m68k_op_eor_16_pi(void)
\r
3573 uint ea = EA_AY_PI_16();
\r
3574 uint res = MASK_OUT_ABOVE_16(DX ^ m68ki_read_16(ea));
\r
3576 m68ki_write_16(ea, res);
\r
3578 FLAG_N = NFLAG_16(res);
\r
3580 FLAG_C = CFLAG_CLEAR;
\r
3581 FLAG_V = VFLAG_CLEAR;
\r
3585 void m68k_op_eor_16_pd(void)
\r
3587 uint ea = EA_AY_PD_16();
\r
3588 uint res = MASK_OUT_ABOVE_16(DX ^ m68ki_read_16(ea));
\r
3590 m68ki_write_16(ea, res);
\r
3592 FLAG_N = NFLAG_16(res);
\r
3594 FLAG_C = CFLAG_CLEAR;
\r
3595 FLAG_V = VFLAG_CLEAR;
\r
3599 void m68k_op_eor_16_di(void)
\r
3601 uint ea = EA_AY_DI_16();
\r
3602 uint res = MASK_OUT_ABOVE_16(DX ^ m68ki_read_16(ea));
\r
3604 m68ki_write_16(ea, res);
\r
3606 FLAG_N = NFLAG_16(res);
\r
3608 FLAG_C = CFLAG_CLEAR;
\r
3609 FLAG_V = VFLAG_CLEAR;
\r
3613 void m68k_op_eor_16_ix(void)
\r
3615 uint ea = EA_AY_IX_16();
\r
3616 uint res = MASK_OUT_ABOVE_16(DX ^ m68ki_read_16(ea));
\r
3618 m68ki_write_16(ea, res);
\r
3620 FLAG_N = NFLAG_16(res);
\r
3622 FLAG_C = CFLAG_CLEAR;
\r
3623 FLAG_V = VFLAG_CLEAR;
\r
3627 void m68k_op_eor_16_aw(void)
\r
3629 uint ea = EA_AW_16();
\r
3630 uint res = MASK_OUT_ABOVE_16(DX ^ m68ki_read_16(ea));
\r
3632 m68ki_write_16(ea, res);
\r
3634 FLAG_N = NFLAG_16(res);
\r
3636 FLAG_C = CFLAG_CLEAR;
\r
3637 FLAG_V = VFLAG_CLEAR;
\r
3641 void m68k_op_eor_16_al(void)
\r
3643 uint ea = EA_AL_16();
\r
3644 uint res = MASK_OUT_ABOVE_16(DX ^ m68ki_read_16(ea));
\r
3646 m68ki_write_16(ea, res);
\r
3648 FLAG_N = NFLAG_16(res);
\r
3650 FLAG_C = CFLAG_CLEAR;
\r
3651 FLAG_V = VFLAG_CLEAR;
\r
3655 void m68k_op_eor_32_d(void)
\r
3657 uint res = DY ^= DX;
\r
3659 FLAG_N = NFLAG_32(res);
\r
3661 FLAG_C = CFLAG_CLEAR;
\r
3662 FLAG_V = VFLAG_CLEAR;
\r
3666 void m68k_op_eor_32_ai(void)
\r
3668 uint ea = EA_AY_AI_32();
\r
3669 uint res = DX ^ m68ki_read_32(ea);
\r
3671 m68ki_write_32(ea, res);
\r
3673 FLAG_N = NFLAG_32(res);
\r
3675 FLAG_C = CFLAG_CLEAR;
\r
3676 FLAG_V = VFLAG_CLEAR;
\r
3680 void m68k_op_eor_32_pi(void)
\r
3682 uint ea = EA_AY_PI_32();
\r
3683 uint res = DX ^ m68ki_read_32(ea);
\r
3685 m68ki_write_32(ea, res);
\r
3687 FLAG_N = NFLAG_32(res);
\r
3689 FLAG_C = CFLAG_CLEAR;
\r
3690 FLAG_V = VFLAG_CLEAR;
\r
3694 void m68k_op_eor_32_pd(void)
\r
3696 uint ea = EA_AY_PD_32();
\r
3697 uint res = DX ^ m68ki_read_32(ea);
\r
3699 m68ki_write_32(ea, res);
\r
3701 FLAG_N = NFLAG_32(res);
\r
3703 FLAG_C = CFLAG_CLEAR;
\r
3704 FLAG_V = VFLAG_CLEAR;
\r
3708 void m68k_op_eor_32_di(void)
\r
3710 uint ea = EA_AY_DI_32();
\r
3711 uint res = DX ^ m68ki_read_32(ea);
\r
3713 m68ki_write_32(ea, res);
\r
3715 FLAG_N = NFLAG_32(res);
\r
3717 FLAG_C = CFLAG_CLEAR;
\r
3718 FLAG_V = VFLAG_CLEAR;
\r
3722 void m68k_op_eor_32_ix(void)
\r
3724 uint ea = EA_AY_IX_32();
\r
3725 uint res = DX ^ m68ki_read_32(ea);
\r
3727 m68ki_write_32(ea, res);
\r
3729 FLAG_N = NFLAG_32(res);
\r
3731 FLAG_C = CFLAG_CLEAR;
\r
3732 FLAG_V = VFLAG_CLEAR;
\r
3736 void m68k_op_eor_32_aw(void)
\r
3738 uint ea = EA_AW_32();
\r
3739 uint res = DX ^ m68ki_read_32(ea);
\r
3741 m68ki_write_32(ea, res);
\r
3743 FLAG_N = NFLAG_32(res);
\r
3745 FLAG_C = CFLAG_CLEAR;
\r
3746 FLAG_V = VFLAG_CLEAR;
\r
3750 void m68k_op_eor_32_al(void)
\r
3752 uint ea = EA_AL_32();
\r
3753 uint res = DX ^ m68ki_read_32(ea);
\r
3755 m68ki_write_32(ea, res);
\r
3757 FLAG_N = NFLAG_32(res);
\r
3759 FLAG_C = CFLAG_CLEAR;
\r
3760 FLAG_V = VFLAG_CLEAR;
\r
3764 void m68k_op_eori_8_d(void)
\r
3766 uint res = MASK_OUT_ABOVE_8(DY ^= OPER_I_8());
\r
3768 FLAG_N = NFLAG_8(res);
\r
3770 FLAG_C = CFLAG_CLEAR;
\r
3771 FLAG_V = VFLAG_CLEAR;
\r
3775 void m68k_op_eori_8_ai(void)
\r
3777 uint src = OPER_I_8();
\r
3778 uint ea = EA_AY_AI_8();
\r
3779 uint res = src ^ m68ki_read_8(ea);
\r
3781 m68ki_write_8(ea, res);
\r
3783 FLAG_N = NFLAG_8(res);
\r
3785 FLAG_C = CFLAG_CLEAR;
\r
3786 FLAG_V = VFLAG_CLEAR;
\r
3790 void m68k_op_eori_8_pi(void)
\r
3792 uint src = OPER_I_8();
\r
3793 uint ea = EA_AY_PI_8();
\r
3794 uint res = src ^ m68ki_read_8(ea);
\r
3796 m68ki_write_8(ea, res);
\r
3798 FLAG_N = NFLAG_8(res);
\r
3800 FLAG_C = CFLAG_CLEAR;
\r
3801 FLAG_V = VFLAG_CLEAR;
\r
3805 void m68k_op_eori_8_pi7(void)
\r
3807 uint src = OPER_I_8();
\r
3808 uint ea = EA_A7_PI_8();
\r
3809 uint res = src ^ m68ki_read_8(ea);
\r
3811 m68ki_write_8(ea, res);
\r
3813 FLAG_N = NFLAG_8(res);
\r
3815 FLAG_C = CFLAG_CLEAR;
\r
3816 FLAG_V = VFLAG_CLEAR;
\r
3820 void m68k_op_eori_8_pd(void)
\r
3822 uint src = OPER_I_8();
\r
3823 uint ea = EA_AY_PD_8();
\r
3824 uint res = src ^ m68ki_read_8(ea);
\r
3826 m68ki_write_8(ea, res);
\r
3828 FLAG_N = NFLAG_8(res);
\r
3830 FLAG_C = CFLAG_CLEAR;
\r
3831 FLAG_V = VFLAG_CLEAR;
\r
3835 void m68k_op_eori_8_pd7(void)
\r
3837 uint src = OPER_I_8();
\r
3838 uint ea = EA_A7_PD_8();
\r
3839 uint res = src ^ m68ki_read_8(ea);
\r
3841 m68ki_write_8(ea, res);
\r
3843 FLAG_N = NFLAG_8(res);
\r
3845 FLAG_C = CFLAG_CLEAR;
\r
3846 FLAG_V = VFLAG_CLEAR;
\r
3850 void m68k_op_eori_8_di(void)
\r
3852 uint src = OPER_I_8();
\r
3853 uint ea = EA_AY_DI_8();
\r
3854 uint res = src ^ m68ki_read_8(ea);
\r
3856 m68ki_write_8(ea, res);
\r
3858 FLAG_N = NFLAG_8(res);
\r
3860 FLAG_C = CFLAG_CLEAR;
\r
3861 FLAG_V = VFLAG_CLEAR;
\r
3865 void m68k_op_eori_8_ix(void)
\r
3867 uint src = OPER_I_8();
\r
3868 uint ea = EA_AY_IX_8();
\r
3869 uint res = src ^ m68ki_read_8(ea);
\r
3871 m68ki_write_8(ea, res);
\r
3873 FLAG_N = NFLAG_8(res);
\r
3875 FLAG_C = CFLAG_CLEAR;
\r
3876 FLAG_V = VFLAG_CLEAR;
\r
3880 void m68k_op_eori_8_aw(void)
\r
3882 uint src = OPER_I_8();
\r
3883 uint ea = EA_AW_8();
\r
3884 uint res = src ^ m68ki_read_8(ea);
\r
3886 m68ki_write_8(ea, res);
\r
3888 FLAG_N = NFLAG_8(res);
\r
3890 FLAG_C = CFLAG_CLEAR;
\r
3891 FLAG_V = VFLAG_CLEAR;
\r
3895 void m68k_op_eori_8_al(void)
\r
3897 uint src = OPER_I_8();
\r
3898 uint ea = EA_AL_8();
\r
3899 uint res = src ^ m68ki_read_8(ea);
\r
3901 m68ki_write_8(ea, res);
\r
3903 FLAG_N = NFLAG_8(res);
\r
3905 FLAG_C = CFLAG_CLEAR;
\r
3906 FLAG_V = VFLAG_CLEAR;
\r
3910 void m68k_op_eori_16_d(void)
\r
3912 uint res = MASK_OUT_ABOVE_16(DY ^= OPER_I_16());
\r
3914 FLAG_N = NFLAG_16(res);
\r
3916 FLAG_C = CFLAG_CLEAR;
\r
3917 FLAG_V = VFLAG_CLEAR;
\r
3921 void m68k_op_eori_16_ai(void)
\r
3923 uint src = OPER_I_16();
\r
3924 uint ea = EA_AY_AI_16();
\r
3925 uint res = src ^ m68ki_read_16(ea);
\r
3927 m68ki_write_16(ea, res);
\r
3929 FLAG_N = NFLAG_16(res);
\r
3931 FLAG_C = CFLAG_CLEAR;
\r
3932 FLAG_V = VFLAG_CLEAR;
\r
3936 void m68k_op_eori_16_pi(void)
\r
3938 uint src = OPER_I_16();
\r
3939 uint ea = EA_AY_PI_16();
\r
3940 uint res = src ^ m68ki_read_16(ea);
\r
3942 m68ki_write_16(ea, res);
\r
3944 FLAG_N = NFLAG_16(res);
\r
3946 FLAG_C = CFLAG_CLEAR;
\r
3947 FLAG_V = VFLAG_CLEAR;
\r
3951 void m68k_op_eori_16_pd(void)
\r
3953 uint src = OPER_I_16();
\r
3954 uint ea = EA_AY_PD_16();
\r
3955 uint res = src ^ m68ki_read_16(ea);
\r
3957 m68ki_write_16(ea, res);
\r
3959 FLAG_N = NFLAG_16(res);
\r
3961 FLAG_C = CFLAG_CLEAR;
\r
3962 FLAG_V = VFLAG_CLEAR;
\r
3966 void m68k_op_eori_16_di(void)
\r
3968 uint src = OPER_I_16();
\r
3969 uint ea = EA_AY_DI_16();
\r
3970 uint res = src ^ m68ki_read_16(ea);
\r
3972 m68ki_write_16(ea, res);
\r
3974 FLAG_N = NFLAG_16(res);
\r
3976 FLAG_C = CFLAG_CLEAR;
\r
3977 FLAG_V = VFLAG_CLEAR;
\r
3981 void m68k_op_eori_16_ix(void)
\r
3983 uint src = OPER_I_16();
\r
3984 uint ea = EA_AY_IX_16();
\r
3985 uint res = src ^ m68ki_read_16(ea);
\r
3987 m68ki_write_16(ea, res);
\r
3989 FLAG_N = NFLAG_16(res);
\r
3991 FLAG_C = CFLAG_CLEAR;
\r
3992 FLAG_V = VFLAG_CLEAR;
\r
3996 void m68k_op_eori_16_aw(void)
\r
3998 uint src = OPER_I_16();
\r
3999 uint ea = EA_AW_16();
\r
4000 uint res = src ^ m68ki_read_16(ea);
\r
4002 m68ki_write_16(ea, res);
\r
4004 FLAG_N = NFLAG_16(res);
\r
4006 FLAG_C = CFLAG_CLEAR;
\r
4007 FLAG_V = VFLAG_CLEAR;
\r
4011 void m68k_op_eori_16_al(void)
\r
4013 uint src = OPER_I_16();
\r
4014 uint ea = EA_AL_16();
\r
4015 uint res = src ^ m68ki_read_16(ea);
\r
4017 m68ki_write_16(ea, res);
\r
4019 FLAG_N = NFLAG_16(res);
\r
4021 FLAG_C = CFLAG_CLEAR;
\r
4022 FLAG_V = VFLAG_CLEAR;
\r
4026 void m68k_op_eori_32_d(void)
\r
4028 uint res = DY ^= OPER_I_32();
\r
4030 FLAG_N = NFLAG_32(res);
\r
4032 FLAG_C = CFLAG_CLEAR;
\r
4033 FLAG_V = VFLAG_CLEAR;
\r
4037 void m68k_op_eori_32_ai(void)
\r
4039 uint src = OPER_I_32();
\r
4040 uint ea = EA_AY_AI_32();
\r
4041 uint res = src ^ m68ki_read_32(ea);
\r
4043 m68ki_write_32(ea, res);
\r
4045 FLAG_N = NFLAG_32(res);
\r
4047 FLAG_C = CFLAG_CLEAR;
\r
4048 FLAG_V = VFLAG_CLEAR;
\r
4052 void m68k_op_eori_32_pi(void)
\r
4054 uint src = OPER_I_32();
\r
4055 uint ea = EA_AY_PI_32();
\r
4056 uint res = src ^ m68ki_read_32(ea);
\r
4058 m68ki_write_32(ea, res);
\r
4060 FLAG_N = NFLAG_32(res);
\r
4062 FLAG_C = CFLAG_CLEAR;
\r
4063 FLAG_V = VFLAG_CLEAR;
\r
4067 void m68k_op_eori_32_pd(void)
\r
4069 uint src = OPER_I_32();
\r
4070 uint ea = EA_AY_PD_32();
\r
4071 uint res = src ^ m68ki_read_32(ea);
\r
4073 m68ki_write_32(ea, res);
\r
4075 FLAG_N = NFLAG_32(res);
\r
4077 FLAG_C = CFLAG_CLEAR;
\r
4078 FLAG_V = VFLAG_CLEAR;
\r
4082 void m68k_op_eori_32_di(void)
\r
4084 uint src = OPER_I_32();
\r
4085 uint ea = EA_AY_DI_32();
\r
4086 uint res = src ^ m68ki_read_32(ea);
\r
4088 m68ki_write_32(ea, res);
\r
4090 FLAG_N = NFLAG_32(res);
\r
4092 FLAG_C = CFLAG_CLEAR;
\r
4093 FLAG_V = VFLAG_CLEAR;
\r
4097 void m68k_op_eori_32_ix(void)
\r
4099 uint src = OPER_I_32();
\r
4100 uint ea = EA_AY_IX_32();
\r
4101 uint res = src ^ m68ki_read_32(ea);
\r
4103 m68ki_write_32(ea, res);
\r
4105 FLAG_N = NFLAG_32(res);
\r
4107 FLAG_C = CFLAG_CLEAR;
\r
4108 FLAG_V = VFLAG_CLEAR;
\r
4112 void m68k_op_eori_32_aw(void)
\r
4114 uint src = OPER_I_32();
\r
4115 uint ea = EA_AW_32();
\r
4116 uint res = src ^ m68ki_read_32(ea);
\r
4118 m68ki_write_32(ea, res);
\r
4120 FLAG_N = NFLAG_32(res);
\r
4122 FLAG_C = CFLAG_CLEAR;
\r
4123 FLAG_V = VFLAG_CLEAR;
\r
4127 void m68k_op_eori_32_al(void)
\r
4129 uint src = OPER_I_32();
\r
4130 uint ea = EA_AL_32();
\r
4131 uint res = src ^ m68ki_read_32(ea);
\r
4133 m68ki_write_32(ea, res);
\r
4135 FLAG_N = NFLAG_32(res);
\r
4137 FLAG_C = CFLAG_CLEAR;
\r
4138 FLAG_V = VFLAG_CLEAR;
\r
4142 void m68k_op_eori_16_toc(void)
\r
4144 m68ki_set_ccr(m68ki_get_ccr() ^ OPER_I_16());
\r
4148 void m68k_op_eori_16_tos(void)
\r
4152 uint src = OPER_I_16();
\r
4153 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
\r
4154 m68ki_set_sr(m68ki_get_sr() ^ src);
\r
4157 m68ki_exception_privilege_violation();
\r
4161 void m68k_op_exg_32_dd(void)
\r
4163 uint* reg_a = &DX;
\r
4164 uint* reg_b = &DY;
\r
4165 uint tmp = *reg_a;
\r
4171 void m68k_op_exg_32_aa(void)
\r
4173 uint* reg_a = &AX;
\r
4174 uint* reg_b = &AY;
\r
4175 uint tmp = *reg_a;
\r
4181 void m68k_op_exg_32_da(void)
\r
4183 uint* reg_a = &DX;
\r
4184 uint* reg_b = &AY;
\r
4185 uint tmp = *reg_a;
\r
4191 void m68k_op_ext_16(void)
\r
4193 uint* r_dst = &DY;
\r
4195 *r_dst = MASK_OUT_BELOW_16(*r_dst) | MASK_OUT_ABOVE_8(*r_dst) | (GET_MSB_8(*r_dst) ? 0xff00 : 0);
\r
4197 FLAG_N = NFLAG_16(*r_dst);
\r
4198 FLAG_Z = MASK_OUT_ABOVE_16(*r_dst);
\r
4199 FLAG_V = VFLAG_CLEAR;
\r
4200 FLAG_C = CFLAG_CLEAR;
\r
4204 void m68k_op_ext_32(void)
\r
4206 uint* r_dst = &DY;
\r
4208 *r_dst = MASK_OUT_ABOVE_16(*r_dst) | (GET_MSB_16(*r_dst) ? 0xffff0000 : 0);
\r
4210 FLAG_N = NFLAG_32(*r_dst);
\r
4212 FLAG_V = VFLAG_CLEAR;
\r
4213 FLAG_C = CFLAG_CLEAR;
\r
4217 void m68k_op_extb_32(void)
\r
4219 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
\r
4221 uint* r_dst = &DY;
\r
4223 *r_dst = MASK_OUT_ABOVE_8(*r_dst) | (GET_MSB_8(*r_dst) ? 0xffffff00 : 0);
\r
4225 FLAG_N = NFLAG_32(*r_dst);
\r
4227 FLAG_V = VFLAG_CLEAR;
\r
4228 FLAG_C = CFLAG_CLEAR;
\r
4231 m68ki_exception_illegal();
\r
4235 void m68k_op_illegal(void)
\r
4237 m68ki_exception_illegal();
\r
4241 void m68k_op_jmp_32_ai(void)
\r
4243 m68ki_jump(EA_AY_AI_32());
\r
4244 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
\r
4245 if(REG_PC == REG_PPC)
\r
4250 void m68k_op_jmp_32_di(void)
\r
4252 m68ki_jump(EA_AY_DI_32());
\r
4253 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
\r
4254 if(REG_PC == REG_PPC)
\r
4259 void m68k_op_jmp_32_ix(void)
\r
4261 m68ki_jump(EA_AY_IX_32());
\r
4262 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
\r
4263 if(REG_PC == REG_PPC)
\r
4268 void m68k_op_jmp_32_aw(void)
\r
4270 m68ki_jump(EA_AW_32());
\r
4271 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
\r
4272 if(REG_PC == REG_PPC)
\r
4277 void m68k_op_jmp_32_al(void)
\r
4279 m68ki_jump(EA_AL_32());
\r
4280 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
\r
4281 if(REG_PC == REG_PPC)
\r
4286 void m68k_op_jmp_32_pcdi(void)
\r
4288 m68ki_jump(EA_PCDI_32());
\r
4289 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
\r
4290 if(REG_PC == REG_PPC)
\r
4295 void m68k_op_jmp_32_pcix(void)
\r
4297 m68ki_jump(EA_PCIX_32());
\r
4298 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
\r
4299 if(REG_PC == REG_PPC)
\r
4304 void m68k_op_jsr_32_ai(void)
\r
4306 uint ea = EA_AY_AI_32();
\r
4307 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
\r
4308 m68ki_push_32(MAKE_INT_24(REG_PC)); // notaz: Cyclone can't handle 32bit PC and I neet to debug it
\r
4313 void m68k_op_jsr_32_di(void)
\r
4315 uint ea = EA_AY_DI_32();
\r
4316 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
\r
4317 m68ki_push_32(MAKE_INT_24(REG_PC)); // notaz: Cyclone can't handle 32bit PC and I neet to debug it
\r
4322 void m68k_op_jsr_32_ix(void)
\r
4324 uint ea = EA_AY_IX_32();
\r
4325 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
\r
4326 m68ki_push_32(MAKE_INT_24(REG_PC)); // notaz: Cyclone can't handle 32bit PC and I neet to debug it
\r
4331 void m68k_op_jsr_32_aw(void)
\r
4333 uint ea = EA_AW_32();
\r
4334 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
\r
4335 m68ki_push_32(MAKE_INT_24(REG_PC)); // notaz: Cyclone can't handle 32bit PC and I neet to debug it
\r
4340 void m68k_op_jsr_32_al(void)
\r
4342 uint ea = EA_AL_32();
\r
4343 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
\r
4344 m68ki_push_32(MAKE_INT_24(REG_PC)); // notaz: Cyclone can't handle 32bit PC and I neet to debug it
\r
4349 void m68k_op_jsr_32_pcdi(void)
\r
4351 uint ea = EA_PCDI_32();
\r
4352 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
\r
4353 m68ki_push_32(MAKE_INT_24(REG_PC)); // notaz: Cyclone can't handle 32bit PC and I neet to debug it
\r
4358 void m68k_op_jsr_32_pcix(void)
\r
4360 uint ea = EA_PCIX_32();
\r
4361 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
\r
4362 m68ki_push_32(MAKE_INT_24(REG_PC)); // notaz: Cyclone can't handle 32bit PC and I neet to debug it
\r
4367 void m68k_op_lea_32_ai(void)
\r
4369 AX = EA_AY_AI_32();
\r
4373 void m68k_op_lea_32_di(void)
\r
4375 AX = EA_AY_DI_32();
\r
4379 void m68k_op_lea_32_ix(void)
\r
4381 AX = EA_AY_IX_32();
\r
4385 void m68k_op_lea_32_aw(void)
\r
4391 void m68k_op_lea_32_al(void)
\r
4397 void m68k_op_lea_32_pcdi(void)
\r
4399 AX = EA_PCDI_32();
\r
4403 void m68k_op_lea_32_pcix(void)
\r
4405 AX = EA_PCIX_32();
\r
4409 void m68k_op_link_16_a7(void)
\r
4412 m68ki_write_32(REG_A[7], REG_A[7]);
\r
4413 REG_A[7] = MASK_OUT_ABOVE_32(REG_A[7] + MAKE_INT_16(OPER_I_16()));
\r
4417 void m68k_op_link_16(void)
\r
4419 uint* r_dst = &AY;
\r
4421 m68ki_push_32(*r_dst);
\r
4422 *r_dst = REG_A[7];
\r
4423 REG_A[7] = MASK_OUT_ABOVE_32(REG_A[7] + MAKE_INT_16(OPER_I_16()));
\r
4427 void m68k_op_link_32_a7(void)
\r
4429 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
\r
4432 m68ki_write_32(REG_A[7], REG_A[7]);
\r
4433 REG_A[7] = MASK_OUT_ABOVE_32(REG_A[7] + OPER_I_32());
\r
4436 m68ki_exception_illegal();
\r
4440 void m68k_op_link_32(void)
\r
4442 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
\r
4444 uint* r_dst = &AY;
\r
4446 m68ki_push_32(*r_dst);
\r
4447 *r_dst = REG_A[7];
\r
4448 REG_A[7] = MASK_OUT_ABOVE_32(REG_A[7] + OPER_I_32());
\r
4451 m68ki_exception_illegal();
\r
4455 void m68k_op_lsr_8_s(void)
\r
4457 uint* r_dst = &DY;
\r
4458 uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
\r
4459 uint src = MASK_OUT_ABOVE_8(*r_dst);
\r
4460 uint res = src >> shift;
\r
4463 USE_CYCLES(shift<<CYC_SHIFT);
\r
4465 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
\r
4467 FLAG_N = NFLAG_CLEAR;
\r
4469 FLAG_X = FLAG_C = src << (9-shift);
\r
4470 FLAG_V = VFLAG_CLEAR;
\r
4474 void m68k_op_lsr_16_s(void)
\r
4476 uint* r_dst = &DY;
\r
4477 uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
\r
4478 uint src = MASK_OUT_ABOVE_16(*r_dst);
\r
4479 uint res = src >> shift;
\r
4482 USE_CYCLES(shift<<CYC_SHIFT);
\r
4484 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
\r
4486 FLAG_N = NFLAG_CLEAR;
\r
4488 FLAG_X = FLAG_C = src << (9-shift);
\r
4489 FLAG_V = VFLAG_CLEAR;
\r
4493 void m68k_op_lsr_32_s(void)
\r
4495 uint* r_dst = &DY;
\r
4496 uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
\r
4497 uint src = *r_dst;
\r
4498 uint res = src >> shift;
\r
4501 USE_CYCLES(shift<<CYC_SHIFT);
\r
4505 FLAG_N = NFLAG_CLEAR;
\r
4507 FLAG_X = FLAG_C = src << (9-shift);
\r
4508 FLAG_V = VFLAG_CLEAR;
\r
4512 void m68k_op_lsr_8_r(void)
\r
4514 uint* r_dst = &DY;
\r
4515 uint shift = DX & 0x3f;
\r
4516 uint src = MASK_OUT_ABOVE_8(*r_dst);
\r
4517 uint res = src >> shift;
\r
4521 USE_CYCLES(shift<<CYC_SHIFT);
\r
4525 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
\r
4526 FLAG_X = FLAG_C = src << (9-shift);
\r
4527 FLAG_N = NFLAG_CLEAR;
\r
4529 FLAG_V = VFLAG_CLEAR;
\r
4533 *r_dst &= 0xffffff00;
\r
4534 FLAG_X = XFLAG_CLEAR;
\r
4535 FLAG_C = CFLAG_CLEAR;
\r
4536 FLAG_N = NFLAG_CLEAR;
\r
4537 FLAG_Z = ZFLAG_SET;
\r
4538 FLAG_V = VFLAG_CLEAR;
\r
4542 FLAG_C = CFLAG_CLEAR;
\r
4543 FLAG_N = NFLAG_8(src);
\r
4545 FLAG_V = VFLAG_CLEAR;
\r
4549 void m68k_op_lsr_16_r(void)
\r
4551 uint* r_dst = &DY;
\r
4552 uint shift = DX & 0x3f;
\r
4553 uint src = MASK_OUT_ABOVE_16(*r_dst);
\r
4554 uint res = src >> shift;
\r
4558 USE_CYCLES(shift<<CYC_SHIFT);
\r
4562 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
\r
4563 FLAG_C = FLAG_X = (src >> (shift - 1))<<8;
\r
4564 FLAG_N = NFLAG_CLEAR;
\r
4566 FLAG_V = VFLAG_CLEAR;
\r
4570 *r_dst &= 0xffff0000;
\r
4571 FLAG_X = XFLAG_CLEAR;
\r
4572 FLAG_C = CFLAG_CLEAR;
\r
4573 FLAG_N = NFLAG_CLEAR;
\r
4574 FLAG_Z = ZFLAG_SET;
\r
4575 FLAG_V = VFLAG_CLEAR;
\r
4579 FLAG_C = CFLAG_CLEAR;
\r
4580 FLAG_N = NFLAG_16(src);
\r
4582 FLAG_V = VFLAG_CLEAR;
\r
4586 void m68k_op_lsr_32_r(void)
\r
4588 uint* r_dst = &DY;
\r
4589 uint shift = DX & 0x3f;
\r
4590 uint src = *r_dst;
\r
4591 uint res = src >> shift;
\r
4595 USE_CYCLES(shift<<CYC_SHIFT);
\r
4600 FLAG_C = FLAG_X = (src >> (shift - 1))<<8;
\r
4601 FLAG_N = NFLAG_CLEAR;
\r
4603 FLAG_V = VFLAG_CLEAR;
\r
4608 FLAG_X = FLAG_C = (shift == 32 ? GET_MSB_32(src)>>23 : 0);
\r
4609 FLAG_N = NFLAG_CLEAR;
\r
4610 FLAG_Z = ZFLAG_SET;
\r
4611 FLAG_V = VFLAG_CLEAR;
\r
4615 FLAG_C = CFLAG_CLEAR;
\r
4616 FLAG_N = NFLAG_32(src);
\r
4618 FLAG_V = VFLAG_CLEAR;
\r
4622 void m68k_op_lsr_16_ai(void)
\r
4624 uint ea = EA_AY_AI_16();
\r
4625 uint src = m68ki_read_16(ea);
\r
4626 uint res = src >> 1;
\r
4628 m68ki_write_16(ea, res);
\r
4630 FLAG_N = NFLAG_CLEAR;
\r
4632 FLAG_C = FLAG_X = src << 8;
\r
4633 FLAG_V = VFLAG_CLEAR;
\r
4637 void m68k_op_lsr_16_pi(void)
\r
4639 uint ea = EA_AY_PI_16();
\r
4640 uint src = m68ki_read_16(ea);
\r
4641 uint res = src >> 1;
\r
4643 m68ki_write_16(ea, res);
\r
4645 FLAG_N = NFLAG_CLEAR;
\r
4647 FLAG_C = FLAG_X = src << 8;
\r
4648 FLAG_V = VFLAG_CLEAR;
\r
4652 void m68k_op_lsr_16_pd(void)
\r
4654 uint ea = EA_AY_PD_16();
\r
4655 uint src = m68ki_read_16(ea);
\r
4656 uint res = src >> 1;
\r
4658 m68ki_write_16(ea, res);
\r
4660 FLAG_N = NFLAG_CLEAR;
\r
4662 FLAG_C = FLAG_X = src << 8;
\r
4663 FLAG_V = VFLAG_CLEAR;
\r
4667 void m68k_op_lsr_16_di(void)
\r
4669 uint ea = EA_AY_DI_16();
\r
4670 uint src = m68ki_read_16(ea);
\r
4671 uint res = src >> 1;
\r
4673 m68ki_write_16(ea, res);
\r
4675 FLAG_N = NFLAG_CLEAR;
\r
4677 FLAG_C = FLAG_X = src << 8;
\r
4678 FLAG_V = VFLAG_CLEAR;
\r
4682 void m68k_op_lsr_16_ix(void)
\r
4684 uint ea = EA_AY_IX_16();
\r
4685 uint src = m68ki_read_16(ea);
\r
4686 uint res = src >> 1;
\r
4688 m68ki_write_16(ea, res);
\r
4690 FLAG_N = NFLAG_CLEAR;
\r
4692 FLAG_C = FLAG_X = src << 8;
\r
4693 FLAG_V = VFLAG_CLEAR;
\r
4697 void m68k_op_lsr_16_aw(void)
\r
4699 uint ea = EA_AW_16();
\r
4700 uint src = m68ki_read_16(ea);
\r
4701 uint res = src >> 1;
\r
4703 m68ki_write_16(ea, res);
\r
4705 FLAG_N = NFLAG_CLEAR;
\r
4707 FLAG_C = FLAG_X = src << 8;
\r
4708 FLAG_V = VFLAG_CLEAR;
\r
4712 void m68k_op_lsr_16_al(void)
\r
4714 uint ea = EA_AL_16();
\r
4715 uint src = m68ki_read_16(ea);
\r
4716 uint res = src >> 1;
\r
4718 m68ki_write_16(ea, res);
\r
4720 FLAG_N = NFLAG_CLEAR;
\r
4722 FLAG_C = FLAG_X = src << 8;
\r
4723 FLAG_V = VFLAG_CLEAR;
\r
4727 void m68k_op_lsl_8_s(void)
\r
4729 uint* r_dst = &DY;
\r
4730 uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
\r
4731 uint src = MASK_OUT_ABOVE_8(*r_dst);
\r
4732 uint res = MASK_OUT_ABOVE_8(src << shift);
\r
4735 USE_CYCLES(shift<<CYC_SHIFT);
\r
4737 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
\r
4739 FLAG_N = NFLAG_8(res);
\r
4741 FLAG_X = FLAG_C = src << shift;
\r
4742 FLAG_V = VFLAG_CLEAR;
\r
4746 void m68k_op_lsl_16_s(void)
\r
4748 uint* r_dst = &DY;
\r
4749 uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
\r
4750 uint src = MASK_OUT_ABOVE_16(*r_dst);
\r
4751 uint res = MASK_OUT_ABOVE_16(src << shift);
\r
4754 USE_CYCLES(shift<<CYC_SHIFT);
\r
4756 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
\r
4758 FLAG_N = NFLAG_16(res);
\r
4760 FLAG_X = FLAG_C = src >> (8-shift);
\r
4761 FLAG_V = VFLAG_CLEAR;
\r
4765 void m68k_op_lsl_32_s(void)
\r
4767 uint* r_dst = &DY;
\r
4768 uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
\r
4769 uint src = *r_dst;
\r
4770 uint res = MASK_OUT_ABOVE_32(src << shift);
\r
4773 USE_CYCLES(shift<<CYC_SHIFT);
\r
4777 FLAG_N = NFLAG_32(res);
\r
4779 FLAG_X = FLAG_C = src >> (24-shift);
\r
4780 FLAG_V = VFLAG_CLEAR;
\r
4784 void m68k_op_lsl_8_r(void)
\r
4786 uint* r_dst = &DY;
\r
4787 uint shift = DX & 0x3f;
\r
4788 uint src = MASK_OUT_ABOVE_8(*r_dst);
\r
4789 uint res = MASK_OUT_ABOVE_8(src << shift);
\r
4793 USE_CYCLES(shift<<CYC_SHIFT);
\r
4797 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
\r
4798 FLAG_X = FLAG_C = src << shift;
\r
4799 FLAG_N = NFLAG_8(res);
\r
4801 FLAG_V = VFLAG_CLEAR;
\r
4805 *r_dst &= 0xffffff00;
\r
4806 FLAG_X = XFLAG_CLEAR;
\r
4807 FLAG_C = CFLAG_CLEAR;
\r
4808 FLAG_N = NFLAG_CLEAR;
\r
4809 FLAG_Z = ZFLAG_SET;
\r
4810 FLAG_V = VFLAG_CLEAR;
\r
4814 FLAG_C = CFLAG_CLEAR;
\r
4815 FLAG_N = NFLAG_8(src);
\r
4817 FLAG_V = VFLAG_CLEAR;
\r
4821 void m68k_op_lsl_16_r(void)
\r
4823 uint* r_dst = &DY;
\r
4824 uint shift = DX & 0x3f;
\r
4825 uint src = MASK_OUT_ABOVE_16(*r_dst);
\r
4826 uint res = MASK_OUT_ABOVE_16(src << shift);
\r
4830 USE_CYCLES(shift<<CYC_SHIFT);
\r
4834 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
\r
4835 FLAG_X = FLAG_C = (src << shift) >> 8;
\r
4836 FLAG_N = NFLAG_16(res);
\r
4838 FLAG_V = VFLAG_CLEAR;
\r
4842 *r_dst &= 0xffff0000;
\r
4843 FLAG_X = XFLAG_CLEAR;
\r
4844 FLAG_C = CFLAG_CLEAR;
\r
4845 FLAG_N = NFLAG_CLEAR;
\r
4846 FLAG_Z = ZFLAG_SET;
\r
4847 FLAG_V = VFLAG_CLEAR;
\r
4851 FLAG_C = CFLAG_CLEAR;
\r
4852 FLAG_N = NFLAG_16(src);
\r
4854 FLAG_V = VFLAG_CLEAR;
\r
4858 void m68k_op_lsl_32_r(void)
\r
4860 uint* r_dst = &DY;
\r
4861 uint shift = DX & 0x3f;
\r
4862 uint src = *r_dst;
\r
4863 uint res = MASK_OUT_ABOVE_32(src << shift);
\r
4867 USE_CYCLES(shift<<CYC_SHIFT);
\r
4872 FLAG_X = FLAG_C = (src >> (32 - shift)) << 8;
\r
4873 FLAG_N = NFLAG_32(res);
\r
4875 FLAG_V = VFLAG_CLEAR;
\r
4880 FLAG_X = FLAG_C = ((shift == 32 ? src & 1 : 0))<<8;
\r
4881 FLAG_N = NFLAG_CLEAR;
\r
4882 FLAG_Z = ZFLAG_SET;
\r
4883 FLAG_V = VFLAG_CLEAR;
\r
4887 FLAG_C = CFLAG_CLEAR;
\r
4888 FLAG_N = NFLAG_32(src);
\r
4890 FLAG_V = VFLAG_CLEAR;
\r
4894 void m68k_op_lsl_16_ai(void)
\r
4896 uint ea = EA_AY_AI_16();
\r
4897 uint src = m68ki_read_16(ea);
\r
4898 uint res = MASK_OUT_ABOVE_16(src << 1);
\r
4900 m68ki_write_16(ea, res);
\r
4902 FLAG_N = NFLAG_16(res);
\r
4904 FLAG_X = FLAG_C = src >> 7;
\r
4905 FLAG_V = VFLAG_CLEAR;
\r
4909 void m68k_op_lsl_16_pi(void)
\r
4911 uint ea = EA_AY_PI_16();
\r
4912 uint src = m68ki_read_16(ea);
\r
4913 uint res = MASK_OUT_ABOVE_16(src << 1);
\r
4915 m68ki_write_16(ea, res);
\r
4917 FLAG_N = NFLAG_16(res);
\r
4919 FLAG_X = FLAG_C = src >> 7;
\r
4920 FLAG_V = VFLAG_CLEAR;
\r
4924 void m68k_op_lsl_16_pd(void)
\r
4926 uint ea = EA_AY_PD_16();
\r
4927 uint src = m68ki_read_16(ea);
\r
4928 uint res = MASK_OUT_ABOVE_16(src << 1);
\r
4930 m68ki_write_16(ea, res);
\r
4932 FLAG_N = NFLAG_16(res);
\r
4934 FLAG_X = FLAG_C = src >> 7;
\r
4935 FLAG_V = VFLAG_CLEAR;
\r
4939 void m68k_op_lsl_16_di(void)
\r
4941 uint ea = EA_AY_DI_16();
\r
4942 uint src = m68ki_read_16(ea);
\r
4943 uint res = MASK_OUT_ABOVE_16(src << 1);
\r
4945 m68ki_write_16(ea, res);
\r
4947 FLAG_N = NFLAG_16(res);
\r
4949 FLAG_X = FLAG_C = src >> 7;
\r
4950 FLAG_V = VFLAG_CLEAR;
\r
4954 void m68k_op_lsl_16_ix(void)
\r
4956 uint ea = EA_AY_IX_16();
\r
4957 uint src = m68ki_read_16(ea);
\r
4958 uint res = MASK_OUT_ABOVE_16(src << 1);
\r
4960 m68ki_write_16(ea, res);
\r
4962 FLAG_N = NFLAG_16(res);
\r
4964 FLAG_X = FLAG_C = src >> 7;
\r
4965 FLAG_V = VFLAG_CLEAR;
\r
4969 void m68k_op_lsl_16_aw(void)
\r
4971 uint ea = EA_AW_16();
\r
4972 uint src = m68ki_read_16(ea);
\r
4973 uint res = MASK_OUT_ABOVE_16(src << 1);
\r
4975 m68ki_write_16(ea, res);
\r
4977 FLAG_N = NFLAG_16(res);
\r
4979 FLAG_X = FLAG_C = src >> 7;
\r
4980 FLAG_V = VFLAG_CLEAR;
\r
4984 void m68k_op_lsl_16_al(void)
\r
4986 uint ea = EA_AL_16();
\r
4987 uint src = m68ki_read_16(ea);
\r
4988 uint res = MASK_OUT_ABOVE_16(src << 1);
\r
4990 m68ki_write_16(ea, res);
\r
4992 FLAG_N = NFLAG_16(res);
\r
4994 FLAG_X = FLAG_C = src >> 7;
\r
4995 FLAG_V = VFLAG_CLEAR;
\r
4999 void m68k_op_move_8_d_d(void)
\r
5001 uint res = MASK_OUT_ABOVE_8(DY);
\r
5002 uint* r_dst = &DX;
\r
5004 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
\r
5006 FLAG_N = NFLAG_8(res);
\r
5008 FLAG_V = VFLAG_CLEAR;
\r
5009 FLAG_C = CFLAG_CLEAR;
\r
5013 void m68k_op_move_8_d_ai(void)
\r
5015 uint res = OPER_AY_AI_8();
\r
5016 uint* r_dst = &DX;
\r
5018 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
\r
5020 FLAG_N = NFLAG_8(res);
\r
5022 FLAG_V = VFLAG_CLEAR;
\r
5023 FLAG_C = CFLAG_CLEAR;
\r
5027 void m68k_op_move_8_d_pi(void)
\r
5029 uint res = OPER_AY_PI_8();
\r
5030 uint* r_dst = &DX;
\r
5032 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
\r
5034 FLAG_N = NFLAG_8(res);
\r
5036 FLAG_V = VFLAG_CLEAR;
\r
5037 FLAG_C = CFLAG_CLEAR;
\r
5041 void m68k_op_move_8_d_pi7(void)
\r
5043 uint res = OPER_A7_PI_8();
\r
5044 uint* r_dst = &DX;
\r
5046 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
\r
5048 FLAG_N = NFLAG_8(res);
\r
5050 FLAG_V = VFLAG_CLEAR;
\r
5051 FLAG_C = CFLAG_CLEAR;
\r
5055 void m68k_op_move_8_d_pd(void)
\r
5057 uint res = OPER_AY_PD_8();
\r
5058 uint* r_dst = &DX;
\r
5060 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
\r
5062 FLAG_N = NFLAG_8(res);
\r
5064 FLAG_V = VFLAG_CLEAR;
\r
5065 FLAG_C = CFLAG_CLEAR;
\r
5069 void m68k_op_move_8_d_pd7(void)
\r
5071 uint res = OPER_A7_PD_8();
\r
5072 uint* r_dst = &DX;
\r
5074 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
\r
5076 FLAG_N = NFLAG_8(res);
\r
5078 FLAG_V = VFLAG_CLEAR;
\r
5079 FLAG_C = CFLAG_CLEAR;
\r
5083 void m68k_op_move_8_d_di(void)
\r
5085 uint res = OPER_AY_DI_8();
\r
5086 uint* r_dst = &DX;
\r
5088 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
\r
5090 FLAG_N = NFLAG_8(res);
\r
5092 FLAG_V = VFLAG_CLEAR;
\r
5093 FLAG_C = CFLAG_CLEAR;
\r
5097 void m68k_op_move_8_d_ix(void)
\r
5099 uint res = OPER_AY_IX_8();
\r
5100 uint* r_dst = &DX;
\r
5102 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
\r
5104 FLAG_N = NFLAG_8(res);
\r
5106 FLAG_V = VFLAG_CLEAR;
\r
5107 FLAG_C = CFLAG_CLEAR;
\r
5111 void m68k_op_move_8_d_aw(void)
\r
5113 uint res = OPER_AW_8();
\r
5114 uint* r_dst = &DX;
\r
5116 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
\r
5118 FLAG_N = NFLAG_8(res);
\r
5120 FLAG_V = VFLAG_CLEAR;
\r
5121 FLAG_C = CFLAG_CLEAR;
\r
5125 void m68k_op_move_8_d_al(void)
\r
5127 uint res = OPER_AL_8();
\r
5128 uint* r_dst = &DX;
\r
5130 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
\r
5132 FLAG_N = NFLAG_8(res);
\r
5134 FLAG_V = VFLAG_CLEAR;
\r
5135 FLAG_C = CFLAG_CLEAR;
\r
5139 void m68k_op_move_8_d_pcdi(void)
\r
5141 uint res = OPER_PCDI_8();
\r
5142 uint* r_dst = &DX;
\r
5144 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
\r
5146 FLAG_N = NFLAG_8(res);
\r
5148 FLAG_V = VFLAG_CLEAR;
\r
5149 FLAG_C = CFLAG_CLEAR;
\r
5153 void m68k_op_move_8_d_pcix(void)
\r
5155 uint res = OPER_PCIX_8();
\r
5156 uint* r_dst = &DX;
\r
5158 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
\r
5160 FLAG_N = NFLAG_8(res);
\r
5162 FLAG_V = VFLAG_CLEAR;
\r
5163 FLAG_C = CFLAG_CLEAR;
\r
5167 void m68k_op_move_8_d_i(void)
\r
5169 uint res = OPER_I_8();
\r
5170 uint* r_dst = &DX;
\r
5172 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
\r
5174 FLAG_N = NFLAG_8(res);
\r
5176 FLAG_V = VFLAG_CLEAR;
\r
5177 FLAG_C = CFLAG_CLEAR;
\r
5181 void m68k_op_move_8_ai_d(void)
\r
5183 uint res = MASK_OUT_ABOVE_8(DY);
\r
5184 uint ea = EA_AX_AI_8();
\r
5186 m68ki_write_8(ea, res);
\r
5188 FLAG_N = NFLAG_8(res);
\r
5190 FLAG_V = VFLAG_CLEAR;
\r
5191 FLAG_C = CFLAG_CLEAR;
\r
5195 void m68k_op_move_8_ai_ai(void)
\r
5197 uint res = OPER_AY_AI_8();
\r
5198 uint ea = EA_AX_AI_8();
\r
5200 m68ki_write_8(ea, res);
\r
5202 FLAG_N = NFLAG_8(res);
\r
5204 FLAG_V = VFLAG_CLEAR;
\r
5205 FLAG_C = CFLAG_CLEAR;
\r
5209 void m68k_op_move_8_ai_pi(void)
\r
5211 uint res = OPER_AY_PI_8();
\r
5212 uint ea = EA_AX_AI_8();
\r
5214 m68ki_write_8(ea, res);
\r
5216 FLAG_N = NFLAG_8(res);
\r
5218 FLAG_V = VFLAG_CLEAR;
\r
5219 FLAG_C = CFLAG_CLEAR;
\r
5223 void m68k_op_move_8_ai_pi7(void)
\r
5225 uint res = OPER_A7_PI_8();
\r
5226 uint ea = EA_AX_AI_8();
\r
5228 m68ki_write_8(ea, res);
\r
5230 FLAG_N = NFLAG_8(res);
\r
5232 FLAG_V = VFLAG_CLEAR;
\r
5233 FLAG_C = CFLAG_CLEAR;
\r
5237 void m68k_op_move_8_ai_pd(void)
\r
5239 uint res = OPER_AY_PD_8();
\r
5240 uint ea = EA_AX_AI_8();
\r
5242 m68ki_write_8(ea, res);
\r
5244 FLAG_N = NFLAG_8(res);
\r
5246 FLAG_V = VFLAG_CLEAR;
\r
5247 FLAG_C = CFLAG_CLEAR;
\r
5251 void m68k_op_move_8_ai_pd7(void)
\r
5253 uint res = OPER_A7_PD_8();
\r
5254 uint ea = EA_AX_AI_8();
\r
5256 m68ki_write_8(ea, res);
\r
5258 FLAG_N = NFLAG_8(res);
\r
5260 FLAG_V = VFLAG_CLEAR;
\r
5261 FLAG_C = CFLAG_CLEAR;
\r
5265 void m68k_op_move_8_ai_di(void)
\r
5267 uint res = OPER_AY_DI_8();
\r
5268 uint ea = EA_AX_AI_8();
\r
5270 m68ki_write_8(ea, res);
\r
5272 FLAG_N = NFLAG_8(res);
\r
5274 FLAG_V = VFLAG_CLEAR;
\r
5275 FLAG_C = CFLAG_CLEAR;
\r
5279 void m68k_op_move_8_ai_ix(void)
\r
5281 uint res = OPER_AY_IX_8();
\r
5282 uint ea = EA_AX_AI_8();
\r
5284 m68ki_write_8(ea, res);
\r
5286 FLAG_N = NFLAG_8(res);
\r
5288 FLAG_V = VFLAG_CLEAR;
\r
5289 FLAG_C = CFLAG_CLEAR;
\r
5293 void m68k_op_move_8_ai_aw(void)
\r
5295 uint res = OPER_AW_8();
\r
5296 uint ea = EA_AX_AI_8();
\r
5298 m68ki_write_8(ea, res);
\r
5300 FLAG_N = NFLAG_8(res);
\r
5302 FLAG_V = VFLAG_CLEAR;
\r
5303 FLAG_C = CFLAG_CLEAR;
\r
5307 void m68k_op_move_8_ai_al(void)
\r
5309 uint res = OPER_AL_8();
\r
5310 uint ea = EA_AX_AI_8();
\r
5312 m68ki_write_8(ea, res);
\r
5314 FLAG_N = NFLAG_8(res);
\r
5316 FLAG_V = VFLAG_CLEAR;
\r
5317 FLAG_C = CFLAG_CLEAR;
\r
5321 void m68k_op_move_8_ai_pcdi(void)
\r
5323 uint res = OPER_PCDI_8();
\r
5324 uint ea = EA_AX_AI_8();
\r
5326 m68ki_write_8(ea, res);
\r
5328 FLAG_N = NFLAG_8(res);
\r
5330 FLAG_V = VFLAG_CLEAR;
\r
5331 FLAG_C = CFLAG_CLEAR;
\r
5335 void m68k_op_move_8_ai_pcix(void)
\r
5337 uint res = OPER_PCIX_8();
\r
5338 uint ea = EA_AX_AI_8();
\r
5340 m68ki_write_8(ea, res);
\r
5342 FLAG_N = NFLAG_8(res);
\r
5344 FLAG_V = VFLAG_CLEAR;
\r
5345 FLAG_C = CFLAG_CLEAR;
\r
5349 void m68k_op_move_8_ai_i(void)
\r
5351 uint res = OPER_I_8();
\r
5352 uint ea = EA_AX_AI_8();
\r
5354 m68ki_write_8(ea, res);
\r
5356 FLAG_N = NFLAG_8(res);
\r
5358 FLAG_V = VFLAG_CLEAR;
\r
5359 FLAG_C = CFLAG_CLEAR;
\r
5363 void m68k_op_move_8_pi7_d(void)
\r
5365 uint res = MASK_OUT_ABOVE_8(DY);
\r
5366 uint ea = EA_A7_PI_8();
\r
5368 m68ki_write_8(ea, res);
\r
5370 FLAG_N = NFLAG_8(res);
\r
5372 FLAG_V = VFLAG_CLEAR;
\r
5373 FLAG_C = CFLAG_CLEAR;
\r
5377 void m68k_op_move_8_pi_d(void)
\r
5379 uint res = MASK_OUT_ABOVE_8(DY);
\r
5380 uint ea = EA_AX_PI_8();
\r
5382 m68ki_write_8(ea, res);
\r
5384 FLAG_N = NFLAG_8(res);
\r
5386 FLAG_V = VFLAG_CLEAR;
\r
5387 FLAG_C = CFLAG_CLEAR;
\r
5391 void m68k_op_move_8_pi7_ai(void)
\r
5393 uint res = OPER_AY_AI_8();
\r
5394 uint ea = EA_A7_PI_8();
\r
5396 m68ki_write_8(ea, res);
\r
5398 FLAG_N = NFLAG_8(res);
\r
5400 FLAG_V = VFLAG_CLEAR;
\r
5401 FLAG_C = CFLAG_CLEAR;
\r
5405 void m68k_op_move_8_pi7_pi(void)
\r
5407 uint res = OPER_AY_PI_8();
\r
5408 uint ea = EA_A7_PI_8();
\r
5410 m68ki_write_8(ea, res);
\r
5412 FLAG_N = NFLAG_8(res);
\r
5414 FLAG_V = VFLAG_CLEAR;
\r
5415 FLAG_C = CFLAG_CLEAR;
\r
5419 void m68k_op_move_8_pi7_pi7(void)
\r
5421 uint res = OPER_A7_PI_8();
\r
5422 uint ea = EA_A7_PI_8();
\r
5424 m68ki_write_8(ea, res);
\r
5426 FLAG_N = NFLAG_8(res);
\r
5428 FLAG_V = VFLAG_CLEAR;
\r
5429 FLAG_C = CFLAG_CLEAR;
\r
5433 void m68k_op_move_8_pi7_pd(void)
\r
5435 uint res = OPER_AY_PD_8();
\r
5436 uint ea = EA_A7_PI_8();
\r
5438 m68ki_write_8(ea, res);
\r
5440 FLAG_N = NFLAG_8(res);
\r
5442 FLAG_V = VFLAG_CLEAR;
\r
5443 FLAG_C = CFLAG_CLEAR;
\r
5447 void m68k_op_move_8_pi7_pd7(void)
\r
5449 uint res = OPER_A7_PD_8();
\r
5450 uint ea = EA_A7_PI_8();
\r
5452 m68ki_write_8(ea, res);
\r
5454 FLAG_N = NFLAG_8(res);
\r
5456 FLAG_V = VFLAG_CLEAR;
\r
5457 FLAG_C = CFLAG_CLEAR;
\r
5461 void m68k_op_move_8_pi7_di(void)
\r
5463 uint res = OPER_AY_DI_8();
\r
5464 uint ea = EA_A7_PI_8();
\r
5466 m68ki_write_8(ea, res);
\r
5468 FLAG_N = NFLAG_8(res);
\r
5470 FLAG_V = VFLAG_CLEAR;
\r
5471 FLAG_C = CFLAG_CLEAR;
\r
5475 void m68k_op_move_8_pi7_ix(void)
\r
5477 uint res = OPER_AY_IX_8();
\r
5478 uint ea = EA_A7_PI_8();
\r
5480 m68ki_write_8(ea, res);
\r
5482 FLAG_N = NFLAG_8(res);
\r
5484 FLAG_V = VFLAG_CLEAR;
\r
5485 FLAG_C = CFLAG_CLEAR;
\r
5489 void m68k_op_move_8_pi7_aw(void)
\r
5491 uint res = OPER_AW_8();
\r
5492 uint ea = EA_A7_PI_8();
\r
5494 m68ki_write_8(ea, res);
\r
5496 FLAG_N = NFLAG_8(res);
\r
5498 FLAG_V = VFLAG_CLEAR;
\r
5499 FLAG_C = CFLAG_CLEAR;
\r
5503 void m68k_op_move_8_pi7_al(void)
\r
5505 uint res = OPER_AL_8();
\r
5506 uint ea = EA_A7_PI_8();
\r
5508 m68ki_write_8(ea, res);
\r
5510 FLAG_N = NFLAG_8(res);
\r
5512 FLAG_V = VFLAG_CLEAR;
\r
5513 FLAG_C = CFLAG_CLEAR;
\r
5517 void m68k_op_move_8_pi7_pcdi(void)
\r
5519 uint res = OPER_PCDI_8();
\r
5520 uint ea = EA_A7_PI_8();
\r
5522 m68ki_write_8(ea, res);
\r
5524 FLAG_N = NFLAG_8(res);
\r
5526 FLAG_V = VFLAG_CLEAR;
\r
5527 FLAG_C = CFLAG_CLEAR;
\r
5531 void m68k_op_move_8_pi7_pcix(void)
\r
5533 uint res = OPER_PCIX_8();
\r
5534 uint ea = EA_A7_PI_8();
\r
5536 m68ki_write_8(ea, res);
\r
5538 FLAG_N = NFLAG_8(res);
\r
5540 FLAG_V = VFLAG_CLEAR;
\r
5541 FLAG_C = CFLAG_CLEAR;
\r
5545 void m68k_op_move_8_pi7_i(void)
\r
5547 uint res = OPER_I_8();
\r
5548 uint ea = EA_A7_PI_8();
\r
5550 m68ki_write_8(ea, res);
\r
5552 FLAG_N = NFLAG_8(res);
\r
5554 FLAG_V = VFLAG_CLEAR;
\r
5555 FLAG_C = CFLAG_CLEAR;
\r
5559 void m68k_op_move_8_pi_ai(void)
\r
5561 uint res = OPER_AY_AI_8();
\r
5562 uint ea = EA_AX_PI_8();
\r
5564 m68ki_write_8(ea, res);
\r
5566 FLAG_N = NFLAG_8(res);
\r
5568 FLAG_V = VFLAG_CLEAR;
\r
5569 FLAG_C = CFLAG_CLEAR;
\r
5573 void m68k_op_move_8_pi_pi(void)
\r
5575 uint res = OPER_AY_PI_8();
\r
5576 uint ea = EA_AX_PI_8();
\r
5578 m68ki_write_8(ea, res);
\r
5580 FLAG_N = NFLAG_8(res);
\r
5582 FLAG_V = VFLAG_CLEAR;
\r
5583 FLAG_C = CFLAG_CLEAR;
\r
5587 void m68k_op_move_8_pi_pi7(void)
\r
5589 uint res = OPER_A7_PI_8();
\r
5590 uint ea = EA_AX_PI_8();
\r
5592 m68ki_write_8(ea, res);
\r
5594 FLAG_N = NFLAG_8(res);
\r
5596 FLAG_V = VFLAG_CLEAR;
\r
5597 FLAG_C = CFLAG_CLEAR;
\r
5601 void m68k_op_move_8_pi_pd(void)
\r
5603 uint res = OPER_AY_PD_8();
\r
5604 uint ea = EA_AX_PI_8();
\r
5606 m68ki_write_8(ea, res);
\r
5608 FLAG_N = NFLAG_8(res);
\r
5610 FLAG_V = VFLAG_CLEAR;
\r
5611 FLAG_C = CFLAG_CLEAR;
\r
5615 void m68k_op_move_8_pi_pd7(void)
\r
5617 uint res = OPER_A7_PD_8();
\r
5618 uint ea = EA_AX_PI_8();
\r
5620 m68ki_write_8(ea, res);
\r
5622 FLAG_N = NFLAG_8(res);
\r
5624 FLAG_V = VFLAG_CLEAR;
\r
5625 FLAG_C = CFLAG_CLEAR;
\r
5629 void m68k_op_move_8_pi_di(void)
\r
5631 uint res = OPER_AY_DI_8();
\r
5632 uint ea = EA_AX_PI_8();
\r
5634 m68ki_write_8(ea, res);
\r
5636 FLAG_N = NFLAG_8(res);
\r
5638 FLAG_V = VFLAG_CLEAR;
\r
5639 FLAG_C = CFLAG_CLEAR;
\r
5643 void m68k_op_move_8_pi_ix(void)
\r
5645 uint res = OPER_AY_IX_8();
\r
5646 uint ea = EA_AX_PI_8();
\r
5648 m68ki_write_8(ea, res);
\r
5650 FLAG_N = NFLAG_8(res);
\r
5652 FLAG_V = VFLAG_CLEAR;
\r
5653 FLAG_C = CFLAG_CLEAR;
\r
5657 void m68k_op_move_8_pi_aw(void)
\r
5659 uint res = OPER_AW_8();
\r
5660 uint ea = EA_AX_PI_8();
\r
5662 m68ki_write_8(ea, res);
\r
5664 FLAG_N = NFLAG_8(res);
\r
5666 FLAG_V = VFLAG_CLEAR;
\r
5667 FLAG_C = CFLAG_CLEAR;
\r
5671 void m68k_op_move_8_pi_al(void)
\r
5673 uint res = OPER_AL_8();
\r
5674 uint ea = EA_AX_PI_8();
\r
5676 m68ki_write_8(ea, res);
\r
5678 FLAG_N = NFLAG_8(res);
\r
5680 FLAG_V = VFLAG_CLEAR;
\r
5681 FLAG_C = CFLAG_CLEAR;
\r
5685 void m68k_op_move_8_pi_pcdi(void)
\r
5687 uint res = OPER_PCDI_8();
\r
5688 uint ea = EA_AX_PI_8();
\r
5690 m68ki_write_8(ea, res);
\r
5692 FLAG_N = NFLAG_8(res);
\r
5694 FLAG_V = VFLAG_CLEAR;
\r
5695 FLAG_C = CFLAG_CLEAR;
\r
5699 void m68k_op_move_8_pi_pcix(void)
\r
5701 uint res = OPER_PCIX_8();
\r
5702 uint ea = EA_AX_PI_8();
\r
5704 m68ki_write_8(ea, res);
\r
5706 FLAG_N = NFLAG_8(res);
\r
5708 FLAG_V = VFLAG_CLEAR;
\r
5709 FLAG_C = CFLAG_CLEAR;
\r
5713 void m68k_op_move_8_pi_i(void)
\r
5715 uint res = OPER_I_8();
\r
5716 uint ea = EA_AX_PI_8();
\r
5718 m68ki_write_8(ea, res);
\r
5720 FLAG_N = NFLAG_8(res);
\r
5722 FLAG_V = VFLAG_CLEAR;
\r
5723 FLAG_C = CFLAG_CLEAR;
\r
5727 void m68k_op_move_8_pd7_d(void)
\r
5729 uint res = MASK_OUT_ABOVE_8(DY);
\r
5730 uint ea = EA_A7_PD_8();
\r
5732 m68ki_write_8(ea, res);
\r
5734 FLAG_N = NFLAG_8(res);
\r
5736 FLAG_V = VFLAG_CLEAR;
\r
5737 FLAG_C = CFLAG_CLEAR;
\r
5741 void m68k_op_move_8_pd_d(void)
\r
5743 uint res = MASK_OUT_ABOVE_8(DY);
\r
5744 uint ea = EA_AX_PD_8();
\r
5746 m68ki_write_8(ea, res);
\r
5748 FLAG_N = NFLAG_8(res);
\r
5750 FLAG_V = VFLAG_CLEAR;
\r
5751 FLAG_C = CFLAG_CLEAR;
\r
5755 void m68k_op_move_8_pd7_ai(void)
\r
5757 uint res = OPER_AY_AI_8();
\r
5758 uint ea = EA_A7_PD_8();
\r
5760 m68ki_write_8(ea, res);
\r
5762 FLAG_N = NFLAG_8(res);
\r
5764 FLAG_V = VFLAG_CLEAR;
\r
5765 FLAG_C = CFLAG_CLEAR;
\r
5769 void m68k_op_move_8_pd7_pi(void)
\r
5771 uint res = OPER_AY_PI_8();
\r
5772 uint ea = EA_A7_PD_8();
\r
5774 m68ki_write_8(ea, res);
\r
5776 FLAG_N = NFLAG_8(res);
\r
5778 FLAG_V = VFLAG_CLEAR;
\r
5779 FLAG_C = CFLAG_CLEAR;
\r
5783 void m68k_op_move_8_pd7_pi7(void)
\r
5785 uint res = OPER_A7_PI_8();
\r
5786 uint ea = EA_A7_PD_8();
\r
5788 m68ki_write_8(ea, res);
\r
5790 FLAG_N = NFLAG_8(res);
\r
5792 FLAG_V = VFLAG_CLEAR;
\r
5793 FLAG_C = CFLAG_CLEAR;
\r
5797 void m68k_op_move_8_pd7_pd(void)
\r
5799 uint res = OPER_AY_PD_8();
\r
5800 uint ea = EA_A7_PD_8();
\r
5802 m68ki_write_8(ea, res);
\r
5804 FLAG_N = NFLAG_8(res);
\r
5806 FLAG_V = VFLAG_CLEAR;
\r
5807 FLAG_C = CFLAG_CLEAR;
\r
5811 void m68k_op_move_8_pd7_pd7(void)
\r
5813 uint res = OPER_A7_PD_8();
\r
5814 uint ea = EA_A7_PD_8();
\r
5816 m68ki_write_8(ea, res);
\r
5818 FLAG_N = NFLAG_8(res);
\r
5820 FLAG_V = VFLAG_CLEAR;
\r
5821 FLAG_C = CFLAG_CLEAR;
\r
5825 void m68k_op_move_8_pd7_di(void)
\r
5827 uint res = OPER_AY_DI_8();
\r
5828 uint ea = EA_A7_PD_8();
\r
5830 m68ki_write_8(ea, res);
\r
5832 FLAG_N = NFLAG_8(res);
\r
5834 FLAG_V = VFLAG_CLEAR;
\r
5835 FLAG_C = CFLAG_CLEAR;
\r
5839 void m68k_op_move_8_pd7_ix(void)
\r
5841 uint res = OPER_AY_IX_8();
\r
5842 uint ea = EA_A7_PD_8();
\r
5844 m68ki_write_8(ea, res);
\r
5846 FLAG_N = NFLAG_8(res);
\r
5848 FLAG_V = VFLAG_CLEAR;
\r
5849 FLAG_C = CFLAG_CLEAR;
\r
5853 void m68k_op_move_8_pd7_aw(void)
\r
5855 uint res = OPER_AW_8();
\r
5856 uint ea = EA_A7_PD_8();
\r
5858 m68ki_write_8(ea, res);
\r
5860 FLAG_N = NFLAG_8(res);
\r
5862 FLAG_V = VFLAG_CLEAR;
\r
5863 FLAG_C = CFLAG_CLEAR;
\r
5867 void m68k_op_move_8_pd7_al(void)
\r
5869 uint res = OPER_AL_8();
\r
5870 uint ea = EA_A7_PD_8();
\r
5872 m68ki_write_8(ea, res);
\r
5874 FLAG_N = NFLAG_8(res);
\r
5876 FLAG_V = VFLAG_CLEAR;
\r
5877 FLAG_C = CFLAG_CLEAR;
\r
5881 void m68k_op_move_8_pd7_pcdi(void)
\r
5883 uint res = OPER_PCDI_8();
\r
5884 uint ea = EA_A7_PD_8();
\r
5886 m68ki_write_8(ea, res);
\r
5888 FLAG_N = NFLAG_8(res);
\r
5890 FLAG_V = VFLAG_CLEAR;
\r
5891 FLAG_C = CFLAG_CLEAR;
\r
5895 void m68k_op_move_8_pd7_pcix(void)
\r
5897 uint res = OPER_PCIX_8();
\r
5898 uint ea = EA_A7_PD_8();
\r
5900 m68ki_write_8(ea, res);
\r
5902 FLAG_N = NFLAG_8(res);
\r
5904 FLAG_V = VFLAG_CLEAR;
\r
5905 FLAG_C = CFLAG_CLEAR;
\r
5909 void m68k_op_move_8_pd7_i(void)
\r
5911 uint res = OPER_I_8();
\r
5912 uint ea = EA_A7_PD_8();
\r
5914 m68ki_write_8(ea, res);
\r
5916 FLAG_N = NFLAG_8(res);
\r
5918 FLAG_V = VFLAG_CLEAR;
\r
5919 FLAG_C = CFLAG_CLEAR;
\r
5923 void m68k_op_move_8_pd_ai(void)
\r
5925 uint res = OPER_AY_AI_8();
\r
5926 uint ea = EA_AX_PD_8();
\r
5928 m68ki_write_8(ea, res);
\r
5930 FLAG_N = NFLAG_8(res);
\r
5932 FLAG_V = VFLAG_CLEAR;
\r
5933 FLAG_C = CFLAG_CLEAR;
\r
5937 void m68k_op_move_8_pd_pi(void)
\r
5939 uint res = OPER_AY_PI_8();
\r
5940 uint ea = EA_AX_PD_8();
\r
5942 m68ki_write_8(ea, res);
\r
5944 FLAG_N = NFLAG_8(res);
\r
5946 FLAG_V = VFLAG_CLEAR;
\r
5947 FLAG_C = CFLAG_CLEAR;
\r
5951 void m68k_op_move_8_pd_pi7(void)
\r
5953 uint res = OPER_A7_PI_8();
\r
5954 uint ea = EA_AX_PD_8();
\r
5956 m68ki_write_8(ea, res);
\r
5958 FLAG_N = NFLAG_8(res);
\r
5960 FLAG_V = VFLAG_CLEAR;
\r
5961 FLAG_C = CFLAG_CLEAR;
\r
5965 void m68k_op_move_8_pd_pd(void)
\r
5967 uint res = OPER_AY_PD_8();
\r
5968 uint ea = EA_AX_PD_8();
\r
5970 m68ki_write_8(ea, res);
\r
5972 FLAG_N = NFLAG_8(res);
\r
5974 FLAG_V = VFLAG_CLEAR;
\r
5975 FLAG_C = CFLAG_CLEAR;
\r
5979 void m68k_op_move_8_pd_pd7(void)
\r
5981 uint res = OPER_A7_PD_8();
\r
5982 uint ea = EA_AX_PD_8();
\r
5984 m68ki_write_8(ea, res);
\r
5986 FLAG_N = NFLAG_8(res);
\r
5988 FLAG_V = VFLAG_CLEAR;
\r
5989 FLAG_C = CFLAG_CLEAR;
\r
5993 void m68k_op_move_8_pd_di(void)
\r
5995 uint res = OPER_AY_DI_8();
\r
5996 uint ea = EA_AX_PD_8();
\r
5998 m68ki_write_8(ea, res);
\r
6000 FLAG_N = NFLAG_8(res);
\r
6002 FLAG_V = VFLAG_CLEAR;
\r
6003 FLAG_C = CFLAG_CLEAR;
\r
6007 void m68k_op_move_8_pd_ix(void)
\r
6009 uint res = OPER_AY_IX_8();
\r
6010 uint ea = EA_AX_PD_8();
\r
6012 m68ki_write_8(ea, res);
\r
6014 FLAG_N = NFLAG_8(res);
\r
6016 FLAG_V = VFLAG_CLEAR;
\r
6017 FLAG_C = CFLAG_CLEAR;
\r
6021 void m68k_op_move_8_pd_aw(void)
\r
6023 uint res = OPER_AW_8();
\r
6024 uint ea = EA_AX_PD_8();
\r
6026 m68ki_write_8(ea, res);
\r
6028 FLAG_N = NFLAG_8(res);
\r
6030 FLAG_V = VFLAG_CLEAR;
\r
6031 FLAG_C = CFLAG_CLEAR;
\r
6035 void m68k_op_move_8_pd_al(void)
\r
6037 uint res = OPER_AL_8();
\r
6038 uint ea = EA_AX_PD_8();
\r
6040 m68ki_write_8(ea, res);
\r
6042 FLAG_N = NFLAG_8(res);
\r
6044 FLAG_V = VFLAG_CLEAR;
\r
6045 FLAG_C = CFLAG_CLEAR;
\r
6049 void m68k_op_move_8_pd_pcdi(void)
\r
6051 uint res = OPER_PCDI_8();
\r
6052 uint ea = EA_AX_PD_8();
\r
6054 m68ki_write_8(ea, res);
\r
6056 FLAG_N = NFLAG_8(res);
\r
6058 FLAG_V = VFLAG_CLEAR;
\r
6059 FLAG_C = CFLAG_CLEAR;
\r
6063 void m68k_op_move_8_pd_pcix(void)
\r
6065 uint res = OPER_PCIX_8();
\r
6066 uint ea = EA_AX_PD_8();
\r
6068 m68ki_write_8(ea, res);
\r
6070 FLAG_N = NFLAG_8(res);
\r
6072 FLAG_V = VFLAG_CLEAR;
\r
6073 FLAG_C = CFLAG_CLEAR;
\r
6077 void m68k_op_move_8_pd_i(void)
\r
6079 uint res = OPER_I_8();
\r
6080 uint ea = EA_AX_PD_8();
\r
6082 m68ki_write_8(ea, res);
\r
6084 FLAG_N = NFLAG_8(res);
\r
6086 FLAG_V = VFLAG_CLEAR;
\r
6087 FLAG_C = CFLAG_CLEAR;
\r
6091 void m68k_op_move_8_di_d(void)
\r
6093 uint res = MASK_OUT_ABOVE_8(DY);
\r
6094 uint ea = EA_AX_DI_8();
\r
6096 m68ki_write_8(ea, res);
\r
6098 FLAG_N = NFLAG_8(res);
\r
6100 FLAG_V = VFLAG_CLEAR;
\r
6101 FLAG_C = CFLAG_CLEAR;
\r
6105 void m68k_op_move_8_di_ai(void)
\r
6107 uint res = OPER_AY_AI_8();
\r
6108 uint ea = EA_AX_DI_8();
\r
6110 m68ki_write_8(ea, res);
\r
6112 FLAG_N = NFLAG_8(res);
\r
6114 FLAG_V = VFLAG_CLEAR;
\r
6115 FLAG_C = CFLAG_CLEAR;
\r
6119 void m68k_op_move_8_di_pi(void)
\r
6121 uint res = OPER_AY_PI_8();
\r
6122 uint ea = EA_AX_DI_8();
\r
6124 m68ki_write_8(ea, res);
\r
6126 FLAG_N = NFLAG_8(res);
\r
6128 FLAG_V = VFLAG_CLEAR;
\r
6129 FLAG_C = CFLAG_CLEAR;
\r
6133 void m68k_op_move_8_di_pi7(void)
\r
6135 uint res = OPER_A7_PI_8();
\r
6136 uint ea = EA_AX_DI_8();
\r
6138 m68ki_write_8(ea, res);
\r
6140 FLAG_N = NFLAG_8(res);
\r
6142 FLAG_V = VFLAG_CLEAR;
\r
6143 FLAG_C = CFLAG_CLEAR;
\r
6147 void m68k_op_move_8_di_pd(void)
\r
6149 uint res = OPER_AY_PD_8();
\r
6150 uint ea = EA_AX_DI_8();
\r
6152 m68ki_write_8(ea, res);
\r
6154 FLAG_N = NFLAG_8(res);
\r
6156 FLAG_V = VFLAG_CLEAR;
\r
6157 FLAG_C = CFLAG_CLEAR;
\r
6161 void m68k_op_move_8_di_pd7(void)
\r
6163 uint res = OPER_A7_PD_8();
\r
6164 uint ea = EA_AX_DI_8();
\r
6166 m68ki_write_8(ea, res);
\r
6168 FLAG_N = NFLAG_8(res);
\r
6170 FLAG_V = VFLAG_CLEAR;
\r
6171 FLAG_C = CFLAG_CLEAR;
\r
6175 void m68k_op_move_8_di_di(void)
\r
6177 uint res = OPER_AY_DI_8();
\r
6178 uint ea = EA_AX_DI_8();
\r
6180 m68ki_write_8(ea, res);
\r
6182 FLAG_N = NFLAG_8(res);
\r
6184 FLAG_V = VFLAG_CLEAR;
\r
6185 FLAG_C = CFLAG_CLEAR;
\r
6189 void m68k_op_move_8_di_ix(void)
\r
6191 uint res = OPER_AY_IX_8();
\r
6192 uint ea = EA_AX_DI_8();
\r
6194 m68ki_write_8(ea, res);
\r
6196 FLAG_N = NFLAG_8(res);
\r
6198 FLAG_V = VFLAG_CLEAR;
\r
6199 FLAG_C = CFLAG_CLEAR;
\r
6203 void m68k_op_move_8_di_aw(void)
\r
6205 uint res = OPER_AW_8();
\r
6206 uint ea = EA_AX_DI_8();
\r
6208 m68ki_write_8(ea, res);
\r
6210 FLAG_N = NFLAG_8(res);
\r
6212 FLAG_V = VFLAG_CLEAR;
\r
6213 FLAG_C = CFLAG_CLEAR;
\r
6217 void m68k_op_move_8_di_al(void)
\r
6219 uint res = OPER_AL_8();
\r
6220 uint ea = EA_AX_DI_8();
\r
6222 m68ki_write_8(ea, res);
\r
6224 FLAG_N = NFLAG_8(res);
\r
6226 FLAG_V = VFLAG_CLEAR;
\r
6227 FLAG_C = CFLAG_CLEAR;
\r
6231 void m68k_op_move_8_di_pcdi(void)
\r
6233 uint res = OPER_PCDI_8();
\r
6234 uint ea = EA_AX_DI_8();
\r
6236 m68ki_write_8(ea, res);
\r
6238 FLAG_N = NFLAG_8(res);
\r
6240 FLAG_V = VFLAG_CLEAR;
\r
6241 FLAG_C = CFLAG_CLEAR;
\r
6245 void m68k_op_move_8_di_pcix(void)
\r
6247 uint res = OPER_PCIX_8();
\r
6248 uint ea = EA_AX_DI_8();
\r
6250 m68ki_write_8(ea, res);
\r
6252 FLAG_N = NFLAG_8(res);
\r
6254 FLAG_V = VFLAG_CLEAR;
\r
6255 FLAG_C = CFLAG_CLEAR;
\r
6259 void m68k_op_move_8_di_i(void)
\r
6261 uint res = OPER_I_8();
\r
6262 uint ea = EA_AX_DI_8();
\r
6264 m68ki_write_8(ea, res);
\r
6266 FLAG_N = NFLAG_8(res);
\r
6268 FLAG_V = VFLAG_CLEAR;
\r
6269 FLAG_C = CFLAG_CLEAR;
\r
6273 void m68k_op_move_8_ix_d(void)
\r
6275 uint res = MASK_OUT_ABOVE_8(DY);
\r
6276 uint ea = EA_AX_IX_8();
\r
6278 m68ki_write_8(ea, res);
\r
6280 FLAG_N = NFLAG_8(res);
\r
6282 FLAG_V = VFLAG_CLEAR;
\r
6283 FLAG_C = CFLAG_CLEAR;
\r
6287 void m68k_op_move_8_ix_ai(void)
\r
6289 uint res = OPER_AY_AI_8();
\r
6290 uint ea = EA_AX_IX_8();
\r
6292 m68ki_write_8(ea, res);
\r
6294 FLAG_N = NFLAG_8(res);
\r
6296 FLAG_V = VFLAG_CLEAR;
\r
6297 FLAG_C = CFLAG_CLEAR;
\r
6301 void m68k_op_move_8_ix_pi(void)
\r
6303 uint res = OPER_AY_PI_8();
\r
6304 uint ea = EA_AX_IX_8();
\r
6306 m68ki_write_8(ea, res);
\r
6308 FLAG_N = NFLAG_8(res);
\r
6310 FLAG_V = VFLAG_CLEAR;
\r
6311 FLAG_C = CFLAG_CLEAR;
\r
6315 void m68k_op_move_8_ix_pi7(void)
\r
6317 uint res = OPER_A7_PI_8();
\r
6318 uint ea = EA_AX_IX_8();
\r
6320 m68ki_write_8(ea, res);
\r
6322 FLAG_N = NFLAG_8(res);
\r
6324 FLAG_V = VFLAG_CLEAR;
\r
6325 FLAG_C = CFLAG_CLEAR;
\r
6329 void m68k_op_move_8_ix_pd(void)
\r
6331 uint res = OPER_AY_PD_8();
\r
6332 uint ea = EA_AX_IX_8();
\r
6334 m68ki_write_8(ea, res);
\r
6336 FLAG_N = NFLAG_8(res);
\r
6338 FLAG_V = VFLAG_CLEAR;
\r
6339 FLAG_C = CFLAG_CLEAR;
\r
6343 void m68k_op_move_8_ix_pd7(void)
\r
6345 uint res = OPER_A7_PD_8();
\r
6346 uint ea = EA_AX_IX_8();
\r
6348 m68ki_write_8(ea, res);
\r
6350 FLAG_N = NFLAG_8(res);
\r
6352 FLAG_V = VFLAG_CLEAR;
\r
6353 FLAG_C = CFLAG_CLEAR;
\r
6357 void m68k_op_move_8_ix_di(void)
\r
6359 uint res = OPER_AY_DI_8();
\r
6360 uint ea = EA_AX_IX_8();
\r
6362 m68ki_write_8(ea, res);
\r
6364 FLAG_N = NFLAG_8(res);
\r
6366 FLAG_V = VFLAG_CLEAR;
\r
6367 FLAG_C = CFLAG_CLEAR;
\r
6371 void m68k_op_move_8_ix_ix(void)
\r
6373 uint res = OPER_AY_IX_8();
\r
6374 uint ea = EA_AX_IX_8();
\r
6376 m68ki_write_8(ea, res);
\r
6378 FLAG_N = NFLAG_8(res);
\r
6380 FLAG_V = VFLAG_CLEAR;
\r
6381 FLAG_C = CFLAG_CLEAR;
\r
6385 void m68k_op_move_8_ix_aw(void)
\r
6387 uint res = OPER_AW_8();
\r
6388 uint ea = EA_AX_IX_8();
\r
6390 m68ki_write_8(ea, res);
\r
6392 FLAG_N = NFLAG_8(res);
\r
6394 FLAG_V = VFLAG_CLEAR;
\r
6395 FLAG_C = CFLAG_CLEAR;
\r
6399 void m68k_op_move_8_ix_al(void)
\r
6401 uint res = OPER_AL_8();
\r
6402 uint ea = EA_AX_IX_8();
\r
6404 m68ki_write_8(ea, res);
\r
6406 FLAG_N = NFLAG_8(res);
\r
6408 FLAG_V = VFLAG_CLEAR;
\r
6409 FLAG_C = CFLAG_CLEAR;
\r
6413 void m68k_op_move_8_ix_pcdi(void)
\r
6415 uint res = OPER_PCDI_8();
\r
6416 uint ea = EA_AX_IX_8();
\r
6418 m68ki_write_8(ea, res);
\r
6420 FLAG_N = NFLAG_8(res);
\r
6422 FLAG_V = VFLAG_CLEAR;
\r
6423 FLAG_C = CFLAG_CLEAR;
\r
6427 void m68k_op_move_8_ix_pcix(void)
\r
6429 uint res = OPER_PCIX_8();
\r
6430 uint ea = EA_AX_IX_8();
\r
6432 m68ki_write_8(ea, res);
\r
6434 FLAG_N = NFLAG_8(res);
\r
6436 FLAG_V = VFLAG_CLEAR;
\r
6437 FLAG_C = CFLAG_CLEAR;
\r
6441 void m68k_op_move_8_ix_i(void)
\r
6443 uint res = OPER_I_8();
\r
6444 uint ea = EA_AX_IX_8();
\r
6446 m68ki_write_8(ea, res);
\r
6448 FLAG_N = NFLAG_8(res);
\r
6450 FLAG_V = VFLAG_CLEAR;
\r
6451 FLAG_C = CFLAG_CLEAR;
\r
6455 void m68k_op_move_8_aw_d(void)
\r
6457 uint res = MASK_OUT_ABOVE_8(DY);
\r
6458 uint ea = EA_AW_8();
\r
6460 m68ki_write_8(ea, res);
\r
6462 FLAG_N = NFLAG_8(res);
\r
6464 FLAG_V = VFLAG_CLEAR;
\r
6465 FLAG_C = CFLAG_CLEAR;
\r
6469 void m68k_op_move_8_aw_ai(void)
\r
6471 uint res = OPER_AY_AI_8();
\r
6472 uint ea = EA_AW_8();
\r
6474 m68ki_write_8(ea, res);
\r
6476 FLAG_N = NFLAG_8(res);
\r
6478 FLAG_V = VFLAG_CLEAR;
\r
6479 FLAG_C = CFLAG_CLEAR;
\r
6483 void m68k_op_move_8_aw_pi(void)
\r
6485 uint res = OPER_AY_PI_8();
\r
6486 uint ea = EA_AW_8();
\r
6488 m68ki_write_8(ea, res);
\r
6490 FLAG_N = NFLAG_8(res);
\r
6492 FLAG_V = VFLAG_CLEAR;
\r
6493 FLAG_C = CFLAG_CLEAR;
\r
6497 void m68k_op_move_8_aw_pi7(void)
\r
6499 uint res = OPER_A7_PI_8();
\r
6500 uint ea = EA_AW_8();
\r
6502 m68ki_write_8(ea, res);
\r
6504 FLAG_N = NFLAG_8(res);
\r
6506 FLAG_V = VFLAG_CLEAR;
\r
6507 FLAG_C = CFLAG_CLEAR;
\r
6511 void m68k_op_move_8_aw_pd(void)
\r
6513 uint res = OPER_AY_PD_8();
\r
6514 uint ea = EA_AW_8();
\r
6516 m68ki_write_8(ea, res);
\r
6518 FLAG_N = NFLAG_8(res);
\r
6520 FLAG_V = VFLAG_CLEAR;
\r
6521 FLAG_C = CFLAG_CLEAR;
\r
6525 void m68k_op_move_8_aw_pd7(void)
\r
6527 uint res = OPER_A7_PD_8();
\r
6528 uint ea = EA_AW_8();
\r
6530 m68ki_write_8(ea, res);
\r
6532 FLAG_N = NFLAG_8(res);
\r
6534 FLAG_V = VFLAG_CLEAR;
\r
6535 FLAG_C = CFLAG_CLEAR;
\r
6539 void m68k_op_move_8_aw_di(void)
\r
6541 uint res = OPER_AY_DI_8();
\r
6542 uint ea = EA_AW_8();
\r
6544 m68ki_write_8(ea, res);
\r
6546 FLAG_N = NFLAG_8(res);
\r
6548 FLAG_V = VFLAG_CLEAR;
\r
6549 FLAG_C = CFLAG_CLEAR;
\r
6553 void m68k_op_move_8_aw_ix(void)
\r
6555 uint res = OPER_AY_IX_8();
\r
6556 uint ea = EA_AW_8();
\r
6558 m68ki_write_8(ea, res);
\r
6560 FLAG_N = NFLAG_8(res);
\r
6562 FLAG_V = VFLAG_CLEAR;
\r
6563 FLAG_C = CFLAG_CLEAR;
\r
6567 void m68k_op_move_8_aw_aw(void)
\r
6569 uint res = OPER_AW_8();
\r
6570 uint ea = EA_AW_8();
\r
6572 m68ki_write_8(ea, res);
\r
6574 FLAG_N = NFLAG_8(res);
\r
6576 FLAG_V = VFLAG_CLEAR;
\r
6577 FLAG_C = CFLAG_CLEAR;
\r
6581 void m68k_op_move_8_aw_al(void)
\r
6583 uint res = OPER_AL_8();
\r
6584 uint ea = EA_AW_8();
\r
6586 m68ki_write_8(ea, res);
\r
6588 FLAG_N = NFLAG_8(res);
\r
6590 FLAG_V = VFLAG_CLEAR;
\r
6591 FLAG_C = CFLAG_CLEAR;
\r
6595 void m68k_op_move_8_aw_pcdi(void)
\r
6597 uint res = OPER_PCDI_8();
\r
6598 uint ea = EA_AW_8();
\r
6600 m68ki_write_8(ea, res);
\r
6602 FLAG_N = NFLAG_8(res);
\r
6604 FLAG_V = VFLAG_CLEAR;
\r
6605 FLAG_C = CFLAG_CLEAR;
\r
6609 void m68k_op_move_8_aw_pcix(void)
\r
6611 uint res = OPER_PCIX_8();
\r
6612 uint ea = EA_AW_8();
\r
6614 m68ki_write_8(ea, res);
\r
6616 FLAG_N = NFLAG_8(res);
\r
6618 FLAG_V = VFLAG_CLEAR;
\r
6619 FLAG_C = CFLAG_CLEAR;
\r
6623 void m68k_op_move_8_aw_i(void)
\r
6625 uint res = OPER_I_8();
\r
6626 uint ea = EA_AW_8();
\r
6628 m68ki_write_8(ea, res);
\r
6630 FLAG_N = NFLAG_8(res);
\r
6632 FLAG_V = VFLAG_CLEAR;
\r
6633 FLAG_C = CFLAG_CLEAR;
\r
6637 void m68k_op_move_8_al_d(void)
\r
6639 uint res = MASK_OUT_ABOVE_8(DY);
\r
6640 uint ea = EA_AL_8();
\r
6642 m68ki_write_8(ea, res);
\r
6644 FLAG_N = NFLAG_8(res);
\r
6646 FLAG_V = VFLAG_CLEAR;
\r
6647 FLAG_C = CFLAG_CLEAR;
\r
6651 void m68k_op_move_8_al_ai(void)
\r
6653 uint res = OPER_AY_AI_8();
\r
6654 uint ea = EA_AL_8();
\r
6656 m68ki_write_8(ea, res);
\r
6658 FLAG_N = NFLAG_8(res);
\r
6660 FLAG_V = VFLAG_CLEAR;
\r
6661 FLAG_C = CFLAG_CLEAR;
\r
6665 void m68k_op_move_8_al_pi(void)
\r
6667 uint res = OPER_AY_PI_8();
\r
6668 uint ea = EA_AL_8();
\r
6670 m68ki_write_8(ea, res);
\r
6672 FLAG_N = NFLAG_8(res);
\r
6674 FLAG_V = VFLAG_CLEAR;
\r
6675 FLAG_C = CFLAG_CLEAR;
\r
6679 void m68k_op_move_8_al_pi7(void)
\r
6681 uint res = OPER_A7_PI_8();
\r
6682 uint ea = EA_AL_8();
\r
6684 m68ki_write_8(ea, res);
\r
6686 FLAG_N = NFLAG_8(res);
\r
6688 FLAG_V = VFLAG_CLEAR;
\r
6689 FLAG_C = CFLAG_CLEAR;
\r
6693 void m68k_op_move_8_al_pd(void)
\r
6695 uint res = OPER_AY_PD_8();
\r
6696 uint ea = EA_AL_8();
\r
6698 m68ki_write_8(ea, res);
\r
6700 FLAG_N = NFLAG_8(res);
\r
6702 FLAG_V = VFLAG_CLEAR;
\r
6703 FLAG_C = CFLAG_CLEAR;
\r
6707 void m68k_op_move_8_al_pd7(void)
\r
6709 uint res = OPER_A7_PD_8();
\r
6710 uint ea = EA_AL_8();
\r
6712 m68ki_write_8(ea, res);
\r
6714 FLAG_N = NFLAG_8(res);
\r
6716 FLAG_V = VFLAG_CLEAR;
\r
6717 FLAG_C = CFLAG_CLEAR;
\r
6721 void m68k_op_move_8_al_di(void)
\r
6723 uint res = OPER_AY_DI_8();
\r
6724 uint ea = EA_AL_8();
\r
6726 m68ki_write_8(ea, res);
\r
6728 FLAG_N = NFLAG_8(res);
\r
6730 FLAG_V = VFLAG_CLEAR;
\r
6731 FLAG_C = CFLAG_CLEAR;
\r
6735 void m68k_op_move_8_al_ix(void)
\r
6737 uint res = OPER_AY_IX_8();
\r
6738 uint ea = EA_AL_8();
\r
6740 m68ki_write_8(ea, res);
\r
6742 FLAG_N = NFLAG_8(res);
\r
6744 FLAG_V = VFLAG_CLEAR;
\r
6745 FLAG_C = CFLAG_CLEAR;
\r
6749 void m68k_op_move_8_al_aw(void)
\r
6751 uint res = OPER_AW_8();
\r
6752 uint ea = EA_AL_8();
\r
6754 m68ki_write_8(ea, res);
\r
6756 FLAG_N = NFLAG_8(res);
\r
6758 FLAG_V = VFLAG_CLEAR;
\r
6759 FLAG_C = CFLAG_CLEAR;
\r
6763 void m68k_op_move_8_al_al(void)
\r
6765 uint res = OPER_AL_8();
\r
6766 uint ea = EA_AL_8();
\r
6768 m68ki_write_8(ea, res);
\r
6770 FLAG_N = NFLAG_8(res);
\r
6772 FLAG_V = VFLAG_CLEAR;
\r
6773 FLAG_C = CFLAG_CLEAR;
\r
6777 void m68k_op_move_8_al_pcdi(void)
\r
6779 uint res = OPER_PCDI_8();
\r
6780 uint ea = EA_AL_8();
\r
6782 m68ki_write_8(ea, res);
\r
6784 FLAG_N = NFLAG_8(res);
\r
6786 FLAG_V = VFLAG_CLEAR;
\r
6787 FLAG_C = CFLAG_CLEAR;
\r
6791 void m68k_op_move_8_al_pcix(void)
\r
6793 uint res = OPER_PCIX_8();
\r
6794 uint ea = EA_AL_8();
\r
6796 m68ki_write_8(ea, res);
\r
6798 FLAG_N = NFLAG_8(res);
\r
6800 FLAG_V = VFLAG_CLEAR;
\r
6801 FLAG_C = CFLAG_CLEAR;
\r
6805 void m68k_op_move_8_al_i(void)
\r
6807 uint res = OPER_I_8();
\r
6808 uint ea = EA_AL_8();
\r
6810 m68ki_write_8(ea, res);
\r
6812 FLAG_N = NFLAG_8(res);
\r
6814 FLAG_V = VFLAG_CLEAR;
\r
6815 FLAG_C = CFLAG_CLEAR;
\r
6819 void m68k_op_move_16_d_d(void)
\r
6821 uint res = MASK_OUT_ABOVE_16(DY);
\r
6822 uint* r_dst = &DX;
\r
6824 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
\r
6826 FLAG_N = NFLAG_16(res);
\r
6828 FLAG_V = VFLAG_CLEAR;
\r
6829 FLAG_C = CFLAG_CLEAR;
\r
6833 void m68k_op_move_16_d_a(void)
\r
6835 uint res = MASK_OUT_ABOVE_16(AY);
\r
6836 uint* r_dst = &DX;
\r
6838 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
\r
6840 FLAG_N = NFLAG_16(res);
\r
6842 FLAG_V = VFLAG_CLEAR;
\r
6843 FLAG_C = CFLAG_CLEAR;
\r
6847 void m68k_op_move_16_d_ai(void)
\r
6849 uint res = OPER_AY_AI_16();
\r
6850 uint* r_dst = &DX;
\r
6852 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
\r
6854 FLAG_N = NFLAG_16(res);
\r
6856 FLAG_V = VFLAG_CLEAR;
\r
6857 FLAG_C = CFLAG_CLEAR;
\r
6861 void m68k_op_move_16_d_pi(void)
\r
6863 uint res = OPER_AY_PI_16();
\r
6864 uint* r_dst = &DX;
\r
6866 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
\r
6868 FLAG_N = NFLAG_16(res);
\r
6870 FLAG_V = VFLAG_CLEAR;
\r
6871 FLAG_C = CFLAG_CLEAR;
\r
6875 void m68k_op_move_16_d_pd(void)
\r
6877 uint res = OPER_AY_PD_16();
\r
6878 uint* r_dst = &DX;
\r
6880 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
\r
6882 FLAG_N = NFLAG_16(res);
\r
6884 FLAG_V = VFLAG_CLEAR;
\r
6885 FLAG_C = CFLAG_CLEAR;
\r
6889 void m68k_op_move_16_d_di(void)
\r
6891 uint res = OPER_AY_DI_16();
\r
6892 uint* r_dst = &DX;
\r
6894 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
\r
6896 FLAG_N = NFLAG_16(res);
\r
6898 FLAG_V = VFLAG_CLEAR;
\r
6899 FLAG_C = CFLAG_CLEAR;
\r
6903 void m68k_op_move_16_d_ix(void)
\r
6905 uint res = OPER_AY_IX_16();
\r
6906 uint* r_dst = &DX;
\r
6908 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
\r
6910 FLAG_N = NFLAG_16(res);
\r
6912 FLAG_V = VFLAG_CLEAR;
\r
6913 FLAG_C = CFLAG_CLEAR;
\r
6917 void m68k_op_move_16_d_aw(void)
\r
6919 uint res = OPER_AW_16();
\r
6920 uint* r_dst = &DX;
\r
6922 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
\r
6924 FLAG_N = NFLAG_16(res);
\r
6926 FLAG_V = VFLAG_CLEAR;
\r
6927 FLAG_C = CFLAG_CLEAR;
\r
6931 void m68k_op_move_16_d_al(void)
\r
6933 uint res = OPER_AL_16();
\r
6934 uint* r_dst = &DX;
\r
6936 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
\r
6938 FLAG_N = NFLAG_16(res);
\r
6940 FLAG_V = VFLAG_CLEAR;
\r
6941 FLAG_C = CFLAG_CLEAR;
\r
6945 void m68k_op_move_16_d_pcdi(void)
\r
6947 uint res = OPER_PCDI_16();
\r
6948 uint* r_dst = &DX;
\r
6950 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
\r
6952 FLAG_N = NFLAG_16(res);
\r
6954 FLAG_V = VFLAG_CLEAR;
\r
6955 FLAG_C = CFLAG_CLEAR;
\r
6959 void m68k_op_move_16_d_pcix(void)
\r
6961 uint res = OPER_PCIX_16();
\r
6962 uint* r_dst = &DX;
\r
6964 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
\r
6966 FLAG_N = NFLAG_16(res);
\r
6968 FLAG_V = VFLAG_CLEAR;
\r
6969 FLAG_C = CFLAG_CLEAR;
\r
6973 void m68k_op_move_16_d_i(void)
\r
6975 uint res = OPER_I_16();
\r
6976 uint* r_dst = &DX;
\r
6978 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
\r
6980 FLAG_N = NFLAG_16(res);
\r
6982 FLAG_V = VFLAG_CLEAR;
\r
6983 FLAG_C = CFLAG_CLEAR;
\r
6987 void m68k_op_move_16_ai_d(void)
\r
6989 uint res = MASK_OUT_ABOVE_16(DY);
\r
6990 uint ea = EA_AX_AI_16();
\r
6992 m68ki_write_16(ea, res);
\r
6994 FLAG_N = NFLAG_16(res);
\r
6996 FLAG_V = VFLAG_CLEAR;
\r
6997 FLAG_C = CFLAG_CLEAR;
\r
7001 void m68k_op_move_16_ai_a(void)
\r
7003 uint res = MASK_OUT_ABOVE_16(AY);
\r
7004 uint ea = EA_AX_AI_16();
\r
7006 m68ki_write_16(ea, res);
\r
7008 FLAG_N = NFLAG_16(res);
\r
7010 FLAG_V = VFLAG_CLEAR;
\r
7011 FLAG_C = CFLAG_CLEAR;
\r
7015 void m68k_op_move_16_ai_ai(void)
\r
7017 uint res = OPER_AY_AI_16();
\r
7018 uint ea = EA_AX_AI_16();
\r
7020 m68ki_write_16(ea, res);
\r
7022 FLAG_N = NFLAG_16(res);
\r
7024 FLAG_V = VFLAG_CLEAR;
\r
7025 FLAG_C = CFLAG_CLEAR;
\r
7029 void m68k_op_move_16_ai_pi(void)
\r
7031 uint res = OPER_AY_PI_16();
\r
7032 uint ea = EA_AX_AI_16();
\r
7034 m68ki_write_16(ea, res);
\r
7036 FLAG_N = NFLAG_16(res);
\r
7038 FLAG_V = VFLAG_CLEAR;
\r
7039 FLAG_C = CFLAG_CLEAR;
\r
7043 void m68k_op_move_16_ai_pd(void)
\r
7045 uint res = OPER_AY_PD_16();
\r
7046 uint ea = EA_AX_AI_16();
\r
7048 m68ki_write_16(ea, res);
\r
7050 FLAG_N = NFLAG_16(res);
\r
7052 FLAG_V = VFLAG_CLEAR;
\r
7053 FLAG_C = CFLAG_CLEAR;
\r
7057 void m68k_op_move_16_ai_di(void)
\r
7059 uint res = OPER_AY_DI_16();
\r
7060 uint ea = EA_AX_AI_16();
\r
7062 m68ki_write_16(ea, res);
\r
7064 FLAG_N = NFLAG_16(res);
\r
7066 FLAG_V = VFLAG_CLEAR;
\r
7067 FLAG_C = CFLAG_CLEAR;
\r
7071 void m68k_op_move_16_ai_ix(void)
\r
7073 uint res = OPER_AY_IX_16();
\r
7074 uint ea = EA_AX_AI_16();
\r
7076 m68ki_write_16(ea, res);
\r
7078 FLAG_N = NFLAG_16(res);
\r
7080 FLAG_V = VFLAG_CLEAR;
\r
7081 FLAG_C = CFLAG_CLEAR;
\r
7085 void m68k_op_move_16_ai_aw(void)
\r
7087 uint res = OPER_AW_16();
\r
7088 uint ea = EA_AX_AI_16();
\r
7090 m68ki_write_16(ea, res);
\r
7092 FLAG_N = NFLAG_16(res);
\r
7094 FLAG_V = VFLAG_CLEAR;
\r
7095 FLAG_C = CFLAG_CLEAR;
\r
7099 void m68k_op_move_16_ai_al(void)
\r
7101 uint res = OPER_AL_16();
\r
7102 uint ea = EA_AX_AI_16();
\r
7104 m68ki_write_16(ea, res);
\r
7106 FLAG_N = NFLAG_16(res);
\r
7108 FLAG_V = VFLAG_CLEAR;
\r
7109 FLAG_C = CFLAG_CLEAR;
\r
7113 void m68k_op_move_16_ai_pcdi(void)
\r
7115 uint res = OPER_PCDI_16();
\r
7116 uint ea = EA_AX_AI_16();
\r
7118 m68ki_write_16(ea, res);
\r
7120 FLAG_N = NFLAG_16(res);
\r
7122 FLAG_V = VFLAG_CLEAR;
\r
7123 FLAG_C = CFLAG_CLEAR;
\r
7127 void m68k_op_move_16_ai_pcix(void)
\r
7129 uint res = OPER_PCIX_16();
\r
7130 uint ea = EA_AX_AI_16();
\r
7132 m68ki_write_16(ea, res);
\r
7134 FLAG_N = NFLAG_16(res);
\r
7136 FLAG_V = VFLAG_CLEAR;
\r
7137 FLAG_C = CFLAG_CLEAR;
\r
7141 void m68k_op_move_16_ai_i(void)
\r
7143 uint res = OPER_I_16();
\r
7144 uint ea = EA_AX_AI_16();
\r
7146 m68ki_write_16(ea, res);
\r
7148 FLAG_N = NFLAG_16(res);
\r
7150 FLAG_V = VFLAG_CLEAR;
\r
7151 FLAG_C = CFLAG_CLEAR;
\r
7155 void m68k_op_move_16_pi_d(void)
\r
7157 uint res = MASK_OUT_ABOVE_16(DY);
\r
7158 uint ea = EA_AX_PI_16();
\r
7160 m68ki_write_16(ea, res);
\r
7162 FLAG_N = NFLAG_16(res);
\r
7164 FLAG_V = VFLAG_CLEAR;
\r
7165 FLAG_C = CFLAG_CLEAR;
\r
7169 void m68k_op_move_16_pi_a(void)
\r
7171 uint res = MASK_OUT_ABOVE_16(AY);
\r
7172 uint ea = EA_AX_PI_16();
\r
7174 m68ki_write_16(ea, res);
\r
7176 FLAG_N = NFLAG_16(res);
\r
7178 FLAG_V = VFLAG_CLEAR;
\r
7179 FLAG_C = CFLAG_CLEAR;
\r
7183 void m68k_op_move_16_pi_ai(void)
\r
7185 uint res = OPER_AY_AI_16();
\r
7186 uint ea = EA_AX_PI_16();
\r
7188 m68ki_write_16(ea, res);
\r
7190 FLAG_N = NFLAG_16(res);
\r
7192 FLAG_V = VFLAG_CLEAR;
\r
7193 FLAG_C = CFLAG_CLEAR;
\r
7197 void m68k_op_move_16_pi_pi(void)
\r
7199 uint res = OPER_AY_PI_16();
\r
7200 uint ea = EA_AX_PI_16();
\r
7202 m68ki_write_16(ea, res);
\r
7204 FLAG_N = NFLAG_16(res);
\r
7206 FLAG_V = VFLAG_CLEAR;
\r
7207 FLAG_C = CFLAG_CLEAR;
\r
7211 void m68k_op_move_16_pi_pd(void)
\r
7213 uint res = OPER_AY_PD_16();
\r
7214 uint ea = EA_AX_PI_16();
\r
7216 m68ki_write_16(ea, res);
\r
7218 FLAG_N = NFLAG_16(res);
\r
7220 FLAG_V = VFLAG_CLEAR;
\r
7221 FLAG_C = CFLAG_CLEAR;
\r
7225 void m68k_op_move_16_pi_di(void)
\r
7227 uint res = OPER_AY_DI_16();
\r
7228 uint ea = EA_AX_PI_16();
\r
7230 m68ki_write_16(ea, res);
\r
7232 FLAG_N = NFLAG_16(res);
\r
7234 FLAG_V = VFLAG_CLEAR;
\r
7235 FLAG_C = CFLAG_CLEAR;
\r
7239 void m68k_op_move_16_pi_ix(void)
\r
7241 uint res = OPER_AY_IX_16();
\r
7242 uint ea = EA_AX_PI_16();
\r
7244 m68ki_write_16(ea, res);
\r
7246 FLAG_N = NFLAG_16(res);
\r
7248 FLAG_V = VFLAG_CLEAR;
\r
7249 FLAG_C = CFLAG_CLEAR;
\r
7253 void m68k_op_move_16_pi_aw(void)
\r
7255 uint res = OPER_AW_16();
\r
7256 uint ea = EA_AX_PI_16();
\r
7258 m68ki_write_16(ea, res);
\r
7260 FLAG_N = NFLAG_16(res);
\r
7262 FLAG_V = VFLAG_CLEAR;
\r
7263 FLAG_C = CFLAG_CLEAR;
\r
7267 void m68k_op_move_16_pi_al(void)
\r
7269 uint res = OPER_AL_16();
\r
7270 uint ea = EA_AX_PI_16();
\r
7272 m68ki_write_16(ea, res);
\r
7274 FLAG_N = NFLAG_16(res);
\r
7276 FLAG_V = VFLAG_CLEAR;
\r
7277 FLAG_C = CFLAG_CLEAR;
\r
7281 void m68k_op_move_16_pi_pcdi(void)
\r
7283 uint res = OPER_PCDI_16();
\r
7284 uint ea = EA_AX_PI_16();
\r
7286 m68ki_write_16(ea, res);
\r
7288 FLAG_N = NFLAG_16(res);
\r
7290 FLAG_V = VFLAG_CLEAR;
\r
7291 FLAG_C = CFLAG_CLEAR;
\r
7295 void m68k_op_move_16_pi_pcix(void)
\r
7297 uint res = OPER_PCIX_16();
\r
7298 uint ea = EA_AX_PI_16();
\r
7300 m68ki_write_16(ea, res);
\r
7302 FLAG_N = NFLAG_16(res);
\r
7304 FLAG_V = VFLAG_CLEAR;
\r
7305 FLAG_C = CFLAG_CLEAR;
\r
7309 void m68k_op_move_16_pi_i(void)
\r
7311 uint res = OPER_I_16();
\r
7312 uint ea = EA_AX_PI_16();
\r
7314 m68ki_write_16(ea, res);
\r
7316 FLAG_N = NFLAG_16(res);
\r
7318 FLAG_V = VFLAG_CLEAR;
\r
7319 FLAG_C = CFLAG_CLEAR;
\r
7323 void m68k_op_move_16_pd_d(void)
\r
7325 uint res = MASK_OUT_ABOVE_16(DY);
\r
7326 uint ea = EA_AX_PD_16();
\r
7328 m68ki_write_16(ea, res);
\r
7330 FLAG_N = NFLAG_16(res);
\r
7332 FLAG_V = VFLAG_CLEAR;
\r
7333 FLAG_C = CFLAG_CLEAR;
\r
7337 void m68k_op_move_16_pd_a(void)
\r
7339 uint res = MASK_OUT_ABOVE_16(AY);
\r
7340 uint ea = EA_AX_PD_16();
\r
7342 m68ki_write_16(ea, res);
\r
7344 FLAG_N = NFLAG_16(res);
\r
7346 FLAG_V = VFLAG_CLEAR;
\r
7347 FLAG_C = CFLAG_CLEAR;
\r
7351 void m68k_op_move_16_pd_ai(void)
\r
7353 uint res = OPER_AY_AI_16();
\r
7354 uint ea = EA_AX_PD_16();
\r
7356 m68ki_write_16(ea, res);
\r
7358 FLAG_N = NFLAG_16(res);
\r
7360 FLAG_V = VFLAG_CLEAR;
\r
7361 FLAG_C = CFLAG_CLEAR;
\r
7365 void m68k_op_move_16_pd_pi(void)
\r
7367 uint res = OPER_AY_PI_16();
\r
7368 uint ea = EA_AX_PD_16();
\r
7370 m68ki_write_16(ea, res);
\r
7372 FLAG_N = NFLAG_16(res);
\r
7374 FLAG_V = VFLAG_CLEAR;
\r
7375 FLAG_C = CFLAG_CLEAR;
\r
7379 void m68k_op_move_16_pd_pd(void)
\r
7381 uint res = OPER_AY_PD_16();
\r
7382 uint ea = EA_AX_PD_16();
\r
7384 m68ki_write_16(ea, res);
\r
7386 FLAG_N = NFLAG_16(res);
\r
7388 FLAG_V = VFLAG_CLEAR;
\r
7389 FLAG_C = CFLAG_CLEAR;
\r
7393 void m68k_op_move_16_pd_di(void)
\r
7395 uint res = OPER_AY_DI_16();
\r
7396 uint ea = EA_AX_PD_16();
\r
7398 m68ki_write_16(ea, res);
\r
7400 FLAG_N = NFLAG_16(res);
\r
7402 FLAG_V = VFLAG_CLEAR;
\r
7403 FLAG_C = CFLAG_CLEAR;
\r
7407 void m68k_op_move_16_pd_ix(void)
\r
7409 uint res = OPER_AY_IX_16();
\r
7410 uint ea = EA_AX_PD_16();
\r
7412 m68ki_write_16(ea, res);
\r
7414 FLAG_N = NFLAG_16(res);
\r
7416 FLAG_V = VFLAG_CLEAR;
\r
7417 FLAG_C = CFLAG_CLEAR;
\r
7421 void m68k_op_move_16_pd_aw(void)
\r
7423 uint res = OPER_AW_16();
\r
7424 uint ea = EA_AX_PD_16();
\r
7426 m68ki_write_16(ea, res);
\r
7428 FLAG_N = NFLAG_16(res);
\r
7430 FLAG_V = VFLAG_CLEAR;
\r
7431 FLAG_C = CFLAG_CLEAR;
\r
7435 void m68k_op_move_16_pd_al(void)
\r
7437 uint res = OPER_AL_16();
\r
7438 uint ea = EA_AX_PD_16();
\r
7440 m68ki_write_16(ea, res);
\r
7442 FLAG_N = NFLAG_16(res);
\r
7444 FLAG_V = VFLAG_CLEAR;
\r
7445 FLAG_C = CFLAG_CLEAR;
\r
7449 void m68k_op_move_16_pd_pcdi(void)
\r
7451 uint res = OPER_PCDI_16();
\r
7452 uint ea = EA_AX_PD_16();
\r
7454 m68ki_write_16(ea, res);
\r
7456 FLAG_N = NFLAG_16(res);
\r
7458 FLAG_V = VFLAG_CLEAR;
\r
7459 FLAG_C = CFLAG_CLEAR;
\r
7463 void m68k_op_move_16_pd_pcix(void)
\r
7465 uint res = OPER_PCIX_16();
\r
7466 uint ea = EA_AX_PD_16();
\r
7468 m68ki_write_16(ea, res);
\r
7470 FLAG_N = NFLAG_16(res);
\r
7472 FLAG_V = VFLAG_CLEAR;
\r
7473 FLAG_C = CFLAG_CLEAR;
\r
7477 void m68k_op_move_16_pd_i(void)
\r
7479 uint res = OPER_I_16();
\r
7480 uint ea = EA_AX_PD_16();
\r
7482 m68ki_write_16(ea, res);
\r
7484 FLAG_N = NFLAG_16(res);
\r
7486 FLAG_V = VFLAG_CLEAR;
\r
7487 FLAG_C = CFLAG_CLEAR;
\r
7491 void m68k_op_move_16_di_d(void)
\r
7493 uint res = MASK_OUT_ABOVE_16(DY);
\r
7494 uint ea = EA_AX_DI_16();
\r
7496 m68ki_write_16(ea, res);
\r
7498 FLAG_N = NFLAG_16(res);
\r
7500 FLAG_V = VFLAG_CLEAR;
\r
7501 FLAG_C = CFLAG_CLEAR;
\r
7505 void m68k_op_move_16_di_a(void)
\r
7507 uint res = MASK_OUT_ABOVE_16(AY);
\r
7508 uint ea = EA_AX_DI_16();
\r
7510 m68ki_write_16(ea, res);
\r
7512 FLAG_N = NFLAG_16(res);
\r
7514 FLAG_V = VFLAG_CLEAR;
\r
7515 FLAG_C = CFLAG_CLEAR;
\r
7519 void m68k_op_move_16_di_ai(void)
\r
7521 uint res = OPER_AY_AI_16();
\r
7522 uint ea = EA_AX_DI_16();
\r
7524 m68ki_write_16(ea, res);
\r
7526 FLAG_N = NFLAG_16(res);
\r
7528 FLAG_V = VFLAG_CLEAR;
\r
7529 FLAG_C = CFLAG_CLEAR;
\r
7533 void m68k_op_move_16_di_pi(void)
\r
7535 uint res = OPER_AY_PI_16();
\r
7536 uint ea = EA_AX_DI_16();
\r
7538 m68ki_write_16(ea, res);
\r
7540 FLAG_N = NFLAG_16(res);
\r
7542 FLAG_V = VFLAG_CLEAR;
\r
7543 FLAG_C = CFLAG_CLEAR;
\r
7547 void m68k_op_move_16_di_pd(void)
\r
7549 uint res = OPER_AY_PD_16();
\r
7550 uint ea = EA_AX_DI_16();
\r
7552 m68ki_write_16(ea, res);
\r
7554 FLAG_N = NFLAG_16(res);
\r
7556 FLAG_V = VFLAG_CLEAR;
\r
7557 FLAG_C = CFLAG_CLEAR;
\r
7561 void m68k_op_move_16_di_di(void)
\r
7563 uint res = OPER_AY_DI_16();
\r
7564 uint ea = EA_AX_DI_16();
\r
7566 m68ki_write_16(ea, res);
\r
7568 FLAG_N = NFLAG_16(res);
\r
7570 FLAG_V = VFLAG_CLEAR;
\r
7571 FLAG_C = CFLAG_CLEAR;
\r
7575 void m68k_op_move_16_di_ix(void)
\r
7577 uint res = OPER_AY_IX_16();
\r
7578 uint ea = EA_AX_DI_16();
\r
7580 m68ki_write_16(ea, res);
\r
7582 FLAG_N = NFLAG_16(res);
\r
7584 FLAG_V = VFLAG_CLEAR;
\r
7585 FLAG_C = CFLAG_CLEAR;
\r
7589 void m68k_op_move_16_di_aw(void)
\r
7591 uint res = OPER_AW_16();
\r
7592 uint ea = EA_AX_DI_16();
\r
7594 m68ki_write_16(ea, res);
\r
7596 FLAG_N = NFLAG_16(res);
\r
7598 FLAG_V = VFLAG_CLEAR;
\r
7599 FLAG_C = CFLAG_CLEAR;
\r
7603 void m68k_op_move_16_di_al(void)
\r
7605 uint res = OPER_AL_16();
\r
7606 uint ea = EA_AX_DI_16();
\r
7608 m68ki_write_16(ea, res);
\r
7610 FLAG_N = NFLAG_16(res);
\r
7612 FLAG_V = VFLAG_CLEAR;
\r
7613 FLAG_C = CFLAG_CLEAR;
\r
7617 void m68k_op_move_16_di_pcdi(void)
\r
7619 uint res = OPER_PCDI_16();
\r
7620 uint ea = EA_AX_DI_16();
\r
7622 m68ki_write_16(ea, res);
\r
7624 FLAG_N = NFLAG_16(res);
\r
7626 FLAG_V = VFLAG_CLEAR;
\r
7627 FLAG_C = CFLAG_CLEAR;
\r
7631 void m68k_op_move_16_di_pcix(void)
\r
7633 uint res = OPER_PCIX_16();
\r
7634 uint ea = EA_AX_DI_16();
\r
7636 m68ki_write_16(ea, res);
\r
7638 FLAG_N = NFLAG_16(res);
\r
7640 FLAG_V = VFLAG_CLEAR;
\r
7641 FLAG_C = CFLAG_CLEAR;
\r
7645 void m68k_op_move_16_di_i(void)
\r
7647 uint res = OPER_I_16();
\r
7648 uint ea = EA_AX_DI_16();
\r
7650 m68ki_write_16(ea, res);
\r
7652 FLAG_N = NFLAG_16(res);
\r
7654 FLAG_V = VFLAG_CLEAR;
\r
7655 FLAG_C = CFLAG_CLEAR;
\r
7659 void m68k_op_move_16_ix_d(void)
\r
7661 uint res = MASK_OUT_ABOVE_16(DY);
\r
7662 uint ea = EA_AX_IX_16();
\r
7664 m68ki_write_16(ea, res);
\r
7666 FLAG_N = NFLAG_16(res);
\r
7668 FLAG_V = VFLAG_CLEAR;
\r
7669 FLAG_C = CFLAG_CLEAR;
\r
7673 void m68k_op_move_16_ix_a(void)
\r
7675 uint res = MASK_OUT_ABOVE_16(AY);
\r
7676 uint ea = EA_AX_IX_16();
\r
7678 m68ki_write_16(ea, res);
\r
7680 FLAG_N = NFLAG_16(res);
\r
7682 FLAG_V = VFLAG_CLEAR;
\r
7683 FLAG_C = CFLAG_CLEAR;
\r
7687 void m68k_op_move_16_ix_ai(void)
\r
7689 uint res = OPER_AY_AI_16();
\r
7690 uint ea = EA_AX_IX_16();
\r
7692 m68ki_write_16(ea, res);
\r
7694 FLAG_N = NFLAG_16(res);
\r
7696 FLAG_V = VFLAG_CLEAR;
\r
7697 FLAG_C = CFLAG_CLEAR;
\r
7701 void m68k_op_move_16_ix_pi(void)
\r
7703 uint res = OPER_AY_PI_16();
\r
7704 uint ea = EA_AX_IX_16();
\r
7706 m68ki_write_16(ea, res);
\r
7708 FLAG_N = NFLAG_16(res);
\r
7710 FLAG_V = VFLAG_CLEAR;
\r
7711 FLAG_C = CFLAG_CLEAR;
\r
7715 void m68k_op_move_16_ix_pd(void)
\r
7717 uint res = OPER_AY_PD_16();
\r
7718 uint ea = EA_AX_IX_16();
\r
7720 m68ki_write_16(ea, res);
\r
7722 FLAG_N = NFLAG_16(res);
\r
7724 FLAG_V = VFLAG_CLEAR;
\r
7725 FLAG_C = CFLAG_CLEAR;
\r
7729 void m68k_op_move_16_ix_di(void)
\r
7731 uint res = OPER_AY_DI_16();
\r
7732 uint ea = EA_AX_IX_16();
\r
7734 m68ki_write_16(ea, res);
\r
7736 FLAG_N = NFLAG_16(res);
\r
7738 FLAG_V = VFLAG_CLEAR;
\r
7739 FLAG_C = CFLAG_CLEAR;
\r
7743 void m68k_op_move_16_ix_ix(void)
\r
7745 uint res = OPER_AY_IX_16();
\r
7746 uint ea = EA_AX_IX_16();
\r
7748 m68ki_write_16(ea, res);
\r
7750 FLAG_N = NFLAG_16(res);
\r
7752 FLAG_V = VFLAG_CLEAR;
\r
7753 FLAG_C = CFLAG_CLEAR;
\r
7757 void m68k_op_move_16_ix_aw(void)
\r
7759 uint res = OPER_AW_16();
\r
7760 uint ea = EA_AX_IX_16();
\r
7762 m68ki_write_16(ea, res);
\r
7764 FLAG_N = NFLAG_16(res);
\r
7766 FLAG_V = VFLAG_CLEAR;
\r
7767 FLAG_C = CFLAG_CLEAR;
\r
7771 void m68k_op_move_16_ix_al(void)
\r
7773 uint res = OPER_AL_16();
\r
7774 uint ea = EA_AX_IX_16();
\r
7776 m68ki_write_16(ea, res);
\r
7778 FLAG_N = NFLAG_16(res);
\r
7780 FLAG_V = VFLAG_CLEAR;
\r
7781 FLAG_C = CFLAG_CLEAR;
\r
7785 void m68k_op_move_16_ix_pcdi(void)
\r
7787 uint res = OPER_PCDI_16();
\r
7788 uint ea = EA_AX_IX_16();
\r
7790 m68ki_write_16(ea, res);
\r
7792 FLAG_N = NFLAG_16(res);
\r
7794 FLAG_V = VFLAG_CLEAR;
\r
7795 FLAG_C = CFLAG_CLEAR;
\r
7799 void m68k_op_move_16_ix_pcix(void)
\r
7801 uint res = OPER_PCIX_16();
\r
7802 uint ea = EA_AX_IX_16();
\r
7804 m68ki_write_16(ea, res);
\r
7806 FLAG_N = NFLAG_16(res);
\r
7808 FLAG_V = VFLAG_CLEAR;
\r
7809 FLAG_C = CFLAG_CLEAR;
\r
7813 void m68k_op_move_16_ix_i(void)
\r
7815 uint res = OPER_I_16();
\r
7816 uint ea = EA_AX_IX_16();
\r
7818 m68ki_write_16(ea, res);
\r
7820 FLAG_N = NFLAG_16(res);
\r
7822 FLAG_V = VFLAG_CLEAR;
\r
7823 FLAG_C = CFLAG_CLEAR;
\r
7827 void m68k_op_move_16_aw_d(void)
\r
7829 uint res = MASK_OUT_ABOVE_16(DY);
\r
7830 uint ea = EA_AW_16();
\r
7832 m68ki_write_16(ea, res);
\r
7834 FLAG_N = NFLAG_16(res);
\r
7836 FLAG_V = VFLAG_CLEAR;
\r
7837 FLAG_C = CFLAG_CLEAR;
\r
7841 void m68k_op_move_16_aw_a(void)
\r
7843 uint res = MASK_OUT_ABOVE_16(AY);
\r
7844 uint ea = EA_AW_16();
\r
7846 m68ki_write_16(ea, res);
\r
7848 FLAG_N = NFLAG_16(res);
\r
7850 FLAG_V = VFLAG_CLEAR;
\r
7851 FLAG_C = CFLAG_CLEAR;
\r
7855 void m68k_op_move_16_aw_ai(void)
\r
7857 uint res = OPER_AY_AI_16();
\r
7858 uint ea = EA_AW_16();
\r
7860 m68ki_write_16(ea, res);
\r
7862 FLAG_N = NFLAG_16(res);
\r
7864 FLAG_V = VFLAG_CLEAR;
\r
7865 FLAG_C = CFLAG_CLEAR;
\r
7869 void m68k_op_move_16_aw_pi(void)
\r
7871 uint res = OPER_AY_PI_16();
\r
7872 uint ea = EA_AW_16();
\r
7874 m68ki_write_16(ea, res);
\r
7876 FLAG_N = NFLAG_16(res);
\r
7878 FLAG_V = VFLAG_CLEAR;
\r
7879 FLAG_C = CFLAG_CLEAR;
\r
7883 void m68k_op_move_16_aw_pd(void)
\r
7885 uint res = OPER_AY_PD_16();
\r
7886 uint ea = EA_AW_16();
\r
7888 m68ki_write_16(ea, res);
\r
7890 FLAG_N = NFLAG_16(res);
\r
7892 FLAG_V = VFLAG_CLEAR;
\r
7893 FLAG_C = CFLAG_CLEAR;
\r
7897 void m68k_op_move_16_aw_di(void)
\r
7899 uint res = OPER_AY_DI_16();
\r
7900 uint ea = EA_AW_16();
\r
7902 m68ki_write_16(ea, res);
\r
7904 FLAG_N = NFLAG_16(res);
\r
7906 FLAG_V = VFLAG_CLEAR;
\r
7907 FLAG_C = CFLAG_CLEAR;
\r
7911 void m68k_op_move_16_aw_ix(void)
\r
7913 uint res = OPER_AY_IX_16();
\r
7914 uint ea = EA_AW_16();
\r
7916 m68ki_write_16(ea, res);
\r
7918 FLAG_N = NFLAG_16(res);
\r
7920 FLAG_V = VFLAG_CLEAR;
\r
7921 FLAG_C = CFLAG_CLEAR;
\r
7925 void m68k_op_move_16_aw_aw(void)
\r
7927 uint res = OPER_AW_16();
\r
7928 uint ea = EA_AW_16();
\r
7930 m68ki_write_16(ea, res);
\r
7932 FLAG_N = NFLAG_16(res);
\r
7934 FLAG_V = VFLAG_CLEAR;
\r
7935 FLAG_C = CFLAG_CLEAR;
\r
7939 void m68k_op_move_16_aw_al(void)
\r
7941 uint res = OPER_AL_16();
\r
7942 uint ea = EA_AW_16();
\r
7944 m68ki_write_16(ea, res);
\r
7946 FLAG_N = NFLAG_16(res);
\r
7948 FLAG_V = VFLAG_CLEAR;
\r
7949 FLAG_C = CFLAG_CLEAR;
\r
7953 void m68k_op_move_16_aw_pcdi(void)
\r
7955 uint res = OPER_PCDI_16();
\r
7956 uint ea = EA_AW_16();
\r
7958 m68ki_write_16(ea, res);
\r
7960 FLAG_N = NFLAG_16(res);
\r
7962 FLAG_V = VFLAG_CLEAR;
\r
7963 FLAG_C = CFLAG_CLEAR;
\r
7967 void m68k_op_move_16_aw_pcix(void)
\r
7969 uint res = OPER_PCIX_16();
\r
7970 uint ea = EA_AW_16();
\r
7972 m68ki_write_16(ea, res);
\r
7974 FLAG_N = NFLAG_16(res);
\r
7976 FLAG_V = VFLAG_CLEAR;
\r
7977 FLAG_C = CFLAG_CLEAR;
\r
7981 void m68k_op_move_16_aw_i(void)
\r
7983 uint res = OPER_I_16();
\r
7984 uint ea = EA_AW_16();
\r
7986 m68ki_write_16(ea, res);
\r
7988 FLAG_N = NFLAG_16(res);
\r
7990 FLAG_V = VFLAG_CLEAR;
\r
7991 FLAG_C = CFLAG_CLEAR;
\r
7995 void m68k_op_move_16_al_d(void)
\r
7997 uint res = MASK_OUT_ABOVE_16(DY);
\r
7998 uint ea = EA_AL_16();
\r
8000 m68ki_write_16(ea, res);
\r
8002 FLAG_N = NFLAG_16(res);
\r
8004 FLAG_V = VFLAG_CLEAR;
\r
8005 FLAG_C = CFLAG_CLEAR;
\r
8009 void m68k_op_move_16_al_a(void)
\r
8011 uint res = MASK_OUT_ABOVE_16(AY);
\r
8012 uint ea = EA_AL_16();
\r
8014 m68ki_write_16(ea, res);
\r
8016 FLAG_N = NFLAG_16(res);
\r
8018 FLAG_V = VFLAG_CLEAR;
\r
8019 FLAG_C = CFLAG_CLEAR;
\r
8023 void m68k_op_move_16_al_ai(void)
\r
8025 uint res = OPER_AY_AI_16();
\r
8026 uint ea = EA_AL_16();
\r
8028 m68ki_write_16(ea, res);
\r
8030 FLAG_N = NFLAG_16(res);
\r
8032 FLAG_V = VFLAG_CLEAR;
\r
8033 FLAG_C = CFLAG_CLEAR;
\r
8037 void m68k_op_move_16_al_pi(void)
\r
8039 uint res = OPER_AY_PI_16();
\r
8040 uint ea = EA_AL_16();
\r
8042 m68ki_write_16(ea, res);
\r
8044 FLAG_N = NFLAG_16(res);
\r
8046 FLAG_V = VFLAG_CLEAR;
\r
8047 FLAG_C = CFLAG_CLEAR;
\r
8051 void m68k_op_move_16_al_pd(void)
\r
8053 uint res = OPER_AY_PD_16();
\r
8054 uint ea = EA_AL_16();
\r
8056 m68ki_write_16(ea, res);
\r
8058 FLAG_N = NFLAG_16(res);
\r
8060 FLAG_V = VFLAG_CLEAR;
\r
8061 FLAG_C = CFLAG_CLEAR;
\r
8065 void m68k_op_move_16_al_di(void)
\r
8067 uint res = OPER_AY_DI_16();
\r
8068 uint ea = EA_AL_16();
\r
8070 m68ki_write_16(ea, res);
\r
8072 FLAG_N = NFLAG_16(res);
\r
8074 FLAG_V = VFLAG_CLEAR;
\r
8075 FLAG_C = CFLAG_CLEAR;
\r
8079 void m68k_op_move_16_al_ix(void)
\r
8081 uint res = OPER_AY_IX_16();
\r
8082 uint ea = EA_AL_16();
\r
8084 m68ki_write_16(ea, res);
\r
8086 FLAG_N = NFLAG_16(res);
\r
8088 FLAG_V = VFLAG_CLEAR;
\r
8089 FLAG_C = CFLAG_CLEAR;
\r
8093 void m68k_op_move_16_al_aw(void)
\r
8095 uint res = OPER_AW_16();
\r
8096 uint ea = EA_AL_16();
\r
8098 m68ki_write_16(ea, res);
\r
8100 FLAG_N = NFLAG_16(res);
\r
8102 FLAG_V = VFLAG_CLEAR;
\r
8103 FLAG_C = CFLAG_CLEAR;
\r
8107 void m68k_op_move_16_al_al(void)
\r
8109 uint res = OPER_AL_16();
\r
8110 uint ea = EA_AL_16();
\r
8112 m68ki_write_16(ea, res);
\r
8114 FLAG_N = NFLAG_16(res);
\r
8116 FLAG_V = VFLAG_CLEAR;
\r
8117 FLAG_C = CFLAG_CLEAR;
\r
8121 void m68k_op_move_16_al_pcdi(void)
\r
8123 uint res = OPER_PCDI_16();
\r
8124 uint ea = EA_AL_16();
\r
8126 m68ki_write_16(ea, res);
\r
8128 FLAG_N = NFLAG_16(res);
\r
8130 FLAG_V = VFLAG_CLEAR;
\r
8131 FLAG_C = CFLAG_CLEAR;
\r
8135 void m68k_op_move_16_al_pcix(void)
\r
8137 uint res = OPER_PCIX_16();
\r
8138 uint ea = EA_AL_16();
\r
8140 m68ki_write_16(ea, res);
\r
8142 FLAG_N = NFLAG_16(res);
\r
8144 FLAG_V = VFLAG_CLEAR;
\r
8145 FLAG_C = CFLAG_CLEAR;
\r
8149 void m68k_op_move_16_al_i(void)
\r
8151 uint res = OPER_I_16();
\r
8152 uint ea = EA_AL_16();
\r
8154 m68ki_write_16(ea, res);
\r
8156 FLAG_N = NFLAG_16(res);
\r
8158 FLAG_V = VFLAG_CLEAR;
\r
8159 FLAG_C = CFLAG_CLEAR;
\r
8163 void m68k_op_move_32_d_d(void)
\r
8166 uint* r_dst = &DX;
\r
8170 FLAG_N = NFLAG_32(res);
\r
8172 FLAG_V = VFLAG_CLEAR;
\r
8173 FLAG_C = CFLAG_CLEAR;
\r
8177 void m68k_op_move_32_d_a(void)
\r
8180 uint* r_dst = &DX;
\r
8184 FLAG_N = NFLAG_32(res);
\r
8186 FLAG_V = VFLAG_CLEAR;
\r
8187 FLAG_C = CFLAG_CLEAR;
\r
8191 void m68k_op_move_32_d_ai(void)
\r
8193 uint res = OPER_AY_AI_32();
\r
8194 uint* r_dst = &DX;
\r
8198 FLAG_N = NFLAG_32(res);
\r
8200 FLAG_V = VFLAG_CLEAR;
\r
8201 FLAG_C = CFLAG_CLEAR;
\r
8205 void m68k_op_move_32_d_pi(void)
\r
8207 uint res = OPER_AY_PI_32();
\r
8208 uint* r_dst = &DX;
\r
8212 FLAG_N = NFLAG_32(res);
\r
8214 FLAG_V = VFLAG_CLEAR;
\r
8215 FLAG_C = CFLAG_CLEAR;
\r
8219 void m68k_op_move_32_d_pd(void)
\r
8221 uint res = OPER_AY_PD_32();
\r
8222 uint* r_dst = &DX;
\r
8226 FLAG_N = NFLAG_32(res);
\r
8228 FLAG_V = VFLAG_CLEAR;
\r
8229 FLAG_C = CFLAG_CLEAR;
\r
8233 void m68k_op_move_32_d_di(void)
\r
8235 uint res = OPER_AY_DI_32();
\r
8236 uint* r_dst = &DX;
\r
8240 FLAG_N = NFLAG_32(res);
\r
8242 FLAG_V = VFLAG_CLEAR;
\r
8243 FLAG_C = CFLAG_CLEAR;
\r
8247 void m68k_op_move_32_d_ix(void)
\r
8249 uint res = OPER_AY_IX_32();
\r
8250 uint* r_dst = &DX;
\r
8254 FLAG_N = NFLAG_32(res);
\r
8256 FLAG_V = VFLAG_CLEAR;
\r
8257 FLAG_C = CFLAG_CLEAR;
\r
8261 void m68k_op_move_32_d_aw(void)
\r
8263 uint res = OPER_AW_32();
\r
8264 uint* r_dst = &DX;
\r
8268 FLAG_N = NFLAG_32(res);
\r
8270 FLAG_V = VFLAG_CLEAR;
\r
8271 FLAG_C = CFLAG_CLEAR;
\r
8275 void m68k_op_move_32_d_al(void)
\r
8277 uint res = OPER_AL_32();
\r
8278 uint* r_dst = &DX;
\r
8282 FLAG_N = NFLAG_32(res);
\r
8284 FLAG_V = VFLAG_CLEAR;
\r
8285 FLAG_C = CFLAG_CLEAR;
\r
8289 void m68k_op_move_32_d_pcdi(void)
\r
8291 uint res = OPER_PCDI_32();
\r
8292 uint* r_dst = &DX;
\r
8296 FLAG_N = NFLAG_32(res);
\r
8298 FLAG_V = VFLAG_CLEAR;
\r
8299 FLAG_C = CFLAG_CLEAR;
\r
8303 void m68k_op_move_32_d_pcix(void)
\r
8305 uint res = OPER_PCIX_32();
\r
8306 uint* r_dst = &DX;
\r
8310 FLAG_N = NFLAG_32(res);
\r
8312 FLAG_V = VFLAG_CLEAR;
\r
8313 FLAG_C = CFLAG_CLEAR;
\r
8317 void m68k_op_move_32_d_i(void)
\r
8319 uint res = OPER_I_32();
\r
8320 uint* r_dst = &DX;
\r
8324 FLAG_N = NFLAG_32(res);
\r
8326 FLAG_V = VFLAG_CLEAR;
\r
8327 FLAG_C = CFLAG_CLEAR;
\r
8331 void m68k_op_move_32_ai_d(void)
\r
8334 uint ea = EA_AX_AI_32();
\r
8336 m68ki_write_32(ea, res);
\r
8338 FLAG_N = NFLAG_32(res);
\r
8340 FLAG_V = VFLAG_CLEAR;
\r
8341 FLAG_C = CFLAG_CLEAR;
\r
8345 void m68k_op_move_32_ai_a(void)
\r
8348 uint ea = EA_AX_AI_32();
\r
8350 m68ki_write_32(ea, res);
\r
8352 FLAG_N = NFLAG_32(res);
\r
8354 FLAG_V = VFLAG_CLEAR;
\r
8355 FLAG_C = CFLAG_CLEAR;
\r
8359 void m68k_op_move_32_ai_ai(void)
\r
8361 uint res = OPER_AY_AI_32();
\r
8362 uint ea = EA_AX_AI_32();
\r
8364 m68ki_write_32(ea, res);
\r
8366 FLAG_N = NFLAG_32(res);
\r
8368 FLAG_V = VFLAG_CLEAR;
\r
8369 FLAG_C = CFLAG_CLEAR;
\r
8373 void m68k_op_move_32_ai_pi(void)
\r
8375 uint res = OPER_AY_PI_32();
\r
8376 uint ea = EA_AX_AI_32();
\r
8378 m68ki_write_32(ea, res);
\r
8380 FLAG_N = NFLAG_32(res);
\r
8382 FLAG_V = VFLAG_CLEAR;
\r
8383 FLAG_C = CFLAG_CLEAR;
\r
8387 void m68k_op_move_32_ai_pd(void)
\r
8389 uint res = OPER_AY_PD_32();
\r
8390 uint ea = EA_AX_AI_32();
\r
8392 m68ki_write_32(ea, res);
\r
8394 FLAG_N = NFLAG_32(res);
\r
8396 FLAG_V = VFLAG_CLEAR;
\r
8397 FLAG_C = CFLAG_CLEAR;
\r
8401 void m68k_op_move_32_ai_di(void)
\r
8403 uint res = OPER_AY_DI_32();
\r
8404 uint ea = EA_AX_AI_32();
\r
8406 m68ki_write_32(ea, res);
\r
8408 FLAG_N = NFLAG_32(res);
\r
8410 FLAG_V = VFLAG_CLEAR;
\r
8411 FLAG_C = CFLAG_CLEAR;
\r
8415 void m68k_op_move_32_ai_ix(void)
\r
8417 uint res = OPER_AY_IX_32();
\r
8418 uint ea = EA_AX_AI_32();
\r
8420 m68ki_write_32(ea, res);
\r
8422 FLAG_N = NFLAG_32(res);
\r
8424 FLAG_V = VFLAG_CLEAR;
\r
8425 FLAG_C = CFLAG_CLEAR;
\r
8429 void m68k_op_move_32_ai_aw(void)
\r
8431 uint res = OPER_AW_32();
\r
8432 uint ea = EA_AX_AI_32();
\r
8434 m68ki_write_32(ea, res);
\r
8436 FLAG_N = NFLAG_32(res);
\r
8438 FLAG_V = VFLAG_CLEAR;
\r
8439 FLAG_C = CFLAG_CLEAR;
\r
8443 void m68k_op_move_32_ai_al(void)
\r
8445 uint res = OPER_AL_32();
\r
8446 uint ea = EA_AX_AI_32();
\r
8448 m68ki_write_32(ea, res);
\r
8450 FLAG_N = NFLAG_32(res);
\r
8452 FLAG_V = VFLAG_CLEAR;
\r
8453 FLAG_C = CFLAG_CLEAR;
\r
8457 void m68k_op_move_32_ai_pcdi(void)
\r
8459 uint res = OPER_PCDI_32();
\r
8460 uint ea = EA_AX_AI_32();
\r
8462 m68ki_write_32(ea, res);
\r
8464 FLAG_N = NFLAG_32(res);
\r
8466 FLAG_V = VFLAG_CLEAR;
\r
8467 FLAG_C = CFLAG_CLEAR;
\r
8471 void m68k_op_move_32_ai_pcix(void)
\r
8473 uint res = OPER_PCIX_32();
\r
8474 uint ea = EA_AX_AI_32();
\r
8476 m68ki_write_32(ea, res);
\r
8478 FLAG_N = NFLAG_32(res);
\r
8480 FLAG_V = VFLAG_CLEAR;
\r
8481 FLAG_C = CFLAG_CLEAR;
\r
8485 void m68k_op_move_32_ai_i(void)
\r
8487 uint res = OPER_I_32();
\r
8488 uint ea = EA_AX_AI_32();
\r
8490 m68ki_write_32(ea, res);
\r
8492 FLAG_N = NFLAG_32(res);
\r
8494 FLAG_V = VFLAG_CLEAR;
\r
8495 FLAG_C = CFLAG_CLEAR;
\r
8499 void m68k_op_move_32_pi_d(void)
\r
8502 uint ea = EA_AX_PI_32();
\r
8504 m68ki_write_32(ea, res);
\r
8506 FLAG_N = NFLAG_32(res);
\r
8508 FLAG_V = VFLAG_CLEAR;
\r
8509 FLAG_C = CFLAG_CLEAR;
\r
8513 void m68k_op_move_32_pi_a(void)
\r
8516 uint ea = EA_AX_PI_32();
\r
8518 m68ki_write_32(ea, res);
\r
8520 FLAG_N = NFLAG_32(res);
\r
8522 FLAG_V = VFLAG_CLEAR;
\r
8523 FLAG_C = CFLAG_CLEAR;
\r
8527 void m68k_op_move_32_pi_ai(void)
\r
8529 uint res = OPER_AY_AI_32();
\r
8530 uint ea = EA_AX_PI_32();
\r
8532 m68ki_write_32(ea, res);
\r
8534 FLAG_N = NFLAG_32(res);
\r
8536 FLAG_V = VFLAG_CLEAR;
\r
8537 FLAG_C = CFLAG_CLEAR;
\r
8541 void m68k_op_move_32_pi_pi(void)
\r
8543 uint res = OPER_AY_PI_32();
\r
8544 uint ea = EA_AX_PI_32();
\r
8546 m68ki_write_32(ea, res);
\r
8548 FLAG_N = NFLAG_32(res);
\r
8550 FLAG_V = VFLAG_CLEAR;
\r
8551 FLAG_C = CFLAG_CLEAR;
\r
8555 void m68k_op_move_32_pi_pd(void)
\r
8557 uint res = OPER_AY_PD_32();
\r
8558 uint ea = EA_AX_PI_32();
\r
8560 m68ki_write_32(ea, res);
\r
8562 FLAG_N = NFLAG_32(res);
\r
8564 FLAG_V = VFLAG_CLEAR;
\r
8565 FLAG_C = CFLAG_CLEAR;
\r
8569 void m68k_op_move_32_pi_di(void)
\r
8571 uint res = OPER_AY_DI_32();
\r
8572 uint ea = EA_AX_PI_32();
\r
8574 m68ki_write_32(ea, res);
\r
8576 FLAG_N = NFLAG_32(res);
\r
8578 FLAG_V = VFLAG_CLEAR;
\r
8579 FLAG_C = CFLAG_CLEAR;
\r
8583 void m68k_op_move_32_pi_ix(void)
\r
8585 uint res = OPER_AY_IX_32();
\r
8586 uint ea = EA_AX_PI_32();
\r
8588 m68ki_write_32(ea, res);
\r
8590 FLAG_N = NFLAG_32(res);
\r
8592 FLAG_V = VFLAG_CLEAR;
\r
8593 FLAG_C = CFLAG_CLEAR;
\r
8597 void m68k_op_move_32_pi_aw(void)
\r
8599 uint res = OPER_AW_32();
\r
8600 uint ea = EA_AX_PI_32();
\r
8602 m68ki_write_32(ea, res);
\r
8604 FLAG_N = NFLAG_32(res);
\r
8606 FLAG_V = VFLAG_CLEAR;
\r
8607 FLAG_C = CFLAG_CLEAR;
\r
8611 void m68k_op_move_32_pi_al(void)
\r
8613 uint res = OPER_AL_32();
\r
8614 uint ea = EA_AX_PI_32();
\r
8616 m68ki_write_32(ea, res);
\r
8618 FLAG_N = NFLAG_32(res);
\r
8620 FLAG_V = VFLAG_CLEAR;
\r
8621 FLAG_C = CFLAG_CLEAR;
\r
8625 void m68k_op_move_32_pi_pcdi(void)
\r
8627 uint res = OPER_PCDI_32();
\r
8628 uint ea = EA_AX_PI_32();
\r
8630 m68ki_write_32(ea, res);
\r
8632 FLAG_N = NFLAG_32(res);
\r
8634 FLAG_V = VFLAG_CLEAR;
\r
8635 FLAG_C = CFLAG_CLEAR;
\r
8639 void m68k_op_move_32_pi_pcix(void)
\r
8641 uint res = OPER_PCIX_32();
\r
8642 uint ea = EA_AX_PI_32();
\r
8644 m68ki_write_32(ea, res);
\r
8646 FLAG_N = NFLAG_32(res);
\r
8648 FLAG_V = VFLAG_CLEAR;
\r
8649 FLAG_C = CFLAG_CLEAR;
\r
8653 void m68k_op_move_32_pi_i(void)
\r
8655 uint res = OPER_I_32();
\r
8656 uint ea = EA_AX_PI_32();
\r
8658 m68ki_write_32(ea, res);
\r
8660 FLAG_N = NFLAG_32(res);
\r
8662 FLAG_V = VFLAG_CLEAR;
\r
8663 FLAG_C = CFLAG_CLEAR;
\r
8667 void m68k_op_move_32_pd_d(void)
\r
8670 uint ea = EA_AX_PD_32();
\r
8672 m68ki_write_32(ea, res);
\r
8674 FLAG_N = NFLAG_32(res);
\r
8676 FLAG_V = VFLAG_CLEAR;
\r
8677 FLAG_C = CFLAG_CLEAR;
\r
8681 void m68k_op_move_32_pd_a(void)
\r
8684 uint ea = EA_AX_PD_32();
\r
8686 m68ki_write_32(ea, res);
\r
8688 FLAG_N = NFLAG_32(res);
\r
8690 FLAG_V = VFLAG_CLEAR;
\r
8691 FLAG_C = CFLAG_CLEAR;
\r
8695 void m68k_op_move_32_pd_ai(void)
\r
8697 uint res = OPER_AY_AI_32();
\r
8698 uint ea = EA_AX_PD_32();
\r
8700 m68ki_write_32(ea, res);
\r
8702 FLAG_N = NFLAG_32(res);
\r
8704 FLAG_V = VFLAG_CLEAR;
\r
8705 FLAG_C = CFLAG_CLEAR;
\r
8709 void m68k_op_move_32_pd_pi(void)
\r
8711 uint res = OPER_AY_PI_32();
\r
8712 uint ea = EA_AX_PD_32();
\r
8714 m68ki_write_32(ea, res);
\r
8716 FLAG_N = NFLAG_32(res);
\r
8718 FLAG_V = VFLAG_CLEAR;
\r
8719 FLAG_C = CFLAG_CLEAR;
\r
8723 void m68k_op_move_32_pd_pd(void)
\r
8725 uint res = OPER_AY_PD_32();
\r
8726 uint ea = EA_AX_PD_32();
\r
8728 m68ki_write_32(ea, res);
\r
8730 FLAG_N = NFLAG_32(res);
\r
8732 FLAG_V = VFLAG_CLEAR;
\r
8733 FLAG_C = CFLAG_CLEAR;
\r
8737 void m68k_op_move_32_pd_di(void)
\r
8739 uint res = OPER_AY_DI_32();
\r
8740 uint ea = EA_AX_PD_32();
\r
8742 m68ki_write_32(ea, res);
\r
8744 FLAG_N = NFLAG_32(res);
\r
8746 FLAG_V = VFLAG_CLEAR;
\r
8747 FLAG_C = CFLAG_CLEAR;
\r
8751 void m68k_op_move_32_pd_ix(void)
\r
8753 uint res = OPER_AY_IX_32();
\r
8754 uint ea = EA_AX_PD_32();
\r
8756 m68ki_write_32(ea, res);
\r
8758 FLAG_N = NFLAG_32(res);
\r
8760 FLAG_V = VFLAG_CLEAR;
\r
8761 FLAG_C = CFLAG_CLEAR;
\r
8765 void m68k_op_move_32_pd_aw(void)
\r
8767 uint res = OPER_AW_32();
\r
8768 uint ea = EA_AX_PD_32();
\r
8770 m68ki_write_32(ea, res);
\r
8772 FLAG_N = NFLAG_32(res);
\r
8774 FLAG_V = VFLAG_CLEAR;
\r
8775 FLAG_C = CFLAG_CLEAR;
\r
8779 void m68k_op_move_32_pd_al(void)
\r
8781 uint res = OPER_AL_32();
\r
8782 uint ea = EA_AX_PD_32();
\r
8784 m68ki_write_32(ea, res);
\r
8786 FLAG_N = NFLAG_32(res);
\r
8788 FLAG_V = VFLAG_CLEAR;
\r
8789 FLAG_C = CFLAG_CLEAR;
\r
8793 void m68k_op_move_32_pd_pcdi(void)
\r
8795 uint res = OPER_PCDI_32();
\r
8796 uint ea = EA_AX_PD_32();
\r
8798 m68ki_write_32(ea, res);
\r
8800 FLAG_N = NFLAG_32(res);
\r
8802 FLAG_V = VFLAG_CLEAR;
\r
8803 FLAG_C = CFLAG_CLEAR;
\r
8807 void m68k_op_move_32_pd_pcix(void)
\r
8809 uint res = OPER_PCIX_32();
\r
8810 uint ea = EA_AX_PD_32();
\r
8812 m68ki_write_32(ea, res);
\r
8814 FLAG_N = NFLAG_32(res);
\r
8816 FLAG_V = VFLAG_CLEAR;
\r
8817 FLAG_C = CFLAG_CLEAR;
\r
8821 void m68k_op_move_32_pd_i(void)
\r
8823 uint res = OPER_I_32();
\r
8824 uint ea = EA_AX_PD_32();
\r
8826 m68ki_write_32(ea, res);
\r
8828 FLAG_N = NFLAG_32(res);
\r
8830 FLAG_V = VFLAG_CLEAR;
\r
8831 FLAG_C = CFLAG_CLEAR;
\r
8835 void m68k_op_move_32_di_d(void)
\r
8838 uint ea = EA_AX_DI_32();
\r
8840 m68ki_write_32(ea, res);
\r
8842 FLAG_N = NFLAG_32(res);
\r
8844 FLAG_V = VFLAG_CLEAR;
\r
8845 FLAG_C = CFLAG_CLEAR;
\r
8849 void m68k_op_move_32_di_a(void)
\r
8852 uint ea = EA_AX_DI_32();
\r
8854 m68ki_write_32(ea, res);
\r
8856 FLAG_N = NFLAG_32(res);
\r
8858 FLAG_V = VFLAG_CLEAR;
\r
8859 FLAG_C = CFLAG_CLEAR;
\r
8863 void m68k_op_move_32_di_ai(void)
\r
8865 uint res = OPER_AY_AI_32();
\r
8866 uint ea = EA_AX_DI_32();
\r
8868 m68ki_write_32(ea, res);
\r
8870 FLAG_N = NFLAG_32(res);
\r
8872 FLAG_V = VFLAG_CLEAR;
\r
8873 FLAG_C = CFLAG_CLEAR;
\r
8877 void m68k_op_move_32_di_pi(void)
\r
8879 uint res = OPER_AY_PI_32();
\r
8880 uint ea = EA_AX_DI_32();
\r
8882 m68ki_write_32(ea, res);
\r
8884 FLAG_N = NFLAG_32(res);
\r
8886 FLAG_V = VFLAG_CLEAR;
\r
8887 FLAG_C = CFLAG_CLEAR;
\r
8891 void m68k_op_move_32_di_pd(void)
\r
8893 uint res = OPER_AY_PD_32();
\r
8894 uint ea = EA_AX_DI_32();
\r
8896 m68ki_write_32(ea, res);
\r
8898 FLAG_N = NFLAG_32(res);
\r
8900 FLAG_V = VFLAG_CLEAR;
\r
8901 FLAG_C = CFLAG_CLEAR;
\r
8905 void m68k_op_move_32_di_di(void)
\r
8907 uint res = OPER_AY_DI_32();
\r
8908 uint ea = EA_AX_DI_32();
\r
8910 m68ki_write_32(ea, res);
\r
8912 FLAG_N = NFLAG_32(res);
\r
8914 FLAG_V = VFLAG_CLEAR;
\r
8915 FLAG_C = CFLAG_CLEAR;
\r
8919 void m68k_op_move_32_di_ix(void)
\r
8921 uint res = OPER_AY_IX_32();
\r
8922 uint ea = EA_AX_DI_32();
\r
8924 m68ki_write_32(ea, res);
\r
8926 FLAG_N = NFLAG_32(res);
\r
8928 FLAG_V = VFLAG_CLEAR;
\r
8929 FLAG_C = CFLAG_CLEAR;
\r
8933 void m68k_op_move_32_di_aw(void)
\r
8935 uint res = OPER_AW_32();
\r
8936 uint ea = EA_AX_DI_32();
\r
8938 m68ki_write_32(ea, res);
\r
8940 FLAG_N = NFLAG_32(res);
\r
8942 FLAG_V = VFLAG_CLEAR;
\r
8943 FLAG_C = CFLAG_CLEAR;
\r
8947 void m68k_op_move_32_di_al(void)
\r
8949 uint res = OPER_AL_32();
\r
8950 uint ea = EA_AX_DI_32();
\r
8952 m68ki_write_32(ea, res);
\r
8954 FLAG_N = NFLAG_32(res);
\r
8956 FLAG_V = VFLAG_CLEAR;
\r
8957 FLAG_C = CFLAG_CLEAR;
\r
8961 void m68k_op_move_32_di_pcdi(void)
\r
8963 uint res = OPER_PCDI_32();
\r
8964 uint ea = EA_AX_DI_32();
\r
8966 m68ki_write_32(ea, res);
\r
8968 FLAG_N = NFLAG_32(res);
\r
8970 FLAG_V = VFLAG_CLEAR;
\r
8971 FLAG_C = CFLAG_CLEAR;
\r
8975 void m68k_op_move_32_di_pcix(void)
\r
8977 uint res = OPER_PCIX_32();
\r
8978 uint ea = EA_AX_DI_32();
\r
8980 m68ki_write_32(ea, res);
\r
8982 FLAG_N = NFLAG_32(res);
\r
8984 FLAG_V = VFLAG_CLEAR;
\r
8985 FLAG_C = CFLAG_CLEAR;
\r
8989 void m68k_op_move_32_di_i(void)
\r
8991 uint res = OPER_I_32();
\r
8992 uint ea = EA_AX_DI_32();
\r
8994 m68ki_write_32(ea, res);
\r
8996 FLAG_N = NFLAG_32(res);
\r
8998 FLAG_V = VFLAG_CLEAR;
\r
8999 FLAG_C = CFLAG_CLEAR;
\r
9003 void m68k_op_move_32_ix_d(void)
\r
9006 uint ea = EA_AX_IX_32();
\r
9008 m68ki_write_32(ea, res);
\r
9010 FLAG_N = NFLAG_32(res);
\r
9012 FLAG_V = VFLAG_CLEAR;
\r
9013 FLAG_C = CFLAG_CLEAR;
\r
9017 void m68k_op_move_32_ix_a(void)
\r
9020 uint ea = EA_AX_IX_32();
\r
9022 m68ki_write_32(ea, res);
\r
9024 FLAG_N = NFLAG_32(res);
\r
9026 FLAG_V = VFLAG_CLEAR;
\r
9027 FLAG_C = CFLAG_CLEAR;
\r
9031 void m68k_op_move_32_ix_ai(void)
\r
9033 uint res = OPER_AY_AI_32();
\r
9034 uint ea = EA_AX_IX_32();
\r
9036 m68ki_write_32(ea, res);
\r
9038 FLAG_N = NFLAG_32(res);
\r
9040 FLAG_V = VFLAG_CLEAR;
\r
9041 FLAG_C = CFLAG_CLEAR;
\r
9045 void m68k_op_move_32_ix_pi(void)
\r
9047 uint res = OPER_AY_PI_32();
\r
9048 uint ea = EA_AX_IX_32();
\r
9050 m68ki_write_32(ea, res);
\r
9052 FLAG_N = NFLAG_32(res);
\r
9054 FLAG_V = VFLAG_CLEAR;
\r
9055 FLAG_C = CFLAG_CLEAR;
\r
9059 void m68k_op_move_32_ix_pd(void)
\r
9061 uint res = OPER_AY_PD_32();
\r
9062 uint ea = EA_AX_IX_32();
\r
9064 m68ki_write_32(ea, res);
\r
9066 FLAG_N = NFLAG_32(res);
\r
9068 FLAG_V = VFLAG_CLEAR;
\r
9069 FLAG_C = CFLAG_CLEAR;
\r
9073 void m68k_op_move_32_ix_di(void)
\r
9075 uint res = OPER_AY_DI_32();
\r
9076 uint ea = EA_AX_IX_32();
\r
9078 m68ki_write_32(ea, res);
\r
9080 FLAG_N = NFLAG_32(res);
\r
9082 FLAG_V = VFLAG_CLEAR;
\r
9083 FLAG_C = CFLAG_CLEAR;
\r
9087 void m68k_op_move_32_ix_ix(void)
\r
9089 uint res = OPER_AY_IX_32();
\r
9090 uint ea = EA_AX_IX_32();
\r
9092 m68ki_write_32(ea, res);
\r
9094 FLAG_N = NFLAG_32(res);
\r
9096 FLAG_V = VFLAG_CLEAR;
\r
9097 FLAG_C = CFLAG_CLEAR;
\r
9101 void m68k_op_move_32_ix_aw(void)
\r
9103 uint res = OPER_AW_32();
\r
9104 uint ea = EA_AX_IX_32();
\r
9106 m68ki_write_32(ea, res);
\r
9108 FLAG_N = NFLAG_32(res);
\r
9110 FLAG_V = VFLAG_CLEAR;
\r
9111 FLAG_C = CFLAG_CLEAR;
\r
9115 void m68k_op_move_32_ix_al(void)
\r
9117 uint res = OPER_AL_32();
\r
9118 uint ea = EA_AX_IX_32();
\r
9120 m68ki_write_32(ea, res);
\r
9122 FLAG_N = NFLAG_32(res);
\r
9124 FLAG_V = VFLAG_CLEAR;
\r
9125 FLAG_C = CFLAG_CLEAR;
\r
9129 void m68k_op_move_32_ix_pcdi(void)
\r
9131 uint res = OPER_PCDI_32();
\r
9132 uint ea = EA_AX_IX_32();
\r
9134 m68ki_write_32(ea, res);
\r
9136 FLAG_N = NFLAG_32(res);
\r
9138 FLAG_V = VFLAG_CLEAR;
\r
9139 FLAG_C = CFLAG_CLEAR;
\r
9143 void m68k_op_move_32_ix_pcix(void)
\r
9145 uint res = OPER_PCIX_32();
\r
9146 uint ea = EA_AX_IX_32();
\r
9148 m68ki_write_32(ea, res);
\r
9150 FLAG_N = NFLAG_32(res);
\r
9152 FLAG_V = VFLAG_CLEAR;
\r
9153 FLAG_C = CFLAG_CLEAR;
\r
9157 void m68k_op_move_32_ix_i(void)
\r
9159 uint res = OPER_I_32();
\r
9160 uint ea = EA_AX_IX_32();
\r
9162 m68ki_write_32(ea, res);
\r
9164 FLAG_N = NFLAG_32(res);
\r
9166 FLAG_V = VFLAG_CLEAR;
\r
9167 FLAG_C = CFLAG_CLEAR;
\r
9171 void m68k_op_move_32_aw_d(void)
\r
9174 uint ea = EA_AW_32();
\r
9176 m68ki_write_32(ea, res);
\r
9178 FLAG_N = NFLAG_32(res);
\r
9180 FLAG_V = VFLAG_CLEAR;
\r
9181 FLAG_C = CFLAG_CLEAR;
\r
9185 void m68k_op_move_32_aw_a(void)
\r
9188 uint ea = EA_AW_32();
\r
9190 m68ki_write_32(ea, res);
\r
9192 FLAG_N = NFLAG_32(res);
\r
9194 FLAG_V = VFLAG_CLEAR;
\r
9195 FLAG_C = CFLAG_CLEAR;
\r
9199 void m68k_op_move_32_aw_ai(void)
\r
9201 uint res = OPER_AY_AI_32();
\r
9202 uint ea = EA_AW_32();
\r
9204 m68ki_write_32(ea, res);
\r
9206 FLAG_N = NFLAG_32(res);
\r
9208 FLAG_V = VFLAG_CLEAR;
\r
9209 FLAG_C = CFLAG_CLEAR;
\r
9213 void m68k_op_move_32_aw_pi(void)
\r
9215 uint res = OPER_AY_PI_32();
\r
9216 uint ea = EA_AW_32();
\r
9218 m68ki_write_32(ea, res);
\r
9220 FLAG_N = NFLAG_32(res);
\r
9222 FLAG_V = VFLAG_CLEAR;
\r
9223 FLAG_C = CFLAG_CLEAR;
\r
9227 void m68k_op_move_32_aw_pd(void)
\r
9229 uint res = OPER_AY_PD_32();
\r
9230 uint ea = EA_AW_32();
\r
9232 m68ki_write_32(ea, res);
\r
9234 FLAG_N = NFLAG_32(res);
\r
9236 FLAG_V = VFLAG_CLEAR;
\r
9237 FLAG_C = CFLAG_CLEAR;
\r
9241 void m68k_op_move_32_aw_di(void)
\r
9243 uint res = OPER_AY_DI_32();
\r
9244 uint ea = EA_AW_32();
\r
9246 m68ki_write_32(ea, res);
\r
9248 FLAG_N = NFLAG_32(res);
\r
9250 FLAG_V = VFLAG_CLEAR;
\r
9251 FLAG_C = CFLAG_CLEAR;
\r
9255 void m68k_op_move_32_aw_ix(void)
\r
9257 uint res = OPER_AY_IX_32();
\r
9258 uint ea = EA_AW_32();
\r
9260 m68ki_write_32(ea, res);
\r
9262 FLAG_N = NFLAG_32(res);
\r
9264 FLAG_V = VFLAG_CLEAR;
\r
9265 FLAG_C = CFLAG_CLEAR;
\r
9269 void m68k_op_move_32_aw_aw(void)
\r
9271 uint res = OPER_AW_32();
\r
9272 uint ea = EA_AW_32();
\r
9274 m68ki_write_32(ea, res);
\r
9276 FLAG_N = NFLAG_32(res);
\r
9278 FLAG_V = VFLAG_CLEAR;
\r
9279 FLAG_C = CFLAG_CLEAR;
\r
9283 void m68k_op_move_32_aw_al(void)
\r
9285 uint res = OPER_AL_32();
\r
9286 uint ea = EA_AW_32();
\r
9288 m68ki_write_32(ea, res);
\r
9290 FLAG_N = NFLAG_32(res);
\r
9292 FLAG_V = VFLAG_CLEAR;
\r
9293 FLAG_C = CFLAG_CLEAR;
\r
9297 void m68k_op_move_32_aw_pcdi(void)
\r
9299 uint res = OPER_PCDI_32();
\r
9300 uint ea = EA_AW_32();
\r
9302 m68ki_write_32(ea, res);
\r
9304 FLAG_N = NFLAG_32(res);
\r
9306 FLAG_V = VFLAG_CLEAR;
\r
9307 FLAG_C = CFLAG_CLEAR;
\r
9311 void m68k_op_move_32_aw_pcix(void)
\r
9313 uint res = OPER_PCIX_32();
\r
9314 uint ea = EA_AW_32();
\r
9316 m68ki_write_32(ea, res);
\r
9318 FLAG_N = NFLAG_32(res);
\r
9320 FLAG_V = VFLAG_CLEAR;
\r
9321 FLAG_C = CFLAG_CLEAR;
\r
9325 void m68k_op_move_32_aw_i(void)
\r
9327 uint res = OPER_I_32();
\r
9328 uint ea = EA_AW_32();
\r
9330 m68ki_write_32(ea, res);
\r
9332 FLAG_N = NFLAG_32(res);
\r
9334 FLAG_V = VFLAG_CLEAR;
\r
9335 FLAG_C = CFLAG_CLEAR;
\r
9339 void m68k_op_move_32_al_d(void)
\r
9342 uint ea = EA_AL_32();
\r
9344 m68ki_write_32(ea, res);
\r
9346 FLAG_N = NFLAG_32(res);
\r
9348 FLAG_V = VFLAG_CLEAR;
\r
9349 FLAG_C = CFLAG_CLEAR;
\r
9353 void m68k_op_move_32_al_a(void)
\r
9356 uint ea = EA_AL_32();
\r
9358 m68ki_write_32(ea, res);
\r
9360 FLAG_N = NFLAG_32(res);
\r
9362 FLAG_V = VFLAG_CLEAR;
\r
9363 FLAG_C = CFLAG_CLEAR;
\r
9367 void m68k_op_move_32_al_ai(void)
\r
9369 uint res = OPER_AY_AI_32();
\r
9370 uint ea = EA_AL_32();
\r
9372 m68ki_write_32(ea, res);
\r
9374 FLAG_N = NFLAG_32(res);
\r
9376 FLAG_V = VFLAG_CLEAR;
\r
9377 FLAG_C = CFLAG_CLEAR;
\r
9381 void m68k_op_move_32_al_pi(void)
\r
9383 uint res = OPER_AY_PI_32();
\r
9384 uint ea = EA_AL_32();
\r
9386 m68ki_write_32(ea, res);
\r
9388 FLAG_N = NFLAG_32(res);
\r
9390 FLAG_V = VFLAG_CLEAR;
\r
9391 FLAG_C = CFLAG_CLEAR;
\r
9395 void m68k_op_move_32_al_pd(void)
\r
9397 uint res = OPER_AY_PD_32();
\r
9398 uint ea = EA_AL_32();
\r
9400 m68ki_write_32(ea, res);
\r
9402 FLAG_N = NFLAG_32(res);
\r
9404 FLAG_V = VFLAG_CLEAR;
\r
9405 FLAG_C = CFLAG_CLEAR;
\r
9409 void m68k_op_move_32_al_di(void)
\r
9411 uint res = OPER_AY_DI_32();
\r
9412 uint ea = EA_AL_32();
\r
9414 m68ki_write_32(ea, res);
\r
9416 FLAG_N = NFLAG_32(res);
\r
9418 FLAG_V = VFLAG_CLEAR;
\r
9419 FLAG_C = CFLAG_CLEAR;
\r
9423 void m68k_op_move_32_al_ix(void)
\r
9425 uint res = OPER_AY_IX_32();
\r
9426 uint ea = EA_AL_32();
\r
9428 m68ki_write_32(ea, res);
\r
9430 FLAG_N = NFLAG_32(res);
\r
9432 FLAG_V = VFLAG_CLEAR;
\r
9433 FLAG_C = CFLAG_CLEAR;
\r
9437 void m68k_op_move_32_al_aw(void)
\r
9439 uint res = OPER_AW_32();
\r
9440 uint ea = EA_AL_32();
\r
9442 m68ki_write_32(ea, res);
\r
9444 FLAG_N = NFLAG_32(res);
\r
9446 FLAG_V = VFLAG_CLEAR;
\r
9447 FLAG_C = CFLAG_CLEAR;
\r
9451 void m68k_op_move_32_al_al(void)
\r
9453 uint res = OPER_AL_32();
\r
9454 uint ea = EA_AL_32();
\r
9456 m68ki_write_32(ea, res);
\r
9458 FLAG_N = NFLAG_32(res);
\r
9460 FLAG_V = VFLAG_CLEAR;
\r
9461 FLAG_C = CFLAG_CLEAR;
\r
9465 void m68k_op_move_32_al_pcdi(void)
\r
9467 uint res = OPER_PCDI_32();
\r
9468 uint ea = EA_AL_32();
\r
9470 m68ki_write_32(ea, res);
\r
9472 FLAG_N = NFLAG_32(res);
\r
9474 FLAG_V = VFLAG_CLEAR;
\r
9475 FLAG_C = CFLAG_CLEAR;
\r
9479 void m68k_op_move_32_al_pcix(void)
\r
9481 uint res = OPER_PCIX_32();
\r
9482 uint ea = EA_AL_32();
\r
9484 m68ki_write_32(ea, res);
\r
9486 FLAG_N = NFLAG_32(res);
\r
9488 FLAG_V = VFLAG_CLEAR;
\r
9489 FLAG_C = CFLAG_CLEAR;
\r
9493 void m68k_op_move_32_al_i(void)
\r
9495 uint res = OPER_I_32();
\r
9496 uint ea = EA_AL_32();
\r
9498 m68ki_write_32(ea, res);
\r
9500 FLAG_N = NFLAG_32(res);
\r
9502 FLAG_V = VFLAG_CLEAR;
\r
9503 FLAG_C = CFLAG_CLEAR;
\r
9507 void m68k_op_movea_16_d(void)
\r
9509 AX = MAKE_INT_16(DY);
\r
9513 void m68k_op_movea_16_a(void)
\r
9515 AX = MAKE_INT_16(AY);
\r
9519 void m68k_op_movea_16_ai(void)
\r
9521 AX = MAKE_INT_16(OPER_AY_AI_16());
\r
9525 void m68k_op_movea_16_pi(void)
\r
9527 AX = MAKE_INT_16(OPER_AY_PI_16());
\r
9531 void m68k_op_movea_16_pd(void)
\r
9533 AX = MAKE_INT_16(OPER_AY_PD_16());
\r
9537 void m68k_op_movea_16_di(void)
\r
9539 AX = MAKE_INT_16(OPER_AY_DI_16());
\r
9543 void m68k_op_movea_16_ix(void)
\r
9545 AX = MAKE_INT_16(OPER_AY_IX_16());
\r
9549 void m68k_op_movea_16_aw(void)
\r
9551 AX = MAKE_INT_16(OPER_AW_16());
\r
9555 void m68k_op_movea_16_al(void)
\r
9557 AX = MAKE_INT_16(OPER_AL_16());
\r
9561 void m68k_op_movea_16_pcdi(void)
\r
9563 AX = MAKE_INT_16(OPER_PCDI_16());
\r
9567 void m68k_op_movea_16_pcix(void)
\r
9569 AX = MAKE_INT_16(OPER_PCIX_16());
\r
9573 void m68k_op_movea_16_i(void)
\r
9575 AX = MAKE_INT_16(OPER_I_16());
\r
9579 void m68k_op_movea_32_d(void)
\r
9585 void m68k_op_movea_32_a(void)
\r
9591 void m68k_op_movea_32_ai(void)
\r
9593 AX = OPER_AY_AI_32();
\r
9597 void m68k_op_movea_32_pi(void)
\r
9599 AX = OPER_AY_PI_32();
\r
9603 void m68k_op_movea_32_pd(void)
\r
9605 AX = OPER_AY_PD_32();
\r
9609 void m68k_op_movea_32_di(void)
\r
9611 AX = OPER_AY_DI_32();
\r
9615 void m68k_op_movea_32_ix(void)
\r
9617 AX = OPER_AY_IX_32();
\r
9621 void m68k_op_movea_32_aw(void)
\r
9623 AX = OPER_AW_32();
\r
9627 void m68k_op_movea_32_al(void)
\r
9629 AX = OPER_AL_32();
\r
9633 void m68k_op_movea_32_pcdi(void)
\r
9635 AX = OPER_PCDI_32();
\r
9639 void m68k_op_movea_32_pcix(void)
\r
9641 AX = OPER_PCIX_32();
\r
9645 void m68k_op_movea_32_i(void)
\r
9651 void m68k_op_move_16_frc_d(void)
\r
9653 if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
\r
9655 DY = MASK_OUT_BELOW_16(DY) | m68ki_get_ccr();
\r
9658 m68ki_exception_illegal();
\r
9662 void m68k_op_move_16_frc_ai(void)
\r
9664 if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
\r
9666 m68ki_write_16(EA_AY_AI_16(), m68ki_get_ccr());
\r
9669 m68ki_exception_illegal();
\r
9673 void m68k_op_move_16_frc_pi(void)
\r
9675 if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
\r
9677 m68ki_write_16(EA_AY_PI_16(), m68ki_get_ccr());
\r
9680 m68ki_exception_illegal();
\r
9684 void m68k_op_move_16_frc_pd(void)
\r
9686 if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
\r
9688 m68ki_write_16(EA_AY_PD_16(), m68ki_get_ccr());
\r
9691 m68ki_exception_illegal();
\r
9695 void m68k_op_move_16_frc_di(void)
\r
9697 if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
\r
9699 m68ki_write_16(EA_AY_DI_16(), m68ki_get_ccr());
\r
9702 m68ki_exception_illegal();
\r
9706 void m68k_op_move_16_frc_ix(void)
\r
9708 if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
\r
9710 m68ki_write_16(EA_AY_IX_16(), m68ki_get_ccr());
\r
9713 m68ki_exception_illegal();
\r
9717 void m68k_op_move_16_frc_aw(void)
\r
9719 if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
\r
9721 m68ki_write_16(EA_AW_16(), m68ki_get_ccr());
\r
9724 m68ki_exception_illegal();
\r
9728 void m68k_op_move_16_frc_al(void)
\r
9730 if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
\r
9732 m68ki_write_16(EA_AL_16(), m68ki_get_ccr());
\r
9735 m68ki_exception_illegal();
\r
9739 void m68k_op_move_16_toc_d(void)
\r
9741 m68ki_set_ccr(DY);
\r
9745 void m68k_op_move_16_toc_ai(void)
\r
9747 m68ki_set_ccr(OPER_AY_AI_16());
\r
9751 void m68k_op_move_16_toc_pi(void)
\r
9753 m68ki_set_ccr(OPER_AY_PI_16());
\r
9757 void m68k_op_move_16_toc_pd(void)
\r
9759 m68ki_set_ccr(OPER_AY_PD_16());
\r
9763 void m68k_op_move_16_toc_di(void)
\r
9765 m68ki_set_ccr(OPER_AY_DI_16());
\r
9769 void m68k_op_move_16_toc_ix(void)
\r
9771 m68ki_set_ccr(OPER_AY_IX_16());
\r
9775 void m68k_op_move_16_toc_aw(void)
\r
9777 m68ki_set_ccr(OPER_AW_16());
\r
9781 void m68k_op_move_16_toc_al(void)
\r
9783 m68ki_set_ccr(OPER_AL_16());
\r
9787 void m68k_op_move_16_toc_pcdi(void)
\r
9789 m68ki_set_ccr(OPER_PCDI_16());
\r
9793 void m68k_op_move_16_toc_pcix(void)
\r
9795 m68ki_set_ccr(OPER_PCIX_16());
\r
9799 void m68k_op_move_16_toc_i(void)
\r
9801 m68ki_set_ccr(OPER_I_16());
\r
9805 void m68k_op_move_16_frs_d(void)
\r
9807 if(CPU_TYPE_IS_000(CPU_TYPE) || FLAG_S) /* NS990408 */
\r
9809 DY = MASK_OUT_BELOW_16(DY) | m68ki_get_sr();
\r
9812 m68ki_exception_privilege_violation();
\r
9816 void m68k_op_move_16_frs_ai(void)
\r
9818 if(CPU_TYPE_IS_000(CPU_TYPE) || FLAG_S) /* NS990408 */
\r
9820 uint ea = EA_AY_AI_16();
\r
9821 m68ki_write_16(ea, m68ki_get_sr());
\r
9824 m68ki_exception_privilege_violation();
\r
9828 void m68k_op_move_16_frs_pi(void)
\r
9830 if(CPU_TYPE_IS_000(CPU_TYPE) || FLAG_S) /* NS990408 */
\r
9832 uint ea = EA_AY_PI_16();
\r
9833 m68ki_write_16(ea, m68ki_get_sr());
\r
9836 m68ki_exception_privilege_violation();
\r
9840 void m68k_op_move_16_frs_pd(void)
\r
9842 if(CPU_TYPE_IS_000(CPU_TYPE) || FLAG_S) /* NS990408 */
\r
9844 uint ea = EA_AY_PD_16();
\r
9845 m68ki_write_16(ea, m68ki_get_sr());
\r
9848 m68ki_exception_privilege_violation();
\r
9852 void m68k_op_move_16_frs_di(void)
\r
9854 if(CPU_TYPE_IS_000(CPU_TYPE) || FLAG_S) /* NS990408 */
\r
9856 uint ea = EA_AY_DI_16();
\r
9857 m68ki_write_16(ea, m68ki_get_sr());
\r
9860 m68ki_exception_privilege_violation();
\r
9864 void m68k_op_move_16_frs_ix(void)
\r
9866 if(CPU_TYPE_IS_000(CPU_TYPE) || FLAG_S) /* NS990408 */
\r
9868 uint ea = EA_AY_IX_16();
\r
9869 m68ki_write_16(ea, m68ki_get_sr());
\r
9872 m68ki_exception_privilege_violation();
\r
9876 void m68k_op_move_16_frs_aw(void)
\r
9878 if(CPU_TYPE_IS_000(CPU_TYPE) || FLAG_S) /* NS990408 */
\r
9880 uint ea = EA_AW_16();
\r
9881 m68ki_write_16(ea, m68ki_get_sr());
\r
9884 m68ki_exception_privilege_violation();
\r
9888 void m68k_op_move_16_frs_al(void)
\r
9890 if(CPU_TYPE_IS_000(CPU_TYPE) || FLAG_S) /* NS990408 */
\r
9892 uint ea = EA_AL_16();
\r
9893 m68ki_write_16(ea, m68ki_get_sr());
\r
9896 m68ki_exception_privilege_violation();
\r
9900 void m68k_op_move_16_tos_d(void)
\r
9907 m68ki_exception_privilege_violation();
\r
9911 void m68k_op_move_16_tos_ai(void)
\r
9915 uint new_sr = OPER_AY_AI_16();
\r
9916 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
\r
9917 m68ki_set_sr(new_sr);
\r
9920 m68ki_exception_privilege_violation();
\r
9924 void m68k_op_move_16_tos_pi(void)
\r
9928 uint new_sr = OPER_AY_PI_16();
\r
9929 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
\r
9930 m68ki_set_sr(new_sr);
\r
9933 m68ki_exception_privilege_violation();
\r
9937 void m68k_op_move_16_tos_pd(void)
\r
9941 uint new_sr = OPER_AY_PD_16();
\r
9942 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
\r
9943 m68ki_set_sr(new_sr);
\r
9946 m68ki_exception_privilege_violation();
\r
9950 void m68k_op_move_16_tos_di(void)
\r
9954 uint new_sr = OPER_AY_DI_16();
\r
9955 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
\r
9956 m68ki_set_sr(new_sr);
\r
9959 m68ki_exception_privilege_violation();
\r
9963 void m68k_op_move_16_tos_ix(void)
\r
9967 uint new_sr = OPER_AY_IX_16();
\r
9968 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
\r
9969 m68ki_set_sr(new_sr);
\r
9972 m68ki_exception_privilege_violation();
\r
9976 void m68k_op_move_16_tos_aw(void)
\r
9980 uint new_sr = OPER_AW_16();
\r
9981 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
\r
9982 m68ki_set_sr(new_sr);
\r
9985 m68ki_exception_privilege_violation();
\r
9989 void m68k_op_move_16_tos_al(void)
\r
9993 uint new_sr = OPER_AL_16();
\r
9994 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
\r
9995 m68ki_set_sr(new_sr);
\r
9998 m68ki_exception_privilege_violation();
\r
10002 void m68k_op_move_16_tos_pcdi(void)
\r
10006 uint new_sr = OPER_PCDI_16();
\r
10007 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
\r
10008 m68ki_set_sr(new_sr);
\r
10011 m68ki_exception_privilege_violation();
\r
10015 void m68k_op_move_16_tos_pcix(void)
\r
10019 uint new_sr = OPER_PCIX_16();
\r
10020 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
\r
10021 m68ki_set_sr(new_sr);
\r
10024 m68ki_exception_privilege_violation();
\r
10028 void m68k_op_move_16_tos_i(void)
\r
10032 uint new_sr = OPER_I_16();
\r
10033 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
\r
10034 m68ki_set_sr(new_sr);
\r
10037 m68ki_exception_privilege_violation();
\r
10041 void m68k_op_move_32_fru(void)
\r
10048 m68ki_exception_privilege_violation();
\r
10052 void m68k_op_move_32_tou(void)
\r
10056 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
\r
10060 m68ki_exception_privilege_violation();
\r
10064 void m68k_op_movec_32_cr(void)
\r
10066 if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
\r
10070 uint word2 = OPER_I_16();
\r
10072 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
\r
10073 switch (word2 & 0xfff)
\r
10075 case 0x000: /* SFC */
\r
10076 REG_DA[(word2 >> 12) & 15] = REG_SFC;
\r
10078 case 0x001: /* DFC */
\r
10079 REG_DA[(word2 >> 12) & 15] = REG_DFC;
\r
10081 case 0x002: /* CACR */
\r
10082 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
\r
10084 REG_DA[(word2 >> 12) & 15] = REG_CACR;
\r
10088 case 0x800: /* USP */
\r
10089 REG_DA[(word2 >> 12) & 15] = REG_USP;
\r
10091 case 0x801: /* VBR */
\r
10092 REG_DA[(word2 >> 12) & 15] = REG_VBR;
\r
10094 case 0x802: /* CAAR */
\r
10095 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
\r
10097 REG_DA[(word2 >> 12) & 15] = REG_CAAR;
\r
10100 m68ki_exception_illegal();
\r
10102 case 0x803: /* MSP */
\r
10103 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
\r
10105 REG_DA[(word2 >> 12) & 15] = FLAG_M ? REG_SP : REG_MSP;
\r
10108 m68ki_exception_illegal();
\r
10110 case 0x804: /* ISP */
\r
10111 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
\r
10113 REG_DA[(word2 >> 12) & 15] = FLAG_M ? REG_ISP : REG_SP;
\r
10116 m68ki_exception_illegal();
\r
10118 case 0x003: /* TC */
\r
10119 if(CPU_TYPE_IS_040_PLUS(CPU_TYPE))
\r
10124 m68ki_exception_illegal();
\r
10126 case 0x004: /* ITT0 */
\r
10127 if(CPU_TYPE_IS_040_PLUS(CPU_TYPE))
\r
10132 m68ki_exception_illegal();
\r
10134 case 0x005: /* ITT1 */
\r
10135 if(CPU_TYPE_IS_040_PLUS(CPU_TYPE))
\r
10140 m68ki_exception_illegal();
\r
10142 case 0x006: /* DTT0 */
\r
10143 if(CPU_TYPE_IS_040_PLUS(CPU_TYPE))
\r
10148 m68ki_exception_illegal();
\r
10150 case 0x007: /* DTT1 */
\r
10151 if(CPU_TYPE_IS_040_PLUS(CPU_TYPE))
\r
10156 m68ki_exception_illegal();
\r
10158 case 0x805: /* MMUSR */
\r
10159 if(CPU_TYPE_IS_040_PLUS(CPU_TYPE))
\r
10164 m68ki_exception_illegal();
\r
10166 case 0x806: /* URP */
\r
10167 if(CPU_TYPE_IS_040_PLUS(CPU_TYPE))
\r
10172 m68ki_exception_illegal();
\r
10174 case 0x807: /* SRP */
\r
10175 if(CPU_TYPE_IS_040_PLUS(CPU_TYPE))
\r
10180 m68ki_exception_illegal();
\r
10183 m68ki_exception_illegal();
\r
10187 m68ki_exception_privilege_violation();
\r
10190 m68ki_exception_illegal();
\r
10194 void m68k_op_movec_32_rc(void)
\r
10196 if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
\r
10200 uint word2 = OPER_I_16();
\r
10202 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
\r
10203 switch (word2 & 0xfff)
\r
10205 case 0x000: /* SFC */
\r
10206 REG_SFC = REG_DA[(word2 >> 12) & 15] & 7;
\r
10208 case 0x001: /* DFC */
\r
10209 REG_DFC = REG_DA[(word2 >> 12) & 15] & 7;
\r
10211 case 0x002: /* CACR */
\r
10212 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
\r
10214 REG_CACR = REG_DA[(word2 >> 12) & 15];
\r
10217 m68ki_exception_illegal();
\r
10219 case 0x800: /* USP */
\r
10220 REG_USP = REG_DA[(word2 >> 12) & 15];
\r
10222 case 0x801: /* VBR */
\r
10223 REG_VBR = REG_DA[(word2 >> 12) & 15];
\r
10225 case 0x802: /* CAAR */
\r
10226 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
\r
10228 REG_CAAR = REG_DA[(word2 >> 12) & 15];
\r
10231 m68ki_exception_illegal();
\r
10233 case 0x803: /* MSP */
\r
10234 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
\r
10236 /* we are in supervisor mode so just check for M flag */
\r
10239 REG_MSP = REG_DA[(word2 >> 12) & 15];
\r
10242 REG_SP = REG_DA[(word2 >> 12) & 15];
\r
10245 m68ki_exception_illegal();
\r
10247 case 0x804: /* ISP */
\r
10248 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
\r
10252 REG_SP = REG_DA[(word2 >> 12) & 15];
\r
10255 REG_ISP = REG_DA[(word2 >> 12) & 15];
\r
10258 m68ki_exception_illegal();
\r
10260 case 0x003: /* TC */
\r
10261 if (CPU_TYPE_IS_040_PLUS(CPU_TYPE))
\r
10266 m68ki_exception_illegal();
\r
10268 case 0x004: /* ITT0 */
\r
10269 if (CPU_TYPE_IS_040_PLUS(CPU_TYPE))
\r
10274 m68ki_exception_illegal();
\r
10276 case 0x005: /* ITT1 */
\r
10277 if (CPU_TYPE_IS_040_PLUS(CPU_TYPE))
\r
10282 m68ki_exception_illegal();
\r
10284 case 0x006: /* DTT0 */
\r
10285 if (CPU_TYPE_IS_040_PLUS(CPU_TYPE))
\r
10290 m68ki_exception_illegal();
\r
10292 case 0x007: /* DTT1 */
\r
10293 if (CPU_TYPE_IS_040_PLUS(CPU_TYPE))
\r
10298 m68ki_exception_illegal();
\r
10300 case 0x805: /* MMUSR */
\r
10301 if (CPU_TYPE_IS_040_PLUS(CPU_TYPE))
\r
10306 m68ki_exception_illegal();
\r
10308 case 0x806: /* URP */
\r
10309 if (CPU_TYPE_IS_040_PLUS(CPU_TYPE))
\r
10314 m68ki_exception_illegal();
\r
10316 case 0x807: /* SRP */
\r
10317 if (CPU_TYPE_IS_040_PLUS(CPU_TYPE))
\r
10322 m68ki_exception_illegal();
\r
10325 m68ki_exception_illegal();
\r
10329 m68ki_exception_privilege_violation();
\r
10332 m68ki_exception_illegal();
\r
10336 void m68k_op_movem_16_re_pd(void)
\r
10339 uint register_list = OPER_I_16();
\r
10343 for(; i < 16; i++)
\r
10344 if(register_list & (1 << i))
\r
10347 m68ki_write_16(ea, MASK_OUT_ABOVE_16(REG_DA[15-i]));
\r
10352 USE_CYCLES(count<<CYC_MOVEM_W);
\r
10356 void m68k_op_movem_16_re_ai(void)
\r
10359 uint register_list = OPER_I_16();
\r
10360 uint ea = EA_AY_AI_16();
\r
10363 for(; i < 16; i++)
\r
10364 if(register_list & (1 << i))
\r
10366 m68ki_write_16(ea, MASK_OUT_ABOVE_16(REG_DA[i]));
\r
10371 USE_CYCLES(count<<CYC_MOVEM_W);
\r
10375 void m68k_op_movem_16_re_di(void)
\r
10378 uint register_list = OPER_I_16();
\r
10379 uint ea = EA_AY_DI_16();
\r
10382 for(; i < 16; i++)
\r
10383 if(register_list & (1 << i))
\r
10385 m68ki_write_16(ea, MASK_OUT_ABOVE_16(REG_DA[i]));
\r
10390 USE_CYCLES(count<<CYC_MOVEM_W);
\r
10394 void m68k_op_movem_16_re_ix(void)
\r
10397 uint register_list = OPER_I_16();
\r
10398 uint ea = EA_AY_IX_16();
\r
10401 for(; i < 16; i++)
\r
10402 if(register_list & (1 << i))
\r
10404 m68ki_write_16(ea, MASK_OUT_ABOVE_16(REG_DA[i]));
\r
10409 USE_CYCLES(count<<CYC_MOVEM_W);
\r
10413 void m68k_op_movem_16_re_aw(void)
\r
10416 uint register_list = OPER_I_16();
\r
10417 uint ea = EA_AW_16();
\r
10420 for(; i < 16; i++)
\r
10421 if(register_list & (1 << i))
\r
10423 m68ki_write_16(ea, MASK_OUT_ABOVE_16(REG_DA[i]));
\r
10428 USE_CYCLES(count<<CYC_MOVEM_W);
\r
10432 void m68k_op_movem_16_re_al(void)
\r
10435 uint register_list = OPER_I_16();
\r
10436 uint ea = EA_AL_16();
\r
10439 for(; i < 16; i++)
\r
10440 if(register_list & (1 << i))
\r
10442 m68ki_write_16(ea, MASK_OUT_ABOVE_16(REG_DA[i]));
\r
10447 USE_CYCLES(count<<CYC_MOVEM_W);
\r
10451 void m68k_op_movem_32_re_pd(void)
\r
10454 uint register_list = OPER_I_16();
\r
10458 for(; i < 16; i++)
\r
10459 if(register_list & (1 << i))
\r
10462 m68ki_write_32(ea, REG_DA[15-i]);
\r
10467 USE_CYCLES(count<<CYC_MOVEM_L);
\r
10471 void m68k_op_movem_32_re_ai(void)
\r
10474 uint register_list = OPER_I_16();
\r
10475 uint ea = EA_AY_AI_32();
\r
10478 for(; i < 16; i++)
\r
10479 if(register_list & (1 << i))
\r
10481 m68ki_write_32(ea, REG_DA[i]);
\r
10486 USE_CYCLES(count<<CYC_MOVEM_L);
\r
10490 void m68k_op_movem_32_re_di(void)
\r
10493 uint register_list = OPER_I_16();
\r
10494 uint ea = EA_AY_DI_32();
\r
10497 for(; i < 16; i++)
\r
10498 if(register_list & (1 << i))
\r
10500 m68ki_write_32(ea, REG_DA[i]);
\r
10505 USE_CYCLES(count<<CYC_MOVEM_L);
\r
10509 void m68k_op_movem_32_re_ix(void)
\r
10512 uint register_list = OPER_I_16();
\r
10513 uint ea = EA_AY_IX_32();
\r
10516 for(; i < 16; i++)
\r
10517 if(register_list & (1 << i))
\r
10519 m68ki_write_32(ea, REG_DA[i]);
\r
10524 USE_CYCLES(count<<CYC_MOVEM_L);
\r
10528 void m68k_op_movem_32_re_aw(void)
\r
10531 uint register_list = OPER_I_16();
\r
10532 uint ea = EA_AW_32();
\r
10535 for(; i < 16; i++)
\r
10536 if(register_list & (1 << i))
\r
10538 m68ki_write_32(ea, REG_DA[i]);
\r
10543 USE_CYCLES(count<<CYC_MOVEM_L);
\r
10547 void m68k_op_movem_32_re_al(void)
\r
10550 uint register_list = OPER_I_16();
\r
10551 uint ea = EA_AL_32();
\r
10554 for(; i < 16; i++)
\r
10555 if(register_list & (1 << i))
\r
10557 m68ki_write_32(ea, REG_DA[i]);
\r
10562 USE_CYCLES(count<<CYC_MOVEM_L);
\r
10566 void m68k_op_movem_16_er_pi(void)
\r
10569 uint register_list = OPER_I_16();
\r
10573 for(; i < 16; i++)
\r
10574 if(register_list & (1 << i))
\r
10576 REG_DA[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_16(ea)));
\r
10582 USE_CYCLES(count<<CYC_MOVEM_W);
\r
10586 void m68k_op_movem_16_er_pcdi(void)
\r
10589 uint register_list = OPER_I_16();
\r
10590 uint ea = EA_PCDI_16();
\r
10593 for(; i < 16; i++)
\r
10594 if(register_list & (1 << i))
\r
10596 REG_DA[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_pcrel_16(ea)));
\r
10601 USE_CYCLES(count<<CYC_MOVEM_W);
\r
10605 void m68k_op_movem_16_er_pcix(void)
\r
10608 uint register_list = OPER_I_16();
\r
10609 uint ea = EA_PCIX_16();
\r
10612 for(; i < 16; i++)
\r
10613 if(register_list & (1 << i))
\r
10615 REG_DA[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_pcrel_16(ea)));
\r
10620 USE_CYCLES(count<<CYC_MOVEM_W);
\r
10624 void m68k_op_movem_16_er_ai(void)
\r
10627 uint register_list = OPER_I_16();
\r
10628 uint ea = EA_AY_AI_16();
\r
10631 for(; i < 16; i++)
\r
10632 if(register_list & (1 << i))
\r
10634 REG_DA[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_16(ea)));
\r
10639 USE_CYCLES(count<<CYC_MOVEM_W);
\r
10643 void m68k_op_movem_16_er_di(void)
\r
10646 uint register_list = OPER_I_16();
\r
10647 uint ea = EA_AY_DI_16();
\r
10650 for(; i < 16; i++)
\r
10651 if(register_list & (1 << i))
\r
10653 REG_DA[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_16(ea)));
\r
10658 USE_CYCLES(count<<CYC_MOVEM_W);
\r
10662 void m68k_op_movem_16_er_ix(void)
\r
10665 uint register_list = OPER_I_16();
\r
10666 uint ea = EA_AY_IX_16();
\r
10669 for(; i < 16; i++)
\r
10670 if(register_list & (1 << i))
\r
10672 REG_DA[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_16(ea)));
\r
10677 USE_CYCLES(count<<CYC_MOVEM_W);
\r
10681 void m68k_op_movem_16_er_aw(void)
\r
10684 uint register_list = OPER_I_16();
\r
10685 uint ea = EA_AW_16();
\r
10688 for(; i < 16; i++)
\r
10689 if(register_list & (1 << i))
\r
10691 REG_DA[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_16(ea)));
\r
10696 USE_CYCLES(count<<CYC_MOVEM_W);
\r
10700 void m68k_op_movem_16_er_al(void)
\r
10703 uint register_list = OPER_I_16();
\r
10704 uint ea = EA_AL_16();
\r
10707 for(; i < 16; i++)
\r
10708 if(register_list & (1 << i))
\r
10710 REG_DA[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_16(ea)));
\r
10715 USE_CYCLES(count<<CYC_MOVEM_W);
\r
10719 void m68k_op_movem_32_er_pi(void)
\r
10722 uint register_list = OPER_I_16();
\r
10726 for(; i < 16; i++)
\r
10727 if(register_list & (1 << i))
\r
10729 REG_DA[i] = m68ki_read_32(ea);
\r
10735 USE_CYCLES(count<<CYC_MOVEM_L);
\r
10739 void m68k_op_movem_32_er_pcdi(void)
\r
10742 uint register_list = OPER_I_16();
\r
10743 uint ea = EA_PCDI_32();
\r
10746 for(; i < 16; i++)
\r
10747 if(register_list & (1 << i))
\r
10749 REG_DA[i] = m68ki_read_pcrel_32(ea);
\r
10754 USE_CYCLES(count<<CYC_MOVEM_L);
\r
10758 void m68k_op_movem_32_er_pcix(void)
\r
10761 uint register_list = OPER_I_16();
\r
10762 uint ea = EA_PCIX_32();
\r
10765 for(; i < 16; i++)
\r
10766 if(register_list & (1 << i))
\r
10768 REG_DA[i] = m68ki_read_pcrel_32(ea);
\r
10773 USE_CYCLES(count<<CYC_MOVEM_L);
\r
10777 void m68k_op_movem_32_er_ai(void)
\r
10780 uint register_list = OPER_I_16();
\r
10781 uint ea = EA_AY_AI_32();
\r
10784 for(; i < 16; i++)
\r
10785 if(register_list & (1 << i))
\r
10787 REG_DA[i] = m68ki_read_32(ea);
\r
10792 USE_CYCLES(count<<CYC_MOVEM_L);
\r
10796 void m68k_op_movem_32_er_di(void)
\r
10799 uint register_list = OPER_I_16();
\r
10800 uint ea = EA_AY_DI_32();
\r
10803 for(; i < 16; i++)
\r
10804 if(register_list & (1 << i))
\r
10806 REG_DA[i] = m68ki_read_32(ea);
\r
10811 USE_CYCLES(count<<CYC_MOVEM_L);
\r
10815 void m68k_op_movem_32_er_ix(void)
\r
10818 uint register_list = OPER_I_16();
\r
10819 uint ea = EA_AY_IX_32();
\r
10822 for(; i < 16; i++)
\r
10823 if(register_list & (1 << i))
\r
10825 REG_DA[i] = m68ki_read_32(ea);
\r
10830 USE_CYCLES(count<<CYC_MOVEM_L);
\r
10834 void m68k_op_movem_32_er_aw(void)
\r
10837 uint register_list = OPER_I_16();
\r
10838 uint ea = EA_AW_32();
\r
10841 for(; i < 16; i++)
\r
10842 if(register_list & (1 << i))
\r
10844 REG_DA[i] = m68ki_read_32(ea);
\r
10849 USE_CYCLES(count<<CYC_MOVEM_L);
\r
10853 void m68k_op_movem_32_er_al(void)
\r
10856 uint register_list = OPER_I_16();
\r
10857 uint ea = EA_AL_32();
\r
10860 for(; i < 16; i++)
\r
10861 if(register_list & (1 << i))
\r
10863 REG_DA[i] = m68ki_read_32(ea);
\r
10868 USE_CYCLES(count<<CYC_MOVEM_L);
\r
10872 void m68k_op_movep_16_re(void)
\r
10874 uint ea = EA_AY_DI_16();
\r
10877 m68ki_write_8(ea, MASK_OUT_ABOVE_8(src >> 8));
\r
10878 m68ki_write_8(ea += 2, MASK_OUT_ABOVE_8(src));
\r
10882 void m68k_op_movep_32_re(void)
\r
10884 uint ea = EA_AY_DI_32();
\r
10887 m68ki_write_8(ea, MASK_OUT_ABOVE_8(src >> 24));
\r
10888 m68ki_write_8(ea += 2, MASK_OUT_ABOVE_8(src >> 16));
\r
10889 m68ki_write_8(ea += 2, MASK_OUT_ABOVE_8(src >> 8));
\r
10890 m68ki_write_8(ea += 2, MASK_OUT_ABOVE_8(src));
\r
10894 void m68k_op_movep_16_er(void)
\r
10896 uint ea = EA_AY_DI_16();
\r
10897 uint* r_dst = &DX;
\r
10899 *r_dst = MASK_OUT_BELOW_16(*r_dst) | ((m68ki_read_8(ea) << 8) + m68ki_read_8(ea + 2));
\r
10903 void m68k_op_movep_32_er(void)
\r
10905 uint ea = EA_AY_DI_32();
\r
10907 DX = (m68ki_read_8(ea) << 24) + (m68ki_read_8(ea + 2) << 16)
\r
10908 + (m68ki_read_8(ea + 4) << 8) + m68ki_read_8(ea + 6);
\r
10912 void m68k_op_moves_8_ai(void)
\r
10914 if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
\r
10918 uint word2 = OPER_I_16();
\r
10919 uint ea = EA_AY_AI_8();
\r
10921 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
\r
10922 if(BIT_B(word2)) /* Register to memory */
\r
10924 m68ki_write_8_fc(ea, REG_DFC, MASK_OUT_ABOVE_8(REG_DA[(word2 >> 12) & 15]));
\r
10927 if(BIT_F(word2)) /* Memory to address register */
\r
10929 REG_A[(word2 >> 12) & 7] = MAKE_INT_8(m68ki_read_8_fc(ea, REG_SFC));
\r
10930 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
\r
10934 /* Memory to data register */
\r
10935 REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_8(REG_D[(word2 >> 12) & 7]) | m68ki_read_8_fc(ea, REG_SFC);
\r
10936 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
\r
10940 m68ki_exception_privilege_violation();
\r
10943 m68ki_exception_illegal();
\r
10947 void m68k_op_moves_8_pi(void)
\r
10949 if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
\r
10953 uint word2 = OPER_I_16();
\r
10954 uint ea = EA_AY_PI_8();
\r
10956 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
\r
10957 if(BIT_B(word2)) /* Register to memory */
\r
10959 m68ki_write_8_fc(ea, REG_DFC, MASK_OUT_ABOVE_8(REG_DA[(word2 >> 12) & 15]));
\r
10962 if(BIT_F(word2)) /* Memory to address register */
\r
10964 REG_A[(word2 >> 12) & 7] = MAKE_INT_8(m68ki_read_8_fc(ea, REG_SFC));
\r
10965 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
\r
10969 /* Memory to data register */
\r
10970 REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_8(REG_D[(word2 >> 12) & 7]) | m68ki_read_8_fc(ea, REG_SFC);
\r
10971 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
\r
10975 m68ki_exception_privilege_violation();
\r
10978 m68ki_exception_illegal();
\r
10982 void m68k_op_moves_8_pi7(void)
\r
10984 if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
\r
10988 uint word2 = OPER_I_16();
\r
10989 uint ea = EA_A7_PI_8();
\r
10991 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
\r
10992 if(BIT_B(word2)) /* Register to memory */
\r
10994 m68ki_write_8_fc(ea, REG_DFC, MASK_OUT_ABOVE_8(REG_DA[(word2 >> 12) & 15]));
\r
10997 if(BIT_F(word2)) /* Memory to address register */
\r
10999 REG_A[(word2 >> 12) & 7] = MAKE_INT_8(m68ki_read_8_fc(ea, REG_SFC));
\r
11000 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
\r
11004 /* Memory to data register */
\r
11005 REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_8(REG_D[(word2 >> 12) & 7]) | m68ki_read_8_fc(ea, REG_SFC);
\r
11006 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
\r
11010 m68ki_exception_privilege_violation();
\r
11013 m68ki_exception_illegal();
\r
11017 void m68k_op_moves_8_pd(void)
\r
11019 if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
\r
11023 uint word2 = OPER_I_16();
\r
11024 uint ea = EA_AY_PD_8();
\r
11026 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
\r
11027 if(BIT_B(word2)) /* Register to memory */
\r
11029 m68ki_write_8_fc(ea, REG_DFC, MASK_OUT_ABOVE_8(REG_DA[(word2 >> 12) & 15]));
\r
11032 if(BIT_F(word2)) /* Memory to address register */
\r
11034 REG_A[(word2 >> 12) & 7] = MAKE_INT_8(m68ki_read_8_fc(ea, REG_SFC));
\r
11035 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
\r
11039 /* Memory to data register */
\r
11040 REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_8(REG_D[(word2 >> 12) & 7]) | m68ki_read_8_fc(ea, REG_SFC);
\r
11041 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
\r
11045 m68ki_exception_privilege_violation();
\r
11048 m68ki_exception_illegal();
\r
11052 void m68k_op_moves_8_pd7(void)
\r
11054 if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
\r
11058 uint word2 = OPER_I_16();
\r
11059 uint ea = EA_A7_PD_8();
\r
11061 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
\r
11062 if(BIT_B(word2)) /* Register to memory */
\r
11064 m68ki_write_8_fc(ea, REG_DFC, MASK_OUT_ABOVE_8(REG_DA[(word2 >> 12) & 15]));
\r
11067 if(BIT_F(word2)) /* Memory to address register */
\r
11069 REG_A[(word2 >> 12) & 7] = MAKE_INT_8(m68ki_read_8_fc(ea, REG_SFC));
\r
11070 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
\r
11074 /* Memory to data register */
\r
11075 REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_8(REG_D[(word2 >> 12) & 7]) | m68ki_read_8_fc(ea, REG_SFC);
\r
11076 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
\r
11080 m68ki_exception_privilege_violation();
\r
11083 m68ki_exception_illegal();
\r
11087 void m68k_op_moves_8_di(void)
\r
11089 if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
\r
11093 uint word2 = OPER_I_16();
\r
11094 uint ea = EA_AY_DI_8();
\r
11096 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
\r
11097 if(BIT_B(word2)) /* Register to memory */
\r
11099 m68ki_write_8_fc(ea, REG_DFC, MASK_OUT_ABOVE_8(REG_DA[(word2 >> 12) & 15]));
\r
11102 if(BIT_F(word2)) /* Memory to address register */
\r
11104 REG_A[(word2 >> 12) & 7] = MAKE_INT_8(m68ki_read_8_fc(ea, REG_SFC));
\r
11105 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
\r
11109 /* Memory to data register */
\r
11110 REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_8(REG_D[(word2 >> 12) & 7]) | m68ki_read_8_fc(ea, REG_SFC);
\r
11111 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
\r
11115 m68ki_exception_privilege_violation();
\r
11118 m68ki_exception_illegal();
\r
11122 void m68k_op_moves_8_ix(void)
\r
11124 if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
\r
11128 uint word2 = OPER_I_16();
\r
11129 uint ea = EA_AY_IX_8();
\r
11131 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
\r
11132 if(BIT_B(word2)) /* Register to memory */
\r
11134 m68ki_write_8_fc(ea, REG_DFC, MASK_OUT_ABOVE_8(REG_DA[(word2 >> 12) & 15]));
\r
11137 if(BIT_F(word2)) /* Memory to address register */
\r
11139 REG_A[(word2 >> 12) & 7] = MAKE_INT_8(m68ki_read_8_fc(ea, REG_SFC));
\r
11140 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
\r
11144 /* Memory to data register */
\r
11145 REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_8(REG_D[(word2 >> 12) & 7]) | m68ki_read_8_fc(ea, REG_SFC);
\r
11146 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
\r
11150 m68ki_exception_privilege_violation();
\r
11153 m68ki_exception_illegal();
\r
11157 void m68k_op_moves_8_aw(void)
\r
11159 if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
\r
11163 uint word2 = OPER_I_16();
\r
11164 uint ea = EA_AW_8();
\r
11166 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
\r
11167 if(BIT_B(word2)) /* Register to memory */
\r
11169 m68ki_write_8_fc(ea, REG_DFC, MASK_OUT_ABOVE_8(REG_DA[(word2 >> 12) & 15]));
\r
11172 if(BIT_F(word2)) /* Memory to address register */
\r
11174 REG_A[(word2 >> 12) & 7] = MAKE_INT_8(m68ki_read_8_fc(ea, REG_SFC));
\r
11175 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
\r
11179 /* Memory to data register */
\r
11180 REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_8(REG_D[(word2 >> 12) & 7]) | m68ki_read_8_fc(ea, REG_SFC);
\r
11181 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
\r
11185 m68ki_exception_privilege_violation();
\r
11188 m68ki_exception_illegal();
\r
11192 void m68k_op_moves_8_al(void)
\r
11194 if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
\r
11198 uint word2 = OPER_I_16();
\r
11199 uint ea = EA_AL_8();
\r
11201 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
\r
11202 if(BIT_B(word2)) /* Register to memory */
\r
11204 m68ki_write_8_fc(ea, REG_DFC, MASK_OUT_ABOVE_8(REG_DA[(word2 >> 12) & 15]));
\r
11207 if(BIT_F(word2)) /* Memory to address register */
\r
11209 REG_A[(word2 >> 12) & 7] = MAKE_INT_8(m68ki_read_8_fc(ea, REG_SFC));
\r
11210 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
\r
11214 /* Memory to data register */
\r
11215 REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_8(REG_D[(word2 >> 12) & 7]) | m68ki_read_8_fc(ea, REG_SFC);
\r
11216 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
\r
11220 m68ki_exception_privilege_violation();
\r
11223 m68ki_exception_illegal();
\r
11227 void m68k_op_moves_16_ai(void)
\r
11229 if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
\r
11233 uint word2 = OPER_I_16();
\r
11234 uint ea = EA_AY_AI_16();
\r
11236 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
\r
11237 if(BIT_B(word2)) /* Register to memory */
\r
11239 m68ki_write_16_fc(ea, REG_DFC, MASK_OUT_ABOVE_16(REG_DA[(word2 >> 12) & 15]));
\r
11242 if(BIT_F(word2)) /* Memory to address register */
\r
11244 REG_A[(word2 >> 12) & 7] = MAKE_INT_16(m68ki_read_16_fc(ea, REG_SFC));
\r
11245 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
\r
11249 /* Memory to data register */
\r
11250 REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_16(REG_D[(word2 >> 12) & 7]) | m68ki_read_16_fc(ea, REG_SFC);
\r
11251 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
\r
11255 m68ki_exception_privilege_violation();
\r
11258 m68ki_exception_illegal();
\r
11262 void m68k_op_moves_16_pi(void)
\r
11264 if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
\r
11268 uint word2 = OPER_I_16();
\r
11269 uint ea = EA_AY_PI_16();
\r
11271 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
\r
11272 if(BIT_B(word2)) /* Register to memory */
\r
11274 m68ki_write_16_fc(ea, REG_DFC, MASK_OUT_ABOVE_16(REG_DA[(word2 >> 12) & 15]));
\r
11277 if(BIT_F(word2)) /* Memory to address register */
\r
11279 REG_A[(word2 >> 12) & 7] = MAKE_INT_16(m68ki_read_16_fc(ea, REG_SFC));
\r
11280 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
\r
11284 /* Memory to data register */
\r
11285 REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_16(REG_D[(word2 >> 12) & 7]) | m68ki_read_16_fc(ea, REG_SFC);
\r
11286 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
\r
11290 m68ki_exception_privilege_violation();
\r
11293 m68ki_exception_illegal();
\r
11297 void m68k_op_moves_16_pd(void)
\r
11299 if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
\r
11303 uint word2 = OPER_I_16();
\r
11304 uint ea = EA_AY_PD_16();
\r
11306 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
\r
11307 if(BIT_B(word2)) /* Register to memory */
\r
11309 m68ki_write_16_fc(ea, REG_DFC, MASK_OUT_ABOVE_16(REG_DA[(word2 >> 12) & 15]));
\r
11312 if(BIT_F(word2)) /* Memory to address register */
\r
11314 REG_A[(word2 >> 12) & 7] = MAKE_INT_16(m68ki_read_16_fc(ea, REG_SFC));
\r
11315 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
\r
11319 /* Memory to data register */
\r
11320 REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_16(REG_D[(word2 >> 12) & 7]) | m68ki_read_16_fc(ea, REG_SFC);
\r
11321 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
\r
11325 m68ki_exception_privilege_violation();
\r
11328 m68ki_exception_illegal();
\r
11332 void m68k_op_moves_16_di(void)
\r
11334 if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
\r
11338 uint word2 = OPER_I_16();
\r
11339 uint ea = EA_AY_DI_16();
\r
11341 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
\r
11342 if(BIT_B(word2)) /* Register to memory */
\r
11344 m68ki_write_16_fc(ea, REG_DFC, MASK_OUT_ABOVE_16(REG_DA[(word2 >> 12) & 15]));
\r
11347 if(BIT_F(word2)) /* Memory to address register */
\r
11349 REG_A[(word2 >> 12) & 7] = MAKE_INT_16(m68ki_read_16_fc(ea, REG_SFC));
\r
11350 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
\r
11354 /* Memory to data register */
\r
11355 REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_16(REG_D[(word2 >> 12) & 7]) | m68ki_read_16_fc(ea, REG_SFC);
\r
11356 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
\r
11360 m68ki_exception_privilege_violation();
\r
11363 m68ki_exception_illegal();
\r
11367 void m68k_op_moves_16_ix(void)
\r
11369 if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
\r
11373 uint word2 = OPER_I_16();
\r
11374 uint ea = EA_AY_IX_16();
\r
11376 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
\r
11377 if(BIT_B(word2)) /* Register to memory */
\r
11379 m68ki_write_16_fc(ea, REG_DFC, MASK_OUT_ABOVE_16(REG_DA[(word2 >> 12) & 15]));
\r
11382 if(BIT_F(word2)) /* Memory to address register */
\r
11384 REG_A[(word2 >> 12) & 7] = MAKE_INT_16(m68ki_read_16_fc(ea, REG_SFC));
\r
11385 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
\r
11389 /* Memory to data register */
\r
11390 REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_16(REG_D[(word2 >> 12) & 7]) | m68ki_read_16_fc(ea, REG_SFC);
\r
11391 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
\r
11395 m68ki_exception_privilege_violation();
\r
11398 m68ki_exception_illegal();
\r
11402 void m68k_op_moves_16_aw(void)
\r
11404 if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
\r
11408 uint word2 = OPER_I_16();
\r
11409 uint ea = EA_AW_16();
\r
11411 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
\r
11412 if(BIT_B(word2)) /* Register to memory */
\r
11414 m68ki_write_16_fc(ea, REG_DFC, MASK_OUT_ABOVE_16(REG_DA[(word2 >> 12) & 15]));
\r
11417 if(BIT_F(word2)) /* Memory to address register */
\r
11419 REG_A[(word2 >> 12) & 7] = MAKE_INT_16(m68ki_read_16_fc(ea, REG_SFC));
\r
11420 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
\r
11424 /* Memory to data register */
\r
11425 REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_16(REG_D[(word2 >> 12) & 7]) | m68ki_read_16_fc(ea, REG_SFC);
\r
11426 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
\r
11430 m68ki_exception_privilege_violation();
\r
11433 m68ki_exception_illegal();
\r
11437 void m68k_op_moves_16_al(void)
\r
11439 if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
\r
11443 uint word2 = OPER_I_16();
\r
11444 uint ea = EA_AL_16();
\r
11446 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
\r
11447 if(BIT_B(word2)) /* Register to memory */
\r
11449 m68ki_write_16_fc(ea, REG_DFC, MASK_OUT_ABOVE_16(REG_DA[(word2 >> 12) & 15]));
\r
11452 if(BIT_F(word2)) /* Memory to address register */
\r
11454 REG_A[(word2 >> 12) & 7] = MAKE_INT_16(m68ki_read_16_fc(ea, REG_SFC));
\r
11455 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
\r
11459 /* Memory to data register */
\r
11460 REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_16(REG_D[(word2 >> 12) & 7]) | m68ki_read_16_fc(ea, REG_SFC);
\r
11461 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
\r
11465 m68ki_exception_privilege_violation();
\r
11468 m68ki_exception_illegal();
\r
11472 void m68k_op_moves_32_ai(void)
\r
11474 if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
\r
11478 uint word2 = OPER_I_16();
\r
11479 uint ea = EA_AY_AI_32();
\r
11481 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
\r
11482 if(BIT_B(word2)) /* Register to memory */
\r
11484 m68ki_write_32_fc(ea, REG_DFC, REG_DA[(word2 >> 12) & 15]);
\r
11485 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
\r
11489 /* Memory to register */
\r
11490 REG_DA[(word2 >> 12) & 15] = m68ki_read_32_fc(ea, REG_SFC);
\r
11491 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
\r
11495 m68ki_exception_privilege_violation();
\r
11498 m68ki_exception_illegal();
\r
11502 void m68k_op_moves_32_pi(void)
\r
11504 if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
\r
11508 uint word2 = OPER_I_16();
\r
11509 uint ea = EA_AY_PI_32();
\r
11511 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
\r
11512 if(BIT_B(word2)) /* Register to memory */
\r
11514 m68ki_write_32_fc(ea, REG_DFC, REG_DA[(word2 >> 12) & 15]);
\r
11515 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
\r
11519 /* Memory to register */
\r
11520 REG_DA[(word2 >> 12) & 15] = m68ki_read_32_fc(ea, REG_SFC);
\r
11521 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
\r
11525 m68ki_exception_privilege_violation();
\r
11528 m68ki_exception_illegal();
\r
11532 void m68k_op_moves_32_pd(void)
\r
11534 if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
\r
11538 uint word2 = OPER_I_16();
\r
11539 uint ea = EA_AY_PD_32();
\r
11541 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
\r
11542 if(BIT_B(word2)) /* Register to memory */
\r
11544 m68ki_write_32_fc(ea, REG_DFC, REG_DA[(word2 >> 12) & 15]);
\r
11545 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
\r
11549 /* Memory to register */
\r
11550 REG_DA[(word2 >> 12) & 15] = m68ki_read_32_fc(ea, REG_SFC);
\r
11551 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
\r
11555 m68ki_exception_privilege_violation();
\r
11558 m68ki_exception_illegal();
\r
11562 void m68k_op_moves_32_di(void)
\r
11564 if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
\r
11568 uint word2 = OPER_I_16();
\r
11569 uint ea = EA_AY_DI_32();
\r
11571 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
\r
11572 if(BIT_B(word2)) /* Register to memory */
\r
11574 m68ki_write_32_fc(ea, REG_DFC, REG_DA[(word2 >> 12) & 15]);
\r
11575 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
\r
11579 /* Memory to register */
\r
11580 REG_DA[(word2 >> 12) & 15] = m68ki_read_32_fc(ea, REG_SFC);
\r
11581 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
\r
11585 m68ki_exception_privilege_violation();
\r
11588 m68ki_exception_illegal();
\r
11592 void m68k_op_moves_32_ix(void)
\r
11594 if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
\r
11598 uint word2 = OPER_I_16();
\r
11599 uint ea = EA_AY_IX_32();
\r
11601 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
\r
11602 if(BIT_B(word2)) /* Register to memory */
\r
11604 m68ki_write_32_fc(ea, REG_DFC, REG_DA[(word2 >> 12) & 15]);
\r
11605 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
\r
11609 /* Memory to register */
\r
11610 REG_DA[(word2 >> 12) & 15] = m68ki_read_32_fc(ea, REG_SFC);
\r
11611 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
\r
11615 m68ki_exception_privilege_violation();
\r
11618 m68ki_exception_illegal();
\r
11622 void m68k_op_moves_32_aw(void)
\r
11624 if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
\r
11628 uint word2 = OPER_I_16();
\r
11629 uint ea = EA_AW_32();
\r
11631 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
\r
11632 if(BIT_B(word2)) /* Register to memory */
\r
11634 m68ki_write_32_fc(ea, REG_DFC, REG_DA[(word2 >> 12) & 15]);
\r
11635 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
\r
11639 /* Memory to register */
\r
11640 REG_DA[(word2 >> 12) & 15] = m68ki_read_32_fc(ea, REG_SFC);
\r
11641 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
\r
11645 m68ki_exception_privilege_violation();
\r
11648 m68ki_exception_illegal();
\r
11652 void m68k_op_moves_32_al(void)
\r
11654 if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
\r
11658 uint word2 = OPER_I_16();
\r
11659 uint ea = EA_AL_32();
\r
11661 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
\r
11662 if(BIT_B(word2)) /* Register to memory */
\r
11664 m68ki_write_32_fc(ea, REG_DFC, REG_DA[(word2 >> 12) & 15]);
\r
11665 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
\r
11669 /* Memory to register */
\r
11670 REG_DA[(word2 >> 12) & 15] = m68ki_read_32_fc(ea, REG_SFC);
\r
11671 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
\r
11675 m68ki_exception_privilege_violation();
\r
11678 m68ki_exception_illegal();
\r
11682 void m68k_op_moveq_32(void)
\r
11684 uint res = DX = MAKE_INT_8(MASK_OUT_ABOVE_8(REG_IR));
\r
11686 FLAG_N = NFLAG_32(res);
\r
11688 FLAG_V = VFLAG_CLEAR;
\r
11689 FLAG_C = CFLAG_CLEAR;
\r
11693 void m68k_op_move16_32(void)
\r
11695 UINT16 w2 = OPER_I_16();
\r
11696 int ax = REG_IR & 7;
\r
11697 int ay = (w2 >> 12) & 7;
\r
11699 m68ki_write_32(REG_A[ay], m68ki_read_32(REG_A[ax]));
\r
11700 m68ki_write_32(REG_A[ay]+4, m68ki_read_32(REG_A[ax]+4));
\r
11701 m68ki_write_32(REG_A[ay]+8, m68ki_read_32(REG_A[ax]+8));
\r
11702 m68ki_write_32(REG_A[ay]+12, m68ki_read_32(REG_A[ax]+12));
\r
11709 void m68k_op_muls_16_d(void)
\r
11711 uint* r_dst = &DX;
\r
11712 uint res = MASK_OUT_ABOVE_32(MAKE_INT_16(DY) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst)));
\r
11717 FLAG_N = NFLAG_32(res);
\r
11718 FLAG_V = VFLAG_CLEAR;
\r
11719 FLAG_C = CFLAG_CLEAR;
\r
11723 void m68k_op_muls_16_ai(void)
\r
11725 uint* r_dst = &DX;
\r
11726 uint res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_AY_AI_16()) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst)));
\r
11731 FLAG_N = NFLAG_32(res);
\r
11732 FLAG_V = VFLAG_CLEAR;
\r
11733 FLAG_C = CFLAG_CLEAR;
\r
11737 void m68k_op_muls_16_pi(void)
\r
11739 uint* r_dst = &DX;
\r
11740 uint res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_AY_PI_16()) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst)));
\r
11745 FLAG_N = NFLAG_32(res);
\r
11746 FLAG_V = VFLAG_CLEAR;
\r
11747 FLAG_C = CFLAG_CLEAR;
\r
11751 void m68k_op_muls_16_pd(void)
\r
11753 uint* r_dst = &DX;
\r
11754 uint res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_AY_PD_16()) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst)));
\r
11759 FLAG_N = NFLAG_32(res);
\r
11760 FLAG_V = VFLAG_CLEAR;
\r
11761 FLAG_C = CFLAG_CLEAR;
\r
11765 void m68k_op_muls_16_di(void)
\r
11767 uint* r_dst = &DX;
\r
11768 uint res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_AY_DI_16()) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst)));
\r
11773 FLAG_N = NFLAG_32(res);
\r
11774 FLAG_V = VFLAG_CLEAR;
\r
11775 FLAG_C = CFLAG_CLEAR;
\r
11779 void m68k_op_muls_16_ix(void)
\r
11781 uint* r_dst = &DX;
\r
11782 uint res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_AY_IX_16()) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst)));
\r
11787 FLAG_N = NFLAG_32(res);
\r
11788 FLAG_V = VFLAG_CLEAR;
\r
11789 FLAG_C = CFLAG_CLEAR;
\r
11793 void m68k_op_muls_16_aw(void)
\r
11795 uint* r_dst = &DX;
\r
11796 uint res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_AW_16()) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst)));
\r
11801 FLAG_N = NFLAG_32(res);
\r
11802 FLAG_V = VFLAG_CLEAR;
\r
11803 FLAG_C = CFLAG_CLEAR;
\r
11807 void m68k_op_muls_16_al(void)
\r
11809 uint* r_dst = &DX;
\r
11810 uint res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_AL_16()) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst)));
\r
11815 FLAG_N = NFLAG_32(res);
\r
11816 FLAG_V = VFLAG_CLEAR;
\r
11817 FLAG_C = CFLAG_CLEAR;
\r
11821 void m68k_op_muls_16_pcdi(void)
\r
11823 uint* r_dst = &DX;
\r
11824 uint res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_PCDI_16()) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst)));
\r
11829 FLAG_N = NFLAG_32(res);
\r
11830 FLAG_V = VFLAG_CLEAR;
\r
11831 FLAG_C = CFLAG_CLEAR;
\r
11835 void m68k_op_muls_16_pcix(void)
\r
11837 uint* r_dst = &DX;
\r
11838 uint res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_PCIX_16()) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst)));
\r
11843 FLAG_N = NFLAG_32(res);
\r
11844 FLAG_V = VFLAG_CLEAR;
\r
11845 FLAG_C = CFLAG_CLEAR;
\r
11849 void m68k_op_muls_16_i(void)
\r
11851 uint* r_dst = &DX;
\r
11852 uint res = MASK_OUT_ABOVE_32(MAKE_INT_16(OPER_I_16()) * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst)));
\r
11857 FLAG_N = NFLAG_32(res);
\r
11858 FLAG_V = VFLAG_CLEAR;
\r
11859 FLAG_C = CFLAG_CLEAR;
\r
11863 void m68k_op_mulu_16_d(void)
\r
11865 uint* r_dst = &DX;
\r
11866 uint res = MASK_OUT_ABOVE_16(DY) * MASK_OUT_ABOVE_16(*r_dst);
\r
11871 FLAG_N = NFLAG_32(res);
\r
11872 FLAG_V = VFLAG_CLEAR;
\r
11873 FLAG_C = CFLAG_CLEAR;
\r
11877 void m68k_op_mulu_16_ai(void)
\r
11879 uint* r_dst = &DX;
\r
11880 uint res = OPER_AY_AI_16() * MASK_OUT_ABOVE_16(*r_dst);
\r
11885 FLAG_N = NFLAG_32(res);
\r
11886 FLAG_V = VFLAG_CLEAR;
\r
11887 FLAG_C = CFLAG_CLEAR;
\r
11891 void m68k_op_mulu_16_pi(void)
\r
11893 uint* r_dst = &DX;
\r
11894 uint res = OPER_AY_PI_16() * MASK_OUT_ABOVE_16(*r_dst);
\r
11899 FLAG_N = NFLAG_32(res);
\r
11900 FLAG_V = VFLAG_CLEAR;
\r
11901 FLAG_C = CFLAG_CLEAR;
\r
11905 void m68k_op_mulu_16_pd(void)
\r
11907 uint* r_dst = &DX;
\r
11908 uint res = OPER_AY_PD_16() * MASK_OUT_ABOVE_16(*r_dst);
\r
11913 FLAG_N = NFLAG_32(res);
\r
11914 FLAG_V = VFLAG_CLEAR;
\r
11915 FLAG_C = CFLAG_CLEAR;
\r
11919 void m68k_op_mulu_16_di(void)
\r
11921 uint* r_dst = &DX;
\r
11922 uint res = OPER_AY_DI_16() * MASK_OUT_ABOVE_16(*r_dst);
\r
11927 FLAG_N = NFLAG_32(res);
\r
11928 FLAG_V = VFLAG_CLEAR;
\r
11929 FLAG_C = CFLAG_CLEAR;
\r
11933 void m68k_op_mulu_16_ix(void)
\r
11935 uint* r_dst = &DX;
\r
11936 uint res = OPER_AY_IX_16() * MASK_OUT_ABOVE_16(*r_dst);
\r
11941 FLAG_N = NFLAG_32(res);
\r
11942 FLAG_V = VFLAG_CLEAR;
\r
11943 FLAG_C = CFLAG_CLEAR;
\r
11947 void m68k_op_mulu_16_aw(void)
\r
11949 uint* r_dst = &DX;
\r
11950 uint res = OPER_AW_16() * MASK_OUT_ABOVE_16(*r_dst);
\r
11955 FLAG_N = NFLAG_32(res);
\r
11956 FLAG_V = VFLAG_CLEAR;
\r
11957 FLAG_C = CFLAG_CLEAR;
\r
11961 void m68k_op_mulu_16_al(void)
\r
11963 uint* r_dst = &DX;
\r
11964 uint res = OPER_AL_16() * MASK_OUT_ABOVE_16(*r_dst);
\r
11969 FLAG_N = NFLAG_32(res);
\r
11970 FLAG_V = VFLAG_CLEAR;
\r
11971 FLAG_C = CFLAG_CLEAR;
\r
11975 void m68k_op_mulu_16_pcdi(void)
\r
11977 uint* r_dst = &DX;
\r
11978 uint res = OPER_PCDI_16() * MASK_OUT_ABOVE_16(*r_dst);
\r
11983 FLAG_N = NFLAG_32(res);
\r
11984 FLAG_V = VFLAG_CLEAR;
\r
11985 FLAG_C = CFLAG_CLEAR;
\r
11989 void m68k_op_mulu_16_pcix(void)
\r
11991 uint* r_dst = &DX;
\r
11992 uint res = OPER_PCIX_16() * MASK_OUT_ABOVE_16(*r_dst);
\r
11997 FLAG_N = NFLAG_32(res);
\r
11998 FLAG_V = VFLAG_CLEAR;
\r
11999 FLAG_C = CFLAG_CLEAR;
\r
12003 void m68k_op_mulu_16_i(void)
\r
12005 uint* r_dst = &DX;
\r
12006 uint res = OPER_I_16() * MASK_OUT_ABOVE_16(*r_dst);
\r
12011 FLAG_N = NFLAG_32(res);
\r
12012 FLAG_V = VFLAG_CLEAR;
\r
12013 FLAG_C = CFLAG_CLEAR;
\r
12017 void m68k_op_mull_32_d(void)
\r
12019 #if M68K_USE_64_BIT
\r
12021 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
\r
12023 uint word2 = OPER_I_16();
\r
12025 uint64 dst = REG_D[(word2 >> 12) & 7];
\r
12028 FLAG_C = CFLAG_CLEAR;
\r
12030 if(BIT_B(word2)) /* signed */
\r
12032 res = (sint64)((sint32)src) * (sint64)((sint32)dst);
\r
12033 if(!BIT_A(word2))
\r
12035 FLAG_Z = MASK_OUT_ABOVE_32(res);
\r
12036 FLAG_N = NFLAG_32(res);
\r
12037 FLAG_V = ((sint64)res != (sint32)res)<<7;
\r
12038 REG_D[(word2 >> 12) & 7] = FLAG_Z;
\r
12041 FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);
\r
12042 FLAG_N = NFLAG_64(res);
\r
12043 FLAG_V = VFLAG_CLEAR;
\r
12044 REG_D[word2 & 7] = (res >> 32);
\r
12045 REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
\r
12050 if(!BIT_A(word2))
\r
12052 FLAG_Z = MASK_OUT_ABOVE_32(res);
\r
12053 FLAG_N = NFLAG_32(res);
\r
12054 FLAG_V = (res > 0xffffffff)<<7;
\r
12055 REG_D[(word2 >> 12) & 7] = FLAG_Z;
\r
12058 FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);
\r
12059 FLAG_N = NFLAG_64(res);
\r
12060 FLAG_V = VFLAG_CLEAR;
\r
12061 REG_D[word2 & 7] = (res >> 32);
\r
12062 REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
\r
12065 m68ki_exception_illegal();
\r
12069 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
\r
12071 uint word2 = OPER_I_16();
\r
12073 uint dst = REG_D[(word2 >> 12) & 7];
\r
12074 uint neg = GET_MSB_32(src ^ dst);
\r
12086 FLAG_C = CFLAG_CLEAR;
\r
12088 if(BIT_B(word2)) /* signed */
\r
12090 if(GET_MSB_32(src))
\r
12091 src = (uint)MASK_OUT_ABOVE_32(-(sint)src);
\r
12092 if(GET_MSB_32(dst))
\r
12093 dst = (uint)MASK_OUT_ABOVE_32(-(sint)dst);
\r
12096 src1 = MASK_OUT_ABOVE_16(src);
\r
12098 dst1 = MASK_OUT_ABOVE_16(dst);
\r
12102 r1 = src1 * dst1;
\r
12103 r2 = src1 * dst2;
\r
12104 r3 = src2 * dst1;
\r
12105 r4 = src2 * dst2;
\r
12107 lo = r1 + (MASK_OUT_ABOVE_16(r2)<<16) + (MASK_OUT_ABOVE_16(r3)<<16);
\r
12108 hi = r4 + (r2>>16) + (r3>>16) + (((r1>>16) + MASK_OUT_ABOVE_16(r2) + MASK_OUT_ABOVE_16(r3)) >> 16);
\r
12110 if(BIT_B(word2) && neg)
\r
12112 hi = (uint)MASK_OUT_ABOVE_32((-(sint)hi) - (lo != 0));
\r
12113 lo = (uint)MASK_OUT_ABOVE_32(-(sint)lo);
\r
12118 REG_D[word2 & 7] = hi;
\r
12119 REG_D[(word2 >> 12) & 7] = lo;
\r
12120 FLAG_N = NFLAG_32(hi);
\r
12121 FLAG_Z = hi | lo;
\r
12122 FLAG_V = VFLAG_CLEAR;
\r
12126 REG_D[(word2 >> 12) & 7] = lo;
\r
12127 FLAG_N = NFLAG_32(lo);
\r
12130 FLAG_V = (!((GET_MSB_32(lo) && hi == 0xffffffff) || (!GET_MSB_32(lo) && !hi)))<<7;
\r
12132 FLAG_V = (hi != 0) << 7;
\r
12135 m68ki_exception_illegal();
\r
12141 void m68k_op_mull_32_ai(void)
\r
12143 #if M68K_USE_64_BIT
\r
12145 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
\r
12147 uint word2 = OPER_I_16();
\r
12148 uint64 src = OPER_AY_AI_32();
\r
12149 uint64 dst = REG_D[(word2 >> 12) & 7];
\r
12152 FLAG_C = CFLAG_CLEAR;
\r
12154 if(BIT_B(word2)) /* signed */
\r
12156 res = (sint64)((sint32)src) * (sint64)((sint32)dst);
\r
12157 if(!BIT_A(word2))
\r
12159 FLAG_Z = MASK_OUT_ABOVE_32(res);
\r
12160 FLAG_N = NFLAG_32(res);
\r
12161 FLAG_V = ((sint64)res != (sint32)res)<<7;
\r
12162 REG_D[(word2 >> 12) & 7] = FLAG_Z;
\r
12165 FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);
\r
12166 FLAG_N = NFLAG_64(res);
\r
12167 FLAG_V = VFLAG_CLEAR;
\r
12168 REG_D[word2 & 7] = (res >> 32);
\r
12169 REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
\r
12174 if(!BIT_A(word2))
\r
12176 FLAG_Z = MASK_OUT_ABOVE_32(res);
\r
12177 FLAG_N = NFLAG_32(res);
\r
12178 FLAG_V = (res > 0xffffffff)<<7;
\r
12179 REG_D[(word2 >> 12) & 7] = FLAG_Z;
\r
12182 FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);
\r
12183 FLAG_N = NFLAG_64(res);
\r
12184 FLAG_V = VFLAG_CLEAR;
\r
12185 REG_D[word2 & 7] = (res >> 32);
\r
12186 REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
\r
12189 m68ki_exception_illegal();
\r
12193 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
\r
12195 uint word2 = OPER_I_16();
\r
12196 uint src = OPER_AY_AI_32();
\r
12197 uint dst = REG_D[(word2 >> 12) & 7];
\r
12198 uint neg = GET_MSB_32(src ^ dst);
\r
12210 FLAG_C = CFLAG_CLEAR;
\r
12212 if(BIT_B(word2)) /* signed */
\r
12214 if(GET_MSB_32(src))
\r
12215 src = (uint)MASK_OUT_ABOVE_32(-(sint)src);
\r
12216 if(GET_MSB_32(dst))
\r
12217 dst = (uint)MASK_OUT_ABOVE_32(-(sint)dst);
\r
12220 src1 = MASK_OUT_ABOVE_16(src);
\r
12222 dst1 = MASK_OUT_ABOVE_16(dst);
\r
12226 r1 = src1 * dst1;
\r
12227 r2 = src1 * dst2;
\r
12228 r3 = src2 * dst1;
\r
12229 r4 = src2 * dst2;
\r
12231 lo = r1 + (MASK_OUT_ABOVE_16(r2)<<16) + (MASK_OUT_ABOVE_16(r3)<<16);
\r
12232 hi = r4 + (r2>>16) + (r3>>16) + (((r1>>16) + MASK_OUT_ABOVE_16(r2) + MASK_OUT_ABOVE_16(r3)) >> 16);
\r
12234 if(BIT_B(word2) && neg)
\r
12236 hi = (uint)MASK_OUT_ABOVE_32((-(sint)hi) - (lo != 0));
\r
12237 lo = (uint)MASK_OUT_ABOVE_32(-(sint)lo);
\r
12242 REG_D[word2 & 7] = hi;
\r
12243 REG_D[(word2 >> 12) & 7] = lo;
\r
12244 FLAG_N = NFLAG_32(hi);
\r
12245 FLAG_Z = hi | lo;
\r
12246 FLAG_V = VFLAG_CLEAR;
\r
12250 REG_D[(word2 >> 12) & 7] = lo;
\r
12251 FLAG_N = NFLAG_32(lo);
\r
12254 FLAG_V = (!((GET_MSB_32(lo) && hi == 0xffffffff) || (!GET_MSB_32(lo) && !hi)))<<7;
\r
12256 FLAG_V = (hi != 0) << 7;
\r
12259 m68ki_exception_illegal();
\r
12265 void m68k_op_mull_32_pi(void)
\r
12267 #if M68K_USE_64_BIT
\r
12269 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
\r
12271 uint word2 = OPER_I_16();
\r
12272 uint64 src = OPER_AY_PI_32();
\r
12273 uint64 dst = REG_D[(word2 >> 12) & 7];
\r
12276 FLAG_C = CFLAG_CLEAR;
\r
12278 if(BIT_B(word2)) /* signed */
\r
12280 res = (sint64)((sint32)src) * (sint64)((sint32)dst);
\r
12281 if(!BIT_A(word2))
\r
12283 FLAG_Z = MASK_OUT_ABOVE_32(res);
\r
12284 FLAG_N = NFLAG_32(res);
\r
12285 FLAG_V = ((sint64)res != (sint32)res)<<7;
\r
12286 REG_D[(word2 >> 12) & 7] = FLAG_Z;
\r
12289 FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);
\r
12290 FLAG_N = NFLAG_64(res);
\r
12291 FLAG_V = VFLAG_CLEAR;
\r
12292 REG_D[word2 & 7] = (res >> 32);
\r
12293 REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
\r
12298 if(!BIT_A(word2))
\r
12300 FLAG_Z = MASK_OUT_ABOVE_32(res);
\r
12301 FLAG_N = NFLAG_32(res);
\r
12302 FLAG_V = (res > 0xffffffff)<<7;
\r
12303 REG_D[(word2 >> 12) & 7] = FLAG_Z;
\r
12306 FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);
\r
12307 FLAG_N = NFLAG_64(res);
\r
12308 FLAG_V = VFLAG_CLEAR;
\r
12309 REG_D[word2 & 7] = (res >> 32);
\r
12310 REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
\r
12313 m68ki_exception_illegal();
\r
12317 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
\r
12319 uint word2 = OPER_I_16();
\r
12320 uint src = OPER_AY_PI_32();
\r
12321 uint dst = REG_D[(word2 >> 12) & 7];
\r
12322 uint neg = GET_MSB_32(src ^ dst);
\r
12334 FLAG_C = CFLAG_CLEAR;
\r
12336 if(BIT_B(word2)) /* signed */
\r
12338 if(GET_MSB_32(src))
\r
12339 src = (uint)MASK_OUT_ABOVE_32(-(sint)src);
\r
12340 if(GET_MSB_32(dst))
\r
12341 dst = (uint)MASK_OUT_ABOVE_32(-(sint)dst);
\r
12344 src1 = MASK_OUT_ABOVE_16(src);
\r
12346 dst1 = MASK_OUT_ABOVE_16(dst);
\r
12350 r1 = src1 * dst1;
\r
12351 r2 = src1 * dst2;
\r
12352 r3 = src2 * dst1;
\r
12353 r4 = src2 * dst2;
\r
12355 lo = r1 + (MASK_OUT_ABOVE_16(r2)<<16) + (MASK_OUT_ABOVE_16(r3)<<16);
\r
12356 hi = r4 + (r2>>16) + (r3>>16) + (((r1>>16) + MASK_OUT_ABOVE_16(r2) + MASK_OUT_ABOVE_16(r3)) >> 16);
\r
12358 if(BIT_B(word2) && neg)
\r
12360 hi = (uint)MASK_OUT_ABOVE_32((-(sint)hi) - (lo != 0));
\r
12361 lo = (uint)MASK_OUT_ABOVE_32(-(sint)lo);
\r
12366 REG_D[word2 & 7] = hi;
\r
12367 REG_D[(word2 >> 12) & 7] = lo;
\r
12368 FLAG_N = NFLAG_32(hi);
\r
12369 FLAG_Z = hi | lo;
\r
12370 FLAG_V = VFLAG_CLEAR;
\r
12374 REG_D[(word2 >> 12) & 7] = lo;
\r
12375 FLAG_N = NFLAG_32(lo);
\r
12378 FLAG_V = (!((GET_MSB_32(lo) && hi == 0xffffffff) || (!GET_MSB_32(lo) && !hi)))<<7;
\r
12380 FLAG_V = (hi != 0) << 7;
\r
12383 m68ki_exception_illegal();
\r
12389 void m68k_op_mull_32_pd(void)
\r
12391 #if M68K_USE_64_BIT
\r
12393 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
\r
12395 uint word2 = OPER_I_16();
\r
12396 uint64 src = OPER_AY_PD_32();
\r
12397 uint64 dst = REG_D[(word2 >> 12) & 7];
\r
12400 FLAG_C = CFLAG_CLEAR;
\r
12402 if(BIT_B(word2)) /* signed */
\r
12404 res = (sint64)((sint32)src) * (sint64)((sint32)dst);
\r
12405 if(!BIT_A(word2))
\r
12407 FLAG_Z = MASK_OUT_ABOVE_32(res);
\r
12408 FLAG_N = NFLAG_32(res);
\r
12409 FLAG_V = ((sint64)res != (sint32)res)<<7;
\r
12410 REG_D[(word2 >> 12) & 7] = FLAG_Z;
\r
12413 FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);
\r
12414 FLAG_N = NFLAG_64(res);
\r
12415 FLAG_V = VFLAG_CLEAR;
\r
12416 REG_D[word2 & 7] = (res >> 32);
\r
12417 REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
\r
12422 if(!BIT_A(word2))
\r
12424 FLAG_Z = MASK_OUT_ABOVE_32(res);
\r
12425 FLAG_N = NFLAG_32(res);
\r
12426 FLAG_V = (res > 0xffffffff)<<7;
\r
12427 REG_D[(word2 >> 12) & 7] = FLAG_Z;
\r
12430 FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);
\r
12431 FLAG_N = NFLAG_64(res);
\r
12432 FLAG_V = VFLAG_CLEAR;
\r
12433 REG_D[word2 & 7] = (res >> 32);
\r
12434 REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
\r
12437 m68ki_exception_illegal();
\r
12441 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
\r
12443 uint word2 = OPER_I_16();
\r
12444 uint src = OPER_AY_PD_32();
\r
12445 uint dst = REG_D[(word2 >> 12) & 7];
\r
12446 uint neg = GET_MSB_32(src ^ dst);
\r
12458 FLAG_C = CFLAG_CLEAR;
\r
12460 if(BIT_B(word2)) /* signed */
\r
12462 if(GET_MSB_32(src))
\r
12463 src = (uint)MASK_OUT_ABOVE_32(-(sint)src);
\r
12464 if(GET_MSB_32(dst))
\r
12465 dst = (uint)MASK_OUT_ABOVE_32(-(sint)dst);
\r
12468 src1 = MASK_OUT_ABOVE_16(src);
\r
12470 dst1 = MASK_OUT_ABOVE_16(dst);
\r
12474 r1 = src1 * dst1;
\r
12475 r2 = src1 * dst2;
\r
12476 r3 = src2 * dst1;
\r
12477 r4 = src2 * dst2;
\r
12479 lo = r1 + (MASK_OUT_ABOVE_16(r2)<<16) + (MASK_OUT_ABOVE_16(r3)<<16);
\r
12480 hi = r4 + (r2>>16) + (r3>>16) + (((r1>>16) + MASK_OUT_ABOVE_16(r2) + MASK_OUT_ABOVE_16(r3)) >> 16);
\r
12482 if(BIT_B(word2) && neg)
\r
12484 hi = (uint)MASK_OUT_ABOVE_32((-(sint)hi) - (lo != 0));
\r
12485 lo = (uint)MASK_OUT_ABOVE_32(-(sint)lo);
\r
12490 REG_D[word2 & 7] = hi;
\r
12491 REG_D[(word2 >> 12) & 7] = lo;
\r
12492 FLAG_N = NFLAG_32(hi);
\r
12493 FLAG_Z = hi | lo;
\r
12494 FLAG_V = VFLAG_CLEAR;
\r
12498 REG_D[(word2 >> 12) & 7] = lo;
\r
12499 FLAG_N = NFLAG_32(lo);
\r
12502 FLAG_V = (!((GET_MSB_32(lo) && hi == 0xffffffff) || (!GET_MSB_32(lo) && !hi)))<<7;
\r
12504 FLAG_V = (hi != 0) << 7;
\r
12507 m68ki_exception_illegal();
\r
12513 void m68k_op_mull_32_di(void)
\r
12515 #if M68K_USE_64_BIT
\r
12517 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
\r
12519 uint word2 = OPER_I_16();
\r
12520 uint64 src = OPER_AY_DI_32();
\r
12521 uint64 dst = REG_D[(word2 >> 12) & 7];
\r
12524 FLAG_C = CFLAG_CLEAR;
\r
12526 if(BIT_B(word2)) /* signed */
\r
12528 res = (sint64)((sint32)src) * (sint64)((sint32)dst);
\r
12529 if(!BIT_A(word2))
\r
12531 FLAG_Z = MASK_OUT_ABOVE_32(res);
\r
12532 FLAG_N = NFLAG_32(res);
\r
12533 FLAG_V = ((sint64)res != (sint32)res)<<7;
\r
12534 REG_D[(word2 >> 12) & 7] = FLAG_Z;
\r
12537 FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);
\r
12538 FLAG_N = NFLAG_64(res);
\r
12539 FLAG_V = VFLAG_CLEAR;
\r
12540 REG_D[word2 & 7] = (res >> 32);
\r
12541 REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
\r
12546 if(!BIT_A(word2))
\r
12548 FLAG_Z = MASK_OUT_ABOVE_32(res);
\r
12549 FLAG_N = NFLAG_32(res);
\r
12550 FLAG_V = (res > 0xffffffff)<<7;
\r
12551 REG_D[(word2 >> 12) & 7] = FLAG_Z;
\r
12554 FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);
\r
12555 FLAG_N = NFLAG_64(res);
\r
12556 FLAG_V = VFLAG_CLEAR;
\r
12557 REG_D[word2 & 7] = (res >> 32);
\r
12558 REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
\r
12561 m68ki_exception_illegal();
\r
12565 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
\r
12567 uint word2 = OPER_I_16();
\r
12568 uint src = OPER_AY_DI_32();
\r
12569 uint dst = REG_D[(word2 >> 12) & 7];
\r
12570 uint neg = GET_MSB_32(src ^ dst);
\r
12582 FLAG_C = CFLAG_CLEAR;
\r
12584 if(BIT_B(word2)) /* signed */
\r
12586 if(GET_MSB_32(src))
\r
12587 src = (uint)MASK_OUT_ABOVE_32(-(sint)src);
\r
12588 if(GET_MSB_32(dst))
\r
12589 dst = (uint)MASK_OUT_ABOVE_32(-(sint)dst);
\r
12592 src1 = MASK_OUT_ABOVE_16(src);
\r
12594 dst1 = MASK_OUT_ABOVE_16(dst);
\r
12598 r1 = src1 * dst1;
\r
12599 r2 = src1 * dst2;
\r
12600 r3 = src2 * dst1;
\r
12601 r4 = src2 * dst2;
\r
12603 lo = r1 + (MASK_OUT_ABOVE_16(r2)<<16) + (MASK_OUT_ABOVE_16(r3)<<16);
\r
12604 hi = r4 + (r2>>16) + (r3>>16) + (((r1>>16) + MASK_OUT_ABOVE_16(r2) + MASK_OUT_ABOVE_16(r3)) >> 16);
\r
12606 if(BIT_B(word2) && neg)
\r
12608 hi = (uint)MASK_OUT_ABOVE_32((-(sint)hi) - (lo != 0));
\r
12609 lo = (uint)MASK_OUT_ABOVE_32(-(sint)lo);
\r
12614 REG_D[word2 & 7] = hi;
\r
12615 REG_D[(word2 >> 12) & 7] = lo;
\r
12616 FLAG_N = NFLAG_32(hi);
\r
12617 FLAG_Z = hi | lo;
\r
12618 FLAG_V = VFLAG_CLEAR;
\r
12622 REG_D[(word2 >> 12) & 7] = lo;
\r
12623 FLAG_N = NFLAG_32(lo);
\r
12626 FLAG_V = (!((GET_MSB_32(lo) && hi == 0xffffffff) || (!GET_MSB_32(lo) && !hi)))<<7;
\r
12628 FLAG_V = (hi != 0) << 7;
\r
12631 m68ki_exception_illegal();
\r
12637 void m68k_op_mull_32_ix(void)
\r
12639 #if M68K_USE_64_BIT
\r
12641 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
\r
12643 uint word2 = OPER_I_16();
\r
12644 uint64 src = OPER_AY_IX_32();
\r
12645 uint64 dst = REG_D[(word2 >> 12) & 7];
\r
12648 FLAG_C = CFLAG_CLEAR;
\r
12650 if(BIT_B(word2)) /* signed */
\r
12652 res = (sint64)((sint32)src) * (sint64)((sint32)dst);
\r
12653 if(!BIT_A(word2))
\r
12655 FLAG_Z = MASK_OUT_ABOVE_32(res);
\r
12656 FLAG_N = NFLAG_32(res);
\r
12657 FLAG_V = ((sint64)res != (sint32)res)<<7;
\r
12658 REG_D[(word2 >> 12) & 7] = FLAG_Z;
\r
12661 FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);
\r
12662 FLAG_N = NFLAG_64(res);
\r
12663 FLAG_V = VFLAG_CLEAR;
\r
12664 REG_D[word2 & 7] = (res >> 32);
\r
12665 REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
\r
12670 if(!BIT_A(word2))
\r
12672 FLAG_Z = MASK_OUT_ABOVE_32(res);
\r
12673 FLAG_N = NFLAG_32(res);
\r
12674 FLAG_V = (res > 0xffffffff)<<7;
\r
12675 REG_D[(word2 >> 12) & 7] = FLAG_Z;
\r
12678 FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);
\r
12679 FLAG_N = NFLAG_64(res);
\r
12680 FLAG_V = VFLAG_CLEAR;
\r
12681 REG_D[word2 & 7] = (res >> 32);
\r
12682 REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
\r
12685 m68ki_exception_illegal();
\r
12689 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
\r
12691 uint word2 = OPER_I_16();
\r
12692 uint src = OPER_AY_IX_32();
\r
12693 uint dst = REG_D[(word2 >> 12) & 7];
\r
12694 uint neg = GET_MSB_32(src ^ dst);
\r
12706 FLAG_C = CFLAG_CLEAR;
\r
12708 if(BIT_B(word2)) /* signed */
\r
12710 if(GET_MSB_32(src))
\r
12711 src = (uint)MASK_OUT_ABOVE_32(-(sint)src);
\r
12712 if(GET_MSB_32(dst))
\r
12713 dst = (uint)MASK_OUT_ABOVE_32(-(sint)dst);
\r
12716 src1 = MASK_OUT_ABOVE_16(src);
\r
12718 dst1 = MASK_OUT_ABOVE_16(dst);
\r
12722 r1 = src1 * dst1;
\r
12723 r2 = src1 * dst2;
\r
12724 r3 = src2 * dst1;
\r
12725 r4 = src2 * dst2;
\r
12727 lo = r1 + (MASK_OUT_ABOVE_16(r2)<<16) + (MASK_OUT_ABOVE_16(r3)<<16);
\r
12728 hi = r4 + (r2>>16) + (r3>>16) + (((r1>>16) + MASK_OUT_ABOVE_16(r2) + MASK_OUT_ABOVE_16(r3)) >> 16);
\r
12730 if(BIT_B(word2) && neg)
\r
12732 hi = (uint)MASK_OUT_ABOVE_32((-(sint)hi) - (lo != 0));
\r
12733 lo = (uint)MASK_OUT_ABOVE_32(-(sint)lo);
\r
12738 REG_D[word2 & 7] = hi;
\r
12739 REG_D[(word2 >> 12) & 7] = lo;
\r
12740 FLAG_N = NFLAG_32(hi);
\r
12741 FLAG_Z = hi | lo;
\r
12742 FLAG_V = VFLAG_CLEAR;
\r
12746 REG_D[(word2 >> 12) & 7] = lo;
\r
12747 FLAG_N = NFLAG_32(lo);
\r
12750 FLAG_V = (!((GET_MSB_32(lo) && hi == 0xffffffff) || (!GET_MSB_32(lo) && !hi)))<<7;
\r
12752 FLAG_V = (hi != 0) << 7;
\r
12755 m68ki_exception_illegal();
\r
12761 void m68k_op_mull_32_aw(void)
\r
12763 #if M68K_USE_64_BIT
\r
12765 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
\r
12767 uint word2 = OPER_I_16();
\r
12768 uint64 src = OPER_AW_32();
\r
12769 uint64 dst = REG_D[(word2 >> 12) & 7];
\r
12772 FLAG_C = CFLAG_CLEAR;
\r
12774 if(BIT_B(word2)) /* signed */
\r
12776 res = (sint64)((sint32)src) * (sint64)((sint32)dst);
\r
12777 if(!BIT_A(word2))
\r
12779 FLAG_Z = MASK_OUT_ABOVE_32(res);
\r
12780 FLAG_N = NFLAG_32(res);
\r
12781 FLAG_V = ((sint64)res != (sint32)res)<<7;
\r
12782 REG_D[(word2 >> 12) & 7] = FLAG_Z;
\r
12785 FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);
\r
12786 FLAG_N = NFLAG_64(res);
\r
12787 FLAG_V = VFLAG_CLEAR;
\r
12788 REG_D[word2 & 7] = (res >> 32);
\r
12789 REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
\r
12794 if(!BIT_A(word2))
\r
12796 FLAG_Z = MASK_OUT_ABOVE_32(res);
\r
12797 FLAG_N = NFLAG_32(res);
\r
12798 FLAG_V = (res > 0xffffffff)<<7;
\r
12799 REG_D[(word2 >> 12) & 7] = FLAG_Z;
\r
12802 FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);
\r
12803 FLAG_N = NFLAG_64(res);
\r
12804 FLAG_V = VFLAG_CLEAR;
\r
12805 REG_D[word2 & 7] = (res >> 32);
\r
12806 REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
\r
12809 m68ki_exception_illegal();
\r
12813 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
\r
12815 uint word2 = OPER_I_16();
\r
12816 uint src = OPER_AW_32();
\r
12817 uint dst = REG_D[(word2 >> 12) & 7];
\r
12818 uint neg = GET_MSB_32(src ^ dst);
\r
12830 FLAG_C = CFLAG_CLEAR;
\r
12832 if(BIT_B(word2)) /* signed */
\r
12834 if(GET_MSB_32(src))
\r
12835 src = (uint)MASK_OUT_ABOVE_32(-(sint)src);
\r
12836 if(GET_MSB_32(dst))
\r
12837 dst = (uint)MASK_OUT_ABOVE_32(-(sint)dst);
\r
12840 src1 = MASK_OUT_ABOVE_16(src);
\r
12842 dst1 = MASK_OUT_ABOVE_16(dst);
\r
12846 r1 = src1 * dst1;
\r
12847 r2 = src1 * dst2;
\r
12848 r3 = src2 * dst1;
\r
12849 r4 = src2 * dst2;
\r
12851 lo = r1 + (MASK_OUT_ABOVE_16(r2)<<16) + (MASK_OUT_ABOVE_16(r3)<<16);
\r
12852 hi = r4 + (r2>>16) + (r3>>16) + (((r1>>16) + MASK_OUT_ABOVE_16(r2) + MASK_OUT_ABOVE_16(r3)) >> 16);
\r
12854 if(BIT_B(word2) && neg)
\r
12856 hi = (uint)MASK_OUT_ABOVE_32((-(sint)hi) - (lo != 0));
\r
12857 lo = (uint)MASK_OUT_ABOVE_32(-(sint)lo);
\r
12862 REG_D[word2 & 7] = hi;
\r
12863 REG_D[(word2 >> 12) & 7] = lo;
\r
12864 FLAG_N = NFLAG_32(hi);
\r
12865 FLAG_Z = hi | lo;
\r
12866 FLAG_V = VFLAG_CLEAR;
\r
12870 REG_D[(word2 >> 12) & 7] = lo;
\r
12871 FLAG_N = NFLAG_32(lo);
\r
12874 FLAG_V = (!((GET_MSB_32(lo) && hi == 0xffffffff) || (!GET_MSB_32(lo) && !hi)))<<7;
\r
12876 FLAG_V = (hi != 0) << 7;
\r
12879 m68ki_exception_illegal();
\r
12885 void m68k_op_mull_32_al(void)
\r
12887 #if M68K_USE_64_BIT
\r
12889 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
\r
12891 uint word2 = OPER_I_16();
\r
12892 uint64 src = OPER_AL_32();
\r
12893 uint64 dst = REG_D[(word2 >> 12) & 7];
\r
12896 FLAG_C = CFLAG_CLEAR;
\r
12898 if(BIT_B(word2)) /* signed */
\r
12900 res = (sint64)((sint32)src) * (sint64)((sint32)dst);
\r
12901 if(!BIT_A(word2))
\r
12903 FLAG_Z = MASK_OUT_ABOVE_32(res);
\r
12904 FLAG_N = NFLAG_32(res);
\r
12905 FLAG_V = ((sint64)res != (sint32)res)<<7;
\r
12906 REG_D[(word2 >> 12) & 7] = FLAG_Z;
\r
12909 FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);
\r
12910 FLAG_N = NFLAG_64(res);
\r
12911 FLAG_V = VFLAG_CLEAR;
\r
12912 REG_D[word2 & 7] = (res >> 32);
\r
12913 REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
\r
12918 if(!BIT_A(word2))
\r
12920 FLAG_Z = MASK_OUT_ABOVE_32(res);
\r
12921 FLAG_N = NFLAG_32(res);
\r
12922 FLAG_V = (res > 0xffffffff)<<7;
\r
12923 REG_D[(word2 >> 12) & 7] = FLAG_Z;
\r
12926 FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);
\r
12927 FLAG_N = NFLAG_64(res);
\r
12928 FLAG_V = VFLAG_CLEAR;
\r
12929 REG_D[word2 & 7] = (res >> 32);
\r
12930 REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
\r
12933 m68ki_exception_illegal();
\r
12937 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
\r
12939 uint word2 = OPER_I_16();
\r
12940 uint src = OPER_AL_32();
\r
12941 uint dst = REG_D[(word2 >> 12) & 7];
\r
12942 uint neg = GET_MSB_32(src ^ dst);
\r
12954 FLAG_C = CFLAG_CLEAR;
\r
12956 if(BIT_B(word2)) /* signed */
\r
12958 if(GET_MSB_32(src))
\r
12959 src = (uint)MASK_OUT_ABOVE_32(-(sint)src);
\r
12960 if(GET_MSB_32(dst))
\r
12961 dst = (uint)MASK_OUT_ABOVE_32(-(sint)dst);
\r
12964 src1 = MASK_OUT_ABOVE_16(src);
\r
12966 dst1 = MASK_OUT_ABOVE_16(dst);
\r
12970 r1 = src1 * dst1;
\r
12971 r2 = src1 * dst2;
\r
12972 r3 = src2 * dst1;
\r
12973 r4 = src2 * dst2;
\r
12975 lo = r1 + (MASK_OUT_ABOVE_16(r2)<<16) + (MASK_OUT_ABOVE_16(r3)<<16);
\r
12976 hi = r4 + (r2>>16) + (r3>>16) + (((r1>>16) + MASK_OUT_ABOVE_16(r2) + MASK_OUT_ABOVE_16(r3)) >> 16);
\r
12978 if(BIT_B(word2) && neg)
\r
12980 hi = (uint)MASK_OUT_ABOVE_32((-(sint)hi) - (lo != 0));
\r
12981 lo = (uint)MASK_OUT_ABOVE_32(-(sint)lo);
\r
12986 REG_D[word2 & 7] = hi;
\r
12987 REG_D[(word2 >> 12) & 7] = lo;
\r
12988 FLAG_N = NFLAG_32(hi);
\r
12989 FLAG_Z = hi | lo;
\r
12990 FLAG_V = VFLAG_CLEAR;
\r
12994 REG_D[(word2 >> 12) & 7] = lo;
\r
12995 FLAG_N = NFLAG_32(lo);
\r
12998 FLAG_V = (!((GET_MSB_32(lo) && hi == 0xffffffff) || (!GET_MSB_32(lo) && !hi)))<<7;
\r
13000 FLAG_V = (hi != 0) << 7;
\r
13003 m68ki_exception_illegal();
\r
13009 void m68k_op_mull_32_pcdi(void)
\r
13011 #if M68K_USE_64_BIT
\r
13013 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
\r
13015 uint word2 = OPER_I_16();
\r
13016 uint64 src = OPER_PCDI_32();
\r
13017 uint64 dst = REG_D[(word2 >> 12) & 7];
\r
13020 FLAG_C = CFLAG_CLEAR;
\r
13022 if(BIT_B(word2)) /* signed */
\r
13024 res = (sint64)((sint32)src) * (sint64)((sint32)dst);
\r
13025 if(!BIT_A(word2))
\r
13027 FLAG_Z = MASK_OUT_ABOVE_32(res);
\r
13028 FLAG_N = NFLAG_32(res);
\r
13029 FLAG_V = ((sint64)res != (sint32)res)<<7;
\r
13030 REG_D[(word2 >> 12) & 7] = FLAG_Z;
\r
13033 FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);
\r
13034 FLAG_N = NFLAG_64(res);
\r
13035 FLAG_V = VFLAG_CLEAR;
\r
13036 REG_D[word2 & 7] = (res >> 32);
\r
13037 REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
\r
13042 if(!BIT_A(word2))
\r
13044 FLAG_Z = MASK_OUT_ABOVE_32(res);
\r
13045 FLAG_N = NFLAG_32(res);
\r
13046 FLAG_V = (res > 0xffffffff)<<7;
\r
13047 REG_D[(word2 >> 12) & 7] = FLAG_Z;
\r
13050 FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);
\r
13051 FLAG_N = NFLAG_64(res);
\r
13052 FLAG_V = VFLAG_CLEAR;
\r
13053 REG_D[word2 & 7] = (res >> 32);
\r
13054 REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
\r
13057 m68ki_exception_illegal();
\r
13061 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
\r
13063 uint word2 = OPER_I_16();
\r
13064 uint src = OPER_PCDI_32();
\r
13065 uint dst = REG_D[(word2 >> 12) & 7];
\r
13066 uint neg = GET_MSB_32(src ^ dst);
\r
13078 FLAG_C = CFLAG_CLEAR;
\r
13080 if(BIT_B(word2)) /* signed */
\r
13082 if(GET_MSB_32(src))
\r
13083 src = (uint)MASK_OUT_ABOVE_32(-(sint)src);
\r
13084 if(GET_MSB_32(dst))
\r
13085 dst = (uint)MASK_OUT_ABOVE_32(-(sint)dst);
\r
13088 src1 = MASK_OUT_ABOVE_16(src);
\r
13090 dst1 = MASK_OUT_ABOVE_16(dst);
\r
13094 r1 = src1 * dst1;
\r
13095 r2 = src1 * dst2;
\r
13096 r3 = src2 * dst1;
\r
13097 r4 = src2 * dst2;
\r
13099 lo = r1 + (MASK_OUT_ABOVE_16(r2)<<16) + (MASK_OUT_ABOVE_16(r3)<<16);
\r
13100 hi = r4 + (r2>>16) + (r3>>16) + (((r1>>16) + MASK_OUT_ABOVE_16(r2) + MASK_OUT_ABOVE_16(r3)) >> 16);
\r
13102 if(BIT_B(word2) && neg)
\r
13104 hi = (uint)MASK_OUT_ABOVE_32((-(sint)hi) - (lo != 0));
\r
13105 lo = (uint)MASK_OUT_ABOVE_32(-(sint)lo);
\r
13110 REG_D[word2 & 7] = hi;
\r
13111 REG_D[(word2 >> 12) & 7] = lo;
\r
13112 FLAG_N = NFLAG_32(hi);
\r
13113 FLAG_Z = hi | lo;
\r
13114 FLAG_V = VFLAG_CLEAR;
\r
13118 REG_D[(word2 >> 12) & 7] = lo;
\r
13119 FLAG_N = NFLAG_32(lo);
\r
13122 FLAG_V = (!((GET_MSB_32(lo) && hi == 0xffffffff) || (!GET_MSB_32(lo) && !hi)))<<7;
\r
13124 FLAG_V = (hi != 0) << 7;
\r
13127 m68ki_exception_illegal();
\r
13133 void m68k_op_mull_32_pcix(void)
\r
13135 #if M68K_USE_64_BIT
\r
13137 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
\r
13139 uint word2 = OPER_I_16();
\r
13140 uint64 src = OPER_PCIX_32();
\r
13141 uint64 dst = REG_D[(word2 >> 12) & 7];
\r
13144 FLAG_C = CFLAG_CLEAR;
\r
13146 if(BIT_B(word2)) /* signed */
\r
13148 res = (sint64)((sint32)src) * (sint64)((sint32)dst);
\r
13149 if(!BIT_A(word2))
\r
13151 FLAG_Z = MASK_OUT_ABOVE_32(res);
\r
13152 FLAG_N = NFLAG_32(res);
\r
13153 FLAG_V = ((sint64)res != (sint32)res)<<7;
\r
13154 REG_D[(word2 >> 12) & 7] = FLAG_Z;
\r
13157 FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);
\r
13158 FLAG_N = NFLAG_64(res);
\r
13159 FLAG_V = VFLAG_CLEAR;
\r
13160 REG_D[word2 & 7] = (res >> 32);
\r
13161 REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
\r
13166 if(!BIT_A(word2))
\r
13168 FLAG_Z = MASK_OUT_ABOVE_32(res);
\r
13169 FLAG_N = NFLAG_32(res);
\r
13170 FLAG_V = (res > 0xffffffff)<<7;
\r
13171 REG_D[(word2 >> 12) & 7] = FLAG_Z;
\r
13174 FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);
\r
13175 FLAG_N = NFLAG_64(res);
\r
13176 FLAG_V = VFLAG_CLEAR;
\r
13177 REG_D[word2 & 7] = (res >> 32);
\r
13178 REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
\r
13181 m68ki_exception_illegal();
\r
13185 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
\r
13187 uint word2 = OPER_I_16();
\r
13188 uint src = OPER_PCIX_32();
\r
13189 uint dst = REG_D[(word2 >> 12) & 7];
\r
13190 uint neg = GET_MSB_32(src ^ dst);
\r
13202 FLAG_C = CFLAG_CLEAR;
\r
13204 if(BIT_B(word2)) /* signed */
\r
13206 if(GET_MSB_32(src))
\r
13207 src = (uint)MASK_OUT_ABOVE_32(-(sint)src);
\r
13208 if(GET_MSB_32(dst))
\r
13209 dst = (uint)MASK_OUT_ABOVE_32(-(sint)dst);
\r
13212 src1 = MASK_OUT_ABOVE_16(src);
\r
13214 dst1 = MASK_OUT_ABOVE_16(dst);
\r
13218 r1 = src1 * dst1;
\r
13219 r2 = src1 * dst2;
\r
13220 r3 = src2 * dst1;
\r
13221 r4 = src2 * dst2;
\r
13223 lo = r1 + (MASK_OUT_ABOVE_16(r2)<<16) + (MASK_OUT_ABOVE_16(r3)<<16);
\r
13224 hi = r4 + (r2>>16) + (r3>>16) + (((r1>>16) + MASK_OUT_ABOVE_16(r2) + MASK_OUT_ABOVE_16(r3)) >> 16);
\r
13226 if(BIT_B(word2) && neg)
\r
13228 hi = (uint)MASK_OUT_ABOVE_32((-(sint)hi) - (lo != 0));
\r
13229 lo = (uint)MASK_OUT_ABOVE_32(-(sint)lo);
\r
13234 REG_D[word2 & 7] = hi;
\r
13235 REG_D[(word2 >> 12) & 7] = lo;
\r
13236 FLAG_N = NFLAG_32(hi);
\r
13237 FLAG_Z = hi | lo;
\r
13238 FLAG_V = VFLAG_CLEAR;
\r
13242 REG_D[(word2 >> 12) & 7] = lo;
\r
13243 FLAG_N = NFLAG_32(lo);
\r
13246 FLAG_V = (!((GET_MSB_32(lo) && hi == 0xffffffff) || (!GET_MSB_32(lo) && !hi)))<<7;
\r
13248 FLAG_V = (hi != 0) << 7;
\r
13251 m68ki_exception_illegal();
\r
13257 void m68k_op_mull_32_i(void)
\r
13259 #if M68K_USE_64_BIT
\r
13261 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
\r
13263 uint word2 = OPER_I_16();
\r
13264 uint64 src = OPER_I_32();
\r
13265 uint64 dst = REG_D[(word2 >> 12) & 7];
\r
13268 FLAG_C = CFLAG_CLEAR;
\r
13270 if(BIT_B(word2)) /* signed */
\r
13272 res = (sint64)((sint32)src) * (sint64)((sint32)dst);
\r
13273 if(!BIT_A(word2))
\r
13275 FLAG_Z = MASK_OUT_ABOVE_32(res);
\r
13276 FLAG_N = NFLAG_32(res);
\r
13277 FLAG_V = ((sint64)res != (sint32)res)<<7;
\r
13278 REG_D[(word2 >> 12) & 7] = FLAG_Z;
\r
13281 FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);
\r
13282 FLAG_N = NFLAG_64(res);
\r
13283 FLAG_V = VFLAG_CLEAR;
\r
13284 REG_D[word2 & 7] = (res >> 32);
\r
13285 REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
\r
13290 if(!BIT_A(word2))
\r
13292 FLAG_Z = MASK_OUT_ABOVE_32(res);
\r
13293 FLAG_N = NFLAG_32(res);
\r
13294 FLAG_V = (res > 0xffffffff)<<7;
\r
13295 REG_D[(word2 >> 12) & 7] = FLAG_Z;
\r
13298 FLAG_Z = MASK_OUT_ABOVE_32(res) | (res>>32);
\r
13299 FLAG_N = NFLAG_64(res);
\r
13300 FLAG_V = VFLAG_CLEAR;
\r
13301 REG_D[word2 & 7] = (res >> 32);
\r
13302 REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res);
\r
13305 m68ki_exception_illegal();
\r
13309 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
\r
13311 uint word2 = OPER_I_16();
\r
13312 uint src = OPER_I_32();
\r
13313 uint dst = REG_D[(word2 >> 12) & 7];
\r
13314 uint neg = GET_MSB_32(src ^ dst);
\r
13326 FLAG_C = CFLAG_CLEAR;
\r
13328 if(BIT_B(word2)) /* signed */
\r
13330 if(GET_MSB_32(src))
\r
13331 src = (uint)MASK_OUT_ABOVE_32(-(sint)src);
\r
13332 if(GET_MSB_32(dst))
\r
13333 dst = (uint)MASK_OUT_ABOVE_32(-(sint)dst);
\r
13336 src1 = MASK_OUT_ABOVE_16(src);
\r
13338 dst1 = MASK_OUT_ABOVE_16(dst);
\r
13342 r1 = src1 * dst1;
\r
13343 r2 = src1 * dst2;
\r
13344 r3 = src2 * dst1;
\r
13345 r4 = src2 * dst2;
\r
13347 lo = r1 + (MASK_OUT_ABOVE_16(r2)<<16) + (MASK_OUT_ABOVE_16(r3)<<16);
\r
13348 hi = r4 + (r2>>16) + (r3>>16) + (((r1>>16) + MASK_OUT_ABOVE_16(r2) + MASK_OUT_ABOVE_16(r3)) >> 16);
\r
13350 if(BIT_B(word2) && neg)
\r
13352 hi = (uint)MASK_OUT_ABOVE_32((-(sint)hi) - (lo != 0));
\r
13353 lo = (uint)MASK_OUT_ABOVE_32(-(sint)lo);
\r
13358 REG_D[word2 & 7] = hi;
\r
13359 REG_D[(word2 >> 12) & 7] = lo;
\r
13360 FLAG_N = NFLAG_32(hi);
\r
13361 FLAG_Z = hi | lo;
\r
13362 FLAG_V = VFLAG_CLEAR;
\r
13366 REG_D[(word2 >> 12) & 7] = lo;
\r
13367 FLAG_N = NFLAG_32(lo);
\r
13370 FLAG_V = (!((GET_MSB_32(lo) && hi == 0xffffffff) || (!GET_MSB_32(lo) && !hi)))<<7;
\r
13372 FLAG_V = (hi != 0) << 7;
\r
13375 m68ki_exception_illegal();
\r
13381 /* ======================================================================== */
\r
13382 /* ============================== END OF FILE ============================= */
\r
13383 /* ======================================================================== */
\r