various bugfixes
[picodrive.git] / cpu / fame / famec_opcodes.h
CommitLineData
70357ce5 1
2// ORI
3OPCODE(0x0000)
4{
5 u32 adr, res;
6 u32 src, dst;
7
8 FETCH_BYTE(src);
9 res = DREGu8((Opcode >> 0) & 7);
10 res |= src;
11 flag_C = 0;
12 flag_V = 0;
13 flag_NotZ = res;
14 flag_N = res;
15 DREGu8((Opcode >> 0) & 7) = res;
16RET(8)
17}
18
19// ORI
20OPCODE(0x0010)
21{
22 u32 adr, res;
23 u32 src, dst;
24
25 FETCH_BYTE(src);
26 adr = AREG((Opcode >> 0) & 7);
27 PRE_IO
28 READ_BYTE_F(adr, res)
29 res |= src;
30 flag_C = 0;
31 flag_V = 0;
32 flag_NotZ = res;
33 flag_N = res;
34 WRITE_BYTE_F(adr, res)
35 POST_IO
36RET(16)
37}
38
39// ORI
40OPCODE(0x0018)
41{
42 u32 adr, res;
43 u32 src, dst;
44
45 FETCH_BYTE(src);
46 adr = AREG((Opcode >> 0) & 7);
47 AREG((Opcode >> 0) & 7) += 1;
48 PRE_IO
49 READ_BYTE_F(adr, res)
50 res |= src;
51 flag_C = 0;
52 flag_V = 0;
53 flag_NotZ = res;
54 flag_N = res;
55 WRITE_BYTE_F(adr, res)
56 POST_IO
57RET(16)
58}
59
60// ORI
61OPCODE(0x0020)
62{
63 u32 adr, res;
64 u32 src, dst;
65
66 FETCH_BYTE(src);
67 adr = AREG((Opcode >> 0) & 7) - 1;
68 AREG((Opcode >> 0) & 7) = adr;
69 PRE_IO
70 READ_BYTE_F(adr, res)
71 res |= src;
72 flag_C = 0;
73 flag_V = 0;
74 flag_NotZ = res;
75 flag_N = res;
76 WRITE_BYTE_F(adr, res)
77 POST_IO
78RET(18)
79}
80
81// ORI
82OPCODE(0x0028)
83{
84 u32 adr, res;
85 u32 src, dst;
86
87 FETCH_BYTE(src);
88 FETCH_SWORD(adr);
89 adr += AREG((Opcode >> 0) & 7);
90 PRE_IO
91 READ_BYTE_F(adr, res)
92 res |= src;
93 flag_C = 0;
94 flag_V = 0;
95 flag_NotZ = res;
96 flag_N = res;
97 WRITE_BYTE_F(adr, res)
98 POST_IO
99RET(20)
100}
101
102// ORI
103OPCODE(0x0030)
104{
105 u32 adr, res;
106 u32 src, dst;
107
108 FETCH_BYTE(src);
109 adr = AREG((Opcode >> 0) & 7);
110 DECODE_EXT_WORD
111 PRE_IO
112 READ_BYTE_F(adr, res)
113 res |= src;
114 flag_C = 0;
115 flag_V = 0;
116 flag_NotZ = res;
117 flag_N = res;
118 WRITE_BYTE_F(adr, res)
119 POST_IO
120RET(22)
121}
122
123// ORI
124OPCODE(0x0038)
125{
126 u32 adr, res;
127 u32 src, dst;
128
129 FETCH_BYTE(src);
130 FETCH_SWORD(adr);
131 PRE_IO
132 READ_BYTE_F(adr, res)
133 res |= src;
134 flag_C = 0;
135 flag_V = 0;
136 flag_NotZ = res;
137 flag_N = res;
138 WRITE_BYTE_F(adr, res)
139 POST_IO
140RET(20)
141}
142
143// ORI
144OPCODE(0x0039)
145{
146 u32 adr, res;
147 u32 src, dst;
148
149 FETCH_BYTE(src);
150 FETCH_LONG(adr);
151 PRE_IO
152 READ_BYTE_F(adr, res)
153 res |= src;
154 flag_C = 0;
155 flag_V = 0;
156 flag_NotZ = res;
157 flag_N = res;
158 WRITE_BYTE_F(adr, res)
159 POST_IO
160RET(24)
161}
162
163// ORI
164OPCODE(0x001F)
165{
166 u32 adr, res;
167 u32 src, dst;
168
169 FETCH_BYTE(src);
170 adr = AREG(7);
171 AREG(7) += 2;
172 PRE_IO
173 READ_BYTE_F(adr, res)
174 res |= src;
175 flag_C = 0;
176 flag_V = 0;
177 flag_NotZ = res;
178 flag_N = res;
179 WRITE_BYTE_F(adr, res)
180 POST_IO
181RET(16)
182}
183
184// ORI
185OPCODE(0x0027)
186{
187 u32 adr, res;
188 u32 src, dst;
189
190 FETCH_BYTE(src);
191 adr = AREG(7) - 2;
192 AREG(7) = adr;
193 PRE_IO
194 READ_BYTE_F(adr, res)
195 res |= src;
196 flag_C = 0;
197 flag_V = 0;
198 flag_NotZ = res;
199 flag_N = res;
200 WRITE_BYTE_F(adr, res)
201 POST_IO
202RET(18)
203}
204
205// ORI
206OPCODE(0x0040)
207{
208 u32 adr, res;
209 u32 src, dst;
210
211 FETCH_WORD(src);
212 res = DREGu16((Opcode >> 0) & 7);
213 res |= src;
214 flag_C = 0;
215 flag_V = 0;
216 flag_NotZ = res;
217 flag_N = res >> 8;
218 DREGu16((Opcode >> 0) & 7) = res;
219RET(8)
220}
221
222// ORI
223OPCODE(0x0050)
224{
225 u32 adr, res;
226 u32 src, dst;
227
228 FETCH_WORD(src);
229 adr = AREG((Opcode >> 0) & 7);
230 PRE_IO
231 READ_WORD_F(adr, res)
232 res |= src;
233 flag_C = 0;
234 flag_V = 0;
235 flag_NotZ = res;
236 flag_N = res >> 8;
237 WRITE_WORD_F(adr, res)
238 POST_IO
239RET(16)
240}
241
242// ORI
243OPCODE(0x0058)
244{
245 u32 adr, res;
246 u32 src, dst;
247
248 FETCH_WORD(src);
249 adr = AREG((Opcode >> 0) & 7);
250 AREG((Opcode >> 0) & 7) += 2;
251 PRE_IO
252 READ_WORD_F(adr, res)
253 res |= src;
254 flag_C = 0;
255 flag_V = 0;
256 flag_NotZ = res;
257 flag_N = res >> 8;
258 WRITE_WORD_F(adr, res)
259 POST_IO
260RET(16)
261}
262
263// ORI
264OPCODE(0x0060)
265{
266 u32 adr, res;
267 u32 src, dst;
268
269 FETCH_WORD(src);
270 adr = AREG((Opcode >> 0) & 7) - 2;
271 AREG((Opcode >> 0) & 7) = adr;
272 PRE_IO
273 READ_WORD_F(adr, res)
274 res |= src;
275 flag_C = 0;
276 flag_V = 0;
277 flag_NotZ = res;
278 flag_N = res >> 8;
279 WRITE_WORD_F(adr, res)
280 POST_IO
281RET(18)
282}
283
284// ORI
285OPCODE(0x0068)
286{
287 u32 adr, res;
288 u32 src, dst;
289
290 FETCH_WORD(src);
291 FETCH_SWORD(adr);
292 adr += AREG((Opcode >> 0) & 7);
293 PRE_IO
294 READ_WORD_F(adr, res)
295 res |= src;
296 flag_C = 0;
297 flag_V = 0;
298 flag_NotZ = res;
299 flag_N = res >> 8;
300 WRITE_WORD_F(adr, res)
301 POST_IO
302RET(20)
303}
304
305// ORI
306OPCODE(0x0070)
307{
308 u32 adr, res;
309 u32 src, dst;
310
311 FETCH_WORD(src);
312 adr = AREG((Opcode >> 0) & 7);
313 DECODE_EXT_WORD
314 PRE_IO
315 READ_WORD_F(adr, res)
316 res |= src;
317 flag_C = 0;
318 flag_V = 0;
319 flag_NotZ = res;
320 flag_N = res >> 8;
321 WRITE_WORD_F(adr, res)
322 POST_IO
323RET(22)
324}
325
326// ORI
327OPCODE(0x0078)
328{
329 u32 adr, res;
330 u32 src, dst;
331
332 FETCH_WORD(src);
333 FETCH_SWORD(adr);
334 PRE_IO
335 READ_WORD_F(adr, res)
336 res |= src;
337 flag_C = 0;
338 flag_V = 0;
339 flag_NotZ = res;
340 flag_N = res >> 8;
341 WRITE_WORD_F(adr, res)
342 POST_IO
343RET(20)
344}
345
346// ORI
347OPCODE(0x0079)
348{
349 u32 adr, res;
350 u32 src, dst;
351
352 FETCH_WORD(src);
353 FETCH_LONG(adr);
354 PRE_IO
355 READ_WORD_F(adr, res)
356 res |= src;
357 flag_C = 0;
358 flag_V = 0;
359 flag_NotZ = res;
360 flag_N = res >> 8;
361 WRITE_WORD_F(adr, res)
362 POST_IO
363RET(24)
364}
365
366// ORI
367OPCODE(0x005F)
368{
369 u32 adr, res;
370 u32 src, dst;
371
372 FETCH_WORD(src);
373 adr = AREG(7);
374 AREG(7) += 2;
375 PRE_IO
376 READ_WORD_F(adr, res)
377 res |= src;
378 flag_C = 0;
379 flag_V = 0;
380 flag_NotZ = res;
381 flag_N = res >> 8;
382 WRITE_WORD_F(adr, res)
383 POST_IO
384RET(16)
385}
386
387// ORI
388OPCODE(0x0067)
389{
390 u32 adr, res;
391 u32 src, dst;
392
393 FETCH_WORD(src);
394 adr = AREG(7) - 2;
395 AREG(7) = adr;
396 PRE_IO
397 READ_WORD_F(adr, res)
398 res |= src;
399 flag_C = 0;
400 flag_V = 0;
401 flag_NotZ = res;
402 flag_N = res >> 8;
403 WRITE_WORD_F(adr, res)
404 POST_IO
405RET(18)
406}
407
408// ORI
409OPCODE(0x0080)
410{
411 u32 adr, res;
412 u32 src, dst;
413
414 FETCH_LONG(src);
415 res = DREGu32((Opcode >> 0) & 7);
416 res |= src;
417 flag_C = 0;
418 flag_V = 0;
419 flag_NotZ = res;
420 flag_N = res >> 24;
421 DREGu32((Opcode >> 0) & 7) = res;
422RET(16)
423}
424
425// ORI
426OPCODE(0x0090)
427{
428 u32 adr, res;
429 u32 src, dst;
430
431 FETCH_LONG(src);
432 adr = AREG((Opcode >> 0) & 7);
433 PRE_IO
434 READ_LONG_F(adr, res)
435 res |= src;
436 flag_C = 0;
437 flag_V = 0;
438 flag_NotZ = res;
439 flag_N = res >> 24;
440 WRITE_LONG_F(adr, res)
441 POST_IO
442RET(28)
443}
444
445// ORI
446OPCODE(0x0098)
447{
448 u32 adr, res;
449 u32 src, dst;
450
451 FETCH_LONG(src);
452 adr = AREG((Opcode >> 0) & 7);
453 AREG((Opcode >> 0) & 7) += 4;
454 PRE_IO
455 READ_LONG_F(adr, res)
456 res |= src;
457 flag_C = 0;
458 flag_V = 0;
459 flag_NotZ = res;
460 flag_N = res >> 24;
461 WRITE_LONG_F(adr, res)
462 POST_IO
463RET(28)
464}
465
466// ORI
467OPCODE(0x00A0)
468{
469 u32 adr, res;
470 u32 src, dst;
471
472 FETCH_LONG(src);
473 adr = AREG((Opcode >> 0) & 7) - 4;
474 AREG((Opcode >> 0) & 7) = adr;
475 PRE_IO
476 READ_LONG_F(adr, res)
477 res |= src;
478 flag_C = 0;
479 flag_V = 0;
480 flag_NotZ = res;
481 flag_N = res >> 24;
482 WRITE_LONG_F(adr, res)
483 POST_IO
484RET(30)
485}
486
487// ORI
488OPCODE(0x00A8)
489{
490 u32 adr, res;
491 u32 src, dst;
492
493 FETCH_LONG(src);
494 FETCH_SWORD(adr);
495 adr += AREG((Opcode >> 0) & 7);
496 PRE_IO
497 READ_LONG_F(adr, res)
498 res |= src;
499 flag_C = 0;
500 flag_V = 0;
501 flag_NotZ = res;
502 flag_N = res >> 24;
503 WRITE_LONG_F(adr, res)
504 POST_IO
505RET(32)
506}
507
508// ORI
509OPCODE(0x00B0)
510{
511 u32 adr, res;
512 u32 src, dst;
513
514 FETCH_LONG(src);
515 adr = AREG((Opcode >> 0) & 7);
516 DECODE_EXT_WORD
517 PRE_IO
518 READ_LONG_F(adr, res)
519 res |= src;
520 flag_C = 0;
521 flag_V = 0;
522 flag_NotZ = res;
523 flag_N = res >> 24;
524 WRITE_LONG_F(adr, res)
525 POST_IO
526RET(34)
527}
528
529// ORI
530OPCODE(0x00B8)
531{
532 u32 adr, res;
533 u32 src, dst;
534
535 FETCH_LONG(src);
536 FETCH_SWORD(adr);
537 PRE_IO
538 READ_LONG_F(adr, res)
539 res |= src;
540 flag_C = 0;
541 flag_V = 0;
542 flag_NotZ = res;
543 flag_N = res >> 24;
544 WRITE_LONG_F(adr, res)
545 POST_IO
546RET(32)
547}
548
549// ORI
550OPCODE(0x00B9)
551{
552 u32 adr, res;
553 u32 src, dst;
554
555 FETCH_LONG(src);
556 FETCH_LONG(adr);
557 PRE_IO
558 READ_LONG_F(adr, res)
559 res |= src;
560 flag_C = 0;
561 flag_V = 0;
562 flag_NotZ = res;
563 flag_N = res >> 24;
564 WRITE_LONG_F(adr, res)
565 POST_IO
566RET(36)
567}
568
569// ORI
570OPCODE(0x009F)
571{
572 u32 adr, res;
573 u32 src, dst;
574
575 FETCH_LONG(src);
576 adr = AREG(7);
577 AREG(7) += 4;
578 PRE_IO
579 READ_LONG_F(adr, res)
580 res |= src;
581 flag_C = 0;
582 flag_V = 0;
583 flag_NotZ = res;
584 flag_N = res >> 24;
585 WRITE_LONG_F(adr, res)
586 POST_IO
587RET(28)
588}
589
590// ORI
591OPCODE(0x00A7)
592{
593 u32 adr, res;
594 u32 src, dst;
595
596 FETCH_LONG(src);
597 adr = AREG(7) - 4;
598 AREG(7) = adr;
599 PRE_IO
600 READ_LONG_F(adr, res)
601 res |= src;
602 flag_C = 0;
603 flag_V = 0;
604 flag_NotZ = res;
605 flag_N = res >> 24;
606 WRITE_LONG_F(adr, res)
607 POST_IO
608RET(30)
609}
610
611// ORICCR
612OPCODE(0x003C)
613{
614 u32 adr, res;
615 u32 src, dst;
616
617 FETCH_BYTE(res);
618 res &= M68K_CCR_MASK;
619 res |= GET_CCR;
620 SET_CCR(res)
621RET(20)
622}
623
624// ORISR
625OPCODE(0x007C)
626{
627 u32 adr, res;
628 u32 src, dst;
629
630 if (flag_S)
631 {
632 u32 res;
633 FETCH_WORD(res);
634 res &= M68K_SR_MASK;
635 res |= GET_SR;
636 SET_SR(res)
637 CHECK_INT_TO_JUMP(20)
638 }
639 else
640 {
641 u32 newPC = (u32)(PC) - BasePC;
642 SET_PC(newPC-2);
643 execute_exception(M68K_PRIVILEGE_VIOLATION_EX);
644#ifdef USE_CYCLONE_TIMING
645 RET(0)
646#else
647 RET(4)
648#endif
649 }
650RET(20)
651}
652
653// ANDI
654OPCODE(0x0200)
655{
656 u32 adr, res;
657 u32 src, dst;
658
659 FETCH_BYTE(src);
660 res = DREGu8((Opcode >> 0) & 7);
661 res &= src;
662 flag_C = 0;
663 flag_V = 0;
664 flag_NotZ = res;
665 flag_N = res;
666 DREGu8((Opcode >> 0) & 7) = res;
667RET(8)
668}
669
670// ANDI
671OPCODE(0x0210)
672{
673 u32 adr, res;
674 u32 src, dst;
675
676 FETCH_BYTE(src);
677 adr = AREG((Opcode >> 0) & 7);
678 PRE_IO
679 READ_BYTE_F(adr, res)
680 res &= src;
681 flag_C = 0;
682 flag_V = 0;
683 flag_NotZ = res;
684 flag_N = res;
685 WRITE_BYTE_F(adr, res)
686 POST_IO
687RET(16)
688}
689
690// ANDI
691OPCODE(0x0218)
692{
693 u32 adr, res;
694 u32 src, dst;
695
696 FETCH_BYTE(src);
697 adr = AREG((Opcode >> 0) & 7);
698 AREG((Opcode >> 0) & 7) += 1;
699 PRE_IO
700 READ_BYTE_F(adr, res)
701 res &= src;
702 flag_C = 0;
703 flag_V = 0;
704 flag_NotZ = res;
705 flag_N = res;
706 WRITE_BYTE_F(adr, res)
707 POST_IO
708RET(16)
709}
710
711// ANDI
712OPCODE(0x0220)
713{
714 u32 adr, res;
715 u32 src, dst;
716
717 FETCH_BYTE(src);
718 adr = AREG((Opcode >> 0) & 7) - 1;
719 AREG((Opcode >> 0) & 7) = adr;
720 PRE_IO
721 READ_BYTE_F(adr, res)
722 res &= src;
723 flag_C = 0;
724 flag_V = 0;
725 flag_NotZ = res;
726 flag_N = res;
727 WRITE_BYTE_F(adr, res)
728 POST_IO
729RET(18)
730}
731
732// ANDI
733OPCODE(0x0228)
734{
735 u32 adr, res;
736 u32 src, dst;
737
738 FETCH_BYTE(src);
739 FETCH_SWORD(adr);
740 adr += AREG((Opcode >> 0) & 7);
741 PRE_IO
742 READ_BYTE_F(adr, res)
743 res &= src;
744 flag_C = 0;
745 flag_V = 0;
746 flag_NotZ = res;
747 flag_N = res;
748 WRITE_BYTE_F(adr, res)
749 POST_IO
750RET(20)
751}
752
753// ANDI
754OPCODE(0x0230)
755{
756 u32 adr, res;
757 u32 src, dst;
758
759 FETCH_BYTE(src);
760 adr = AREG((Opcode >> 0) & 7);
761 DECODE_EXT_WORD
762 PRE_IO
763 READ_BYTE_F(adr, res)
764 res &= src;
765 flag_C = 0;
766 flag_V = 0;
767 flag_NotZ = res;
768 flag_N = res;
769 WRITE_BYTE_F(adr, res)
770 POST_IO
771RET(22)
772}
773
774// ANDI
775OPCODE(0x0238)
776{
777 u32 adr, res;
778 u32 src, dst;
779
780 FETCH_BYTE(src);
781 FETCH_SWORD(adr);
782 PRE_IO
783 READ_BYTE_F(adr, res)
784 res &= src;
785 flag_C = 0;
786 flag_V = 0;
787 flag_NotZ = res;
788 flag_N = res;
789 WRITE_BYTE_F(adr, res)
790 POST_IO
791RET(20)
792}
793
794// ANDI
795OPCODE(0x0239)
796{
797 u32 adr, res;
798 u32 src, dst;
799
800 FETCH_BYTE(src);
801 FETCH_LONG(adr);
802 PRE_IO
803 READ_BYTE_F(adr, res)
804 res &= src;
805 flag_C = 0;
806 flag_V = 0;
807 flag_NotZ = res;
808 flag_N = res;
809 WRITE_BYTE_F(adr, res)
810 POST_IO
811RET(24)
812}
813
814// ANDI
815OPCODE(0x021F)
816{
817 u32 adr, res;
818 u32 src, dst;
819
820 FETCH_BYTE(src);
821 adr = AREG(7);
822 AREG(7) += 2;
823 PRE_IO
824 READ_BYTE_F(adr, res)
825 res &= src;
826 flag_C = 0;
827 flag_V = 0;
828 flag_NotZ = res;
829 flag_N = res;
830 WRITE_BYTE_F(adr, res)
831 POST_IO
832RET(16)
833}
834
835// ANDI
836OPCODE(0x0227)
837{
838 u32 adr, res;
839 u32 src, dst;
840
841 FETCH_BYTE(src);
842 adr = AREG(7) - 2;
843 AREG(7) = adr;
844 PRE_IO
845 READ_BYTE_F(adr, res)
846 res &= src;
847 flag_C = 0;
848 flag_V = 0;
849 flag_NotZ = res;
850 flag_N = res;
851 WRITE_BYTE_F(adr, res)
852 POST_IO
853RET(18)
854}
855
856// ANDI
857OPCODE(0x0240)
858{
859 u32 adr, res;
860 u32 src, dst;
861
862 FETCH_WORD(src);
863 res = DREGu16((Opcode >> 0) & 7);
864 res &= src;
865 flag_C = 0;
866 flag_V = 0;
867 flag_NotZ = res;
868 flag_N = res >> 8;
869 DREGu16((Opcode >> 0) & 7) = res;
870RET(8)
871}
872
873// ANDI
874OPCODE(0x0250)
875{
876 u32 adr, res;
877 u32 src, dst;
878
879 FETCH_WORD(src);
880 adr = AREG((Opcode >> 0) & 7);
881 PRE_IO
882 READ_WORD_F(adr, res)
883 res &= src;
884 flag_C = 0;
885 flag_V = 0;
886 flag_NotZ = res;
887 flag_N = res >> 8;
888 WRITE_WORD_F(adr, res)
889 POST_IO
890RET(16)
891}
892
893// ANDI
894OPCODE(0x0258)
895{
896 u32 adr, res;
897 u32 src, dst;
898
899 FETCH_WORD(src);
900 adr = AREG((Opcode >> 0) & 7);
901 AREG((Opcode >> 0) & 7) += 2;
902 PRE_IO
903 READ_WORD_F(adr, res)
904 res &= src;
905 flag_C = 0;
906 flag_V = 0;
907 flag_NotZ = res;
908 flag_N = res >> 8;
909 WRITE_WORD_F(adr, res)
910 POST_IO
911RET(16)
912}
913
914// ANDI
915OPCODE(0x0260)
916{
917 u32 adr, res;
918 u32 src, dst;
919
920 FETCH_WORD(src);
921 adr = AREG((Opcode >> 0) & 7) - 2;
922 AREG((Opcode >> 0) & 7) = adr;
923 PRE_IO
924 READ_WORD_F(adr, res)
925 res &= src;
926 flag_C = 0;
927 flag_V = 0;
928 flag_NotZ = res;
929 flag_N = res >> 8;
930 WRITE_WORD_F(adr, res)
931 POST_IO
932RET(18)
933}
934
935// ANDI
936OPCODE(0x0268)
937{
938 u32 adr, res;
939 u32 src, dst;
940
941 FETCH_WORD(src);
942 FETCH_SWORD(adr);
943 adr += AREG((Opcode >> 0) & 7);
944 PRE_IO
945 READ_WORD_F(adr, res)
946 res &= src;
947 flag_C = 0;
948 flag_V = 0;
949 flag_NotZ = res;
950 flag_N = res >> 8;
951 WRITE_WORD_F(adr, res)
952 POST_IO
953RET(20)
954}
955
956// ANDI
957OPCODE(0x0270)
958{
959 u32 adr, res;
960 u32 src, dst;
961
962 FETCH_WORD(src);
963 adr = AREG((Opcode >> 0) & 7);
964 DECODE_EXT_WORD
965 PRE_IO
966 READ_WORD_F(adr, res)
967 res &= src;
968 flag_C = 0;
969 flag_V = 0;
970 flag_NotZ = res;
971 flag_N = res >> 8;
972 WRITE_WORD_F(adr, res)
973 POST_IO
974RET(22)
975}
976
977// ANDI
978OPCODE(0x0278)
979{
980 u32 adr, res;
981 u32 src, dst;
982
983 FETCH_WORD(src);
984 FETCH_SWORD(adr);
985 PRE_IO
986 READ_WORD_F(adr, res)
987 res &= src;
988 flag_C = 0;
989 flag_V = 0;
990 flag_NotZ = res;
991 flag_N = res >> 8;
992 WRITE_WORD_F(adr, res)
993 POST_IO
994RET(20)
995}
996
997// ANDI
998OPCODE(0x0279)
999{
1000 u32 adr, res;
1001 u32 src, dst;
1002
1003 FETCH_WORD(src);
1004 FETCH_LONG(adr);
1005 PRE_IO
1006 READ_WORD_F(adr, res)
1007 res &= src;
1008 flag_C = 0;
1009 flag_V = 0;
1010 flag_NotZ = res;
1011 flag_N = res >> 8;
1012 WRITE_WORD_F(adr, res)
1013 POST_IO
1014RET(24)
1015}
1016
1017// ANDI
1018OPCODE(0x025F)
1019{
1020 u32 adr, res;
1021 u32 src, dst;
1022
1023 FETCH_WORD(src);
1024 adr = AREG(7);
1025 AREG(7) += 2;
1026 PRE_IO
1027 READ_WORD_F(adr, res)
1028 res &= src;
1029 flag_C = 0;
1030 flag_V = 0;
1031 flag_NotZ = res;
1032 flag_N = res >> 8;
1033 WRITE_WORD_F(adr, res)
1034 POST_IO
1035RET(16)
1036}
1037
1038// ANDI
1039OPCODE(0x0267)
1040{
1041 u32 adr, res;
1042 u32 src, dst;
1043
1044 FETCH_WORD(src);
1045 adr = AREG(7) - 2;
1046 AREG(7) = adr;
1047 PRE_IO
1048 READ_WORD_F(adr, res)
1049 res &= src;
1050 flag_C = 0;
1051 flag_V = 0;
1052 flag_NotZ = res;
1053 flag_N = res >> 8;
1054 WRITE_WORD_F(adr, res)
1055 POST_IO
1056RET(18)
1057}
1058
1059// ANDI
1060OPCODE(0x0280)
1061{
1062 u32 adr, res;
1063 u32 src, dst;
1064
1065 FETCH_LONG(src);
1066 res = DREGu32((Opcode >> 0) & 7);
1067 res &= src;
1068 flag_C = 0;
1069 flag_V = 0;
1070 flag_NotZ = res;
1071 flag_N = res >> 24;
1072 DREGu32((Opcode >> 0) & 7) = res;
1073#ifdef USE_CYCLONE_TIMING
1074RET(14)
1075#else
1076RET(16)
1077#endif
1078}
1079
1080// ANDI
1081OPCODE(0x0290)
1082{
1083 u32 adr, res;
1084 u32 src, dst;
1085
1086 FETCH_LONG(src);
1087 adr = AREG((Opcode >> 0) & 7);
1088 PRE_IO
1089 READ_LONG_F(adr, res)
1090 res &= src;
1091 flag_C = 0;
1092 flag_V = 0;
1093 flag_NotZ = res;
1094 flag_N = res >> 24;
1095 WRITE_LONG_F(adr, res)
1096 POST_IO
1097RET(28)
1098}
1099
1100// ANDI
1101OPCODE(0x0298)
1102{
1103 u32 adr, res;
1104 u32 src, dst;
1105
1106 FETCH_LONG(src);
1107 adr = AREG((Opcode >> 0) & 7);
1108 AREG((Opcode >> 0) & 7) += 4;
1109 PRE_IO
1110 READ_LONG_F(adr, res)
1111 res &= src;
1112 flag_C = 0;
1113 flag_V = 0;
1114 flag_NotZ = res;
1115 flag_N = res >> 24;
1116 WRITE_LONG_F(adr, res)
1117 POST_IO
1118RET(28)
1119}
1120
1121// ANDI
1122OPCODE(0x02A0)
1123{
1124 u32 adr, res;
1125 u32 src, dst;
1126
1127 FETCH_LONG(src);
1128 adr = AREG((Opcode >> 0) & 7) - 4;
1129 AREG((Opcode >> 0) & 7) = adr;
1130 PRE_IO
1131 READ_LONG_F(adr, res)
1132 res &= src;
1133 flag_C = 0;
1134 flag_V = 0;
1135 flag_NotZ = res;
1136 flag_N = res >> 24;
1137 WRITE_LONG_F(adr, res)
1138 POST_IO
1139RET(30)
1140}
1141
1142// ANDI
1143OPCODE(0x02A8)
1144{
1145 u32 adr, res;
1146 u32 src, dst;
1147
1148 FETCH_LONG(src);
1149 FETCH_SWORD(adr);
1150 adr += AREG((Opcode >> 0) & 7);
1151 PRE_IO
1152 READ_LONG_F(adr, res)
1153 res &= src;
1154 flag_C = 0;
1155 flag_V = 0;
1156 flag_NotZ = res;
1157 flag_N = res >> 24;
1158 WRITE_LONG_F(adr, res)
1159 POST_IO
1160RET(32)
1161}
1162
1163// ANDI
1164OPCODE(0x02B0)
1165{
1166 u32 adr, res;
1167 u32 src, dst;
1168
1169 FETCH_LONG(src);
1170 adr = AREG((Opcode >> 0) & 7);
1171 DECODE_EXT_WORD
1172 PRE_IO
1173 READ_LONG_F(adr, res)
1174 res &= src;
1175 flag_C = 0;
1176 flag_V = 0;
1177 flag_NotZ = res;
1178 flag_N = res >> 24;
1179 WRITE_LONG_F(adr, res)
1180 POST_IO
1181RET(34)
1182}
1183
1184// ANDI
1185OPCODE(0x02B8)
1186{
1187 u32 adr, res;
1188 u32 src, dst;
1189
1190 FETCH_LONG(src);
1191 FETCH_SWORD(adr);
1192 PRE_IO
1193 READ_LONG_F(adr, res)
1194 res &= src;
1195 flag_C = 0;
1196 flag_V = 0;
1197 flag_NotZ = res;
1198 flag_N = res >> 24;
1199 WRITE_LONG_F(adr, res)
1200 POST_IO
1201RET(32)
1202}
1203
1204// ANDI
1205OPCODE(0x02B9)
1206{
1207 u32 adr, res;
1208 u32 src, dst;
1209
1210 FETCH_LONG(src);
1211 FETCH_LONG(adr);
1212 PRE_IO
1213 READ_LONG_F(adr, res)
1214 res &= src;
1215 flag_C = 0;
1216 flag_V = 0;
1217 flag_NotZ = res;
1218 flag_N = res >> 24;
1219 WRITE_LONG_F(adr, res)
1220 POST_IO
1221RET(36)
1222}
1223
1224// ANDI
1225OPCODE(0x029F)
1226{
1227 u32 adr, res;
1228 u32 src, dst;
1229
1230 FETCH_LONG(src);
1231 adr = AREG(7);
1232 AREG(7) += 4;
1233 PRE_IO
1234 READ_LONG_F(adr, res)
1235 res &= src;
1236 flag_C = 0;
1237 flag_V = 0;
1238 flag_NotZ = res;
1239 flag_N = res >> 24;
1240 WRITE_LONG_F(adr, res)
1241 POST_IO
1242RET(28)
1243}
1244
1245// ANDI
1246OPCODE(0x02A7)
1247{
1248 u32 adr, res;
1249 u32 src, dst;
1250
1251 FETCH_LONG(src);
1252 adr = AREG(7) - 4;
1253 AREG(7) = adr;
1254 PRE_IO
1255 READ_LONG_F(adr, res)
1256 res &= src;
1257 flag_C = 0;
1258 flag_V = 0;
1259 flag_NotZ = res;
1260 flag_N = res >> 24;
1261 WRITE_LONG_F(adr, res)
1262 POST_IO
1263RET(30)
1264}
1265
1266// ANDICCR
1267OPCODE(0x023C)
1268{
1269 u32 adr, res;
1270 u32 src, dst;
1271
1272 FETCH_BYTE(res);
1273 res &= M68K_CCR_MASK;
1274 res &= GET_CCR;
1275 SET_CCR(res)
1276RET(20)
1277}
1278
1279// ANDISR
1280OPCODE(0x027C)
1281{
1282 u32 adr, res;
1283 u32 src, dst;
1284
1285 if (flag_S)
1286 {
1287 FETCH_WORD(res);
1288 res &= M68K_SR_MASK;
1289 res &= GET_SR;
1290 SET_SR(res)
1291 if (!flag_S)
1292 {
1293 res = AREG(7);
1294 AREG(7) = ASP;
1295 ASP = res;
1296 }
1297 CHECK_INT_TO_JUMP(20)
1298 }
1299 else
1300 {
1301 u32 newPC = (u32)(PC) - BasePC;
1302 SET_PC(newPC-2);
1303 execute_exception(M68K_PRIVILEGE_VIOLATION_EX);
1304 RET(4)
1305 }
1306RET(20)
1307}
1308
1309// EORI
1310OPCODE(0x0A00)
1311{
1312 u32 adr, res;
1313 u32 src, dst;
1314
1315 FETCH_BYTE(src);
1316 res = DREGu8((Opcode >> 0) & 7);
1317 res ^= src;
1318 flag_C = 0;
1319 flag_V = 0;
1320 flag_NotZ = res;
1321 flag_N = res;
1322 DREGu8((Opcode >> 0) & 7) = res;
1323RET(8)
1324}
1325
1326// EORI
1327OPCODE(0x0A10)
1328{
1329 u32 adr, res;
1330 u32 src, dst;
1331
1332 FETCH_BYTE(src);
1333 adr = AREG((Opcode >> 0) & 7);
1334 PRE_IO
1335 READ_BYTE_F(adr, res)
1336 res ^= src;
1337 flag_C = 0;
1338 flag_V = 0;
1339 flag_NotZ = res;
1340 flag_N = res;
1341 WRITE_BYTE_F(adr, res)
1342 POST_IO
1343RET(16)
1344}
1345
1346// EORI
1347OPCODE(0x0A18)
1348{
1349 u32 adr, res;
1350 u32 src, dst;
1351
1352 FETCH_BYTE(src);
1353 adr = AREG((Opcode >> 0) & 7);
1354 AREG((Opcode >> 0) & 7) += 1;
1355 PRE_IO
1356 READ_BYTE_F(adr, res)
1357 res ^= src;
1358 flag_C = 0;
1359 flag_V = 0;
1360 flag_NotZ = res;
1361 flag_N = res;
1362 WRITE_BYTE_F(adr, res)
1363 POST_IO
1364RET(16)
1365}
1366
1367// EORI
1368OPCODE(0x0A20)
1369{
1370 u32 adr, res;
1371 u32 src, dst;
1372
1373 FETCH_BYTE(src);
1374 adr = AREG((Opcode >> 0) & 7) - 1;
1375 AREG((Opcode >> 0) & 7) = adr;
1376 PRE_IO
1377 READ_BYTE_F(adr, res)
1378 res ^= src;
1379 flag_C = 0;
1380 flag_V = 0;
1381 flag_NotZ = res;
1382 flag_N = res;
1383 WRITE_BYTE_F(adr, res)
1384 POST_IO
1385RET(18)
1386}
1387
1388// EORI
1389OPCODE(0x0A28)
1390{
1391 u32 adr, res;
1392 u32 src, dst;
1393
1394 FETCH_BYTE(src);
1395 FETCH_SWORD(adr);
1396 adr += AREG((Opcode >> 0) & 7);
1397 PRE_IO
1398 READ_BYTE_F(adr, res)
1399 res ^= src;
1400 flag_C = 0;
1401 flag_V = 0;
1402 flag_NotZ = res;
1403 flag_N = res;
1404 WRITE_BYTE_F(adr, res)
1405 POST_IO
1406RET(20)
1407}
1408
1409// EORI
1410OPCODE(0x0A30)
1411{
1412 u32 adr, res;
1413 u32 src, dst;
1414
1415 FETCH_BYTE(src);
1416 adr = AREG((Opcode >> 0) & 7);
1417 DECODE_EXT_WORD
1418 PRE_IO
1419 READ_BYTE_F(adr, res)
1420 res ^= src;
1421 flag_C = 0;
1422 flag_V = 0;
1423 flag_NotZ = res;
1424 flag_N = res;
1425 WRITE_BYTE_F(adr, res)
1426 POST_IO
1427RET(22)
1428}
1429
1430// EORI
1431OPCODE(0x0A38)
1432{
1433 u32 adr, res;
1434 u32 src, dst;
1435
1436 FETCH_BYTE(src);
1437 FETCH_SWORD(adr);
1438 PRE_IO
1439 READ_BYTE_F(adr, res)
1440 res ^= src;
1441 flag_C = 0;
1442 flag_V = 0;
1443 flag_NotZ = res;
1444 flag_N = res;
1445 WRITE_BYTE_F(adr, res)
1446 POST_IO
1447RET(20)
1448}
1449
1450// EORI
1451OPCODE(0x0A39)
1452{
1453 u32 adr, res;
1454 u32 src, dst;
1455
1456 FETCH_BYTE(src);
1457 FETCH_LONG(adr);
1458 PRE_IO
1459 READ_BYTE_F(adr, res)
1460 res ^= src;
1461 flag_C = 0;
1462 flag_V = 0;
1463 flag_NotZ = res;
1464 flag_N = res;
1465 WRITE_BYTE_F(adr, res)
1466 POST_IO
1467RET(24)
1468}
1469
1470// EORI
1471OPCODE(0x0A1F)
1472{
1473 u32 adr, res;
1474 u32 src, dst;
1475
1476 FETCH_BYTE(src);
1477 adr = AREG(7);
1478 AREG(7) += 2;
1479 PRE_IO
1480 READ_BYTE_F(adr, res)
1481 res ^= src;
1482 flag_C = 0;
1483 flag_V = 0;
1484 flag_NotZ = res;
1485 flag_N = res;
1486 WRITE_BYTE_F(adr, res)
1487 POST_IO
1488RET(16)
1489}
1490
1491// EORI
1492OPCODE(0x0A27)
1493{
1494 u32 adr, res;
1495 u32 src, dst;
1496
1497 FETCH_BYTE(src);
1498 adr = AREG(7) - 2;
1499 AREG(7) = adr;
1500 PRE_IO
1501 READ_BYTE_F(adr, res)
1502 res ^= src;
1503 flag_C = 0;
1504 flag_V = 0;
1505 flag_NotZ = res;
1506 flag_N = res;
1507 WRITE_BYTE_F(adr, res)
1508 POST_IO
1509RET(18)
1510}
1511
1512// EORI
1513OPCODE(0x0A40)
1514{
1515 u32 adr, res;
1516 u32 src, dst;
1517
1518 FETCH_WORD(src);
1519 res = DREGu16((Opcode >> 0) & 7);
1520 res ^= src;
1521 flag_C = 0;
1522 flag_V = 0;
1523 flag_NotZ = res;
1524 flag_N = res >> 8;
1525 DREGu16((Opcode >> 0) & 7) = res;
1526RET(8)
1527}
1528
1529// EORI
1530OPCODE(0x0A50)
1531{
1532 u32 adr, res;
1533 u32 src, dst;
1534
1535 FETCH_WORD(src);
1536 adr = AREG((Opcode >> 0) & 7);
1537 PRE_IO
1538 READ_WORD_F(adr, res)
1539 res ^= src;
1540 flag_C = 0;
1541 flag_V = 0;
1542 flag_NotZ = res;
1543 flag_N = res >> 8;
1544 WRITE_WORD_F(adr, res)
1545 POST_IO
1546RET(16)
1547}
1548
1549// EORI
1550OPCODE(0x0A58)
1551{
1552 u32 adr, res;
1553 u32 src, dst;
1554
1555 FETCH_WORD(src);
1556 adr = AREG((Opcode >> 0) & 7);
1557 AREG((Opcode >> 0) & 7) += 2;
1558 PRE_IO
1559 READ_WORD_F(adr, res)
1560 res ^= src;
1561 flag_C = 0;
1562 flag_V = 0;
1563 flag_NotZ = res;
1564 flag_N = res >> 8;
1565 WRITE_WORD_F(adr, res)
1566 POST_IO
1567RET(16)
1568}
1569
1570// EORI
1571OPCODE(0x0A60)
1572{
1573 u32 adr, res;
1574 u32 src, dst;
1575
1576 FETCH_WORD(src);
1577 adr = AREG((Opcode >> 0) & 7) - 2;
1578 AREG((Opcode >> 0) & 7) = adr;
1579 PRE_IO
1580 READ_WORD_F(adr, res)
1581 res ^= src;
1582 flag_C = 0;
1583 flag_V = 0;
1584 flag_NotZ = res;
1585 flag_N = res >> 8;
1586 WRITE_WORD_F(adr, res)
1587 POST_IO
1588RET(18)
1589}
1590
1591// EORI
1592OPCODE(0x0A68)
1593{
1594 u32 adr, res;
1595 u32 src, dst;
1596
1597 FETCH_WORD(src);
1598 FETCH_SWORD(adr);
1599 adr += AREG((Opcode >> 0) & 7);
1600 PRE_IO
1601 READ_WORD_F(adr, res)
1602 res ^= src;
1603 flag_C = 0;
1604 flag_V = 0;
1605 flag_NotZ = res;
1606 flag_N = res >> 8;
1607 WRITE_WORD_F(adr, res)
1608 POST_IO
1609RET(20)
1610}
1611
1612// EORI
1613OPCODE(0x0A70)
1614{
1615 u32 adr, res;
1616 u32 src, dst;
1617
1618 FETCH_WORD(src);
1619 adr = AREG((Opcode >> 0) & 7);
1620 DECODE_EXT_WORD
1621 PRE_IO
1622 READ_WORD_F(adr, res)
1623 res ^= src;
1624 flag_C = 0;
1625 flag_V = 0;
1626 flag_NotZ = res;
1627 flag_N = res >> 8;
1628 WRITE_WORD_F(adr, res)
1629 POST_IO
1630RET(22)
1631}
1632
1633// EORI
1634OPCODE(0x0A78)
1635{
1636 u32 adr, res;
1637 u32 src, dst;
1638
1639 FETCH_WORD(src);
1640 FETCH_SWORD(adr);
1641 PRE_IO
1642 READ_WORD_F(adr, res)
1643 res ^= src;
1644 flag_C = 0;
1645 flag_V = 0;
1646 flag_NotZ = res;
1647 flag_N = res >> 8;
1648 WRITE_WORD_F(adr, res)
1649 POST_IO
1650RET(20)
1651}
1652
1653// EORI
1654OPCODE(0x0A79)
1655{
1656 u32 adr, res;
1657 u32 src, dst;
1658
1659 FETCH_WORD(src);
1660 FETCH_LONG(adr);
1661 PRE_IO
1662 READ_WORD_F(adr, res)
1663 res ^= src;
1664 flag_C = 0;
1665 flag_V = 0;
1666 flag_NotZ = res;
1667 flag_N = res >> 8;
1668 WRITE_WORD_F(adr, res)
1669 POST_IO
1670RET(24)
1671}
1672
1673// EORI
1674OPCODE(0x0A5F)
1675{
1676 u32 adr, res;
1677 u32 src, dst;
1678
1679 FETCH_WORD(src);
1680 adr = AREG(7);
1681 AREG(7) += 2;
1682 PRE_IO
1683 READ_WORD_F(adr, res)
1684 res ^= src;
1685 flag_C = 0;
1686 flag_V = 0;
1687 flag_NotZ = res;
1688 flag_N = res >> 8;
1689 WRITE_WORD_F(adr, res)
1690 POST_IO
1691RET(16)
1692}
1693
1694// EORI
1695OPCODE(0x0A67)
1696{
1697 u32 adr, res;
1698 u32 src, dst;
1699
1700 FETCH_WORD(src);
1701 adr = AREG(7) - 2;
1702 AREG(7) = adr;
1703 PRE_IO
1704 READ_WORD_F(adr, res)
1705 res ^= src;
1706 flag_C = 0;
1707 flag_V = 0;
1708 flag_NotZ = res;
1709 flag_N = res >> 8;
1710 WRITE_WORD_F(adr, res)
1711 POST_IO
1712RET(18)
1713}
1714
1715// EORI
1716OPCODE(0x0A80)
1717{
1718 u32 adr, res;
1719 u32 src, dst;
1720
1721 FETCH_LONG(src);
1722 res = DREGu32((Opcode >> 0) & 7);
1723 res ^= src;
1724 flag_C = 0;
1725 flag_V = 0;
1726 flag_NotZ = res;
1727 flag_N = res >> 24;
1728 DREGu32((Opcode >> 0) & 7) = res;
1729RET(16)
1730}
1731
1732// EORI
1733OPCODE(0x0A90)
1734{
1735 u32 adr, res;
1736 u32 src, dst;
1737
1738 FETCH_LONG(src);
1739 adr = AREG((Opcode >> 0) & 7);
1740 PRE_IO
1741 READ_LONG_F(adr, res)
1742 res ^= src;
1743 flag_C = 0;
1744 flag_V = 0;
1745 flag_NotZ = res;
1746 flag_N = res >> 24;
1747 WRITE_LONG_F(adr, res)
1748 POST_IO
1749RET(28)
1750}
1751
1752// EORI
1753OPCODE(0x0A98)
1754{
1755 u32 adr, res;
1756 u32 src, dst;
1757
1758 FETCH_LONG(src);
1759 adr = AREG((Opcode >> 0) & 7);
1760 AREG((Opcode >> 0) & 7) += 4;
1761 PRE_IO
1762 READ_LONG_F(adr, res)
1763 res ^= src;
1764 flag_C = 0;
1765 flag_V = 0;
1766 flag_NotZ = res;
1767 flag_N = res >> 24;
1768 WRITE_LONG_F(adr, res)
1769 POST_IO
1770RET(28)
1771}
1772
1773// EORI
1774OPCODE(0x0AA0)
1775{
1776 u32 adr, res;
1777 u32 src, dst;
1778
1779 FETCH_LONG(src);
1780 adr = AREG((Opcode >> 0) & 7) - 4;
1781 AREG((Opcode >> 0) & 7) = adr;
1782 PRE_IO
1783 READ_LONG_F(adr, res)
1784 res ^= src;
1785 flag_C = 0;
1786 flag_V = 0;
1787 flag_NotZ = res;
1788 flag_N = res >> 24;
1789 WRITE_LONG_F(adr, res)
1790 POST_IO
1791RET(30)
1792}
1793
1794// EORI
1795OPCODE(0x0AA8)
1796{
1797 u32 adr, res;
1798 u32 src, dst;
1799
1800 FETCH_LONG(src);
1801 FETCH_SWORD(adr);
1802 adr += AREG((Opcode >> 0) & 7);
1803 PRE_IO
1804 READ_LONG_F(adr, res)
1805 res ^= src;
1806 flag_C = 0;
1807 flag_V = 0;
1808 flag_NotZ = res;
1809 flag_N = res >> 24;
1810 WRITE_LONG_F(adr, res)
1811 POST_IO
1812RET(32)
1813}
1814
1815// EORI
1816OPCODE(0x0AB0)
1817{
1818 u32 adr, res;
1819 u32 src, dst;
1820
1821 FETCH_LONG(src);
1822 adr = AREG((Opcode >> 0) & 7);
1823 DECODE_EXT_WORD
1824 PRE_IO
1825 READ_LONG_F(adr, res)
1826 res ^= src;
1827 flag_C = 0;
1828 flag_V = 0;
1829 flag_NotZ = res;
1830 flag_N = res >> 24;
1831 WRITE_LONG_F(adr, res)
1832 POST_IO
1833RET(34)
1834}
1835
1836// EORI
1837OPCODE(0x0AB8)
1838{
1839 u32 adr, res;
1840 u32 src, dst;
1841
1842 FETCH_LONG(src);
1843 FETCH_SWORD(adr);
1844 PRE_IO
1845 READ_LONG_F(adr, res)
1846 res ^= src;
1847 flag_C = 0;
1848 flag_V = 0;
1849 flag_NotZ = res;
1850 flag_N = res >> 24;
1851 WRITE_LONG_F(adr, res)
1852 POST_IO
1853RET(32)
1854}
1855
1856// EORI
1857OPCODE(0x0AB9)
1858{
1859 u32 adr, res;
1860 u32 src, dst;
1861
1862 FETCH_LONG(src);
1863 FETCH_LONG(adr);
1864 PRE_IO
1865 READ_LONG_F(adr, res)
1866 res ^= src;
1867 flag_C = 0;
1868 flag_V = 0;
1869 flag_NotZ = res;
1870 flag_N = res >> 24;
1871 WRITE_LONG_F(adr, res)
1872 POST_IO
1873RET(36)
1874}
1875
1876// EORI
1877OPCODE(0x0A9F)
1878{
1879 u32 adr, res;
1880 u32 src, dst;
1881
1882 FETCH_LONG(src);
1883 adr = AREG(7);
1884 AREG(7) += 4;
1885 PRE_IO
1886 READ_LONG_F(adr, res)
1887 res ^= src;
1888 flag_C = 0;
1889 flag_V = 0;
1890 flag_NotZ = res;
1891 flag_N = res >> 24;
1892 WRITE_LONG_F(adr, res)
1893 POST_IO
1894RET(28)
1895}
1896
1897// EORI
1898OPCODE(0x0AA7)
1899{
1900 u32 adr, res;
1901 u32 src, dst;
1902
1903 FETCH_LONG(src);
1904 adr = AREG(7) - 4;
1905 AREG(7) = adr;
1906 PRE_IO
1907 READ_LONG_F(adr, res)
1908 res ^= src;
1909 flag_C = 0;
1910 flag_V = 0;
1911 flag_NotZ = res;
1912 flag_N = res >> 24;
1913 WRITE_LONG_F(adr, res)
1914 POST_IO
1915RET(30)
1916}
1917
1918// EORICCR
1919OPCODE(0x0A3C)
1920{
1921 u32 adr, res;
1922 u32 src, dst;
1923
1924 FETCH_BYTE(res);
1925 res &= M68K_CCR_MASK;
1926 res ^= GET_CCR;
1927 SET_CCR(res)
1928RET(20)
1929}
1930
1931// EORISR
1932OPCODE(0x0A7C)
1933{
1934 u32 adr, res;
1935 u32 src, dst;
1936
1937 if (flag_S)
1938 {
1939 FETCH_WORD(res);
1940 res &= M68K_SR_MASK;
1941 res ^= GET_SR;
1942 SET_SR(res)
1943 if (!flag_S)
1944 {
1945 res = AREG(7);
1946 AREG(7) = ASP;
1947 ASP = res;
1948 }
1949 CHECK_INT_TO_JUMP(20)
1950 }
1951 else
1952 {
1953 u32 newPC = (u32)(PC) - BasePC;
1954 SET_PC(newPC-2);
1955 execute_exception(M68K_PRIVILEGE_VIOLATION_EX);
1956 RET(4)
1957 }
1958RET(20)
1959}
1960
1961// SUBI
1962OPCODE(0x0400)
1963{
1964 u32 adr, res;
1965 u32 src, dst;
1966
1967 FETCH_BYTE(src);
1968 dst = DREGu8((Opcode >> 0) & 7);
1969 res = dst - src;
1970 flag_N = flag_X = flag_C = res;
1971 flag_V = (src ^ dst) & (res ^ dst);
1972 flag_NotZ = res & 0xFF;
1973 DREGu8((Opcode >> 0) & 7) = res;
1974RET(8)
1975}
1976
1977// SUBI
1978OPCODE(0x0410)
1979{
1980 u32 adr, res;
1981 u32 src, dst;
1982
1983 FETCH_BYTE(src);
1984 adr = AREG((Opcode >> 0) & 7);
1985 PRE_IO
1986 READ_BYTE_F(adr, dst)
1987 res = dst - src;
1988 flag_N = flag_X = flag_C = res;
1989 flag_V = (src ^ dst) & (res ^ dst);
1990 flag_NotZ = res & 0xFF;
1991 WRITE_BYTE_F(adr, res)
1992 POST_IO
1993RET(16)
1994}
1995
1996// SUBI
1997OPCODE(0x0418)
1998{
1999 u32 adr, res;
2000 u32 src, dst;
2001
2002 FETCH_BYTE(src);
2003 adr = AREG((Opcode >> 0) & 7);
2004 AREG((Opcode >> 0) & 7) += 1;
2005 PRE_IO
2006 READ_BYTE_F(adr, dst)
2007 res = dst - src;
2008 flag_N = flag_X = flag_C = res;
2009 flag_V = (src ^ dst) & (res ^ dst);
2010 flag_NotZ = res & 0xFF;
2011 WRITE_BYTE_F(adr, res)
2012 POST_IO
2013RET(16)
2014}
2015
2016// SUBI
2017OPCODE(0x0420)
2018{
2019 u32 adr, res;
2020 u32 src, dst;
2021
2022 FETCH_BYTE(src);
2023 adr = AREG((Opcode >> 0) & 7) - 1;
2024 AREG((Opcode >> 0) & 7) = adr;
2025 PRE_IO
2026 READ_BYTE_F(adr, dst)
2027 res = dst - src;
2028 flag_N = flag_X = flag_C = res;
2029 flag_V = (src ^ dst) & (res ^ dst);
2030 flag_NotZ = res & 0xFF;
2031 WRITE_BYTE_F(adr, res)
2032 POST_IO
2033RET(18)
2034}
2035
2036// SUBI
2037OPCODE(0x0428)
2038{
2039 u32 adr, res;
2040 u32 src, dst;
2041
2042 FETCH_BYTE(src);
2043 FETCH_SWORD(adr);
2044 adr += AREG((Opcode >> 0) & 7);
2045 PRE_IO
2046 READ_BYTE_F(adr, dst)
2047 res = dst - src;
2048 flag_N = flag_X = flag_C = res;
2049 flag_V = (src ^ dst) & (res ^ dst);
2050 flag_NotZ = res & 0xFF;
2051 WRITE_BYTE_F(adr, res)
2052 POST_IO
2053RET(20)
2054}
2055
2056// SUBI
2057OPCODE(0x0430)
2058{
2059 u32 adr, res;
2060 u32 src, dst;
2061
2062 FETCH_BYTE(src);
2063 adr = AREG((Opcode >> 0) & 7);
2064 DECODE_EXT_WORD
2065 PRE_IO
2066 READ_BYTE_F(adr, dst)
2067 res = dst - src;
2068 flag_N = flag_X = flag_C = res;
2069 flag_V = (src ^ dst) & (res ^ dst);
2070 flag_NotZ = res & 0xFF;
2071 WRITE_BYTE_F(adr, res)
2072 POST_IO
2073RET(22)
2074}
2075
2076// SUBI
2077OPCODE(0x0438)
2078{
2079 u32 adr, res;
2080 u32 src, dst;
2081
2082 FETCH_BYTE(src);
2083 FETCH_SWORD(adr);
2084 PRE_IO
2085 READ_BYTE_F(adr, dst)
2086 res = dst - src;
2087 flag_N = flag_X = flag_C = res;
2088 flag_V = (src ^ dst) & (res ^ dst);
2089 flag_NotZ = res & 0xFF;
2090 WRITE_BYTE_F(adr, res)
2091 POST_IO
2092RET(20)
2093}
2094
2095// SUBI
2096OPCODE(0x0439)
2097{
2098 u32 adr, res;
2099 u32 src, dst;
2100
2101 FETCH_BYTE(src);
2102 FETCH_LONG(adr);
2103 PRE_IO
2104 READ_BYTE_F(adr, dst)
2105 res = dst - src;
2106 flag_N = flag_X = flag_C = res;
2107 flag_V = (src ^ dst) & (res ^ dst);
2108 flag_NotZ = res & 0xFF;
2109 WRITE_BYTE_F(adr, res)
2110 POST_IO
2111RET(24)
2112}
2113
2114// SUBI
2115OPCODE(0x041F)
2116{
2117 u32 adr, res;
2118 u32 src, dst;
2119
2120 FETCH_BYTE(src);
2121 adr = AREG(7);
2122 AREG(7) += 2;
2123 PRE_IO
2124 READ_BYTE_F(adr, dst)
2125 res = dst - src;
2126 flag_N = flag_X = flag_C = res;
2127 flag_V = (src ^ dst) & (res ^ dst);
2128 flag_NotZ = res & 0xFF;
2129 WRITE_BYTE_F(adr, res)
2130 POST_IO
2131RET(16)
2132}
2133
2134// SUBI
2135OPCODE(0x0427)
2136{
2137 u32 adr, res;
2138 u32 src, dst;
2139
2140 FETCH_BYTE(src);
2141 adr = AREG(7) - 2;
2142 AREG(7) = adr;
2143 PRE_IO
2144 READ_BYTE_F(adr, dst)
2145 res = dst - src;
2146 flag_N = flag_X = flag_C = res;
2147 flag_V = (src ^ dst) & (res ^ dst);
2148 flag_NotZ = res & 0xFF;
2149 WRITE_BYTE_F(adr, res)
2150 POST_IO
2151RET(18)
2152}
2153
2154// SUBI
2155OPCODE(0x0440)
2156{
2157 u32 adr, res;
2158 u32 src, dst;
2159
2160 FETCH_WORD(src);
2161 dst = DREGu16((Opcode >> 0) & 7);
2162 res = dst - src;
2163 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
2164 flag_N = flag_X = flag_C = res >> 8;
2165 flag_NotZ = res & 0xFFFF;
2166 DREGu16((Opcode >> 0) & 7) = res;
2167RET(8)
2168}
2169
2170// SUBI
2171OPCODE(0x0450)
2172{
2173 u32 adr, res;
2174 u32 src, dst;
2175
2176 FETCH_WORD(src);
2177 adr = AREG((Opcode >> 0) & 7);
2178 PRE_IO
2179 READ_WORD_F(adr, dst)
2180 res = dst - src;
2181 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
2182 flag_N = flag_X = flag_C = res >> 8;
2183 flag_NotZ = res & 0xFFFF;
2184 WRITE_WORD_F(adr, res)
2185 POST_IO
2186RET(16)
2187}
2188
2189// SUBI
2190OPCODE(0x0458)
2191{
2192 u32 adr, res;
2193 u32 src, dst;
2194
2195 FETCH_WORD(src);
2196 adr = AREG((Opcode >> 0) & 7);
2197 AREG((Opcode >> 0) & 7) += 2;
2198 PRE_IO
2199 READ_WORD_F(adr, dst)
2200 res = dst - src;
2201 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
2202 flag_N = flag_X = flag_C = res >> 8;
2203 flag_NotZ = res & 0xFFFF;
2204 WRITE_WORD_F(adr, res)
2205 POST_IO
2206RET(16)
2207}
2208
2209// SUBI
2210OPCODE(0x0460)
2211{
2212 u32 adr, res;
2213 u32 src, dst;
2214
2215 FETCH_WORD(src);
2216 adr = AREG((Opcode >> 0) & 7) - 2;
2217 AREG((Opcode >> 0) & 7) = adr;
2218 PRE_IO
2219 READ_WORD_F(adr, dst)
2220 res = dst - src;
2221 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
2222 flag_N = flag_X = flag_C = res >> 8;
2223 flag_NotZ = res & 0xFFFF;
2224 WRITE_WORD_F(adr, res)
2225 POST_IO
2226RET(18)
2227}
2228
2229// SUBI
2230OPCODE(0x0468)
2231{
2232 u32 adr, res;
2233 u32 src, dst;
2234
2235 FETCH_WORD(src);
2236 FETCH_SWORD(adr);
2237 adr += AREG((Opcode >> 0) & 7);
2238 PRE_IO
2239 READ_WORD_F(adr, dst)
2240 res = dst - src;
2241 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
2242 flag_N = flag_X = flag_C = res >> 8;
2243 flag_NotZ = res & 0xFFFF;
2244 WRITE_WORD_F(adr, res)
2245 POST_IO
2246RET(20)
2247}
2248
2249// SUBI
2250OPCODE(0x0470)
2251{
2252 u32 adr, res;
2253 u32 src, dst;
2254
2255 FETCH_WORD(src);
2256 adr = AREG((Opcode >> 0) & 7);
2257 DECODE_EXT_WORD
2258 PRE_IO
2259 READ_WORD_F(adr, dst)
2260 res = dst - src;
2261 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
2262 flag_N = flag_X = flag_C = res >> 8;
2263 flag_NotZ = res & 0xFFFF;
2264 WRITE_WORD_F(adr, res)
2265 POST_IO
2266RET(22)
2267}
2268
2269// SUBI
2270OPCODE(0x0478)
2271{
2272 u32 adr, res;
2273 u32 src, dst;
2274
2275 FETCH_WORD(src);
2276 FETCH_SWORD(adr);
2277 PRE_IO
2278 READ_WORD_F(adr, dst)
2279 res = dst - src;
2280 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
2281 flag_N = flag_X = flag_C = res >> 8;
2282 flag_NotZ = res & 0xFFFF;
2283 WRITE_WORD_F(adr, res)
2284 POST_IO
2285RET(20)
2286}
2287
2288// SUBI
2289OPCODE(0x0479)
2290{
2291 u32 adr, res;
2292 u32 src, dst;
2293
2294 FETCH_WORD(src);
2295 FETCH_LONG(adr);
2296 PRE_IO
2297 READ_WORD_F(adr, dst)
2298 res = dst - src;
2299 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
2300 flag_N = flag_X = flag_C = res >> 8;
2301 flag_NotZ = res & 0xFFFF;
2302 WRITE_WORD_F(adr, res)
2303 POST_IO
2304RET(24)
2305}
2306
2307// SUBI
2308OPCODE(0x045F)
2309{
2310 u32 adr, res;
2311 u32 src, dst;
2312
2313 FETCH_WORD(src);
2314 adr = AREG(7);
2315 AREG(7) += 2;
2316 PRE_IO
2317 READ_WORD_F(adr, dst)
2318 res = dst - src;
2319 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
2320 flag_N = flag_X = flag_C = res >> 8;
2321 flag_NotZ = res & 0xFFFF;
2322 WRITE_WORD_F(adr, res)
2323 POST_IO
2324RET(16)
2325}
2326
2327// SUBI
2328OPCODE(0x0467)
2329{
2330 u32 adr, res;
2331 u32 src, dst;
2332
2333 FETCH_WORD(src);
2334 adr = AREG(7) - 2;
2335 AREG(7) = adr;
2336 PRE_IO
2337 READ_WORD_F(adr, dst)
2338 res = dst - src;
2339 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
2340 flag_N = flag_X = flag_C = res >> 8;
2341 flag_NotZ = res & 0xFFFF;
2342 WRITE_WORD_F(adr, res)
2343 POST_IO
2344RET(18)
2345}
2346
2347// SUBI
2348OPCODE(0x0480)
2349{
2350 u32 adr, res;
2351 u32 src, dst;
2352
2353 FETCH_LONG(src);
2354 dst = DREGu32((Opcode >> 0) & 7);
2355 res = dst - src;
2356 flag_NotZ = res;
2357 flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
2358 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
2359 flag_N = res >> 24;
2360 DREGu32((Opcode >> 0) & 7) = res;
2361RET(16)
2362}
2363
2364// SUBI
2365OPCODE(0x0490)
2366{
2367 u32 adr, res;
2368 u32 src, dst;
2369
2370 FETCH_LONG(src);
2371 adr = AREG((Opcode >> 0) & 7);
2372 PRE_IO
2373 READ_LONG_F(adr, dst)
2374 res = dst - src;
2375 flag_NotZ = res;
2376 flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
2377 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
2378 flag_N = res >> 24;
2379 WRITE_LONG_F(adr, res)
2380 POST_IO
2381RET(28)
2382}
2383
2384// SUBI
2385OPCODE(0x0498)
2386{
2387 u32 adr, res;
2388 u32 src, dst;
2389
2390 FETCH_LONG(src);
2391 adr = AREG((Opcode >> 0) & 7);
2392 AREG((Opcode >> 0) & 7) += 4;
2393 PRE_IO
2394 READ_LONG_F(adr, dst)
2395 res = dst - src;
2396 flag_NotZ = res;
2397 flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
2398 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
2399 flag_N = res >> 24;
2400 WRITE_LONG_F(adr, res)
2401 POST_IO
2402RET(28)
2403}
2404
2405// SUBI
2406OPCODE(0x04A0)
2407{
2408 u32 adr, res;
2409 u32 src, dst;
2410
2411 FETCH_LONG(src);
2412 adr = AREG((Opcode >> 0) & 7) - 4;
2413 AREG((Opcode >> 0) & 7) = adr;
2414 PRE_IO
2415 READ_LONG_F(adr, dst)
2416 res = dst - src;
2417 flag_NotZ = res;
2418 flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
2419 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
2420 flag_N = res >> 24;
2421 WRITE_LONG_F(adr, res)
2422 POST_IO
2423RET(30)
2424}
2425
2426// SUBI
2427OPCODE(0x04A8)
2428{
2429 u32 adr, res;
2430 u32 src, dst;
2431
2432 FETCH_LONG(src);
2433 FETCH_SWORD(adr);
2434 adr += AREG((Opcode >> 0) & 7);
2435 PRE_IO
2436 READ_LONG_F(adr, dst)
2437 res = dst - src;
2438 flag_NotZ = res;
2439 flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
2440 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
2441 flag_N = res >> 24;
2442 WRITE_LONG_F(adr, res)
2443 POST_IO
2444RET(32)
2445}
2446
2447// SUBI
2448OPCODE(0x04B0)
2449{
2450 u32 adr, res;
2451 u32 src, dst;
2452
2453 FETCH_LONG(src);
2454 adr = AREG((Opcode >> 0) & 7);
2455 DECODE_EXT_WORD
2456 PRE_IO
2457 READ_LONG_F(adr, dst)
2458 res = dst - src;
2459 flag_NotZ = res;
2460 flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
2461 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
2462 flag_N = res >> 24;
2463 WRITE_LONG_F(adr, res)
2464 POST_IO
2465RET(34)
2466}
2467
2468// SUBI
2469OPCODE(0x04B8)
2470{
2471 u32 adr, res;
2472 u32 src, dst;
2473
2474 FETCH_LONG(src);
2475 FETCH_SWORD(adr);
2476 PRE_IO
2477 READ_LONG_F(adr, dst)
2478 res = dst - src;
2479 flag_NotZ = res;
2480 flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
2481 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
2482 flag_N = res >> 24;
2483 WRITE_LONG_F(adr, res)
2484 POST_IO
2485RET(32)
2486}
2487
2488// SUBI
2489OPCODE(0x04B9)
2490{
2491 u32 adr, res;
2492 u32 src, dst;
2493
2494 FETCH_LONG(src);
2495 FETCH_LONG(adr);
2496 PRE_IO
2497 READ_LONG_F(adr, dst)
2498 res = dst - src;
2499 flag_NotZ = res;
2500 flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
2501 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
2502 flag_N = res >> 24;
2503 WRITE_LONG_F(adr, res)
2504 POST_IO
2505RET(36)
2506}
2507
2508// SUBI
2509OPCODE(0x049F)
2510{
2511 u32 adr, res;
2512 u32 src, dst;
2513
2514 FETCH_LONG(src);
2515 adr = AREG(7);
2516 AREG(7) += 4;
2517 PRE_IO
2518 READ_LONG_F(adr, dst)
2519 res = dst - src;
2520 flag_NotZ = res;
2521 flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
2522 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
2523 flag_N = res >> 24;
2524 WRITE_LONG_F(adr, res)
2525 POST_IO
2526RET(28)
2527}
2528
2529// SUBI
2530OPCODE(0x04A7)
2531{
2532 u32 adr, res;
2533 u32 src, dst;
2534
2535 FETCH_LONG(src);
2536 adr = AREG(7) - 4;
2537 AREG(7) = adr;
2538 PRE_IO
2539 READ_LONG_F(adr, dst)
2540 res = dst - src;
2541 flag_NotZ = res;
2542 flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
2543 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
2544 flag_N = res >> 24;
2545 WRITE_LONG_F(adr, res)
2546 POST_IO
2547RET(30)
2548}
2549
2550// ADDI
2551OPCODE(0x0600)
2552{
2553 u32 adr, res;
2554 u32 src, dst;
2555
2556 FETCH_BYTE(src);
2557 dst = DREGu8((Opcode >> 0) & 7);
2558 res = dst + src;
2559 flag_N = flag_X = flag_C = res;
2560 flag_V = (src ^ res) & (dst ^ res);
2561 flag_NotZ = res & 0xFF;
2562 DREGu8((Opcode >> 0) & 7) = res;
2563RET(8)
2564}
2565
2566// ADDI
2567OPCODE(0x0610)
2568{
2569 u32 adr, res;
2570 u32 src, dst;
2571
2572 FETCH_BYTE(src);
2573 adr = AREG((Opcode >> 0) & 7);
2574 PRE_IO
2575 READ_BYTE_F(adr, dst)
2576 res = dst + src;
2577 flag_N = flag_X = flag_C = res;
2578 flag_V = (src ^ res) & (dst ^ res);
2579 flag_NotZ = res & 0xFF;
2580 WRITE_BYTE_F(adr, res)
2581 POST_IO
2582RET(16)
2583}
2584
2585// ADDI
2586OPCODE(0x0618)
2587{
2588 u32 adr, res;
2589 u32 src, dst;
2590
2591 FETCH_BYTE(src);
2592 adr = AREG((Opcode >> 0) & 7);
2593 AREG((Opcode >> 0) & 7) += 1;
2594 PRE_IO
2595 READ_BYTE_F(adr, dst)
2596 res = dst + src;
2597 flag_N = flag_X = flag_C = res;
2598 flag_V = (src ^ res) & (dst ^ res);
2599 flag_NotZ = res & 0xFF;
2600 WRITE_BYTE_F(adr, res)
2601 POST_IO
2602RET(16)
2603}
2604
2605// ADDI
2606OPCODE(0x0620)
2607{
2608 u32 adr, res;
2609 u32 src, dst;
2610
2611 FETCH_BYTE(src);
2612 adr = AREG((Opcode >> 0) & 7) - 1;
2613 AREG((Opcode >> 0) & 7) = adr;
2614 PRE_IO
2615 READ_BYTE_F(adr, dst)
2616 res = dst + src;
2617 flag_N = flag_X = flag_C = res;
2618 flag_V = (src ^ res) & (dst ^ res);
2619 flag_NotZ = res & 0xFF;
2620 WRITE_BYTE_F(adr, res)
2621 POST_IO
2622RET(18)
2623}
2624
2625// ADDI
2626OPCODE(0x0628)
2627{
2628 u32 adr, res;
2629 u32 src, dst;
2630
2631 FETCH_BYTE(src);
2632 FETCH_SWORD(adr);
2633 adr += AREG((Opcode >> 0) & 7);
2634 PRE_IO
2635 READ_BYTE_F(adr, dst)
2636 res = dst + src;
2637 flag_N = flag_X = flag_C = res;
2638 flag_V = (src ^ res) & (dst ^ res);
2639 flag_NotZ = res & 0xFF;
2640 WRITE_BYTE_F(adr, res)
2641 POST_IO
2642RET(20)
2643}
2644
2645// ADDI
2646OPCODE(0x0630)
2647{
2648 u32 adr, res;
2649 u32 src, dst;
2650
2651 FETCH_BYTE(src);
2652 adr = AREG((Opcode >> 0) & 7);
2653 DECODE_EXT_WORD
2654 PRE_IO
2655 READ_BYTE_F(adr, dst)
2656 res = dst + src;
2657 flag_N = flag_X = flag_C = res;
2658 flag_V = (src ^ res) & (dst ^ res);
2659 flag_NotZ = res & 0xFF;
2660 WRITE_BYTE_F(adr, res)
2661 POST_IO
2662RET(22)
2663}
2664
2665// ADDI
2666OPCODE(0x0638)
2667{
2668 u32 adr, res;
2669 u32 src, dst;
2670
2671 FETCH_BYTE(src);
2672 FETCH_SWORD(adr);
2673 PRE_IO
2674 READ_BYTE_F(adr, dst)
2675 res = dst + src;
2676 flag_N = flag_X = flag_C = res;
2677 flag_V = (src ^ res) & (dst ^ res);
2678 flag_NotZ = res & 0xFF;
2679 WRITE_BYTE_F(adr, res)
2680 POST_IO
2681RET(20)
2682}
2683
2684// ADDI
2685OPCODE(0x0639)
2686{
2687 u32 adr, res;
2688 u32 src, dst;
2689
2690 FETCH_BYTE(src);
2691 FETCH_LONG(adr);
2692 PRE_IO
2693 READ_BYTE_F(adr, dst)
2694 res = dst + src;
2695 flag_N = flag_X = flag_C = res;
2696 flag_V = (src ^ res) & (dst ^ res);
2697 flag_NotZ = res & 0xFF;
2698 WRITE_BYTE_F(adr, res)
2699 POST_IO
2700RET(24)
2701}
2702
2703// ADDI
2704OPCODE(0x061F)
2705{
2706 u32 adr, res;
2707 u32 src, dst;
2708
2709 FETCH_BYTE(src);
2710 adr = AREG(7);
2711 AREG(7) += 2;
2712 PRE_IO
2713 READ_BYTE_F(adr, dst)
2714 res = dst + src;
2715 flag_N = flag_X = flag_C = res;
2716 flag_V = (src ^ res) & (dst ^ res);
2717 flag_NotZ = res & 0xFF;
2718 WRITE_BYTE_F(adr, res)
2719 POST_IO
2720RET(16)
2721}
2722
2723// ADDI
2724OPCODE(0x0627)
2725{
2726 u32 adr, res;
2727 u32 src, dst;
2728
2729 FETCH_BYTE(src);
2730 adr = AREG(7) - 2;
2731 AREG(7) = adr;
2732 PRE_IO
2733 READ_BYTE_F(adr, dst)
2734 res = dst + src;
2735 flag_N = flag_X = flag_C = res;
2736 flag_V = (src ^ res) & (dst ^ res);
2737 flag_NotZ = res & 0xFF;
2738 WRITE_BYTE_F(adr, res)
2739 POST_IO
2740RET(18)
2741}
2742
2743// ADDI
2744OPCODE(0x0640)
2745{
2746 u32 adr, res;
2747 u32 src, dst;
2748
2749 FETCH_WORD(src);
2750 dst = DREGu16((Opcode >> 0) & 7);
2751 res = dst + src;
2752 flag_V = ((src ^ res) & (dst ^ res)) >> 8;
2753 flag_N = flag_X = flag_C = res >> 8;
2754 flag_NotZ = res & 0xFFFF;
2755 DREGu16((Opcode >> 0) & 7) = res;
2756RET(8)
2757}
2758
2759// ADDI
2760OPCODE(0x0650)
2761{
2762 u32 adr, res;
2763 u32 src, dst;
2764
2765 FETCH_WORD(src);
2766 adr = AREG((Opcode >> 0) & 7);
2767 PRE_IO
2768 READ_WORD_F(adr, dst)
2769 res = dst + src;
2770 flag_V = ((src ^ res) & (dst ^ res)) >> 8;
2771 flag_N = flag_X = flag_C = res >> 8;
2772 flag_NotZ = res & 0xFFFF;
2773 WRITE_WORD_F(adr, res)
2774 POST_IO
2775RET(16)
2776}
2777
2778// ADDI
2779OPCODE(0x0658)
2780{
2781 u32 adr, res;
2782 u32 src, dst;
2783
2784 FETCH_WORD(src);
2785 adr = AREG((Opcode >> 0) & 7);
2786 AREG((Opcode >> 0) & 7) += 2;
2787 PRE_IO
2788 READ_WORD_F(adr, dst)
2789 res = dst + src;
2790 flag_V = ((src ^ res) & (dst ^ res)) >> 8;
2791 flag_N = flag_X = flag_C = res >> 8;
2792 flag_NotZ = res & 0xFFFF;
2793 WRITE_WORD_F(adr, res)
2794 POST_IO
2795RET(16)
2796}
2797
2798// ADDI
2799OPCODE(0x0660)
2800{
2801 u32 adr, res;
2802 u32 src, dst;
2803
2804 FETCH_WORD(src);
2805 adr = AREG((Opcode >> 0) & 7) - 2;
2806 AREG((Opcode >> 0) & 7) = adr;
2807 PRE_IO
2808 READ_WORD_F(adr, dst)
2809 res = dst + src;
2810 flag_V = ((src ^ res) & (dst ^ res)) >> 8;
2811 flag_N = flag_X = flag_C = res >> 8;
2812 flag_NotZ = res & 0xFFFF;
2813 WRITE_WORD_F(adr, res)
2814 POST_IO
2815RET(18)
2816}
2817
2818// ADDI
2819OPCODE(0x0668)
2820{
2821 u32 adr, res;
2822 u32 src, dst;
2823
2824 FETCH_WORD(src);
2825 FETCH_SWORD(adr);
2826 adr += AREG((Opcode >> 0) & 7);
2827 PRE_IO
2828 READ_WORD_F(adr, dst)
2829 res = dst + src;
2830 flag_V = ((src ^ res) & (dst ^ res)) >> 8;
2831 flag_N = flag_X = flag_C = res >> 8;
2832 flag_NotZ = res & 0xFFFF;
2833 WRITE_WORD_F(adr, res)
2834 POST_IO
2835RET(20)
2836}
2837
2838// ADDI
2839OPCODE(0x0670)
2840{
2841 u32 adr, res;
2842 u32 src, dst;
2843
2844 FETCH_WORD(src);
2845 adr = AREG((Opcode >> 0) & 7);
2846 DECODE_EXT_WORD
2847 PRE_IO
2848 READ_WORD_F(adr, dst)
2849 res = dst + src;
2850 flag_V = ((src ^ res) & (dst ^ res)) >> 8;
2851 flag_N = flag_X = flag_C = res >> 8;
2852 flag_NotZ = res & 0xFFFF;
2853 WRITE_WORD_F(adr, res)
2854 POST_IO
2855RET(22)
2856}
2857
2858// ADDI
2859OPCODE(0x0678)
2860{
2861 u32 adr, res;
2862 u32 src, dst;
2863
2864 FETCH_WORD(src);
2865 FETCH_SWORD(adr);
2866 PRE_IO
2867 READ_WORD_F(adr, dst)
2868 res = dst + src;
2869 flag_V = ((src ^ res) & (dst ^ res)) >> 8;
2870 flag_N = flag_X = flag_C = res >> 8;
2871 flag_NotZ = res & 0xFFFF;
2872 WRITE_WORD_F(adr, res)
2873 POST_IO
2874RET(20)
2875}
2876
2877// ADDI
2878OPCODE(0x0679)
2879{
2880 u32 adr, res;
2881 u32 src, dst;
2882
2883 FETCH_WORD(src);
2884 FETCH_LONG(adr);
2885 PRE_IO
2886 READ_WORD_F(adr, dst)
2887 res = dst + src;
2888 flag_V = ((src ^ res) & (dst ^ res)) >> 8;
2889 flag_N = flag_X = flag_C = res >> 8;
2890 flag_NotZ = res & 0xFFFF;
2891 WRITE_WORD_F(adr, res)
2892 POST_IO
2893RET(24)
2894}
2895
2896// ADDI
2897OPCODE(0x065F)
2898{
2899 u32 adr, res;
2900 u32 src, dst;
2901
2902 FETCH_WORD(src);
2903 adr = AREG(7);
2904 AREG(7) += 2;
2905 PRE_IO
2906 READ_WORD_F(adr, dst)
2907 res = dst + src;
2908 flag_V = ((src ^ res) & (dst ^ res)) >> 8;
2909 flag_N = flag_X = flag_C = res >> 8;
2910 flag_NotZ = res & 0xFFFF;
2911 WRITE_WORD_F(adr, res)
2912 POST_IO
2913RET(16)
2914}
2915
2916// ADDI
2917OPCODE(0x0667)
2918{
2919 u32 adr, res;
2920 u32 src, dst;
2921
2922 FETCH_WORD(src);
2923 adr = AREG(7) - 2;
2924 AREG(7) = adr;
2925 PRE_IO
2926 READ_WORD_F(adr, dst)
2927 res = dst + src;
2928 flag_V = ((src ^ res) & (dst ^ res)) >> 8;
2929 flag_N = flag_X = flag_C = res >> 8;
2930 flag_NotZ = res & 0xFFFF;
2931 WRITE_WORD_F(adr, res)
2932 POST_IO
2933RET(18)
2934}
2935
2936// ADDI
2937OPCODE(0x0680)
2938{
2939 u32 adr, res;
2940 u32 src, dst;
2941
2942 FETCH_LONG(src);
2943 dst = DREGu32((Opcode >> 0) & 7);
2944 res = dst + src;
2945 flag_NotZ = res;
2946 flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
2947 flag_V = ((src ^ res) & (dst ^ res)) >> 24;
2948 flag_N = res >> 24;
2949 DREGu32((Opcode >> 0) & 7) = res;
2950RET(16)
2951}
2952
2953// ADDI
2954OPCODE(0x0690)
2955{
2956 u32 adr, res;
2957 u32 src, dst;
2958
2959 FETCH_LONG(src);
2960 adr = AREG((Opcode >> 0) & 7);
2961 PRE_IO
2962 READ_LONG_F(adr, dst)
2963 res = dst + src;
2964 flag_NotZ = res;
2965 flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
2966 flag_V = ((src ^ res) & (dst ^ res)) >> 24;
2967 flag_N = res >> 24;
2968 WRITE_LONG_F(adr, res)
2969 POST_IO
2970RET(28)
2971}
2972
2973// ADDI
2974OPCODE(0x0698)
2975{
2976 u32 adr, res;
2977 u32 src, dst;
2978
2979 FETCH_LONG(src);
2980 adr = AREG((Opcode >> 0) & 7);
2981 AREG((Opcode >> 0) & 7) += 4;
2982 PRE_IO
2983 READ_LONG_F(adr, dst)
2984 res = dst + src;
2985 flag_NotZ = res;
2986 flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
2987 flag_V = ((src ^ res) & (dst ^ res)) >> 24;
2988 flag_N = res >> 24;
2989 WRITE_LONG_F(adr, res)
2990 POST_IO
2991RET(28)
2992}
2993
2994// ADDI
2995OPCODE(0x06A0)
2996{
2997 u32 adr, res;
2998 u32 src, dst;
2999
3000 FETCH_LONG(src);
3001 adr = AREG((Opcode >> 0) & 7) - 4;
3002 AREG((Opcode >> 0) & 7) = adr;
3003 PRE_IO
3004 READ_LONG_F(adr, dst)
3005 res = dst + src;
3006 flag_NotZ = res;
3007 flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
3008 flag_V = ((src ^ res) & (dst ^ res)) >> 24;
3009 flag_N = res >> 24;
3010 WRITE_LONG_F(adr, res)
3011 POST_IO
3012RET(30)
3013}
3014
3015// ADDI
3016OPCODE(0x06A8)
3017{
3018 u32 adr, res;
3019 u32 src, dst;
3020
3021 FETCH_LONG(src);
3022 FETCH_SWORD(adr);
3023 adr += AREG((Opcode >> 0) & 7);
3024 PRE_IO
3025 READ_LONG_F(adr, dst)
3026 res = dst + src;
3027 flag_NotZ = res;
3028 flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
3029 flag_V = ((src ^ res) & (dst ^ res)) >> 24;
3030 flag_N = res >> 24;
3031 WRITE_LONG_F(adr, res)
3032 POST_IO
3033RET(32)
3034}
3035
3036// ADDI
3037OPCODE(0x06B0)
3038{
3039 u32 adr, res;
3040 u32 src, dst;
3041
3042 FETCH_LONG(src);
3043 adr = AREG((Opcode >> 0) & 7);
3044 DECODE_EXT_WORD
3045 PRE_IO
3046 READ_LONG_F(adr, dst)
3047 res = dst + src;
3048 flag_NotZ = res;
3049 flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
3050 flag_V = ((src ^ res) & (dst ^ res)) >> 24;
3051 flag_N = res >> 24;
3052 WRITE_LONG_F(adr, res)
3053 POST_IO
3054RET(34)
3055}
3056
3057// ADDI
3058OPCODE(0x06B8)
3059{
3060 u32 adr, res;
3061 u32 src, dst;
3062
3063 FETCH_LONG(src);
3064 FETCH_SWORD(adr);
3065 PRE_IO
3066 READ_LONG_F(adr, dst)
3067 res = dst + src;
3068 flag_NotZ = res;
3069 flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
3070 flag_V = ((src ^ res) & (dst ^ res)) >> 24;
3071 flag_N = res >> 24;
3072 WRITE_LONG_F(adr, res)
3073 POST_IO
3074RET(32)
3075}
3076
3077// ADDI
3078OPCODE(0x06B9)
3079{
3080 u32 adr, res;
3081 u32 src, dst;
3082
3083 FETCH_LONG(src);
3084 FETCH_LONG(adr);
3085 PRE_IO
3086 READ_LONG_F(adr, dst)
3087 res = dst + src;
3088 flag_NotZ = res;
3089 flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
3090 flag_V = ((src ^ res) & (dst ^ res)) >> 24;
3091 flag_N = res >> 24;
3092 WRITE_LONG_F(adr, res)
3093 POST_IO
3094RET(36)
3095}
3096
3097// ADDI
3098OPCODE(0x069F)
3099{
3100 u32 adr, res;
3101 u32 src, dst;
3102
3103 FETCH_LONG(src);
3104 adr = AREG(7);
3105 AREG(7) += 4;
3106 PRE_IO
3107 READ_LONG_F(adr, dst)
3108 res = dst + src;
3109 flag_NotZ = res;
3110 flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
3111 flag_V = ((src ^ res) & (dst ^ res)) >> 24;
3112 flag_N = res >> 24;
3113 WRITE_LONG_F(adr, res)
3114 POST_IO
3115RET(28)
3116}
3117
3118// ADDI
3119OPCODE(0x06A7)
3120{
3121 u32 adr, res;
3122 u32 src, dst;
3123
3124 FETCH_LONG(src);
3125 adr = AREG(7) - 4;
3126 AREG(7) = adr;
3127 PRE_IO
3128 READ_LONG_F(adr, dst)
3129 res = dst + src;
3130 flag_NotZ = res;
3131 flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
3132 flag_V = ((src ^ res) & (dst ^ res)) >> 24;
3133 flag_N = res >> 24;
3134 WRITE_LONG_F(adr, res)
3135 POST_IO
3136RET(30)
3137}
3138
3139// CMPI
3140OPCODE(0x0C00)
3141{
3142 u32 adr, res;
3143 u32 src, dst;
3144
3145 FETCH_BYTE(src);
3146 dst = DREGu8((Opcode >> 0) & 7);
3147 res = dst - src;
3148 flag_N = flag_C = res;
3149 flag_V = (src ^ dst) & (res ^ dst);
3150 flag_NotZ = res & 0xFF;
3151RET(8)
3152}
3153
3154// CMPI
3155OPCODE(0x0C10)
3156{
3157 u32 adr, res;
3158 u32 src, dst;
3159
3160 FETCH_BYTE(src);
3161 adr = AREG((Opcode >> 0) & 7);
3162 PRE_IO
3163 READ_BYTE_F(adr, dst)
3164 res = dst - src;
3165 flag_N = flag_C = res;
3166 flag_V = (src ^ dst) & (res ^ dst);
3167 flag_NotZ = res & 0xFF;
3168 POST_IO
3169RET(12)
3170}
3171
3172// CMPI
3173OPCODE(0x0C18)
3174{
3175 u32 adr, res;
3176 u32 src, dst;
3177
3178 FETCH_BYTE(src);
3179 adr = AREG((Opcode >> 0) & 7);
3180 AREG((Opcode >> 0) & 7) += 1;
3181 PRE_IO
3182 READ_BYTE_F(adr, dst)
3183 res = dst - src;
3184 flag_N = flag_C = res;
3185 flag_V = (src ^ dst) & (res ^ dst);
3186 flag_NotZ = res & 0xFF;
3187 POST_IO
3188RET(12)
3189}
3190
3191// CMPI
3192OPCODE(0x0C20)
3193{
3194 u32 adr, res;
3195 u32 src, dst;
3196
3197 FETCH_BYTE(src);
3198 adr = AREG((Opcode >> 0) & 7) - 1;
3199 AREG((Opcode >> 0) & 7) = adr;
3200 PRE_IO
3201 READ_BYTE_F(adr, dst)
3202 res = dst - src;
3203 flag_N = flag_C = res;
3204 flag_V = (src ^ dst) & (res ^ dst);
3205 flag_NotZ = res & 0xFF;
3206 POST_IO
3207RET(14)
3208}
3209
3210// CMPI
3211OPCODE(0x0C28)
3212{
3213 u32 adr, res;
3214 u32 src, dst;
3215
3216 FETCH_BYTE(src);
3217 FETCH_SWORD(adr);
3218 adr += AREG((Opcode >> 0) & 7);
3219 PRE_IO
3220 READ_BYTE_F(adr, dst)
3221 res = dst - src;
3222 flag_N = flag_C = res;
3223 flag_V = (src ^ dst) & (res ^ dst);
3224 flag_NotZ = res & 0xFF;
3225 POST_IO
3226RET(16)
3227}
3228
3229// CMPI
3230OPCODE(0x0C30)
3231{
3232 u32 adr, res;
3233 u32 src, dst;
3234
3235 FETCH_BYTE(src);
3236 adr = AREG((Opcode >> 0) & 7);
3237 DECODE_EXT_WORD
3238 PRE_IO
3239 READ_BYTE_F(adr, dst)
3240 res = dst - src;
3241 flag_N = flag_C = res;
3242 flag_V = (src ^ dst) & (res ^ dst);
3243 flag_NotZ = res & 0xFF;
3244 POST_IO
3245RET(18)
3246}
3247
3248// CMPI
3249OPCODE(0x0C38)
3250{
3251 u32 adr, res;
3252 u32 src, dst;
3253
3254 FETCH_BYTE(src);
3255 FETCH_SWORD(adr);
3256 PRE_IO
3257 READ_BYTE_F(adr, dst)
3258 res = dst - src;
3259 flag_N = flag_C = res;
3260 flag_V = (src ^ dst) & (res ^ dst);
3261 flag_NotZ = res & 0xFF;
3262 POST_IO
3263RET(16)
3264}
3265
3266// CMPI
3267OPCODE(0x0C39)
3268{
3269 u32 adr, res;
3270 u32 src, dst;
3271
3272 FETCH_BYTE(src);
3273 FETCH_LONG(adr);
3274 PRE_IO
3275 READ_BYTE_F(adr, dst)
3276 res = dst - src;
3277 flag_N = flag_C = res;
3278 flag_V = (src ^ dst) & (res ^ dst);
3279 flag_NotZ = res & 0xFF;
3280 POST_IO
3281RET(20)
3282}
3283
3284// CMPI
3285OPCODE(0x0C1F)
3286{
3287 u32 adr, res;
3288 u32 src, dst;
3289
3290 FETCH_BYTE(src);
3291 adr = AREG(7);
3292 AREG(7) += 2;
3293 PRE_IO
3294 READ_BYTE_F(adr, dst)
3295 res = dst - src;
3296 flag_N = flag_C = res;
3297 flag_V = (src ^ dst) & (res ^ dst);
3298 flag_NotZ = res & 0xFF;
3299 POST_IO
3300RET(12)
3301}
3302
3303// CMPI
3304OPCODE(0x0C27)
3305{
3306 u32 adr, res;
3307 u32 src, dst;
3308
3309 FETCH_BYTE(src);
3310 adr = AREG(7) - 2;
3311 AREG(7) = adr;
3312 PRE_IO
3313 READ_BYTE_F(adr, dst)
3314 res = dst - src;
3315 flag_N = flag_C = res;
3316 flag_V = (src ^ dst) & (res ^ dst);
3317 flag_NotZ = res & 0xFF;
3318 POST_IO
3319RET(14)
3320}
3321
3322// CMPI
3323OPCODE(0x0C40)
3324{
3325 u32 adr, res;
3326 u32 src, dst;
3327
3328 FETCH_WORD(src);
3329 dst = DREGu16((Opcode >> 0) & 7);
3330 res = dst - src;
3331 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
3332 flag_N = flag_C = res >> 8;
3333 flag_NotZ = res & 0xFFFF;
3334RET(8)
3335}
3336
3337// CMPI
3338OPCODE(0x0C50)
3339{
3340 u32 adr, res;
3341 u32 src, dst;
3342
3343 FETCH_WORD(src);
3344 adr = AREG((Opcode >> 0) & 7);
3345 PRE_IO
3346 READ_WORD_F(adr, dst)
3347 res = dst - src;
3348 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
3349 flag_N = flag_C = res >> 8;
3350 flag_NotZ = res & 0xFFFF;
3351 POST_IO
3352RET(12)
3353}
3354
3355// CMPI
3356OPCODE(0x0C58)
3357{
3358 u32 adr, res;
3359 u32 src, dst;
3360
3361 FETCH_WORD(src);
3362 adr = AREG((Opcode >> 0) & 7);
3363 AREG((Opcode >> 0) & 7) += 2;
3364 PRE_IO
3365 READ_WORD_F(adr, dst)
3366 res = dst - src;
3367 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
3368 flag_N = flag_C = res >> 8;
3369 flag_NotZ = res & 0xFFFF;
3370 POST_IO
3371RET(12)
3372}
3373
3374// CMPI
3375OPCODE(0x0C60)
3376{
3377 u32 adr, res;
3378 u32 src, dst;
3379
3380 FETCH_WORD(src);
3381 adr = AREG((Opcode >> 0) & 7) - 2;
3382 AREG((Opcode >> 0) & 7) = adr;
3383 PRE_IO
3384 READ_WORD_F(adr, dst)
3385 res = dst - src;
3386 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
3387 flag_N = flag_C = res >> 8;
3388 flag_NotZ = res & 0xFFFF;
3389 POST_IO
3390RET(14)
3391}
3392
3393// CMPI
3394OPCODE(0x0C68)
3395{
3396 u32 adr, res;
3397 u32 src, dst;
3398
3399 FETCH_WORD(src);
3400 FETCH_SWORD(adr);
3401 adr += AREG((Opcode >> 0) & 7);
3402 PRE_IO
3403 READ_WORD_F(adr, dst)
3404 res = dst - src;
3405 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
3406 flag_N = flag_C = res >> 8;
3407 flag_NotZ = res & 0xFFFF;
3408 POST_IO
3409RET(16)
3410}
3411
3412// CMPI
3413OPCODE(0x0C70)
3414{
3415 u32 adr, res;
3416 u32 src, dst;
3417
3418 FETCH_WORD(src);
3419 adr = AREG((Opcode >> 0) & 7);
3420 DECODE_EXT_WORD
3421 PRE_IO
3422 READ_WORD_F(adr, dst)
3423 res = dst - src;
3424 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
3425 flag_N = flag_C = res >> 8;
3426 flag_NotZ = res & 0xFFFF;
3427 POST_IO
3428RET(18)
3429}
3430
3431// CMPI
3432OPCODE(0x0C78)
3433{
3434 u32 adr, res;
3435 u32 src, dst;
3436
3437 FETCH_WORD(src);
3438 FETCH_SWORD(adr);
3439 PRE_IO
3440 READ_WORD_F(adr, dst)
3441 res = dst - src;
3442 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
3443 flag_N = flag_C = res >> 8;
3444 flag_NotZ = res & 0xFFFF;
3445 POST_IO
3446RET(16)
3447}
3448
3449// CMPI
3450OPCODE(0x0C79)
3451{
3452 u32 adr, res;
3453 u32 src, dst;
3454
3455 FETCH_WORD(src);
3456 FETCH_LONG(adr);
3457 PRE_IO
3458 READ_WORD_F(adr, dst)
3459 res = dst - src;
3460 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
3461 flag_N = flag_C = res >> 8;
3462 flag_NotZ = res & 0xFFFF;
3463 POST_IO
3464RET(20)
3465}
3466
3467// CMPI
3468OPCODE(0x0C5F)
3469{
3470 u32 adr, res;
3471 u32 src, dst;
3472
3473 FETCH_WORD(src);
3474 adr = AREG(7);
3475 AREG(7) += 2;
3476 PRE_IO
3477 READ_WORD_F(adr, dst)
3478 res = dst - src;
3479 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
3480 flag_N = flag_C = res >> 8;
3481 flag_NotZ = res & 0xFFFF;
3482 POST_IO
3483RET(12)
3484}
3485
3486// CMPI
3487OPCODE(0x0C67)
3488{
3489 u32 adr, res;
3490 u32 src, dst;
3491
3492 FETCH_WORD(src);
3493 adr = AREG(7) - 2;
3494 AREG(7) = adr;
3495 PRE_IO
3496 READ_WORD_F(adr, dst)
3497 res = dst - src;
3498 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
3499 flag_N = flag_C = res >> 8;
3500 flag_NotZ = res & 0xFFFF;
3501 POST_IO
3502RET(14)
3503}
3504
3505// CMPI
3506OPCODE(0x0C80)
3507{
3508 u32 adr, res;
3509 u32 src, dst;
3510
3511 FETCH_LONG(src);
3512 dst = DREGu32((Opcode >> 0) & 7);
3513 res = dst - src;
3514 flag_NotZ = res;
3515 flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
3516 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
3517 flag_N = res >> 24;
3518RET(14)
3519}
3520
3521// CMPI
3522OPCODE(0x0C90)
3523{
3524 u32 adr, res;
3525 u32 src, dst;
3526
3527 FETCH_LONG(src);
3528 adr = AREG((Opcode >> 0) & 7);
3529 PRE_IO
3530 READ_LONG_F(adr, dst)
3531 res = dst - src;
3532 flag_NotZ = res;
3533 flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
3534 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
3535 flag_N = res >> 24;
3536 POST_IO
3537RET(20)
3538}
3539
3540// CMPI
3541OPCODE(0x0C98)
3542{
3543 u32 adr, res;
3544 u32 src, dst;
3545
3546 FETCH_LONG(src);
3547 adr = AREG((Opcode >> 0) & 7);
3548 AREG((Opcode >> 0) & 7) += 4;
3549 PRE_IO
3550 READ_LONG_F(adr, dst)
3551 res = dst - src;
3552 flag_NotZ = res;
3553 flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
3554 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
3555 flag_N = res >> 24;
3556 POST_IO
3557RET(20)
3558}
3559
3560// CMPI
3561OPCODE(0x0CA0)
3562{
3563 u32 adr, res;
3564 u32 src, dst;
3565
3566 FETCH_LONG(src);
3567 adr = AREG((Opcode >> 0) & 7) - 4;
3568 AREG((Opcode >> 0) & 7) = adr;
3569 PRE_IO
3570 READ_LONG_F(adr, dst)
3571 res = dst - src;
3572 flag_NotZ = res;
3573 flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
3574 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
3575 flag_N = res >> 24;
3576 POST_IO
3577RET(22)
3578}
3579
3580// CMPI
3581OPCODE(0x0CA8)
3582{
3583 u32 adr, res;
3584 u32 src, dst;
3585
3586 FETCH_LONG(src);
3587 FETCH_SWORD(adr);
3588 adr += AREG((Opcode >> 0) & 7);
3589 PRE_IO
3590 READ_LONG_F(adr, dst)
3591 res = dst - src;
3592 flag_NotZ = res;
3593 flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
3594 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
3595 flag_N = res >> 24;
3596 POST_IO
3597RET(24)
3598}
3599
3600// CMPI
3601OPCODE(0x0CB0)
3602{
3603 u32 adr, res;
3604 u32 src, dst;
3605
3606 FETCH_LONG(src);
3607 adr = AREG((Opcode >> 0) & 7);
3608 DECODE_EXT_WORD
3609 PRE_IO
3610 READ_LONG_F(adr, dst)
3611 res = dst - src;
3612 flag_NotZ = res;
3613 flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
3614 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
3615 flag_N = res >> 24;
3616 POST_IO
3617RET(26)
3618}
3619
3620// CMPI
3621OPCODE(0x0CB8)
3622{
3623 u32 adr, res;
3624 u32 src, dst;
3625
3626 FETCH_LONG(src);
3627 FETCH_SWORD(adr);
3628 PRE_IO
3629 READ_LONG_F(adr, dst)
3630 res = dst - src;
3631 flag_NotZ = res;
3632 flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
3633 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
3634 flag_N = res >> 24;
3635 POST_IO
3636RET(24)
3637}
3638
3639// CMPI
3640OPCODE(0x0CB9)
3641{
3642 u32 adr, res;
3643 u32 src, dst;
3644
3645 FETCH_LONG(src);
3646 FETCH_LONG(adr);
3647 PRE_IO
3648 READ_LONG_F(adr, dst)
3649 res = dst - src;
3650 flag_NotZ = res;
3651 flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
3652 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
3653 flag_N = res >> 24;
3654 POST_IO
3655RET(28)
3656}
3657
3658// CMPI
3659OPCODE(0x0C9F)
3660{
3661 u32 adr, res;
3662 u32 src, dst;
3663
3664 FETCH_LONG(src);
3665 adr = AREG(7);
3666 AREG(7) += 4;
3667 PRE_IO
3668 READ_LONG_F(adr, dst)
3669 res = dst - src;
3670 flag_NotZ = res;
3671 flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
3672 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
3673 flag_N = res >> 24;
3674 POST_IO
3675RET(20)
3676}
3677
3678// CMPI
3679OPCODE(0x0CA7)
3680{
3681 u32 adr, res;
3682 u32 src, dst;
3683
3684 FETCH_LONG(src);
3685 adr = AREG(7) - 4;
3686 AREG(7) = adr;
3687 PRE_IO
3688 READ_LONG_F(adr, dst)
3689 res = dst - src;
3690 flag_NotZ = res;
3691 flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
3692 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
3693 flag_N = res >> 24;
3694 POST_IO
3695RET(22)
3696}
3697
3698// BTSTn
3699OPCODE(0x0800)
3700{
3701 u32 adr, res;
3702 u32 src, dst;
3703
3704 FETCH_BYTE(src);
3705 src = 1 << (src & 31);
3706 res = DREGu32((Opcode >> 0) & 7);
3707 flag_NotZ = res & src;
3708RET(10)
3709}
3710
3711// BTSTn
3712OPCODE(0x0810)
3713{
3714 u32 adr, res;
3715 u32 src, dst;
3716
3717 FETCH_BYTE(src);
3718 src = 1 << (src & 7);
3719 adr = AREG((Opcode >> 0) & 7);
3720 PRE_IO
3721 READ_BYTE_F(adr, res)
3722 flag_NotZ = res & src;
3723 POST_IO
3724RET(12)
3725}
3726
3727// BTSTn
3728OPCODE(0x0818)
3729{
3730 u32 adr, res;
3731 u32 src, dst;
3732
3733 FETCH_BYTE(src);
3734 src = 1 << (src & 7);
3735 adr = AREG((Opcode >> 0) & 7);
3736 AREG((Opcode >> 0) & 7) += 1;
3737 PRE_IO
3738 READ_BYTE_F(adr, res)
3739 flag_NotZ = res & src;
3740 POST_IO
3741RET(12)
3742}
3743
3744// BTSTn
3745OPCODE(0x0820)
3746{
3747 u32 adr, res;
3748 u32 src, dst;
3749
3750 FETCH_BYTE(src);
3751 src = 1 << (src & 7);
3752 adr = AREG((Opcode >> 0) & 7) - 1;
3753 AREG((Opcode >> 0) & 7) = adr;
3754 PRE_IO
3755 READ_BYTE_F(adr, res)
3756 flag_NotZ = res & src;
3757 POST_IO
3758RET(14)
3759}
3760
3761// BTSTn
3762OPCODE(0x0828)
3763{
3764 u32 adr, res;
3765 u32 src, dst;
3766
3767 FETCH_BYTE(src);
3768 src = 1 << (src & 7);
3769 FETCH_SWORD(adr);
3770 adr += AREG((Opcode >> 0) & 7);
3771 PRE_IO
3772 READ_BYTE_F(adr, res)
3773 flag_NotZ = res & src;
3774 POST_IO
3775RET(16)
3776}
3777
3778// BTSTn
3779OPCODE(0x0830)
3780{
3781 u32 adr, res;
3782 u32 src, dst;
3783
3784 FETCH_BYTE(src);
3785 src = 1 << (src & 7);
3786 adr = AREG((Opcode >> 0) & 7);
3787 DECODE_EXT_WORD
3788 PRE_IO
3789 READ_BYTE_F(adr, res)
3790 flag_NotZ = res & src;
3791 POST_IO
3792RET(18)
3793}
3794
3795// BTSTn
3796OPCODE(0x0838)
3797{
3798 u32 adr, res;
3799 u32 src, dst;
3800
3801 FETCH_BYTE(src);
3802 src = 1 << (src & 7);
3803 FETCH_SWORD(adr);
3804 PRE_IO
3805 READ_BYTE_F(adr, res)
3806 flag_NotZ = res & src;
3807 POST_IO
3808RET(16)
3809}
3810
3811// BTSTn
3812OPCODE(0x0839)
3813{
3814 u32 adr, res;
3815 u32 src, dst;
3816
3817 FETCH_BYTE(src);
3818 src = 1 << (src & 7);
3819 FETCH_LONG(adr);
3820 PRE_IO
3821 READ_BYTE_F(adr, res)
3822 flag_NotZ = res & src;
3823 POST_IO
3824RET(20)
3825}
3826
3827// BTSTn
3828OPCODE(0x083A)
3829{
3830 u32 adr, res;
3831 u32 src, dst;
3832
3833 FETCH_BYTE(src);
3834 src = 1 << (src & 7);
3835 adr = GET_SWORD + ((u32)(PC) - BasePC);
3836 PC++;
3837 PRE_IO
3838 READ_BYTE_F(adr, res)
3839 flag_NotZ = res & src;
3840 POST_IO
3841RET(16)
3842}
3843
3844// BTSTn
3845OPCODE(0x083B)
3846{
3847 u32 adr, res;
3848 u32 src, dst;
3849
3850 FETCH_BYTE(src);
3851 src = 1 << (src & 7);
3852 adr = (u32)(PC) - BasePC;
3853 DECODE_EXT_WORD
3854 PRE_IO
3855 READ_BYTE_F(adr, res)
3856 flag_NotZ = res & src;
3857 POST_IO
3858RET(18)
3859}
3860
3861// BTSTn
3862OPCODE(0x081F)
3863{
3864 u32 adr, res;
3865 u32 src, dst;
3866
3867 FETCH_BYTE(src);
3868 src = 1 << (src & 7);
3869 adr = AREG(7);
3870 AREG(7) += 2;
3871 PRE_IO
3872 READ_BYTE_F(adr, res)
3873 flag_NotZ = res & src;
3874 POST_IO
3875RET(12)
3876}
3877
3878// BTSTn
3879OPCODE(0x0827)
3880{
3881 u32 adr, res;
3882 u32 src, dst;
3883
3884 FETCH_BYTE(src);
3885 src = 1 << (src & 7);
3886 adr = AREG(7) - 2;
3887 AREG(7) = adr;
3888 PRE_IO
3889 READ_BYTE_F(adr, res)
3890 flag_NotZ = res & src;
3891 POST_IO
3892RET(14)
3893}
3894
3895// BCHGn
3896OPCODE(0x0840)
3897{
3898 u32 adr, res;
3899 u32 src, dst;
3900
3901 FETCH_BYTE(src);
3902 src = 1 << (src & 31);
3903 res = DREGu32((Opcode >> 0) & 7);
3904 flag_NotZ = res & src;
3905 res ^= src;
3906 DREGu32((Opcode >> 0) & 7) = res;
3907RET(12)
3908}
3909
3910// BCHGn
3911OPCODE(0x0850)
3912{
3913 u32 adr, res;
3914 u32 src, dst;
3915
3916 FETCH_BYTE(src);
3917 src = 1 << (src & 7);
3918 adr = AREG((Opcode >> 0) & 7);
3919 PRE_IO
3920 READ_BYTE_F(adr, res)
3921 flag_NotZ = res & src;
3922 res ^= src;
3923 WRITE_BYTE_F(adr, res)
3924 POST_IO
3925RET(16)
3926}
3927
3928// BCHGn
3929OPCODE(0x0858)
3930{
3931 u32 adr, res;
3932 u32 src, dst;
3933
3934 FETCH_BYTE(src);
3935 src = 1 << (src & 7);
3936 adr = AREG((Opcode >> 0) & 7);
3937 AREG((Opcode >> 0) & 7) += 1;
3938 PRE_IO
3939 READ_BYTE_F(adr, res)
3940 flag_NotZ = res & src;
3941 res ^= src;
3942 WRITE_BYTE_F(adr, res)
3943 POST_IO
3944RET(16)
3945}
3946
3947// BCHGn
3948OPCODE(0x0860)
3949{
3950 u32 adr, res;
3951 u32 src, dst;
3952
3953 FETCH_BYTE(src);
3954 src = 1 << (src & 7);
3955 adr = AREG((Opcode >> 0) & 7) - 1;
3956 AREG((Opcode >> 0) & 7) = adr;
3957 PRE_IO
3958 READ_BYTE_F(adr, res)
3959 flag_NotZ = res & src;
3960 res ^= src;
3961 WRITE_BYTE_F(adr, res)
3962 POST_IO
3963RET(18)
3964}
3965
3966// BCHGn
3967OPCODE(0x0868)
3968{
3969 u32 adr, res;
3970 u32 src, dst;
3971
3972 FETCH_BYTE(src);
3973 src = 1 << (src & 7);
3974 FETCH_SWORD(adr);
3975 adr += AREG((Opcode >> 0) & 7);
3976 PRE_IO
3977 READ_BYTE_F(adr, res)
3978 flag_NotZ = res & src;
3979 res ^= src;
3980 WRITE_BYTE_F(adr, res)
3981 POST_IO
3982RET(20)
3983}
3984
3985// BCHGn
3986OPCODE(0x0870)
3987{
3988 u32 adr, res;
3989 u32 src, dst;
3990
3991 FETCH_BYTE(src);
3992 src = 1 << (src & 7);
3993 adr = AREG((Opcode >> 0) & 7);
3994 DECODE_EXT_WORD
3995 PRE_IO
3996 READ_BYTE_F(adr, res)
3997 flag_NotZ = res & src;
3998 res ^= src;
3999 WRITE_BYTE_F(adr, res)
4000 POST_IO
4001RET(22)
4002}
4003
4004// BCHGn
4005OPCODE(0x0878)
4006{
4007 u32 adr, res;
4008 u32 src, dst;
4009
4010 FETCH_BYTE(src);
4011 src = 1 << (src & 7);
4012 FETCH_SWORD(adr);
4013 PRE_IO
4014 READ_BYTE_F(adr, res)
4015 flag_NotZ = res & src;
4016 res ^= src;
4017 WRITE_BYTE_F(adr, res)
4018 POST_IO
4019RET(20)
4020}
4021
4022// BCHGn
4023OPCODE(0x0879)
4024{
4025 u32 adr, res;
4026 u32 src, dst;
4027
4028 FETCH_BYTE(src);
4029 src = 1 << (src & 7);
4030 FETCH_LONG(adr);
4031 PRE_IO
4032 READ_BYTE_F(adr, res)
4033 flag_NotZ = res & src;
4034 res ^= src;
4035 WRITE_BYTE_F(adr, res)
4036 POST_IO
4037RET(24)
4038}
4039
4040// BCHGn
4041OPCODE(0x085F)
4042{
4043 u32 adr, res;
4044 u32 src, dst;
4045
4046 FETCH_BYTE(src);
4047 src = 1 << (src & 7);
4048 adr = AREG(7);
4049 AREG(7) += 2;
4050 PRE_IO
4051 READ_BYTE_F(adr, res)
4052 flag_NotZ = res & src;
4053 res ^= src;
4054 WRITE_BYTE_F(adr, res)
4055 POST_IO
4056RET(16)
4057}
4058
4059// BCHGn
4060OPCODE(0x0867)
4061{
4062 u32 adr, res;
4063 u32 src, dst;
4064
4065 FETCH_BYTE(src);
4066 src = 1 << (src & 7);
4067 adr = AREG(7) - 2;
4068 AREG(7) = adr;
4069 PRE_IO
4070 READ_BYTE_F(adr, res)
4071 flag_NotZ = res & src;
4072 res ^= src;
4073 WRITE_BYTE_F(adr, res)
4074 POST_IO
4075RET(18)
4076}
4077
4078// BCLRn
4079OPCODE(0x0880)
4080{
4081 u32 adr, res;
4082 u32 src, dst;
4083
4084 FETCH_BYTE(src);
4085 src = 1 << (src & 31);
4086 res = DREGu32((Opcode >> 0) & 7);
4087 flag_NotZ = res & src;
4088 res &= ~src;
4089 DREGu32((Opcode >> 0) & 7) = res;
4090RET(14)
4091}
4092
4093// BCLRn
4094OPCODE(0x0890)
4095{
4096 u32 adr, res;
4097 u32 src, dst;
4098
4099 FETCH_BYTE(src);
4100 src = 1 << (src & 7);
4101 adr = AREG((Opcode >> 0) & 7);
4102 PRE_IO
4103 READ_BYTE_F(adr, res)
4104 flag_NotZ = res & src;
4105 res &= ~src;
4106 WRITE_BYTE_F(adr, res)
4107 POST_IO
4108RET(16)
4109}
4110
4111// BCLRn
4112OPCODE(0x0898)
4113{
4114 u32 adr, res;
4115 u32 src, dst;
4116
4117 FETCH_BYTE(src);
4118 src = 1 << (src & 7);
4119 adr = AREG((Opcode >> 0) & 7);
4120 AREG((Opcode >> 0) & 7) += 1;
4121 PRE_IO
4122 READ_BYTE_F(adr, res)
4123 flag_NotZ = res & src;
4124 res &= ~src;
4125 WRITE_BYTE_F(adr, res)
4126 POST_IO
4127RET(16)
4128}
4129
4130// BCLRn
4131OPCODE(0x08A0)
4132{
4133 u32 adr, res;
4134 u32 src, dst;
4135
4136 FETCH_BYTE(src);
4137 src = 1 << (src & 7);
4138 adr = AREG((Opcode >> 0) & 7) - 1;
4139 AREG((Opcode >> 0) & 7) = adr;
4140 PRE_IO
4141 READ_BYTE_F(adr, res)
4142 flag_NotZ = res & src;
4143 res &= ~src;
4144 WRITE_BYTE_F(adr, res)
4145 POST_IO
4146RET(18)
4147}
4148
4149// BCLRn
4150OPCODE(0x08A8)
4151{
4152 u32 adr, res;
4153 u32 src, dst;
4154
4155 FETCH_BYTE(src);
4156 src = 1 << (src & 7);
4157 FETCH_SWORD(adr);
4158 adr += AREG((Opcode >> 0) & 7);
4159 PRE_IO
4160 READ_BYTE_F(adr, res)
4161 flag_NotZ = res & src;
4162 res &= ~src;
4163 WRITE_BYTE_F(adr, res)
4164 POST_IO
4165RET(20)
4166}
4167
4168// BCLRn
4169OPCODE(0x08B0)
4170{
4171 u32 adr, res;
4172 u32 src, dst;
4173
4174 FETCH_BYTE(src);
4175 src = 1 << (src & 7);
4176 adr = AREG((Opcode >> 0) & 7);
4177 DECODE_EXT_WORD
4178 PRE_IO
4179 READ_BYTE_F(adr, res)
4180 flag_NotZ = res & src;
4181 res &= ~src;
4182 WRITE_BYTE_F(adr, res)
4183 POST_IO
4184RET(22)
4185}
4186
4187// BCLRn
4188OPCODE(0x08B8)
4189{
4190 u32 adr, res;
4191 u32 src, dst;
4192
4193 FETCH_BYTE(src);
4194 src = 1 << (src & 7);
4195 FETCH_SWORD(adr);
4196 PRE_IO
4197 READ_BYTE_F(adr, res)
4198 flag_NotZ = res & src;
4199 res &= ~src;
4200 WRITE_BYTE_F(adr, res)
4201 POST_IO
4202RET(20)
4203}
4204
4205// BCLRn
4206OPCODE(0x08B9)
4207{
4208 u32 adr, res;
4209 u32 src, dst;
4210
4211 FETCH_BYTE(src);
4212 src = 1 << (src & 7);
4213 FETCH_LONG(adr);
4214 PRE_IO
4215 READ_BYTE_F(adr, res)
4216 flag_NotZ = res & src;
4217 res &= ~src;
4218 WRITE_BYTE_F(adr, res)
4219 POST_IO
4220RET(24)
4221}
4222
4223// BCLRn
4224OPCODE(0x089F)
4225{
4226 u32 adr, res;
4227 u32 src, dst;
4228
4229 FETCH_BYTE(src);
4230 src = 1 << (src & 7);
4231 adr = AREG(7);
4232 AREG(7) += 2;
4233 PRE_IO
4234 READ_BYTE_F(adr, res)
4235 flag_NotZ = res & src;
4236 res &= ~src;
4237 WRITE_BYTE_F(adr, res)
4238 POST_IO
4239RET(16)
4240}
4241
4242// BCLRn
4243OPCODE(0x08A7)
4244{
4245 u32 adr, res;
4246 u32 src, dst;
4247
4248 FETCH_BYTE(src);
4249 src = 1 << (src & 7);
4250 adr = AREG(7) - 2;
4251 AREG(7) = adr;
4252 PRE_IO
4253 READ_BYTE_F(adr, res)
4254 flag_NotZ = res & src;
4255 res &= ~src;
4256 WRITE_BYTE_F(adr, res)
4257 POST_IO
4258RET(18)
4259}
4260
4261// BSETn
4262OPCODE(0x08C0)
4263{
4264 u32 adr, res;
4265 u32 src, dst;
4266
4267 FETCH_BYTE(src);
4268 src = 1 << (src & 31);
4269 res = DREGu32((Opcode >> 0) & 7);
4270 flag_NotZ = res & src;
4271 res |= src;
4272 DREGu32((Opcode >> 0) & 7) = res;
4273RET(12)
4274}
4275
4276// BSETn
4277OPCODE(0x08D0)
4278{
4279 u32 adr, res;
4280 u32 src, dst;
4281
4282 FETCH_BYTE(src);
4283 src = 1 << (src & 7);
4284 adr = AREG((Opcode >> 0) & 7);
4285 PRE_IO
4286 READ_BYTE_F(adr, res)
4287 flag_NotZ = res & src;
4288 res |= src;
4289 WRITE_BYTE_F(adr, res)
4290 POST_IO
4291RET(16)
4292}
4293
4294// BSETn
4295OPCODE(0x08D8)
4296{
4297 u32 adr, res;
4298 u32 src, dst;
4299
4300 FETCH_BYTE(src);
4301 src = 1 << (src & 7);
4302 adr = AREG((Opcode >> 0) & 7);
4303 AREG((Opcode >> 0) & 7) += 1;
4304 PRE_IO
4305 READ_BYTE_F(adr, res)
4306 flag_NotZ = res & src;
4307 res |= src;
4308 WRITE_BYTE_F(adr, res)
4309 POST_IO
4310RET(16)
4311}
4312
4313// BSETn
4314OPCODE(0x08E0)
4315{
4316 u32 adr, res;
4317 u32 src, dst;
4318
4319 FETCH_BYTE(src);
4320 src = 1 << (src & 7);
4321 adr = AREG((Opcode >> 0) & 7) - 1;
4322 AREG((Opcode >> 0) & 7) = adr;
4323 PRE_IO
4324 READ_BYTE_F(adr, res)
4325 flag_NotZ = res & src;
4326 res |= src;
4327 WRITE_BYTE_F(adr, res)
4328 POST_IO
4329RET(18)
4330}
4331
4332// BSETn
4333OPCODE(0x08E8)
4334{
4335 u32 adr, res;
4336 u32 src, dst;
4337
4338 FETCH_BYTE(src);
4339 src = 1 << (src & 7);
4340 FETCH_SWORD(adr);
4341 adr += AREG((Opcode >> 0) & 7);
4342 PRE_IO
4343 READ_BYTE_F(adr, res)
4344 flag_NotZ = res & src;
4345 res |= src;
4346 WRITE_BYTE_F(adr, res)
4347 POST_IO
4348RET(20)
4349}
4350
4351// BSETn
4352OPCODE(0x08F0)
4353{
4354 u32 adr, res;
4355 u32 src, dst;
4356
4357 FETCH_BYTE(src);
4358 src = 1 << (src & 7);
4359 adr = AREG((Opcode >> 0) & 7);
4360 DECODE_EXT_WORD
4361 PRE_IO
4362 READ_BYTE_F(adr, res)
4363 flag_NotZ = res & src;
4364 res |= src;
4365 WRITE_BYTE_F(adr, res)
4366 POST_IO
4367RET(22)
4368}
4369
4370// BSETn
4371OPCODE(0x08F8)
4372{
4373 u32 adr, res;
4374 u32 src, dst;
4375
4376 FETCH_BYTE(src);
4377 src = 1 << (src & 7);
4378 FETCH_SWORD(adr);
4379 PRE_IO
4380 READ_BYTE_F(adr, res)
4381 flag_NotZ = res & src;
4382 res |= src;
4383 WRITE_BYTE_F(adr, res)
4384 POST_IO
4385RET(20)
4386}
4387
4388// BSETn
4389OPCODE(0x08F9)
4390{
4391 u32 adr, res;
4392 u32 src, dst;
4393
4394 FETCH_BYTE(src);
4395 src = 1 << (src & 7);
4396 FETCH_LONG(adr);
4397 PRE_IO
4398 READ_BYTE_F(adr, res)
4399 flag_NotZ = res & src;
4400 res |= src;
4401 WRITE_BYTE_F(adr, res)
4402 POST_IO
4403RET(24)
4404}
4405
4406// BSETn
4407OPCODE(0x08DF)
4408{
4409 u32 adr, res;
4410 u32 src, dst;
4411
4412 FETCH_BYTE(src);
4413 src = 1 << (src & 7);
4414 adr = AREG(7);
4415 AREG(7) += 2;
4416 PRE_IO
4417 READ_BYTE_F(adr, res)
4418 flag_NotZ = res & src;
4419 res |= src;
4420 WRITE_BYTE_F(adr, res)
4421 POST_IO
4422RET(16)
4423}
4424
4425// BSETn
4426OPCODE(0x08E7)
4427{
4428 u32 adr, res;
4429 u32 src, dst;
4430
4431 FETCH_BYTE(src);
4432 src = 1 << (src & 7);
4433 adr = AREG(7) - 2;
4434 AREG(7) = adr;
4435 PRE_IO
4436 READ_BYTE_F(adr, res)
4437 flag_NotZ = res & src;
4438 res |= src;
4439 WRITE_BYTE_F(adr, res)
4440 POST_IO
4441RET(18)
4442}
4443
4444// BTST
4445OPCODE(0x0100)
4446{
4447 u32 adr, res;
4448 u32 src, dst;
4449
4450 src = DREGu32((Opcode >> 9) & 7);
4451 src = 1 << (src & 31);
4452 res = DREGu32((Opcode >> 0) & 7);
4453 flag_NotZ = res & src;
4454RET(6)
4455}
4456
4457// BTST
4458OPCODE(0x0110)
4459{
4460 u32 adr, res;
4461 u32 src, dst;
4462
4463 src = DREGu8((Opcode >> 9) & 7);
4464 src = 1 << (src & 7);
4465 adr = AREG((Opcode >> 0) & 7);
4466 PRE_IO
4467 READ_BYTE_F(adr, res)
4468 flag_NotZ = res & src;
4469 POST_IO
4470RET(8)
4471}
4472
4473// BTST
4474OPCODE(0x0118)
4475{
4476 u32 adr, res;
4477 u32 src, dst;
4478
4479 src = DREGu8((Opcode >> 9) & 7);
4480 src = 1 << (src & 7);
4481 adr = AREG((Opcode >> 0) & 7);
4482 AREG((Opcode >> 0) & 7) += 1;
4483 PRE_IO
4484 READ_BYTE_F(adr, res)
4485 flag_NotZ = res & src;
4486 POST_IO
4487RET(8)
4488}
4489
4490// BTST
4491OPCODE(0x0120)
4492{
4493 u32 adr, res;
4494 u32 src, dst;
4495
4496 src = DREGu8((Opcode >> 9) & 7);
4497 src = 1 << (src & 7);
4498 adr = AREG((Opcode >> 0) & 7) - 1;
4499 AREG((Opcode >> 0) & 7) = adr;
4500 PRE_IO
4501 READ_BYTE_F(adr, res)
4502 flag_NotZ = res & src;
4503 POST_IO
4504RET(10)
4505}
4506
4507// BTST
4508OPCODE(0x0128)
4509{
4510 u32 adr, res;
4511 u32 src, dst;
4512
4513 src = DREGu8((Opcode >> 9) & 7);
4514 src = 1 << (src & 7);
4515 FETCH_SWORD(adr);
4516 adr += AREG((Opcode >> 0) & 7);
4517 PRE_IO
4518 READ_BYTE_F(adr, res)
4519 flag_NotZ = res & src;
4520 POST_IO
4521RET(12)
4522}
4523
4524// BTST
4525OPCODE(0x0130)
4526{
4527 u32 adr, res;
4528 u32 src, dst;
4529
4530 src = DREGu8((Opcode >> 9) & 7);
4531 src = 1 << (src & 7);
4532 adr = AREG((Opcode >> 0) & 7);
4533 DECODE_EXT_WORD
4534 PRE_IO
4535 READ_BYTE_F(adr, res)
4536 flag_NotZ = res & src;
4537 POST_IO
4538RET(14)
4539}
4540
4541// BTST
4542OPCODE(0x0138)
4543{
4544 u32 adr, res;
4545 u32 src, dst;
4546
4547 src = DREGu8((Opcode >> 9) & 7);
4548 src = 1 << (src & 7);
4549 FETCH_SWORD(adr);
4550 PRE_IO
4551 READ_BYTE_F(adr, res)
4552 flag_NotZ = res & src;
4553 POST_IO
4554RET(12)
4555}
4556
4557// BTST
4558OPCODE(0x0139)
4559{
4560 u32 adr, res;
4561 u32 src, dst;
4562
4563 src = DREGu8((Opcode >> 9) & 7);
4564 src = 1 << (src & 7);
4565 FETCH_LONG(adr);
4566 PRE_IO
4567 READ_BYTE_F(adr, res)
4568 flag_NotZ = res & src;
4569 POST_IO
4570RET(16)
4571}
4572
4573// BTST
4574OPCODE(0x013A)
4575{
4576 u32 adr, res;
4577 u32 src, dst;
4578
4579 src = DREGu8((Opcode >> 9) & 7);
4580 src = 1 << (src & 7);
4581 adr = GET_SWORD + ((u32)(PC) - BasePC);
4582 PC++;
4583 PRE_IO
4584 READ_BYTE_F(adr, res)
4585 flag_NotZ = res & src;
4586 POST_IO
4587RET(12)
4588}
4589
4590// BTST
4591OPCODE(0x013B)
4592{
4593 u32 adr, res;
4594 u32 src, dst;
4595
4596 src = DREGu8((Opcode >> 9) & 7);
4597 src = 1 << (src & 7);
4598 adr = (u32)(PC) - BasePC;
4599 DECODE_EXT_WORD
4600 PRE_IO
4601 READ_BYTE_F(adr, res)
4602 flag_NotZ = res & src;
4603 POST_IO
4604RET(14)
4605}
4606
4607// BTST
4608OPCODE(0x013C)
4609{
4610 u32 adr, res;
4611 u32 src, dst;
4612
4613 src = DREGu8((Opcode >> 9) & 7);
4614 src = 1 << (src & 7);
4615 FETCH_BYTE(res);
4616 flag_NotZ = res & src;
4617RET(8)
4618}
4619
4620// BTST
4621OPCODE(0x011F)
4622{
4623 u32 adr, res;
4624 u32 src, dst;
4625
4626 src = DREGu8((Opcode >> 9) & 7);
4627 src = 1 << (src & 7);
4628 adr = AREG(7);
4629 AREG(7) += 2;
4630 PRE_IO
4631 READ_BYTE_F(adr, res)
4632 flag_NotZ = res & src;
4633 POST_IO
4634RET(8)
4635}
4636
4637// BTST
4638OPCODE(0x0127)
4639{
4640 u32 adr, res;
4641 u32 src, dst;
4642
4643 src = DREGu8((Opcode >> 9) & 7);
4644 src = 1 << (src & 7);
4645 adr = AREG(7) - 2;
4646 AREG(7) = adr;
4647 PRE_IO
4648 READ_BYTE_F(adr, res)
4649 flag_NotZ = res & src;
4650 POST_IO
4651RET(10)
4652}
4653
4654// BCHG
4655OPCODE(0x0140)
4656{
4657 u32 adr, res;
4658 u32 src, dst;
4659
4660 src = DREGu32((Opcode >> 9) & 7);
4661 src = 1 << (src & 31);
4662 res = DREGu32((Opcode >> 0) & 7);
4663 flag_NotZ = res & src;
4664 res ^= src;
4665 DREGu32((Opcode >> 0) & 7) = res;
4666RET(8)
4667}
4668
4669// BCHG
4670OPCODE(0x0150)
4671{
4672 u32 adr, res;
4673 u32 src, dst;
4674
4675 src = DREGu8((Opcode >> 9) & 7);
4676 src = 1 << (src & 7);
4677 adr = AREG((Opcode >> 0) & 7);
4678 PRE_IO
4679 READ_BYTE_F(adr, res)
4680 flag_NotZ = res & src;
4681 res ^= src;
4682 WRITE_BYTE_F(adr, res)
4683 POST_IO
4684RET(12)
4685}
4686
4687// BCHG
4688OPCODE(0x0158)
4689{
4690 u32 adr, res;
4691 u32 src, dst;
4692
4693 src = DREGu8((Opcode >> 9) & 7);
4694 src = 1 << (src & 7);
4695 adr = AREG((Opcode >> 0) & 7);
4696 AREG((Opcode >> 0) & 7) += 1;
4697 PRE_IO
4698 READ_BYTE_F(adr, res)
4699 flag_NotZ = res & src;
4700 res ^= src;
4701 WRITE_BYTE_F(adr, res)
4702 POST_IO
4703RET(12)
4704}
4705
4706// BCHG
4707OPCODE(0x0160)
4708{
4709 u32 adr, res;
4710 u32 src, dst;
4711
4712 src = DREGu8((Opcode >> 9) & 7);
4713 src = 1 << (src & 7);
4714 adr = AREG((Opcode >> 0) & 7) - 1;
4715 AREG((Opcode >> 0) & 7) = adr;
4716 PRE_IO
4717 READ_BYTE_F(adr, res)
4718 flag_NotZ = res & src;
4719 res ^= src;
4720 WRITE_BYTE_F(adr, res)
4721 POST_IO
4722RET(14)
4723}
4724
4725// BCHG
4726OPCODE(0x0168)
4727{
4728 u32 adr, res;
4729 u32 src, dst;
4730
4731 src = DREGu8((Opcode >> 9) & 7);
4732 src = 1 << (src & 7);
4733 FETCH_SWORD(adr);
4734 adr += AREG((Opcode >> 0) & 7);
4735 PRE_IO
4736 READ_BYTE_F(adr, res)
4737 flag_NotZ = res & src;
4738 res ^= src;
4739 WRITE_BYTE_F(adr, res)
4740 POST_IO
4741RET(16)
4742}
4743
4744// BCHG
4745OPCODE(0x0170)
4746{
4747 u32 adr, res;
4748 u32 src, dst;
4749
4750 src = DREGu8((Opcode >> 9) & 7);
4751 src = 1 << (src & 7);
4752 adr = AREG((Opcode >> 0) & 7);
4753 DECODE_EXT_WORD
4754 PRE_IO
4755 READ_BYTE_F(adr, res)
4756 flag_NotZ = res & src;
4757 res ^= src;
4758 WRITE_BYTE_F(adr, res)
4759 POST_IO
4760RET(18)
4761}
4762
4763// BCHG
4764OPCODE(0x0178)
4765{
4766 u32 adr, res;
4767 u32 src, dst;
4768
4769 src = DREGu8((Opcode >> 9) & 7);
4770 src = 1 << (src & 7);
4771 FETCH_SWORD(adr);
4772 PRE_IO
4773 READ_BYTE_F(adr, res)
4774 flag_NotZ = res & src;
4775 res ^= src;
4776 WRITE_BYTE_F(adr, res)
4777 POST_IO
4778RET(16)
4779}
4780
4781// BCHG
4782OPCODE(0x0179)
4783{
4784 u32 adr, res;
4785 u32 src, dst;
4786
4787 src = DREGu8((Opcode >> 9) & 7);
4788 src = 1 << (src & 7);
4789 FETCH_LONG(adr);
4790 PRE_IO
4791 READ_BYTE_F(adr, res)
4792 flag_NotZ = res & src;
4793 res ^= src;
4794 WRITE_BYTE_F(adr, res)
4795 POST_IO
4796RET(20)
4797}
4798
4799// BCHG
4800OPCODE(0x015F)
4801{
4802 u32 adr, res;
4803 u32 src, dst;
4804
4805 src = DREGu8((Opcode >> 9) & 7);
4806 src = 1 << (src & 7);
4807 adr = AREG(7);
4808 AREG(7) += 2;
4809 PRE_IO
4810 READ_BYTE_F(adr, res)
4811 flag_NotZ = res & src;
4812 res ^= src;
4813 WRITE_BYTE_F(adr, res)
4814 POST_IO
4815RET(12)
4816}
4817
4818// BCHG
4819OPCODE(0x0167)
4820{
4821 u32 adr, res;
4822 u32 src, dst;
4823
4824 src = DREGu8((Opcode >> 9) & 7);
4825 src = 1 << (src & 7);
4826 adr = AREG(7) - 2;
4827 AREG(7) = adr;
4828 PRE_IO
4829 READ_BYTE_F(adr, res)
4830 flag_NotZ = res & src;
4831 res ^= src;
4832 WRITE_BYTE_F(adr, res)
4833 POST_IO
4834RET(14)
4835}
4836
4837// BCLR
4838OPCODE(0x0180)
4839{
4840 u32 adr, res;
4841 u32 src, dst;
4842
4843 src = DREGu32((Opcode >> 9) & 7);
4844 src = 1 << (src & 31);
4845 res = DREGu32((Opcode >> 0) & 7);
4846 flag_NotZ = res & src;
4847 res &= ~src;
4848 DREGu32((Opcode >> 0) & 7) = res;
4849RET(10)
4850}
4851
4852// BCLR
4853OPCODE(0x0190)
4854{
4855 u32 adr, res;
4856 u32 src, dst;
4857
4858 src = DREGu8((Opcode >> 9) & 7);
4859 src = 1 << (src & 7);
4860 adr = AREG((Opcode >> 0) & 7);
4861 PRE_IO
4862 READ_BYTE_F(adr, res)
4863 flag_NotZ = res & src;
4864 res &= ~src;
4865 WRITE_BYTE_F(adr, res)
4866 POST_IO
4867RET(12)
4868}
4869
4870// BCLR
4871OPCODE(0x0198)
4872{
4873 u32 adr, res;
4874 u32 src, dst;
4875
4876 src = DREGu8((Opcode >> 9) & 7);
4877 src = 1 << (src & 7);
4878 adr = AREG((Opcode >> 0) & 7);
4879 AREG((Opcode >> 0) & 7) += 1;
4880 PRE_IO
4881 READ_BYTE_F(adr, res)
4882 flag_NotZ = res & src;
4883 res &= ~src;
4884 WRITE_BYTE_F(adr, res)
4885 POST_IO
4886RET(12)
4887}
4888
4889// BCLR
4890OPCODE(0x01A0)
4891{
4892 u32 adr, res;
4893 u32 src, dst;
4894
4895 src = DREGu8((Opcode >> 9) & 7);
4896 src = 1 << (src & 7);
4897 adr = AREG((Opcode >> 0) & 7) - 1;
4898 AREG((Opcode >> 0) & 7) = adr;
4899 PRE_IO
4900 READ_BYTE_F(adr, res)
4901 flag_NotZ = res & src;
4902 res &= ~src;
4903 WRITE_BYTE_F(adr, res)
4904 POST_IO
4905RET(14)
4906}
4907
4908// BCLR
4909OPCODE(0x01A8)
4910{
4911 u32 adr, res;
4912 u32 src, dst;
4913
4914 src = DREGu8((Opcode >> 9) & 7);
4915 src = 1 << (src & 7);
4916 FETCH_SWORD(adr);
4917 adr += AREG((Opcode >> 0) & 7);
4918 PRE_IO
4919 READ_BYTE_F(adr, res)
4920 flag_NotZ = res & src;
4921 res &= ~src;
4922 WRITE_BYTE_F(adr, res)
4923 POST_IO
4924RET(16)
4925}
4926
4927// BCLR
4928OPCODE(0x01B0)
4929{
4930 u32 adr, res;
4931 u32 src, dst;
4932
4933 src = DREGu8((Opcode >> 9) & 7);
4934 src = 1 << (src & 7);
4935 adr = AREG((Opcode >> 0) & 7);
4936 DECODE_EXT_WORD
4937 PRE_IO
4938 READ_BYTE_F(adr, res)
4939 flag_NotZ = res & src;
4940 res &= ~src;
4941 WRITE_BYTE_F(adr, res)
4942 POST_IO
4943RET(18)
4944}
4945
4946// BCLR
4947OPCODE(0x01B8)
4948{
4949 u32 adr, res;
4950 u32 src, dst;
4951
4952 src = DREGu8((Opcode >> 9) & 7);
4953 src = 1 << (src & 7);
4954 FETCH_SWORD(adr);
4955 PRE_IO
4956 READ_BYTE_F(adr, res)
4957 flag_NotZ = res & src;
4958 res &= ~src;
4959 WRITE_BYTE_F(adr, res)
4960 POST_IO
4961RET(16)
4962}
4963
4964// BCLR
4965OPCODE(0x01B9)
4966{
4967 u32 adr, res;
4968 u32 src, dst;
4969
4970 src = DREGu8((Opcode >> 9) & 7);
4971 src = 1 << (src & 7);
4972 FETCH_LONG(adr);
4973 PRE_IO
4974 READ_BYTE_F(adr, res)
4975 flag_NotZ = res & src;
4976 res &= ~src;
4977 WRITE_BYTE_F(adr, res)
4978 POST_IO
4979RET(20)
4980}
4981
4982// BCLR
4983OPCODE(0x019F)
4984{
4985 u32 adr, res;
4986 u32 src, dst;
4987
4988 src = DREGu8((Opcode >> 9) & 7);
4989 src = 1 << (src & 7);
4990 adr = AREG(7);
4991 AREG(7) += 2;
4992 PRE_IO
4993 READ_BYTE_F(adr, res)
4994 flag_NotZ = res & src;
4995 res &= ~src;
4996 WRITE_BYTE_F(adr, res)
4997 POST_IO
4998RET(12)
4999}
5000
5001// BCLR
5002OPCODE(0x01A7)
5003{
5004 u32 adr, res;
5005 u32 src, dst;
5006
5007 src = DREGu8((Opcode >> 9) & 7);
5008 src = 1 << (src & 7);
5009 adr = AREG(7) - 2;
5010 AREG(7) = adr;
5011 PRE_IO
5012 READ_BYTE_F(adr, res)
5013 flag_NotZ = res & src;
5014 res &= ~src;
5015 WRITE_BYTE_F(adr, res)
5016 POST_IO
5017RET(14)
5018}
5019
5020// BSET
5021OPCODE(0x01C0)
5022{
5023 u32 adr, res;
5024 u32 src, dst;
5025
5026 src = DREGu32((Opcode >> 9) & 7);
5027 src = 1 << (src & 31);
5028 res = DREGu32((Opcode >> 0) & 7);
5029 flag_NotZ = res & src;
5030 res |= src;
5031 DREGu32((Opcode >> 0) & 7) = res;
5032RET(8)
5033}
5034
5035// BSET
5036OPCODE(0x01D0)
5037{
5038 u32 adr, res;
5039 u32 src, dst;
5040
5041 src = DREGu8((Opcode >> 9) & 7);
5042 src = 1 << (src & 7);
5043 adr = AREG((Opcode >> 0) & 7);
5044 PRE_IO
5045 READ_BYTE_F(adr, res)
5046 flag_NotZ = res & src;
5047 res |= src;
5048 WRITE_BYTE_F(adr, res)
5049 POST_IO
5050RET(12)
5051}
5052
5053// BSET
5054OPCODE(0x01D8)
5055{
5056 u32 adr, res;
5057 u32 src, dst;
5058
5059 src = DREGu8((Opcode >> 9) & 7);
5060 src = 1 << (src & 7);
5061 adr = AREG((Opcode >> 0) & 7);
5062 AREG((Opcode >> 0) & 7) += 1;
5063 PRE_IO
5064 READ_BYTE_F(adr, res)
5065 flag_NotZ = res & src;
5066 res |= src;
5067 WRITE_BYTE_F(adr, res)
5068 POST_IO
5069RET(12)
5070}
5071
5072// BSET
5073OPCODE(0x01E0)
5074{
5075 u32 adr, res;
5076 u32 src, dst;
5077
5078 src = DREGu8((Opcode >> 9) & 7);
5079 src = 1 << (src & 7);
5080 adr = AREG((Opcode >> 0) & 7) - 1;
5081 AREG((Opcode >> 0) & 7) = adr;
5082 PRE_IO
5083 READ_BYTE_F(adr, res)
5084 flag_NotZ = res & src;
5085 res |= src;
5086 WRITE_BYTE_F(adr, res)
5087 POST_IO
5088RET(14)
5089}
5090
5091// BSET
5092OPCODE(0x01E8)
5093{
5094 u32 adr, res;
5095 u32 src, dst;
5096
5097 src = DREGu8((Opcode >> 9) & 7);
5098 src = 1 << (src & 7);
5099 FETCH_SWORD(adr);
5100 adr += AREG((Opcode >> 0) & 7);
5101 PRE_IO
5102 READ_BYTE_F(adr, res)
5103 flag_NotZ = res & src;
5104 res |= src;
5105 WRITE_BYTE_F(adr, res)
5106 POST_IO
5107RET(16)
5108}
5109
5110// BSET
5111OPCODE(0x01F0)
5112{
5113 u32 adr, res;
5114 u32 src, dst;
5115
5116 src = DREGu8((Opcode >> 9) & 7);
5117 src = 1 << (src & 7);
5118 adr = AREG((Opcode >> 0) & 7);
5119 DECODE_EXT_WORD
5120 PRE_IO
5121 READ_BYTE_F(adr, res)
5122 flag_NotZ = res & src;
5123 res |= src;
5124 WRITE_BYTE_F(adr, res)
5125 POST_IO
5126RET(18)
5127}
5128
5129// BSET
5130OPCODE(0x01F8)
5131{
5132 u32 adr, res;
5133 u32 src, dst;
5134
5135 src = DREGu8((Opcode >> 9) & 7);
5136 src = 1 << (src & 7);
5137 FETCH_SWORD(adr);
5138 PRE_IO
5139 READ_BYTE_F(adr, res)
5140 flag_NotZ = res & src;
5141 res |= src;
5142 WRITE_BYTE_F(adr, res)
5143 POST_IO
5144RET(16)
5145}
5146
5147// BSET
5148OPCODE(0x01F9)
5149{
5150 u32 adr, res;
5151 u32 src, dst;
5152
5153 src = DREGu8((Opcode >> 9) & 7);
5154 src = 1 << (src & 7);
5155 FETCH_LONG(adr);
5156 PRE_IO
5157 READ_BYTE_F(adr, res)
5158 flag_NotZ = res & src;
5159 res |= src;
5160 WRITE_BYTE_F(adr, res)
5161 POST_IO
5162RET(20)
5163}
5164
5165// BSET
5166OPCODE(0x01DF)
5167{
5168 u32 adr, res;
5169 u32 src, dst;
5170
5171 src = DREGu8((Opcode >> 9) & 7);
5172 src = 1 << (src & 7);
5173 adr = AREG(7);
5174 AREG(7) += 2;
5175 PRE_IO
5176 READ_BYTE_F(adr, res)
5177 flag_NotZ = res & src;
5178 res |= src;
5179 WRITE_BYTE_F(adr, res)
5180 POST_IO
5181RET(12)
5182}
5183
5184// BSET
5185OPCODE(0x01E7)
5186{
5187 u32 adr, res;
5188 u32 src, dst;
5189
5190 src = DREGu8((Opcode >> 9) & 7);
5191 src = 1 << (src & 7);
5192 adr = AREG(7) - 2;
5193 AREG(7) = adr;
5194 PRE_IO
5195 READ_BYTE_F(adr, res)
5196 flag_NotZ = res & src;
5197 res |= src;
5198 WRITE_BYTE_F(adr, res)
5199 POST_IO
5200RET(14)
5201}
5202
5203// MOVEPWaD
5204OPCODE(0x0108)
5205{
5206 u32 adr, res;
5207 u32 src, dst;
5208
5209 FETCH_SWORD(adr);
5210 adr += AREG((Opcode >> 0) & 7);
5211 PRE_IO
5212 READ_BYTE_F(adr + 0, res)
5213 READ_BYTE_F(adr + 2, src)
5214 DREGu16((Opcode >> 9) & 7) = (res << 8) | src;
5215 POST_IO
5216RET(24)
5217}
5218
5219// MOVEPLaD
5220OPCODE(0x0148)
5221{
5222 u32 adr, res;
5223 u32 src, dst;
5224
5225 FETCH_SWORD(adr);
5226 adr += AREG((Opcode >> 0) & 7);
5227 PRE_IO
5228 READ_BYTE_F(adr, res)
5229 res <<= 24;
5230 adr += 2;
5231 READ_BYTE_F(adr, src)
5232 res |= src << 16;
5233 adr += 2;
5234 READ_BYTE_F(adr, src)
5235 res |= src << 8;
5236 adr += 2;
5237 READ_BYTE_F(adr, src)
5238 DREG((Opcode >> 9) & 7) = res | src;
5239 POST_IO
5240RET(32)
5241}
5242
5243// MOVEPWDa
5244OPCODE(0x0188)
5245{
5246 u32 adr, res;
5247 u32 src, dst;
5248
5249 res = DREGu32((Opcode >> 9) & 7);
5250 FETCH_SWORD(adr);
5251 adr += AREG((Opcode >> 0) & 7);
5252 PRE_IO
5253 WRITE_BYTE_F(adr + 0, res >> 8)
5254 WRITE_BYTE_F(adr + 2, res >> 0)
5255 POST_IO
5256RET(24)
5257}
5258
5259// MOVEPLDa
5260OPCODE(0x01C8)
5261{
5262 u32 adr, res;
5263 u32 src, dst;
5264
5265 res = DREGu32((Opcode >> 9) & 7);
5266 FETCH_SWORD(adr);
5267 adr += AREG((Opcode >> 0) & 7);
5268 PRE_IO
5269 WRITE_BYTE_F(adr, res >> 24)
5270 adr += 2;
5271 WRITE_BYTE_F(adr, res >> 16)
5272 adr += 2;
5273 WRITE_BYTE_F(adr, res >> 8)
5274 adr += 2;
5275 WRITE_BYTE_F(adr, res >> 0)
5276 POST_IO
5277RET(32)
5278}
5279
5280// MOVEB
5281OPCODE(0x1000)
5282{
5283 u32 adr, res;
5284 u32 src, dst;
5285
5286 res = DREGu8((Opcode >> 0) & 7);
5287 flag_C = 0;
5288 flag_V = 0;
5289 flag_NotZ = res;
5290 flag_N = res;
5291 DREGu8((Opcode >> 9) & 7) = res;
5292RET(4)
5293}
5294
5295// MOVEB
5296OPCODE(0x1080)
5297{
5298 u32 adr, res;
5299 u32 src, dst;
5300
5301 res = DREGu8((Opcode >> 0) & 7);
5302 flag_C = 0;
5303 flag_V = 0;
5304 flag_NotZ = res;
5305 flag_N = res;
5306 adr = AREG((Opcode >> 9) & 7);
5307 PRE_IO
5308 WRITE_BYTE_F(adr, res)
5309 POST_IO
5310RET(8)
5311}
5312
5313// MOVEB
5314OPCODE(0x10C0)
5315{
5316 u32 adr, res;
5317 u32 src, dst;
5318
5319 res = DREGu8((Opcode >> 0) & 7);
5320 flag_C = 0;
5321 flag_V = 0;
5322 flag_NotZ = res;
5323 flag_N = res;
5324 adr = AREG((Opcode >> 9) & 7);
5325 AREG((Opcode >> 9) & 7) += 1;
5326 PRE_IO
5327 WRITE_BYTE_F(adr, res)
5328 POST_IO
5329RET(8)
5330}
5331
5332// MOVEB
5333OPCODE(0x1100)
5334{
5335 u32 adr, res;
5336 u32 src, dst;
5337
5338 res = DREGu8((Opcode >> 0) & 7);
5339 flag_C = 0;
5340 flag_V = 0;
5341 flag_NotZ = res;
5342 flag_N = res;
5343 adr = AREG((Opcode >> 9) & 7) - 1;
5344 AREG((Opcode >> 9) & 7) = adr;
5345 PRE_IO
5346 WRITE_BYTE_F(adr, res)
5347 POST_IO
5348RET(8)
5349}
5350
5351// MOVEB
5352OPCODE(0x1140)
5353{
5354 u32 adr, res;
5355 u32 src, dst;
5356
5357 res = DREGu8((Opcode >> 0) & 7);
5358 flag_C = 0;
5359 flag_V = 0;
5360 flag_NotZ = res;
5361 flag_N = res;
5362 FETCH_SWORD(adr);
5363 adr += AREG((Opcode >> 9) & 7);
5364 PRE_IO
5365 WRITE_BYTE_F(adr, res)
5366 POST_IO
5367RET(12)
5368}
5369
5370// MOVEB
5371OPCODE(0x1180)
5372{
5373 u32 adr, res;
5374 u32 src, dst;
5375
5376 res = DREGu8((Opcode >> 0) & 7);
5377 flag_C = 0;
5378 flag_V = 0;
5379 flag_NotZ = res;
5380 flag_N = res;
5381 adr = AREG((Opcode >> 9) & 7);
5382 DECODE_EXT_WORD
5383 PRE_IO
5384 WRITE_BYTE_F(adr, res)
5385 POST_IO
5386RET(14)
5387}
5388
5389// MOVEB
5390OPCODE(0x11C0)
5391{
5392 u32 adr, res;
5393 u32 src, dst;
5394
5395 res = DREGu8((Opcode >> 0) & 7);
5396 flag_C = 0;
5397 flag_V = 0;
5398 flag_NotZ = res;
5399 flag_N = res;
5400 FETCH_SWORD(adr);
5401 PRE_IO
5402 WRITE_BYTE_F(adr, res)
5403 POST_IO
5404RET(12)
5405}
5406
5407// MOVEB
5408OPCODE(0x13C0)
5409{
5410 u32 adr, res;
5411 u32 src, dst;
5412
5413 res = DREGu8((Opcode >> 0) & 7);
5414 flag_C = 0;
5415 flag_V = 0;
5416 flag_NotZ = res;
5417 flag_N = res;
5418 FETCH_LONG(adr);
5419 PRE_IO
5420 WRITE_BYTE_F(adr, res)
5421 POST_IO
5422RET(16)
5423}
5424
5425// MOVEB
5426OPCODE(0x1EC0)
5427{
5428 u32 adr, res;
5429 u32 src, dst;
5430
5431 res = DREGu8((Opcode >> 0) & 7);
5432 flag_C = 0;
5433 flag_V = 0;
5434 flag_NotZ = res;
5435 flag_N = res;
5436 adr = AREG(7);
5437 AREG(7) += 2;
5438 PRE_IO
5439 WRITE_BYTE_F(adr, res)
5440 POST_IO
5441RET(8)
5442}
5443
5444// MOVEB
5445OPCODE(0x1F00)
5446{
5447 u32 adr, res;
5448 u32 src, dst;
5449
5450 res = DREGu8((Opcode >> 0) & 7);
5451 flag_C = 0;
5452 flag_V = 0;
5453 flag_NotZ = res;
5454 flag_N = res;
5455 adr = AREG(7) - 2;
5456 AREG(7) = adr;
5457 PRE_IO
5458 WRITE_BYTE_F(adr, res)
5459 POST_IO
5460RET(8)
5461}
5462
5463// MOVEB
5464OPCODE(0x1008)
5465{
5466 u32 adr, res;
5467 u32 src, dst;
5468
5469 // can't read byte from Ax registers !
5470 m68kcontext.execinfo |= M68K_FAULTED;
5471 m68kcontext.io_cycle_counter = 0;
5472/*
5473 goto famec_Exec_End;
5474 flag_C = 0;
5475 flag_V = 0;
5476 flag_NotZ = res;
5477 flag_N = res;
5478 DREGu8((Opcode >> 9) & 7) = res;
5479*/
5480RET(4)
5481}
5482
5483// MOVEB
5484OPCODE(0x1088)
5485{
5486 u32 adr, res;
5487 u32 src, dst;
5488
5489 // can't read byte from Ax registers !
5490 m68kcontext.execinfo |= M68K_FAULTED;
5491 m68kcontext.io_cycle_counter = 0;
5492/*
5493 goto famec_Exec_End;
5494 flag_C = 0;
5495 flag_V = 0;
5496 flag_NotZ = res;
5497 flag_N = res;
5498 adr = AREG((Opcode >> 9) & 7);
5499 PRE_IO
5500 WRITE_BYTE_F(adr, res)
5501 POST_IO
5502*/
5503RET(8)
5504}
5505
5506// MOVEB
5507OPCODE(0x10C8)
5508{
5509 u32 adr, res;
5510 u32 src, dst;
5511
5512 // can't read byte from Ax registers !
5513 m68kcontext.execinfo |= M68K_FAULTED;
5514 m68kcontext.io_cycle_counter = 0;
5515/*
5516 goto famec_Exec_End;
5517 flag_C = 0;
5518 flag_V = 0;
5519 flag_NotZ = res;
5520 flag_N = res;
5521 adr = AREG((Opcode >> 9) & 7);
5522 AREG((Opcode >> 9) & 7) += 1;
5523 PRE_IO
5524 WRITE_BYTE_F(adr, res)
5525 POST_IO
5526*/
5527RET(8)
5528}
5529
5530// MOVEB
5531OPCODE(0x1108)
5532{
5533 u32 adr, res;
5534 u32 src, dst;
5535
5536 // can't read byte from Ax registers !
5537 m68kcontext.execinfo |= M68K_FAULTED;
5538 m68kcontext.io_cycle_counter = 0;
5539/*
5540 goto famec_Exec_End;
5541 flag_C = 0;
5542 flag_V = 0;
5543 flag_NotZ = res;
5544 flag_N = res;
5545 adr = AREG((Opcode >> 9) & 7) - 1;
5546 AREG((Opcode >> 9) & 7) = adr;
5547 PRE_IO
5548 WRITE_BYTE_F(adr, res)
5549 POST_IO
5550*/
5551RET(8)
5552}
5553
5554// MOVEB
5555OPCODE(0x1148)
5556{
5557 u32 adr, res;
5558 u32 src, dst;
5559
5560 // can't read byte from Ax registers !
5561 m68kcontext.execinfo |= M68K_FAULTED;
5562 m68kcontext.io_cycle_counter = 0;
5563/*
5564 goto famec_Exec_End;
5565 flag_C = 0;
5566 flag_V = 0;
5567 flag_NotZ = res;
5568 flag_N = res;
5569 FETCH_SWORD(adr);
5570 adr += AREG((Opcode >> 9) & 7);
5571 PRE_IO
5572 WRITE_BYTE_F(adr, res)
5573 POST_IO
5574*/
5575RET(12)
5576}
5577
5578// MOVEB
5579OPCODE(0x1188)
5580{
5581 u32 adr, res;
5582 u32 src, dst;
5583
5584 // can't read byte from Ax registers !
5585 m68kcontext.execinfo |= M68K_FAULTED;
5586 m68kcontext.io_cycle_counter = 0;
5587/*
5588 goto famec_Exec_End;
5589 flag_C = 0;
5590 flag_V = 0;
5591 flag_NotZ = res;
5592 flag_N = res;
5593 adr = AREG((Opcode >> 9) & 7);
5594 DECODE_EXT_WORD
5595 PRE_IO
5596 WRITE_BYTE_F(adr, res)
5597 POST_IO
5598*/
5599RET(14)
5600}
5601
5602// MOVEB
5603OPCODE(0x11C8)
5604{
5605 u32 adr, res;
5606 u32 src, dst;
5607
5608 // can't read byte from Ax registers !
5609 m68kcontext.execinfo |= M68K_FAULTED;
5610 m68kcontext.io_cycle_counter = 0;
5611/*
5612 goto famec_Exec_End;
5613 flag_C = 0;
5614 flag_V = 0;
5615 flag_NotZ = res;
5616 flag_N = res;
5617 FETCH_SWORD(adr);
5618 PRE_IO
5619 WRITE_BYTE_F(adr, res)
5620 POST_IO
5621*/
5622RET(12)
5623}
5624
5625// MOVEB
5626OPCODE(0x13C8)
5627{
5628 u32 adr, res;
5629 u32 src, dst;
5630
5631 // can't read byte from Ax registers !
5632 m68kcontext.execinfo |= M68K_FAULTED;
5633 m68kcontext.io_cycle_counter = 0;
5634/*
5635 goto famec_Exec_End;
5636 flag_C = 0;
5637 flag_V = 0;
5638 flag_NotZ = res;
5639 flag_N = res;
5640 FETCH_LONG(adr);
5641 PRE_IO
5642 WRITE_BYTE_F(adr, res)
5643 POST_IO
5644*/
5645RET(16)
5646}
5647
5648// MOVEB
5649OPCODE(0x1EC8)
5650{
5651 u32 adr, res;
5652 u32 src, dst;
5653
5654 // can't read byte from Ax registers !
5655 m68kcontext.execinfo |= M68K_FAULTED;
5656 m68kcontext.io_cycle_counter = 0;
5657/*
5658 goto famec_Exec_End;
5659 flag_C = 0;
5660 flag_V = 0;
5661 flag_NotZ = res;
5662 flag_N = res;
5663 adr = AREG(7);
5664 AREG(7) += 2;
5665 PRE_IO
5666 WRITE_BYTE_F(adr, res)
5667 POST_IO
5668*/
5669RET(8)
5670}
5671
5672// MOVEB
5673OPCODE(0x1F08)
5674{
5675 u32 adr, res;
5676 u32 src, dst;
5677
5678 // can't read byte from Ax registers !
5679 m68kcontext.execinfo |= M68K_FAULTED;
5680 m68kcontext.io_cycle_counter = 0;
5681/*
5682 goto famec_Exec_End;
5683 flag_C = 0;
5684 flag_V = 0;
5685 flag_NotZ = res;
5686 flag_N = res;
5687 adr = AREG(7) - 2;
5688 AREG(7) = adr;
5689 PRE_IO
5690 WRITE_BYTE_F(adr, res)
5691 POST_IO
5692*/
5693RET(8)
5694}
5695
5696// MOVEB
5697OPCODE(0x1010)
5698{
5699 u32 adr, res;
5700 u32 src, dst;
5701
5702 adr = AREG((Opcode >> 0) & 7);
5703 PRE_IO
5704 READ_BYTE_F(adr, res)
5705 flag_C = 0;
5706 flag_V = 0;
5707 flag_NotZ = res;
5708 flag_N = res;
5709 DREGu8((Opcode >> 9) & 7) = res;
5710 POST_IO
5711RET(8)
5712}
5713
5714// MOVEB
5715OPCODE(0x1090)
5716{
5717 u32 adr, res;
5718 u32 src, dst;
5719
5720 adr = AREG((Opcode >> 0) & 7);
5721 PRE_IO
5722 READ_BYTE_F(adr, res)
5723 flag_C = 0;
5724 flag_V = 0;
5725 flag_NotZ = res;
5726 flag_N = res;
5727 adr = AREG((Opcode >> 9) & 7);
5728 WRITE_BYTE_F(adr, res)
5729 POST_IO
5730RET(12)
5731}
5732
5733// MOVEB
5734OPCODE(0x10D0)
5735{
5736 u32 adr, res;
5737 u32 src, dst;
5738
5739 adr = AREG((Opcode >> 0) & 7);
5740 PRE_IO
5741 READ_BYTE_F(adr, res)
5742 flag_C = 0;
5743 flag_V = 0;
5744 flag_NotZ = res;
5745 flag_N = res;
5746 adr = AREG((Opcode >> 9) & 7);
5747 AREG((Opcode >> 9) & 7) += 1;
5748 WRITE_BYTE_F(adr, res)
5749 POST_IO
5750RET(12)
5751}
5752
5753// MOVEB
5754OPCODE(0x1110)
5755{
5756 u32 adr, res;
5757 u32 src, dst;
5758
5759 adr = AREG((Opcode >> 0) & 7);
5760 PRE_IO
5761 READ_BYTE_F(adr, res)
5762 flag_C = 0;
5763 flag_V = 0;
5764 flag_NotZ = res;
5765 flag_N = res;
5766 adr = AREG((Opcode >> 9) & 7) - 1;
5767 AREG((Opcode >> 9) & 7) = adr;
5768 WRITE_BYTE_F(adr, res)
5769 POST_IO
5770RET(12)
5771}
5772
5773// MOVEB
5774OPCODE(0x1150)
5775{
5776 u32 adr, res;
5777 u32 src, dst;
5778
5779 adr = AREG((Opcode >> 0) & 7);
5780 PRE_IO
5781 READ_BYTE_F(adr, res)
5782 flag_C = 0;
5783 flag_V = 0;
5784 flag_NotZ = res;
5785 flag_N = res;
5786 FETCH_SWORD(adr);
5787 adr += AREG((Opcode >> 9) & 7);
5788 WRITE_BYTE_F(adr, res)
5789 POST_IO
5790RET(16)
5791}
5792
5793// MOVEB
5794OPCODE(0x1190)
5795{
5796 u32 adr, res;
5797 u32 src, dst;
5798
5799 adr = AREG((Opcode >> 0) & 7);
5800 PRE_IO
5801 READ_BYTE_F(adr, res)
5802 flag_C = 0;
5803 flag_V = 0;
5804 flag_NotZ = res;
5805 flag_N = res;
5806 adr = AREG((Opcode >> 9) & 7);
5807 DECODE_EXT_WORD
5808 WRITE_BYTE_F(adr, res)
5809 POST_IO
5810RET(18)
5811}
5812
5813// MOVEB
5814OPCODE(0x11D0)
5815{
5816 u32 adr, res;
5817 u32 src, dst;
5818
5819 adr = AREG((Opcode >> 0) & 7);
5820 PRE_IO
5821 READ_BYTE_F(adr, res)
5822 flag_C = 0;
5823 flag_V = 0;
5824 flag_NotZ = res;
5825 flag_N = res;
5826 FETCH_SWORD(adr);
5827 WRITE_BYTE_F(adr, res)
5828 POST_IO
5829RET(16)
5830}
5831
5832// MOVEB
5833OPCODE(0x13D0)
5834{
5835 u32 adr, res;
5836 u32 src, dst;
5837
5838 adr = AREG((Opcode >> 0) & 7);
5839 PRE_IO
5840 READ_BYTE_F(adr, res)
5841 flag_C = 0;
5842 flag_V = 0;
5843 flag_NotZ = res;
5844 flag_N = res;
5845 FETCH_LONG(adr);
5846 WRITE_BYTE_F(adr, res)
5847 POST_IO
5848RET(20)
5849}
5850
5851// MOVEB
5852OPCODE(0x1ED0)
5853{
5854 u32 adr, res;
5855 u32 src, dst;
5856
5857 adr = AREG((Opcode >> 0) & 7);
5858 PRE_IO
5859 READ_BYTE_F(adr, res)
5860 flag_C = 0;
5861 flag_V = 0;
5862 flag_NotZ = res;
5863 flag_N = res;
5864 adr = AREG(7);
5865 AREG(7) += 2;
5866 WRITE_BYTE_F(adr, res)
5867 POST_IO
5868RET(12)
5869}
5870
5871// MOVEB
5872OPCODE(0x1F10)
5873{
5874 u32 adr, res;
5875 u32 src, dst;
5876
5877 adr = AREG((Opcode >> 0) & 7);
5878 PRE_IO
5879 READ_BYTE_F(adr, res)
5880 flag_C = 0;
5881 flag_V = 0;
5882 flag_NotZ = res;
5883 flag_N = res;
5884 adr = AREG(7) - 2;
5885 AREG(7) = adr;
5886 WRITE_BYTE_F(adr, res)
5887 POST_IO
5888RET(12)
5889}
5890
5891// MOVEB
5892OPCODE(0x1018)
5893{
5894 u32 adr, res;
5895 u32 src, dst;
5896
5897 adr = AREG((Opcode >> 0) & 7);
5898 AREG((Opcode >> 0) & 7) += 1;
5899 PRE_IO
5900 READ_BYTE_F(adr, res)
5901 flag_C = 0;
5902 flag_V = 0;
5903 flag_NotZ = res;
5904 flag_N = res;
5905 DREGu8((Opcode >> 9) & 7) = res;
5906 POST_IO
5907RET(8)
5908}
5909
5910// MOVEB
5911OPCODE(0x1098)
5912{
5913 u32 adr, res;
5914 u32 src, dst;
5915
5916 adr = AREG((Opcode >> 0) & 7);
5917 AREG((Opcode >> 0) & 7) += 1;
5918 PRE_IO
5919 READ_BYTE_F(adr, res)
5920 flag_C = 0;
5921 flag_V = 0;
5922 flag_NotZ = res;
5923 flag_N = res;
5924 adr = AREG((Opcode >> 9) & 7);
5925 WRITE_BYTE_F(adr, res)
5926 POST_IO
5927RET(12)
5928}
5929
5930// MOVEB
5931OPCODE(0x10D8)
5932{
5933 u32 adr, res;
5934 u32 src, dst;
5935
5936 adr = AREG((Opcode >> 0) & 7);
5937 AREG((Opcode >> 0) & 7) += 1;
5938 PRE_IO
5939 READ_BYTE_F(adr, res)
5940 flag_C = 0;
5941 flag_V = 0;
5942 flag_NotZ = res;
5943 flag_N = res;
5944 adr = AREG((Opcode >> 9) & 7);
5945 AREG((Opcode >> 9) & 7) += 1;
5946 WRITE_BYTE_F(adr, res)
5947 POST_IO
5948RET(12)
5949}
5950
5951// MOVEB
5952OPCODE(0x1118)
5953{
5954 u32 adr, res;
5955 u32 src, dst;
5956
5957 adr = AREG((Opcode >> 0) & 7);
5958 AREG((Opcode >> 0) & 7) += 1;
5959 PRE_IO
5960 READ_BYTE_F(adr, res)
5961 flag_C = 0;
5962 flag_V = 0;
5963 flag_NotZ = res;
5964 flag_N = res;
5965 adr = AREG((Opcode >> 9) & 7) - 1;
5966 AREG((Opcode >> 9) & 7) = adr;
5967 WRITE_BYTE_F(adr, res)
5968 POST_IO
5969RET(12)
5970}
5971
5972// MOVEB
5973OPCODE(0x1158)
5974{
5975 u32 adr, res;
5976 u32 src, dst;
5977
5978 adr = AREG((Opcode >> 0) & 7);
5979 AREG((Opcode >> 0) & 7) += 1;
5980 PRE_IO
5981 READ_BYTE_F(adr, res)
5982 flag_C = 0;
5983 flag_V = 0;
5984 flag_NotZ = res;
5985 flag_N = res;
5986 FETCH_SWORD(adr);
5987 adr += AREG((Opcode >> 9) & 7);
5988 WRITE_BYTE_F(adr, res)
5989 POST_IO
5990RET(16)
5991}
5992
5993// MOVEB
5994OPCODE(0x1198)
5995{
5996 u32 adr, res;
5997 u32 src, dst;
5998
5999 adr = AREG((Opcode >> 0) & 7);
6000 AREG((Opcode >> 0) & 7) += 1;
6001 PRE_IO
6002 READ_BYTE_F(adr, res)
6003 flag_C = 0;
6004 flag_V = 0;
6005 flag_NotZ = res;
6006 flag_N = res;
6007 adr = AREG((Opcode >> 9) & 7);
6008 DECODE_EXT_WORD
6009 WRITE_BYTE_F(adr, res)
6010 POST_IO
6011RET(18)
6012}
6013
6014// MOVEB
6015OPCODE(0x11D8)
6016{
6017 u32 adr, res;
6018 u32 src, dst;
6019
6020 adr = AREG((Opcode >> 0) & 7);
6021 AREG((Opcode >> 0) & 7) += 1;
6022 PRE_IO
6023 READ_BYTE_F(adr, res)
6024 flag_C = 0;
6025 flag_V = 0;
6026 flag_NotZ = res;
6027 flag_N = res;
6028 FETCH_SWORD(adr);
6029 WRITE_BYTE_F(adr, res)
6030 POST_IO
6031RET(16)
6032}
6033
6034// MOVEB
6035OPCODE(0x13D8)
6036{
6037 u32 adr, res;
6038 u32 src, dst;
6039
6040 adr = AREG((Opcode >> 0) & 7);
6041 AREG((Opcode >> 0) & 7) += 1;
6042 PRE_IO
6043 READ_BYTE_F(adr, res)
6044 flag_C = 0;
6045 flag_V = 0;
6046 flag_NotZ = res;
6047 flag_N = res;
6048 FETCH_LONG(adr);
6049 WRITE_BYTE_F(adr, res)
6050 POST_IO
6051RET(20)
6052}
6053
6054// MOVEB
6055OPCODE(0x1ED8)
6056{
6057 u32 adr, res;
6058 u32 src, dst;
6059
6060 adr = AREG((Opcode >> 0) & 7);
6061 AREG((Opcode >> 0) & 7) += 1;
6062 PRE_IO
6063 READ_BYTE_F(adr, res)
6064 flag_C = 0;
6065 flag_V = 0;
6066 flag_NotZ = res;
6067 flag_N = res;
6068 adr = AREG(7);
6069 AREG(7) += 2;
6070 WRITE_BYTE_F(adr, res)
6071 POST_IO
6072RET(12)
6073}
6074
6075// MOVEB
6076OPCODE(0x1F18)
6077{
6078 u32 adr, res;
6079 u32 src, dst;
6080
6081 adr = AREG((Opcode >> 0) & 7);
6082 AREG((Opcode >> 0) & 7) += 1;
6083 PRE_IO
6084 READ_BYTE_F(adr, res)
6085 flag_C = 0;
6086 flag_V = 0;
6087 flag_NotZ = res;
6088 flag_N = res;
6089 adr = AREG(7) - 2;
6090 AREG(7) = adr;
6091 WRITE_BYTE_F(adr, res)
6092 POST_IO
6093RET(12)
6094}
6095
6096// MOVEB
6097OPCODE(0x1020)
6098{
6099 u32 adr, res;
6100 u32 src, dst;
6101
6102 adr = AREG((Opcode >> 0) & 7) - 1;
6103 AREG((Opcode >> 0) & 7) = adr;
6104 PRE_IO
6105 READ_BYTE_F(adr, res)
6106 flag_C = 0;
6107 flag_V = 0;
6108 flag_NotZ = res;
6109 flag_N = res;
6110 DREGu8((Opcode >> 9) & 7) = res;
6111 POST_IO
6112RET(10)
6113}
6114
6115// MOVEB
6116OPCODE(0x10A0)
6117{
6118 u32 adr, res;
6119 u32 src, dst;
6120
6121 adr = AREG((Opcode >> 0) & 7) - 1;
6122 AREG((Opcode >> 0) & 7) = adr;
6123 PRE_IO
6124 READ_BYTE_F(adr, res)
6125 flag_C = 0;
6126 flag_V = 0;
6127 flag_NotZ = res;
6128 flag_N = res;
6129 adr = AREG((Opcode >> 9) & 7);
6130 WRITE_BYTE_F(adr, res)
6131 POST_IO
6132RET(14)
6133}
6134
6135// MOVEB
6136OPCODE(0x10E0)
6137{
6138 u32 adr, res;
6139 u32 src, dst;
6140
6141 adr = AREG((Opcode >> 0) & 7) - 1;
6142 AREG((Opcode >> 0) & 7) = adr;
6143 PRE_IO
6144 READ_BYTE_F(adr, res)
6145 flag_C = 0;
6146 flag_V = 0;
6147 flag_NotZ = res;
6148 flag_N = res;
6149 adr = AREG((Opcode >> 9) & 7);
6150 AREG((Opcode >> 9) & 7) += 1;
6151 WRITE_BYTE_F(adr, res)
6152 POST_IO
6153RET(14)
6154}
6155
6156// MOVEB
6157OPCODE(0x1120)
6158{
6159 u32 adr, res;
6160 u32 src, dst;
6161
6162 adr = AREG((Opcode >> 0) & 7) - 1;
6163 AREG((Opcode >> 0) & 7) = adr;
6164 PRE_IO
6165 READ_BYTE_F(adr, res)
6166 flag_C = 0;
6167 flag_V = 0;
6168 flag_NotZ = res;
6169 flag_N = res;
6170 adr = AREG((Opcode >> 9) & 7) - 1;
6171 AREG((Opcode >> 9) & 7) = adr;
6172 WRITE_BYTE_F(adr, res)
6173 POST_IO
6174RET(14)
6175}
6176
6177// MOVEB
6178OPCODE(0x1160)
6179{
6180 u32 adr, res;
6181 u32 src, dst;
6182
6183 adr = AREG((Opcode >> 0) & 7) - 1;
6184 AREG((Opcode >> 0) & 7) = adr;
6185 PRE_IO
6186 READ_BYTE_F(adr, res)
6187 flag_C = 0;
6188 flag_V = 0;
6189 flag_NotZ = res;
6190 flag_N = res;
6191 FETCH_SWORD(adr);
6192 adr += AREG((Opcode >> 9) & 7);
6193 WRITE_BYTE_F(adr, res)
6194 POST_IO
6195RET(18)
6196}
6197
6198// MOVEB
6199OPCODE(0x11A0)
6200{
6201 u32 adr, res;
6202 u32 src, dst;
6203
6204 adr = AREG((Opcode >> 0) & 7) - 1;
6205 AREG((Opcode >> 0) & 7) = adr;
6206 PRE_IO
6207 READ_BYTE_F(adr, res)
6208 flag_C = 0;
6209 flag_V = 0;
6210 flag_NotZ = res;
6211 flag_N = res;
6212 adr = AREG((Opcode >> 9) & 7);
6213 DECODE_EXT_WORD
6214 WRITE_BYTE_F(adr, res)
6215 POST_IO
6216RET(20)
6217}
6218
6219// MOVEB
6220OPCODE(0x11E0)
6221{
6222 u32 adr, res;
6223 u32 src, dst;
6224
6225 adr = AREG((Opcode >> 0) & 7) - 1;
6226 AREG((Opcode >> 0) & 7) = adr;
6227 PRE_IO
6228 READ_BYTE_F(adr, res)
6229 flag_C = 0;
6230 flag_V = 0;
6231 flag_NotZ = res;
6232 flag_N = res;
6233 FETCH_SWORD(adr);
6234 WRITE_BYTE_F(adr, res)
6235 POST_IO
6236RET(18)
6237}
6238
6239// MOVEB
6240OPCODE(0x13E0)
6241{
6242 u32 adr, res;
6243 u32 src, dst;
6244
6245 adr = AREG((Opcode >> 0) & 7) - 1;
6246 AREG((Opcode >> 0) & 7) = adr;
6247 PRE_IO
6248 READ_BYTE_F(adr, res)
6249 flag_C = 0;
6250 flag_V = 0;
6251 flag_NotZ = res;
6252 flag_N = res;
6253 FETCH_LONG(adr);
6254 WRITE_BYTE_F(adr, res)
6255 POST_IO
6256RET(22)
6257}
6258
6259// MOVEB
6260OPCODE(0x1EE0)
6261{
6262 u32 adr, res;
6263 u32 src, dst;
6264
6265 adr = AREG((Opcode >> 0) & 7) - 1;
6266 AREG((Opcode >> 0) & 7) = adr;
6267 PRE_IO
6268 READ_BYTE_F(adr, res)
6269 flag_C = 0;
6270 flag_V = 0;
6271 flag_NotZ = res;
6272 flag_N = res;
6273 adr = AREG(7);
6274 AREG(7) += 2;
6275 WRITE_BYTE_F(adr, res)
6276 POST_IO
6277RET(14)
6278}
6279
6280// MOVEB
6281OPCODE(0x1F20)
6282{
6283 u32 adr, res;
6284 u32 src, dst;
6285
6286 adr = AREG((Opcode >> 0) & 7) - 1;
6287 AREG((Opcode >> 0) & 7) = adr;
6288 PRE_IO
6289 READ_BYTE_F(adr, res)
6290 flag_C = 0;
6291 flag_V = 0;
6292 flag_NotZ = res;
6293 flag_N = res;
6294 adr = AREG(7) - 2;
6295 AREG(7) = adr;
6296 WRITE_BYTE_F(adr, res)
6297 POST_IO
6298RET(14)
6299}
6300
6301// MOVEB
6302OPCODE(0x1028)
6303{
6304 u32 adr, res;
6305 u32 src, dst;
6306
6307 FETCH_SWORD(adr);
6308 adr += AREG((Opcode >> 0) & 7);
6309 PRE_IO
6310 READ_BYTE_F(adr, res)
6311 flag_C = 0;
6312 flag_V = 0;
6313 flag_NotZ = res;
6314 flag_N = res;
6315 DREGu8((Opcode >> 9) & 7) = res;
6316 POST_IO
6317RET(12)
6318}
6319
6320// MOVEB
6321OPCODE(0x10A8)
6322{
6323 u32 adr, res;
6324 u32 src, dst;
6325
6326 FETCH_SWORD(adr);
6327 adr += AREG((Opcode >> 0) & 7);
6328 PRE_IO
6329 READ_BYTE_F(adr, res)
6330 flag_C = 0;
6331 flag_V = 0;
6332 flag_NotZ = res;
6333 flag_N = res;
6334 adr = AREG((Opcode >> 9) & 7);
6335 WRITE_BYTE_F(adr, res)
6336 POST_IO
6337RET(16)
6338}
6339
6340// MOVEB
6341OPCODE(0x10E8)
6342{
6343 u32 adr, res;
6344 u32 src, dst;
6345
6346 FETCH_SWORD(adr);
6347 adr += AREG((Opcode >> 0) & 7);
6348 PRE_IO
6349 READ_BYTE_F(adr, res)
6350 flag_C = 0;
6351 flag_V = 0;
6352 flag_NotZ = res;
6353 flag_N = res;
6354 adr = AREG((Opcode >> 9) & 7);
6355 AREG((Opcode >> 9) & 7) += 1;
6356 WRITE_BYTE_F(adr, res)
6357 POST_IO
6358RET(16)
6359}
6360
6361// MOVEB
6362OPCODE(0x1128)
6363{
6364 u32 adr, res;
6365 u32 src, dst;
6366
6367 FETCH_SWORD(adr);
6368 adr += AREG((Opcode >> 0) & 7);
6369 PRE_IO
6370 READ_BYTE_F(adr, res)
6371 flag_C = 0;
6372 flag_V = 0;
6373 flag_NotZ = res;
6374 flag_N = res;
6375 adr = AREG((Opcode >> 9) & 7) - 1;
6376 AREG((Opcode >> 9) & 7) = adr;
6377 WRITE_BYTE_F(adr, res)
6378 POST_IO
6379RET(16)
6380}
6381
6382// MOVEB
6383OPCODE(0x1168)
6384{
6385 u32 adr, res;
6386 u32 src, dst;
6387
6388 FETCH_SWORD(adr);
6389 adr += AREG((Opcode >> 0) & 7);
6390 PRE_IO
6391 READ_BYTE_F(adr, res)
6392 flag_C = 0;
6393 flag_V = 0;
6394 flag_NotZ = res;
6395 flag_N = res;
6396 FETCH_SWORD(adr);
6397 adr += AREG((Opcode >> 9) & 7);
6398 WRITE_BYTE_F(adr, res)
6399 POST_IO
6400RET(20)
6401}
6402
6403// MOVEB
6404OPCODE(0x11A8)
6405{
6406 u32 adr, res;
6407 u32 src, dst;
6408
6409 FETCH_SWORD(adr);
6410 adr += AREG((Opcode >> 0) & 7);
6411 PRE_IO
6412 READ_BYTE_F(adr, res)
6413 flag_C = 0;
6414 flag_V = 0;
6415 flag_NotZ = res;
6416 flag_N = res;
6417 adr = AREG((Opcode >> 9) & 7);
6418 DECODE_EXT_WORD
6419 WRITE_BYTE_F(adr, res)
6420 POST_IO
6421RET(22)
6422}
6423
6424// MOVEB
6425OPCODE(0x11E8)
6426{
6427 u32 adr, res;
6428 u32 src, dst;
6429
6430 FETCH_SWORD(adr);
6431 adr += AREG((Opcode >> 0) & 7);
6432 PRE_IO
6433 READ_BYTE_F(adr, res)
6434 flag_C = 0;
6435 flag_V = 0;
6436 flag_NotZ = res;
6437 flag_N = res;
6438 FETCH_SWORD(adr);
6439 WRITE_BYTE_F(adr, res)
6440 POST_IO
6441RET(20)
6442}
6443
6444// MOVEB
6445OPCODE(0x13E8)
6446{
6447 u32 adr, res;
6448 u32 src, dst;
6449
6450 FETCH_SWORD(adr);
6451 adr += AREG((Opcode >> 0) & 7);
6452 PRE_IO
6453 READ_BYTE_F(adr, res)
6454 flag_C = 0;
6455 flag_V = 0;
6456 flag_NotZ = res;
6457 flag_N = res;
6458 FETCH_LONG(adr);
6459 WRITE_BYTE_F(adr, res)
6460 POST_IO
6461RET(24)
6462}
6463
6464// MOVEB
6465OPCODE(0x1EE8)
6466{
6467 u32 adr, res;
6468 u32 src, dst;
6469
6470 FETCH_SWORD(adr);
6471 adr += AREG((Opcode >> 0) & 7);
6472 PRE_IO
6473 READ_BYTE_F(adr, res)
6474 flag_C = 0;
6475 flag_V = 0;
6476 flag_NotZ = res;
6477 flag_N = res;
6478 adr = AREG(7);
6479 AREG(7) += 2;
6480 WRITE_BYTE_F(adr, res)
6481 POST_IO
6482RET(16)
6483}
6484
6485// MOVEB
6486OPCODE(0x1F28)
6487{
6488 u32 adr, res;
6489 u32 src, dst;
6490
6491 FETCH_SWORD(adr);
6492 adr += AREG((Opcode >> 0) & 7);
6493 PRE_IO
6494 READ_BYTE_F(adr, res)
6495 flag_C = 0;
6496 flag_V = 0;
6497 flag_NotZ = res;
6498 flag_N = res;
6499 adr = AREG(7) - 2;
6500 AREG(7) = adr;
6501 WRITE_BYTE_F(adr, res)
6502 POST_IO
6503RET(16)
6504}
6505
6506// MOVEB
6507OPCODE(0x1030)
6508{
6509 u32 adr, res;
6510 u32 src, dst;
6511
6512 adr = AREG((Opcode >> 0) & 7);
6513 DECODE_EXT_WORD
6514 PRE_IO
6515 READ_BYTE_F(adr, res)
6516 flag_C = 0;
6517 flag_V = 0;
6518 flag_NotZ = res;
6519 flag_N = res;
6520 DREGu8((Opcode >> 9) & 7) = res;
6521 POST_IO
6522RET(14)
6523}
6524
6525// MOVEB
6526OPCODE(0x10B0)
6527{
6528 u32 adr, res;
6529 u32 src, dst;
6530
6531 adr = AREG((Opcode >> 0) & 7);
6532 DECODE_EXT_WORD
6533 PRE_IO
6534 READ_BYTE_F(adr, res)
6535 flag_C = 0;
6536 flag_V = 0;
6537 flag_NotZ = res;
6538 flag_N = res;
6539 adr = AREG((Opcode >> 9) & 7);
6540 WRITE_BYTE_F(adr, res)
6541 POST_IO
6542RET(18)
6543}
6544
6545// MOVEB
6546OPCODE(0x10F0)
6547{
6548 u32 adr, res;
6549 u32 src, dst;
6550
6551 adr = AREG((Opcode >> 0) & 7);
6552 DECODE_EXT_WORD
6553 PRE_IO
6554 READ_BYTE_F(adr, res)
6555 flag_C = 0;
6556 flag_V = 0;
6557 flag_NotZ = res;
6558 flag_N = res;
6559 adr = AREG((Opcode >> 9) & 7);
6560 AREG((Opcode >> 9) & 7) += 1;
6561 WRITE_BYTE_F(adr, res)
6562 POST_IO
6563RET(18)
6564}
6565
6566// MOVEB
6567OPCODE(0x1130)
6568{
6569 u32 adr, res;
6570 u32 src, dst;
6571
6572 adr = AREG((Opcode >> 0) & 7);
6573 DECODE_EXT_WORD
6574 PRE_IO
6575 READ_BYTE_F(adr, res)
6576 flag_C = 0;
6577 flag_V = 0;
6578 flag_NotZ = res;
6579 flag_N = res;
6580 adr = AREG((Opcode >> 9) & 7) - 1;
6581 AREG((Opcode >> 9) & 7) = adr;
6582 WRITE_BYTE_F(adr, res)
6583 POST_IO
6584RET(18)
6585}
6586
6587// MOVEB
6588OPCODE(0x1170)
6589{
6590 u32 adr, res;
6591 u32 src, dst;
6592
6593 adr = AREG((Opcode >> 0) & 7);
6594 DECODE_EXT_WORD
6595 PRE_IO
6596 READ_BYTE_F(adr, res)
6597 flag_C = 0;
6598 flag_V = 0;
6599 flag_NotZ = res;
6600 flag_N = res;
6601 FETCH_SWORD(adr);
6602 adr += AREG((Opcode >> 9) & 7);
6603 WRITE_BYTE_F(adr, res)
6604 POST_IO
6605RET(22)
6606}
6607
6608// MOVEB
6609OPCODE(0x11B0)
6610{
6611 u32 adr, res;
6612 u32 src, dst;
6613
6614 adr = AREG((Opcode >> 0) & 7);
6615 DECODE_EXT_WORD
6616 PRE_IO
6617 READ_BYTE_F(adr, res)
6618 flag_C = 0;
6619 flag_V = 0;
6620 flag_NotZ = res;
6621 flag_N = res;
6622 adr = AREG((Opcode >> 9) & 7);
6623 DECODE_EXT_WORD
6624 WRITE_BYTE_F(adr, res)
6625 POST_IO
6626RET(24)
6627}
6628
6629// MOVEB
6630OPCODE(0x11F0)
6631{
6632 u32 adr, res;
6633 u32 src, dst;
6634
6635 adr = AREG((Opcode >> 0) & 7);
6636 DECODE_EXT_WORD
6637 PRE_IO
6638 READ_BYTE_F(adr, res)
6639 flag_C = 0;
6640 flag_V = 0;
6641 flag_NotZ = res;
6642 flag_N = res;
6643 FETCH_SWORD(adr);
6644 WRITE_BYTE_F(adr, res)
6645 POST_IO
6646RET(22)
6647}
6648
6649// MOVEB
6650OPCODE(0x13F0)
6651{
6652 u32 adr, res;
6653 u32 src, dst;
6654
6655 adr = AREG((Opcode >> 0) & 7);
6656 DECODE_EXT_WORD
6657 PRE_IO
6658 READ_BYTE_F(adr, res)
6659 flag_C = 0;
6660 flag_V = 0;
6661 flag_NotZ = res;
6662 flag_N = res;
6663 FETCH_LONG(adr);
6664 WRITE_BYTE_F(adr, res)
6665 POST_IO
6666RET(26)
6667}
6668
6669// MOVEB
6670OPCODE(0x1EF0)
6671{
6672 u32 adr, res;
6673 u32 src, dst;
6674
6675 adr = AREG((Opcode >> 0) & 7);
6676 DECODE_EXT_WORD
6677 PRE_IO
6678 READ_BYTE_F(adr, res)
6679 flag_C = 0;
6680 flag_V = 0;
6681 flag_NotZ = res;
6682 flag_N = res;
6683 adr = AREG(7);
6684 AREG(7) += 2;
6685 WRITE_BYTE_F(adr, res)
6686 POST_IO
6687RET(18)
6688}
6689
6690// MOVEB
6691OPCODE(0x1F30)
6692{
6693 u32 adr, res;
6694 u32 src, dst;
6695
6696 adr = AREG((Opcode >> 0) & 7);
6697 DECODE_EXT_WORD
6698 PRE_IO
6699 READ_BYTE_F(adr, res)
6700 flag_C = 0;
6701 flag_V = 0;
6702 flag_NotZ = res;
6703 flag_N = res;
6704 adr = AREG(7) - 2;
6705 AREG(7) = adr;
6706 WRITE_BYTE_F(adr, res)
6707 POST_IO
6708RET(18)
6709}
6710
6711// MOVEB
6712OPCODE(0x1038)
6713{
6714 u32 adr, res;
6715 u32 src, dst;
6716
6717 FETCH_SWORD(adr);
6718 PRE_IO
6719 READ_BYTE_F(adr, res)
6720 flag_C = 0;
6721 flag_V = 0;
6722 flag_NotZ = res;
6723 flag_N = res;
6724 DREGu8((Opcode >> 9) & 7) = res;
6725 POST_IO
6726RET(12)
6727}
6728
6729// MOVEB
6730OPCODE(0x10B8)
6731{
6732 u32 adr, res;
6733 u32 src, dst;
6734
6735 FETCH_SWORD(adr);
6736 PRE_IO
6737 READ_BYTE_F(adr, res)
6738 flag_C = 0;
6739 flag_V = 0;
6740 flag_NotZ = res;
6741 flag_N = res;
6742 adr = AREG((Opcode >> 9) & 7);
6743 WRITE_BYTE_F(adr, res)
6744 POST_IO
6745RET(16)
6746}
6747
6748// MOVEB
6749OPCODE(0x10F8)
6750{
6751 u32 adr, res;
6752 u32 src, dst;
6753
6754 FETCH_SWORD(adr);
6755 PRE_IO
6756 READ_BYTE_F(adr, res)
6757 flag_C = 0;
6758 flag_V = 0;
6759 flag_NotZ = res;
6760 flag_N = res;
6761 adr = AREG((Opcode >> 9) & 7);
6762 AREG((Opcode >> 9) & 7) += 1;
6763 WRITE_BYTE_F(adr, res)
6764 POST_IO
6765RET(16)
6766}
6767
6768// MOVEB
6769OPCODE(0x1138)
6770{
6771 u32 adr, res;
6772 u32 src, dst;
6773
6774 FETCH_SWORD(adr);
6775 PRE_IO
6776 READ_BYTE_F(adr, res)
6777 flag_C = 0;
6778 flag_V = 0;
6779 flag_NotZ = res;
6780 flag_N = res;
6781 adr = AREG((Opcode >> 9) & 7) - 1;
6782 AREG((Opcode >> 9) & 7) = adr;
6783 WRITE_BYTE_F(adr, res)
6784 POST_IO
6785RET(16)
6786}
6787
6788// MOVEB
6789OPCODE(0x1178)
6790{
6791 u32 adr, res;
6792 u32 src, dst;
6793
6794 FETCH_SWORD(adr);
6795 PRE_IO
6796 READ_BYTE_F(adr, res)
6797 flag_C = 0;
6798 flag_V = 0;
6799 flag_NotZ = res;
6800 flag_N = res;
6801 FETCH_SWORD(adr);
6802 adr += AREG((Opcode >> 9) & 7);
6803 WRITE_BYTE_F(adr, res)
6804 POST_IO
6805RET(20)
6806}
6807
6808// MOVEB
6809OPCODE(0x11B8)
6810{
6811 u32 adr, res;
6812 u32 src, dst;
6813
6814 FETCH_SWORD(adr);
6815 PRE_IO
6816 READ_BYTE_F(adr, res)
6817 flag_C = 0;
6818 flag_V = 0;
6819 flag_NotZ = res;
6820 flag_N = res;
6821 adr = AREG((Opcode >> 9) & 7);
6822 DECODE_EXT_WORD
6823 WRITE_BYTE_F(adr, res)
6824 POST_IO
6825RET(22)
6826}
6827
6828// MOVEB
6829OPCODE(0x11F8)
6830{
6831 u32 adr, res;
6832 u32 src, dst;
6833
6834 FETCH_SWORD(adr);
6835 PRE_IO
6836 READ_BYTE_F(adr, res)
6837 flag_C = 0;
6838 flag_V = 0;
6839 flag_NotZ = res;
6840 flag_N = res;
6841 FETCH_SWORD(adr);
6842 WRITE_BYTE_F(adr, res)
6843 POST_IO
6844RET(20)
6845}
6846
6847// MOVEB
6848OPCODE(0x13F8)
6849{
6850 u32 adr, res;
6851 u32 src, dst;
6852
6853 FETCH_SWORD(adr);
6854 PRE_IO
6855 READ_BYTE_F(adr, res)
6856 flag_C = 0;
6857 flag_V = 0;
6858 flag_NotZ = res;
6859 flag_N = res;
6860 FETCH_LONG(adr);
6861 WRITE_BYTE_F(adr, res)
6862 POST_IO
6863RET(24)
6864}
6865
6866// MOVEB
6867OPCODE(0x1EF8)
6868{
6869 u32 adr, res;
6870 u32 src, dst;
6871
6872 FETCH_SWORD(adr);
6873 PRE_IO
6874 READ_BYTE_F(adr, res)
6875 flag_C = 0;
6876 flag_V = 0;
6877 flag_NotZ = res;
6878 flag_N = res;
6879 adr = AREG(7);
6880 AREG(7) += 2;
6881 WRITE_BYTE_F(adr, res)
6882 POST_IO
6883RET(16)
6884}
6885
6886// MOVEB
6887OPCODE(0x1F38)
6888{
6889 u32 adr, res;
6890 u32 src, dst;
6891
6892 FETCH_SWORD(adr);
6893 PRE_IO
6894 READ_BYTE_F(adr, res)
6895 flag_C = 0;
6896 flag_V = 0;
6897 flag_NotZ = res;
6898 flag_N = res;
6899 adr = AREG(7) - 2;
6900 AREG(7) = adr;
6901 WRITE_BYTE_F(adr, res)
6902 POST_IO
6903RET(16)
6904}
6905
6906// MOVEB
6907OPCODE(0x1039)
6908{
6909 u32 adr, res;
6910 u32 src, dst;
6911
6912 FETCH_LONG(adr);
6913 PRE_IO
6914 READ_BYTE_F(adr, res)
6915 flag_C = 0;
6916 flag_V = 0;
6917 flag_NotZ = res;
6918 flag_N = res;
6919 DREGu8((Opcode >> 9) & 7) = res;
6920 POST_IO
6921RET(16)
6922}
6923
6924// MOVEB
6925OPCODE(0x10B9)
6926{
6927 u32 adr, res;
6928 u32 src, dst;
6929
6930 FETCH_LONG(adr);
6931 PRE_IO
6932 READ_BYTE_F(adr, res)
6933 flag_C = 0;
6934 flag_V = 0;
6935 flag_NotZ = res;
6936 flag_N = res;
6937 adr = AREG((Opcode >> 9) & 7);
6938 WRITE_BYTE_F(adr, res)
6939 POST_IO
6940RET(20)
6941}
6942
6943// MOVEB
6944OPCODE(0x10F9)
6945{
6946 u32 adr, res;
6947 u32 src, dst;
6948
6949 FETCH_LONG(adr);
6950 PRE_IO
6951 READ_BYTE_F(adr, res)
6952 flag_C = 0;
6953 flag_V = 0;
6954 flag_NotZ = res;
6955 flag_N = res;
6956 adr = AREG((Opcode >> 9) & 7);
6957 AREG((Opcode >> 9) & 7) += 1;
6958 WRITE_BYTE_F(adr, res)
6959 POST_IO
6960RET(20)
6961}
6962
6963// MOVEB
6964OPCODE(0x1139)
6965{
6966 u32 adr, res;
6967 u32 src, dst;
6968
6969 FETCH_LONG(adr);
6970 PRE_IO
6971 READ_BYTE_F(adr, res)
6972 flag_C = 0;
6973 flag_V = 0;
6974 flag_NotZ = res;
6975 flag_N = res;
6976 adr = AREG((Opcode >> 9) & 7) - 1;
6977 AREG((Opcode >> 9) & 7) = adr;
6978 WRITE_BYTE_F(adr, res)
6979 POST_IO
6980RET(20)
6981}
6982
6983// MOVEB
6984OPCODE(0x1179)
6985{
6986 u32 adr, res;
6987 u32 src, dst;
6988
6989 FETCH_LONG(adr);
6990 PRE_IO
6991 READ_BYTE_F(adr, res)
6992 flag_C = 0;
6993 flag_V = 0;
6994 flag_NotZ = res;
6995 flag_N = res;
6996 FETCH_SWORD(adr);
6997 adr += AREG((Opcode >> 9) & 7);
6998 WRITE_BYTE_F(adr, res)
6999 POST_IO
7000RET(24)
7001}
7002
7003// MOVEB
7004OPCODE(0x11B9)
7005{
7006 u32 adr, res;
7007 u32 src, dst;
7008
7009 FETCH_LONG(adr);
7010 PRE_IO
7011 READ_BYTE_F(adr, res)
7012 flag_C = 0;
7013 flag_V = 0;
7014 flag_NotZ = res;
7015 flag_N = res;
7016 adr = AREG((Opcode >> 9) & 7);
7017 DECODE_EXT_WORD
7018 WRITE_BYTE_F(adr, res)
7019 POST_IO
7020RET(26)
7021}
7022
7023// MOVEB
7024OPCODE(0x11F9)
7025{
7026 u32 adr, res;
7027 u32 src, dst;
7028
7029 FETCH_LONG(adr);
7030 PRE_IO
7031 READ_BYTE_F(adr, res)
7032 flag_C = 0;
7033 flag_V = 0;
7034 flag_NotZ = res;
7035 flag_N = res;
7036 FETCH_SWORD(adr);
7037 WRITE_BYTE_F(adr, res)
7038 POST_IO
7039RET(24)
7040}
7041
7042// MOVEB
7043OPCODE(0x13F9)
7044{
7045 u32 adr, res;
7046 u32 src, dst;
7047
7048 FETCH_LONG(adr);
7049 PRE_IO
7050 READ_BYTE_F(adr, res)
7051 flag_C = 0;
7052 flag_V = 0;
7053 flag_NotZ = res;
7054 flag_N = res;
7055 FETCH_LONG(adr);
7056 WRITE_BYTE_F(adr, res)
7057 POST_IO
7058RET(28)
7059}
7060
7061// MOVEB
7062OPCODE(0x1EF9)
7063{
7064 u32 adr, res;
7065 u32 src, dst;
7066
7067 FETCH_LONG(adr);
7068 PRE_IO
7069 READ_BYTE_F(adr, res)
7070 flag_C = 0;
7071 flag_V = 0;
7072 flag_NotZ = res;
7073 flag_N = res;
7074 adr = AREG(7);
7075 AREG(7) += 2;
7076 WRITE_BYTE_F(adr, res)
7077 POST_IO
7078RET(20)
7079}
7080
7081// MOVEB
7082OPCODE(0x1F39)
7083{
7084 u32 adr, res;
7085 u32 src, dst;
7086
7087 FETCH_LONG(adr);
7088 PRE_IO
7089 READ_BYTE_F(adr, res)
7090 flag_C = 0;
7091 flag_V = 0;
7092 flag_NotZ = res;
7093 flag_N = res;
7094 adr = AREG(7) - 2;
7095 AREG(7) = adr;
7096 WRITE_BYTE_F(adr, res)
7097 POST_IO
7098RET(20)
7099}
7100
7101// MOVEB
7102OPCODE(0x103A)
7103{
7104 u32 adr, res;
7105 u32 src, dst;
7106
7107 adr = GET_SWORD + ((u32)(PC) - BasePC);
7108 PC++;
7109 PRE_IO
7110 READ_BYTE_F(adr, res)
7111 flag_C = 0;
7112 flag_V = 0;
7113 flag_NotZ = res;
7114 flag_N = res;
7115 DREGu8((Opcode >> 9) & 7) = res;
7116 POST_IO
7117RET(12)
7118}
7119
7120// MOVEB
7121OPCODE(0x10BA)
7122{
7123 u32 adr, res;
7124 u32 src, dst;
7125
7126 adr = GET_SWORD + ((u32)(PC) - BasePC);
7127 PC++;
7128 PRE_IO
7129 READ_BYTE_F(adr, res)
7130 flag_C = 0;
7131 flag_V = 0;
7132 flag_NotZ = res;
7133 flag_N = res;
7134 adr = AREG((Opcode >> 9) & 7);
7135 WRITE_BYTE_F(adr, res)
7136 POST_IO
7137RET(16)
7138}
7139
7140// MOVEB
7141OPCODE(0x10FA)
7142{
7143 u32 adr, res;
7144 u32 src, dst;
7145
7146 adr = GET_SWORD + ((u32)(PC) - BasePC);
7147 PC++;
7148 PRE_IO
7149 READ_BYTE_F(adr, res)
7150 flag_C = 0;
7151 flag_V = 0;
7152 flag_NotZ = res;
7153 flag_N = res;
7154 adr = AREG((Opcode >> 9) & 7);
7155 AREG((Opcode >> 9) & 7) += 1;
7156 WRITE_BYTE_F(adr, res)
7157 POST_IO
7158RET(16)
7159}
7160
7161// MOVEB
7162OPCODE(0x113A)
7163{
7164 u32 adr, res;
7165 u32 src, dst;
7166
7167 adr = GET_SWORD + ((u32)(PC) - BasePC);
7168 PC++;
7169 PRE_IO
7170 READ_BYTE_F(adr, res)
7171 flag_C = 0;
7172 flag_V = 0;
7173 flag_NotZ = res;
7174 flag_N = res;
7175 adr = AREG((Opcode >> 9) & 7) - 1;
7176 AREG((Opcode >> 9) & 7) = adr;
7177 WRITE_BYTE_F(adr, res)
7178 POST_IO
7179RET(16)
7180}
7181
7182// MOVEB
7183OPCODE(0x117A)
7184{
7185 u32 adr, res;
7186 u32 src, dst;
7187
7188 adr = GET_SWORD + ((u32)(PC) - BasePC);
7189 PC++;
7190 PRE_IO
7191 READ_BYTE_F(adr, res)
7192 flag_C = 0;
7193 flag_V = 0;
7194 flag_NotZ = res;
7195 flag_N = res;
7196 FETCH_SWORD(adr);
7197 adr += AREG((Opcode >> 9) & 7);
7198 WRITE_BYTE_F(adr, res)
7199 POST_IO
7200RET(20)
7201}
7202
7203// MOVEB
7204OPCODE(0x11BA)
7205{
7206 u32 adr, res;
7207 u32 src, dst;
7208
7209 adr = GET_SWORD + ((u32)(PC) - BasePC);
7210 PC++;
7211 PRE_IO
7212 READ_BYTE_F(adr, res)
7213 flag_C = 0;
7214 flag_V = 0;
7215 flag_NotZ = res;
7216 flag_N = res;
7217 adr = AREG((Opcode >> 9) & 7);
7218 DECODE_EXT_WORD
7219 WRITE_BYTE_F(adr, res)
7220 POST_IO
7221RET(22)
7222}
7223
7224// MOVEB
7225OPCODE(0x11FA)
7226{
7227 u32 adr, res;
7228 u32 src, dst;
7229
7230 adr = GET_SWORD + ((u32)(PC) - BasePC);
7231 PC++;
7232 PRE_IO
7233 READ_BYTE_F(adr, res)
7234 flag_C = 0;
7235 flag_V = 0;
7236 flag_NotZ = res;
7237 flag_N = res;
7238 FETCH_SWORD(adr);
7239 WRITE_BYTE_F(adr, res)
7240 POST_IO
7241RET(20)
7242}
7243
7244// MOVEB
7245OPCODE(0x13FA)
7246{
7247 u32 adr, res;
7248 u32 src, dst;
7249
7250 adr = GET_SWORD + ((u32)(PC) - BasePC);
7251 PC++;
7252 PRE_IO
7253 READ_BYTE_F(adr, res)
7254 flag_C = 0;
7255 flag_V = 0;
7256 flag_NotZ = res;
7257 flag_N = res;
7258 FETCH_LONG(adr);
7259 WRITE_BYTE_F(adr, res)
7260 POST_IO
7261RET(24)
7262}
7263
7264// MOVEB
7265OPCODE(0x1EFA)
7266{
7267 u32 adr, res;
7268 u32 src, dst;
7269
7270 adr = GET_SWORD + ((u32)(PC) - BasePC);
7271 PC++;
7272 PRE_IO
7273 READ_BYTE_F(adr, res)
7274 flag_C = 0;
7275 flag_V = 0;
7276 flag_NotZ = res;
7277 flag_N = res;
7278 adr = AREG(7);
7279 AREG(7) += 2;
7280 WRITE_BYTE_F(adr, res)
7281 POST_IO
7282RET(16)
7283}
7284
7285// MOVEB
7286OPCODE(0x1F3A)
7287{
7288 u32 adr, res;
7289 u32 src, dst;
7290
7291 adr = GET_SWORD + ((u32)(PC) - BasePC);
7292 PC++;
7293 PRE_IO
7294 READ_BYTE_F(adr, res)
7295 flag_C = 0;
7296 flag_V = 0;
7297 flag_NotZ = res;
7298 flag_N = res;
7299 adr = AREG(7) - 2;
7300 AREG(7) = adr;
7301 WRITE_BYTE_F(adr, res)
7302 POST_IO
7303RET(16)
7304}
7305
7306// MOVEB
7307OPCODE(0x103B)
7308{
7309 u32 adr, res;
7310 u32 src, dst;
7311
7312 adr = (u32)(PC) - BasePC;
7313 DECODE_EXT_WORD
7314 PRE_IO
7315 READ_BYTE_F(adr, res)
7316 flag_C = 0;
7317 flag_V = 0;
7318 flag_NotZ = res;
7319 flag_N = res;
7320 DREGu8((Opcode >> 9) & 7) = res;
7321 POST_IO
7322RET(14)
7323}
7324
7325// MOVEB
7326OPCODE(0x10BB)
7327{
7328 u32 adr, res;
7329 u32 src, dst;
7330
7331 adr = (u32)(PC) - BasePC;
7332 DECODE_EXT_WORD
7333 PRE_IO
7334 READ_BYTE_F(adr, res)
7335 flag_C = 0;
7336 flag_V = 0;
7337 flag_NotZ = res;
7338 flag_N = res;
7339 adr = AREG((Opcode >> 9) & 7);
7340 WRITE_BYTE_F(adr, res)
7341 POST_IO
7342RET(18)
7343}
7344
7345// MOVEB
7346OPCODE(0x10FB)
7347{
7348 u32 adr, res;
7349 u32 src, dst;
7350
7351 adr = (u32)(PC) - BasePC;
7352 DECODE_EXT_WORD
7353 PRE_IO
7354 READ_BYTE_F(adr, res)
7355 flag_C = 0;
7356 flag_V = 0;
7357 flag_NotZ = res;
7358 flag_N = res;
7359 adr = AREG((Opcode >> 9) & 7);
7360 AREG((Opcode >> 9) & 7) += 1;
7361 WRITE_BYTE_F(adr, res)
7362 POST_IO
7363RET(18)
7364}
7365
7366// MOVEB
7367OPCODE(0x113B)
7368{
7369 u32 adr, res;
7370 u32 src, dst;
7371
7372 adr = (u32)(PC) - BasePC;
7373 DECODE_EXT_WORD
7374 PRE_IO
7375 READ_BYTE_F(adr, res)
7376 flag_C = 0;
7377 flag_V = 0;
7378 flag_NotZ = res;
7379 flag_N = res;
7380 adr = AREG((Opcode >> 9) & 7) - 1;
7381 AREG((Opcode >> 9) & 7) = adr;
7382 WRITE_BYTE_F(adr, res)
7383 POST_IO
7384RET(18)
7385}
7386
7387// MOVEB
7388OPCODE(0x117B)
7389{
7390 u32 adr, res;
7391 u32 src, dst;
7392
7393 adr = (u32)(PC) - BasePC;
7394 DECODE_EXT_WORD
7395 PRE_IO
7396 READ_BYTE_F(adr, res)
7397 flag_C = 0;
7398 flag_V = 0;
7399 flag_NotZ = res;
7400 flag_N = res;
7401 FETCH_SWORD(adr);
7402 adr += AREG((Opcode >> 9) & 7);
7403 WRITE_BYTE_F(adr, res)
7404 POST_IO
7405RET(22)
7406}
7407
7408// MOVEB
7409OPCODE(0x11BB)
7410{
7411 u32 adr, res;
7412 u32 src, dst;
7413
7414 adr = (u32)(PC) - BasePC;
7415 DECODE_EXT_WORD
7416 PRE_IO
7417 READ_BYTE_F(adr, res)
7418 flag_C = 0;
7419 flag_V = 0;
7420 flag_NotZ = res;
7421 flag_N = res;
7422 adr = AREG((Opcode >> 9) & 7);
7423 DECODE_EXT_WORD
7424 WRITE_BYTE_F(adr, res)
7425 POST_IO
7426RET(24)
7427}
7428
7429// MOVEB
7430OPCODE(0x11FB)
7431{
7432 u32 adr, res;
7433 u32 src, dst;
7434
7435 adr = (u32)(PC) - BasePC;
7436 DECODE_EXT_WORD
7437 PRE_IO
7438 READ_BYTE_F(adr, res)
7439 flag_C = 0;
7440 flag_V = 0;
7441 flag_NotZ = res;
7442 flag_N = res;
7443 FETCH_SWORD(adr);
7444 WRITE_BYTE_F(adr, res)
7445 POST_IO
7446RET(22)
7447}
7448
7449// MOVEB
7450OPCODE(0x13FB)
7451{
7452 u32 adr, res;
7453 u32 src, dst;
7454
7455 adr = (u32)(PC) - BasePC;
7456 DECODE_EXT_WORD
7457 PRE_IO
7458 READ_BYTE_F(adr, res)
7459 flag_C = 0;
7460 flag_V = 0;
7461 flag_NotZ = res;
7462 flag_N = res;
7463 FETCH_LONG(adr);
7464 WRITE_BYTE_F(adr, res)
7465 POST_IO
7466RET(26)
7467}
7468
7469// MOVEB
7470OPCODE(0x1EFB)
7471{
7472 u32 adr, res;
7473 u32 src, dst;
7474
7475 adr = (u32)(PC) - BasePC;
7476 DECODE_EXT_WORD
7477 PRE_IO
7478 READ_BYTE_F(adr, res)
7479 flag_C = 0;
7480 flag_V = 0;
7481 flag_NotZ = res;
7482 flag_N = res;
7483 adr = AREG(7);
7484 AREG(7) += 2;
7485 WRITE_BYTE_F(adr, res)
7486 POST_IO
7487RET(18)
7488}
7489
7490// MOVEB
7491OPCODE(0x1F3B)
7492{
7493 u32 adr, res;
7494 u32 src, dst;
7495
7496 adr = (u32)(PC) - BasePC;
7497 DECODE_EXT_WORD
7498 PRE_IO
7499 READ_BYTE_F(adr, res)
7500 flag_C = 0;
7501 flag_V = 0;
7502 flag_NotZ = res;
7503 flag_N = res;
7504 adr = AREG(7) - 2;
7505 AREG(7) = adr;
7506 WRITE_BYTE_F(adr, res)
7507 POST_IO
7508RET(18)
7509}
7510
7511// MOVEB
7512OPCODE(0x103C)
7513{
7514 u32 adr, res;
7515 u32 src, dst;
7516
7517 FETCH_BYTE(res);
7518 flag_C = 0;
7519 flag_V = 0;
7520 flag_NotZ = res;
7521 flag_N = res;
7522 DREGu8((Opcode >> 9) & 7) = res;
7523RET(8)
7524}
7525
7526// MOVEB
7527OPCODE(0x10BC)
7528{
7529 u32 adr, res;
7530 u32 src, dst;
7531
7532 FETCH_BYTE(res);
7533 flag_C = 0;
7534 flag_V = 0;
7535 flag_NotZ = res;
7536 flag_N = res;
7537 adr = AREG((Opcode >> 9) & 7);
7538 PRE_IO
7539 WRITE_BYTE_F(adr, res)
7540 POST_IO
7541RET(12)
7542}
7543
7544// MOVEB
7545OPCODE(0x10FC)
7546{
7547 u32 adr, res;
7548 u32 src, dst;
7549
7550 FETCH_BYTE(res);
7551 flag_C = 0;
7552 flag_V = 0;
7553 flag_NotZ = res;
7554 flag_N = res;
7555 adr = AREG((Opcode >> 9) & 7);
7556 AREG((Opcode >> 9) & 7) += 1;
7557 PRE_IO
7558 WRITE_BYTE_F(adr, res)
7559 POST_IO
7560RET(12)
7561}
7562
7563// MOVEB
7564OPCODE(0x113C)
7565{
7566 u32 adr, res;
7567 u32 src, dst;
7568
7569 FETCH_BYTE(res);
7570 flag_C = 0;
7571 flag_V = 0;
7572 flag_NotZ = res;
7573 flag_N = res;
7574 adr = AREG((Opcode >> 9) & 7) - 1;
7575 AREG((Opcode >> 9) & 7) = adr;
7576 PRE_IO
7577 WRITE_BYTE_F(adr, res)
7578 POST_IO
7579RET(12)
7580}
7581
7582// MOVEB
7583OPCODE(0x117C)
7584{
7585 u32 adr, res;
7586 u32 src, dst;
7587
7588 FETCH_BYTE(res);
7589 flag_C = 0;
7590 flag_V = 0;
7591 flag_NotZ = res;
7592 flag_N = res;
7593 FETCH_SWORD(adr);
7594 adr += AREG((Opcode >> 9) & 7);
7595 PRE_IO
7596 WRITE_BYTE_F(adr, res)
7597 POST_IO
7598RET(16)
7599}
7600
7601// MOVEB
7602OPCODE(0x11BC)
7603{
7604 u32 adr, res;
7605 u32 src, dst;
7606
7607 FETCH_BYTE(res);
7608 flag_C = 0;
7609 flag_V = 0;
7610 flag_NotZ = res;
7611 flag_N = res;
7612 adr = AREG((Opcode >> 9) & 7);
7613 DECODE_EXT_WORD
7614 PRE_IO
7615 WRITE_BYTE_F(adr, res)
7616 POST_IO
7617RET(18)
7618}
7619
7620// MOVEB
7621OPCODE(0x11FC)
7622{
7623 u32 adr, res;
7624 u32 src, dst;
7625
7626 FETCH_BYTE(res);
7627 flag_C = 0;
7628 flag_V = 0;
7629 flag_NotZ = res;
7630 flag_N = res;
7631 FETCH_SWORD(adr);
7632 PRE_IO
7633 WRITE_BYTE_F(adr, res)
7634 POST_IO
7635RET(16)
7636}
7637
7638// MOVEB
7639OPCODE(0x13FC)
7640{
7641 u32 adr, res;
7642 u32 src, dst;
7643
7644 FETCH_BYTE(res);
7645 flag_C = 0;
7646 flag_V = 0;
7647 flag_NotZ = res;
7648 flag_N = res;
7649 FETCH_LONG(adr);
7650 PRE_IO
7651 WRITE_BYTE_F(adr, res)
7652 POST_IO
7653RET(20)
7654}
7655
7656// MOVEB
7657OPCODE(0x1EFC)
7658{
7659 u32 adr, res;
7660 u32 src, dst;
7661
7662 FETCH_BYTE(res);
7663 flag_C = 0;
7664 flag_V = 0;
7665 flag_NotZ = res;
7666 flag_N = res;
7667 adr = AREG(7);
7668 AREG(7) += 2;
7669 PRE_IO
7670 WRITE_BYTE_F(adr, res)
7671 POST_IO
7672RET(12)
7673}
7674
7675// MOVEB
7676OPCODE(0x1F3C)
7677{
7678 u32 adr, res;
7679 u32 src, dst;
7680
7681 FETCH_BYTE(res);
7682 flag_C = 0;
7683 flag_V = 0;
7684 flag_NotZ = res;
7685 flag_N = res;
7686 adr = AREG(7) - 2;
7687 AREG(7) = adr;
7688 PRE_IO
7689 WRITE_BYTE_F(adr, res)
7690 POST_IO
7691RET(12)
7692}
7693
7694// MOVEB
7695OPCODE(0x101F)
7696{
7697 u32 adr, res;
7698 u32 src, dst;
7699
7700 adr = AREG(7);
7701 AREG(7) += 2;
7702 PRE_IO
7703 READ_BYTE_F(adr, res)
7704 flag_C = 0;
7705 flag_V = 0;
7706 flag_NotZ = res;
7707 flag_N = res;
7708 DREGu8((Opcode >> 9) & 7) = res;
7709 POST_IO
7710RET(8)
7711}
7712
7713// MOVEB
7714OPCODE(0x109F)
7715{
7716 u32 adr, res;
7717 u32 src, dst;
7718
7719 adr = AREG(7);
7720 AREG(7) += 2;
7721 PRE_IO
7722 READ_BYTE_F(adr, res)
7723 flag_C = 0;
7724 flag_V = 0;
7725 flag_NotZ = res;
7726 flag_N = res;
7727 adr = AREG((Opcode >> 9) & 7);
7728 WRITE_BYTE_F(adr, res)
7729 POST_IO
7730RET(12)
7731}
7732
7733// MOVEB
7734OPCODE(0x10DF)
7735{
7736 u32 adr, res;
7737 u32 src, dst;
7738
7739 adr = AREG(7);
7740 AREG(7) += 2;
7741 PRE_IO
7742 READ_BYTE_F(adr, res)
7743 flag_C = 0;
7744 flag_V = 0;
7745 flag_NotZ = res;
7746 flag_N = res;
7747 adr = AREG((Opcode >> 9) & 7);
7748 AREG((Opcode >> 9) & 7) += 1;
7749 WRITE_BYTE_F(adr, res)
7750 POST_IO
7751RET(12)
7752}
7753
7754// MOVEB
7755OPCODE(0x111F)
7756{
7757 u32 adr, res;
7758 u32 src, dst;
7759
7760 adr = AREG(7);
7761 AREG(7) += 2;
7762 PRE_IO
7763 READ_BYTE_F(adr, res)
7764 flag_C = 0;
7765 flag_V = 0;
7766 flag_NotZ = res;
7767 flag_N = res;
7768 adr = AREG((Opcode >> 9) & 7) - 1;
7769 AREG((Opcode >> 9) & 7) = adr;
7770 WRITE_BYTE_F(adr, res)
7771 POST_IO
7772RET(12)
7773}
7774
7775// MOVEB
7776OPCODE(0x115F)
7777{
7778 u32 adr, res;
7779 u32 src, dst;
7780
7781 adr = AREG(7);
7782 AREG(7) += 2;
7783 PRE_IO
7784 READ_BYTE_F(adr, res)
7785 flag_C = 0;
7786 flag_V = 0;
7787 flag_NotZ = res;
7788 flag_N = res;
7789 FETCH_SWORD(adr);
7790 adr += AREG((Opcode >> 9) & 7);
7791 WRITE_BYTE_F(adr, res)
7792 POST_IO
7793RET(16)
7794}
7795
7796// MOVEB
7797OPCODE(0x119F)
7798{
7799 u32 adr, res;
7800 u32 src, dst;
7801
7802 adr = AREG(7);
7803 AREG(7) += 2;
7804 PRE_IO
7805 READ_BYTE_F(adr, res)
7806 flag_C = 0;
7807 flag_V = 0;
7808 flag_NotZ = res;
7809 flag_N = res;
7810 adr = AREG((Opcode >> 9) & 7);
7811 DECODE_EXT_WORD
7812 WRITE_BYTE_F(adr, res)
7813 POST_IO
7814RET(18)
7815}
7816
7817// MOVEB
7818OPCODE(0x11DF)
7819{
7820 u32 adr, res;
7821 u32 src, dst;
7822
7823 adr = AREG(7);
7824 AREG(7) += 2;
7825 PRE_IO
7826 READ_BYTE_F(adr, res)
7827 flag_C = 0;
7828 flag_V = 0;
7829 flag_NotZ = res;
7830 flag_N = res;
7831 FETCH_SWORD(adr);
7832 WRITE_BYTE_F(adr, res)
7833 POST_IO
7834RET(16)
7835}
7836
7837// MOVEB
7838OPCODE(0x13DF)
7839{
7840 u32 adr, res;
7841 u32 src, dst;
7842
7843 adr = AREG(7);
7844 AREG(7) += 2;
7845 PRE_IO
7846 READ_BYTE_F(adr, res)
7847 flag_C = 0;
7848 flag_V = 0;
7849 flag_NotZ = res;
7850 flag_N = res;
7851 FETCH_LONG(adr);
7852 WRITE_BYTE_F(adr, res)
7853 POST_IO
7854RET(20)
7855}
7856
7857// MOVEB
7858OPCODE(0x1EDF)
7859{
7860 u32 adr, res;
7861 u32 src, dst;
7862
7863 adr = AREG(7);
7864 AREG(7) += 2;
7865 PRE_IO
7866 READ_BYTE_F(adr, res)
7867 flag_C = 0;
7868 flag_V = 0;
7869 flag_NotZ = res;
7870 flag_N = res;
7871 adr = AREG(7);
7872 AREG(7) += 2;
7873 WRITE_BYTE_F(adr, res)
7874 POST_IO
7875RET(12)
7876}
7877
7878// MOVEB
7879OPCODE(0x1F1F)
7880{
7881 u32 adr, res;
7882 u32 src, dst;
7883
7884 adr = AREG(7);
7885 AREG(7) += 2;
7886 PRE_IO
7887 READ_BYTE_F(adr, res)
7888 flag_C = 0;
7889 flag_V = 0;
7890 flag_NotZ = res;
7891 flag_N = res;
7892 adr = AREG(7) - 2;
7893 AREG(7) = adr;
7894 WRITE_BYTE_F(adr, res)
7895 POST_IO
7896RET(12)
7897}
7898
7899// MOVEB
7900OPCODE(0x1027)
7901{
7902 u32 adr, res;
7903 u32 src, dst;
7904
7905 adr = AREG(7) - 2;
7906 AREG(7) = adr;
7907 PRE_IO
7908 READ_BYTE_F(adr, res)
7909 flag_C = 0;
7910 flag_V = 0;
7911 flag_NotZ = res;
7912 flag_N = res;
7913 DREGu8((Opcode >> 9) & 7) = res;
7914 POST_IO
7915RET(10)
7916}
7917
7918// MOVEB
7919OPCODE(0x10A7)
7920{
7921 u32 adr, res;
7922 u32 src, dst;
7923
7924 adr = AREG(7) - 2;
7925 AREG(7) = adr;
7926 PRE_IO
7927 READ_BYTE_F(adr, res)
7928 flag_C = 0;
7929 flag_V = 0;
7930 flag_NotZ = res;
7931 flag_N = res;
7932 adr = AREG((Opcode >> 9) & 7);
7933 WRITE_BYTE_F(adr, res)
7934 POST_IO
7935RET(14)
7936}
7937
7938// MOVEB
7939OPCODE(0x10E7)
7940{
7941 u32 adr, res;
7942 u32 src, dst;
7943
7944 adr = AREG(7) - 2;
7945 AREG(7) = adr;
7946 PRE_IO
7947 READ_BYTE_F(adr, res)
7948 flag_C = 0;
7949 flag_V = 0;
7950 flag_NotZ = res;
7951 flag_N = res;
7952 adr = AREG((Opcode >> 9) & 7);
7953 AREG((Opcode >> 9) & 7) += 1;
7954 WRITE_BYTE_F(adr, res)
7955 POST_IO
7956RET(14)
7957}
7958
7959// MOVEB
7960OPCODE(0x1127)
7961{
7962 u32 adr, res;
7963 u32 src, dst;
7964
7965 adr = AREG(7) - 2;
7966 AREG(7) = adr;
7967 PRE_IO
7968 READ_BYTE_F(adr, res)
7969 flag_C = 0;
7970 flag_V = 0;
7971 flag_NotZ = res;
7972 flag_N = res;
7973 adr = AREG((Opcode >> 9) & 7) - 1;
7974 AREG((Opcode >> 9) & 7) = adr;
7975 WRITE_BYTE_F(adr, res)
7976 POST_IO
7977RET(14)
7978}
7979
7980// MOVEB
7981OPCODE(0x1167)
7982{
7983 u32 adr, res;
7984 u32 src, dst;
7985
7986 adr = AREG(7) - 2;
7987 AREG(7) = adr;
7988 PRE_IO
7989 READ_BYTE_F(adr, res)
7990 flag_C = 0;
7991 flag_V = 0;
7992 flag_NotZ = res;
7993 flag_N = res;
7994 FETCH_SWORD(adr);
7995 adr += AREG((Opcode >> 9) & 7);
7996 WRITE_BYTE_F(adr, res)
7997 POST_IO
7998RET(18)
7999}
8000
8001// MOVEB
8002OPCODE(0x11A7)
8003{
8004 u32 adr, res;
8005 u32 src, dst;
8006
8007 adr = AREG(7) - 2;
8008 AREG(7) = adr;
8009 PRE_IO
8010 READ_BYTE_F(adr, res)
8011 flag_C = 0;
8012 flag_V = 0;
8013 flag_NotZ = res;
8014 flag_N = res;
8015 adr = AREG((Opcode >> 9) & 7);
8016 DECODE_EXT_WORD
8017 WRITE_BYTE_F(adr, res)
8018 POST_IO
8019RET(20)
8020}
8021
8022// MOVEB
8023OPCODE(0x11E7)
8024{
8025 u32 adr, res;
8026 u32 src, dst;
8027
8028 adr = AREG(7) - 2;
8029 AREG(7) = adr;
8030 PRE_IO
8031 READ_BYTE_F(adr, res)
8032 flag_C = 0;
8033 flag_V = 0;
8034 flag_NotZ = res;
8035 flag_N = res;
8036 FETCH_SWORD(adr);
8037 WRITE_BYTE_F(adr, res)
8038 POST_IO
8039RET(18)
8040}
8041
8042// MOVEB
8043OPCODE(0x13E7)
8044{
8045 u32 adr, res;
8046 u32 src, dst;
8047
8048 adr = AREG(7) - 2;
8049 AREG(7) = adr;
8050 PRE_IO
8051 READ_BYTE_F(adr, res)
8052 flag_C = 0;
8053 flag_V = 0;
8054 flag_NotZ = res;
8055 flag_N = res;
8056 FETCH_LONG(adr);
8057 WRITE_BYTE_F(adr, res)
8058 POST_IO
8059RET(22)
8060}
8061
8062// MOVEB
8063OPCODE(0x1EE7)
8064{
8065 u32 adr, res;
8066 u32 src, dst;
8067
8068 adr = AREG(7) - 2;
8069 AREG(7) = adr;
8070 PRE_IO
8071 READ_BYTE_F(adr, res)
8072 flag_C = 0;
8073 flag_V = 0;
8074 flag_NotZ = res;
8075 flag_N = res;
8076 adr = AREG(7);
8077 AREG(7) += 2;
8078 WRITE_BYTE_F(adr, res)
8079 POST_IO
8080RET(14)
8081}
8082
8083// MOVEB
8084OPCODE(0x1F27)
8085{
8086 u32 adr, res;
8087 u32 src, dst;
8088
8089 adr = AREG(7) - 2;
8090 AREG(7) = adr;
8091 PRE_IO
8092 READ_BYTE_F(adr, res)
8093 flag_C = 0;
8094 flag_V = 0;
8095 flag_NotZ = res;
8096 flag_N = res;
8097 adr = AREG(7) - 2;
8098 AREG(7) = adr;
8099 WRITE_BYTE_F(adr, res)
8100 POST_IO
8101RET(14)
8102}
8103
8104// MOVEL
8105OPCODE(0x2000)
8106{
8107 u32 adr, res;
8108 u32 src, dst;
8109
8110 res = DREGu32((Opcode >> 0) & 7);
8111 flag_C = 0;
8112 flag_V = 0;
8113 flag_NotZ = res;
8114 flag_N = res >> 24;
8115 DREGu32((Opcode >> 9) & 7) = res;
8116RET(4)
8117}
8118
8119// MOVEL
8120OPCODE(0x2080)
8121{
8122 u32 adr, res;
8123 u32 src, dst;
8124
8125 res = DREGu32((Opcode >> 0) & 7);
8126 flag_C = 0;
8127 flag_V = 0;
8128 flag_NotZ = res;
8129 flag_N = res >> 24;
8130 adr = AREG((Opcode >> 9) & 7);
8131 PRE_IO
8132 WRITE_LONG_F(adr, res)
8133 POST_IO
8134RET(12)
8135}
8136
8137// MOVEL
8138OPCODE(0x20C0)
8139{
8140 u32 adr, res;
8141 u32 src, dst;
8142
8143 res = DREGu32((Opcode >> 0) & 7);
8144 flag_C = 0;
8145 flag_V = 0;
8146 flag_NotZ = res;
8147 flag_N = res >> 24;
8148 adr = AREG((Opcode >> 9) & 7);
8149 AREG((Opcode >> 9) & 7) += 4;
8150 PRE_IO
8151 WRITE_LONG_F(adr, res)
8152 POST_IO
8153RET(12)
8154}
8155
8156// MOVEL
8157OPCODE(0x2100)
8158{
8159 u32 adr, res;
8160 u32 src, dst;
8161
8162 res = DREGu32((Opcode >> 0) & 7);
8163 flag_C = 0;
8164 flag_V = 0;
8165 flag_NotZ = res;
8166 flag_N = res >> 24;
8167 adr = AREG((Opcode >> 9) & 7) - 4;
8168 AREG((Opcode >> 9) & 7) = adr;
8169 PRE_IO
80db4442 8170 WRITE_LONG_DEC_F(adr, res)
70357ce5 8171 POST_IO
8172RET(12)
8173}
8174
8175// MOVEL
8176OPCODE(0x2140)
8177{
8178 u32 adr, res;
8179 u32 src, dst;
8180
8181 res = DREGu32((Opcode >> 0) & 7);
8182 flag_C = 0;
8183 flag_V = 0;
8184 flag_NotZ = res;
8185 flag_N = res >> 24;
8186 FETCH_SWORD(adr);
8187 adr += AREG((Opcode >> 9) & 7);
8188 PRE_IO
8189 WRITE_LONG_F(adr, res)
8190 POST_IO
8191RET(16)
8192}
8193
8194// MOVEL
8195OPCODE(0x2180)
8196{
8197 u32 adr, res;
8198 u32 src, dst;
8199
8200 res = DREGu32((Opcode >> 0) & 7);
8201 flag_C = 0;
8202 flag_V = 0;
8203 flag_NotZ = res;
8204 flag_N = res >> 24;
8205 adr = AREG((Opcode >> 9) & 7);
8206 DECODE_EXT_WORD
8207 PRE_IO
8208 WRITE_LONG_F(adr, res)
8209 POST_IO
8210RET(18)
8211}
8212
8213// MOVEL
8214OPCODE(0x21C0)
8215{
8216 u32 adr, res;
8217 u32 src, dst;
8218
8219 res = DREGu32((Opcode >> 0) & 7);
8220 flag_C = 0;
8221 flag_V = 0;
8222 flag_NotZ = res;
8223 flag_N = res >> 24;
8224 FETCH_SWORD(adr);
8225 PRE_IO
8226 WRITE_LONG_F(adr, res)
8227 POST_IO
8228RET(16)
8229}
8230
8231// MOVEL
8232OPCODE(0x23C0)
8233{
8234 u32 adr, res;
8235 u32 src, dst;
8236
8237 res = DREGu32((Opcode >> 0) & 7);
8238 flag_C = 0;
8239 flag_V = 0;
8240 flag_NotZ = res;
8241 flag_N = res >> 24;
8242 FETCH_LONG(adr);
8243 PRE_IO
8244 WRITE_LONG_F(adr, res)
8245 POST_IO
8246RET(20)
8247}
8248
8249// MOVEL
8250OPCODE(0x2EC0)
8251{
8252 u32 adr, res;
8253 u32 src, dst;
8254
8255 res = DREGu32((Opcode >> 0) & 7);
8256 flag_C = 0;
8257 flag_V = 0;
8258 flag_NotZ = res;
8259 flag_N = res >> 24;
8260 adr = AREG(7);
8261 AREG(7) += 4;
8262 PRE_IO
8263 WRITE_LONG_F(adr, res)
8264 POST_IO
8265RET(12)
8266}
8267
8268// MOVEL
8269OPCODE(0x2F00)
8270{
8271 u32 adr, res;
8272 u32 src, dst;
8273
8274 res = DREGu32((Opcode >> 0) & 7);
8275 flag_C = 0;
8276 flag_V = 0;
8277 flag_NotZ = res;
8278 flag_N = res >> 24;
8279 adr = AREG(7) - 4;
8280 AREG(7) = adr;
8281 PRE_IO
8282 WRITE_LONG_F(adr, res)
8283 POST_IO
8284RET(12)
8285}
8286
8287// MOVEL
8288OPCODE(0x2008)
8289{
8290 u32 adr, res;
8291 u32 src, dst;
8292
8293 res = AREGu32((Opcode >> 0) & 7);
8294 flag_C = 0;
8295 flag_V = 0;
8296 flag_NotZ = res;
8297 flag_N = res >> 24;
8298 DREGu32((Opcode >> 9) & 7) = res;
8299RET(4)
8300}
8301
8302// MOVEL
8303OPCODE(0x2088)
8304{
8305 u32 adr, res;
8306 u32 src, dst;
8307
8308 res = AREGu32((Opcode >> 0) & 7);
8309 flag_C = 0;
8310 flag_V = 0;
8311 flag_NotZ = res;
8312 flag_N = res >> 24;
8313 adr = AREG((Opcode >> 9) & 7);
8314 PRE_IO
8315 WRITE_LONG_F(adr, res)
8316 POST_IO
8317RET(12)
8318}
8319
8320// MOVEL
8321OPCODE(0x20C8)
8322{
8323 u32 adr, res;
8324 u32 src, dst;
8325
8326 res = AREGu32((Opcode >> 0) & 7);
8327 flag_C = 0;
8328 flag_V = 0;
8329 flag_NotZ = res;
8330 flag_N = res >> 24;
8331 adr = AREG((Opcode >> 9) & 7);
8332 AREG((Opcode >> 9) & 7) += 4;
8333 PRE_IO
8334 WRITE_LONG_F(adr, res)
8335 POST_IO
8336RET(12)
8337}
8338
8339// MOVEL
8340OPCODE(0x2108)
8341{
8342 u32 adr, res;
8343 u32 src, dst;
8344
8345 res = AREGu32((Opcode >> 0) & 7);
8346 flag_C = 0;
8347 flag_V = 0;
8348 flag_NotZ = res;
8349 flag_N = res >> 24;
8350 adr = AREG((Opcode >> 9) & 7) - 4;
8351 AREG((Opcode >> 9) & 7) = adr;
8352 PRE_IO
80db4442 8353 WRITE_LONG_DEC_F(adr, res)
70357ce5 8354 POST_IO
8355RET(12)
8356}
8357
8358// MOVEL
8359OPCODE(0x2148)
8360{
8361 u32 adr, res;
8362 u32 src, dst;
8363
8364 res = AREGu32((Opcode >> 0) & 7);
8365 flag_C = 0;
8366 flag_V = 0;
8367 flag_NotZ = res;
8368 flag_N = res >> 24;
8369 FETCH_SWORD(adr);
8370 adr += AREG((Opcode >> 9) & 7);
8371 PRE_IO
8372 WRITE_LONG_F(adr, res)
8373 POST_IO
8374RET(16)
8375}
8376
8377// MOVEL
8378OPCODE(0x2188)
8379{
8380 u32 adr, res;
8381 u32 src, dst;
8382
8383 res = AREGu32((Opcode >> 0) & 7);
8384 flag_C = 0;
8385 flag_V = 0;
8386 flag_NotZ = res;
8387 flag_N = res >> 24;
8388 adr = AREG((Opcode >> 9) & 7);
8389 DECODE_EXT_WORD
8390 PRE_IO
8391 WRITE_LONG_F(adr, res)
8392 POST_IO
8393RET(18)
8394}
8395
8396// MOVEL
8397OPCODE(0x21C8)
8398{
8399 u32 adr, res;
8400 u32 src, dst;
8401
8402 res = AREGu32((Opcode >> 0) & 7);
8403 flag_C = 0;
8404 flag_V = 0;
8405 flag_NotZ = res;
8406 flag_N = res >> 24;
8407 FETCH_SWORD(adr);
8408 PRE_IO
8409 WRITE_LONG_F(adr, res)
8410 POST_IO
8411RET(16)
8412}
8413
8414// MOVEL
8415OPCODE(0x23C8)
8416{
8417 u32 adr, res;
8418 u32 src, dst;
8419
8420 res = AREGu32((Opcode >> 0) & 7);
8421 flag_C = 0;
8422 flag_V = 0;
8423 flag_NotZ = res;
8424 flag_N = res >> 24;
8425 FETCH_LONG(adr);
8426 PRE_IO
8427 WRITE_LONG_F(adr, res)
8428 POST_IO
8429RET(20)
8430}
8431
8432// MOVEL
8433OPCODE(0x2EC8)
8434{
8435 u32 adr, res;
8436 u32 src, dst;
8437
8438 res = AREGu32((Opcode >> 0) & 7);
8439 flag_C = 0;
8440 flag_V = 0;
8441 flag_NotZ = res;
8442 flag_N = res >> 24;
8443 adr = AREG(7);
8444 AREG(7) += 4;
8445 PRE_IO
8446 WRITE_LONG_F(adr, res)
8447 POST_IO
8448RET(12)
8449}
8450
8451// MOVEL
8452OPCODE(0x2F08)
8453{
8454 u32 adr, res;
8455 u32 src, dst;
8456
8457 res = AREGu32((Opcode >> 0) & 7);
8458 flag_C = 0;
8459 flag_V = 0;
8460 flag_NotZ = res;
8461 flag_N = res >> 24;
8462 adr = AREG(7) - 4;
8463 AREG(7) = adr;
8464 PRE_IO
8465 WRITE_LONG_F(adr, res)
8466 POST_IO
8467RET(12)
8468}
8469
8470// MOVEL
8471OPCODE(0x2010)
8472{
8473 u32 adr, res;
8474 u32 src, dst;
8475
8476 adr = AREG((Opcode >> 0) & 7);
8477 PRE_IO
8478 READ_LONG_F(adr, res)
8479 flag_C = 0;
8480 flag_V = 0;
8481 flag_NotZ = res;
8482 flag_N = res >> 24;
8483 DREGu32((Opcode >> 9) & 7) = res;
8484 POST_IO
8485RET(12)
8486}
8487
8488// MOVEL
8489OPCODE(0x2090)
8490{
8491 u32 adr, res;
8492 u32 src, dst;
8493
8494 adr = AREG((Opcode >> 0) & 7);
8495 PRE_IO
8496 READ_LONG_F(adr, res)
8497 flag_C = 0;
8498 flag_V = 0;
8499 flag_NotZ = res;
8500 flag_N = res >> 24;
8501 adr = AREG((Opcode >> 9) & 7);
8502 WRITE_LONG_F(adr, res)
8503 POST_IO
8504RET(20)
8505}
8506
8507// MOVEL
8508OPCODE(0x20D0)
8509{
8510 u32 adr, res;
8511 u32 src, dst;
8512
8513 adr = AREG((Opcode >> 0) & 7);
8514 PRE_IO
8515 READ_LONG_F(adr, res)
8516 flag_C = 0;
8517 flag_V = 0;
8518 flag_NotZ = res;
8519 flag_N = res >> 24;
8520 adr = AREG((Opcode >> 9) & 7);
8521 AREG((Opcode >> 9) & 7) += 4;
8522 WRITE_LONG_F(adr, res)
8523 POST_IO
8524RET(20)
8525}
8526
8527// MOVEL
8528OPCODE(0x2110)
8529{
8530 u32 adr, res;
8531 u32 src, dst;
8532
8533 adr = AREG((Opcode >> 0) & 7);
8534 PRE_IO
8535 READ_LONG_F(adr, res)
8536 flag_C = 0;
8537 flag_V = 0;
8538 flag_NotZ = res;
8539 flag_N = res >> 24;
8540 adr = AREG((Opcode >> 9) & 7) - 4;
8541 AREG((Opcode >> 9) & 7) = adr;
80db4442 8542 WRITE_LONG_DEC_F(adr, res)
70357ce5 8543 POST_IO
8544RET(20)
8545}
8546
8547// MOVEL
8548OPCODE(0x2150)
8549{
8550 u32 adr, res;
8551 u32 src, dst;
8552
8553 adr = AREG((Opcode >> 0) & 7);
8554 PRE_IO
8555 READ_LONG_F(adr, res)
8556 flag_C = 0;
8557 flag_V = 0;
8558 flag_NotZ = res;
8559 flag_N = res >> 24;
8560 FETCH_SWORD(adr);
8561 adr += AREG((Opcode >> 9) & 7);
8562 WRITE_LONG_F(adr, res)
8563 POST_IO
8564RET(24)
8565}
8566
8567// MOVEL
8568OPCODE(0x2190)
8569{
8570 u32 adr, res;
8571 u32 src, dst;
8572
8573 adr = AREG((Opcode >> 0) & 7);
8574 PRE_IO
8575 READ_LONG_F(adr, res)
8576 flag_C = 0;
8577 flag_V = 0;
8578 flag_NotZ = res;
8579 flag_N = res >> 24;
8580 adr = AREG((Opcode >> 9) & 7);
8581 DECODE_EXT_WORD
8582 WRITE_LONG_F(adr, res)
8583 POST_IO
8584RET(26)
8585}
8586
8587// MOVEL
8588OPCODE(0x21D0)
8589{
8590 u32 adr, res;
8591 u32 src, dst;
8592
8593 adr = AREG((Opcode >> 0) & 7);
8594 PRE_IO
8595 READ_LONG_F(adr, res)
8596 flag_C = 0;
8597 flag_V = 0;
8598 flag_NotZ = res;
8599 flag_N = res >> 24;
8600 FETCH_SWORD(adr);
8601 WRITE_LONG_F(adr, res)
8602 POST_IO
8603RET(24)
8604}
8605
8606// MOVEL
8607OPCODE(0x23D0)
8608{
8609 u32 adr, res;
8610 u32 src, dst;
8611
8612 adr = AREG((Opcode >> 0) & 7);
8613 PRE_IO
8614 READ_LONG_F(adr, res)
8615 flag_C = 0;
8616 flag_V = 0;
8617 flag_NotZ = res;
8618 flag_N = res >> 24;
8619 FETCH_LONG(adr);
8620 WRITE_LONG_F(adr, res)
8621 POST_IO
8622RET(28)
8623}
8624
8625// MOVEL
8626OPCODE(0x2ED0)
8627{
8628 u32 adr, res;
8629 u32 src, dst;
8630
8631 adr = AREG((Opcode >> 0) & 7);
8632 PRE_IO
8633 READ_LONG_F(adr, res)
8634 flag_C = 0;
8635 flag_V = 0;
8636 flag_NotZ = res;
8637 flag_N = res >> 24;
8638 adr = AREG(7);
8639 AREG(7) += 4;
8640 WRITE_LONG_F(adr, res)
8641 POST_IO
8642RET(20)
8643}
8644
8645// MOVEL
8646OPCODE(0x2F10)
8647{
8648 u32 adr, res;
8649 u32 src, dst;
8650
8651 adr = AREG((Opcode >> 0) & 7);
8652 PRE_IO
8653 READ_LONG_F(adr, res)
8654 flag_C = 0;
8655 flag_V = 0;
8656 flag_NotZ = res;
8657 flag_N = res >> 24;
8658 adr = AREG(7) - 4;
8659 AREG(7) = adr;
8660 WRITE_LONG_F(adr, res)
8661 POST_IO
8662RET(20)
8663}
8664
8665// MOVEL
8666OPCODE(0x2018)
8667{
8668 u32 adr, res;
8669 u32 src, dst;
8670
8671 adr = AREG((Opcode >> 0) & 7);
8672 AREG((Opcode >> 0) & 7) += 4;
8673 PRE_IO
8674 READ_LONG_F(adr, res)
8675 flag_C = 0;
8676 flag_V = 0;
8677 flag_NotZ = res;
8678 flag_N = res >> 24;
8679 DREGu32((Opcode >> 9) & 7) = res;
8680 POST_IO
8681RET(12)
8682}
8683
8684// MOVEL
8685OPCODE(0x2098)
8686{
8687 u32 adr, res;
8688 u32 src, dst;
8689
8690 adr = AREG((Opcode >> 0) & 7);
8691 AREG((Opcode >> 0) & 7) += 4;
8692 PRE_IO
8693 READ_LONG_F(adr, res)
8694 flag_C = 0;
8695 flag_V = 0;
8696 flag_NotZ = res;
8697 flag_N = res >> 24;
8698 adr = AREG((Opcode >> 9) & 7);
8699 WRITE_LONG_F(adr, res)
8700 POST_IO
8701RET(20)
8702}
8703
8704// MOVEL
8705OPCODE(0x20D8)
8706{
8707 u32 adr, res;
8708 u32 src, dst;
8709
8710 adr = AREG((Opcode >> 0) & 7);
8711 AREG((Opcode >> 0) & 7) += 4;
8712 PRE_IO
8713 READ_LONG_F(adr, res)
8714 flag_C = 0;
8715 flag_V = 0;
8716 flag_NotZ = res;
8717 flag_N = res >> 24;
8718 adr = AREG((Opcode >> 9) & 7);
8719 AREG((Opcode >> 9) & 7) += 4;
8720 WRITE_LONG_F(adr, res)
8721 POST_IO
8722RET(20)
8723}
8724
8725// MOVEL
8726OPCODE(0x2118)
8727{
8728 u32 adr, res;
8729 u32 src, dst;
8730
8731 adr = AREG((Opcode >> 0) & 7);
8732 AREG((Opcode >> 0) & 7) += 4;
8733 PRE_IO
8734 READ_LONG_F(adr, res)
8735 flag_C = 0;
8736 flag_V = 0;
8737 flag_NotZ = res;
8738 flag_N = res >> 24;
8739 adr = AREG((Opcode >> 9) & 7) - 4;
8740 AREG((Opcode >> 9) & 7) = adr;
80db4442 8741 WRITE_LONG_DEC_F(adr, res)
70357ce5 8742 POST_IO
8743RET(20)
8744}
8745
8746// MOVEL
8747OPCODE(0x2158)
8748{
8749 u32 adr, res;
8750 u32 src, dst;
8751
8752 adr = AREG((Opcode >> 0) & 7);
8753 AREG((Opcode >> 0) & 7) += 4;
8754 PRE_IO
8755 READ_LONG_F(adr, res)
8756 flag_C = 0;
8757 flag_V = 0;
8758 flag_NotZ = res;
8759 flag_N = res >> 24;
8760 FETCH_SWORD(adr);
8761 adr += AREG((Opcode >> 9) & 7);
8762 WRITE_LONG_F(adr, res)
8763 POST_IO
8764RET(24)
8765}
8766
8767// MOVEL
8768OPCODE(0x2198)
8769{
8770 u32 adr, res;
8771 u32 src, dst;
8772
8773 adr = AREG((Opcode >> 0) & 7);
8774 AREG((Opcode >> 0) & 7) += 4;
8775 PRE_IO
8776 READ_LONG_F(adr, res)
8777 flag_C = 0;
8778 flag_V = 0;
8779 flag_NotZ = res;
8780 flag_N = res >> 24;
8781 adr = AREG((Opcode >> 9) & 7);
8782 DECODE_EXT_WORD
8783 WRITE_LONG_F(adr, res)
8784 POST_IO
8785RET(26)
8786}
8787
8788// MOVEL
8789OPCODE(0x21D8)
8790{
8791 u32 adr, res;
8792 u32 src, dst;
8793
8794 adr = AREG((Opcode >> 0) & 7);
8795 AREG((Opcode >> 0) & 7) += 4;
8796 PRE_IO
8797 READ_LONG_F(adr, res)
8798 flag_C = 0;
8799 flag_V = 0;
8800 flag_NotZ = res;
8801 flag_N = res >> 24;
8802 FETCH_SWORD(adr);
8803 WRITE_LONG_F(adr, res)
8804 POST_IO
8805RET(24)
8806}
8807
8808// MOVEL
8809OPCODE(0x23D8)
8810{
8811 u32 adr, res;
8812 u32 src, dst;
8813
8814 adr = AREG((Opcode >> 0) & 7);
8815 AREG((Opcode >> 0) & 7) += 4;
8816 PRE_IO
8817 READ_LONG_F(adr, res)
8818 flag_C = 0;
8819 flag_V = 0;
8820 flag_NotZ = res;
8821 flag_N = res >> 24;
8822 FETCH_LONG(adr);
8823 WRITE_LONG_F(adr, res)
8824 POST_IO
8825RET(28)
8826}
8827
8828// MOVEL
8829OPCODE(0x2ED8)
8830{
8831 u32 adr, res;
8832 u32 src, dst;
8833
8834 adr = AREG((Opcode >> 0) & 7);
8835 AREG((Opcode >> 0) & 7) += 4;
8836 PRE_IO
8837 READ_LONG_F(adr, res)
8838 flag_C = 0;
8839 flag_V = 0;
8840 flag_NotZ = res;
8841 flag_N = res >> 24;
8842 adr = AREG(7);
8843 AREG(7) += 4;
8844 WRITE_LONG_F(adr, res)
8845 POST_IO
8846RET(20)
8847}
8848
8849// MOVEL
8850OPCODE(0x2F18)
8851{
8852 u32 adr, res;
8853 u32 src, dst;
8854
8855 adr = AREG((Opcode >> 0) & 7);
8856 AREG((Opcode >> 0) & 7) += 4;
8857 PRE_IO
8858 READ_LONG_F(adr, res)
8859 flag_C = 0;
8860 flag_V = 0;
8861 flag_NotZ = res;
8862 flag_N = res >> 24;
8863 adr = AREG(7) - 4;
8864 AREG(7) = adr;
8865 WRITE_LONG_F(adr, res)
8866 POST_IO
8867RET(20)
8868}
8869
8870// MOVEL
8871OPCODE(0x2020)
8872{
8873 u32 adr, res;
8874 u32 src, dst;
8875
8876 adr = AREG((Opcode >> 0) & 7) - 4;
8877 AREG((Opcode >> 0) & 7) = adr;
8878 PRE_IO
8879 READ_LONG_F(adr, res)
8880 flag_C = 0;
8881 flag_V = 0;
8882 flag_NotZ = res;
8883 flag_N = res >> 24;
8884 DREGu32((Opcode >> 9) & 7) = res;
8885 POST_IO
8886RET(14)
8887}
8888
8889// MOVEL
8890OPCODE(0x20A0)
8891{
8892 u32 adr, res;
8893 u32 src, dst;
8894
8895 adr = AREG((Opcode >> 0) & 7) - 4;
8896 AREG((Opcode >> 0) & 7) = adr;
8897 PRE_IO
8898 READ_LONG_F(adr, res)
8899 flag_C = 0;
8900 flag_V = 0;
8901 flag_NotZ = res;
8902 flag_N = res >> 24;
8903 adr = AREG((Opcode >> 9) & 7);
8904 WRITE_LONG_F(adr, res)
8905 POST_IO
8906RET(22)
8907}
8908
8909// MOVEL
8910OPCODE(0x20E0)
8911{
8912 u32 adr, res;
8913 u32 src, dst;
8914
8915 adr = AREG((Opcode >> 0) & 7) - 4;
8916 AREG((Opcode >> 0) & 7) = adr;
8917 PRE_IO
8918 READ_LONG_F(adr, res)
8919 flag_C = 0;
8920 flag_V = 0;
8921 flag_NotZ = res;
8922 flag_N = res >> 24;
8923 adr = AREG((Opcode >> 9) & 7);
8924 AREG((Opcode >> 9) & 7) += 4;
8925 WRITE_LONG_F(adr, res)
8926 POST_IO
8927RET(22)
8928}
8929
8930// MOVEL
8931OPCODE(0x2120)
8932{
8933 u32 adr, res;
8934 u32 src, dst;
8935
8936 adr = AREG((Opcode >> 0) & 7) - 4;
8937 AREG((Opcode >> 0) & 7) = adr;
8938 PRE_IO
8939 READ_LONG_F(adr, res)
8940 flag_C = 0;
8941 flag_V = 0;
8942 flag_NotZ = res;
8943 flag_N = res >> 24;
8944 adr = AREG((Opcode >> 9) & 7) - 4;
8945 AREG((Opcode >> 9) & 7) = adr;
80db4442 8946 WRITE_LONG_DEC_F(adr, res)
70357ce5 8947 POST_IO
8948RET(22)
8949}
8950
8951// MOVEL
8952OPCODE(0x2160)
8953{
8954 u32 adr, res;
8955 u32 src, dst;
8956
8957 adr = AREG((Opcode >> 0) & 7) - 4;
8958 AREG((Opcode >> 0) & 7) = adr;
8959 PRE_IO
8960 READ_LONG_F(adr, res)
8961 flag_C = 0;
8962 flag_V = 0;
8963 flag_NotZ = res;
8964 flag_N = res >> 24;
8965 FETCH_SWORD(adr);
8966 adr += AREG((Opcode >> 9) & 7);
8967 WRITE_LONG_F(adr, res)
8968 POST_IO
8969RET(26)
8970}
8971
8972// MOVEL
8973OPCODE(0x21A0)
8974{
8975 u32 adr, res;
8976 u32 src, dst;
8977
8978 adr = AREG((Opcode >> 0) & 7) - 4;
8979 AREG((Opcode >> 0) & 7) = adr;
8980 PRE_IO
8981 READ_LONG_F(adr, res)
8982 flag_C = 0;
8983 flag_V = 0;
8984 flag_NotZ = res;
8985 flag_N = res >> 24;
8986 adr = AREG((Opcode >> 9) & 7);
8987 DECODE_EXT_WORD
8988 WRITE_LONG_F(adr, res)
8989 POST_IO
8990RET(28)
8991}
8992
8993// MOVEL
8994OPCODE(0x21E0)
8995{
8996 u32 adr, res;
8997 u32 src, dst;
8998
8999 adr = AREG((Opcode >> 0) & 7) - 4;
9000 AREG((Opcode >> 0) & 7) = adr;
9001 PRE_IO
9002 READ_LONG_F(adr, res)
9003 flag_C = 0;
9004 flag_V = 0;
9005 flag_NotZ = res;
9006 flag_N = res >> 24;
9007 FETCH_SWORD(adr);
9008 WRITE_LONG_F(adr, res)
9009 POST_IO
9010RET(26)
9011}
9012
9013// MOVEL
9014OPCODE(0x23E0)
9015{
9016 u32 adr, res;
9017 u32 src, dst;
9018
9019 adr = AREG((Opcode >> 0) & 7) - 4;
9020 AREG((Opcode >> 0) & 7) = adr;
9021 PRE_IO
9022 READ_LONG_F(adr, res)
9023 flag_C = 0;
9024 flag_V = 0;
9025 flag_NotZ = res;
9026 flag_N = res >> 24;
9027 FETCH_LONG(adr);
9028 WRITE_LONG_F(adr, res)
9029 POST_IO
9030RET(30)
9031}
9032
9033// MOVEL
9034OPCODE(0x2EE0)
9035{
9036 u32 adr, res;
9037 u32 src, dst;
9038
9039 adr = AREG((Opcode >> 0) & 7) - 4;
9040 AREG((Opcode >> 0) & 7) = adr;
9041 PRE_IO
9042 READ_LONG_F(adr, res)
9043 flag_C = 0;
9044 flag_V = 0;
9045 flag_NotZ = res;
9046 flag_N = res >> 24;
9047 adr = AREG(7);
9048 AREG(7) += 4;
9049 WRITE_LONG_F(adr, res)
9050 POST_IO
9051RET(22)
9052}
9053
9054// MOVEL
9055OPCODE(0x2F20)
9056{
9057 u32 adr, res;
9058 u32 src, dst;
9059
9060 adr = AREG((Opcode >> 0) & 7) - 4;
9061 AREG((Opcode >> 0) & 7) = adr;
9062 PRE_IO
9063 READ_LONG_F(adr, res)
9064 flag_C = 0;
9065 flag_V = 0;
9066 flag_NotZ = res;
9067 flag_N = res >> 24;
9068 adr = AREG(7) - 4;
9069 AREG(7) = adr;
9070 WRITE_LONG_F(adr, res)
9071 POST_IO
9072RET(22)
9073}
9074
9075// MOVEL
9076OPCODE(0x2028)
9077{
9078 u32 adr, res;
9079 u32 src, dst;
9080
9081 FETCH_SWORD(adr);
9082 adr += AREG((Opcode >> 0) & 7);
9083 PRE_IO
9084 READ_LONG_F(adr, res)
9085 flag_C = 0;
9086 flag_V = 0;
9087 flag_NotZ = res;
9088 flag_N = res >> 24;
9089 DREGu32((Opcode >> 9) & 7) = res;
9090 POST_IO
9091RET(16)
9092}
9093
9094// MOVEL
9095OPCODE(0x20A8)
9096{
9097 u32 adr, res;
9098 u32 src, dst;
9099
9100 FETCH_SWORD(adr);
9101 adr += AREG((Opcode >> 0) & 7);
9102 PRE_IO
9103 READ_LONG_F(adr, res)
9104 flag_C = 0;
9105 flag_V = 0;
9106 flag_NotZ = res;
9107 flag_N = res >> 24;
9108 adr = AREG((Opcode >> 9) & 7);
9109 WRITE_LONG_F(adr, res)
9110 POST_IO
9111RET(24)
9112}
9113
9114// MOVEL
9115OPCODE(0x20E8)
9116{
9117 u32 adr, res;
9118 u32 src, dst;
9119
9120 FETCH_SWORD(adr);
9121 adr += AREG((Opcode >> 0) & 7);
9122 PRE_IO
9123 READ_LONG_F(adr, res)
9124 flag_C = 0;
9125 flag_V = 0;
9126 flag_NotZ = res;
9127 flag_N = res >> 24;
9128 adr = AREG((Opcode >> 9) & 7);
9129 AREG((Opcode >> 9) & 7) += 4;
9130 WRITE_LONG_F(adr, res)
9131 POST_IO
9132RET(24)
9133}
9134
9135// MOVEL
9136OPCODE(0x2128)
9137{
9138 u32 adr, res;
9139 u32 src, dst;
9140
9141 FETCH_SWORD(adr);
9142 adr += AREG((Opcode >> 0) & 7);
9143 PRE_IO
9144 READ_LONG_F(adr, res)
9145 flag_C = 0;
9146 flag_V = 0;
9147 flag_NotZ = res;
9148 flag_N = res >> 24;
9149 adr = AREG((Opcode >> 9) & 7) - 4;
9150 AREG((Opcode >> 9) & 7) = adr;
80db4442 9151 WRITE_LONG_DEC_F(adr, res)
70357ce5 9152 POST_IO
9153RET(24)
9154}
9155
9156// MOVEL
9157OPCODE(0x2168)
9158{
9159 u32 adr, res;
9160 u32 src, dst;
9161
9162 FETCH_SWORD(adr);
9163 adr += AREG((Opcode >> 0) & 7);
9164 PRE_IO
9165 READ_LONG_F(adr, res)
9166 flag_C = 0;
9167 flag_V = 0;
9168 flag_NotZ = res;
9169 flag_N = res >> 24;
9170 FETCH_SWORD(adr);
9171 adr += AREG((Opcode >> 9) & 7);
9172 WRITE_LONG_F(adr, res)
9173 POST_IO
9174RET(28)
9175}
9176
9177// MOVEL
9178OPCODE(0x21A8)
9179{
9180 u32 adr, res;
9181 u32 src, dst;
9182
9183 FETCH_SWORD(adr);
9184 adr += AREG((Opcode >> 0) & 7);
9185 PRE_IO
9186 READ_LONG_F(adr, res)
9187 flag_C = 0;
9188 flag_V = 0;
9189 flag_NotZ = res;
9190 flag_N = res >> 24;
9191 adr = AREG((Opcode >> 9) & 7);
9192 DECODE_EXT_WORD
9193 WRITE_LONG_F(adr, res)
9194 POST_IO
9195RET(30)
9196}
9197
9198// MOVEL
9199OPCODE(0x21E8)
9200{
9201 u32 adr, res;
9202 u32 src, dst;
9203
9204 FETCH_SWORD(adr);
9205 adr += AREG((Opcode >> 0) & 7);
9206 PRE_IO
9207 READ_LONG_F(adr, res)
9208 flag_C = 0;
9209 flag_V = 0;
9210 flag_NotZ = res;
9211 flag_N = res >> 24;
9212 FETCH_SWORD(adr);
9213 WRITE_LONG_F(adr, res)
9214 POST_IO
9215RET(28)
9216}
9217
9218// MOVEL
9219OPCODE(0x23E8)
9220{
9221 u32 adr, res;
9222 u32 src, dst;
9223
9224 FETCH_SWORD(adr);
9225 adr += AREG((Opcode >> 0) & 7);
9226 PRE_IO
9227 READ_LONG_F(adr, res)
9228 flag_C = 0;
9229 flag_V = 0;
9230 flag_NotZ = res;
9231 flag_N = res >> 24;
9232 FETCH_LONG(adr);
9233 WRITE_LONG_F(adr, res)
9234 POST_IO
9235RET(32)
9236}
9237
9238// MOVEL
9239OPCODE(0x2EE8)
9240{
9241 u32 adr, res;
9242 u32 src, dst;
9243
9244 FETCH_SWORD(adr);
9245 adr += AREG((Opcode >> 0) & 7);
9246 PRE_IO
9247 READ_LONG_F(adr, res)
9248 flag_C = 0;
9249 flag_V = 0;
9250 flag_NotZ = res;
9251 flag_N = res >> 24;
9252 adr = AREG(7);
9253 AREG(7) += 4;
9254 WRITE_LONG_F(adr, res)
9255 POST_IO
9256RET(24)
9257}
9258
9259// MOVEL
9260OPCODE(0x2F28)
9261{
9262 u32 adr, res;
9263 u32 src, dst;
9264
9265 FETCH_SWORD(adr);
9266 adr += AREG((Opcode >> 0) & 7);
9267 PRE_IO
9268 READ_LONG_F(adr, res)
9269 flag_C = 0;
9270 flag_V = 0;
9271 flag_NotZ = res;
9272 flag_N = res >> 24;
9273 adr = AREG(7) - 4;
9274 AREG(7) = adr;
9275 WRITE_LONG_F(adr, res)
9276 POST_IO
9277RET(24)
9278}
9279
9280// MOVEL
9281OPCODE(0x2030)
9282{
9283 u32 adr, res;
9284 u32 src, dst;
9285
9286 adr = AREG((Opcode >> 0) & 7);
9287 DECODE_EXT_WORD
9288 PRE_IO
9289 READ_LONG_F(adr, res)
9290 flag_C = 0;
9291 flag_V = 0;
9292 flag_NotZ = res;
9293 flag_N = res >> 24;
9294 DREGu32((Opcode >> 9) & 7) = res;
9295 POST_IO
9296RET(18)
9297}
9298
9299// MOVEL
9300OPCODE(0x20B0)
9301{
9302 u32 adr, res;
9303 u32 src, dst;
9304
9305 adr = AREG((Opcode >> 0) & 7);
9306 DECODE_EXT_WORD
9307 PRE_IO
9308 READ_LONG_F(adr, res)
9309 flag_C = 0;
9310 flag_V = 0;
9311 flag_NotZ = res;
9312 flag_N = res >> 24;
9313 adr = AREG((Opcode >> 9) & 7);
9314 WRITE_LONG_F(adr, res)
9315 POST_IO
9316RET(26)
9317}
9318
9319// MOVEL
9320OPCODE(0x20F0)
9321{
9322 u32 adr, res;
9323 u32 src, dst;
9324
9325 adr = AREG((Opcode >> 0) & 7);
9326 DECODE_EXT_WORD
9327 PRE_IO
9328 READ_LONG_F(adr, res)
9329 flag_C = 0;
9330 flag_V = 0;
9331 flag_NotZ = res;
9332 flag_N = res >> 24;
9333 adr = AREG((Opcode >> 9) & 7);
9334 AREG((Opcode >> 9) & 7) += 4;
9335 WRITE_LONG_F(adr, res)
9336 POST_IO
9337RET(26)
9338}
9339
9340// MOVEL
9341OPCODE(0x2130)
9342{
9343 u32 adr, res;
9344 u32 src, dst;
9345
9346 adr = AREG((Opcode >> 0) & 7);
9347 DECODE_EXT_WORD
9348 PRE_IO
9349 READ_LONG_F(adr, res)
9350 flag_C = 0;
9351 flag_V = 0;
9352 flag_NotZ = res;
9353 flag_N = res >> 24;
9354 adr = AREG((Opcode >> 9) & 7) - 4;
9355 AREG((Opcode >> 9) & 7) = adr;
80db4442 9356 WRITE_LONG_DEC_F(adr, res)
70357ce5 9357 POST_IO
9358RET(26)
9359}
9360
9361// MOVEL
9362OPCODE(0x2170)
9363{
9364 u32 adr, res;
9365 u32 src, dst;
9366
9367 adr = AREG((Opcode >> 0) & 7);
9368 DECODE_EXT_WORD
9369 PRE_IO
9370 READ_LONG_F(adr, res)
9371 flag_C = 0;
9372 flag_V = 0;
9373 flag_NotZ = res;
9374 flag_N = res >> 24;
9375 FETCH_SWORD(adr);
9376 adr += AREG((Opcode >> 9) & 7);
9377 WRITE_LONG_F(adr, res)
9378 POST_IO
9379RET(30)
9380}
9381
9382// MOVEL
9383OPCODE(0x21B0)
9384{
9385 u32 adr, res;
9386 u32 src, dst;
9387
9388 adr = AREG((Opcode >> 0) & 7);
9389 DECODE_EXT_WORD
9390 PRE_IO
9391 READ_LONG_F(adr, res)
9392 flag_C = 0;
9393 flag_V = 0;
9394 flag_NotZ = res;
9395 flag_N = res >> 24;
9396 adr = AREG((Opcode >> 9) & 7);
9397 DECODE_EXT_WORD
9398 WRITE_LONG_F(adr, res)
9399 POST_IO
9400RET(32)
9401}
9402
9403// MOVEL
9404OPCODE(0x21F0)
9405{
9406 u32 adr, res;
9407 u32 src, dst;
9408
9409 adr = AREG((Opcode >> 0) & 7);
9410 DECODE_EXT_WORD
9411 PRE_IO
9412 READ_LONG_F(adr, res)
9413 flag_C = 0;
9414 flag_V = 0;
9415 flag_NotZ = res;
9416 flag_N = res >> 24;
9417 FETCH_SWORD(adr);
9418 WRITE_LONG_F(adr, res)
9419 POST_IO
9420RET(30)
9421}
9422
9423// MOVEL
9424OPCODE(0x23F0)
9425{
9426 u32 adr, res;
9427 u32 src, dst;
9428
9429 adr = AREG((Opcode >> 0) & 7);
9430 DECODE_EXT_WORD
9431 PRE_IO
9432 READ_LONG_F(adr, res)
9433 flag_C = 0;
9434 flag_V = 0;
9435 flag_NotZ = res;
9436 flag_N = res >> 24;
9437 FETCH_LONG(adr);
9438 WRITE_LONG_F(adr, res)
9439 POST_IO
9440RET(34)
9441}
9442
9443// MOVEL
9444OPCODE(0x2EF0)
9445{
9446 u32 adr, res;
9447 u32 src, dst;
9448
9449 adr = AREG((Opcode >> 0) & 7);
9450 DECODE_EXT_WORD
9451 PRE_IO
9452 READ_LONG_F(adr, res)
9453 flag_C = 0;
9454 flag_V = 0;
9455 flag_NotZ = res;
9456 flag_N = res >> 24;
9457 adr = AREG(7);
9458 AREG(7) += 4;
9459 WRITE_LONG_F(adr, res)
9460 POST_IO
9461RET(26)
9462}
9463
9464// MOVEL
9465OPCODE(0x2F30)
9466{
9467 u32 adr, res;
9468 u32 src, dst;
9469
9470 adr = AREG((Opcode >> 0) & 7);
9471 DECODE_EXT_WORD
9472 PRE_IO
9473 READ_LONG_F(adr, res)
9474 flag_C = 0;
9475 flag_V = 0;
9476 flag_NotZ = res;
9477 flag_N = res >> 24;
9478 adr = AREG(7) - 4;
9479 AREG(7) = adr;
9480 WRITE_LONG_F(adr, res)
9481 POST_IO
9482RET(26)
9483}
9484
9485// MOVEL
9486OPCODE(0x2038)
9487{
9488 u32 adr, res;
9489 u32 src, dst;
9490
9491 FETCH_SWORD(adr);
9492 PRE_IO
9493 READ_LONG_F(adr, res)
9494 flag_C = 0;
9495 flag_V = 0;
9496 flag_NotZ = res;
9497 flag_N = res >> 24;
9498 DREGu32((Opcode >> 9) & 7) = res;
9499 POST_IO
9500RET(16)
9501}
9502
9503// MOVEL
9504OPCODE(0x20B8)
9505{
9506 u32 adr, res;
9507 u32 src, dst;
9508
9509 FETCH_SWORD(adr);
9510 PRE_IO
9511 READ_LONG_F(adr, res)
9512 flag_C = 0;
9513 flag_V = 0;
9514 flag_NotZ = res;
9515 flag_N = res >> 24;
9516 adr = AREG((Opcode >> 9) & 7);
9517 WRITE_LONG_F(adr, res)
9518 POST_IO
9519RET(24)
9520}
9521
9522// MOVEL
9523OPCODE(0x20F8)
9524{
9525 u32 adr, res;
9526 u32 src, dst;
9527
9528 FETCH_SWORD(adr);
9529 PRE_IO
9530 READ_LONG_F(adr, res)
9531 flag_C = 0;
9532 flag_V = 0;
9533 flag_NotZ = res;
9534 flag_N = res >> 24;
9535 adr = AREG((Opcode >> 9) & 7);
9536 AREG((Opcode >> 9) & 7) += 4;
9537 WRITE_LONG_F(adr, res)
9538 POST_IO
9539RET(24)
9540}
9541
9542// MOVEL
9543OPCODE(0x2138)
9544{
9545 u32 adr, res;
9546 u32 src, dst;
9547
9548 FETCH_SWORD(adr);
9549 PRE_IO
9550 READ_LONG_F(adr, res)
9551 flag_C = 0;
9552 flag_V = 0;
9553 flag_NotZ = res;
9554 flag_N = res >> 24;
9555 adr = AREG((Opcode >> 9) & 7) - 4;
9556 AREG((Opcode >> 9) & 7) = adr;
80db4442 9557 WRITE_LONG_DEC_F(adr, res)
70357ce5 9558 POST_IO
9559RET(24)
9560}
9561
9562// MOVEL
9563OPCODE(0x2178)
9564{
9565 u32 adr, res;
9566 u32 src, dst;
9567
9568 FETCH_SWORD(adr);
9569 PRE_IO
9570 READ_LONG_F(adr, res)
9571 flag_C = 0;
9572 flag_V = 0;
9573 flag_NotZ = res;
9574 flag_N = res >> 24;
9575 FETCH_SWORD(adr);
9576 adr += AREG((Opcode >> 9) & 7);
9577 WRITE_LONG_F(adr, res)
9578 POST_IO
9579RET(28)
9580}
9581
9582// MOVEL
9583OPCODE(0x21B8)
9584{
9585 u32 adr, res;
9586 u32 src, dst;
9587
9588 FETCH_SWORD(adr);
9589 PRE_IO
9590 READ_LONG_F(adr, res)
9591 flag_C = 0;
9592 flag_V = 0;
9593 flag_NotZ = res;
9594 flag_N = res >> 24;
9595 adr = AREG((Opcode >> 9) & 7);
9596 DECODE_EXT_WORD
9597 WRITE_LONG_F(adr, res)
9598 POST_IO
9599RET(30)
9600}
9601
9602// MOVEL
9603OPCODE(0x21F8)
9604{
9605 u32 adr, res;
9606 u32 src, dst;
9607
9608 FETCH_SWORD(adr);
9609 PRE_IO
9610 READ_LONG_F(adr, res)
9611 flag_C = 0;
9612 flag_V = 0;
9613 flag_NotZ = res;
9614 flag_N = res >> 24;
9615 FETCH_SWORD(adr);
9616 WRITE_LONG_F(adr, res)
9617 POST_IO
9618RET(28)
9619}
9620
9621// MOVEL
9622OPCODE(0x23F8)
9623{
9624 u32 adr, res;
9625 u32 src, dst;
9626
9627 FETCH_SWORD(adr);
9628 PRE_IO
9629 READ_LONG_F(adr, res)
9630 flag_C = 0;
9631 flag_V = 0;
9632 flag_NotZ = res;
9633 flag_N = res >> 24;
9634 FETCH_LONG(adr);
9635 WRITE_LONG_F(adr, res)
9636 POST_IO
9637RET(32)
9638}
9639
9640// MOVEL
9641OPCODE(0x2EF8)
9642{
9643 u32 adr, res;
9644 u32 src, dst;
9645
9646 FETCH_SWORD(adr);
9647 PRE_IO
9648 READ_LONG_F(adr, res)
9649 flag_C = 0;
9650 flag_V = 0;
9651 flag_NotZ = res;
9652 flag_N = res >> 24;
9653 adr = AREG(7);
9654 AREG(7) += 4;
9655 WRITE_LONG_F(adr, res)
9656 POST_IO
9657RET(24)
9658}
9659
9660// MOVEL
9661OPCODE(0x2F38)
9662{
9663 u32 adr, res;
9664 u32 src, dst;
9665
9666 FETCH_SWORD(adr);
9667 PRE_IO
9668 READ_LONG_F(adr, res)
9669 flag_C = 0;
9670 flag_V = 0;
9671 flag_NotZ = res;
9672 flag_N = res >> 24;
9673 adr = AREG(7) - 4;
9674 AREG(7) = adr;
9675 WRITE_LONG_F(adr, res)
9676 POST_IO
9677RET(24)
9678}
9679
9680// MOVEL
9681OPCODE(0x2039)
9682{
9683 u32 adr, res;
9684 u32 src, dst;
9685
9686 FETCH_LONG(adr);
9687 PRE_IO
9688 READ_LONG_F(adr, res)
9689 flag_C = 0;
9690 flag_V = 0;
9691 flag_NotZ = res;
9692 flag_N = res >> 24;
9693 DREGu32((Opcode >> 9) & 7) = res;
9694 POST_IO
9695RET(20)
9696}
9697
9698// MOVEL
9699OPCODE(0x20B9)
9700{
9701 u32 adr, res;
9702 u32 src, dst;
9703
9704 FETCH_LONG(adr);
9705 PRE_IO
9706 READ_LONG_F(adr, res)
9707 flag_C = 0;
9708 flag_V = 0;
9709 flag_NotZ = res;
9710 flag_N = res >> 24;
9711 adr = AREG((Opcode >> 9) & 7);
9712 WRITE_LONG_F(adr, res)
9713 POST_IO
9714RET(28)
9715}
9716
9717// MOVEL
9718OPCODE(0x20F9)
9719{
9720 u32 adr, res;
9721 u32 src, dst;
9722
9723 FETCH_LONG(adr);
9724 PRE_IO
9725 READ_LONG_F(adr, res)
9726 flag_C = 0;
9727 flag_V = 0;
9728 flag_NotZ = res;
9729 flag_N = res >> 24;
9730 adr = AREG((Opcode >> 9) & 7);
9731 AREG((Opcode >> 9) & 7) += 4;
9732 WRITE_LONG_F(adr, res)
9733 POST_IO
9734RET(28)
9735}
9736
9737// MOVEL
9738OPCODE(0x2139)
9739{
9740 u32 adr, res;
9741 u32 src, dst;
9742
9743 FETCH_LONG(adr);
9744 PRE_IO
9745 READ_LONG_F(adr, res)
9746 flag_C = 0;
9747 flag_V = 0;
9748 flag_NotZ = res;
9749 flag_N = res >> 24;
9750 adr = AREG((Opcode >> 9) & 7) - 4;
9751 AREG((Opcode >> 9) & 7) = adr;
80db4442 9752 WRITE_LONG_DEC_F(adr, res)
70357ce5 9753 POST_IO
9754RET(28)
9755}
9756
9757// MOVEL
9758OPCODE(0x2179)
9759{
9760 u32 adr, res;
9761 u32 src, dst;
9762
9763 FETCH_LONG(adr);
9764 PRE_IO
9765 READ_LONG_F(adr, res)
9766 flag_C = 0;
9767 flag_V = 0;
9768 flag_NotZ = res;
9769 flag_N = res >> 24;
9770 FETCH_SWORD(adr);
9771 adr += AREG((Opcode >> 9) & 7);
9772 WRITE_LONG_F(adr, res)
9773 POST_IO
9774RET(32)
9775}
9776
9777// MOVEL
9778OPCODE(0x21B9)
9779{
9780 u32 adr, res;
9781 u32 src, dst;
9782
9783 FETCH_LONG(adr);
9784 PRE_IO
9785 READ_LONG_F(adr, res)
9786 flag_C = 0;
9787 flag_V = 0;
9788 flag_NotZ = res;
9789 flag_N = res >> 24;
9790 adr = AREG((Opcode >> 9) & 7);
9791 DECODE_EXT_WORD
9792 WRITE_LONG_F(adr, res)
9793 POST_IO
9794RET(34)
9795}
9796
9797// MOVEL
9798OPCODE(0x21F9)
9799{
9800 u32 adr, res;
9801 u32 src, dst;
9802
9803 FETCH_LONG(adr);
9804 PRE_IO
9805 READ_LONG_F(adr, res)
9806 flag_C = 0;
9807 flag_V = 0;
9808 flag_NotZ = res;
9809 flag_N = res >> 24;
9810 FETCH_SWORD(adr);
9811 WRITE_LONG_F(adr, res)
9812 POST_IO
9813RET(32)
9814}
9815
9816// MOVEL
9817OPCODE(0x23F9)
9818{
9819 u32 adr, res;
9820 u32 src, dst;
9821
9822 FETCH_LONG(adr);
9823 PRE_IO
9824 READ_LONG_F(adr, res)
9825 flag_C = 0;
9826 flag_V = 0;
9827 flag_NotZ = res;
9828 flag_N = res >> 24;
9829 FETCH_LONG(adr);
9830 WRITE_LONG_F(adr, res)
9831 POST_IO
9832RET(36)
9833}
9834
9835// MOVEL
9836OPCODE(0x2EF9)
9837{
9838 u32 adr, res;
9839 u32 src, dst;
9840
9841 FETCH_LONG(adr);
9842 PRE_IO
9843 READ_LONG_F(adr, res)
9844 flag_C = 0;
9845 flag_V = 0;
9846 flag_NotZ = res;
9847 flag_N = res >> 24;
9848 adr = AREG(7);
9849 AREG(7) += 4;
9850 WRITE_LONG_F(adr, res)
9851 POST_IO
9852RET(28)
9853}
9854
9855// MOVEL
9856OPCODE(0x2F39)
9857{
9858 u32 adr, res;
9859 u32 src, dst;
9860
9861 FETCH_LONG(adr);
9862 PRE_IO
9863 READ_LONG_F(adr, res)
9864 flag_C = 0;
9865 flag_V = 0;
9866 flag_NotZ = res;
9867 flag_N = res >> 24;
9868 adr = AREG(7) - 4;
9869 AREG(7) = adr;
9870 WRITE_LONG_F(adr, res)
9871 POST_IO
9872RET(28)
9873}
9874
9875// MOVEL
9876OPCODE(0x203A)
9877{
9878 u32 adr, res;
9879 u32 src, dst;
9880
9881 adr = GET_SWORD + ((u32)(PC) - BasePC);
9882 PC++;
9883 PRE_IO
9884 READ_LONG_F(adr, res)
9885 flag_C = 0;
9886 flag_V = 0;
9887 flag_NotZ = res;
9888 flag_N = res >> 24;
9889 DREGu32((Opcode >> 9) & 7) = res;
9890 POST_IO
9891RET(16)
9892}
9893
9894// MOVEL
9895OPCODE(0x20BA)
9896{
9897 u32 adr, res;
9898 u32 src, dst;
9899
9900 adr = GET_SWORD + ((u32)(PC) - BasePC);
9901 PC++;
9902 PRE_IO
9903 READ_LONG_F(adr, res)
9904 flag_C = 0;
9905 flag_V = 0;
9906 flag_NotZ = res;
9907 flag_N = res >> 24;
9908 adr = AREG((Opcode >> 9) & 7);
9909 WRITE_LONG_F(adr, res)
9910 POST_IO
9911RET(24)
9912}
9913
9914// MOVEL
9915OPCODE(0x20FA)
9916{
9917 u32 adr, res;
9918 u32 src, dst;
9919
9920 adr = GET_SWORD + ((u32)(PC) - BasePC);
9921 PC++;
9922 PRE_IO
9923 READ_LONG_F(adr, res)
9924 flag_C = 0;
9925 flag_V = 0;
9926 flag_NotZ = res;
9927 flag_N = res >> 24;
9928 adr = AREG((Opcode >> 9) & 7);
9929 AREG((Opcode >> 9) & 7) += 4;
9930 WRITE_LONG_F(adr, res)
9931 POST_IO
9932RET(24)
9933}
9934
9935// MOVEL
9936OPCODE(0x213A)
9937{
9938 u32 adr, res;
9939 u32 src, dst;
9940
9941 adr = GET_SWORD + ((u32)(PC) - BasePC);
9942 PC++;
9943 PRE_IO
9944 READ_LONG_F(adr, res)
9945 flag_C = 0;
9946 flag_V = 0;
9947 flag_NotZ = res;
9948 flag_N = res >> 24;
9949 adr = AREG((Opcode >> 9) & 7) - 4;
9950 AREG((Opcode >> 9) & 7) = adr;
80db4442 9951 WRITE_LONG_DEC_F(adr, res)
70357ce5 9952 POST_IO
9953RET(24)
9954}
9955
9956// MOVEL
9957OPCODE(0x217A)
9958{
9959 u32 adr, res;
9960 u32 src, dst;
9961
9962 adr = GET_SWORD + ((u32)(PC) - BasePC);
9963 PC++;
9964 PRE_IO
9965 READ_LONG_F(adr, res)
9966 flag_C = 0;
9967 flag_V = 0;
9968 flag_NotZ = res;
9969 flag_N = res >> 24;
9970 FETCH_SWORD(adr);
9971 adr += AREG((Opcode >> 9) & 7);
9972 WRITE_LONG_F(adr, res)
9973 POST_IO
9974RET(28)
9975}
9976
9977// MOVEL
9978OPCODE(0x21BA)
9979{
9980 u32 adr, res;
9981 u32 src, dst;
9982
9983 adr = GET_SWORD + ((u32)(PC) - BasePC);
9984 PC++;
9985 PRE_IO
9986 READ_LONG_F(adr, res)
9987 flag_C = 0;
9988 flag_V = 0;
9989 flag_NotZ = res;
9990 flag_N = res >> 24;
9991 adr = AREG((Opcode >> 9) & 7);
9992 DECODE_EXT_WORD
9993 WRITE_LONG_F(adr, res)
9994 POST_IO
9995RET(30)
9996}
9997
9998// MOVEL
9999OPCODE(0x21FA)
10000{
10001 u32 adr, res;
10002 u32 src, dst;
10003
10004 adr = GET_SWORD + ((u32)(PC) - BasePC);
10005 PC++;
10006 PRE_IO
10007 READ_LONG_F(adr, res)
10008 flag_C = 0;
10009 flag_V = 0;
10010 flag_NotZ = res;
10011 flag_N = res >> 24;
10012 FETCH_SWORD(adr);
10013 WRITE_LONG_F(adr, res)
10014 POST_IO
10015RET(28)
10016}
10017
10018// MOVEL
10019OPCODE(0x23FA)
10020{
10021 u32 adr, res;
10022 u32 src, dst;
10023
10024 adr = GET_SWORD + ((u32)(PC) - BasePC);
10025 PC++;
10026 PRE_IO
10027 READ_LONG_F(adr, res)
10028 flag_C = 0;
10029 flag_V = 0;
10030 flag_NotZ = res;
10031 flag_N = res >> 24;
10032 FETCH_LONG(adr);
10033 WRITE_LONG_F(adr, res)
10034 POST_IO
10035RET(32)
10036}
10037
10038// MOVEL
10039OPCODE(0x2EFA)
10040{
10041 u32 adr, res;
10042 u32 src, dst;
10043
10044 adr = GET_SWORD + ((u32)(PC) - BasePC);
10045 PC++;
10046 PRE_IO
10047 READ_LONG_F(adr, res)
10048 flag_C = 0;
10049 flag_V = 0;
10050 flag_NotZ = res;
10051 flag_N = res >> 24;
10052 adr = AREG(7);
10053 AREG(7) += 4;
10054 WRITE_LONG_F(adr, res)
10055 POST_IO
10056RET(24)
10057}
10058
10059// MOVEL
10060OPCODE(0x2F3A)
10061{
10062 u32 adr, res;
10063 u32 src, dst;
10064
10065 adr = GET_SWORD + ((u32)(PC) - BasePC);
10066 PC++;
10067 PRE_IO
10068 READ_LONG_F(adr, res)
10069 flag_C = 0;
10070 flag_V = 0;
10071 flag_NotZ = res;
10072 flag_N = res >> 24;
10073 adr = AREG(7) - 4;
10074 AREG(7) = adr;
10075 WRITE_LONG_F(adr, res)
10076 POST_IO
10077RET(24)
10078}
10079
10080// MOVEL
10081OPCODE(0x203B)
10082{
10083 u32 adr, res;
10084 u32 src, dst;
10085
10086 adr = (u32)(PC) - BasePC;
10087 DECODE_EXT_WORD
10088 PRE_IO
10089 READ_LONG_F(adr, res)
10090 flag_C = 0;
10091 flag_V = 0;
10092 flag_NotZ = res;
10093 flag_N = res >> 24;
10094 DREGu32((Opcode >> 9) & 7) = res;
10095 POST_IO
10096RET(18)
10097}
10098
10099// MOVEL
10100OPCODE(0x20BB)
10101{
10102 u32 adr, res;
10103 u32 src, dst;
10104
10105 adr = (u32)(PC) - BasePC;
10106 DECODE_EXT_WORD
10107 PRE_IO
10108 READ_LONG_F(adr, res)
10109 flag_C = 0;
10110 flag_V = 0;
10111 flag_NotZ = res;
10112 flag_N = res >> 24;
10113 adr = AREG((Opcode >> 9) & 7);
10114 WRITE_LONG_F(adr, res)
10115 POST_IO
10116RET(26)
10117}
10118
10119// MOVEL
10120OPCODE(0x20FB)
10121{
10122 u32 adr, res;
10123 u32 src, dst;
10124
10125 adr = (u32)(PC) - BasePC;
10126 DECODE_EXT_WORD
10127 PRE_IO
10128 READ_LONG_F(adr, res)
10129 flag_C = 0;
10130 flag_V = 0;
10131 flag_NotZ = res;
10132 flag_N = res >> 24;
10133 adr = AREG((Opcode >> 9) & 7);
10134 AREG((Opcode >> 9) & 7) += 4;
10135 WRITE_LONG_F(adr, res)
10136 POST_IO
10137RET(26)
10138}
10139
10140// MOVEL
10141OPCODE(0x213B)
10142{
10143 u32 adr, res;
10144 u32 src, dst;
10145
10146 adr = (u32)(PC) - BasePC;
10147 DECODE_EXT_WORD
10148 PRE_IO
10149 READ_LONG_F(adr, res)
10150 flag_C = 0;
10151 flag_V = 0;
10152 flag_NotZ = res;
10153 flag_N = res >> 24;
10154 adr = AREG((Opcode >> 9) & 7) - 4;
10155 AREG((Opcode >> 9) & 7) = adr;
80db4442 10156 WRITE_LONG_DEC_F(adr, res)
70357ce5 10157 POST_IO
10158RET(26)
10159}
10160
10161// MOVEL
10162OPCODE(0x217B)
10163{
10164 u32 adr, res;
10165 u32 src, dst;
10166
10167 adr = (u32)(PC) - BasePC;
10168 DECODE_EXT_WORD
10169 PRE_IO
10170 READ_LONG_F(adr, res)
10171 flag_C = 0;
10172 flag_V = 0;
10173 flag_NotZ = res;
10174 flag_N = res >> 24;
10175 FETCH_SWORD(adr);
10176 adr += AREG((Opcode >> 9) & 7);
10177 WRITE_LONG_F(adr, res)
10178 POST_IO
10179RET(30)
10180}
10181
10182// MOVEL
10183OPCODE(0x21BB)
10184{
10185 u32 adr, res;
10186 u32 src, dst;
10187
10188 adr = (u32)(PC) - BasePC;
10189 DECODE_EXT_WORD
10190 PRE_IO
10191 READ_LONG_F(adr, res)
10192 flag_C = 0;
10193 flag_V = 0;
10194 flag_NotZ = res;
10195 flag_N = res >> 24;
10196 adr = AREG((Opcode >> 9) & 7);
10197 DECODE_EXT_WORD
10198 WRITE_LONG_F(adr, res)
10199 POST_IO
10200RET(32)
10201}
10202
10203// MOVEL
10204OPCODE(0x21FB)
10205{
10206 u32 adr, res;
10207 u32 src, dst;
10208
10209 adr = (u32)(PC) - BasePC;
10210 DECODE_EXT_WORD
10211 PRE_IO
10212 READ_LONG_F(adr, res)
10213 flag_C = 0;
10214 flag_V = 0;
10215 flag_NotZ = res;
10216 flag_N = res >> 24;
10217 FETCH_SWORD(adr);
10218 WRITE_LONG_F(adr, res)
10219 POST_IO
10220RET(30)
10221}
10222
10223// MOVEL
10224OPCODE(0x23FB)
10225{
10226 u32 adr, res;
10227 u32 src, dst;
10228
10229 adr = (u32)(PC) - BasePC;
10230 DECODE_EXT_WORD
10231 PRE_IO
10232 READ_LONG_F(adr, res)
10233 flag_C = 0;
10234 flag_V = 0;
10235 flag_NotZ = res;
10236 flag_N = res >> 24;
10237 FETCH_LONG(adr);
10238 WRITE_LONG_F(adr, res)
10239 POST_IO
10240RET(34)
10241}
10242
10243// MOVEL
10244OPCODE(0x2EFB)
10245{
10246 u32 adr, res;
10247 u32 src, dst;
10248
10249 adr = (u32)(PC) - BasePC;
10250 DECODE_EXT_WORD
10251 PRE_IO
10252 READ_LONG_F(adr, res)
10253 flag_C = 0;
10254 flag_V = 0;
10255 flag_NotZ = res;
10256 flag_N = res >> 24;
10257 adr = AREG(7);
10258 AREG(7) += 4;
10259 WRITE_LONG_F(adr, res)
10260 POST_IO
10261RET(26)
10262}
10263
10264// MOVEL
10265OPCODE(0x2F3B)
10266{
10267 u32 adr, res;
10268 u32 src, dst;
10269
10270 adr = (u32)(PC) - BasePC;
10271 DECODE_EXT_WORD
10272 PRE_IO
10273 READ_LONG_F(adr, res)
10274 flag_C = 0;
10275 flag_V = 0;
10276 flag_NotZ = res;
10277 flag_N = res >> 24;
10278 adr = AREG(7) - 4;
10279 AREG(7) = adr;
10280 WRITE_LONG_F(adr, res)
10281 POST_IO
10282RET(26)
10283}
10284
10285// MOVEL
10286OPCODE(0x203C)
10287{
10288 u32 adr, res;
10289 u32 src, dst;
10290
10291 FETCH_LONG(res);
10292 flag_C = 0;
10293 flag_V = 0;
10294 flag_NotZ = res;
10295 flag_N = res >> 24;
10296 DREGu32((Opcode >> 9) & 7) = res;
10297RET(12)
10298}
10299
10300// MOVEL
10301OPCODE(0x20BC)
10302{
10303 u32 adr, res;
10304 u32 src, dst;
10305
10306 FETCH_LONG(res);
10307 flag_C = 0;
10308 flag_V = 0;
10309 flag_NotZ = res;
10310 flag_N = res >> 24;
10311 adr = AREG((Opcode >> 9) & 7);
10312 PRE_IO
10313 WRITE_LONG_F(adr, res)
10314 POST_IO
10315RET(20)
10316}
10317
10318// MOVEL
10319OPCODE(0x20FC)
10320{
10321 u32 adr, res;
10322 u32 src, dst;
10323
10324 FETCH_LONG(res);
10325 flag_C = 0;
10326 flag_V = 0;
10327 flag_NotZ = res;
10328 flag_N = res >> 24;
10329 adr = AREG((Opcode >> 9) & 7);
10330 AREG((Opcode >> 9) & 7) += 4;
10331 PRE_IO
10332 WRITE_LONG_F(adr, res)
10333 POST_IO
10334RET(20)
10335}
10336
10337// MOVEL
10338OPCODE(0x213C)
10339{
10340 u32 adr, res;
10341 u32 src, dst;
10342
10343 FETCH_LONG(res);
10344 flag_C = 0;
10345 flag_V = 0;
10346 flag_NotZ = res;
10347 flag_N = res >> 24;
10348 adr = AREG((Opcode >> 9) & 7) - 4;
10349 AREG((Opcode >> 9) & 7) = adr;
10350 PRE_IO
80db4442 10351 WRITE_LONG_DEC_F(adr, res)
70357ce5 10352 POST_IO
10353RET(20)
10354}
10355
10356// MOVEL
10357OPCODE(0x217C)
10358{
10359 u32 adr, res;
10360 u32 src, dst;
10361
10362 FETCH_LONG(res);
10363 flag_C = 0;
10364 flag_V = 0;
10365 flag_NotZ = res;
10366 flag_N = res >> 24;
10367 FETCH_SWORD(adr);
10368 adr += AREG((Opcode >> 9) & 7);
10369 PRE_IO
10370 WRITE_LONG_F(adr, res)
10371 POST_IO
10372RET(24)
10373}
10374
10375// MOVEL
10376OPCODE(0x21BC)
10377{
10378 u32 adr, res;
10379 u32 src, dst;
10380
10381 FETCH_LONG(res);
10382 flag_C = 0;
10383 flag_V = 0;
10384 flag_NotZ = res;
10385 flag_N = res >> 24;
10386 adr = AREG((Opcode >> 9) & 7);
10387 DECODE_EXT_WORD
10388 PRE_IO
10389 WRITE_LONG_F(adr, res)
10390 POST_IO
10391RET(26)
10392}
10393
10394// MOVEL
10395OPCODE(0x21FC)
10396{
10397 u32 adr, res;
10398 u32 src, dst;
10399
10400 FETCH_LONG(res);
10401 flag_C = 0;
10402 flag_V = 0;
10403 flag_NotZ = res;
10404 flag_N = res >> 24;
10405 FETCH_SWORD(adr);
10406 PRE_IO
10407 WRITE_LONG_F(adr, res)
10408 POST_IO
10409RET(24)
10410}
10411
10412// MOVEL
10413OPCODE(0x23FC)
10414{
10415 u32 adr, res;
10416 u32 src, dst;
10417
10418 FETCH_LONG(res);
10419 flag_C = 0;
10420 flag_V = 0;
10421 flag_NotZ = res;
10422 flag_N = res >> 24;
10423 FETCH_LONG(adr);
10424 PRE_IO
10425 WRITE_LONG_F(adr, res)
10426 POST_IO
10427RET(28)
10428}
10429
10430// MOVEL
10431OPCODE(0x2EFC)
10432{
10433 u32 adr, res;
10434 u32 src, dst;
10435
10436 FETCH_LONG(res);
10437 flag_C = 0;
10438 flag_V = 0;
10439 flag_NotZ = res;
10440 flag_N = res >> 24;
10441 adr = AREG(7);
10442 AREG(7) += 4;
10443 PRE_IO
10444 WRITE_LONG_F(adr, res)
10445 POST_IO
10446RET(20)
10447}
10448
10449// MOVEL
10450OPCODE(0x2F3C)
10451{
10452 u32 adr, res;
10453 u32 src, dst;
10454
10455 FETCH_LONG(res);
10456 flag_C = 0;
10457 flag_V = 0;
10458 flag_NotZ = res;
10459 flag_N = res >> 24;
10460 adr = AREG(7) - 4;
10461 AREG(7) = adr;
10462 PRE_IO
10463 WRITE_LONG_F(adr, res)
10464 POST_IO
10465RET(20)
10466}
10467
10468// MOVEL
10469OPCODE(0x201F)
10470{
10471 u32 adr, res;
10472 u32 src, dst;
10473
10474 adr = AREG(7);
10475 AREG(7) += 4;
10476 PRE_IO
10477 READ_LONG_F(adr, res)
10478 flag_C = 0;
10479 flag_V = 0;
10480 flag_NotZ = res;
10481 flag_N = res >> 24;
10482 DREGu32((Opcode >> 9) & 7) = res;
10483 POST_IO
10484RET(12)
10485}
10486
10487// MOVEL
10488OPCODE(0x209F)
10489{
10490 u32 adr, res;
10491 u32 src, dst;
10492
10493 adr = AREG(7);
10494 AREG(7) += 4;
10495 PRE_IO
10496 READ_LONG_F(adr, res)
10497 flag_C = 0;
10498 flag_V = 0;
10499 flag_NotZ = res;
10500 flag_N = res >> 24;
10501 adr = AREG((Opcode >> 9) & 7);
10502 WRITE_LONG_F(adr, res)
10503 POST_IO
10504RET(20)
10505}
10506
10507// MOVEL
10508OPCODE(0x20DF)
10509{
10510 u32 adr, res;
10511 u32 src, dst;
10512
10513 adr = AREG(7);
10514 AREG(7) += 4;
10515 PRE_IO
10516 READ_LONG_F(adr, res)
10517 flag_C = 0;
10518 flag_V = 0;
10519 flag_NotZ = res;
10520 flag_N = res >> 24;
10521 adr = AREG((Opcode >> 9) & 7);
10522 AREG((Opcode >> 9) & 7) += 4;
10523 WRITE_LONG_F(adr, res)
10524 POST_IO
10525RET(20)
10526}
10527
10528// MOVEL
10529OPCODE(0x211F)
10530{
10531 u32 adr, res;
10532 u32 src, dst;
10533
10534 adr = AREG(7);
10535 AREG(7) += 4;
10536 PRE_IO
10537 READ_LONG_F(adr, res)
10538 flag_C = 0;
10539 flag_V = 0;
10540 flag_NotZ = res;
10541 flag_N = res >> 24;
10542 adr = AREG((Opcode >> 9) & 7) - 4;
10543 AREG((Opcode >> 9) & 7) = adr;
80db4442 10544 WRITE_LONG_DEC_F(adr, res)
70357ce5 10545 POST_IO
10546RET(20)
10547}
10548
10549// MOVEL
10550OPCODE(0x215F)
10551{
10552 u32 adr, res;
10553 u32 src, dst;
10554
10555 adr = AREG(7);
10556 AREG(7) += 4;
10557 PRE_IO
10558 READ_LONG_F(adr, res)
10559 flag_C = 0;
10560 flag_V = 0;
10561 flag_NotZ = res;
10562 flag_N = res >> 24;
10563 FETCH_SWORD(adr);
10564 adr += AREG((Opcode >> 9) & 7);
10565 WRITE_LONG_F(adr, res)
10566 POST_IO
10567RET(24)
10568}
10569
10570// MOVEL
10571OPCODE(0x219F)
10572{
10573 u32 adr, res;
10574 u32 src, dst;
10575
10576 adr = AREG(7);
10577 AREG(7) += 4;
10578 PRE_IO
10579 READ_LONG_F(adr, res)
10580 flag_C = 0;
10581 flag_V = 0;
10582 flag_NotZ = res;
10583 flag_N = res >> 24;
10584 adr = AREG((Opcode >> 9) & 7);
10585 DECODE_EXT_WORD
10586 WRITE_LONG_F(adr, res)
10587 POST_IO
10588RET(26)
10589}
10590
10591// MOVEL
10592OPCODE(0x21DF)
10593{
10594 u32 adr, res;
10595 u32 src, dst;
10596
10597 adr = AREG(7);
10598 AREG(7) += 4;
10599 PRE_IO
10600 READ_LONG_F(adr, res)
10601 flag_C = 0;
10602 flag_V = 0;
10603 flag_NotZ = res;
10604 flag_N = res >> 24;
10605 FETCH_SWORD(adr);
10606 WRITE_LONG_F(adr, res)
10607 POST_IO
10608RET(24)
10609}
10610
10611// MOVEL
10612OPCODE(0x23DF)
10613{
10614 u32 adr, res;
10615 u32 src, dst;
10616
10617 adr = AREG(7);
10618 AREG(7) += 4;
10619 PRE_IO
10620 READ_LONG_F(adr, res)
10621 flag_C = 0;
10622 flag_V = 0;
10623 flag_NotZ = res;
10624 flag_N = res >> 24;
10625 FETCH_LONG(adr);
10626 WRITE_LONG_F(adr, res)
10627 POST_IO
10628RET(28)
10629}
10630
10631// MOVEL
10632OPCODE(0x2EDF)
10633{
10634 u32 adr, res;
10635 u32 src, dst;
10636
10637 adr = AREG(7);
10638 AREG(7) += 4;
10639 PRE_IO
10640 READ_LONG_F(adr, res)
10641 flag_C = 0;
10642 flag_V = 0;
10643 flag_NotZ = res;
10644 flag_N = res >> 24;
10645 adr = AREG(7);
10646 AREG(7) += 4;
10647 WRITE_LONG_F(adr, res)
10648 POST_IO
10649RET(20)
10650}
10651
10652// MOVEL
10653OPCODE(0x2F1F)
10654{
10655 u32 adr, res;
10656 u32 src, dst;
10657
10658 adr = AREG(7);
10659 AREG(7) += 4;
10660 PRE_IO
10661 READ_LONG_F(adr, res)
10662 flag_C = 0;
10663 flag_V = 0;
10664 flag_NotZ = res;
10665 flag_N = res >> 24;
10666 adr = AREG(7) - 4;
10667 AREG(7) = adr;
10668 WRITE_LONG_F(adr, res)
10669 POST_IO
10670RET(20)
10671}
10672
10673// MOVEL
10674OPCODE(0x2027)
10675{
10676 u32 adr, res;
10677 u32 src, dst;
10678
10679 adr = AREG(7) - 4;
10680 AREG(7) = adr;
10681 PRE_IO
10682 READ_LONG_F(adr, res)
10683 flag_C = 0;
10684 flag_V = 0;
10685 flag_NotZ = res;
10686 flag_N = res >> 24;
10687 DREGu32((Opcode >> 9) & 7) = res;
10688 POST_IO
10689RET(14)
10690}
10691
10692// MOVEL
10693OPCODE(0x20A7)
10694{
10695 u32 adr, res;
10696 u32 src, dst;
10697
10698 adr = AREG(7) - 4;
10699 AREG(7) = adr;
10700 PRE_IO
10701 READ_LONG_F(adr, res)
10702 flag_C = 0;
10703 flag_V = 0;
10704 flag_NotZ = res;
10705 flag_N = res >> 24;
10706 adr = AREG((Opcode >> 9) & 7);
10707 WRITE_LONG_F(adr, res)
10708 POST_IO
10709RET(22)
10710}
10711
10712// MOVEL
10713OPCODE(0x20E7)
10714{
10715 u32 adr, res;
10716 u32 src, dst;
10717
10718 adr = AREG(7) - 4;
10719 AREG(7) = adr;
10720 PRE_IO
10721 READ_LONG_F(adr, res)
10722 flag_C = 0;
10723 flag_V = 0;
10724 flag_NotZ = res;
10725 flag_N = res >> 24;
10726 adr = AREG((Opcode >> 9) & 7);
10727 AREG((Opcode >> 9) & 7) += 4;
10728 WRITE_LONG_F(adr, res)
10729 POST_IO
10730RET(22)
10731}
10732
10733// MOVEL
10734OPCODE(0x2127)
10735{
10736 u32 adr, res;
10737 u32 src, dst;
10738
10739 adr = AREG(7) - 4;
10740 AREG(7) = adr;
10741 PRE_IO
10742 READ_LONG_F(adr, res)
10743 flag_C = 0;
10744 flag_V = 0;
10745 flag_NotZ = res;
10746 flag_N = res >> 24;
10747 adr = AREG((Opcode >> 9) & 7) - 4;
10748 AREG((Opcode >> 9) & 7) = adr;
80db4442 10749 WRITE_LONG_DEC_F(adr, res)
70357ce5 10750 POST_IO
10751RET(22)
10752}
10753
10754// MOVEL
10755OPCODE(0x2167)
10756{
10757 u32 adr, res;
10758 u32 src, dst;
10759
10760 adr = AREG(7) - 4;
10761 AREG(7) = adr;
10762 PRE_IO
10763 READ_LONG_F(adr, res)
10764 flag_C = 0;
10765 flag_V = 0;
10766 flag_NotZ = res;
10767 flag_N = res >> 24;
10768 FETCH_SWORD(adr);
10769 adr += AREG((Opcode >> 9) & 7);
10770 WRITE_LONG_F(adr, res)
10771 POST_IO
10772RET(26)
10773}
10774
10775// MOVEL
10776OPCODE(0x21A7)
10777{
10778 u32 adr, res;
10779 u32 src, dst;
10780
10781 adr = AREG(7) - 4;
10782 AREG(7) = adr;
10783 PRE_IO
10784 READ_LONG_F(adr, res)
10785 flag_C = 0;
10786 flag_V = 0;
10787 flag_NotZ = res;
10788 flag_N = res >> 24;
10789 adr = AREG((Opcode >> 9) & 7);
10790 DECODE_EXT_WORD
10791 WRITE_LONG_F(adr, res)
10792 POST_IO
10793RET(28)
10794}
10795
10796// MOVEL
10797OPCODE(0x21E7)
10798{
10799 u32 adr, res;
10800 u32 src, dst;
10801
10802 adr = AREG(7) - 4;
10803 AREG(7) = adr;
10804 PRE_IO
10805 READ_LONG_F(adr, res)
10806 flag_C = 0;
10807 flag_V = 0;
10808 flag_NotZ = res;
10809 flag_N = res >> 24;
10810 FETCH_SWORD(adr);
10811 WRITE_LONG_F(adr, res)
10812 POST_IO
10813RET(26)
10814}
10815
10816// MOVEL
10817OPCODE(0x23E7)
10818{
10819 u32 adr, res;
10820 u32 src, dst;
10821
10822 adr = AREG(7) - 4;
10823 AREG(7) = adr;
10824 PRE_IO
10825 READ_LONG_F(adr, res)
10826 flag_C = 0;
10827 flag_V = 0;
10828 flag_NotZ = res;
10829 flag_N = res >> 24;
10830 FETCH_LONG(adr);
10831 WRITE_LONG_F(adr, res)
10832 POST_IO
10833RET(30)
10834}
10835
10836// MOVEL
10837OPCODE(0x2EE7)
10838{
10839 u32 adr, res;
10840 u32 src, dst;
10841
10842 adr = AREG(7) - 4;
10843 AREG(7) = adr;
10844 PRE_IO
10845 READ_LONG_F(adr, res)
10846 flag_C = 0;
10847 flag_V = 0;
10848 flag_NotZ = res;
10849 flag_N = res >> 24;
10850 adr = AREG(7);
10851 AREG(7) += 4;
10852 WRITE_LONG_F(adr, res)
10853 POST_IO
10854RET(22)
10855}
10856
10857// MOVEL
10858OPCODE(0x2F27)
10859{
10860 u32 adr, res;
10861 u32 src, dst;
10862
10863 adr = AREG(7) - 4;
10864 AREG(7) = adr;
10865 PRE_IO
10866 READ_LONG_F(adr, res)
10867 flag_C = 0;
10868 flag_V = 0;
10869 flag_NotZ = res;
10870 flag_N = res >> 24;
10871 adr = AREG(7) - 4;
10872 AREG(7) = adr;
10873 WRITE_LONG_F(adr, res)
10874 POST_IO
10875RET(22)
10876}
10877
10878// MOVEAL
10879OPCODE(0x2040)
10880{
10881 u32 adr, res;
10882 u32 src, dst;
10883
10884 res = (s32)DREGs32((Opcode >> 0) & 7);
10885 AREG((Opcode >> 9) & 7) = res;
10886RET(4)
10887}
10888
10889// MOVEAL
10890OPCODE(0x2048)
10891{
10892 u32 adr, res;
10893 u32 src, dst;
10894
10895 res = (s32)AREGs32((Opcode >> 0) & 7);
10896 AREG((Opcode >> 9) & 7) = res;
10897RET(4)
10898}
10899
10900// MOVEAL
10901OPCODE(0x2050)
10902{
10903 u32 adr, res;
10904 u32 src, dst;
10905
10906 adr = AREG((Opcode >> 0) & 7);
10907 PRE_IO
10908 READSX_LONG_F(adr, res)
10909 AREG((Opcode >> 9) & 7) = res;
10910 POST_IO
10911RET(12)
10912}
10913
10914// MOVEAL
10915OPCODE(0x2058)
10916{
10917 u32 adr, res;
10918 u32 src, dst;
10919
10920 adr = AREG((Opcode >> 0) & 7);
10921 AREG((Opcode >> 0) & 7) += 4;
10922 PRE_IO
10923 READSX_LONG_F(adr, res)
10924 AREG((Opcode >> 9) & 7) = res;
10925 POST_IO
10926RET(12)
10927}
10928
10929// MOVEAL
10930OPCODE(0x2060)
10931{
10932 u32 adr, res;
10933 u32 src, dst;
10934
10935 adr = AREG((Opcode >> 0) & 7) - 4;
10936 AREG((Opcode >> 0) & 7) = adr;
10937 PRE_IO
10938 READSX_LONG_F(adr, res)
10939 AREG((Opcode >> 9) & 7) = res;
10940 POST_IO
10941RET(14)
10942}
10943
10944// MOVEAL
10945OPCODE(0x2068)
10946{
10947 u32 adr, res;
10948 u32 src, dst;
10949
10950 FETCH_SWORD(adr);
10951 adr += AREG((Opcode >> 0) & 7);
10952 PRE_IO
10953 READSX_LONG_F(adr, res)
10954 AREG((Opcode >> 9) & 7) = res;
10955 POST_IO
10956RET(16)
10957}
10958
10959// MOVEAL
10960OPCODE(0x2070)
10961{
10962 u32 adr, res;
10963 u32 src, dst;
10964
10965 adr = AREG((Opcode >> 0) & 7);
10966 DECODE_EXT_WORD
10967 PRE_IO
10968 READSX_LONG_F(adr, res)
10969 AREG((Opcode >> 9) & 7) = res;
10970 POST_IO
10971RET(18)
10972}
10973
10974// MOVEAL
10975OPCODE(0x2078)
10976{
10977 u32 adr, res;
10978 u32 src, dst;
10979
10980 FETCH_SWORD(adr);
10981 PRE_IO
10982 READSX_LONG_F(adr, res)
10983 AREG((Opcode >> 9) & 7) = res;
10984 POST_IO
10985RET(16)
10986}
10987
10988// MOVEAL
10989OPCODE(0x2079)
10990{
10991 u32 adr, res;
10992 u32 src, dst;
10993
10994 FETCH_LONG(adr);
10995 PRE_IO
10996 READSX_LONG_F(adr, res)
10997 AREG((Opcode >> 9) & 7) = res;
10998 POST_IO
10999RET(20)
11000}
11001
11002// MOVEAL
11003OPCODE(0x207A)
11004{
11005 u32 adr, res;
11006 u32 src, dst;
11007
11008 adr = GET_SWORD + ((u32)(PC) - BasePC);
11009 PC++;
11010 PRE_IO
11011 READSX_LONG_F(adr, res)
11012 AREG((Opcode >> 9) & 7) = res;
11013 POST_IO
11014RET(16)
11015}
11016
11017// MOVEAL
11018OPCODE(0x207B)
11019{
11020 u32 adr, res;
11021 u32 src, dst;
11022
11023 adr = (u32)(PC) - BasePC;
11024 DECODE_EXT_WORD
11025 PRE_IO
11026 READSX_LONG_F(adr, res)
11027 AREG((Opcode >> 9) & 7) = res;
11028 POST_IO
11029RET(18)
11030}
11031
11032// MOVEAL
11033OPCODE(0x207C)
11034{
11035 u32 adr, res;
11036 u32 src, dst;
11037
11038 FETCH_LONG(res);
11039 AREG((Opcode >> 9) & 7) = res;
11040RET(12)
11041}
11042
11043// MOVEAL
11044OPCODE(0x205F)
11045{
11046 u32 adr, res;
11047 u32 src, dst;
11048
11049 adr = AREG(7);
11050 AREG(7) += 4;
11051 PRE_IO
11052 READSX_LONG_F(adr, res)
11053 AREG((Opcode >> 9) & 7) = res;
11054 POST_IO
11055RET(12)
11056}
11057
11058// MOVEAL
11059OPCODE(0x2067)
11060{
11061 u32 adr, res;
11062 u32 src, dst;
11063
11064 adr = AREG(7) - 4;
11065 AREG(7) = adr;
11066 PRE_IO
11067 READSX_LONG_F(adr, res)
11068 AREG((Opcode >> 9) & 7) = res;
11069 POST_IO
11070RET(14)
11071}
11072
11073// MOVEW
11074OPCODE(0x3000)
11075{
11076 u32 adr, res;
11077 u32 src, dst;
11078
11079 res = DREGu16((Opcode >> 0) & 7);
11080 flag_C = 0;
11081 flag_V = 0;
11082 flag_NotZ = res;
11083 flag_N = res >> 8;
11084 DREGu16((Opcode >> 9) & 7) = res;
11085RET(4)
11086}
11087
11088// MOVEW
11089OPCODE(0x3080)
11090{
11091 u32 adr, res;
11092 u32 src, dst;
11093
11094 res = DREGu16((Opcode >> 0) & 7);
11095 flag_C = 0;
11096 flag_V = 0;
11097 flag_NotZ = res;
11098 flag_N = res >> 8;
11099 adr = AREG((Opcode >> 9) & 7);
11100 PRE_IO
11101 WRITE_WORD_F(adr, res)
11102 POST_IO
11103RET(8)
11104}
11105
11106// MOVEW
11107OPCODE(0x30C0)
11108{
11109 u32 adr, res;
11110 u32 src, dst;
11111
11112 res = DREGu16((Opcode >> 0) & 7);
11113 flag_C = 0;
11114 flag_V = 0;
11115 flag_NotZ = res;
11116 flag_N = res >> 8;
11117 adr = AREG((Opcode >> 9) & 7);
11118 AREG((Opcode >> 9) & 7) += 2;
11119 PRE_IO
11120 WRITE_WORD_F(adr, res)
11121 POST_IO
11122RET(8)
11123}
11124
11125// MOVEW
11126OPCODE(0x3100)
11127{
11128 u32 adr, res;
11129 u32 src, dst;
11130
11131 res = DREGu16((Opcode >> 0) & 7);
11132 flag_C = 0;
11133 flag_V = 0;
11134 flag_NotZ = res;
11135 flag_N = res >> 8;
11136 adr = AREG((Opcode >> 9) & 7) - 2;
11137 AREG((Opcode >> 9) & 7) = adr;
11138 PRE_IO
11139 WRITE_WORD_F(adr, res)
11140 POST_IO
11141RET(8)
11142}
11143
11144// MOVEW
11145OPCODE(0x3140)
11146{
11147 u32 adr, res;
11148 u32 src, dst;
11149
11150 res = DREGu16((Opcode >> 0) & 7);
11151 flag_C = 0;
11152 flag_V = 0;
11153 flag_NotZ = res;
11154 flag_N = res >> 8;
11155 FETCH_SWORD(adr);
11156 adr += AREG((Opcode >> 9) & 7);
11157 PRE_IO
11158 WRITE_WORD_F(adr, res)
11159 POST_IO
11160RET(12)
11161}
11162
11163// MOVEW
11164OPCODE(0x3180)
11165{
11166 u32 adr, res;
11167 u32 src, dst;
11168
11169 res = DREGu16((Opcode >> 0) & 7);
11170 flag_C = 0;
11171 flag_V = 0;
11172 flag_NotZ = res;
11173 flag_N = res >> 8;
11174 adr = AREG((Opcode >> 9) & 7);
11175 DECODE_EXT_WORD
11176 PRE_IO
11177 WRITE_WORD_F(adr, res)
11178 POST_IO
11179RET(14)
11180}
11181
11182// MOVEW
11183OPCODE(0x31C0)
11184{
11185 u32 adr, res;
11186 u32 src, dst;
11187
11188 res = DREGu16((Opcode >> 0) & 7);
11189 flag_C = 0;
11190 flag_V = 0;
11191 flag_NotZ = res;
11192 flag_N = res >> 8;
11193 FETCH_SWORD(adr);
11194 PRE_IO
11195 WRITE_WORD_F(adr, res)
11196 POST_IO
11197RET(12)
11198}
11199
11200// MOVEW
11201OPCODE(0x33C0)
11202{
11203 u32 adr, res;
11204 u32 src, dst;
11205
11206 res = DREGu16((Opcode >> 0) & 7);
11207 flag_C = 0;
11208 flag_V = 0;
11209 flag_NotZ = res;
11210 flag_N = res >> 8;
11211 FETCH_LONG(adr);
11212 PRE_IO
11213 WRITE_WORD_F(adr, res)
11214 POST_IO
11215RET(16)
11216}
11217
11218// MOVEW
11219OPCODE(0x3EC0)
11220{
11221 u32 adr, res;
11222 u32 src, dst;
11223
11224 res = DREGu16((Opcode >> 0) & 7);
11225 flag_C = 0;
11226 flag_V = 0;
11227 flag_NotZ = res;
11228 flag_N = res >> 8;
11229 adr = AREG(7);
11230 AREG(7) += 2;
11231 PRE_IO
11232 WRITE_WORD_F(adr, res)
11233 POST_IO
11234RET(8)
11235}
11236
11237// MOVEW
11238OPCODE(0x3F00)
11239{
11240 u32 adr, res;
11241 u32 src, dst;
11242
11243 res = DREGu16((Opcode >> 0) & 7);
11244 flag_C = 0;
11245 flag_V = 0;
11246 flag_NotZ = res;
11247 flag_N = res >> 8;
11248 adr = AREG(7) - 2;
11249 AREG(7) = adr;
11250 PRE_IO
11251 WRITE_WORD_F(adr, res)
11252 POST_IO
11253RET(8)
11254}
11255
11256// MOVEW
11257OPCODE(0x3008)
11258{
11259 u32 adr, res;
11260 u32 src, dst;
11261
11262 res = AREGu16((Opcode >> 0) & 7);
11263 flag_C = 0;
11264 flag_V = 0;
11265 flag_NotZ = res;
11266 flag_N = res >> 8;
11267 DREGu16((Opcode >> 9) & 7) = res;
11268RET(4)
11269}
11270
11271// MOVEW
11272OPCODE(0x3088)
11273{
11274 u32 adr, res;
11275 u32 src, dst;
11276
11277 res = AREGu16((Opcode >> 0) & 7);
11278 flag_C = 0;
11279 flag_V = 0;
11280 flag_NotZ = res;
11281 flag_N = res >> 8;
11282 adr = AREG((Opcode >> 9) & 7);
11283 PRE_IO
11284 WRITE_WORD_F(adr, res)
11285 POST_IO
11286RET(8)
11287}
11288
11289// MOVEW
11290OPCODE(0x30C8)
11291{
11292 u32 adr, res;
11293 u32 src, dst;
11294
11295 res = AREGu16((Opcode >> 0) & 7);
11296 flag_C = 0;
11297 flag_V = 0;
11298 flag_NotZ = res;
11299 flag_N = res >> 8;
11300 adr = AREG((Opcode >> 9) & 7);
11301 AREG((Opcode >> 9) & 7) += 2;
11302 PRE_IO
11303 WRITE_WORD_F(adr, res)
11304 POST_IO
11305RET(8)
11306}
11307
11308// MOVEW
11309OPCODE(0x3108)
11310{
11311 u32 adr, res;
11312 u32 src, dst;
11313
11314 res = AREGu16((Opcode >> 0) & 7);
11315 flag_C = 0;
11316 flag_V = 0;
11317 flag_NotZ = res;
11318 flag_N = res >> 8;
11319 adr = AREG((Opcode >> 9) & 7) - 2;
11320 AREG((Opcode >> 9) & 7) = adr;
11321 PRE_IO
11322 WRITE_WORD_F(adr, res)
11323 POST_IO
11324RET(8)
11325}
11326
11327// MOVEW
11328OPCODE(0x3148)
11329{
11330 u32 adr, res;
11331 u32 src, dst;
11332
11333 res = AREGu16((Opcode >> 0) & 7);
11334 flag_C = 0;
11335 flag_V = 0;
11336 flag_NotZ = res;
11337 flag_N = res >> 8;
11338 FETCH_SWORD(adr);
11339 adr += AREG((Opcode >> 9) & 7);
11340 PRE_IO
11341 WRITE_WORD_F(adr, res)
11342 POST_IO
11343RET(12)
11344}
11345
11346// MOVEW
11347OPCODE(0x3188)
11348{
11349 u32 adr, res;
11350 u32 src, dst;
11351
11352 res = AREGu16((Opcode >> 0) & 7);
11353 flag_C = 0;
11354 flag_V = 0;
11355 flag_NotZ = res;
11356 flag_N = res >> 8;
11357 adr = AREG((Opcode >> 9) & 7);
11358 DECODE_EXT_WORD
11359 PRE_IO
11360 WRITE_WORD_F(adr, res)
11361 POST_IO
11362RET(14)
11363}
11364
11365// MOVEW
11366OPCODE(0x31C8)
11367{
11368 u32 adr, res;
11369 u32 src, dst;
11370
11371 res = AREGu16((Opcode >> 0) & 7);
11372 flag_C = 0;
11373 flag_V = 0;
11374 flag_NotZ = res;
11375 flag_N = res >> 8;
11376 FETCH_SWORD(adr);
11377 PRE_IO
11378 WRITE_WORD_F(adr, res)
11379 POST_IO
11380RET(12)
11381}
11382
11383// MOVEW
11384OPCODE(0x33C8)
11385{
11386 u32 adr, res;
11387 u32 src, dst;
11388
11389 res = AREGu16((Opcode >> 0) & 7);
11390 flag_C = 0;
11391 flag_V = 0;
11392 flag_NotZ = res;
11393 flag_N = res >> 8;
11394 FETCH_LONG(adr);
11395 PRE_IO
11396 WRITE_WORD_F(adr, res)
11397 POST_IO
11398RET(16)
11399}
11400
11401// MOVEW
11402OPCODE(0x3EC8)
11403{
11404 u32 adr, res;
11405 u32 src, dst;
11406
11407 res = AREGu16((Opcode >> 0) & 7);
11408 flag_C = 0;
11409 flag_V = 0;
11410 flag_NotZ = res;
11411 flag_N = res >> 8;
11412 adr = AREG(7);
11413 AREG(7) += 2;
11414 PRE_IO
11415 WRITE_WORD_F(adr, res)
11416 POST_IO
11417RET(8)
11418}
11419
11420// MOVEW
11421OPCODE(0x3F08)
11422{
11423 u32 adr, res;
11424 u32 src, dst;
11425
11426 res = AREGu16((Opcode >> 0) & 7);
11427 flag_C = 0;
11428 flag_V = 0;
11429 flag_NotZ = res;
11430 flag_N = res >> 8;
11431 adr = AREG(7) - 2;
11432 AREG(7) = adr;
11433 PRE_IO
11434 WRITE_WORD_F(adr, res)
11435 POST_IO
11436RET(8)
11437}
11438
11439// MOVEW
11440OPCODE(0x3010)
11441{
11442 u32 adr, res;
11443 u32 src, dst;
11444
11445 adr = AREG((Opcode >> 0) & 7);
11446 PRE_IO
11447 READ_WORD_F(adr, res)
11448 flag_C = 0;
11449 flag_V = 0;
11450 flag_NotZ = res;
11451 flag_N = res >> 8;
11452 DREGu16((Opcode >> 9) & 7) = res;
11453 POST_IO
11454RET(8)
11455}
11456
11457// MOVEW
11458OPCODE(0x3090)
11459{
11460 u32 adr, res;
11461 u32 src, dst;
11462
11463 adr = AREG((Opcode >> 0) & 7);
11464 PRE_IO
11465 READ_WORD_F(adr, res)
11466 flag_C = 0;
11467 flag_V = 0;
11468 flag_NotZ = res;
11469 flag_N = res >> 8;
11470 adr = AREG((Opcode >> 9) & 7);
11471 WRITE_WORD_F(adr, res)
11472 POST_IO
11473RET(12)
11474}
11475
11476// MOVEW
11477OPCODE(0x30D0)
11478{
11479 u32 adr, res;
11480 u32 src, dst;
11481
11482 adr = AREG((Opcode >> 0) & 7);
11483 PRE_IO
11484 READ_WORD_F(adr, res)
11485 flag_C = 0;
11486 flag_V = 0;
11487 flag_NotZ = res;
11488 flag_N = res >> 8;
11489 adr = AREG((Opcode >> 9) & 7);
11490 AREG((Opcode >> 9) & 7) += 2;
11491 WRITE_WORD_F(adr, res)
11492 POST_IO
11493RET(12)
11494}
11495
11496// MOVEW
11497OPCODE(0x3110)
11498{
11499 u32 adr, res;
11500 u32 src, dst;
11501
11502 adr = AREG((Opcode >> 0) & 7);
11503 PRE_IO
11504 READ_WORD_F(adr, res)
11505 flag_C = 0;
11506 flag_V = 0;
11507 flag_NotZ = res;
11508 flag_N = res >> 8;
11509 adr = AREG((Opcode >> 9) & 7) - 2;
11510 AREG((Opcode >> 9) & 7) = adr;
11511 WRITE_WORD_F(adr, res)
11512 POST_IO
11513RET(12)
11514}
11515
11516// MOVEW
11517OPCODE(0x3150)
11518{
11519 u32 adr, res;
11520 u32 src, dst;
11521
11522 adr = AREG((Opcode >> 0) & 7);
11523 PRE_IO
11524 READ_WORD_F(adr, res)
11525 flag_C = 0;
11526 flag_V = 0;
11527 flag_NotZ = res;
11528 flag_N = res >> 8;
11529 FETCH_SWORD(adr);
11530 adr += AREG((Opcode >> 9) & 7);
11531 WRITE_WORD_F(adr, res)
11532 POST_IO
11533RET(16)
11534}
11535
11536// MOVEW
11537OPCODE(0x3190)
11538{
11539 u32 adr, res;
11540 u32 src, dst;
11541
11542 adr = AREG((Opcode >> 0) & 7);
11543 PRE_IO
11544 READ_WORD_F(adr, res)
11545 flag_C = 0;
11546 flag_V = 0;
11547 flag_NotZ = res;
11548 flag_N = res >> 8;
11549 adr = AREG((Opcode >> 9) & 7);
11550 DECODE_EXT_WORD
11551 WRITE_WORD_F(adr, res)
11552 POST_IO
11553RET(18)
11554}
11555
11556// MOVEW
11557OPCODE(0x31D0)
11558{
11559 u32 adr, res;
11560 u32 src, dst;
11561
11562 adr = AREG((Opcode >> 0) & 7);
11563 PRE_IO
11564 READ_WORD_F(adr, res)
11565 flag_C = 0;
11566 flag_V = 0;
11567 flag_NotZ = res;
11568 flag_N = res >> 8;
11569 FETCH_SWORD(adr);
11570 WRITE_WORD_F(adr, res)
11571 POST_IO
11572RET(16)
11573}
11574
11575// MOVEW
11576OPCODE(0x33D0)
11577{
11578 u32 adr, res;
11579 u32 src, dst;
11580
11581 adr = AREG((Opcode >> 0) & 7);
11582 PRE_IO
11583 READ_WORD_F(adr, res)
11584 flag_C = 0;
11585 flag_V = 0;
11586 flag_NotZ = res;
11587 flag_N = res >> 8;
11588 FETCH_LONG(adr);
11589 WRITE_WORD_F(adr, res)
11590 POST_IO
11591RET(20)
11592}
11593
11594// MOVEW
11595OPCODE(0x3ED0)
11596{
11597 u32 adr, res;
11598 u32 src, dst;
11599
11600 adr = AREG((Opcode >> 0) & 7);
11601 PRE_IO
11602 READ_WORD_F(adr, res)
11603 flag_C = 0;
11604 flag_V = 0;
11605 flag_NotZ = res;
11606 flag_N = res >> 8;
11607 adr = AREG(7);
11608 AREG(7) += 2;
11609 WRITE_WORD_F(adr, res)
11610 POST_IO
11611RET(12)
11612}
11613
11614// MOVEW
11615OPCODE(0x3F10)
11616{
11617 u32 adr, res;
11618 u32 src, dst;
11619
11620 adr = AREG((Opcode >> 0) & 7);
11621 PRE_IO
11622 READ_WORD_F(adr, res)
11623 flag_C = 0;
11624 flag_V = 0;
11625 flag_NotZ = res;
11626 flag_N = res >> 8;
11627 adr = AREG(7) - 2;
11628 AREG(7) = adr;
11629 WRITE_WORD_F(adr, res)
11630 POST_IO
11631RET(12)
11632}
11633
11634// MOVEW
11635OPCODE(0x3018)
11636{
11637 u32 adr, res;
11638 u32 src, dst;
11639
11640 adr = AREG((Opcode >> 0) & 7);
11641 AREG((Opcode >> 0) & 7) += 2;
11642 PRE_IO
11643 READ_WORD_F(adr, res)
11644 flag_C = 0;
11645 flag_V = 0;
11646 flag_NotZ = res;
11647 flag_N = res >> 8;
11648 DREGu16((Opcode >> 9) & 7) = res;
11649 POST_IO
11650RET(8)
11651}
11652
11653// MOVEW
11654OPCODE(0x3098)
11655{
11656 u32 adr, res;
11657 u32 src, dst;
11658
11659 adr = AREG((Opcode >> 0) & 7);
11660 AREG((Opcode >> 0) & 7) += 2;
11661 PRE_IO
11662 READ_WORD_F(adr, res)
11663 flag_C = 0;
11664 flag_V = 0;
11665 flag_NotZ = res;
11666 flag_N = res >> 8;
11667 adr = AREG((Opcode >> 9) & 7);
11668 WRITE_WORD_F(adr, res)
11669 POST_IO
11670RET(12)
11671}
11672
11673// MOVEW
11674OPCODE(0x30D8)
11675{
11676 u32 adr, res;
11677 u32 src, dst;
11678
11679 adr = AREG((Opcode >> 0) & 7);
11680 AREG((Opcode >> 0) & 7) += 2;
11681 PRE_IO
11682 READ_WORD_F(adr, res)
11683 flag_C = 0;
11684 flag_V = 0;
11685 flag_NotZ = res;
11686 flag_N = res >> 8;
11687 adr = AREG((Opcode >> 9) & 7);
11688 AREG((Opcode >> 9) & 7) += 2;
11689 WRITE_WORD_F(adr, res)
11690 POST_IO
11691RET(12)
11692}
11693
11694// MOVEW
11695OPCODE(0x3118)
11696{
11697 u32 adr, res;
11698 u32 src, dst;
11699
11700 adr = AREG((Opcode >> 0) & 7);
11701 AREG((Opcode >> 0) & 7) += 2;
11702 PRE_IO
11703 READ_WORD_F(adr, res)
11704 flag_C = 0;
11705 flag_V = 0;
11706 flag_NotZ = res;
11707 flag_N = res >> 8;
11708 adr = AREG((Opcode >> 9) & 7) - 2;
11709 AREG((Opcode >> 9) & 7) = adr;
11710 WRITE_WORD_F(adr, res)
11711 POST_IO
11712RET(12)
11713}
11714
11715// MOVEW
11716OPCODE(0x3158)
11717{
11718 u32 adr, res;
11719 u32 src, dst;
11720
11721 adr = AREG((Opcode >> 0) & 7);
11722 AREG((Opcode >> 0) & 7) += 2;
11723 PRE_IO
11724 READ_WORD_F(adr, res)
11725 flag_C = 0;
11726 flag_V = 0;
11727 flag_NotZ = res;
11728 flag_N = res >> 8;
11729 FETCH_SWORD(adr);
11730 adr += AREG((Opcode >> 9) & 7);
11731 WRITE_WORD_F(adr, res)
11732 POST_IO
11733RET(16)
11734}
11735
11736// MOVEW
11737OPCODE(0x3198)
11738{
11739 u32 adr, res;
11740 u32 src, dst;
11741
11742 adr = AREG((Opcode >> 0) & 7);
11743 AREG((Opcode >> 0) & 7) += 2;
11744 PRE_IO
11745 READ_WORD_F(adr, res)
11746 flag_C = 0;
11747 flag_V = 0;
11748 flag_NotZ = res;
11749 flag_N = res >> 8;
11750 adr = AREG((Opcode >> 9) & 7);
11751 DECODE_EXT_WORD
11752 WRITE_WORD_F(adr, res)
11753 POST_IO
11754RET(18)
11755}
11756
11757// MOVEW
11758OPCODE(0x31D8)
11759{
11760 u32 adr, res;
11761 u32 src, dst;
11762
11763 adr = AREG((Opcode >> 0) & 7);
11764 AREG((Opcode >> 0) & 7) += 2;
11765 PRE_IO
11766 READ_WORD_F(adr, res)
11767 flag_C = 0;
11768 flag_V = 0;
11769 flag_NotZ = res;
11770 flag_N = res >> 8;
11771 FETCH_SWORD(adr);
11772 WRITE_WORD_F(adr, res)
11773 POST_IO
11774RET(16)
11775}
11776
11777// MOVEW
11778OPCODE(0x33D8)
11779{
11780 u32 adr, res;
11781 u32 src, dst;
11782
11783 adr = AREG((Opcode >> 0) & 7);
11784 AREG((Opcode >> 0) & 7) += 2;
11785 PRE_IO
11786 READ_WORD_F(adr, res)
11787 flag_C = 0;
11788 flag_V = 0;
11789 flag_NotZ = res;
11790 flag_N = res >> 8;
11791 FETCH_LONG(adr);
11792 WRITE_WORD_F(adr, res)
11793 POST_IO
11794RET(20)
11795}
11796
11797// MOVEW
11798OPCODE(0x3ED8)
11799{
11800 u32 adr, res;
11801 u32 src, dst;
11802
11803 adr = AREG((Opcode >> 0) & 7);
11804 AREG((Opcode >> 0) & 7) += 2;
11805 PRE_IO
11806 READ_WORD_F(adr, res)
11807 flag_C = 0;
11808 flag_V = 0;
11809 flag_NotZ = res;
11810 flag_N = res >> 8;
11811 adr = AREG(7);
11812 AREG(7) += 2;
11813 WRITE_WORD_F(adr, res)
11814 POST_IO
11815RET(12)
11816}
11817
11818// MOVEW
11819OPCODE(0x3F18)
11820{
11821 u32 adr, res;
11822 u32 src, dst;
11823
11824 adr = AREG((Opcode >> 0) & 7);
11825 AREG((Opcode >> 0) & 7) += 2;
11826 PRE_IO
11827 READ_WORD_F(adr, res)
11828 flag_C = 0;
11829 flag_V = 0;
11830 flag_NotZ = res;
11831 flag_N = res >> 8;
11832 adr = AREG(7) - 2;
11833 AREG(7) = adr;
11834 WRITE_WORD_F(adr, res)
11835 POST_IO
11836RET(12)
11837}
11838
11839// MOVEW
11840OPCODE(0x3020)
11841{
11842 u32 adr, res;
11843 u32 src, dst;
11844
11845 adr = AREG((Opcode >> 0) & 7) - 2;
11846 AREG((Opcode >> 0) & 7) = adr;
11847 PRE_IO
11848 READ_WORD_F(adr, res)
11849 flag_C = 0;
11850 flag_V = 0;
11851 flag_NotZ = res;
11852 flag_N = res >> 8;
11853 DREGu16((Opcode >> 9) & 7) = res;
11854 POST_IO
11855RET(10)
11856}
11857
11858// MOVEW
11859OPCODE(0x30A0)
11860{
11861 u32 adr, res;
11862 u32 src, dst;
11863
11864 adr = AREG((Opcode >> 0) & 7) - 2;
11865 AREG((Opcode >> 0) & 7) = adr;
11866 PRE_IO
11867 READ_WORD_F(adr, res)
11868 flag_C = 0;
11869 flag_V = 0;
11870 flag_NotZ = res;
11871 flag_N = res >> 8;
11872 adr = AREG((Opcode >> 9) & 7);
11873 WRITE_WORD_F(adr, res)
11874 POST_IO
11875RET(14)
11876}
11877
11878// MOVEW
11879OPCODE(0x30E0)
11880{
11881 u32 adr, res;
11882 u32 src, dst;
11883
11884 adr = AREG((Opcode >> 0) & 7) - 2;
11885 AREG((Opcode >> 0) & 7) = adr;
11886 PRE_IO
11887 READ_WORD_F(adr, res)
11888 flag_C = 0;
11889 flag_V = 0;
11890 flag_NotZ = res;
11891 flag_N = res >> 8;
11892 adr = AREG((Opcode >> 9) & 7);
11893 AREG((Opcode >> 9) & 7) += 2;
11894 WRITE_WORD_F(adr, res)
11895 POST_IO
11896RET(14)
11897}
11898
11899// MOVEW
11900OPCODE(0x3120)
11901{
11902 u32 adr, res;
11903 u32 src, dst;
11904
11905 adr = AREG((Opcode >> 0) & 7) - 2;
11906 AREG((Opcode >> 0) & 7) = adr;
11907 PRE_IO
11908 READ_WORD_F(adr, res)
11909 flag_C = 0;
11910 flag_V = 0;
11911 flag_NotZ = res;
11912 flag_N = res >> 8;
11913 adr = AREG((Opcode >> 9) & 7) - 2;
11914 AREG((Opcode >> 9) & 7) = adr;
11915 WRITE_WORD_F(adr, res)
11916 POST_IO
11917RET(14)
11918}
11919
11920// MOVEW
11921OPCODE(0x3160)
11922{
11923 u32 adr, res;
11924 u32 src, dst;
11925
11926 adr = AREG((Opcode >> 0) & 7) - 2;
11927 AREG((Opcode >> 0) & 7) = adr;
11928 PRE_IO
11929 READ_WORD_F(adr, res)
11930 flag_C = 0;
11931 flag_V = 0;
11932 flag_NotZ = res;
11933 flag_N = res >> 8;
11934 FETCH_SWORD(adr);
11935 adr += AREG((Opcode >> 9) & 7);
11936 WRITE_WORD_F(adr, res)
11937 POST_IO
11938RET(18)
11939}
11940
11941// MOVEW
11942OPCODE(0x31A0)
11943{
11944 u32 adr, res;
11945 u32 src, dst;
11946
11947 adr = AREG((Opcode >> 0) & 7) - 2;
11948 AREG((Opcode >> 0) & 7) = adr;
11949 PRE_IO
11950 READ_WORD_F(adr, res)
11951 flag_C = 0;
11952 flag_V = 0;
11953 flag_NotZ = res;
11954 flag_N = res >> 8;
11955 adr = AREG((Opcode >> 9) & 7);
11956 DECODE_EXT_WORD
11957 WRITE_WORD_F(adr, res)
11958 POST_IO
11959RET(20)
11960}
11961
11962// MOVEW
11963OPCODE(0x31E0)
11964{
11965 u32 adr, res;
11966 u32 src, dst;
11967
11968 adr = AREG((Opcode >> 0) & 7) - 2;
11969 AREG((Opcode >> 0) & 7) = adr;
11970 PRE_IO
11971 READ_WORD_F(adr, res)
11972 flag_C = 0;
11973 flag_V = 0;
11974 flag_NotZ = res;
11975 flag_N = res >> 8;
11976 FETCH_SWORD(adr);
11977 WRITE_WORD_F(adr, res)
11978 POST_IO
11979RET(18)
11980}
11981
11982// MOVEW
11983OPCODE(0x33E0)
11984{
11985 u32 adr, res;
11986 u32 src, dst;
11987
11988 adr = AREG((Opcode >> 0) & 7) - 2;
11989 AREG((Opcode >> 0) & 7) = adr;
11990 PRE_IO
11991 READ_WORD_F(adr, res)
11992 flag_C = 0;
11993 flag_V = 0;
11994 flag_NotZ = res;
11995 flag_N = res >> 8;
11996 FETCH_LONG(adr);
11997 WRITE_WORD_F(adr, res)
11998 POST_IO
11999RET(22)
12000}
12001
12002// MOVEW
12003OPCODE(0x3EE0)
12004{
12005 u32 adr, res;
12006 u32 src, dst;
12007
12008 adr = AREG((Opcode >> 0) & 7) - 2;
12009 AREG((Opcode >> 0) & 7) = adr;
12010 PRE_IO
12011 READ_WORD_F(adr, res)
12012 flag_C = 0;
12013 flag_V = 0;
12014 flag_NotZ = res;
12015 flag_N = res >> 8;
12016 adr = AREG(7);
12017 AREG(7) += 2;
12018 WRITE_WORD_F(adr, res)
12019 POST_IO
12020RET(14)
12021}
12022
12023// MOVEW
12024OPCODE(0x3F20)
12025{
12026 u32 adr, res;
12027 u32 src, dst;
12028
12029 adr = AREG((Opcode >> 0) & 7) - 2;
12030 AREG((Opcode >> 0) & 7) = adr;
12031 PRE_IO
12032 READ_WORD_F(adr, res)
12033 flag_C = 0;
12034 flag_V = 0;
12035 flag_NotZ = res;
12036 flag_N = res >> 8;
12037 adr = AREG(7) - 2;
12038 AREG(7) = adr;
12039 WRITE_WORD_F(adr, res)
12040 POST_IO
12041RET(14)
12042}
12043
12044// MOVEW
12045OPCODE(0x3028)
12046{
12047 u32 adr, res;
12048 u32 src, dst;
12049
12050 FETCH_SWORD(adr);
12051 adr += AREG((Opcode >> 0) & 7);
12052 PRE_IO
12053 READ_WORD_F(adr, res)
12054 flag_C = 0;
12055 flag_V = 0;
12056 flag_NotZ = res;
12057 flag_N = res >> 8;
12058 DREGu16((Opcode >> 9) & 7) = res;
12059 POST_IO
12060RET(12)
12061}
12062
12063// MOVEW
12064OPCODE(0x30A8)
12065{
12066 u32 adr, res;
12067 u32 src, dst;
12068
12069 FETCH_SWORD(adr);
12070 adr += AREG((Opcode >> 0) & 7);
12071 PRE_IO
12072 READ_WORD_F(adr, res)
12073 flag_C = 0;
12074 flag_V = 0;
12075 flag_NotZ = res;
12076 flag_N = res >> 8;
12077 adr = AREG((Opcode >> 9) & 7);
12078 WRITE_WORD_F(adr, res)
12079 POST_IO
12080RET(16)
12081}
12082
12083// MOVEW
12084OPCODE(0x30E8)
12085{
12086 u32 adr, res;
12087 u32 src, dst;
12088
12089 FETCH_SWORD(adr);
12090 adr += AREG((Opcode >> 0) & 7);
12091 PRE_IO
12092 READ_WORD_F(adr, res)
12093 flag_C = 0;
12094 flag_V = 0;
12095 flag_NotZ = res;
12096 flag_N = res >> 8;
12097 adr = AREG((Opcode >> 9) & 7);
12098 AREG((Opcode >> 9) & 7) += 2;
12099 WRITE_WORD_F(adr, res)
12100 POST_IO
12101RET(16)
12102}
12103
12104// MOVEW
12105OPCODE(0x3128)
12106{
12107 u32 adr, res;
12108 u32 src, dst;
12109
12110 FETCH_SWORD(adr);
12111 adr += AREG((Opcode >> 0) & 7);
12112 PRE_IO
12113 READ_WORD_F(adr, res)
12114 flag_C = 0;
12115 flag_V = 0;
12116 flag_NotZ = res;
12117 flag_N = res >> 8;
12118 adr = AREG((Opcode >> 9) & 7) - 2;
12119 AREG((Opcode >> 9) & 7) = adr;
12120 WRITE_WORD_F(adr, res)
12121 POST_IO
12122RET(16)
12123}
12124
12125// MOVEW
12126OPCODE(0x3168)
12127{
12128 u32 adr, res;
12129 u32 src, dst;
12130
12131 FETCH_SWORD(adr);
12132 adr += AREG((Opcode >> 0) & 7);
12133 PRE_IO
12134 READ_WORD_F(adr, res)
12135 flag_C = 0;
12136 flag_V = 0;
12137 flag_NotZ = res;
12138 flag_N = res >> 8;
12139 FETCH_SWORD(adr);
12140 adr += AREG((Opcode >> 9) & 7);
12141 WRITE_WORD_F(adr, res)
12142 POST_IO
12143RET(20)
12144}
12145
12146// MOVEW
12147OPCODE(0x31A8)
12148{
12149 u32 adr, res;
12150 u32 src, dst;
12151
12152 FETCH_SWORD(adr);
12153 adr += AREG((Opcode >> 0) & 7);
12154 PRE_IO
12155 READ_WORD_F(adr, res)
12156 flag_C = 0;
12157 flag_V = 0;
12158 flag_NotZ = res;
12159 flag_N = res >> 8;
12160 adr = AREG((Opcode >> 9) & 7);
12161 DECODE_EXT_WORD
12162 WRITE_WORD_F(adr, res)
12163 POST_IO
12164RET(22)
12165}
12166
12167// MOVEW
12168OPCODE(0x31E8)
12169{
12170 u32 adr, res;
12171 u32 src, dst;
12172
12173 FETCH_SWORD(adr);
12174 adr += AREG((Opcode >> 0) & 7);
12175 PRE_IO
12176 READ_WORD_F(adr, res)
12177 flag_C = 0;
12178 flag_V = 0;
12179 flag_NotZ = res;
12180 flag_N = res >> 8;
12181 FETCH_SWORD(adr);
12182 WRITE_WORD_F(adr, res)
12183 POST_IO
12184RET(20)
12185}
12186
12187// MOVEW
12188OPCODE(0x33E8)
12189{
12190 u32 adr, res;
12191 u32 src, dst;
12192
12193 FETCH_SWORD(adr);
12194 adr += AREG((Opcode >> 0) & 7);
12195 PRE_IO
12196 READ_WORD_F(adr, res)
12197 flag_C = 0;
12198 flag_V = 0;
12199 flag_NotZ = res;
12200 flag_N = res >> 8;
12201 FETCH_LONG(adr);
12202 WRITE_WORD_F(adr, res)
12203 POST_IO
12204RET(24)
12205}
12206
12207// MOVEW
12208OPCODE(0x3EE8)
12209{
12210 u32 adr, res;
12211 u32 src, dst;
12212
12213 FETCH_SWORD(adr);
12214 adr += AREG((Opcode >> 0) & 7);
12215 PRE_IO
12216 READ_WORD_F(adr, res)
12217 flag_C = 0;
12218 flag_V = 0;
12219 flag_NotZ = res;
12220 flag_N = res >> 8;
12221 adr = AREG(7);
12222 AREG(7) += 2;
12223 WRITE_WORD_F(adr, res)
12224 POST_IO
12225RET(16)
12226}
12227
12228// MOVEW
12229OPCODE(0x3F28)
12230{
12231 u32 adr, res;
12232 u32 src, dst;
12233
12234 FETCH_SWORD(adr);
12235 adr += AREG((Opcode >> 0) & 7);
12236 PRE_IO
12237 READ_WORD_F(adr, res)
12238 flag_C = 0;
12239 flag_V = 0;
12240 flag_NotZ = res;
12241 flag_N = res >> 8;
12242 adr = AREG(7) - 2;
12243 AREG(7) = adr;
12244 WRITE_WORD_F(adr, res)
12245 POST_IO
12246RET(16)
12247}
12248
12249// MOVEW
12250OPCODE(0x3030)
12251{
12252 u32 adr, res;
12253 u32 src, dst;
12254
12255 adr = AREG((Opcode >> 0) & 7);
12256 DECODE_EXT_WORD
12257 PRE_IO
12258 READ_WORD_F(adr, res)
12259 flag_C = 0;
12260 flag_V = 0;
12261 flag_NotZ = res;
12262 flag_N = res >> 8;
12263 DREGu16((Opcode >> 9) & 7) = res;
12264 POST_IO
12265RET(14)
12266}
12267
12268// MOVEW
12269OPCODE(0x30B0)
12270{
12271 u32 adr, res;
12272 u32 src, dst;
12273
12274 adr = AREG((Opcode >> 0) & 7);
12275 DECODE_EXT_WORD
12276 PRE_IO
12277 READ_WORD_F(adr, res)
12278 flag_C = 0;
12279 flag_V = 0;
12280 flag_NotZ = res;
12281 flag_N = res >> 8;
12282 adr = AREG((Opcode >> 9) & 7);
12283 WRITE_WORD_F(adr, res)
12284 POST_IO
12285RET(18)
12286}
12287
12288// MOVEW
12289OPCODE(0x30F0)
12290{
12291 u32 adr, res;
12292 u32 src, dst;
12293
12294 adr = AREG((Opcode >> 0) & 7);
12295 DECODE_EXT_WORD
12296 PRE_IO
12297 READ_WORD_F(adr, res)
12298 flag_C = 0;
12299 flag_V = 0;
12300 flag_NotZ = res;
12301 flag_N = res >> 8;
12302 adr = AREG((Opcode >> 9) & 7);
12303 AREG((Opcode >> 9) & 7) += 2;
12304 WRITE_WORD_F(adr, res)
12305 POST_IO
12306RET(18)
12307}
12308
12309// MOVEW
12310OPCODE(0x3130)
12311{
12312 u32 adr, res;
12313 u32 src, dst;
12314
12315 adr = AREG((Opcode >> 0) & 7);
12316 DECODE_EXT_WORD
12317 PRE_IO
12318 READ_WORD_F(adr, res)
12319 flag_C = 0;
12320 flag_V = 0;
12321 flag_NotZ = res;
12322 flag_N = res >> 8;
12323 adr = AREG((Opcode >> 9) & 7) - 2;
12324 AREG((Opcode >> 9) & 7) = adr;
12325 WRITE_WORD_F(adr, res)
12326 POST_IO
12327RET(18)
12328}
12329
12330// MOVEW
12331OPCODE(0x3170)
12332{
12333 u32 adr, res;
12334 u32 src, dst;
12335
12336 adr = AREG((Opcode >> 0) & 7);
12337 DECODE_EXT_WORD
12338 PRE_IO
12339 READ_WORD_F(adr, res)
12340 flag_C = 0;
12341 flag_V = 0;
12342 flag_NotZ = res;
12343 flag_N = res >> 8;
12344 FETCH_SWORD(adr);
12345 adr += AREG((Opcode >> 9) & 7);
12346 WRITE_WORD_F(adr, res)
12347 POST_IO
12348RET(22)
12349}
12350
12351// MOVEW
12352OPCODE(0x31B0)
12353{
12354 u32 adr, res;
12355 u32 src, dst;
12356
12357 adr = AREG((Opcode >> 0) & 7);
12358 DECODE_EXT_WORD
12359 PRE_IO
12360 READ_WORD_F(adr, res)
12361 flag_C = 0;
12362 flag_V = 0;
12363 flag_NotZ = res;
12364 flag_N = res >> 8;
12365 adr = AREG((Opcode >> 9) & 7);
12366 DECODE_EXT_WORD
12367 WRITE_WORD_F(adr, res)
12368 POST_IO
12369RET(24)
12370}
12371
12372// MOVEW
12373OPCODE(0x31F0)
12374{
12375 u32 adr, res;
12376 u32 src, dst;
12377
12378 adr = AREG((Opcode >> 0) & 7);
12379 DECODE_EXT_WORD
12380 PRE_IO
12381 READ_WORD_F(adr, res)
12382 flag_C = 0;
12383 flag_V = 0;
12384 flag_NotZ = res;
12385 flag_N = res >> 8;
12386 FETCH_SWORD(adr);
12387 WRITE_WORD_F(adr, res)
12388 POST_IO
12389RET(22)
12390}
12391
12392// MOVEW
12393OPCODE(0x33F0)
12394{
12395 u32 adr, res;
12396 u32 src, dst;
12397
12398 adr = AREG((Opcode >> 0) & 7);
12399 DECODE_EXT_WORD
12400 PRE_IO
12401 READ_WORD_F(adr, res)
12402 flag_C = 0;
12403 flag_V = 0;
12404 flag_NotZ = res;
12405 flag_N = res >> 8;
12406 FETCH_LONG(adr);
12407 WRITE_WORD_F(adr, res)
12408 POST_IO
12409RET(26)
12410}
12411
12412// MOVEW
12413OPCODE(0x3EF0)
12414{
12415 u32 adr, res;
12416 u32 src, dst;
12417
12418 adr = AREG((Opcode >> 0) & 7);
12419 DECODE_EXT_WORD
12420 PRE_IO
12421 READ_WORD_F(adr, res)
12422 flag_C = 0;
12423 flag_V = 0;
12424 flag_NotZ = res;
12425 flag_N = res >> 8;
12426 adr = AREG(7);
12427 AREG(7) += 2;
12428 WRITE_WORD_F(adr, res)
12429 POST_IO
12430RET(18)
12431}
12432
12433// MOVEW
12434OPCODE(0x3F30)
12435{
12436 u32 adr, res;
12437 u32 src, dst;
12438
12439 adr = AREG((Opcode >> 0) & 7);
12440 DECODE_EXT_WORD
12441 PRE_IO
12442 READ_WORD_F(adr, res)
12443 flag_C = 0;
12444 flag_V = 0;
12445 flag_NotZ = res;
12446 flag_N = res >> 8;
12447 adr = AREG(7) - 2;
12448 AREG(7) = adr;
12449 WRITE_WORD_F(adr, res)
12450 POST_IO
12451RET(18)
12452}
12453
12454// MOVEW
12455OPCODE(0x3038)
12456{
12457 u32 adr, res;
12458 u32 src, dst;
12459
12460 FETCH_SWORD(adr);
12461 PRE_IO
12462 READ_WORD_F(adr, res)
12463 flag_C = 0;
12464 flag_V = 0;
12465 flag_NotZ = res;
12466 flag_N = res >> 8;
12467 DREGu16((Opcode >> 9) & 7) = res;
12468 POST_IO
12469RET(12)
12470}
12471
12472// MOVEW
12473OPCODE(0x30B8)
12474{
12475 u32 adr, res;
12476 u32 src, dst;
12477
12478 FETCH_SWORD(adr);
12479 PRE_IO
12480 READ_WORD_F(adr, res)
12481 flag_C = 0;
12482 flag_V = 0;
12483 flag_NotZ = res;
12484 flag_N = res >> 8;
12485 adr = AREG((Opcode >> 9) & 7);
12486 WRITE_WORD_F(adr, res)
12487 POST_IO
12488RET(16)
12489}
12490
12491// MOVEW
12492OPCODE(0x30F8)
12493{
12494 u32 adr, res;
12495 u32 src, dst;
12496
12497 FETCH_SWORD(adr);
12498 PRE_IO
12499 READ_WORD_F(adr, res)
12500 flag_C = 0;
12501 flag_V = 0;
12502 flag_NotZ = res;
12503 flag_N = res >> 8;
12504 adr = AREG((Opcode >> 9) & 7);
12505 AREG((Opcode >> 9) & 7) += 2;
12506 WRITE_WORD_F(adr, res)
12507 POST_IO
12508RET(16)
12509}
12510
12511// MOVEW
12512OPCODE(0x3138)
12513{
12514 u32 adr, res;
12515 u32 src, dst;
12516
12517 FETCH_SWORD(adr);
12518 PRE_IO
12519 READ_WORD_F(adr, res)
12520 flag_C = 0;
12521 flag_V = 0;
12522 flag_NotZ = res;
12523 flag_N = res >> 8;
12524 adr = AREG((Opcode >> 9) & 7) - 2;
12525 AREG((Opcode >> 9) & 7) = adr;
12526 WRITE_WORD_F(adr, res)
12527 POST_IO
12528RET(16)
12529}
12530
12531// MOVEW
12532OPCODE(0x3178)
12533{
12534 u32 adr, res;
12535 u32 src, dst;
12536
12537 FETCH_SWORD(adr);
12538 PRE_IO
12539 READ_WORD_F(adr, res)
12540 flag_C = 0;
12541 flag_V = 0;
12542 flag_NotZ = res;
12543 flag_N = res >> 8;
12544 FETCH_SWORD(adr);
12545 adr += AREG((Opcode >> 9) & 7);
12546 WRITE_WORD_F(adr, res)
12547 POST_IO
12548RET(20)
12549}
12550
12551// MOVEW
12552OPCODE(0x31B8)
12553{
12554 u32 adr, res;
12555 u32 src, dst;
12556
12557 FETCH_SWORD(adr);
12558 PRE_IO
12559 READ_WORD_F(adr, res)
12560 flag_C = 0;
12561 flag_V = 0;
12562 flag_NotZ = res;
12563 flag_N = res >> 8;
12564 adr = AREG((Opcode >> 9) & 7);
12565 DECODE_EXT_WORD
12566 WRITE_WORD_F(adr, res)
12567 POST_IO
12568RET(22)
12569}
12570
12571// MOVEW
12572OPCODE(0x31F8)
12573{
12574 u32 adr, res;
12575 u32 src, dst;
12576
12577 FETCH_SWORD(adr);
12578 PRE_IO
12579 READ_WORD_F(adr, res)
12580 flag_C = 0;
12581 flag_V = 0;
12582 flag_NotZ = res;
12583 flag_N = res >> 8;
12584 FETCH_SWORD(adr);
12585 WRITE_WORD_F(adr, res)
12586 POST_IO
12587RET(20)
12588}
12589
12590// MOVEW
12591OPCODE(0x33F8)
12592{
12593 u32 adr, res;
12594 u32 src, dst;
12595
12596 FETCH_SWORD(adr);
12597 PRE_IO
12598 READ_WORD_F(adr, res)
12599 flag_C = 0;
12600 flag_V = 0;
12601 flag_NotZ = res;
12602 flag_N = res >> 8;
12603 FETCH_LONG(adr);
12604 WRITE_WORD_F(adr, res)
12605 POST_IO
12606RET(24)
12607}
12608
12609// MOVEW
12610OPCODE(0x3EF8)
12611{
12612 u32 adr, res;
12613 u32 src, dst;
12614
12615 FETCH_SWORD(adr);
12616 PRE_IO
12617 READ_WORD_F(adr, res)
12618 flag_C = 0;
12619 flag_V = 0;
12620 flag_NotZ = res;
12621 flag_N = res >> 8;
12622 adr = AREG(7);
12623 AREG(7) += 2;
12624 WRITE_WORD_F(adr, res)
12625 POST_IO
12626RET(16)
12627}
12628
12629// MOVEW
12630OPCODE(0x3F38)
12631{
12632 u32 adr, res;
12633 u32 src, dst;
12634
12635 FETCH_SWORD(adr);
12636 PRE_IO
12637 READ_WORD_F(adr, res)
12638 flag_C = 0;
12639 flag_V = 0;
12640 flag_NotZ = res;
12641 flag_N = res >> 8;
12642 adr = AREG(7) - 2;
12643 AREG(7) = adr;
12644 WRITE_WORD_F(adr, res)
12645 POST_IO
12646RET(16)
12647}
12648
12649// MOVEW
12650OPCODE(0x3039)
12651{
12652 u32 adr, res;
12653 u32 src, dst;
12654
12655 FETCH_LONG(adr);
12656 PRE_IO
12657 READ_WORD_F(adr, res)
12658 flag_C = 0;
12659 flag_V = 0;
12660 flag_NotZ = res;
12661 flag_N = res >> 8;
12662 DREGu16((Opcode >> 9) & 7) = res;
12663 POST_IO
12664RET(16)
12665}
12666
12667// MOVEW
12668OPCODE(0x30B9)
12669{
12670 u32 adr, res;
12671 u32 src, dst;
12672
12673 FETCH_LONG(adr);
12674 PRE_IO
12675 READ_WORD_F(adr, res)
12676 flag_C = 0;
12677 flag_V = 0;
12678 flag_NotZ = res;
12679 flag_N = res >> 8;
12680 adr = AREG((Opcode >> 9) & 7);
12681 WRITE_WORD_F(adr, res)
12682 POST_IO
12683RET(20)
12684}
12685
12686// MOVEW
12687OPCODE(0x30F9)
12688{
12689 u32 adr, res;
12690 u32 src, dst;
12691
12692 FETCH_LONG(adr);
12693 PRE_IO
12694 READ_WORD_F(adr, res)
12695 flag_C = 0;
12696 flag_V = 0;
12697 flag_NotZ = res;
12698 flag_N = res >> 8;
12699 adr = AREG((Opcode >> 9) & 7);
12700 AREG((Opcode >> 9) & 7) += 2;
12701 WRITE_WORD_F(adr, res)
12702 POST_IO
12703RET(20)
12704}
12705
12706// MOVEW
12707OPCODE(0x3139)
12708{
12709 u32 adr, res;
12710 u32 src, dst;
12711
12712 FETCH_LONG(adr);
12713 PRE_IO
12714 READ_WORD_F(adr, res)
12715 flag_C = 0;
12716 flag_V = 0;
12717 flag_NotZ = res;
12718 flag_N = res >> 8;
12719 adr = AREG((Opcode >> 9) & 7) - 2;
12720 AREG((Opcode >> 9) & 7) = adr;
12721 WRITE_WORD_F(adr, res)
12722 POST_IO
12723RET(20)
12724}
12725
12726// MOVEW
12727OPCODE(0x3179)
12728{
12729 u32 adr, res;
12730 u32 src, dst;
12731
12732 FETCH_LONG(adr);
12733 PRE_IO
12734 READ_WORD_F(adr, res)
12735 flag_C = 0;
12736 flag_V = 0;
12737 flag_NotZ = res;
12738 flag_N = res >> 8;
12739 FETCH_SWORD(adr);
12740 adr += AREG((Opcode >> 9) & 7);
12741 WRITE_WORD_F(adr, res)
12742 POST_IO
12743RET(24)
12744}
12745
12746// MOVEW
12747OPCODE(0x31B9)
12748{
12749 u32 adr, res;
12750 u32 src, dst;
12751
12752 FETCH_LONG(adr);
12753 PRE_IO
12754 READ_WORD_F(adr, res)
12755 flag_C = 0;
12756 flag_V = 0;
12757 flag_NotZ = res;
12758 flag_N = res >> 8;
12759 adr = AREG((Opcode >> 9) & 7);
12760 DECODE_EXT_WORD
12761 WRITE_WORD_F(adr, res)
12762 POST_IO
12763RET(26)
12764}
12765
12766// MOVEW
12767OPCODE(0x31F9)
12768{
12769 u32 adr, res;
12770 u32 src, dst;
12771
12772 FETCH_LONG(adr);
12773 PRE_IO
12774 READ_WORD_F(adr, res)
12775 flag_C = 0;
12776 flag_V = 0;
12777 flag_NotZ = res;
12778 flag_N = res >> 8;
12779 FETCH_SWORD(adr);
12780 WRITE_WORD_F(adr, res)
12781 POST_IO
12782RET(24)
12783}
12784
12785// MOVEW
12786OPCODE(0x33F9)
12787{
12788 u32 adr, res;
12789 u32 src, dst;
12790
12791 FETCH_LONG(adr);
12792 PRE_IO
12793 READ_WORD_F(adr, res)
12794 flag_C = 0;
12795 flag_V = 0;
12796 flag_NotZ = res;
12797 flag_N = res >> 8;
12798 FETCH_LONG(adr);
12799 WRITE_WORD_F(adr, res)
12800 POST_IO
12801RET(28)
12802}
12803
12804// MOVEW
12805OPCODE(0x3EF9)
12806{
12807 u32 adr, res;
12808 u32 src, dst;
12809
12810 FETCH_LONG(adr);
12811 PRE_IO
12812 READ_WORD_F(adr, res)
12813 flag_C = 0;
12814 flag_V = 0;
12815 flag_NotZ = res;
12816 flag_N = res >> 8;
12817 adr = AREG(7);
12818 AREG(7) += 2;
12819 WRITE_WORD_F(adr, res)
12820 POST_IO
12821RET(20)
12822}
12823
12824// MOVEW
12825OPCODE(0x3F39)
12826{
12827 u32 adr, res;
12828 u32 src, dst;
12829
12830 FETCH_LONG(adr);
12831 PRE_IO
12832 READ_WORD_F(adr, res)
12833 flag_C = 0;
12834 flag_V = 0;
12835 flag_NotZ = res;
12836 flag_N = res >> 8;
12837 adr = AREG(7) - 2;
12838 AREG(7) = adr;
12839 WRITE_WORD_F(adr, res)
12840 POST_IO
12841RET(20)
12842}
12843
12844// MOVEW
12845OPCODE(0x303A)
12846{
12847 u32 adr, res;
12848 u32 src, dst;
12849
12850 adr = GET_SWORD + ((u32)(PC) - BasePC);
12851 PC++;
12852 PRE_IO
12853 READ_WORD_F(adr, res)
12854 flag_C = 0;
12855 flag_V = 0;
12856 flag_NotZ = res;
12857 flag_N = res >> 8;
12858 DREGu16((Opcode >> 9) & 7) = res;
12859 POST_IO
12860RET(12)
12861}
12862
12863// MOVEW
12864OPCODE(0x30BA)
12865{
12866 u32 adr, res;
12867 u32 src, dst;
12868
12869 adr = GET_SWORD + ((u32)(PC) - BasePC);
12870 PC++;
12871 PRE_IO
12872 READ_WORD_F(adr, res)
12873 flag_C = 0;
12874 flag_V = 0;
12875 flag_NotZ = res;
12876 flag_N = res >> 8;
12877 adr = AREG((Opcode >> 9) & 7);
12878 WRITE_WORD_F(adr, res)
12879 POST_IO
12880RET(16)
12881}
12882
12883// MOVEW
12884OPCODE(0x30FA)
12885{
12886 u32 adr, res;
12887 u32 src, dst;
12888
12889 adr = GET_SWORD + ((u32)(PC) - BasePC);
12890 PC++;
12891 PRE_IO
12892 READ_WORD_F(adr, res)
12893 flag_C = 0;
12894 flag_V = 0;
12895 flag_NotZ = res;
12896 flag_N = res >> 8;
12897 adr = AREG((Opcode >> 9) & 7);
12898 AREG((Opcode >> 9) & 7) += 2;
12899 WRITE_WORD_F(adr, res)
12900 POST_IO
12901RET(16)
12902}
12903
12904// MOVEW
12905OPCODE(0x313A)
12906{
12907 u32 adr, res;
12908 u32 src, dst;
12909
12910 adr = GET_SWORD + ((u32)(PC) - BasePC);
12911 PC++;
12912 PRE_IO
12913 READ_WORD_F(adr, res)
12914 flag_C = 0;
12915 flag_V = 0;
12916 flag_NotZ = res;
12917 flag_N = res >> 8;
12918 adr = AREG((Opcode >> 9) & 7) - 2;
12919 AREG((Opcode >> 9) & 7) = adr;
12920 WRITE_WORD_F(adr, res)
12921 POST_IO
12922RET(16)
12923}
12924
12925// MOVEW
12926OPCODE(0x317A)
12927{
12928 u32 adr, res;
12929 u32 src, dst;
12930
12931 adr = GET_SWORD + ((u32)(PC) - BasePC);
12932 PC++;
12933 PRE_IO
12934 READ_WORD_F(adr, res)
12935 flag_C = 0;
12936 flag_V = 0;
12937 flag_NotZ = res;
12938 flag_N = res >> 8;
12939 FETCH_SWORD(adr);
12940 adr += AREG((Opcode >> 9) & 7);
12941 WRITE_WORD_F(adr, res)
12942 POST_IO
12943RET(20)
12944}
12945
12946// MOVEW
12947OPCODE(0x31BA)
12948{
12949 u32 adr, res;
12950 u32 src, dst;
12951
12952 adr = GET_SWORD + ((u32)(PC) - BasePC);
12953 PC++;
12954 PRE_IO
12955 READ_WORD_F(adr, res)
12956 flag_C = 0;
12957 flag_V = 0;
12958 flag_NotZ = res;
12959 flag_N = res >> 8;
12960 adr = AREG((Opcode >> 9) & 7);
12961 DECODE_EXT_WORD
12962 WRITE_WORD_F(adr, res)
12963 POST_IO
12964RET(22)
12965}
12966
12967// MOVEW
12968OPCODE(0x31FA)
12969{
12970 u32 adr, res;
12971 u32 src, dst;
12972
12973 adr = GET_SWORD + ((u32)(PC) - BasePC);
12974 PC++;
12975 PRE_IO
12976 READ_WORD_F(adr, res)
12977 flag_C = 0;
12978 flag_V = 0;
12979 flag_NotZ = res;
12980 flag_N = res >> 8;
12981 FETCH_SWORD(adr);
12982 WRITE_WORD_F(adr, res)
12983 POST_IO
12984RET(20)
12985}
12986
12987// MOVEW
12988OPCODE(0x33FA)
12989{
12990 u32 adr, res;
12991 u32 src, dst;
12992
12993 adr = GET_SWORD + ((u32)(PC) - BasePC);
12994 PC++;
12995 PRE_IO
12996 READ_WORD_F(adr, res)
12997 flag_C = 0;
12998 flag_V = 0;
12999 flag_NotZ = res;
13000 flag_N = res >> 8;
13001 FETCH_LONG(adr);
13002 WRITE_WORD_F(adr, res)
13003 POST_IO
13004RET(24)
13005}
13006
13007// MOVEW
13008OPCODE(0x3EFA)
13009{
13010 u32 adr, res;
13011 u32 src, dst;
13012
13013 adr = GET_SWORD + ((u32)(PC) - BasePC);
13014 PC++;
13015 PRE_IO
13016 READ_WORD_F(adr, res)
13017 flag_C = 0;
13018 flag_V = 0;
13019 flag_NotZ = res;
13020 flag_N = res >> 8;
13021 adr = AREG(7);
13022 AREG(7) += 2;
13023 WRITE_WORD_F(adr, res)
13024 POST_IO
13025RET(16)
13026}
13027
13028// MOVEW
13029OPCODE(0x3F3A)
13030{
13031 u32 adr, res;
13032 u32 src, dst;
13033
13034 adr = GET_SWORD + ((u32)(PC) - BasePC);
13035 PC++;
13036 PRE_IO
13037 READ_WORD_F(adr, res)
13038 flag_C = 0;
13039 flag_V = 0;
13040 flag_NotZ = res;
13041 flag_N = res >> 8;
13042 adr = AREG(7) - 2;
13043 AREG(7) = adr;
13044 WRITE_WORD_F(adr, res)
13045 POST_IO
13046RET(16)
13047}
13048
13049// MOVEW
13050OPCODE(0x303B)
13051{
13052 u32 adr, res;
13053 u32 src, dst;
13054
13055 adr = (u32)(PC) - BasePC;
13056 DECODE_EXT_WORD
13057 PRE_IO
13058 READ_WORD_F(adr, res)
13059 flag_C = 0;
13060 flag_V = 0;
13061 flag_NotZ = res;
13062 flag_N = res >> 8;
13063 DREGu16((Opcode >> 9) & 7) = res;
13064 POST_IO
13065RET(14)
13066}
13067
13068// MOVEW
13069OPCODE(0x30BB)
13070{
13071 u32 adr, res;
13072 u32 src, dst;
13073
13074 adr = (u32)(PC) - BasePC;
13075 DECODE_EXT_WORD
13076 PRE_IO
13077 READ_WORD_F(adr, res)
13078 flag_C = 0;
13079 flag_V = 0;
13080 flag_NotZ = res;
13081 flag_N = res >> 8;
13082 adr = AREG((Opcode >> 9) & 7);
13083 WRITE_WORD_F(adr, res)
13084 POST_IO
13085RET(18)
13086}
13087
13088// MOVEW
13089OPCODE(0x30FB)
13090{
13091 u32 adr, res;
13092 u32 src, dst;
13093
13094 adr = (u32)(PC) - BasePC;
13095 DECODE_EXT_WORD
13096 PRE_IO
13097 READ_WORD_F(adr, res)
13098 flag_C = 0;
13099 flag_V = 0;
13100 flag_NotZ = res;
13101 flag_N = res >> 8;
13102 adr = AREG((Opcode >> 9) & 7);
13103 AREG((Opcode >> 9) & 7) += 2;
13104 WRITE_WORD_F(adr, res)
13105 POST_IO
13106RET(18)
13107}
13108
13109// MOVEW
13110OPCODE(0x313B)
13111{
13112 u32 adr, res;
13113 u32 src, dst;
13114
13115 adr = (u32)(PC) - BasePC;
13116 DECODE_EXT_WORD
13117 PRE_IO
13118 READ_WORD_F(adr, res)
13119 flag_C = 0;
13120 flag_V = 0;
13121 flag_NotZ = res;
13122 flag_N = res >> 8;
13123 adr = AREG((Opcode >> 9) & 7) - 2;
13124 AREG((Opcode >> 9) & 7) = adr;
13125 WRITE_WORD_F(adr, res)
13126 POST_IO
13127RET(18)
13128}
13129
13130// MOVEW
13131OPCODE(0x317B)
13132{
13133 u32 adr, res;
13134 u32 src, dst;
13135
13136 adr = (u32)(PC) - BasePC;
13137 DECODE_EXT_WORD
13138 PRE_IO
13139 READ_WORD_F(adr, res)
13140 flag_C = 0;
13141 flag_V = 0;
13142 flag_NotZ = res;
13143 flag_N = res >> 8;
13144 FETCH_SWORD(adr);
13145 adr += AREG((Opcode >> 9) & 7);
13146 WRITE_WORD_F(adr, res)
13147 POST_IO
13148RET(22)
13149}
13150
13151// MOVEW
13152OPCODE(0x31BB)
13153{
13154 u32 adr, res;
13155 u32 src, dst;
13156
13157 adr = (u32)(PC) - BasePC;
13158 DECODE_EXT_WORD
13159 PRE_IO
13160 READ_WORD_F(adr, res)
13161 flag_C = 0;
13162 flag_V = 0;
13163 flag_NotZ = res;
13164 flag_N = res >> 8;
13165 adr = AREG((Opcode >> 9) & 7);
13166 DECODE_EXT_WORD
13167 WRITE_WORD_F(adr, res)
13168 POST_IO
13169RET(24)
13170}
13171
13172// MOVEW
13173OPCODE(0x31FB)
13174{
13175 u32 adr, res;
13176 u32 src, dst;
13177
13178 adr = (u32)(PC) - BasePC;
13179 DECODE_EXT_WORD
13180 PRE_IO
13181 READ_WORD_F(adr, res)
13182 flag_C = 0;
13183 flag_V = 0;
13184 flag_NotZ = res;
13185 flag_N = res >> 8;
13186 FETCH_SWORD(adr);
13187 WRITE_WORD_F(adr, res)
13188 POST_IO
13189RET(22)
13190}
13191
13192// MOVEW
13193OPCODE(0x33FB)
13194{
13195 u32 adr, res;
13196 u32 src, dst;
13197
13198 adr = (u32)(PC) - BasePC;
13199 DECODE_EXT_WORD
13200 PRE_IO
13201 READ_WORD_F(adr, res)
13202 flag_C = 0;
13203 flag_V = 0;
13204 flag_NotZ = res;
13205 flag_N = res >> 8;
13206 FETCH_LONG(adr);
13207 WRITE_WORD_F(adr, res)
13208 POST_IO
13209RET(26)
13210}
13211
13212// MOVEW
13213OPCODE(0x3EFB)
13214{
13215 u32 adr, res;
13216 u32 src, dst;
13217
13218 adr = (u32)(PC) - BasePC;
13219 DECODE_EXT_WORD
13220 PRE_IO
13221 READ_WORD_F(adr, res)
13222 flag_C = 0;
13223 flag_V = 0;
13224 flag_NotZ = res;
13225 flag_N = res >> 8;
13226 adr = AREG(7);
13227 AREG(7) += 2;
13228 WRITE_WORD_F(adr, res)
13229 POST_IO
13230RET(18)
13231}
13232
13233// MOVEW
13234OPCODE(0x3F3B)
13235{
13236 u32 adr, res;
13237 u32 src, dst;
13238
13239 adr = (u32)(PC) - BasePC;
13240 DECODE_EXT_WORD
13241 PRE_IO
13242 READ_WORD_F(adr, res)
13243 flag_C = 0;
13244 flag_V = 0;
13245 flag_NotZ = res;
13246 flag_N = res >> 8;
13247 adr = AREG(7) - 2;
13248 AREG(7) = adr;
13249 WRITE_WORD_F(adr, res)
13250 POST_IO
13251RET(18)
13252}
13253
13254// MOVEW
13255OPCODE(0x303C)
13256{
13257 u32 adr, res;
13258 u32 src, dst;
13259
13260 FETCH_WORD(res);
13261 flag_C = 0;
13262 flag_V = 0;
13263 flag_NotZ = res;
13264 flag_N = res >> 8;
13265 DREGu16((Opcode >> 9) & 7) = res;
13266RET(8)
13267}
13268
13269// MOVEW
13270OPCODE(0x30BC)
13271{
13272 u32 adr, res;
13273 u32 src, dst;
13274
13275 FETCH_WORD(res);
13276 flag_C = 0;
13277 flag_V = 0;
13278 flag_NotZ = res;
13279 flag_N = res >> 8;
13280 adr = AREG((Opcode >> 9) & 7);
13281 PRE_IO
13282 WRITE_WORD_F(adr, res)
13283 POST_IO
13284RET(12)
13285}
13286
13287// MOVEW
13288OPCODE(0x30FC)
13289{
13290 u32 adr, res;
13291 u32 src, dst;
13292
13293 FETCH_WORD(res);
13294 flag_C = 0;
13295 flag_V = 0;
13296 flag_NotZ = res;
13297 flag_N = res >> 8;
13298 adr = AREG((Opcode >> 9) & 7);
13299 AREG((Opcode >> 9) & 7) += 2;
13300 PRE_IO
13301 WRITE_WORD_F(adr, res)
13302 POST_IO
13303RET(12)
13304}
13305
13306// MOVEW
13307OPCODE(0x313C)
13308{
13309 u32 adr, res;
13310 u32 src, dst;
13311
13312 FETCH_WORD(res);
13313 flag_C = 0;
13314 flag_V = 0;
13315 flag_NotZ = res;
13316 flag_N = res >> 8;
13317 adr = AREG((Opcode >> 9) & 7) - 2;
13318 AREG((Opcode >> 9) & 7) = adr;
13319 PRE_IO
13320 WRITE_WORD_F(adr, res)
13321 POST_IO
13322RET(12)
13323}
13324
13325// MOVEW
13326OPCODE(0x317C)
13327{
13328 u32 adr, res;
13329 u32 src, dst;
13330
13331 FETCH_WORD(res);
13332 flag_C = 0;
13333 flag_V = 0;
13334 flag_NotZ = res;
13335 flag_N = res >> 8;
13336 FETCH_SWORD(adr);
13337 adr += AREG((Opcode >> 9) & 7);
13338 PRE_IO
13339 WRITE_WORD_F(adr, res)
13340 POST_IO
13341RET(16)
13342}
13343
13344// MOVEW
13345OPCODE(0x31BC)
13346{
13347 u32 adr, res;
13348 u32 src, dst;
13349
13350 FETCH_WORD(res);
13351 flag_C = 0;
13352 flag_V = 0;
13353 flag_NotZ = res;
13354 flag_N = res >> 8;
13355 adr = AREG((Opcode >> 9) & 7);
13356 DECODE_EXT_WORD
13357 PRE_IO
13358 WRITE_WORD_F(adr, res)
13359 POST_IO
13360RET(18)
13361}
13362
13363// MOVEW
13364OPCODE(0x31FC)
13365{
13366 u32 adr, res;
13367 u32 src, dst;
13368
13369 FETCH_WORD(res);
13370 flag_C = 0;
13371 flag_V = 0;
13372 flag_NotZ = res;
13373 flag_N = res >> 8;
13374 FETCH_SWORD(adr);
13375 PRE_IO
13376 WRITE_WORD_F(adr, res)
13377 POST_IO
13378RET(16)
13379}
13380
13381// MOVEW
13382OPCODE(0x33FC)
13383{
13384 u32 adr, res;
13385 u32 src, dst;
13386
13387 FETCH_WORD(res);
13388 flag_C = 0;
13389 flag_V = 0;
13390 flag_NotZ = res;
13391 flag_N = res >> 8;
13392 FETCH_LONG(adr);
13393 PRE_IO
13394 WRITE_WORD_F(adr, res)
13395 POST_IO
13396RET(20)
13397}
13398
13399// MOVEW
13400OPCODE(0x3EFC)
13401{
13402 u32 adr, res;
13403 u32 src, dst;
13404
13405 FETCH_WORD(res);
13406 flag_C = 0;
13407 flag_V = 0;
13408 flag_NotZ = res;
13409 flag_N = res >> 8;
13410 adr = AREG(7);
13411 AREG(7) += 2;
13412 PRE_IO
13413 WRITE_WORD_F(adr, res)
13414 POST_IO
13415RET(12)
13416}
13417
13418// MOVEW
13419OPCODE(0x3F3C)
13420{
13421 u32 adr, res;
13422 u32 src, dst;
13423
13424 FETCH_WORD(res);
13425 flag_C = 0;
13426 flag_V = 0;
13427 flag_NotZ = res;
13428 flag_N = res >> 8;
13429 adr = AREG(7) - 2;
13430 AREG(7) = adr;
13431 PRE_IO
13432 WRITE_WORD_F(adr, res)
13433 POST_IO
13434RET(12)
13435}
13436
13437// MOVEW
13438OPCODE(0x301F)
13439{
13440 u32 adr, res;
13441 u32 src, dst;
13442
13443 adr = AREG(7);
13444 AREG(7) += 2;
13445 PRE_IO
13446 READ_WORD_F(adr, res)
13447 flag_C = 0;
13448 flag_V = 0;
13449 flag_NotZ = res;
13450 flag_N = res >> 8;
13451 DREGu16((Opcode >> 9) & 7) = res;
13452 POST_IO
13453RET(8)
13454}
13455
13456// MOVEW
13457OPCODE(0x309F)
13458{
13459 u32 adr, res;
13460 u32 src, dst;
13461
13462 adr = AREG(7);
13463 AREG(7) += 2;
13464 PRE_IO
13465 READ_WORD_F(adr, res)
13466 flag_C = 0;
13467 flag_V = 0;
13468 flag_NotZ = res;
13469 flag_N = res >> 8;
13470 adr = AREG((Opcode >> 9) & 7);
13471 WRITE_WORD_F(adr, res)
13472 POST_IO
13473RET(12)
13474}
13475
13476// MOVEW
13477OPCODE(0x30DF)
13478{
13479 u32 adr, res;
13480 u32 src, dst;
13481
13482 adr = AREG(7);
13483 AREG(7) += 2;
13484 PRE_IO
13485 READ_WORD_F(adr, res)
13486 flag_C = 0;
13487 flag_V = 0;
13488 flag_NotZ = res;
13489 flag_N = res >> 8;
13490 adr = AREG((Opcode >> 9) & 7);
13491 AREG((Opcode >> 9) & 7) += 2;
13492 WRITE_WORD_F(adr, res)
13493 POST_IO
13494RET(12)
13495}
13496
13497// MOVEW
13498OPCODE(0x311F)
13499{
13500 u32 adr, res;
13501 u32 src, dst;
13502
13503 adr = AREG(7);
13504 AREG(7) += 2;
13505 PRE_IO
13506 READ_WORD_F(adr, res)
13507 flag_C = 0;
13508 flag_V = 0;
13509 flag_NotZ = res;
13510 flag_N = res >> 8;
13511 adr = AREG((Opcode >> 9) & 7) - 2;
13512 AREG((Opcode >> 9) & 7) = adr;
13513 WRITE_WORD_F(adr, res)
13514 POST_IO
13515RET(12)
13516}
13517
13518// MOVEW
13519OPCODE(0x315F)
13520{
13521 u32 adr, res;
13522 u32 src, dst;
13523
13524 adr = AREG(7);
13525 AREG(7) += 2;
13526 PRE_IO
13527 READ_WORD_F(adr, res)
13528 flag_C = 0;
13529 flag_V = 0;
13530 flag_NotZ = res;
13531 flag_N = res >> 8;
13532 FETCH_SWORD(adr);
13533 adr += AREG((Opcode >> 9) & 7);
13534 WRITE_WORD_F(adr, res)
13535 POST_IO
13536RET(16)
13537}
13538
13539// MOVEW
13540OPCODE(0x319F)
13541{
13542 u32 adr, res;
13543 u32 src, dst;
13544
13545 adr = AREG(7);
13546 AREG(7) += 2;
13547 PRE_IO
13548 READ_WORD_F(adr, res)
13549 flag_C = 0;
13550 flag_V = 0;
13551 flag_NotZ = res;
13552 flag_N = res >> 8;
13553 adr = AREG((Opcode >> 9) & 7);
13554 DECODE_EXT_WORD
13555 WRITE_WORD_F(adr, res)
13556 POST_IO
13557RET(18)
13558}
13559
13560// MOVEW
13561OPCODE(0x31DF)
13562{
13563 u32 adr, res;
13564 u32 src, dst;
13565
13566 adr = AREG(7);
13567 AREG(7) += 2;
13568 PRE_IO
13569 READ_WORD_F(adr, res)
13570 flag_C = 0;
13571 flag_V = 0;
13572 flag_NotZ = res;
13573 flag_N = res >> 8;
13574 FETCH_SWORD(adr);
13575 WRITE_WORD_F(adr, res)
13576 POST_IO
13577RET(16)
13578}
13579
13580// MOVEW
13581OPCODE(0x33DF)
13582{
13583 u32 adr, res;
13584 u32 src, dst;
13585
13586 adr = AREG(7);
13587 AREG(7) += 2;
13588 PRE_IO
13589 READ_WORD_F(adr, res)
13590 flag_C = 0;
13591 flag_V = 0;
13592 flag_NotZ = res;
13593 flag_N = res >> 8;
13594 FETCH_LONG(adr);
13595 WRITE_WORD_F(adr, res)
13596 POST_IO
13597RET(20)
13598}
13599
13600// MOVEW
13601OPCODE(0x3EDF)
13602{
13603 u32 adr, res;
13604 u32 src, dst;
13605
13606 adr = AREG(7);
13607 AREG(7) += 2;
13608 PRE_IO
13609 READ_WORD_F(adr, res)
13610 flag_C = 0;
13611 flag_V = 0;
13612 flag_NotZ = res;
13613 flag_N = res >> 8;
13614 adr = AREG(7);
13615 AREG(7) += 2;
13616 WRITE_WORD_F(adr, res)
13617 POST_IO
13618RET(12)
13619}
13620
13621// MOVEW
13622OPCODE(0x3F1F)
13623{
13624 u32 adr, res;
13625 u32 src, dst;
13626
13627 adr = AREG(7);
13628 AREG(7) += 2;
13629 PRE_IO
13630 READ_WORD_F(adr, res)
13631 flag_C = 0;
13632 flag_V = 0;
13633 flag_NotZ = res;
13634 flag_N = res >> 8;
13635 adr = AREG(7) - 2;
13636 AREG(7) = adr;
13637 WRITE_WORD_F(adr, res)
13638 POST_IO
13639RET(12)
13640}
13641
13642// MOVEW
13643OPCODE(0x3027)
13644{
13645 u32 adr, res;
13646 u32 src, dst;
13647
13648 adr = AREG(7) - 2;
13649 AREG(7) = adr;
13650 PRE_IO
13651 READ_WORD_F(adr, res)
13652 flag_C = 0;
13653 flag_V = 0;
13654 flag_NotZ = res;
13655 flag_N = res >> 8;
13656 DREGu16((Opcode >> 9) & 7) = res;
13657 POST_IO
13658RET(10)
13659}
13660
13661// MOVEW
13662OPCODE(0x30A7)
13663{
13664 u32 adr, res;
13665 u32 src, dst;
13666
13667 adr = AREG(7) - 2;
13668 AREG(7) = adr;
13669 PRE_IO
13670 READ_WORD_F(adr, res)
13671 flag_C = 0;
13672 flag_V = 0;
13673 flag_NotZ = res;
13674 flag_N = res >> 8;
13675 adr = AREG((Opcode >> 9) & 7);
13676 WRITE_WORD_F(adr, res)
13677 POST_IO
13678RET(14)
13679}
13680
13681// MOVEW
13682OPCODE(0x30E7)
13683{
13684 u32 adr, res;
13685 u32 src, dst;
13686
13687 adr = AREG(7) - 2;
13688 AREG(7) = adr;
13689 PRE_IO
13690 READ_WORD_F(adr, res)
13691 flag_C = 0;
13692 flag_V = 0;
13693 flag_NotZ = res;
13694 flag_N = res >> 8;
13695 adr = AREG((Opcode >> 9) & 7);
13696 AREG((Opcode >> 9) & 7) += 2;
13697 WRITE_WORD_F(adr, res)
13698 POST_IO
13699RET(14)
13700}
13701
13702// MOVEW
13703OPCODE(0x3127)
13704{
13705 u32 adr, res;
13706 u32 src, dst;
13707
13708 adr = AREG(7) - 2;
13709 AREG(7) = adr;
13710 PRE_IO
13711 READ_WORD_F(adr, res)
13712 flag_C = 0;
13713 flag_V = 0;
13714 flag_NotZ = res;
13715 flag_N = res >> 8;
13716 adr = AREG((Opcode >> 9) & 7) - 2;
13717 AREG((Opcode >> 9) & 7) = adr;
13718 WRITE_WORD_F(adr, res)
13719 POST_IO
13720RET(14)
13721}
13722
13723// MOVEW
13724OPCODE(0x3167)
13725{
13726 u32 adr, res;
13727 u32 src, dst;
13728
13729 adr = AREG(7) - 2;
13730 AREG(7) = adr;
13731 PRE_IO
13732 READ_WORD_F(adr, res)
13733 flag_C = 0;
13734 flag_V = 0;
13735 flag_NotZ = res;
13736 flag_N = res >> 8;
13737 FETCH_SWORD(adr);
13738 adr += AREG((Opcode >> 9) & 7);
13739 WRITE_WORD_F(adr, res)
13740 POST_IO
13741RET(18)
13742}
13743
13744// MOVEW
13745OPCODE(0x31A7)
13746{
13747 u32 adr, res;
13748 u32 src, dst;
13749
13750 adr = AREG(7) - 2;
13751 AREG(7) = adr;
13752 PRE_IO
13753 READ_WORD_F(adr, res)
13754 flag_C = 0;
13755 flag_V = 0;
13756 flag_NotZ = res;
13757 flag_N = res >> 8;
13758 adr = AREG((Opcode >> 9) & 7);
13759 DECODE_EXT_WORD
13760 WRITE_WORD_F(adr, res)
13761 POST_IO
13762RET(20)
13763}
13764
13765// MOVEW
13766OPCODE(0x31E7)
13767{
13768 u32 adr, res;
13769 u32 src, dst;
13770
13771 adr = AREG(7) - 2;
13772 AREG(7) = adr;
13773 PRE_IO
13774 READ_WORD_F(adr, res)
13775 flag_C = 0;
13776 flag_V = 0;
13777 flag_NotZ = res;
13778 flag_N = res >> 8;
13779 FETCH_SWORD(adr);
13780 WRITE_WORD_F(adr, res)
13781 POST_IO
13782RET(18)
13783}
13784
13785// MOVEW
13786OPCODE(0x33E7)
13787{
13788 u32 adr, res;
13789 u32 src, dst;
13790
13791 adr = AREG(7) - 2;
13792 AREG(7) = adr;
13793 PRE_IO
13794 READ_WORD_F(adr, res)
13795 flag_C = 0;
13796 flag_V = 0;
13797 flag_NotZ = res;
13798 flag_N = res >> 8;
13799 FETCH_LONG(adr);
13800 WRITE_WORD_F(adr, res)
13801 POST_IO
13802RET(22)
13803}
13804
13805// MOVEW
13806OPCODE(0x3EE7)
13807{
13808 u32 adr, res;
13809 u32 src, dst;
13810
13811 adr = AREG(7) - 2;
13812 AREG(7) = adr;
13813 PRE_IO
13814 READ_WORD_F(adr, res)
13815 flag_C = 0;
13816 flag_V = 0;
13817 flag_NotZ = res;
13818 flag_N = res >> 8;
13819 adr = AREG(7);
13820 AREG(7) += 2;
13821 WRITE_WORD_F(adr, res)
13822 POST_IO
13823RET(14)
13824}
13825
13826// MOVEW
13827OPCODE(0x3F27)
13828{
13829 u32 adr, res;
13830 u32 src, dst;
13831
13832 adr = AREG(7) - 2;
13833 AREG(7) = adr;
13834 PRE_IO
13835 READ_WORD_F(adr, res)
13836 flag_C = 0;
13837 flag_V = 0;
13838 flag_NotZ = res;
13839 flag_N = res >> 8;
13840 adr = AREG(7) - 2;
13841 AREG(7) = adr;
13842 WRITE_WORD_F(adr, res)
13843 POST_IO
13844RET(14)
13845}
13846
13847// MOVEAW
13848OPCODE(0x3040)
13849{
13850 u32 adr, res;
13851 u32 src, dst;
13852
13853 res = (s32)DREGs16((Opcode >> 0) & 7);
13854 AREG((Opcode >> 9) & 7) = res;
13855RET(4)
13856}
13857
13858// MOVEAW
13859OPCODE(0x3048)
13860{
13861 u32 adr, res;
13862 u32 src, dst;
13863
13864 res = (s32)AREGs16((Opcode >> 0) & 7);
13865 AREG((Opcode >> 9) & 7) = res;
13866RET(4)
13867}
13868
13869// MOVEAW
13870OPCODE(0x3050)
13871{
13872 u32 adr, res;
13873 u32 src, dst;
13874
13875 adr = AREG((Opcode >> 0) & 7);
13876 PRE_IO
13877 READSX_WORD_F(adr, res)
13878 AREG((Opcode >> 9) & 7) = res;
13879 POST_IO
13880RET(8)
13881}
13882
13883// MOVEAW
13884OPCODE(0x3058)
13885{
13886 u32 adr, res;
13887 u32 src, dst;
13888
13889 adr = AREG((Opcode >> 0) & 7);
13890 AREG((Opcode >> 0) & 7) += 2;
13891 PRE_IO
13892 READSX_WORD_F(adr, res)
13893 AREG((Opcode >> 9) & 7) = res;
13894 POST_IO
13895RET(8)
13896}
13897
13898// MOVEAW
13899OPCODE(0x3060)
13900{
13901 u32 adr, res;
13902 u32 src, dst;
13903
13904 adr = AREG((Opcode >> 0) & 7) - 2;
13905 AREG((Opcode >> 0) & 7) = adr;
13906 PRE_IO
13907 READSX_WORD_F(adr, res)
13908 AREG((Opcode >> 9) & 7) = res;
13909 POST_IO
13910RET(10)
13911}
13912
13913// MOVEAW
13914OPCODE(0x3068)
13915{
13916 u32 adr, res;
13917 u32 src, dst;
13918
13919 FETCH_SWORD(adr);
13920 adr += AREG((Opcode >> 0) & 7);
13921 PRE_IO
13922 READSX_WORD_F(adr, res)
13923 AREG((Opcode >> 9) & 7) = res;
13924 POST_IO
13925RET(12)
13926}
13927
13928// MOVEAW
13929OPCODE(0x3070)
13930{
13931 u32 adr, res;
13932 u32 src, dst;
13933
13934 adr = AREG((Opcode >> 0) & 7);
13935 DECODE_EXT_WORD
13936 PRE_IO
13937 READSX_WORD_F(adr, res)
13938 AREG((Opcode >> 9) & 7) = res;
13939 POST_IO
13940RET(14)
13941}
13942
13943// MOVEAW
13944OPCODE(0x3078)
13945{
13946 u32 adr, res;
13947 u32 src, dst;
13948
13949 FETCH_SWORD(adr);
13950 PRE_IO
13951 READSX_WORD_F(adr, res)
13952 AREG((Opcode >> 9) & 7) = res;
13953 POST_IO
13954RET(12)
13955}
13956
13957// MOVEAW
13958OPCODE(0x3079)
13959{
13960 u32 adr, res;
13961 u32 src, dst;
13962
13963 FETCH_LONG(adr);
13964 PRE_IO
13965 READSX_WORD_F(adr, res)
13966 AREG((Opcode >> 9) & 7) = res;
13967 POST_IO
13968RET(16)
13969}
13970
13971// MOVEAW
13972OPCODE(0x307A)
13973{
13974 u32 adr, res;
13975 u32 src, dst;
13976
13977 adr = GET_SWORD + ((u32)(PC) - BasePC);
13978 PC++;
13979 PRE_IO
13980 READSX_WORD_F(adr, res)
13981 AREG((Opcode >> 9) & 7) = res;
13982 POST_IO
13983RET(12)
13984}
13985
13986// MOVEAW
13987OPCODE(0x307B)
13988{
13989 u32 adr, res;
13990 u32 src, dst;
13991
13992 adr = (u32)(PC) - BasePC;
13993 DECODE_EXT_WORD
13994 PRE_IO
13995 READSX_WORD_F(adr, res)
13996 AREG((Opcode >> 9) & 7) = res;
13997 POST_IO
13998RET(14)
13999}
14000
14001// MOVEAW
14002OPCODE(0x307C)
14003{
14004 u32 adr, res;
14005 u32 src, dst;
14006
14007 FETCH_SWORD(res);
14008 AREG((Opcode >> 9) & 7) = res;
14009RET(8)
14010}
14011
14012// MOVEAW
14013OPCODE(0x305F)
14014{
14015 u32 adr, res;
14016 u32 src, dst;
14017
14018 adr = AREG(7);
14019 AREG(7) += 2;
14020 PRE_IO
14021 READSX_WORD_F(adr, res)
14022 AREG((Opcode >> 9) & 7) = res;
14023 POST_IO
14024RET(8)
14025}
14026
14027// MOVEAW
14028OPCODE(0x3067)
14029{
14030 u32 adr, res;
14031 u32 src, dst;
14032
14033 adr = AREG(7) - 2;
14034 AREG(7) = adr;
14035 PRE_IO
14036 READSX_WORD_F(adr, res)
14037 AREG((Opcode >> 9) & 7) = res;
14038 POST_IO
14039RET(10)
14040}
14041
14042// NEGX
14043OPCODE(0x4000)
14044{
14045 u32 adr, res;
14046 u32 src, dst;
14047
14048 src = DREGu8((Opcode >> 0) & 7);
14049 res = -src - ((flag_X >> 8) & 1);
14050 flag_V = res & src;
14051 flag_N = flag_X = flag_C = res;
14052 flag_NotZ |= res & 0xFF;
14053 DREGu8((Opcode >> 0) & 7) = res;
14054RET(4)
14055}
14056
14057// NEGX
14058OPCODE(0x4010)
14059{
14060 u32 adr, res;
14061 u32 src, dst;
14062
14063 adr = AREG((Opcode >> 0) & 7);
14064 PRE_IO
14065 READ_BYTE_F(adr, src)
14066 res = -src - ((flag_X >> 8) & 1);
14067 flag_V = res & src;
14068 flag_N = flag_X = flag_C = res;
14069 flag_NotZ |= res & 0xFF;
14070 WRITE_BYTE_F(adr, res)
14071 POST_IO
14072RET(12)
14073}
14074
14075// NEGX
14076OPCODE(0x4018)
14077{
14078 u32 adr, res;
14079 u32 src, dst;
14080
14081 adr = AREG((Opcode >> 0) & 7);
14082 AREG((Opcode >> 0) & 7) += 1;
14083 PRE_IO
14084 READ_BYTE_F(adr, src)
14085 res = -src - ((flag_X >> 8) & 1);
14086 flag_V = res & src;
14087 flag_N = flag_X = flag_C = res;
14088 flag_NotZ |= res & 0xFF;
14089 WRITE_BYTE_F(adr, res)
14090 POST_IO
14091RET(12)
14092}
14093
14094// NEGX
14095OPCODE(0x4020)
14096{
14097 u32 adr, res;
14098 u32 src, dst;
14099
14100 adr = AREG((Opcode >> 0) & 7) - 1;
14101 AREG((Opcode >> 0) & 7) = adr;
14102 PRE_IO
14103 READ_BYTE_F(adr, src)
14104 res = -src - ((flag_X >> 8) & 1);
14105 flag_V = res & src;
14106 flag_N = flag_X = flag_C = res;
14107 flag_NotZ |= res & 0xFF;
14108 WRITE_BYTE_F(adr, res)
14109 POST_IO
14110RET(14)
14111}
14112
14113// NEGX
14114OPCODE(0x4028)
14115{
14116 u32 adr, res;
14117 u32 src, dst;
14118
14119 FETCH_SWORD(adr);
14120 adr += AREG((Opcode >> 0) & 7);
14121 PRE_IO
14122 READ_BYTE_F(adr, src)
14123 res = -src - ((flag_X >> 8) & 1);
14124 flag_V = res & src;
14125 flag_N = flag_X = flag_C = res;
14126 flag_NotZ |= res & 0xFF;
14127 WRITE_BYTE_F(adr, res)
14128 POST_IO
14129RET(16)
14130}
14131
14132// NEGX
14133OPCODE(0x4030)
14134{
14135 u32 adr, res;
14136 u32 src, dst;
14137
14138 adr = AREG((Opcode >> 0) & 7);
14139 DECODE_EXT_WORD
14140 PRE_IO
14141 READ_BYTE_F(adr, src)
14142 res = -src - ((flag_X >> 8) & 1);
14143 flag_V = res & src;
14144 flag_N = flag_X = flag_C = res;
14145 flag_NotZ |= res & 0xFF;
14146 WRITE_BYTE_F(adr, res)
14147 POST_IO
14148RET(18)
14149}
14150
14151// NEGX
14152OPCODE(0x4038)
14153{
14154 u32 adr, res;
14155 u32 src, dst;
14156
14157 FETCH_SWORD(adr);
14158 PRE_IO
14159 READ_BYTE_F(adr, src)
14160 res = -src - ((flag_X >> 8) & 1);
14161 flag_V = res & src;
14162 flag_N = flag_X = flag_C = res;
14163 flag_NotZ |= res & 0xFF;
14164 WRITE_BYTE_F(adr, res)
14165 POST_IO
14166RET(16)
14167}
14168
14169// NEGX
14170OPCODE(0x4039)
14171{
14172 u32 adr, res;
14173 u32 src, dst;
14174
14175 FETCH_LONG(adr);
14176 PRE_IO
14177 READ_BYTE_F(adr, src)
14178 res = -src - ((flag_X >> 8) & 1);
14179 flag_V = res & src;
14180 flag_N = flag_X = flag_C = res;
14181 flag_NotZ |= res & 0xFF;
14182 WRITE_BYTE_F(adr, res)
14183 POST_IO
14184RET(20)
14185}
14186
14187// NEGX
14188OPCODE(0x401F)
14189{
14190 u32 adr, res;
14191 u32 src, dst;
14192
14193 adr = AREG(7);
14194 AREG(7) += 2;
14195 PRE_IO
14196 READ_BYTE_F(adr, src)
14197 res = -src - ((flag_X >> 8) & 1);
14198 flag_V = res & src;
14199 flag_N = flag_X = flag_C = res;
14200 flag_NotZ |= res & 0xFF;
14201 WRITE_BYTE_F(adr, res)
14202 POST_IO
14203RET(12)
14204}
14205
14206// NEGX
14207OPCODE(0x4027)
14208{
14209 u32 adr, res;
14210 u32 src, dst;
14211
14212 adr = AREG(7) - 2;
14213 AREG(7) = adr;
14214 PRE_IO
14215 READ_BYTE_F(adr, src)
14216 res = -src - ((flag_X >> 8) & 1);
14217 flag_V = res & src;
14218 flag_N = flag_X = flag_C = res;
14219 flag_NotZ |= res & 0xFF;
14220 WRITE_BYTE_F(adr, res)
14221 POST_IO
14222RET(14)
14223}
14224
14225// NEGX
14226OPCODE(0x4040)
14227{
14228 u32 adr, res;
14229 u32 src, dst;
14230
14231 src = DREGu16((Opcode >> 0) & 7);
14232 res = -src - ((flag_X >> 8) & 1);
14233 flag_V = (res & src) >> 8;
14234 flag_N = flag_X = flag_C = res >> 8;
14235 flag_NotZ |= res & 0xFFFF;
14236 DREGu16((Opcode >> 0) & 7) = res;
14237RET(4)
14238}
14239
14240// NEGX
14241OPCODE(0x4050)
14242{
14243 u32 adr, res;
14244 u32 src, dst;
14245
14246 adr = AREG((Opcode >> 0) & 7);
14247 PRE_IO
14248 READ_WORD_F(adr, src)
14249 res = -src - ((flag_X >> 8) & 1);
14250 flag_V = (res & src) >> 8;
14251 flag_N = flag_X = flag_C = res >> 8;
14252 flag_NotZ |= res & 0xFFFF;
14253 WRITE_WORD_F(adr, res)
14254 POST_IO
14255RET(12)
14256}
14257
14258// NEGX
14259OPCODE(0x4058)
14260{
14261 u32 adr, res;
14262 u32 src, dst;
14263
14264 adr = AREG((Opcode >> 0) & 7);
14265 AREG((Opcode >> 0) & 7) += 2;
14266 PRE_IO
14267 READ_WORD_F(adr, src)
14268 res = -src - ((flag_X >> 8) & 1);
14269 flag_V = (res & src) >> 8;
14270 flag_N = flag_X = flag_C = res >> 8;
14271 flag_NotZ |= res & 0xFFFF;
14272 WRITE_WORD_F(adr, res)
14273 POST_IO
14274RET(12)
14275}
14276
14277// NEGX
14278OPCODE(0x4060)
14279{
14280 u32 adr, res;
14281 u32 src, dst;
14282
14283 adr = AREG((Opcode >> 0) & 7) - 2;
14284 AREG((Opcode >> 0) & 7) = adr;
14285 PRE_IO
14286 READ_WORD_F(adr, src)
14287 res = -src - ((flag_X >> 8) & 1);
14288 flag_V = (res & src) >> 8;
14289 flag_N = flag_X = flag_C = res >> 8;
14290 flag_NotZ |= res & 0xFFFF;
14291 WRITE_WORD_F(adr, res)
14292 POST_IO
14293RET(14)
14294}
14295
14296// NEGX
14297OPCODE(0x4068)
14298{
14299 u32 adr, res;
14300 u32 src, dst;
14301
14302 FETCH_SWORD(adr);
14303 adr += AREG((Opcode >> 0) & 7);
14304 PRE_IO
14305 READ_WORD_F(adr, src)
14306 res = -src - ((flag_X >> 8) & 1);
14307 flag_V = (res & src) >> 8;
14308 flag_N = flag_X = flag_C = res >> 8;
14309 flag_NotZ |= res & 0xFFFF;
14310 WRITE_WORD_F(adr, res)
14311 POST_IO
14312RET(16)
14313}
14314
14315// NEGX
14316OPCODE(0x4070)
14317{
14318 u32 adr, res;
14319 u32 src, dst;
14320
14321 adr = AREG((Opcode >> 0) & 7);
14322 DECODE_EXT_WORD
14323 PRE_IO
14324 READ_WORD_F(adr, src)
14325 res = -src - ((flag_X >> 8) & 1);
14326 flag_V = (res & src) >> 8;
14327 flag_N = flag_X = flag_C = res >> 8;
14328 flag_NotZ |= res & 0xFFFF;
14329 WRITE_WORD_F(adr, res)
14330 POST_IO
14331RET(18)
14332}
14333
14334// NEGX
14335OPCODE(0x4078)
14336{
14337 u32 adr, res;
14338 u32 src, dst;
14339
14340 FETCH_SWORD(adr);
14341 PRE_IO
14342 READ_WORD_F(adr, src)
14343 res = -src - ((flag_X >> 8) & 1);
14344 flag_V = (res & src) >> 8;
14345 flag_N = flag_X = flag_C = res >> 8;
14346 flag_NotZ |= res & 0xFFFF;
14347 WRITE_WORD_F(adr, res)
14348 POST_IO
14349RET(16)
14350}
14351
14352// NEGX
14353OPCODE(0x4079)
14354{
14355 u32 adr, res;
14356 u32 src, dst;
14357
14358 FETCH_LONG(adr);
14359 PRE_IO
14360 READ_WORD_F(adr, src)
14361 res = -src - ((flag_X >> 8) & 1);
14362 flag_V = (res & src) >> 8;
14363 flag_N = flag_X = flag_C = res >> 8;
14364 flag_NotZ |= res & 0xFFFF;
14365 WRITE_WORD_F(adr, res)
14366 POST_IO
14367RET(20)
14368}
14369
14370// NEGX
14371OPCODE(0x405F)
14372{
14373 u32 adr, res;
14374 u32 src, dst;
14375
14376 adr = AREG(7);
14377 AREG(7) += 2;
14378 PRE_IO
14379 READ_WORD_F(adr, src)
14380 res = -src - ((flag_X >> 8) & 1);
14381 flag_V = (res & src) >> 8;
14382 flag_N = flag_X = flag_C = res >> 8;
14383 flag_NotZ |= res & 0xFFFF;
14384 WRITE_WORD_F(adr, res)
14385 POST_IO
14386RET(12)
14387}
14388
14389// NEGX
14390OPCODE(0x4067)
14391{
14392 u32 adr, res;
14393 u32 src, dst;
14394
14395 adr = AREG(7) - 2;
14396 AREG(7) = adr;
14397 PRE_IO
14398 READ_WORD_F(adr, src)
14399 res = -src - ((flag_X >> 8) & 1);
14400 flag_V = (res & src) >> 8;
14401 flag_N = flag_X = flag_C = res >> 8;
14402 flag_NotZ |= res & 0xFFFF;
14403 WRITE_WORD_F(adr, res)
14404 POST_IO
14405RET(14)
14406}
14407
14408// NEGX
14409OPCODE(0x4080)
14410{
14411 u32 adr, res;
14412 u32 src, dst;
14413
14414 src = DREGu32((Opcode >> 0) & 7);
14415 res = -src - ((flag_X >> 8) & 1);
14416 flag_NotZ |= res;
14417 flag_V = (res & src) >> 24;
14418flag_X = flag_C = (res?1:0)<<8;
14419// flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
14420 flag_N = res >> 24;
14421 DREGu32((Opcode >> 0) & 7) = res;
14422RET(6)
14423}
14424
14425// NEGX
14426OPCODE(0x4090)
14427{
14428 u32 adr, res;
14429 u32 src, dst;
14430
14431 adr = AREG((Opcode >> 0) & 7);
14432 PRE_IO
14433 READ_LONG_F(adr, src)
14434 res = -src - ((flag_X >> 8) & 1);
14435 flag_NotZ |= res;
14436 flag_V = (res & src) >> 24;
14437flag_X = flag_C = (res?1:0)<<8;
14438// flag_X = flag_C = ((src & res & 1) | (src >> 1) | (res >> 1)) >> 23;
14439 flag_N = res >> 24;
14440 WRITE_LONG_F(adr, res)
14441 POST_IO
14442RET(20)
14443}
14444
14445// NEGX
14446OPCODE(0x4098)
14447{
14448 u32 adr, res;
14449 u32 src, dst;
14450
14451 adr = AREG((Opcode >> 0) & 7);
14452 AREG((Opcode >> 0) & 7) += 4;
14453 PRE_IO
14454 READ_LONG_F(adr, src)
14455 res = -src - ((flag_X >> 8) & 1);
14456 flag_NotZ |= res;
14457 flag_V = (res & src) >> 24;
14458flag_X = flag_C = (res?1:0)<<8;
14459// flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
14460 flag_N = res >> 24;
14461 WRITE_LONG_F(adr, res)
14462 POST_IO
14463RET(20)
14464}
14465
14466// NEGX
14467OPCODE(0x40A0)
14468{
14469 u32 adr, res;
14470 u32 src, dst;
14471
14472 adr = AREG((Opcode >> 0) & 7) - 4;
14473 AREG((Opcode >> 0) & 7) = adr;
14474 PRE_IO
14475 READ_LONG_F(adr, src)
14476 res = -src - ((flag_X >> 8) & 1);
14477 flag_NotZ |= res;
14478 flag_V = (res & src) >> 24;
14479flag_X = flag_C = (res?1:0)<<8;
14480// flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
14481 flag_N = res >> 24;
14482 WRITE_LONG_F(adr, res)
14483 POST_IO
14484RET(22)
14485}
14486
14487// NEGX
14488OPCODE(0x40A8)
14489{
14490 u32 adr, res;
14491 u32 src, dst;
14492
14493 FETCH_SWORD(adr);
14494 adr += AREG((Opcode >> 0) & 7);
14495 PRE_IO
14496 READ_LONG_F(adr, src)
14497 res = -src - ((flag_X >> 8) & 1);
14498 flag_NotZ |= res;
14499 flag_V = (res & src) >> 24;
14500flag_X = flag_C = (res?1:0)<<8;
14501// flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
14502 flag_N = res >> 24;
14503 WRITE_LONG_F(adr, res)
14504 POST_IO
14505RET(24)
14506}
14507
14508// NEGX
14509OPCODE(0x40B0)
14510{
14511 u32 adr, res;
14512 u32 src, dst;
14513
14514 adr = AREG((Opcode >> 0) & 7);
14515 DECODE_EXT_WORD
14516 PRE_IO
14517 READ_LONG_F(adr, src)
14518 res = -src - ((flag_X >> 8) & 1);
14519 flag_NotZ |= res;
14520 flag_V = (res & src) >> 24;
14521flag_X = flag_C = (res?1:0)<<8;
14522// flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
14523 flag_N = res >> 24;
14524 WRITE_LONG_F(adr, res)
14525 POST_IO
14526RET(26)
14527}
14528
14529// NEGX
14530OPCODE(0x40B8)
14531{
14532 u32 adr, res;
14533 u32 src, dst;
14534
14535 FETCH_SWORD(adr);
14536 PRE_IO
14537 READ_LONG_F(adr, src)
14538 res = -src - ((flag_X >> 8) & 1);
14539 flag_NotZ |= res;
14540 flag_V = (res & src) >> 24;
14541flag_X = flag_C = (res?1:0)<<8;
14542// flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
14543 flag_N = res >> 24;
14544 WRITE_LONG_F(adr, res)
14545 POST_IO
14546RET(24)
14547}
14548
14549// NEGX
14550OPCODE(0x40B9)
14551{
14552 u32 adr, res;
14553 u32 src, dst;
14554
14555 FETCH_LONG(adr);
14556 PRE_IO
14557 READ_LONG_F(adr, src)
14558 res = -src - ((flag_X >> 8) & 1);
14559 flag_NotZ |= res;
14560 flag_V = (res & src) >> 24;
14561flag_X = flag_C = (res?1:0)<<8;
14562// flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
14563 flag_N = res >> 24;
14564 WRITE_LONG_F(adr, res)
14565 POST_IO
14566RET(28)
14567}
14568
14569// NEGX
14570OPCODE(0x409F)
14571{
14572 u32 adr, res;
14573 u32 src, dst;
14574
14575 adr = AREG(7);
14576 AREG(7) += 4;
14577 PRE_IO
14578 READ_LONG_F(adr, src)
14579 res = -src - ((flag_X >> 8) & 1);
14580 flag_NotZ |= res;
14581 flag_V = (res & src) >> 24;
14582flag_X = flag_C = (res?1:0)<<8;
14583// flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
14584 flag_N = res >> 24;
14585 WRITE_LONG_F(adr, res)
14586 POST_IO
14587RET(20)
14588}
14589
14590// NEGX
14591OPCODE(0x40A7)
14592{
14593 u32 adr, res;
14594 u32 src, dst;
14595
14596 adr = AREG(7) - 4;
14597 AREG(7) = adr;
14598 PRE_IO
14599 READ_LONG_F(adr, src)
14600 res = -src - ((flag_X >> 8) & 1);
14601 flag_NotZ |= res;
14602 flag_V = (res & src) >> 24;
14603flag_X = flag_C = (res?1:0)<<8;
14604// flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
14605 flag_N = res >> 24;
14606 WRITE_LONG_F(adr, res)
14607 POST_IO
14608RET(22)
14609}
14610
14611// CLR
14612OPCODE(0x4200)
14613{
14614 u32 adr, res;
14615 u32 src, dst;
14616
14617 res = 0;
14618 flag_N = flag_NotZ = flag_V = flag_C = 0;
14619 DREGu8((Opcode >> 0) & 7) = res;
14620RET(4)
14621}
14622
14623// CLR
14624OPCODE(0x4210)
14625{
14626 u32 adr, res;
14627 u32 src, dst;
14628
14629 adr = AREG((Opcode >> 0) & 7);
14630 res = 0;
14631 flag_N = flag_NotZ = flag_V = flag_C = 0;
14632 PRE_IO
14633 WRITE_BYTE_F(adr, res)
14634 POST_IO
14635RET(12)
14636}
14637
14638// CLR
14639OPCODE(0x4218)
14640{
14641 u32 adr, res;
14642 u32 src, dst;
14643
14644 adr = AREG((Opcode >> 0) & 7);
14645 AREG((Opcode >> 0) & 7) += 1;
14646 res = 0;
14647 flag_N = flag_NotZ = flag_V = flag_C = 0;
14648 PRE_IO
14649 WRITE_BYTE_F(adr, res)
14650 POST_IO
14651RET(12)
14652}
14653
14654// CLR
14655OPCODE(0x4220)
14656{
14657 u32 adr, res;
14658 u32 src, dst;
14659
14660 adr = AREG((Opcode >> 0) & 7) - 1;
14661 AREG((Opcode >> 0) & 7) = adr;
14662 res = 0;
14663 flag_N = flag_NotZ = flag_V = flag_C = 0;
14664 PRE_IO
14665 WRITE_BYTE_F(adr, res)
14666 POST_IO
14667RET(14)
14668}
14669
14670// CLR
14671OPCODE(0x4228)
14672{
14673 u32 adr, res;
14674 u32 src, dst;
14675
14676 FETCH_SWORD(adr);
14677 adr += AREG((Opcode >> 0) & 7);
14678 res = 0;
14679 flag_N = flag_NotZ = flag_V = flag_C = 0;
14680 PRE_IO
14681 WRITE_BYTE_F(adr, res)
14682 POST_IO
14683RET(16)
14684}
14685
14686// CLR
14687OPCODE(0x4230)
14688{
14689 u32 adr, res;
14690 u32 src, dst;
14691
14692 adr = AREG((Opcode >> 0) & 7);
14693 DECODE_EXT_WORD
14694 res = 0;
14695 flag_N = flag_NotZ = flag_V = flag_C = 0;
14696 PRE_IO
14697 WRITE_BYTE_F(adr, res)
14698 POST_IO
14699RET(18)
14700}
14701
14702// CLR
14703OPCODE(0x4238)
14704{
14705 u32 adr, res;
14706 u32 src, dst;
14707
14708 FETCH_SWORD(adr);
14709 res = 0;
14710 flag_N = flag_NotZ = flag_V = flag_C = 0;
14711 PRE_IO
14712 WRITE_BYTE_F(adr, res)
14713 POST_IO
14714RET(16)
14715}
14716
14717// CLR
14718OPCODE(0x4239)
14719{
14720 u32 adr, res;
14721 u32 src, dst;
14722
14723 FETCH_LONG(adr);
14724 res = 0;
14725 flag_N = flag_NotZ = flag_V = flag_C = 0;
14726 PRE_IO
14727 WRITE_BYTE_F(adr, res)
14728 POST_IO
14729RET(20)
14730}
14731
14732// CLR
14733OPCODE(0x421F)
14734{
14735 u32 adr, res;
14736 u32 src, dst;
14737
14738 adr = AREG(7);
14739 AREG(7) += 2;
14740 res = 0;
14741 flag_N = flag_NotZ = flag_V = flag_C = 0;
14742 PRE_IO
14743 WRITE_BYTE_F(adr, res)
14744 POST_IO
14745RET(12)
14746}
14747
14748// CLR
14749OPCODE(0x4227)
14750{
14751 u32 adr, res;
14752 u32 src, dst;
14753
14754 adr = AREG(7) - 2;
14755 AREG(7) = adr;
14756 res = 0;
14757 flag_N = flag_NotZ = flag_V = flag_C = 0;
14758 PRE_IO
14759 WRITE_BYTE_F(adr, res)
14760 POST_IO
14761RET(14)
14762}
14763
14764// CLR
14765OPCODE(0x4240)
14766{
14767 u32 adr, res;
14768 u32 src, dst;
14769
14770 res = 0;
14771 flag_N = flag_NotZ = flag_V = flag_C = 0;
14772 DREGu16((Opcode >> 0) & 7) = res;
14773RET(4)
14774}
14775
14776// CLR
14777OPCODE(0x4250)
14778{
14779 u32 adr, res;
14780 u32 src, dst;
14781
14782 adr = AREG((Opcode >> 0) & 7);
14783 res = 0;
14784 flag_N = flag_NotZ = flag_V = flag_C = 0;
14785 PRE_IO
14786 WRITE_WORD_F(adr, res)
14787 POST_IO
14788RET(12)
14789}
14790
14791// CLR
14792OPCODE(0x4258)
14793{
14794 u32 adr, res;
14795 u32 src, dst;
14796
14797 adr = AREG((Opcode >> 0) & 7);
14798 AREG((Opcode >> 0) & 7) += 2;
14799 res = 0;
14800 flag_N = flag_NotZ = flag_V = flag_C = 0;
14801 PRE_IO
14802 WRITE_WORD_F(adr, res)
14803 POST_IO
14804RET(12)
14805}
14806
14807// CLR
14808OPCODE(0x4260)
14809{
14810 u32 adr, res;
14811 u32 src, dst;
14812
14813 adr = AREG((Opcode >> 0) & 7) - 2;
14814 AREG((Opcode >> 0) & 7) = adr;
14815 res = 0;
14816 flag_N = flag_NotZ = flag_V = flag_C = 0;
14817 PRE_IO
14818 WRITE_WORD_F(adr, res)
14819 POST_IO
14820RET(14)
14821}
14822
14823// CLR
14824OPCODE(0x4268)
14825{
14826 u32 adr, res;
14827 u32 src, dst;
14828
14829 FETCH_SWORD(adr);
14830 adr += AREG((Opcode >> 0) & 7);
14831 res = 0;
14832 flag_N = flag_NotZ = flag_V = flag_C = 0;
14833 PRE_IO
14834 WRITE_WORD_F(adr, res)
14835 POST_IO
14836RET(16)
14837}
14838
14839// CLR
14840OPCODE(0x4270)
14841{
14842 u32 adr, res;
14843 u32 src, dst;
14844
14845 adr = AREG((Opcode >> 0) & 7);
14846 DECODE_EXT_WORD
14847 res = 0;
14848 flag_N = flag_NotZ = flag_V = flag_C = 0;
14849 PRE_IO
14850 WRITE_WORD_F(adr, res)
14851 POST_IO
14852RET(18)
14853}
14854
14855// CLR
14856OPCODE(0x4278)
14857{
14858 u32 adr, res;
14859 u32 src, dst;
14860
14861 FETCH_SWORD(adr);
14862 res = 0;
14863 flag_N = flag_NotZ = flag_V = flag_C = 0;
14864 PRE_IO
14865 WRITE_WORD_F(adr, res)
14866 POST_IO
14867RET(16)
14868}
14869
14870// CLR
14871OPCODE(0x4279)
14872{
14873 u32 adr, res;
14874 u32 src, dst;
14875
14876 FETCH_LONG(adr);
14877 res = 0;
14878 flag_N = flag_NotZ = flag_V = flag_C = 0;
14879 PRE_IO
14880 WRITE_WORD_F(adr, res)
14881 POST_IO
14882RET(20)
14883}
14884
14885// CLR
14886OPCODE(0x425F)
14887{
14888 u32 adr, res;
14889 u32 src, dst;
14890
14891 adr = AREG(7);
14892 AREG(7) += 2;
14893 res = 0;
14894 flag_N = flag_NotZ = flag_V = flag_C = 0;
14895 PRE_IO
14896 WRITE_WORD_F(adr, res)
14897 POST_IO
14898RET(12)
14899}
14900
14901// CLR
14902OPCODE(0x4267)
14903{
14904 u32 adr, res;
14905 u32 src, dst;
14906
14907 adr = AREG(7) - 2;
14908 AREG(7) = adr;
14909 res = 0;
14910 flag_N = flag_NotZ = flag_V = flag_C = 0;
14911 PRE_IO
14912 WRITE_WORD_F(adr, res)
14913 POST_IO
14914RET(14)
14915}
14916
14917// CLR
14918OPCODE(0x4280)
14919{
14920 u32 adr, res;
14921 u32 src, dst;
14922
14923 res = 0;
14924 flag_N = flag_NotZ = flag_V = flag_C = 0;
14925 DREGu32((Opcode >> 0) & 7) = res;
14926RET(6)
14927}
14928
14929// CLR
14930OPCODE(0x4290)
14931{
14932 u32 adr, res;
14933 u32 src, dst;
14934
14935 adr = AREG((Opcode >> 0) & 7);
14936 res = 0;
14937 flag_N = flag_NotZ = flag_V = flag_C = 0;
14938 PRE_IO
14939 WRITE_LONG_F(adr, res)
14940 POST_IO
14941RET(20)
14942}
14943
14944// CLR
14945OPCODE(0x4298)
14946{
14947 u32 adr, res;
14948 u32 src, dst;
14949
14950 adr = AREG((Opcode >> 0) & 7);
14951 AREG((Opcode >> 0) & 7) += 4;
14952 res = 0;
14953 flag_N = flag_NotZ = flag_V = flag_C = 0;
14954 PRE_IO
14955 WRITE_LONG_F(adr, res)
14956 POST_IO
14957RET(20)
14958}
14959
14960// CLR
14961OPCODE(0x42A0)
14962{
14963 u32 adr, res;
14964 u32 src, dst;
14965
14966 adr = AREG((Opcode >> 0) & 7) - 4;
14967 AREG((Opcode >> 0) & 7) = adr;
14968 res = 0;
14969 flag_N = flag_NotZ = flag_V = flag_C = 0;
14970 PRE_IO
14971 WRITE_LONG_F(adr, res)
14972 POST_IO
14973RET(22)
14974}
14975
14976// CLR
14977OPCODE(0x42A8)
14978{
14979 u32 adr, res;
14980 u32 src, dst;
14981
14982 FETCH_SWORD(adr);
14983 adr += AREG((Opcode >> 0) & 7);
14984 res = 0;
14985 flag_N = flag_NotZ = flag_V = flag_C = 0;
14986 PRE_IO
14987 WRITE_LONG_F(adr, res)
14988 POST_IO
14989RET(24)
14990}
14991
14992// CLR
14993OPCODE(0x42B0)
14994{
14995 u32 adr, res;
14996 u32 src, dst;
14997
14998 adr = AREG((Opcode >> 0) & 7);
14999 DECODE_EXT_WORD
15000 res = 0;
15001 flag_N = flag_NotZ = flag_V = flag_C = 0;
15002 PRE_IO
15003 WRITE_LONG_F(adr, res)
15004 POST_IO
15005RET(26)
15006}
15007
15008// CLR
15009OPCODE(0x42B8)
15010{
15011 u32 adr, res;
15012 u32 src, dst;
15013
15014 FETCH_SWORD(adr);
15015 res = 0;
15016 flag_N = flag_NotZ = flag_V = flag_C = 0;
15017 PRE_IO
15018 WRITE_LONG_F(adr, res)
15019 POST_IO
15020RET(24)
15021}
15022
15023// CLR
15024OPCODE(0x42B9)
15025{
15026 u32 adr, res;
15027 u32 src, dst;
15028
15029 FETCH_LONG(adr);
15030 res = 0;
15031 flag_N = flag_NotZ = flag_V = flag_C = 0;
15032 PRE_IO
15033 WRITE_LONG_F(adr, res)
15034 POST_IO
15035RET(28)
15036}
15037
15038// CLR
15039OPCODE(0x429F)
15040{
15041 u32 adr, res;
15042 u32 src, dst;
15043
15044 adr = AREG(7);
15045 AREG(7) += 4;
15046 res = 0;
15047 flag_N = flag_NotZ = flag_V = flag_C = 0;
15048 PRE_IO
15049 WRITE_LONG_F(adr, res)
15050 POST_IO
15051RET(20)
15052}
15053
15054// CLR
15055OPCODE(0x42A7)
15056{
15057 u32 adr, res;
15058 u32 src, dst;
15059
15060 adr = AREG(7) - 4;
15061 AREG(7) = adr;
15062 res = 0;
15063 flag_N = flag_NotZ = flag_V = flag_C = 0;
15064 PRE_IO
15065 WRITE_LONG_F(adr, res)
15066 POST_IO
15067RET(22)
15068}
15069
15070// NEG
15071OPCODE(0x4400)
15072{
15073 u32 adr, res;
15074 u32 src, dst;
15075
15076 src = DREGu8((Opcode >> 0) & 7);
15077 res = -src;
15078 flag_V = res & src;
15079 flag_N = flag_X = flag_C = res;
15080 flag_NotZ = res & 0xFF;
15081 DREGu8((Opcode >> 0) & 7) = res;
15082RET(4)
15083}
15084
15085// NEG
15086OPCODE(0x4410)
15087{
15088 u32 adr, res;
15089 u32 src, dst;
15090
15091 adr = AREG((Opcode >> 0) & 7);
15092 PRE_IO
15093 READ_BYTE_F(adr, src)
15094 res = -src;
15095 flag_V = res & src;
15096 flag_N = flag_X = flag_C = res;
15097 flag_NotZ = res & 0xFF;
15098 WRITE_BYTE_F(adr, res)
15099 POST_IO
15100RET(12)
15101}
15102
15103// NEG
15104OPCODE(0x4418)
15105{
15106 u32 adr, res;
15107 u32 src, dst;
15108
15109 adr = AREG((Opcode >> 0) & 7);
15110 AREG((Opcode >> 0) & 7) += 1;
15111 PRE_IO
15112 READ_BYTE_F(adr, src)
15113 res = -src;
15114 flag_V = res & src;
15115 flag_N = flag_X = flag_C = res;
15116 flag_NotZ = res & 0xFF;
15117 WRITE_BYTE_F(adr, res)
15118 POST_IO
15119RET(12)
15120}
15121
15122// NEG
15123OPCODE(0x4420)
15124{
15125 u32 adr, res;
15126 u32 src, dst;
15127
15128 adr = AREG((Opcode >> 0) & 7) - 1;
15129 AREG((Opcode >> 0) & 7) = adr;
15130 PRE_IO
15131 READ_BYTE_F(adr, src)
15132 res = -src;
15133 flag_V = res & src;
15134 flag_N = flag_X = flag_C = res;
15135 flag_NotZ = res & 0xFF;
15136 WRITE_BYTE_F(adr, res)
15137 POST_IO
15138RET(14)
15139}
15140
15141// NEG
15142OPCODE(0x4428)
15143{
15144 u32 adr, res;
15145 u32 src, dst;
15146
15147 FETCH_SWORD(adr);
15148 adr += AREG((Opcode >> 0) & 7);
15149 PRE_IO
15150 READ_BYTE_F(adr, src)
15151 res = -src;
15152 flag_V = res & src;
15153 flag_N = flag_X = flag_C = res;
15154 flag_NotZ = res & 0xFF;
15155 WRITE_BYTE_F(adr, res)
15156 POST_IO
15157RET(16)
15158}
15159
15160// NEG
15161OPCODE(0x4430)
15162{
15163 u32 adr, res;
15164 u32 src, dst;
15165
15166 adr = AREG((Opcode >> 0) & 7);
15167 DECODE_EXT_WORD
15168 PRE_IO
15169 READ_BYTE_F(adr, src)
15170 res = -src;
15171 flag_V = res & src;
15172 flag_N = flag_X = flag_C = res;
15173 flag_NotZ = res & 0xFF;
15174 WRITE_BYTE_F(adr, res)
15175 POST_IO
15176RET(18)
15177}
15178
15179// NEG
15180OPCODE(0x4438)
15181{
15182 u32 adr, res;
15183 u32 src, dst;
15184
15185 FETCH_SWORD(adr);
15186 PRE_IO
15187 READ_BYTE_F(adr, src)
15188 res = -src;
15189 flag_V = res & src;
15190 flag_N = flag_X = flag_C = res;
15191 flag_NotZ = res & 0xFF;
15192 WRITE_BYTE_F(adr, res)
15193 POST_IO
15194RET(16)
15195}
15196
15197// NEG
15198OPCODE(0x4439)
15199{
15200 u32 adr, res;
15201 u32 src, dst;
15202
15203 FETCH_LONG(adr);
15204 PRE_IO
15205 READ_BYTE_F(adr, src)
15206 res = -src;
15207 flag_V = res & src;
15208 flag_N = flag_X = flag_C = res;
15209 flag_NotZ = res & 0xFF;
15210 WRITE_BYTE_F(adr, res)
15211 POST_IO
15212RET(20)
15213}
15214
15215// NEG
15216OPCODE(0x441F)
15217{
15218 u32 adr, res;
15219 u32 src, dst;
15220
15221 adr = AREG(7);
15222 AREG(7) += 2;
15223 PRE_IO
15224 READ_BYTE_F(adr, src)
15225 res = -src;
15226 flag_V = res & src;
15227 flag_N = flag_X = flag_C = res;
15228 flag_NotZ = res & 0xFF;
15229 WRITE_BYTE_F(adr, res)
15230 POST_IO
15231RET(12)
15232}
15233
15234// NEG
15235OPCODE(0x4427)
15236{
15237 u32 adr, res;
15238 u32 src, dst;
15239
15240 adr = AREG(7) - 2;
15241 AREG(7) = adr;
15242 PRE_IO
15243 READ_BYTE_F(adr, src)
15244 res = -src;
15245 flag_V = res & src;
15246 flag_N = flag_X = flag_C = res;
15247 flag_NotZ = res & 0xFF;
15248 WRITE_BYTE_F(adr, res)
15249 POST_IO
15250RET(14)
15251}
15252
15253// NEG
15254OPCODE(0x4440)
15255{
15256 u32 adr, res;
15257 u32 src, dst;
15258
15259 src = DREGu16((Opcode >> 0) & 7);
15260 res = -src;
15261 flag_V = (res & src) >> 8;
15262 flag_N = flag_X = flag_C = res >> 8;
15263 flag_NotZ = res & 0xFFFF;
15264 DREGu16((Opcode >> 0) & 7) = res;
15265RET(4)
15266}
15267
15268// NEG
15269OPCODE(0x4450)
15270{
15271 u32 adr, res;
15272 u32 src, dst;
15273
15274 adr = AREG((Opcode >> 0) & 7);
15275 PRE_IO
15276 READ_WORD_F(adr, src)
15277 res = -src;
15278 flag_V = (res & src) >> 8;
15279 flag_N = flag_X = flag_C = res >> 8;
15280 flag_NotZ = res & 0xFFFF;
15281 WRITE_WORD_F(adr, res)
15282 POST_IO
15283RET(12)
15284}
15285
15286// NEG
15287OPCODE(0x4458)
15288{
15289 u32 adr, res;
15290 u32 src, dst;
15291
15292 adr = AREG((Opcode >> 0) & 7);
15293 AREG((Opcode >> 0) & 7) += 2;
15294 PRE_IO
15295 READ_WORD_F(adr, src)
15296 res = -src;
15297 flag_V = (res & src) >> 8;
15298 flag_N = flag_X = flag_C = res >> 8;
15299 flag_NotZ = res & 0xFFFF;
15300 WRITE_WORD_F(adr, res)
15301 POST_IO
15302RET(12)
15303}
15304
15305// NEG
15306OPCODE(0x4460)
15307{
15308 u32 adr, res;
15309 u32 src, dst;
15310
15311 adr = AREG((Opcode >> 0) & 7) - 2;
15312 AREG((Opcode >> 0) & 7) = adr;
15313 PRE_IO
15314 READ_WORD_F(adr, src)
15315 res = -src;
15316 flag_V = (res & src) >> 8;
15317 flag_N = flag_X = flag_C = res >> 8;
15318 flag_NotZ = res & 0xFFFF;
15319 WRITE_WORD_F(adr, res)
15320 POST_IO
15321RET(14)
15322}
15323
15324// NEG
15325OPCODE(0x4468)
15326{
15327 u32 adr, res;
15328 u32 src, dst;
15329
15330 FETCH_SWORD(adr);
15331 adr += AREG((Opcode >> 0) & 7);
15332 PRE_IO
15333 READ_WORD_F(adr, src)
15334 res = -src;
15335 flag_V = (res & src) >> 8;
15336 flag_N = flag_X = flag_C = res >> 8;
15337 flag_NotZ = res & 0xFFFF;
15338 WRITE_WORD_F(adr, res)
15339 POST_IO
15340RET(16)
15341}
15342
15343// NEG
15344OPCODE(0x4470)
15345{
15346 u32 adr, res;
15347 u32 src, dst;
15348
15349 adr = AREG((Opcode >> 0) & 7);
15350 DECODE_EXT_WORD
15351 PRE_IO
15352 READ_WORD_F(adr, src)
15353 res = -src;
15354 flag_V = (res & src) >> 8;
15355 flag_N = flag_X = flag_C = res >> 8;
15356 flag_NotZ = res & 0xFFFF;
15357 WRITE_WORD_F(adr, res)
15358 POST_IO
15359RET(18)
15360}
15361
15362// NEG
15363OPCODE(0x4478)
15364{
15365 u32 adr, res;
15366 u32 src, dst;
15367
15368 FETCH_SWORD(adr);
15369 PRE_IO
15370 READ_WORD_F(adr, src)
15371 res = -src;
15372 flag_V = (res & src) >> 8;
15373 flag_N = flag_X = flag_C = res >> 8;
15374 flag_NotZ = res & 0xFFFF;
15375 WRITE_WORD_F(adr, res)
15376 POST_IO
15377RET(16)
15378}
15379
15380// NEG
15381OPCODE(0x4479)
15382{
15383 u32 adr, res;
15384 u32 src, dst;
15385
15386 FETCH_LONG(adr);
15387 PRE_IO
15388 READ_WORD_F(adr, src)
15389 res = -src;
15390 flag_V = (res & src) >> 8;
15391 flag_N = flag_X = flag_C = res >> 8;
15392 flag_NotZ = res & 0xFFFF;
15393 WRITE_WORD_F(adr, res)
15394 POST_IO
15395RET(20)
15396}
15397
15398// NEG
15399OPCODE(0x445F)
15400{
15401 u32 adr, res;
15402 u32 src, dst;
15403
15404 adr = AREG(7);
15405 AREG(7) += 2;
15406 PRE_IO
15407 READ_WORD_F(adr, src)
15408 res = -src;
15409 flag_V = (res & src) >> 8;
15410 flag_N = flag_X = flag_C = res >> 8;
15411 flag_NotZ = res & 0xFFFF;
15412 WRITE_WORD_F(adr, res)
15413 POST_IO
15414RET(12)
15415}
15416
15417// NEG
15418OPCODE(0x4467)
15419{
15420 u32 adr, res;
15421 u32 src, dst;
15422
15423 adr = AREG(7) - 2;
15424 AREG(7) = adr;
15425 PRE_IO
15426 READ_WORD_F(adr, src)
15427 res = -src;
15428 flag_V = (res & src) >> 8;
15429 flag_N = flag_X = flag_C = res >> 8;
15430 flag_NotZ = res & 0xFFFF;
15431 WRITE_WORD_F(adr, res)
15432 POST_IO
15433RET(14)
15434}
15435
15436// NEG
15437OPCODE(0x4480)
15438{
15439 u32 adr, res;
15440 u32 src, dst;
15441
15442 src = DREGu32((Opcode >> 0) & 7);
15443 res = -src;
15444 flag_NotZ = res;
15445 flag_V = (res & src) >> 24;
15446 flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
15447 flag_N = res >> 24;
15448 DREGu32((Opcode >> 0) & 7) = res;
15449RET(6)
15450}
15451
15452// NEG
15453OPCODE(0x4490)
15454{
15455 u32 adr, res;
15456 u32 src, dst;
15457
15458 adr = AREG((Opcode >> 0) & 7);
15459 PRE_IO
15460 READ_LONG_F(adr, src)
15461 res = -src;
15462 flag_NotZ = res;
15463 flag_V = (res & src) >> 24;
15464 flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
15465 flag_N = res >> 24;
15466 WRITE_LONG_F(adr, res)
15467 POST_IO
15468RET(20)
15469}
15470
15471// NEG
15472OPCODE(0x4498)
15473{
15474 u32 adr, res;
15475 u32 src, dst;
15476
15477 adr = AREG((Opcode >> 0) & 7);
15478 AREG((Opcode >> 0) & 7) += 4;
15479 PRE_IO
15480 READ_LONG_F(adr, src)
15481 res = -src;
15482 flag_NotZ = res;
15483 flag_V = (res & src) >> 24;
15484 flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
15485 flag_N = res >> 24;
15486 WRITE_LONG_F(adr, res)
15487 POST_IO
15488RET(20)
15489}
15490
15491// NEG
15492OPCODE(0x44A0)
15493{
15494 u32 adr, res;
15495 u32 src, dst;
15496
15497 adr = AREG((Opcode >> 0) & 7) - 4;
15498 AREG((Opcode >> 0) & 7) = adr;
15499 PRE_IO
15500 READ_LONG_F(adr, src)
15501 res = -src;
15502 flag_NotZ = res;
15503 flag_V = (res & src) >> 24;
15504 flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
15505 flag_N = res >> 24;
15506 WRITE_LONG_F(adr, res)
15507 POST_IO
15508RET(22)
15509}
15510
15511// NEG
15512OPCODE(0x44A8)
15513{
15514 u32 adr, res;
15515 u32 src, dst;
15516
15517 FETCH_SWORD(adr);
15518 adr += AREG((Opcode >> 0) & 7);
15519 PRE_IO
15520 READ_LONG_F(adr, src)
15521 res = -src;
15522 flag_NotZ = res;
15523 flag_V = (res & src) >> 24;
15524 flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
15525 flag_N = res >> 24;
15526 WRITE_LONG_F(adr, res)
15527 POST_IO
15528RET(24)
15529}
15530
15531// NEG
15532OPCODE(0x44B0)
15533{
15534 u32 adr, res;
15535 u32 src, dst;
15536
15537 adr = AREG((Opcode >> 0) & 7);
15538 DECODE_EXT_WORD
15539 PRE_IO
15540 READ_LONG_F(adr, src)
15541 res = -src;
15542 flag_NotZ = res;
15543 flag_V = (res & src) >> 24;
15544 flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
15545 flag_N = res >> 24;
15546 WRITE_LONG_F(adr, res)
15547 POST_IO
15548RET(26)
15549}
15550
15551// NEG
15552OPCODE(0x44B8)
15553{
15554 u32 adr, res;
15555 u32 src, dst;
15556
15557 FETCH_SWORD(adr);
15558 PRE_IO
15559 READ_LONG_F(adr, src)
15560 res = -src;
15561 flag_NotZ = res;
15562 flag_V = (res & src) >> 24;
15563 flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
15564 flag_N = res >> 24;
15565 WRITE_LONG_F(adr, res)
15566 POST_IO
15567RET(24)
15568}
15569
15570// NEG
15571OPCODE(0x44B9)
15572{
15573 u32 adr, res;
15574 u32 src, dst;
15575
15576 FETCH_LONG(adr);
15577 PRE_IO
15578 READ_LONG_F(adr, src)
15579 res = -src;
15580 flag_NotZ = res;
15581 flag_V = (res & src) >> 24;
15582 flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
15583 flag_N = res >> 24;
15584 WRITE_LONG_F(adr, res)
15585 POST_IO
15586RET(28)
15587}
15588
15589// NEG
15590OPCODE(0x449F)
15591{
15592 u32 adr, res;
15593 u32 src, dst;
15594
15595 adr = AREG(7);
15596 AREG(7) += 4;
15597 PRE_IO
15598 READ_LONG_F(adr, src)
15599 res = -src;
15600 flag_NotZ = res;
15601 flag_V = (res & src) >> 24;
15602 flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
15603 flag_N = res >> 24;
15604 WRITE_LONG_F(adr, res)
15605 POST_IO
15606RET(20)
15607}
15608
15609// NEG
15610OPCODE(0x44A7)
15611{
15612 u32 adr, res;
15613 u32 src, dst;
15614
15615 adr = AREG(7) - 4;
15616 AREG(7) = adr;
15617 PRE_IO
15618 READ_LONG_F(adr, src)
15619 res = -src;
15620 flag_NotZ = res;
15621 flag_V = (res & src) >> 24;
15622 flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
15623 flag_N = res >> 24;
15624 WRITE_LONG_F(adr, res)
15625 POST_IO
15626RET(22)
15627}
15628
15629// NOT
15630OPCODE(0x4600)
15631{
15632 u32 adr, res;
15633 u32 src, dst;
15634
15635 src = DREGu8((Opcode >> 0) & 7);
15636 res = ~src;
15637 flag_C = 0;
15638 flag_V = 0;
15639 flag_N = res;
15640 flag_NotZ = res & 0xFF;
15641 DREGu8((Opcode >> 0) & 7) = res;
15642RET(4)
15643}
15644
15645// NOT
15646OPCODE(0x4610)
15647{
15648 u32 adr, res;
15649 u32 src, dst;
15650
15651 adr = AREG((Opcode >> 0) & 7);
15652 PRE_IO
15653 READ_BYTE_F(adr, src)
15654 res = ~src;
15655 flag_C = 0;
15656 flag_V = 0;
15657 flag_N = res;
15658 flag_NotZ = res & 0xFF;
15659 WRITE_BYTE_F(adr, res)
15660 POST_IO
15661RET(12)
15662}
15663
15664// NOT
15665OPCODE(0x4618)
15666{
15667 u32 adr, res;
15668 u32 src, dst;
15669
15670 adr = AREG((Opcode >> 0) & 7);
15671 AREG((Opcode >> 0) & 7) += 1;
15672 PRE_IO
15673 READ_BYTE_F(adr, src)
15674 res = ~src;
15675 flag_C = 0;
15676 flag_V = 0;
15677 flag_N = res;
15678 flag_NotZ = res & 0xFF;
15679 WRITE_BYTE_F(adr, res)
15680 POST_IO
15681RET(12)
15682}
15683
15684// NOT
15685OPCODE(0x4620)
15686{
15687 u32 adr, res;
15688 u32 src, dst;
15689
15690 adr = AREG((Opcode >> 0) & 7) - 1;
15691 AREG((Opcode >> 0) & 7) = adr;
15692 PRE_IO
15693 READ_BYTE_F(adr, src)
15694 res = ~src;
15695 flag_C = 0;
15696 flag_V = 0;
15697 flag_N = res;
15698 flag_NotZ = res & 0xFF;
15699 WRITE_BYTE_F(adr, res)
15700 POST_IO
15701RET(14)
15702}
15703
15704// NOT
15705OPCODE(0x4628)
15706{
15707 u32 adr, res;
15708 u32 src, dst;
15709
15710 FETCH_SWORD(adr);
15711 adr += AREG((Opcode >> 0) & 7);
15712 PRE_IO
15713 READ_BYTE_F(adr, src)
15714 res = ~src;
15715 flag_C = 0;
15716 flag_V = 0;
15717 flag_N = res;
15718 flag_NotZ = res & 0xFF;
15719 WRITE_BYTE_F(adr, res)
15720 POST_IO
15721RET(16)
15722}
15723
15724// NOT
15725OPCODE(0x4630)
15726{
15727 u32 adr, res;
15728 u32 src, dst;
15729
15730 adr = AREG((Opcode >> 0) & 7);
15731 DECODE_EXT_WORD
15732 PRE_IO
15733 READ_BYTE_F(adr, src)
15734 res = ~src;
15735 flag_C = 0;
15736 flag_V = 0;
15737 flag_N = res;
15738 flag_NotZ = res & 0xFF;
15739 WRITE_BYTE_F(adr, res)
15740 POST_IO
15741RET(18)
15742}
15743
15744// NOT
15745OPCODE(0x4638)
15746{
15747 u32 adr, res;
15748 u32 src, dst;
15749
15750 FETCH_SWORD(adr);
15751 PRE_IO
15752 READ_BYTE_F(adr, src)
15753 res = ~src;
15754 flag_C = 0;
15755 flag_V = 0;
15756 flag_N = res;
15757 flag_NotZ = res & 0xFF;
15758 WRITE_BYTE_F(adr, res)
15759 POST_IO
15760RET(16)
15761}
15762
15763// NOT
15764OPCODE(0x4639)
15765{
15766 u32 adr, res;
15767 u32 src, dst;
15768
15769 FETCH_LONG(adr);
15770 PRE_IO
15771 READ_BYTE_F(adr, src)
15772 res = ~src;
15773 flag_C = 0;
15774 flag_V = 0;
15775 flag_N = res;
15776 flag_NotZ = res & 0xFF;
15777 WRITE_BYTE_F(adr, res)
15778 POST_IO
15779RET(20)
15780}
15781
15782// NOT
15783OPCODE(0x461F)
15784{
15785 u32 adr, res;
15786 u32 src, dst;
15787
15788 adr = AREG(7);
15789 AREG(7) += 2;
15790 PRE_IO
15791 READ_BYTE_F(adr, src)
15792 res = ~src;
15793 flag_C = 0;
15794 flag_V = 0;
15795 flag_N = res;
15796 flag_NotZ = res & 0xFF;
15797 WRITE_BYTE_F(adr, res)
15798 POST_IO
15799RET(12)
15800}
15801
15802// NOT
15803OPCODE(0x4627)
15804{
15805 u32 adr, res;
15806 u32 src, dst;
15807
15808 adr = AREG(7) - 2;
15809 AREG(7) = adr;
15810 PRE_IO
15811 READ_BYTE_F(adr, src)
15812 res = ~src;
15813 flag_C = 0;
15814 flag_V = 0;
15815 flag_N = res;
15816 flag_NotZ = res & 0xFF;
15817 WRITE_BYTE_F(adr, res)
15818 POST_IO
15819RET(14)
15820}
15821
15822// NOT
15823OPCODE(0x4640)
15824{
15825 u32 adr, res;
15826 u32 src, dst;
15827
15828 src = DREGu16((Opcode >> 0) & 7);
15829 res = ~src;
15830 flag_C = 0;
15831 flag_V = 0;
15832 flag_NotZ = res & 0xFFFF;
15833 flag_N = res >> 8;
15834 DREGu16((Opcode >> 0) & 7) = res;
15835RET(4)
15836}
15837
15838// NOT
15839OPCODE(0x4650)
15840{
15841 u32 adr, res;
15842 u32 src, dst;
15843
15844 adr = AREG((Opcode >> 0) & 7);
15845 PRE_IO
15846 READ_WORD_F(adr, src)
15847 res = ~src;
15848 flag_C = 0;
15849 flag_V = 0;
15850 flag_NotZ = res & 0xFFFF;
15851 flag_N = res >> 8;
15852 WRITE_WORD_F(adr, res)
15853 POST_IO
15854RET(12)
15855}
15856
15857// NOT
15858OPCODE(0x4658)
15859{
15860 u32 adr, res;
15861 u32 src, dst;
15862
15863 adr = AREG((Opcode >> 0) & 7);
15864 AREG((Opcode >> 0) & 7) += 2;
15865 PRE_IO
15866 READ_WORD_F(adr, src)
15867 res = ~src;
15868 flag_C = 0;
15869 flag_V = 0;
15870 flag_NotZ = res & 0xFFFF;
15871 flag_N = res >> 8;
15872 WRITE_WORD_F(adr, res)
15873 POST_IO
15874RET(12)
15875}
15876
15877// NOT
15878OPCODE(0x4660)
15879{
15880 u32 adr, res;
15881 u32 src, dst;
15882
15883 adr = AREG((Opcode >> 0) & 7) - 2;
15884 AREG((Opcode >> 0) & 7) = adr;
15885 PRE_IO
15886 READ_WORD_F(adr, src)
15887 res = ~src;
15888 flag_C = 0;
15889 flag_V = 0;
15890 flag_NotZ = res & 0xFFFF;
15891 flag_N = res >> 8;
15892 WRITE_WORD_F(adr, res)
15893 POST_IO
15894RET(14)
15895}
15896
15897// NOT
15898OPCODE(0x4668)
15899{
15900 u32 adr, res;
15901 u32 src, dst;
15902
15903 FETCH_SWORD(adr);
15904 adr += AREG((Opcode >> 0) & 7);
15905 PRE_IO
15906 READ_WORD_F(adr, src)
15907 res = ~src;
15908 flag_C = 0;
15909 flag_V = 0;
15910 flag_NotZ = res & 0xFFFF;
15911 flag_N = res >> 8;
15912 WRITE_WORD_F(adr, res)
15913 POST_IO
15914RET(16)
15915}
15916
15917// NOT
15918OPCODE(0x4670)
15919{
15920 u32 adr, res;
15921 u32 src, dst;
15922
15923 adr = AREG((Opcode >> 0) & 7);
15924 DECODE_EXT_WORD
15925 PRE_IO
15926 READ_WORD_F(adr, src)
15927 res = ~src;
15928 flag_C = 0;
15929 flag_V = 0;
15930 flag_NotZ = res & 0xFFFF;
15931 flag_N = res >> 8;
15932 WRITE_WORD_F(adr, res)
15933 POST_IO
15934RET(18)
15935}
15936
15937// NOT
15938OPCODE(0x4678)
15939{
15940 u32 adr, res;
15941 u32 src, dst;
15942
15943 FETCH_SWORD(adr);
15944 PRE_IO
15945 READ_WORD_F(adr, src)
15946 res = ~src;
15947 flag_C = 0;
15948 flag_V = 0;
15949 flag_NotZ = res & 0xFFFF;
15950 flag_N = res >> 8;
15951 WRITE_WORD_F(adr, res)
15952 POST_IO
15953RET(16)
15954}
15955
15956// NOT
15957OPCODE(0x4679)
15958{
15959 u32 adr, res;
15960 u32 src, dst;
15961
15962 FETCH_LONG(adr);
15963 PRE_IO
15964 READ_WORD_F(adr, src)
15965 res = ~src;
15966 flag_C = 0;
15967 flag_V = 0;
15968 flag_NotZ = res & 0xFFFF;
15969 flag_N = res >> 8;
15970 WRITE_WORD_F(adr, res)
15971 POST_IO
15972RET(20)
15973}
15974
15975// NOT
15976OPCODE(0x465F)
15977{
15978 u32 adr, res;
15979 u32 src, dst;
15980
15981 adr = AREG(7);
15982 AREG(7) += 2;
15983 PRE_IO
15984 READ_WORD_F(adr, src)
15985 res = ~src;
15986 flag_C = 0;
15987 flag_V = 0;
15988 flag_NotZ = res & 0xFFFF;
15989 flag_N = res >> 8;
15990 WRITE_WORD_F(adr, res)
15991 POST_IO
15992RET(12)
15993}
15994
15995// NOT
15996OPCODE(0x4667)
15997{
15998 u32 adr, res;
15999 u32 src, dst;
16000
16001 adr = AREG(7) - 2;
16002 AREG(7) = adr;
16003 PRE_IO
16004 READ_WORD_F(adr, src)
16005 res = ~src;
16006 flag_C = 0;
16007 flag_V = 0;
16008 flag_NotZ = res & 0xFFFF;
16009 flag_N = res >> 8;
16010 WRITE_WORD_F(adr, res)
16011 POST_IO
16012RET(14)
16013}
16014
16015// NOT
16016OPCODE(0x4680)
16017{
16018 u32 adr, res;
16019 u32 src, dst;
16020
16021 src = DREGu32((Opcode >> 0) & 7);
16022 res = ~src;
16023 flag_C = 0;
16024 flag_V = 0;
16025 flag_NotZ = res;
16026 flag_N = res >> 24;
16027 DREGu32((Opcode >> 0) & 7) = res;
16028RET(6)
16029}
16030
16031// NOT
16032OPCODE(0x4690)
16033{
16034 u32 adr, res;
16035 u32 src, dst;
16036
16037 adr = AREG((Opcode >> 0) & 7);
16038 PRE_IO
16039 READ_LONG_F(adr, src)
16040 res = ~src;
16041 flag_C = 0;
16042 flag_V = 0;
16043 flag_NotZ = res;
16044 flag_N = res >> 24;
16045 WRITE_LONG_F(adr, res)
16046 POST_IO
16047RET(20)
16048}
16049
16050// NOT
16051OPCODE(0x4698)
16052{
16053 u32 adr, res;
16054 u32 src, dst;
16055
16056 adr = AREG((Opcode >> 0) & 7);
16057 AREG((Opcode >> 0) & 7) += 4;
16058 PRE_IO
16059 READ_LONG_F(adr, src)
16060 res = ~src;
16061 flag_C = 0;
16062 flag_V = 0;
16063 flag_NotZ = res;
16064 flag_N = res >> 24;
16065 WRITE_LONG_F(adr, res)
16066 POST_IO
16067RET(20)
16068}
16069
16070// NOT
16071OPCODE(0x46A0)
16072{
16073 u32 adr, res;
16074 u32 src, dst;
16075
16076 adr = AREG((Opcode >> 0) & 7) - 4;
16077 AREG((Opcode >> 0) & 7) = adr;
16078 PRE_IO
16079 READ_LONG_F(adr, src)
16080 res = ~src;
16081 flag_C = 0;
16082 flag_V = 0;
16083 flag_NotZ = res;
16084 flag_N = res >> 24;
16085 WRITE_LONG_F(adr, res)
16086 POST_IO
16087RET(22)
16088}
16089
16090// NOT
16091OPCODE(0x46A8)
16092{
16093 u32 adr, res;
16094 u32 src, dst;
16095
16096 FETCH_SWORD(adr);
16097 adr += AREG((Opcode >> 0) & 7);
16098 PRE_IO
16099 READ_LONG_F(adr, src)
16100 res = ~src;
16101 flag_C = 0;
16102 flag_V = 0;
16103 flag_NotZ = res;
16104 flag_N = res >> 24;
16105 WRITE_LONG_F(adr, res)
16106 POST_IO
16107RET(24)
16108}
16109
16110// NOT
16111OPCODE(0x46B0)
16112{
16113 u32 adr, res;
16114 u32 src, dst;
16115
16116 adr = AREG((Opcode >> 0) & 7);
16117 DECODE_EXT_WORD
16118 PRE_IO
16119 READ_LONG_F(adr, src)
16120 res = ~src;
16121 flag_C = 0;
16122 flag_V = 0;
16123 flag_NotZ = res;
16124 flag_N = res >> 24;
16125 WRITE_LONG_F(adr, res)
16126 POST_IO
16127RET(26)
16128}
16129
16130// NOT
16131OPCODE(0x46B8)
16132{
16133 u32 adr, res;
16134 u32 src, dst;
16135
16136 FETCH_SWORD(adr);
16137 PRE_IO
16138 READ_LONG_F(adr, src)
16139 res = ~src;
16140 flag_C = 0;
16141 flag_V = 0;
16142 flag_NotZ = res;
16143 flag_N = res >> 24;
16144 WRITE_LONG_F(adr, res)
16145 POST_IO
16146RET(24)
16147}
16148
16149// NOT
16150OPCODE(0x46B9)
16151{
16152 u32 adr, res;
16153 u32 src, dst;
16154
16155 FETCH_LONG(adr);
16156 PRE_IO
16157 READ_LONG_F(adr, src)
16158 res = ~src;
16159 flag_C = 0;
16160 flag_V = 0;
16161 flag_NotZ = res;
16162 flag_N = res >> 24;
16163 WRITE_LONG_F(adr, res)
16164 POST_IO
16165RET(28)
16166}
16167
16168// NOT
16169OPCODE(0x469F)
16170{
16171 u32 adr, res;
16172 u32 src, dst;
16173
16174 adr = AREG(7);
16175 AREG(7) += 4;
16176 PRE_IO
16177 READ_LONG_F(adr, src)
16178 res = ~src;
16179 flag_C = 0;
16180 flag_V = 0;
16181 flag_NotZ = res;
16182 flag_N = res >> 24;
16183 WRITE_LONG_F(adr, res)
16184 POST_IO
16185RET(20)
16186}
16187
16188// NOT
16189OPCODE(0x46A7)
16190{
16191 u32 adr, res;
16192 u32 src, dst;
16193
16194 adr = AREG(7) - 4;
16195 AREG(7) = adr;
16196 PRE_IO
16197 READ_LONG_F(adr, src)
16198 res = ~src;
16199 flag_C = 0;
16200 flag_V = 0;
16201 flag_NotZ = res;
16202 flag_N = res >> 24;
16203 WRITE_LONG_F(adr, res)
16204 POST_IO
16205RET(22)
16206}
16207
16208// MOVESRa
16209OPCODE(0x40C0)
16210{
16211 u32 adr, res;
16212 u32 src, dst;
16213
16214 res = GET_SR;
16215 DREGu16((Opcode >> 0) & 7) = res;
16216RET(6)
16217}
16218
16219// MOVESRa
16220OPCODE(0x40D0)
16221{
16222 u32 adr, res;
16223 u32 src, dst;
16224
16225 res = GET_SR;
16226 adr = AREG((Opcode >> 0) & 7);
16227 PRE_IO
16228 WRITE_WORD_F(adr, res)
16229 POST_IO
16230RET(12)
16231}
16232
16233// MOVESRa
16234OPCODE(0x40D8)
16235{
16236 u32 adr, res;
16237 u32 src, dst;
16238
16239 res = GET_SR;
16240 adr = AREG((Opcode >> 0) & 7);
16241 AREG((Opcode >> 0) & 7) += 2;
16242 PRE_IO
16243 WRITE_WORD_F(adr, res)
16244 POST_IO
16245RET(12)
16246}
16247
16248// MOVESRa
16249OPCODE(0x40E0)
16250{
16251 u32 adr, res;
16252 u32 src, dst;
16253
16254 res = GET_SR;
16255 adr = AREG((Opcode >> 0) & 7) - 2;
16256 AREG((Opcode >> 0) & 7) = adr;
16257 PRE_IO
16258 WRITE_WORD_F(adr, res)
16259 POST_IO
16260RET(14)
16261}
16262
16263// MOVESRa
16264OPCODE(0x40E8)
16265{
16266 u32 adr, res;
16267 u32 src, dst;
16268
16269 res = GET_SR;
16270 FETCH_SWORD(adr);
16271 adr += AREG((Opcode >> 0) & 7);
16272 PRE_IO
16273 WRITE_WORD_F(adr, res)
16274 POST_IO
16275RET(16)
16276}
16277
16278// MOVESRa
16279OPCODE(0x40F0)
16280{
16281 u32 adr, res;
16282 u32 src, dst;
16283
16284 res = GET_SR;
16285 adr = AREG((Opcode >> 0) & 7);
16286 DECODE_EXT_WORD
16287 PRE_IO
16288 WRITE_WORD_F(adr, res)
16289 POST_IO
16290RET(18)
16291}
16292
16293// MOVESRa
16294OPCODE(0x40F8)
16295{
16296 u32 adr, res;
16297 u32 src, dst;
16298
16299 res = GET_SR;
16300 FETCH_SWORD(adr);
16301 PRE_IO
16302 WRITE_WORD_F(adr, res)
16303 POST_IO
16304RET(16)
16305}
16306
16307// MOVESRa
16308OPCODE(0x40F9)
16309{
16310 u32 adr, res;
16311 u32 src, dst;
16312
16313 res = GET_SR;
16314 FETCH_LONG(adr);
16315 PRE_IO
16316 WRITE_WORD_F(adr, res)
16317 POST_IO
16318RET(20)
16319}
16320
16321// MOVESRa
16322OPCODE(0x40DF)
16323{
16324 u32 adr, res;
16325 u32 src, dst;
16326
16327 res = GET_SR;
16328 adr = AREG(7);
16329 AREG(7) += 2;
16330 PRE_IO
16331 WRITE_WORD_F(adr, res)
16332 POST_IO
16333RET(12)
16334}
16335
16336// MOVESRa
16337OPCODE(0x40E7)
16338{
16339 u32 adr, res;
16340 u32 src, dst;
16341
16342 res = GET_SR;
16343 adr = AREG(7) - 2;
16344 AREG(7) = adr;
16345 PRE_IO
16346 WRITE_WORD_F(adr, res)
16347 POST_IO
16348RET(14)
16349}
16350
16351// MOVEaCCR
16352OPCODE(0x44C0)
16353{
16354 u32 adr, res;
16355 u32 src, dst;
16356
16357 res = DREGu16((Opcode >> 0) & 7);
16358 SET_CCR(res)
16359RET(12)
16360}
16361
16362// MOVEaCCR
16363OPCODE(0x44D0)
16364{
16365 u32 adr, res;
16366 u32 src, dst;
16367
16368 adr = AREG((Opcode >> 0) & 7);
16369 PRE_IO
16370 READ_WORD_F(adr, res)
16371 SET_CCR(res)
16372 POST_IO
16373RET(16)
16374}
16375
16376// MOVEaCCR
16377OPCODE(0x44D8)
16378{
16379 u32 adr, res;
16380 u32 src, dst;
16381
16382 adr = AREG((Opcode >> 0) & 7);
16383 AREG((Opcode >> 0) & 7) += 2;
16384 PRE_IO
16385 READ_WORD_F(adr, res)
16386 SET_CCR(res)
16387 POST_IO
16388RET(16)
16389}
16390
16391// MOVEaCCR
16392OPCODE(0x44E0)
16393{
16394 u32 adr, res;
16395 u32 src, dst;
16396
16397 adr = AREG((Opcode >> 0) & 7) - 2;
16398 AREG((Opcode >> 0) & 7) = adr;
16399 PRE_IO
16400 READ_WORD_F(adr, res)
16401 SET_CCR(res)
16402 POST_IO
16403RET(18)
16404}
16405
16406// MOVEaCCR
16407OPCODE(0x44E8)
16408{
16409 u32 adr, res;
16410 u32 src, dst;
16411
16412 FETCH_SWORD(adr);
16413 adr += AREG((Opcode >> 0) & 7);
16414 PRE_IO
16415 READ_WORD_F(adr, res)
16416 SET_CCR(res)
16417 POST_IO
16418RET(20)
16419}
16420
16421// MOVEaCCR
16422OPCODE(0x44F0)
16423{
16424 u32 adr, res;
16425 u32 src, dst;
16426
16427 adr = AREG((Opcode >> 0) & 7);
16428 DECODE_EXT_WORD
16429 PRE_IO
16430 READ_WORD_F(adr, res)
16431 SET_CCR(res)
16432 POST_IO
16433RET(22)
16434}
16435
16436// MOVEaCCR
16437OPCODE(0x44F8)
16438{
16439 u32 adr, res;
16440 u32 src, dst;
16441
16442 FETCH_SWORD(adr);
16443 PRE_IO
16444 READ_WORD_F(adr, res)
16445 SET_CCR(res)
16446 POST_IO
16447RET(20)
16448}
16449
16450// MOVEaCCR
16451OPCODE(0x44F9)
16452{
16453 u32 adr, res;
16454 u32 src, dst;
16455
16456 FETCH_LONG(adr);
16457 PRE_IO
16458 READ_WORD_F(adr, res)
16459 SET_CCR(res)
16460 POST_IO
16461RET(24)
16462}
16463
16464// MOVEaCCR
16465OPCODE(0x44FA)
16466{
16467 u32 adr, res;
16468 u32 src, dst;
16469
16470 adr = GET_SWORD + ((u32)(PC) - BasePC);
16471 PC++;
16472 PRE_IO
16473 READ_WORD_F(adr, res)
16474 SET_CCR(res)
16475 POST_IO
16476RET(20)
16477}
16478
16479// MOVEaCCR
16480OPCODE(0x44FB)
16481{
16482 u32 adr, res;
16483 u32 src, dst;
16484
16485 adr = (u32)(PC) - BasePC;
16486 DECODE_EXT_WORD
16487 PRE_IO
16488 READ_WORD_F(adr, res)
16489 SET_CCR(res)
16490 POST_IO
16491RET(22)
16492}
16493
16494// MOVEaCCR
16495OPCODE(0x44FC)
16496{
16497 u32 adr, res;
16498 u32 src, dst;
16499
16500 FETCH_WORD(res);
16501 SET_CCR(res)
16502RET(16)
16503}
16504
16505// MOVEaCCR
16506OPCODE(0x44DF)
16507{
16508 u32 adr, res;
16509 u32 src, dst;
16510
16511 adr = AREG(7);
16512 AREG(7) += 2;
16513 PRE_IO
16514 READ_WORD_F(adr, res)
16515 SET_CCR(res)
16516 POST_IO
16517RET(16)
16518}
16519
16520// MOVEaCCR
16521OPCODE(0x44E7)
16522{
16523 u32 adr, res;
16524 u32 src, dst;
16525
16526 adr = AREG(7) - 2;
16527 AREG(7) = adr;
16528 PRE_IO
16529 READ_WORD_F(adr, res)
16530 SET_CCR(res)
16531 POST_IO
16532RET(18)
16533}
16534
16535// MOVEaSR
16536OPCODE(0x46C0)
16537{
16538 u32 adr, res;
16539 u32 src, dst;
16540
16541 if (flag_S)
16542 {
16543 res = DREGu16((Opcode >> 0) & 7);
16544 SET_SR(res)
16545 if (!flag_S)
16546 {
16547 res = AREG(7);
16548 AREG(7) = ASP;
16549 ASP = res;
16550 }
16551 CHECK_INT_TO_JUMP(12)
16552 }
16553 else
16554 {
16555 u32 oldPC=GET_PC;
16556 SET_PC(oldPC-2)
16557 execute_exception(M68K_PRIVILEGE_VIOLATION_EX);
16558 RET(4)
16559 }
16560RET(12)
16561}
16562
16563// MOVEaSR
16564OPCODE(0x46D0)
16565{
16566 u32 adr, res;
16567 u32 src, dst;
16568
16569 if (flag_S)
16570 {
16571 adr = AREG((Opcode >> 0) & 7);
16572 PRE_IO
16573 READ_WORD_F(adr, res)
16574 SET_SR(res)
16575 if (!flag_S)
16576 {
16577 res = AREG(7);
16578 AREG(7) = ASP;
16579 ASP = res;
16580 }
16581 POST_IO
16582 CHECK_INT_TO_JUMP(16)
16583 }
16584 else
16585 {
16586 u32 oldPC=GET_PC;
16587 SET_PC(oldPC-2)
16588 execute_exception(M68K_PRIVILEGE_VIOLATION_EX);
16589 RET(4)
16590 }
16591RET(16)
16592}
16593
16594// MOVEaSR
16595OPCODE(0x46D8)
16596{
16597 u32 adr, res;
16598 u32 src, dst;
16599
16600 if (flag_S)
16601 {
16602 adr = AREG((Opcode >> 0) & 7);
16603 AREG((Opcode >> 0) & 7) += 2;
16604 PRE_IO
16605 READ_WORD_F(adr, res)
16606 SET_SR(res)
16607 if (!flag_S)
16608 {
16609 res = AREG(7);
16610 AREG(7) = ASP;
16611 ASP = res;
16612 }
16613 POST_IO
16614 CHECK_INT_TO_JUMP(16)
16615 }
16616 else
16617 {
16618 u32 oldPC=GET_PC;
16619 SET_PC(oldPC-2)
16620 execute_exception(M68K_PRIVILEGE_VIOLATION_EX);
16621 RET(4)
16622 }
16623RET(16)
16624}
16625
16626// MOVEaSR
16627OPCODE(0x46E0)
16628{
16629 u32 adr, res;
16630 u32 src, dst;
16631
16632 if (flag_S)
16633 {
16634 adr = AREG((Opcode >> 0) & 7) - 2;
16635 AREG((Opcode >> 0) & 7) = adr;
16636 PRE_IO
16637 READ_WORD_F(adr, res)
16638 SET_SR(res)
16639 if (!flag_S)
16640 {
16641 res = AREG(7);
16642 AREG(7) = ASP;
16643 ASP = res;
16644 }
16645 POST_IO
16646 CHECK_INT_TO_JUMP(18)
16647 }
16648 else
16649 {
16650 u32 oldPC=GET_PC;
16651 SET_PC(oldPC-2)
16652 execute_exception(M68K_PRIVILEGE_VIOLATION_EX);
16653 RET(4)
16654 }
16655RET(18)
16656}
16657
16658// MOVEaSR
16659OPCODE(0x46E8)
16660{
16661 u32 adr, res;
16662 u32 src, dst;
16663
16664 if (flag_S)
16665 {
16666 FETCH_SWORD(adr);
16667 adr += AREG((Opcode >> 0) & 7);
16668 PRE_IO
16669 READ_WORD_F(adr, res)
16670 SET_SR(res)
16671 if (!flag_S)
16672 {
16673 res = AREG(7);
16674 AREG(7) = ASP;
16675 ASP = res;
16676 }
16677 POST_IO
16678 CHECK_INT_TO_JUMP(20)
16679 }
16680 else
16681 {
16682 u32 oldPC=GET_PC;
16683 SET_PC(oldPC-2)
16684 execute_exception(M68K_PRIVILEGE_VIOLATION_EX);
16685 RET(4)
16686 }
16687RET(20)
16688}
16689
16690// MOVEaSR
16691OPCODE(0x46F0)
16692{
16693 u32 adr, res;
16694 u32 src, dst;
16695
16696 if (flag_S)
16697 {
16698 adr = AREG((Opcode >> 0) & 7);
16699 DECODE_EXT_WORD
16700 PRE_IO
16701 READ_WORD_F(adr, res)
16702 SET_SR(res)
16703 if (!flag_S)
16704 {
16705 res = AREG(7);
16706 AREG(7) = ASP;
16707 ASP = res;
16708 }
16709 POST_IO
16710 CHECK_INT_TO_JUMP(22)
16711 }
16712 else
16713 {
16714 u32 oldPC=GET_PC;
16715 SET_PC(oldPC-2)
16716 execute_exception(M68K_PRIVILEGE_VIOLATION_EX);
16717 RET(4)
16718 }
16719RET(22)
16720}
16721
16722
16723// MOVEaSR
16724OPCODE(0x46F8)
16725{
16726 u32 adr, res;
16727 u32 src, dst;
16728
16729 if (flag_S)
16730 {
16731 FETCH_SWORD(adr);
16732 PRE_IO
16733 READ_WORD_F(adr, res)
16734 SET_SR(res)
16735 if (!flag_S)
16736 {
16737 res = AREG(7);
16738 AREG(7) = ASP;
16739 ASP = res;
16740 }
16741 POST_IO
16742 CHECK_INT_TO_JUMP(20)
16743 }
16744 else
16745 {
16746 u32 oldPC=GET_PC;
16747 SET_PC(oldPC-2)
16748 execute_exception(M68K_PRIVILEGE_VIOLATION_EX);
16749 RET(4)
16750 }
16751RET(20)
16752}
16753
16754// MOVEaSR
16755OPCODE(0x46F9)
16756{
16757 u32 adr, res;
16758 u32 src, dst;
16759
16760 if (flag_S)
16761 {
16762 FETCH_LONG(adr);
16763 PRE_IO
16764 READ_WORD_F(adr, res)
16765 SET_SR(res)
16766 if (!flag_S)
16767 {
16768 res = AREG(7);
16769 AREG(7) = ASP;
16770 ASP = res;
16771 }
16772 POST_IO
16773 CHECK_INT_TO_JUMP(24)
16774 }
16775 else
16776 {
16777 u32 oldPC=GET_PC;
16778 SET_PC(oldPC-2)
16779 execute_exception(M68K_PRIVILEGE_VIOLATION_EX);
16780 RET(4)
16781 }
16782RET(24)
16783}
16784
16785// MOVEaSR
16786OPCODE(0x46FA)
16787{
16788 u32 adr, res;
16789 u32 src, dst;
16790
16791 if (flag_S)
16792 {
16793 adr = GET_SWORD + ((u32)(PC) - BasePC);
16794 PC++;
16795 PRE_IO
16796 READ_WORD_F(adr, res)
16797 SET_SR(res)
16798 if (!flag_S)
16799 {
16800 res = AREG(7);
16801 AREG(7) = ASP;
16802 ASP = res;
16803 }
16804 POST_IO
16805 CHECK_INT_TO_JUMP(24)
16806 }
16807 else
16808 {
16809 u32 oldPC=GET_PC;
16810 SET_PC(oldPC-2)
16811 execute_exception(M68K_PRIVILEGE_VIOLATION_EX);
16812 RET(4)
16813 }
16814RET(20)
16815}
16816
16817// MOVEaSR
16818OPCODE(0x46FB)
16819{
16820 u32 adr, res;
16821 u32 src, dst;
16822
16823 if (flag_S)
16824 {
16825 adr = (u32)(PC) - BasePC;
16826 DECODE_EXT_WORD
16827 PRE_IO
16828 READ_WORD_F(adr, res)
16829 SET_SR(res)
16830 if (!flag_S)
16831 {
16832 res = AREG(7);
16833 AREG(7) = ASP;
16834 ASP = res;
16835 }
16836 POST_IO
16837 CHECK_INT_TO_JUMP(22)
16838 }
16839 else
16840 {
16841 u32 oldPC=GET_PC;
16842 SET_PC(oldPC-2)
16843 execute_exception(M68K_PRIVILEGE_VIOLATION_EX);
16844 RET(4)
16845 }
16846RET(22)
16847}
16848
16849// MOVEaSR
16850OPCODE(0x46FC)
16851{
16852 u32 adr, res;
16853 u32 src, dst;
16854
16855 if (flag_S)
16856 {
16857 FETCH_WORD(res);
16858 SET_SR(res)
16859 if (!flag_S)
16860 {
16861 res = AREG(7);
16862 AREG(7) = ASP;
16863 ASP = res;
16864 }
16865 CHECK_INT_TO_JUMP(16)
16866 }
16867 else
16868 {
16869 u32 oldPC=GET_PC;
16870 SET_PC(oldPC-2)
16871 execute_exception(M68K_PRIVILEGE_VIOLATION_EX);
16872 RET(4)
16873 }
16874RET(16)
16875}
16876
16877// MOVEaSR
16878OPCODE(0x46DF)
16879{
16880 u32 adr, res;
16881 u32 src, dst;
16882
16883 if (flag_S)
16884 {
16885 adr = AREG(7);
16886 AREG(7) += 2;
16887 PRE_IO
16888 READ_WORD_F(adr, res)
16889 SET_SR(res)
16890 if (!flag_S)
16891 {
16892 res = AREG(7);
16893 AREG(7) = ASP;
16894 ASP = res;
16895 }
16896 POST_IO
16897 CHECK_INT_TO_JUMP(16)
16898 }
16899 else
16900 {
16901 u32 oldPC=GET_PC;
16902 SET_PC(oldPC-2)
16903 execute_exception(M68K_PRIVILEGE_VIOLATION_EX);
16904 RET(4)
16905 }
16906RET(16)
16907}
16908
16909// MOVEaSR
16910OPCODE(0x46E7)
16911{
16912 u32 adr, res;
16913 u32 src, dst;
16914
16915 if (flag_S)
16916 {
16917 adr = AREG(7) - 2;
16918 AREG(7) = adr;
16919 PRE_IO
16920 READ_WORD_F(adr, res)
16921 SET_SR(res)
16922 if (!flag_S)
16923 {
16924 res = AREG(7);
16925 AREG(7) = ASP;
16926 ASP = res;
16927 }
16928 POST_IO
16929 CHECK_INT_TO_JUMP(18)
16930 }
16931 else
16932 {
16933 u32 oldPC=GET_PC;
16934 SET_PC(oldPC-2)
16935 execute_exception(M68K_PRIVILEGE_VIOLATION_EX);
16936 RET(4)
16937 }
16938RET(18)
16939}
16940
16941// NBCD
16942OPCODE(0x4800)
16943{
16944 u32 adr, res;
16945 u32 src, dst;
16946
16947 res = DREGu8((Opcode >> 0) & 7);
16948 res = 0x9a - res - ((flag_X >> M68K_SR_X_SFT) & 1);
16949
16950 if (res != 0x9a)
16951 {
16952 if ((res & 0x0f) == 0xa) res = (res & 0xf0) + 0x10;
16953 res &= 0xFF;
16954 DREGu8((Opcode >> 0) & 7) = res;
16955 flag_NotZ |= res;
16956 flag_X = flag_C = M68K_SR_C;
16957 }
16958 else flag_X = flag_C = 0;
16959 flag_N = res;
16960RET(6)
16961}
16962
16963// NBCD
16964OPCODE(0x4810)
16965{
16966 u32 adr, res;
16967 u32 src, dst;
16968
16969 adr = AREG((Opcode >> 0) & 7);
16970 PRE_IO
16971 READ_BYTE_F(adr, res)
16972 res = 0x9a - res - ((flag_X >> M68K_SR_X_SFT) & 1);
16973
16974 if (res != 0x9a)
16975 {
16976 if ((res & 0x0f) == 0xa) res = (res & 0xf0) + 0x10;
16977 res &= 0xFF;
16978 WRITE_BYTE_F(adr, res)
16979 flag_NotZ |= res;
16980 flag_X = flag_C = M68K_SR_C;
16981 }
16982 else flag_X = flag_C = 0;
16983 flag_N = res;
16984 POST_IO
16985RET(12)
16986}
16987
16988// NBCD
16989OPCODE(0x4818)
16990{
16991 u32 adr, res;
16992 u32 src, dst;
16993
16994 adr = AREG((Opcode >> 0) & 7);
16995 AREG((Opcode >> 0) & 7) += 1;
16996 PRE_IO
16997 READ_BYTE_F(adr, res)
16998 res = 0x9a - res - ((flag_X >> M68K_SR_X_SFT) & 1);
16999
17000 if (res != 0x9a)
17001 {
17002 if ((res & 0x0f) == 0xa) res = (res & 0xf0) + 0x10;
17003 res &= 0xFF;
17004 WRITE_BYTE_F(adr, res)
17005 flag_NotZ |= res;
17006 flag_X = flag_C = M68K_SR_C;
17007 }
17008 else flag_X = flag_C = 0;
17009 flag_N = res;
17010 POST_IO
17011RET(12)
17012}
17013
17014// NBCD
17015OPCODE(0x4820)
17016{
17017 u32 adr, res;
17018 u32 src, dst;
17019
17020 adr = AREG((Opcode >> 0) & 7) - 1;
17021 AREG((Opcode >> 0) & 7) = adr;
17022 PRE_IO
17023 READ_BYTE_F(adr, res)
17024 res = 0x9a - res - ((flag_X >> M68K_SR_X_SFT) & 1);
17025
17026 if (res != 0x9a)
17027 {
17028 if ((res & 0x0f) == 0xa) res = (res & 0xf0) + 0x10;
17029 res &= 0xFF;
17030 WRITE_BYTE_F(adr, res)
17031 flag_NotZ |= res;
17032 flag_X = flag_C = M68K_SR_C;
17033 }
17034 else flag_X = flag_C = 0;
17035 flag_N = res;
17036 POST_IO
17037RET(14)
17038}
17039
17040// NBCD
17041OPCODE(0x4828)
17042{
17043 u32 adr, res;
17044 u32 src, dst;
17045
17046 FETCH_SWORD(adr);
17047 adr += AREG((Opcode >> 0) & 7);
17048 PRE_IO
17049 READ_BYTE_F(adr, res)
17050 res = 0x9a - res - ((flag_X >> M68K_SR_X_SFT) & 1);
17051
17052 if (res != 0x9a)
17053 {
17054 if ((res & 0x0f) == 0xa) res = (res & 0xf0) + 0x10;
17055 res &= 0xFF;
17056 WRITE_BYTE_F(adr, res)
17057 flag_NotZ |= res;
17058 flag_X = flag_C = M68K_SR_C;
17059 }
17060 else flag_X = flag_C = 0;
17061 flag_N = res;
17062 POST_IO
17063RET(16)
17064}
17065
17066// NBCD
17067OPCODE(0x4830)
17068{
17069 u32 adr, res;
17070 u32 src, dst;
17071
17072 adr = AREG((Opcode >> 0) & 7);
17073 DECODE_EXT_WORD
17074 PRE_IO
17075 READ_BYTE_F(adr, res)
17076 res = 0x9a - res - ((flag_X >> M68K_SR_X_SFT) & 1);
17077
17078 if (res != 0x9a)
17079 {
17080 if ((res & 0x0f) == 0xa) res = (res & 0xf0) + 0x10;
17081 res &= 0xFF;
17082 WRITE_BYTE_F(adr, res)
17083 flag_NotZ |= res;
17084 flag_X = flag_C = M68K_SR_C;
17085 }
17086 else flag_X = flag_C = 0;
17087 flag_N = res;
17088 POST_IO
17089RET(18)
17090}
17091
17092// NBCD
17093OPCODE(0x4838)
17094{
17095 u32 adr, res;
17096 u32 src, dst;
17097
17098 FETCH_SWORD(adr);
17099 PRE_IO
17100 READ_BYTE_F(adr, res)
17101 res = 0x9a - res - ((flag_X >> M68K_SR_X_SFT) & 1);
17102
17103 if (res != 0x9a)
17104 {
17105 if ((res & 0x0f) == 0xa) res = (res & 0xf0) + 0x10;
17106 res &= 0xFF;
17107 WRITE_BYTE_F(adr, res)
17108 flag_NotZ |= res;
17109 flag_X = flag_C = M68K_SR_C;
17110 }
17111 else flag_X = flag_C = 0;
17112 flag_N = res;
17113 POST_IO
17114RET(16)
17115}
17116
17117// NBCD
17118OPCODE(0x4839)
17119{
17120 u32 adr, res;
17121 u32 src, dst;
17122
17123 FETCH_LONG(adr);
17124 PRE_IO
17125 READ_BYTE_F(adr, res)
17126 res = 0x9a - res - ((flag_X >> M68K_SR_X_SFT) & 1);
17127
17128 if (res != 0x9a)
17129 {
17130 if ((res & 0x0f) == 0xa) res = (res & 0xf0) + 0x10;
17131 res &= 0xFF;
17132 WRITE_BYTE_F(adr, res)
17133 flag_NotZ |= res;
17134 flag_X = flag_C = M68K_SR_C;
17135 }
17136 else flag_X = flag_C = 0;
17137 flag_N = res;
17138 POST_IO
17139RET(20)
17140}
17141
17142// NBCD
17143OPCODE(0x481F)
17144{
17145 u32 adr, res;
17146 u32 src, dst;
17147
17148 adr = AREG(7);
17149 AREG(7) += 2;
17150 PRE_IO
17151 READ_BYTE_F(adr, res)
17152 res = 0x9a - res - ((flag_X >> M68K_SR_X_SFT) & 1);
17153
17154 if (res != 0x9a)
17155 {
17156 if ((res & 0x0f) == 0xa) res = (res & 0xf0) + 0x10;
17157 res &= 0xFF;
17158 WRITE_BYTE_F(adr, res)
17159 flag_NotZ |= res;
17160 flag_X = flag_C = M68K_SR_C;
17161 }
17162 else flag_X = flag_C = 0;
17163 flag_N = res;
17164 POST_IO
17165RET(12)
17166}
17167
17168// NBCD
17169OPCODE(0x4827)
17170{
17171 u32 adr, res;
17172 u32 src, dst;
17173
17174 adr = AREG(7) - 2;
17175 AREG(7) = adr;
17176 PRE_IO
17177 READ_BYTE_F(adr, res)
17178 res = 0x9a - res - ((flag_X >> M68K_SR_X_SFT) & 1);
17179
17180 if (res != 0x9a)
17181 {
17182 if ((res & 0x0f) == 0xa) res = (res & 0xf0) + 0x10;
17183 res &= 0xFF;
17184 WRITE_BYTE_F(adr, res)
17185 flag_NotZ |= res;
17186 flag_X = flag_C = M68K_SR_C;
17187 }
17188 else flag_X = flag_C = 0;
17189 flag_N = res;
17190 POST_IO
17191RET(14)
17192}
17193
17194// PEA
17195OPCODE(0x4850)
17196{
17197 u32 adr, res;
17198 u32 src, dst;
17199
17200 adr = AREG((Opcode >> 0) & 7);
17201 PRE_IO
17202 PUSH_32_F(adr)
17203 POST_IO
17204RET(12)
17205}
17206
17207// PEA
17208OPCODE(0x4868)
17209{
17210 u32 adr, res;
17211 u32 src, dst;
17212
17213 FETCH_SWORD(adr);
17214 adr += AREG((Opcode >> 0) & 7);
17215 PRE_IO
17216 PUSH_32_F(adr)
17217 POST_IO
17218RET(16)
17219}
17220
17221// PEA
17222OPCODE(0x4870)
17223{
17224 u32 adr, res;
17225 u32 src, dst;
17226
17227 adr = AREG((Opcode >> 0) & 7);
17228 DECODE_EXT_WORD
17229 PRE_IO
17230 PUSH_32_F(adr)
17231 POST_IO
17232RET(20)
17233}
17234
17235// PEA
17236OPCODE(0x4878)
17237{
17238 u32 adr, res;
17239 u32 src, dst;
17240
17241 FETCH_SWORD(adr);
17242 PRE_IO
17243 PUSH_32_F(adr)
17244 POST_IO
17245RET(16)
17246}
17247
17248// PEA
17249OPCODE(0x4879)
17250{
17251 u32 adr, res;
17252 u32 src, dst;
17253
17254 FETCH_LONG(adr);
17255 PRE_IO
17256 PUSH_32_F(adr)
17257 POST_IO
17258RET(20)
17259}
17260
17261// PEA
17262OPCODE(0x487A)
17263{
17264 u32 adr, res;
17265 u32 src, dst;
17266
17267 adr = GET_SWORD + ((u32)(PC) - BasePC);
17268 PC++;
17269 PRE_IO
17270 PUSH_32_F(adr)
17271 POST_IO
17272RET(16)
17273}
17274
17275// PEA
17276OPCODE(0x487B)
17277{
17278 u32 adr, res;
17279 u32 src, dst;
17280
17281 adr = (u32)(PC) - BasePC;
17282 DECODE_EXT_WORD
17283 PRE_IO
17284 PUSH_32_F(adr)
17285 POST_IO
17286RET(20)
17287}
17288
17289// SWAP
17290OPCODE(0x4840)
17291{
17292 u32 adr, res;
17293 u32 src, dst;
17294
17295 res = DREGu32((Opcode >> 0) & 7);
17296 res = (res >> 16) | (res << 16);
17297 flag_C = 0;
17298 flag_V = 0;
17299 flag_NotZ = res;
17300 flag_N = res >> 24;
17301 DREGu32((Opcode >> 0) & 7) = res;
17302RET(4)
17303}
17304
17305// MOVEMRa
17306OPCODE(0x4890)
17307{
17308 u32 adr, res;
17309 u32 src, dst;
17310
17311 u32 *psrc;
17312
17313 FETCH_WORD(res);
17314 adr = AREG((Opcode >> 0) & 7);
17315 psrc = &DREGu32(0);
17316 dst = adr;
17317 PRE_IO
17318 do
17319 {
17320 if (res & 1)
17321 {
17322 WRITE_WORD_F(adr, *psrc)
17323 adr += 2;
17324 }
17325 psrc++;
17326 } while (res >>= 1);
17327 POST_IO
17328 m68kcontext.io_cycle_counter -= (adr - dst) * 2;
17329#ifdef USE_CYCLONE_TIMING
17330RET(8)
17331#else
17332RET(12)
17333#endif
17334}
17335
17336// MOVEMRa
17337OPCODE(0x48A0)
17338{
17339 u32 adr, res;
17340 u32 src, dst;
17341
17342 u32 *psrc;
17343
17344 FETCH_WORD(res);
17345 adr = AREG((Opcode >> 0) & 7);
17346 psrc = &AREGu32(7);
17347 dst = adr;
17348 PRE_IO
17349 do
17350 {
17351 if (res & 1)
17352 {
17353 adr -= 2;
17354 WRITE_WORD_F(adr, *psrc)
17355 }
17356 psrc--;
17357 } while (res >>= 1);
17358 AREG((Opcode >> 0) & 7) = adr;
17359 POST_IO
17360 m68kcontext.io_cycle_counter -= (dst - adr) * 2;
17361RET(8)
17362}
17363
17364// MOVEMRa
17365OPCODE(0x48A8)
17366{
17367 u32 adr, res;
17368 u32 src, dst;
17369
17370 u32 *psrc;
17371
17372 FETCH_WORD(res);
17373 FETCH_SWORD(adr);
17374 adr += AREG((Opcode >> 0) & 7);
17375 psrc = &DREGu32(0);
17376 dst = adr;
17377 PRE_IO
17378 do
17379 {
17380 if (res & 1)
17381 {
17382 WRITE_WORD_F(adr, *psrc)
17383 adr += 2;
17384 }
17385 psrc++;
17386 } while (res >>= 1);
17387 POST_IO
17388 m68kcontext.io_cycle_counter -= (adr - dst) * 2;
17389#ifdef USE_CYCLONE_TIMING
17390RET(12)
17391#else
17392RET(20)
17393#endif
17394}
17395
17396// MOVEMRa
17397OPCODE(0x48B0)
17398{
17399 u32 adr, res;
17400 u32 src, dst;
17401
17402 u32 *psrc;
17403
17404 FETCH_WORD(res);
17405 adr = AREG((Opcode >> 0) & 7);
17406 DECODE_EXT_WORD
17407 psrc = &DREGu32(0);
17408 dst = adr;
17409 PRE_IO
17410 do
17411 {
17412 if (res & 1)
17413 {
17414 WRITE_WORD_F(adr, *psrc)
17415 adr += 2;
17416 }
17417 psrc++;
17418 } while (res >>= 1);
17419 POST_IO
17420 m68kcontext.io_cycle_counter -= (adr - dst) * 2;
17421#ifdef USE_CYCLONE_TIMING
17422RET(14)
17423#else
17424RET(24)
17425#endif
17426}
17427
17428// MOVEMRa
17429OPCODE(0x48B8)
17430{
17431 u32 adr, res;
17432 u32 src, dst;
17433
17434 u32 *psrc;
17435
17436 FETCH_WORD(res);
17437 FETCH_SWORD(adr);
17438 psrc = &DREGu32(0);
17439 dst = adr;
17440 PRE_IO
17441 do
17442 {
17443 if (res & 1)
17444 {
17445 WRITE_WORD_F(adr, *psrc)
17446 adr += 2;
17447 }
17448 psrc++;
17449 } while (res >>= 1);
17450 POST_IO
17451 m68kcontext.io_cycle_counter -= (adr - dst) * 2;
17452#ifdef USE_CYCLONE_TIMING
17453RET(12)
17454#else
17455RET(20)
17456#endif
17457}
17458
17459// MOVEMRa
17460OPCODE(0x48B9)
17461{
17462 u32 adr, res;
17463 u32 src, dst;
17464
17465 u32 *psrc;
17466
17467 FETCH_WORD(res);
17468 FETCH_LONG(adr);
17469 psrc = &DREGu32(0);
17470 dst = adr;
17471 PRE_IO
17472 do
17473 {
17474 if (res & 1)
17475 {
17476 WRITE_WORD_F(adr, *psrc)
17477 adr += 2;
17478 }
17479 psrc++;
17480 } while (res >>= 1);
17481 POST_IO
17482 m68kcontext.io_cycle_counter -= (adr - dst) * 2;
17483#ifdef USE_CYCLONE_TIMING
17484RET(16)
17485#else
17486RET(28)
17487#endif
17488}
17489
17490// MOVEMRa
17491OPCODE(0x48A7)
17492{
17493 u32 adr, res;
17494 u32 src, dst;
17495
17496 u32 *psrc;
17497
17498 FETCH_WORD(res);
17499 adr = AREG(7);
17500 psrc = &AREGu32(7);
17501 dst = adr;
17502 PRE_IO
17503 do
17504 {
17505 if (res & 1)
17506 {
17507 adr -= 2;
17508 WRITE_WORD_F(adr, *psrc)
17509 }
17510 psrc--;
17511 } while (res >>= 1);
17512 AREG(7) = adr;
17513 POST_IO
17514 m68kcontext.io_cycle_counter -= (dst - adr) * 2;
17515RET(8)
17516}
17517
17518// MOVEMRa
17519OPCODE(0x48D0)
17520{
17521 u32 adr, res;
17522 u32 src, dst;
17523
17524 u32 *psrc;
17525
17526 FETCH_WORD(res);
17527 adr = AREG((Opcode >> 0) & 7);
17528 psrc = &DREGu32(0);
17529 dst = adr;
17530 PRE_IO
17531 do
17532 {
17533 if (res & 1)
17534 {
17535 WRITE_LONG_F(adr, *psrc)
17536 adr += 4;
17537 }
17538 psrc++;
17539 } while (res >>= 1);
17540 POST_IO
17541 m68kcontext.io_cycle_counter -= (adr - dst) * 2;
17542#ifdef USE_CYCLONE_TIMING
17543RET(8)
17544#else
17545RET(16)
17546#endif
17547}
17548
17549// MOVEMRa
17550OPCODE(0x48E0)
17551{
17552 u32 adr, res;
17553 u32 src, dst;
17554
17555 u32 *psrc;
17556
17557 FETCH_WORD(res);
17558 adr = AREG((Opcode >> 0) & 7);
17559 psrc = &AREGu32(7);
17560 dst = adr;
17561 PRE_IO
17562 do
17563 {
17564 if (res & 1)
17565 {
17566 adr -= 4;
17567 WRITE_LONG_DEC_F(adr, *psrc)
17568 }
17569 psrc--;
17570 } while (res >>= 1);
17571 AREG((Opcode >> 0) & 7) = adr;
17572 POST_IO
17573 m68kcontext.io_cycle_counter -= (dst - adr) * 2;
17574RET(8)
17575}
17576
17577// MOVEMRa
17578OPCODE(0x48E8)
17579{
17580 u32 adr, res;
17581 u32 src, dst;
17582
17583 u32 *psrc;
17584
17585 FETCH_WORD(res);
17586 FETCH_SWORD(adr);
17587 adr += AREG((Opcode >> 0) & 7);
17588 psrc = &DREGu32(0);
17589 dst = adr;
17590 PRE_IO
17591 do
17592 {
17593 if (res & 1)
17594 {
17595 WRITE_LONG_F(adr, *psrc)
17596 adr += 4;
17597 }
17598 psrc++;
17599 } while (res >>= 1);
17600 POST_IO
17601 m68kcontext.io_cycle_counter -= (adr - dst) * 2;
17602#ifdef USE_CYCLONE_TIMING
17603RET(12)
17604#else
17605RET(24)
17606#endif
17607}
17608
17609// MOVEMRa
17610OPCODE(0x48F0)
17611{
17612 u32 adr, res;
17613 u32 src, dst;
17614
17615 u32 *psrc;
17616
17617 FETCH_WORD(res);
17618 adr = AREG((Opcode >> 0) & 7);
17619 DECODE_EXT_WORD
17620 psrc = &DREGu32(0);
17621 dst = adr;
17622 PRE_IO
17623 do
17624 {
17625 if (res & 1)
17626 {
17627 WRITE_LONG_F(adr, *psrc)
17628 adr += 4;
17629 }
17630 psrc++;
17631 } while (res >>= 1);
17632 POST_IO
17633 m68kcontext.io_cycle_counter -= (adr - dst) * 2;
17634#ifdef USE_CYCLONE_TIMING
17635RET(14)
17636#else
17637RET(28)
17638#endif
17639}
17640
17641// MOVEMRa
17642OPCODE(0x48F8)
17643{
17644 u32 adr, res;
17645 u32 src, dst;
17646
17647 u32 *psrc;
17648
17649 FETCH_WORD(res);
17650 FETCH_SWORD(adr);
17651 psrc = &DREGu32(0);
17652 dst = adr;
17653 PRE_IO
17654 do
17655 {
17656 if (res & 1)
17657 {
17658 WRITE_LONG_F(adr, *psrc)
17659 adr += 4;
17660 }
17661 psrc++;
17662 } while (res >>= 1);
17663 POST_IO
17664 m68kcontext.io_cycle_counter -= (adr - dst) * 2;
17665#ifdef USE_CYCLONE_TIMING
17666RET(12)
17667#else
17668RET(24)
17669#endif
17670}
17671
17672// MOVEMRa
17673OPCODE(0x48F9)
17674{
17675 u32 adr, res;
17676 u32 src, dst;
17677
17678 u32 *psrc;
17679
17680 FETCH_WORD(res);
17681 FETCH_LONG(adr);
17682 psrc = &DREGu32(0);
17683 dst = adr;
17684 PRE_IO
17685 do
17686 {
17687 if (res & 1)
17688 {
17689 WRITE_LONG_F(adr, *psrc)
17690 adr += 4;
17691 }
17692 psrc++;
17693 } while (res >>= 1);
17694 POST_IO
17695 m68kcontext.io_cycle_counter -= (adr - dst) * 2;
17696#ifdef USE_CYCLONE_TIMING
17697RET(16)
17698#else
17699RET(32)
17700#endif
17701}
17702
17703// MOVEMRa
17704OPCODE(0x48E7)
17705{
17706 u32 adr, res;
17707 u32 src, dst;
17708
17709 u32 *psrc;
17710
17711 FETCH_WORD(res);
17712 adr = AREG(7);
17713 psrc = &AREGu32(7);
17714 dst = adr;
17715 PRE_IO
17716 do
17717 {
17718 if (res & 1)
17719 {
17720 adr -= 4;
17721 WRITE_LONG_DEC_F(adr, *psrc)
17722 }
17723 psrc--;
17724 } while (res >>= 1);
17725 AREG(7) = adr;
17726 POST_IO
17727 m68kcontext.io_cycle_counter -= (dst - adr) * 2;
17728RET(8)
17729}
17730
17731// EXT
17732OPCODE(0x4880)
17733{
17734 u32 adr, res;
17735 u32 src, dst;
17736
17737 res = (s32)DREGs8((Opcode >> 0) & 7);
17738 flag_C = 0;
17739 flag_V = 0;
17740 flag_NotZ = res;
17741 flag_N = res;
17742 DREGu16((Opcode >> 0) & 7) = res;
17743RET(4)
17744}
17745
17746// EXT
17747OPCODE(0x48C0)
17748{
17749 u32 adr, res;
17750 u32 src, dst;
17751
17752 res = (s32)DREGs16((Opcode >> 0) & 7);
17753 flag_C = 0;
17754 flag_V = 0;
17755 flag_NotZ = res;
17756 flag_N = res >> 8;
17757 DREGu32((Opcode >> 0) & 7) = res;
17758RET(4)
17759}
17760
17761// TST
17762OPCODE(0x4A00)
17763{
17764 u32 adr, res;
17765 u32 src, dst;
17766
17767 res = DREGu8((Opcode >> 0) & 7);
17768 flag_C = 0;
17769 flag_V = 0;
17770 flag_NotZ = res;
17771 flag_N = res;
17772RET(4)
17773}
17774
17775// TST
17776OPCODE(0x4A10)
17777{
17778 u32 adr, res;
17779 u32 src, dst;
17780
17781 adr = AREG((Opcode >> 0) & 7);
17782 PRE_IO
17783 READ_BYTE_F(adr, res)
17784 flag_C = 0;
17785 flag_V = 0;
17786 flag_NotZ = res;
17787 flag_N = res;
17788 POST_IO
17789RET(8)
17790}
17791
17792// TST
17793OPCODE(0x4A18)
17794{
17795 u32 adr, res;
17796 u32 src, dst;
17797
17798 adr = AREG((Opcode >> 0) & 7);
17799 AREG((Opcode >> 0) & 7) += 1;
17800 PRE_IO
17801 READ_BYTE_F(adr, res)
17802 flag_C = 0;
17803 flag_V = 0;
17804 flag_NotZ = res;
17805 flag_N = res;
17806 POST_IO
17807RET(8)
17808}
17809
17810// TST
17811OPCODE(0x4A20)
17812{
17813 u32 adr, res;
17814 u32 src, dst;
17815
17816 adr = AREG((Opcode >> 0) & 7) - 1;
17817 AREG((Opcode >> 0) & 7) = adr;
17818 PRE_IO
17819 READ_BYTE_F(adr, res)
17820 flag_C = 0;
17821 flag_V = 0;
17822 flag_NotZ = res;
17823 flag_N = res;
17824 POST_IO
17825RET(10)
17826}
17827
17828// TST
17829OPCODE(0x4A28)
17830{
17831 u32 adr, res;
17832 u32 src, dst;
17833
17834 FETCH_SWORD(adr);
17835 adr += AREG((Opcode >> 0) & 7);
17836 PRE_IO
17837 READ_BYTE_F(adr, res)
17838 flag_C = 0;
17839 flag_V = 0;
17840 flag_NotZ = res;
17841 flag_N = res;
17842 POST_IO
17843RET(12)
17844}
17845
17846// TST
17847OPCODE(0x4A30)
17848{
17849 u32 adr, res;
17850 u32 src, dst;
17851
17852 adr = AREG((Opcode >> 0) & 7);
17853 DECODE_EXT_WORD
17854 PRE_IO
17855 READ_BYTE_F(adr, res)
17856 flag_C = 0;
17857 flag_V = 0;
17858 flag_NotZ = res;
17859 flag_N = res;
17860 POST_IO
17861RET(14)
17862}
17863
17864// TST
17865OPCODE(0x4A38)
17866{
17867 u32 adr, res;
17868 u32 src, dst;
17869
17870 FETCH_SWORD(adr);
17871 PRE_IO
17872 READ_BYTE_F(adr, res)
17873 flag_C = 0;
17874 flag_V = 0;
17875 flag_NotZ = res;
17876 flag_N = res;
17877 POST_IO
17878RET(12)
17879}
17880
17881// TST
17882OPCODE(0x4A39)
17883{
17884 u32 adr, res;
17885 u32 src, dst;
17886
17887 FETCH_LONG(adr);
17888 PRE_IO
17889 READ_BYTE_F(adr, res)
17890 flag_C = 0;
17891 flag_V = 0;
17892 flag_NotZ = res;
17893 flag_N = res;
17894 POST_IO
17895RET(16)
17896}
17897
17898// TST
17899OPCODE(0x4A1F)
17900{
17901 u32 adr, res;
17902 u32 src, dst;
17903
17904 adr = AREG(7);
17905 AREG(7) += 2;
17906 PRE_IO
17907 READ_BYTE_F(adr, res)
17908 flag_C = 0;
17909 flag_V = 0;
17910 flag_NotZ = res;
17911 flag_N = res;
17912 POST_IO
17913RET(8)
17914}
17915
17916// TST
17917OPCODE(0x4A27)
17918{
17919 u32 adr, res;
17920 u32 src, dst;
17921
17922 adr = AREG(7) - 2;
17923 AREG(7) = adr;
17924 PRE_IO
17925 READ_BYTE_F(adr, res)
17926 flag_C = 0;
17927 flag_V = 0;
17928 flag_NotZ = res;
17929 flag_N = res;
17930 POST_IO
17931RET(10)
17932}
17933
17934// TST
17935OPCODE(0x4A40)
17936{
17937 u32 adr, res;
17938 u32 src, dst;
17939
17940 res = DREGu16((Opcode >> 0) & 7);
17941 flag_C = 0;
17942 flag_V = 0;
17943 flag_NotZ = res;
17944 flag_N = res >> 8;
17945RET(4)
17946}
17947
17948// TST
17949OPCODE(0x4A50)
17950{
17951 u32 adr, res;
17952 u32 src, dst;
17953
17954 adr = AREG((Opcode >> 0) & 7);
17955 PRE_IO
17956 READ_WORD_F(adr, res)
17957 flag_C = 0;
17958 flag_V = 0;
17959 flag_NotZ = res;
17960 flag_N = res >> 8;
17961 POST_IO
17962RET(8)
17963}
17964
17965// TST
17966OPCODE(0x4A58)
17967{
17968 u32 adr, res;
17969 u32 src, dst;
17970
17971 adr = AREG((Opcode >> 0) & 7);
17972 AREG((Opcode >> 0) & 7) += 2;
17973 PRE_IO
17974 READ_WORD_F(adr, res)
17975 flag_C = 0;
17976 flag_V = 0;
17977 flag_NotZ = res;
17978 flag_N = res >> 8;
17979 POST_IO
17980RET(8)
17981}
17982
17983// TST
17984OPCODE(0x4A60)
17985{
17986 u32 adr, res;
17987 u32 src, dst;
17988
17989 adr = AREG((Opcode >> 0) & 7) - 2;
17990 AREG((Opcode >> 0) & 7) = adr;
17991 PRE_IO
17992 READ_WORD_F(adr, res)
17993 flag_C = 0;
17994 flag_V = 0;
17995 flag_NotZ = res;
17996 flag_N = res >> 8;
17997 POST_IO
17998RET(10)
17999}
18000
18001// TST
18002OPCODE(0x4A68)
18003{
18004 u32 adr, res;
18005 u32 src, dst;
18006
18007 FETCH_SWORD(adr);
18008 adr += AREG((Opcode >> 0) & 7);
18009 PRE_IO
18010 READ_WORD_F(adr, res)
18011 flag_C = 0;
18012 flag_V = 0;
18013 flag_NotZ = res;
18014 flag_N = res >> 8;
18015 POST_IO
18016RET(12)
18017}
18018
18019// TST
18020OPCODE(0x4A70)
18021{
18022 u32 adr, res;
18023 u32 src, dst;
18024
18025 adr = AREG((Opcode >> 0) & 7);
18026 DECODE_EXT_WORD
18027 PRE_IO
18028 READ_WORD_F(adr, res)
18029 flag_C = 0;
18030 flag_V = 0;
18031 flag_NotZ = res;
18032 flag_N = res >> 8;
18033 POST_IO
18034RET(14)
18035}
18036
18037// TST
18038OPCODE(0x4A78)
18039{
18040 u32 adr, res;
18041 u32 src, dst;
18042
18043 FETCH_SWORD(adr);
18044 PRE_IO
18045 READ_WORD_F(adr, res)
18046 flag_C = 0;
18047 flag_V = 0;
18048 flag_NotZ = res;
18049 flag_N = res >> 8;
18050 POST_IO
18051RET(12)
18052}
18053
18054// TST
18055OPCODE(0x4A79)
18056{
18057 u32 adr, res;
18058 u32 src, dst;
18059
18060 FETCH_LONG(adr);
18061 PRE_IO
18062 READ_WORD_F(adr, res)
18063 flag_C = 0;
18064 flag_V = 0;
18065 flag_NotZ = res;
18066 flag_N = res >> 8;
18067 POST_IO
18068RET(16)
18069}
18070
18071// TST
18072OPCODE(0x4A5F)
18073{
18074 u32 adr, res;
18075 u32 src, dst;
18076
18077 adr = AREG(7);
18078 AREG(7) += 2;
18079 PRE_IO
18080 READ_WORD_F(adr, res)
18081 flag_C = 0;
18082 flag_V = 0;
18083 flag_NotZ = res;
18084 flag_N = res >> 8;
18085 POST_IO
18086RET(8)
18087}
18088
18089// TST
18090OPCODE(0x4A67)
18091{
18092 u32 adr, res;
18093 u32 src, dst;
18094
18095 adr = AREG(7) - 2;
18096 AREG(7) = adr;
18097 PRE_IO
18098 READ_WORD_F(adr, res)
18099 flag_C = 0;
18100 flag_V = 0;
18101 flag_NotZ = res;
18102 flag_N = res >> 8;
18103 POST_IO
18104RET(10)
18105}
18106
18107// TST
18108OPCODE(0x4A80)
18109{
18110 u32 adr, res;
18111 u32 src, dst;
18112
18113 res = DREGu32((Opcode >> 0) & 7);
18114 flag_C = 0;
18115 flag_V = 0;
18116 flag_NotZ = res;
18117 flag_N = res >> 24;
18118RET(4)
18119}
18120
18121// TST
18122OPCODE(0x4A90)
18123{
18124 u32 adr, res;
18125 u32 src, dst;
18126
18127 adr = AREG((Opcode >> 0) & 7);
18128 PRE_IO
18129 READ_LONG_F(adr, res)
18130 flag_C = 0;
18131 flag_V = 0;
18132 flag_NotZ = res;
18133 flag_N = res >> 24;
18134 POST_IO
18135RET(12)
18136}
18137
18138// TST
18139OPCODE(0x4A98)
18140{
18141 u32 adr, res;
18142 u32 src, dst;
18143
18144 adr = AREG((Opcode >> 0) & 7);
18145 AREG((Opcode >> 0) & 7) += 4;
18146 PRE_IO
18147 READ_LONG_F(adr, res)
18148 flag_C = 0;
18149 flag_V = 0;
18150 flag_NotZ = res;
18151 flag_N = res >> 24;
18152 POST_IO
18153RET(12)
18154}
18155
18156// TST
18157OPCODE(0x4AA0)
18158{
18159 u32 adr, res;
18160 u32 src, dst;
18161
18162 adr = AREG((Opcode >> 0) & 7) - 4;
18163 AREG((Opcode >> 0) & 7) = adr;
18164 PRE_IO
18165 READ_LONG_F(adr, res)
18166 flag_C = 0;
18167 flag_V = 0;
18168 flag_NotZ = res;
18169 flag_N = res >> 24;
18170 POST_IO
18171RET(14)
18172}
18173
18174// TST
18175OPCODE(0x4AA8)
18176{
18177 u32 adr, res;
18178 u32 src, dst;
18179
18180 FETCH_SWORD(adr);
18181 adr += AREG((Opcode >> 0) & 7);
18182 PRE_IO
18183 READ_LONG_F(adr, res)
18184 flag_C = 0;
18185 flag_V = 0;
18186 flag_NotZ = res;
18187 flag_N = res >> 24;
18188 POST_IO
18189RET(16)
18190}
18191
18192// TST
18193OPCODE(0x4AB0)
18194{
18195 u32 adr, res;
18196 u32 src, dst;
18197
18198 adr = AREG((Opcode >> 0) & 7);
18199 DECODE_EXT_WORD
18200 PRE_IO
18201 READ_LONG_F(adr, res)
18202 flag_C = 0;
18203 flag_V = 0;
18204 flag_NotZ = res;
18205 flag_N = res >> 24;
18206 POST_IO
18207RET(18)
18208}
18209
18210// TST
18211OPCODE(0x4AB8)
18212{
18213 u32 adr, res;
18214 u32 src, dst;
18215
18216 FETCH_SWORD(adr);
18217 PRE_IO
18218 READ_LONG_F(adr, res)
18219 flag_C = 0;
18220 flag_V = 0;
18221 flag_NotZ = res;
18222 flag_N = res >> 24;
18223 POST_IO
18224RET(16)
18225}
18226
18227// TST
18228OPCODE(0x4AB9)
18229{
18230 u32 adr, res;
18231 u32 src, dst;
18232
18233 FETCH_LONG(adr);
18234 PRE_IO
18235 READ_LONG_F(adr, res)
18236 flag_C = 0;
18237 flag_V = 0;
18238 flag_NotZ = res;
18239 flag_N = res >> 24;
18240 POST_IO
18241RET(20)
18242}
18243
18244// TST
18245OPCODE(0x4A9F)
18246{
18247 u32 adr, res;
18248 u32 src, dst;
18249
18250 adr = AREG(7);
18251 AREG(7) += 4;
18252 PRE_IO
18253 READ_LONG_F(adr, res)
18254 flag_C = 0;
18255 flag_V = 0;
18256 flag_NotZ = res;
18257 flag_N = res >> 24;
18258 POST_IO
18259RET(12)
18260}
18261
18262// TST
18263OPCODE(0x4AA7)
18264{
18265 u32 adr, res;
18266 u32 src, dst;
18267
18268 adr = AREG(7) - 4;
18269 AREG(7) = adr;
18270 PRE_IO
18271 READ_LONG_F(adr, res)
18272 flag_C = 0;
18273 flag_V = 0;
18274 flag_NotZ = res;
18275 flag_N = res >> 24;
18276 POST_IO
18277RET(14)
18278}
18279
18280// TAS
18281OPCODE(0x4AC0)
18282{
18283 u32 adr, res;
18284 u32 src, dst;
18285
18286 res = DREGu8((Opcode >> 0) & 7);
18287 flag_C = 0;
18288 flag_V = 0;
18289 flag_NotZ = res;
18290 flag_N = res;
18291 res |= 0x80;
18292 DREGu8((Opcode >> 0) & 7) = res;
18293RET(4)
18294}
18295
18296// TAS
18297OPCODE(0x4AD0)
18298{
18299 u32 adr, res;
18300 u32 src, dst;
18301
18302 adr = AREG((Opcode >> 0) & 7);
18303 PRE_IO
18304 READ_BYTE_F(adr, res)
18305 flag_C = 0;
18306 flag_V = 0;
18307 flag_NotZ = res;
18308 flag_N = res;
18309 POST_IO
18310RET(8)
18311}
18312
18313// TAS
18314OPCODE(0x4AD8)
18315{
18316 u32 adr, res;
18317 u32 src, dst;
18318
18319 adr = AREG((Opcode >> 0) & 7);
18320 AREG((Opcode >> 0) & 7) += 1;
18321 PRE_IO
18322 READ_BYTE_F(adr, res)
18323 flag_C = 0;
18324 flag_V = 0;
18325 flag_NotZ = res;
18326 flag_N = res;
18327 POST_IO
18328RET(8)
18329}
18330
18331// TAS
18332OPCODE(0x4AE0)
18333{
18334 u32 adr, res;
18335 u32 src, dst;
18336
18337 adr = AREG((Opcode >> 0) & 7) - 1;
18338 AREG((Opcode >> 0) & 7) = adr;
18339 PRE_IO
18340 READ_BYTE_F(adr, res)
18341 flag_C = 0;
18342 flag_V = 0;
18343 flag_NotZ = res;
18344 flag_N = res;
18345 POST_IO
18346RET(10)
18347}
18348
18349// TAS
18350OPCODE(0x4AE8)
18351{
18352 u32 adr, res;
18353 u32 src, dst;
18354
18355 FETCH_SWORD(adr);
18356 adr += AREG((Opcode >> 0) & 7);
18357 PRE_IO
18358 READ_BYTE_F(adr, res)
18359 flag_C = 0;
18360 flag_V = 0;
18361 flag_NotZ = res;
18362 flag_N = res;
18363 POST_IO
18364RET(12)
18365}
18366
18367// TAS
18368OPCODE(0x4AF0)
18369{
18370 u32 adr, res;
18371 u32 src, dst;
18372
18373 adr = AREG((Opcode >> 0) & 7);
18374 DECODE_EXT_WORD
18375 PRE_IO
18376 READ_BYTE_F(adr, res)
18377 flag_C = 0;
18378 flag_V = 0;
18379 flag_NotZ = res;
18380 flag_N = res;
18381 POST_IO
18382RET(14)
18383}
18384
18385// TAS
18386OPCODE(0x4AF8)
18387{
18388 u32 adr, res;
18389 u32 src, dst;
18390
18391 FETCH_SWORD(adr);
18392 PRE_IO
18393 READ_BYTE_F(adr, res)
18394 flag_C = 0;
18395 flag_V = 0;
18396 flag_NotZ = res;
18397 flag_N = res;
18398 POST_IO
18399RET(12)
18400}
18401
18402// TAS
18403OPCODE(0x4AF9)
18404{
18405 u32 adr, res;
18406 u32 src, dst;
18407
18408 FETCH_LONG(adr);
18409 PRE_IO
18410 READ_BYTE_F(adr, res)
18411 flag_C = 0;
18412 flag_V = 0;
18413 flag_NotZ = res;
18414 flag_N = res;
18415 POST_IO
18416RET(16)
18417}
18418
18419// TAS
18420OPCODE(0x4ADF)
18421{
18422 u32 adr, res;
18423 u32 src, dst;
18424
18425 adr = AREG(7);
18426 AREG(7) += 2;
18427 PRE_IO
18428 READ_BYTE_F(adr, res)
18429 flag_C = 0;
18430 flag_V = 0;
18431 flag_NotZ = res;
18432 flag_N = res;
18433 POST_IO
18434RET(8)
18435}
18436
18437// TAS
18438OPCODE(0x4AE7)
18439{
18440 u32 adr, res;
18441 u32 src, dst;
18442
18443 adr = AREG(7) - 2;
18444 AREG(7) = adr;
18445 PRE_IO
18446 READ_BYTE_F(adr, res)
18447 flag_C = 0;
18448 flag_V = 0;
18449 flag_NotZ = res;
18450 flag_N = res;
18451 POST_IO
18452RET(10)
18453}
18454
18455// ILLEGAL
18456OPCODE(0x4AFC)
18457{
18458 u32 oldPC=GET_PC;
18459 SET_PC(oldPC-2)
18460 execute_exception(M68K_ILLEGAL_INSTRUCTION_EX);
18461RET(4)
18462}
18463
18464// ILLEGAL A000-AFFF
18465OPCODE(0xA000)
18466{
18467 u32 oldPC=GET_PC;
18468 SET_PC(oldPC-2)
18469 execute_exception(M68K_1010_EX);
18470RET(4)
18471}
18472
18473// ILLEGAL F000-FFFF
18474OPCODE(0xF000)
18475{
18476 u32 oldPC=GET_PC;
18477 SET_PC(oldPC-2)
18478 execute_exception(M68K_1111_EX);
18479RET(4)
18480}
18481
18482// MOVEMaR
18483OPCODE(0x4C90)
18484{
18485 u32 adr, res;
18486 u32 src, dst;
18487
18488 s32 *psrc;
18489
18490 FETCH_WORD(res);
18491 adr = AREG((Opcode >> 0) & 7);
18492 psrc = &DREGs32(0);
18493 dst = adr;
18494 PRE_IO
18495 do
18496 {
18497 if (res & 1)
18498 {
18499 READSX_WORD_F(adr, *psrc)
18500 adr += 2;
18501 }
18502 psrc++;
18503 } while (res >>= 1);
18504 POST_IO
18505 m68kcontext.io_cycle_counter -= (adr - dst) * 2;
18506#ifdef USE_CYCLONE_TIMING
18507RET(12)
18508#else
18509RET(16)
18510#endif
18511}
18512
18513// MOVEMaR
18514OPCODE(0x4C98)
18515{
18516 u32 adr, res;
18517 u32 src, dst;
18518
18519 s32 *psrc;
18520
18521 FETCH_WORD(res);
18522 adr = AREG((Opcode >> 0) & 7);
18523 psrc = &DREGs32(0);
18524 dst = adr;
18525 PRE_IO
18526 do
18527 {
18528 if (res & 1)
18529 {
18530 READSX_WORD_F(adr, *psrc)
18531 adr += 2;
18532 }
18533 psrc++;
18534 } while (res >>= 1);
18535 AREG((Opcode >> 0) & 7) = adr;
18536 POST_IO
18537 m68kcontext.io_cycle_counter -= (adr - dst) * 2;
18538RET(12)
18539}
18540
18541// MOVEMaR
18542OPCODE(0x4CA8)
18543{
18544 u32 adr, res;
18545 u32 src, dst;
18546
18547 s32 *psrc;
18548
18549 FETCH_WORD(res);
18550 FETCH_SWORD(adr);
18551 adr += AREG((Opcode >> 0) & 7);
18552 psrc = &DREGs32(0);
18553 dst = adr;
18554 PRE_IO
18555 do
18556 {
18557 if (res & 1)
18558 {
18559 READSX_WORD_F(adr, *psrc)
18560 adr += 2;
18561 }
18562 psrc++;
18563 } while (res >>= 1);
18564 POST_IO
18565 m68kcontext.io_cycle_counter -= (adr - dst) * 2;
18566#ifdef USE_CYCLONE_TIMING
18567RET(16)
18568#else
18569RET(24)
18570#endif
18571}
18572
18573// MOVEMaR
18574OPCODE(0x4CB0)
18575{
18576 u32 adr, res;
18577 u32 src, dst;
18578
18579 s32 *psrc;
18580
18581 FETCH_WORD(res);
18582 adr = AREG((Opcode >> 0) & 7);
18583 DECODE_EXT_WORD
18584 psrc = &DREGs32(0);
18585 dst = adr;
18586 PRE_IO
18587 do
18588 {
18589 if (res & 1)
18590 {
18591 READSX_WORD_F(adr, *psrc)
18592 adr += 2;
18593 }
18594 psrc++;
18595 } while (res >>= 1);
18596 POST_IO
18597 m68kcontext.io_cycle_counter -= (adr - dst) * 2;
18598#ifdef USE_CYCLONE_TIMING
18599RET(18)
18600#else
18601RET(28)
18602#endif
18603}
18604
18605// MOVEMaR
18606OPCODE(0x4CB8)
18607{
18608 u32 adr, res;
18609 u32 src, dst;
18610
18611 s32 *psrc;
18612
18613 FETCH_WORD(res);
18614 FETCH_SWORD(adr);
18615 psrc = &DREGs32(0);
18616 dst = adr;
18617 PRE_IO
18618 do
18619 {
18620 if (res & 1)
18621 {
18622 READSX_WORD_F(adr, *psrc)
18623 adr += 2;
18624 }
18625 psrc++;
18626 } while (res >>= 1);
18627 POST_IO
18628 m68kcontext.io_cycle_counter -= (adr - dst) * 2;
18629#ifdef USE_CYCLONE_TIMING
18630RET(16)
18631#else
18632RET(24)
18633#endif
18634}
18635
18636// MOVEMaR
18637OPCODE(0x4CB9)
18638{
18639 u32 adr, res;
18640 u32 src, dst;
18641
18642 s32 *psrc;
18643
18644 FETCH_WORD(res);
18645 FETCH_LONG(adr);
18646 psrc = &DREGs32(0);
18647 dst = adr;
18648 PRE_IO
18649 do
18650 {
18651 if (res & 1)
18652 {
18653 READSX_WORD_F(adr, *psrc)
18654 adr += 2;
18655 }
18656 psrc++;
18657 } while (res >>= 1);
18658 POST_IO
18659 m68kcontext.io_cycle_counter -= (adr - dst) * 2;
18660#ifdef USE_CYCLONE_TIMING
18661RET(20)
18662#else
18663RET(32)
18664#endif
18665}
18666
18667// MOVEMaR
18668OPCODE(0x4CBA)
18669{
18670 u32 adr, res;
18671 u32 src, dst;
18672
18673 s32 *psrc;
18674
18675 FETCH_WORD(res);
18676 adr = GET_SWORD + ((u32)(PC) - BasePC);
18677 PC++;
18678 psrc = &DREGs32(0);
18679 dst = adr;
18680 PRE_IO
18681 do
18682 {
18683 if (res & 1)
18684 {
18685 READSX_WORD_F(adr, *psrc)
18686 adr += 2;
18687 }
18688 psrc++;
18689 } while (res >>= 1);
18690 POST_IO
18691 m68kcontext.io_cycle_counter -= (adr - dst) * 2;
18692#ifdef USE_CYCLONE_TIMING
18693RET(16)
18694#else
18695RET(24)
18696#endif
18697}
18698
18699// MOVEMaR
18700OPCODE(0x4CBB)
18701{
18702 u32 adr, res;
18703 u32 src, dst;
18704
18705 s32 *psrc;
18706
18707 FETCH_WORD(res);
18708 adr = (u32)(PC) - BasePC;
18709 DECODE_EXT_WORD
18710 psrc = &DREGs32(0);
18711 dst = adr;
18712 PRE_IO
18713 do
18714 {
18715 if (res & 1)
18716 {
18717 READSX_WORD_F(adr, *psrc)
18718 adr += 2;
18719 }
18720 psrc++;
18721 } while (res >>= 1);
18722 POST_IO
18723 m68kcontext.io_cycle_counter -= (adr - dst) * 2;
18724#ifdef USE_CYCLONE_TIMING
18725RET(18)
18726#else
18727RET(28)
18728#endif
18729}
18730
18731// MOVEMaR
18732OPCODE(0x4C9F)
18733{
18734 u32 adr, res;
18735 u32 src, dst;
18736
18737 s32 *psrc;
18738
18739 FETCH_WORD(res);
18740 adr = AREG(7);
18741 psrc = &DREGs32(0);
18742 dst = adr;
18743 PRE_IO
18744 do
18745 {
18746 if (res & 1)
18747 {
18748 READSX_WORD_F(adr, *psrc)
18749 adr += 2;
18750 }
18751 psrc++;
18752 } while (res >>= 1);
18753 AREG(7) = adr;
18754 POST_IO
18755 m68kcontext.io_cycle_counter -= (adr - dst) * 2;
18756RET(12)
18757}
18758
18759// MOVEMaR
18760OPCODE(0x4CD0)
18761{
18762 u32 adr, res;
18763 u32 src, dst;
18764
18765 u32 *psrc;
18766
18767 FETCH_WORD(res);
18768 adr = AREG((Opcode >> 0) & 7);
18769 psrc = &DREGu32(0);
18770 dst = adr;
18771 PRE_IO
18772 do
18773 {
18774 if (res & 1)
18775 {
18776 READ_LONG_F(adr, *psrc)
18777 adr += 4;
18778 }
18779 psrc++;
18780 } while (res >>= 1);
18781 POST_IO
18782 m68kcontext.io_cycle_counter -= (adr - dst) * 2;
18783#ifdef USE_CYCLONE_TIMING
18784RET(12)
18785#else
18786RET(20)
18787#endif
18788}
18789
18790// MOVEMaR
18791OPCODE(0x4CD8)
18792{
18793 u32 adr, res;
18794 u32 src, dst;
18795
18796 u32 *psrc;
18797
18798 FETCH_WORD(res);
18799 adr = AREG((Opcode >> 0) & 7);
18800 psrc = &DREGu32(0);
18801 dst = adr;
18802 PRE_IO
18803 do
18804 {
18805 if (res & 1)
18806 {
18807 READ_LONG_F(adr, *psrc)
18808 adr += 4;
18809 }
18810 psrc++;
18811 } while (res >>= 1);
18812 AREG((Opcode >> 0) & 7) = adr;
18813 POST_IO
18814 m68kcontext.io_cycle_counter -= (adr - dst) * 2;
18815RET(12)
18816}
18817
18818// MOVEMaR
18819OPCODE(0x4CE8)
18820{
18821 u32 adr, res;
18822 u32 src, dst;
18823
18824 u32 *psrc;
18825
18826 FETCH_WORD(res);
18827 FETCH_SWORD(adr);
18828 adr += AREG((Opcode >> 0) & 7);
18829 psrc = &DREGu32(0);
18830 dst = adr;
18831 PRE_IO
18832 do
18833 {
18834 if (res & 1)
18835 {
18836 READ_LONG_F(adr, *psrc)
18837 adr += 4;
18838 }
18839 psrc++;
18840 } while (res >>= 1);
18841 POST_IO
18842 m68kcontext.io_cycle_counter -= (adr - dst) * 2;
18843#ifdef USE_CYCLONE_TIMING
18844RET(16)
18845#else
18846RET(28)
18847#endif
18848}
18849
18850// MOVEMaR
18851OPCODE(0x4CF0)
18852{
18853 u32 adr, res;
18854 u32 src, dst;
18855
18856 u32 *psrc;
18857
18858 FETCH_WORD(res);
18859 adr = AREG((Opcode >> 0) & 7);
18860 DECODE_EXT_WORD
18861 psrc = &DREGu32(0);
18862 dst = adr;
18863 PRE_IO
18864 do
18865 {
18866 if (res & 1)
18867 {
18868 READ_LONG_F(adr, *psrc)
18869 adr += 4;
18870 }
18871 psrc++;
18872 } while (res >>= 1);
18873 POST_IO
18874 m68kcontext.io_cycle_counter -= (adr - dst) * 2;
18875#ifdef USE_CYCLONE_TIMING
18876RET(18)
18877#else
18878RET(32)
18879#endif
18880}
18881
18882// MOVEMaR
18883OPCODE(0x4CF8)
18884{
18885 u32 adr, res;
18886 u32 src, dst;
18887
18888 u32 *psrc;
18889
18890 FETCH_WORD(res);
18891 FETCH_SWORD(adr);
18892 psrc = &DREGu32(0);
18893 dst = adr;
18894 PRE_IO
18895 do
18896 {
18897 if (res & 1)
18898 {
18899 READ_LONG_F(adr, *psrc)
18900 adr += 4;
18901 }
18902 psrc++;
18903 } while (res >>= 1);
18904 POST_IO
18905 m68kcontext.io_cycle_counter -= (adr - dst) * 2;
18906#ifdef USE_CYCLONE_TIMING
18907RET(16)
18908#else
18909RET(28)
18910#endif
18911}
18912
18913// MOVEMaR
18914OPCODE(0x4CF9)
18915{
18916 u32 adr, res;
18917 u32 src, dst;
18918
18919 u32 *psrc;
18920
18921 FETCH_WORD(res);
18922 FETCH_LONG(adr);
18923 psrc = &DREGu32(0);
18924 dst = adr;
18925 PRE_IO
18926 do
18927 {
18928 if (res & 1)
18929 {
18930 READ_LONG_F(adr, *psrc)
18931 adr += 4;
18932 }
18933 psrc++;
18934 } while (res >>= 1);
18935 POST_IO
18936 m68kcontext.io_cycle_counter -= (adr - dst) * 2;
18937#ifdef USE_CYCLONE_TIMING
18938RET(20)
18939#else
18940RET(36)
18941#endif
18942}
18943
18944// MOVEMaR
18945OPCODE(0x4CFA)
18946{
18947 u32 adr, res;
18948 u32 src, dst;
18949
18950 u32 *psrc;
18951
18952 FETCH_WORD(res);
18953 adr = GET_SWORD + ((u32)(PC) - BasePC);
18954 PC++;
18955 psrc = &DREGu32(0);
18956 dst = adr;
18957 PRE_IO
18958 do
18959 {
18960 if (res & 1)
18961 {
18962 READ_LONG_F(adr, *psrc)
18963 adr += 4;
18964 }
18965 psrc++;
18966 } while (res >>= 1);
18967 POST_IO
18968 m68kcontext.io_cycle_counter -= (adr - dst) * 2;
18969#ifdef USE_CYCLONE_TIMING
18970RET(16)
18971#else
18972RET(28)
18973#endif
18974}
18975
18976// MOVEMaR
18977OPCODE(0x4CFB)
18978{
18979 u32 adr, res;
18980 u32 src, dst;
18981
18982 u32 *psrc;
18983
18984 FETCH_WORD(res);
18985 adr = (u32)(PC) - BasePC;
18986 DECODE_EXT_WORD
18987 psrc = &DREGu32(0);
18988 dst = adr;
18989 PRE_IO
18990 do
18991 {
18992 if (res & 1)
18993 {
18994 READ_LONG_F(adr, *psrc)
18995 adr += 4;
18996 }
18997 psrc++;
18998 } while (res >>= 1);
18999 POST_IO
19000 m68kcontext.io_cycle_counter -= (adr - dst) * 2;
19001#ifdef USE_CYCLONE_TIMING
19002RET(18)
19003#else
19004RET(32)
19005#endif
19006}
19007
19008// MOVEMaR
19009OPCODE(0x4CDF)
19010{
19011 u32 adr, res;
19012 u32 src, dst;
19013
19014 u32 *psrc;
19015
19016 FETCH_WORD(res);
19017 adr = AREG(7);
19018 psrc = &DREGu32(0);
19019 dst = adr;
19020 PRE_IO
19021 do
19022 {
19023 if (res & 1)
19024 {
19025 READ_LONG_F(adr, *psrc)
19026 adr += 4;
19027 }
19028 psrc++;
19029 } while (res >>= 1);
19030 AREG(7) = adr;
19031 POST_IO
19032 m68kcontext.io_cycle_counter -= (adr - dst) * 2;
19033RET(12)
19034}
19035
19036// TRAP
19037OPCODE(0x4E40)
19038{
19039 execute_exception(M68K_TRAP_BASE_EX + (Opcode & 0xF));
19040RET(4)
19041}
19042
19043// LINK
19044OPCODE(0x4E50)
19045{
19046 u32 adr, res;
19047 u32 src, dst;
19048
19049 res = AREGu32((Opcode >> 0) & 7);
19050 PRE_IO
19051 PUSH_32_F(res)
19052 res = AREG(7);
19053 AREG((Opcode >> 0) & 7) = res;
19054 FETCH_SWORD(res);
19055 AREG(7) += res;
19056 POST_IO
19057RET(16)
19058}
19059
19060// LINKA7
19061OPCODE(0x4E57)
19062{
19063 u32 adr, res;
19064 u32 src, dst;
19065
19066 AREG(7) -= 4;
19067 PRE_IO
19068 WRITE_LONG_DEC_F(AREG(7), AREG(7))
19069 FETCH_SWORD(res);
19070 AREG(7) += res;
19071 POST_IO
19072RET(16)
19073}
19074
19075// ULNK
19076OPCODE(0x4E58)
19077{
19078 u32 adr, res;
19079 u32 src, dst;
19080
19081 src = AREGu32((Opcode >> 0) & 7);
19082 AREG(7) = src + 4;
19083 PRE_IO
19084 READ_LONG_F(src, res)
19085 AREG((Opcode >> 0) & 7) = res;
19086 POST_IO
19087RET(12)
19088}
19089
19090// ULNKA7
19091OPCODE(0x4E5F)
19092{
19093 u32 adr, res;
19094 u32 src, dst;
19095
19096 PRE_IO
19097 READ_LONG_F(AREG(7), AREG(7))
19098 POST_IO
19099RET(12)
19100}
19101
19102// MOVEAUSP
19103OPCODE(0x4E60)
19104{
19105 u32 adr, res;
19106 u32 src, dst;
19107
19108 if (!flag_S)
19109 {
19110 u32 oldPC=GET_PC;
19111 SET_PC(oldPC-2)
19112 execute_exception(M68K_PRIVILEGE_VIOLATION_EX);
19113 RET(4)
19114 }
19115 res = AREGu32((Opcode >> 0) & 7);
19116 ASP = res;
19117RET(4)
19118}
19119
19120// MOVEUSPA
19121OPCODE(0x4E68)
19122{
19123 u32 adr, res;
19124 u32 src, dst;
19125
19126 if (!flag_S)
19127 {
19128 u32 oldPC=GET_PC;
19129 SET_PC(oldPC-2)
19130 execute_exception(M68K_PRIVILEGE_VIOLATION_EX);
19131 RET(4)
19132 }
19133 res = ASP;
19134 AREG((Opcode >> 0) & 7) = res;
19135RET(4)
19136}
19137
19138// RESET
19139OPCODE(0x4E70)
19140{
19141 u32 adr, res;
19142 u32 src, dst;
19143
19144 if (!flag_S)
19145 {
19146 u32 oldPC=GET_PC;
19147 SET_PC(oldPC-2)
19148 execute_exception(M68K_PRIVILEGE_VIOLATION_EX);
19149 RET(4)
19150 }
19151 PRE_IO
19152 if (m68kcontext.reset_handler) m68kcontext.reset_handler();
19153// CPU->Reset_CallBack();
19154 POST_IO
19155RET(132)
19156}
19157
19158// NOP
19159OPCODE(0x4E71)
19160{
19161RET(4)
19162}
19163
19164// STOP
19165OPCODE(0x4E72)
19166{
19167 u32 adr, res;
19168 u32 src, dst;
19169
19170 if (!flag_S)
19171 {
19172 u32 oldPC=GET_PC;
19173 SET_PC(oldPC-2)
19174 execute_exception(M68K_PRIVILEGE_VIOLATION_EX);
19175 RET(4)
19176 }
19177 FETCH_WORD(res);
19178 res &= M68K_SR_MASK;
19179 SET_SR(res)
19180 if (!flag_S)
19181 {
19182 res = AREG(7);
19183 AREG(7) = ASP;
19184 ASP = res;
19185 }
19186 m68kcontext.execinfo |= M68K_HALTED;
19187 m68kcontext.io_cycle_counter = 0;
19188RET(4)
19189}
19190
19191// RTE
19192OPCODE(0x4E73)
19193{
19194 u32 adr, res;
19195 u32 src, dst;
19196
19197 if (!flag_S)
19198 {
19199 u32 oldPC=GET_PC;
19200 SET_PC(oldPC-2)
19201 execute_exception(M68K_PRIVILEGE_VIOLATION_EX);
19202 RET(4)
19203 }
19204 PRE_IO
19205 POP_16_F(res)
19206 SET_SR(res)
19207 POP_32_F(res)
19208 SET_PC(res)
19209 if (!flag_S)
19210 {
19211 res = AREG(7);
19212 AREG(7) = ASP;
19213 ASP = res;
19214 }
19215 POST_IO
19216 m68kcontext.execinfo &= ~(M68K_EMULATE_GROUP_0|M68K_EMULATE_TRACE|M68K_DO_TRACE);
19217 CHECK_INT_TO_JUMP(20)
19218RET(20)
19219}
19220
19221// RTS
19222OPCODE(0x4E75)
19223{
19224 u32 adr, res;
19225 u32 src, dst;
19226
19227 PRE_IO
19228 POP_32_F(res)
19229 SET_PC(res)
19230 CHECK_BRANCH_EXCEPTION(res)
19231 POST_IO
19232RET(16)
19233}
19234
19235// TRAPV
19236OPCODE(0x4E76)
19237{
19238 if (flag_V & 0x80)
19239 execute_exception(M68K_TRAPV_EX);
19240RET(4)
19241}
19242
19243// RTR
19244OPCODE(0x4E77)
19245{
19246 u32 adr, res;
19247 u32 src, dst;
19248
19249 PRE_IO
19250 POP_16_F(res)
19251 SET_CCR(res)
19252 POP_32_F(res)
19253 SET_PC(res)
19254 CHECK_BRANCH_EXCEPTION(res)
19255 POST_IO
19256RET(20)
19257}
19258
19259// JSR
19260OPCODE(0x4E90)
19261{
19262 u32 adr, res;
19263 u32 src, dst;
19264
19265 adr = AREG((Opcode >> 0) & 7);
19266 {
19267 u32 oldPC;
19268
19269 oldPC = (u32)(PC) - BasePC;
19270 PRE_IO
19271 PUSH_32_F(oldPC)
19272 }
19273 SET_PC(adr)
19274 CHECK_BRANCH_EXCEPTION(adr)
19275 POST_IO
19276RET(16)
19277}
19278
19279// JSR
19280OPCODE(0x4EA8)
19281{
19282 u32 adr, res;
19283 u32 src, dst;
19284
19285 FETCH_SWORD(adr);
19286 adr += AREG((Opcode >> 0) & 7);
19287 {
19288 u32 oldPC;
19289
19290 oldPC = (u32)(PC) - BasePC;
19291 PRE_IO
19292 PUSH_32_F(oldPC)
19293 }
19294 SET_PC(adr)
19295 CHECK_BRANCH_EXCEPTION(adr)
19296 POST_IO
19297RET(18)
19298}
19299
19300// JSR
19301OPCODE(0x4EB0)
19302{
19303 u32 adr, res;
19304 u32 src, dst;
19305
19306 adr = AREG((Opcode >> 0) & 7);
19307 DECODE_EXT_WORD
19308 {
19309 u32 oldPC;
19310
19311 oldPC = (u32)(PC) - BasePC;
19312 PRE_IO
19313 PUSH_32_F(oldPC)
19314 }
19315 SET_PC(adr)
19316 CHECK_BRANCH_EXCEPTION(adr)
19317 POST_IO
19318RET(22)
19319}
19320
19321// JSR
19322OPCODE(0x4EB8)
19323{
19324 u32 adr, res;
19325 u32 src, dst;
19326
19327 FETCH_SWORD(adr);
19328 {
19329 u32 oldPC;
19330
19331 oldPC = (u32)(PC) - BasePC;
19332 PRE_IO
19333 PUSH_32_F(oldPC)
19334 }
19335 SET_PC(adr)
19336 CHECK_BRANCH_EXCEPTION(adr)
19337 POST_IO
19338RET(18)
19339}
19340
19341// JSR
19342OPCODE(0x4EB9)
19343{
19344 u32 adr, res;
19345 u32 src, dst;
19346
19347 FETCH_LONG(adr);
19348 {
19349 u32 oldPC;
19350
19351 oldPC = (u32)(PC) - BasePC;
19352 PRE_IO
19353 PUSH_32_F(oldPC)
19354 }
19355 SET_PC(adr)
19356 CHECK_BRANCH_EXCEPTION(adr)
19357 POST_IO
19358RET(20)
19359}
19360
19361// JSR
19362OPCODE(0x4EBA)
19363{
19364 u32 adr, res;
19365 u32 src, dst;
19366
19367 adr = GET_SWORD + ((u32)(PC) - BasePC);
19368 PC++;
19369 {
19370 u32 oldPC;
19371
19372 oldPC = (u32)(PC) - BasePC;
19373 PRE_IO
19374 PUSH_32_F(oldPC)
19375 }
19376 SET_PC(adr)
19377 CHECK_BRANCH_EXCEPTION(adr)
19378 POST_IO
19379RET(18)
19380}
19381
19382// JSR
19383OPCODE(0x4EBB)
19384{
19385 u32 adr, res;
19386 u32 src, dst;
19387
19388 adr = (u32)(PC) - BasePC;
19389 DECODE_EXT_WORD
19390 {
19391 u32 oldPC;
19392
19393 oldPC = (u32)(PC) - BasePC;
19394 PRE_IO
19395 PUSH_32_F(oldPC)
19396 }
19397 SET_PC(adr)
19398 CHECK_BRANCH_EXCEPTION(adr)
19399 POST_IO
19400RET(22)
19401}
19402
19403// JMP
19404OPCODE(0x4ED0)
19405{
19406 u32 adr, res;
19407 u32 src, dst;
19408
19409 adr = AREG((Opcode >> 0) & 7);
19410 SET_PC(adr)
19411 CHECK_BRANCH_EXCEPTION(adr)
19412RET(8)
19413}
19414
19415// JMP
19416OPCODE(0x4EE8)
19417{
19418 u32 adr, res;
19419 u32 src, dst;
19420
19421 FETCH_SWORD(adr);
19422 adr += AREG((Opcode >> 0) & 7);
19423 SET_PC(adr)
19424 CHECK_BRANCH_EXCEPTION(adr)
19425RET(10)
19426}
19427
19428// JMP
19429OPCODE(0x4EF0)
19430{
19431 u32 adr, res;
19432 u32 src, dst;
19433
19434 adr = AREG((Opcode >> 0) & 7);
19435 DECODE_EXT_WORD
19436 SET_PC(adr)
19437 CHECK_BRANCH_EXCEPTION(adr)
19438RET(14)
19439}
19440
19441// JMP
19442OPCODE(0x4EF8)
19443{
19444 u32 adr, res;
19445 u32 src, dst;
19446
19447 FETCH_SWORD(adr);
19448 SET_PC(adr)
19449 CHECK_BRANCH_EXCEPTION(adr)
19450RET(10)
19451}
19452
19453// JMP
19454OPCODE(0x4EF9)
19455{
19456 u32 adr, res;
19457 u32 src, dst;
19458
19459 FETCH_LONG(adr);
19460 SET_PC(adr)
19461 CHECK_BRANCH_EXCEPTION(adr)
19462RET(12)
19463}
19464
19465// JMP
19466OPCODE(0x4EFA)
19467{
19468 u32 adr, res;
19469 u32 src, dst;
19470
19471 adr = GET_SWORD + ((u32)(PC) - BasePC);
19472 PC++;
19473 SET_PC(adr)
19474 CHECK_BRANCH_EXCEPTION(adr)
19475RET(10)
19476}
19477
19478// JMP
19479OPCODE(0x4EFB)
19480{
19481 u32 adr, res;
19482 u32 src, dst;
19483
19484 adr = (u32)(PC) - BasePC;
19485 DECODE_EXT_WORD
19486 SET_PC(adr)
19487 CHECK_BRANCH_EXCEPTION(adr)
19488RET(14)
19489}
19490
19491// CHK
19492OPCODE(0x4180)
19493{
19494 u32 adr, res;
19495 u32 src, dst;
19496
19497 src = DREGu16((Opcode >> 0) & 7);
19498 res = DREGu16((Opcode >> 9) & 7);
19499 if (((s32)res < 0) || (res > src))
19500 {
19501 flag_N = res >> 8;
19502 execute_exception(M68K_CHK_EX);
19503 }
19504RET(10)
19505}
19506
19507// CHK
19508OPCODE(0x4190)
19509{
19510 u32 adr, res;
19511 u32 src, dst;
19512
19513 adr = AREG((Opcode >> 0) & 7);
19514 PRE_IO
19515 READ_WORD_F(adr, src)
19516 res = DREGu16((Opcode >> 9) & 7);
19517 if (((s32)res < 0) || (res > src))
19518 {
19519 flag_N = res >> 8;
19520 execute_exception(M68K_CHK_EX);
19521 }
19522 POST_IO
19523RET(14)
19524}
19525
19526// CHK
19527OPCODE(0x4198)
19528{
19529 u32 adr, res;
19530 u32 src, dst;
19531
19532 adr = AREG((Opcode >> 0) & 7);
19533 AREG((Opcode >> 0) & 7) += 2;
19534 PRE_IO
19535 READ_WORD_F(adr, src)
19536 res = DREGu16((Opcode >> 9) & 7);
19537 if (((s32)res < 0) || (res > src))
19538 {
19539 flag_N = res >> 8;
19540 execute_exception(M68K_CHK_EX);
19541 }
19542 POST_IO
19543RET(14)
19544}
19545
19546// CHK
19547OPCODE(0x41A0)
19548{
19549 u32 adr, res;
19550 u32 src, dst;
19551
19552 adr = AREG((Opcode >> 0) & 7) - 2;
19553 AREG((Opcode >> 0) & 7) = adr;
19554 PRE_IO
19555 READ_WORD_F(adr, src)
19556 res = DREGu16((Opcode >> 9) & 7);
19557 if (((s32)res < 0) || (res > src))
19558 {
19559 flag_N = res >> 8;
19560 execute_exception(M68K_CHK_EX);
19561 }
19562 POST_IO
19563RET(16)
19564}
19565
19566// CHK
19567OPCODE(0x41A8)
19568{
19569 u32 adr, res;
19570 u32 src, dst;
19571
19572 FETCH_SWORD(adr);
19573 adr += AREG((Opcode >> 0) & 7);
19574 PRE_IO
19575 READ_WORD_F(adr, src)
19576 res = DREGu16((Opcode >> 9) & 7);
19577 if (((s32)res < 0) || (res > src))
19578 {
19579 flag_N = res >> 8;
19580 execute_exception(M68K_CHK_EX);
19581 }
19582 POST_IO
19583RET(18)
19584}
19585
19586// CHK
19587OPCODE(0x41B0)
19588{
19589 u32 adr, res;
19590 u32 src, dst;
19591
19592 adr = AREG((Opcode >> 0) & 7);
19593 DECODE_EXT_WORD
19594 PRE_IO
19595 READ_WORD_F(adr, src)
19596 res = DREGu16((Opcode >> 9) & 7);
19597 if (((s32)res < 0) || (res > src))
19598 {
19599 flag_N = res >> 8;
19600 execute_exception(M68K_CHK_EX);
19601 }
19602 POST_IO
19603RET(20)
19604}
19605
19606// CHK
19607OPCODE(0x41B8)
19608{
19609 u32 adr, res;
19610 u32 src, dst;
19611
19612 FETCH_SWORD(adr);
19613 PRE_IO
19614 READ_WORD_F(adr, src)
19615 res = DREGu16((Opcode >> 9) & 7);
19616 if (((s32)res < 0) || (res > src))
19617 {
19618 flag_N = res >> 8;
19619 execute_exception(M68K_CHK_EX);
19620 }
19621 POST_IO
19622RET(18)
19623}
19624
19625// CHK
19626OPCODE(0x41B9)
19627{
19628 u32 adr, res;
19629 u32 src, dst;
19630
19631 FETCH_LONG(adr);
19632 PRE_IO
19633 READ_WORD_F(adr, src)
19634 res = DREGu16((Opcode >> 9) & 7);
19635 if (((s32)res < 0) || (res > src))
19636 {
19637 flag_N = res >> 8;
19638 execute_exception(M68K_CHK_EX);
19639 }
19640 POST_IO
19641RET(22)
19642}
19643
19644// CHK
19645OPCODE(0x41BA)
19646{
19647 u32 adr, res;
19648 u32 src, dst;
19649
19650 adr = GET_SWORD + ((u32)(PC) - BasePC);
19651 PC++;
19652 PRE_IO
19653 READ_WORD_F(adr, src)
19654 res = DREGu16((Opcode >> 9) & 7);
19655 if (((s32)res < 0) || (res > src))
19656 {
19657 flag_N = res >> 8;
19658 execute_exception(M68K_CHK_EX);
19659 }
19660 POST_IO
19661RET(18)
19662}
19663
19664// CHK
19665OPCODE(0x41BB)
19666{
19667 u32 adr, res;
19668 u32 src, dst;
19669
19670 adr = (u32)(PC) - BasePC;
19671 DECODE_EXT_WORD
19672 PRE_IO
19673 READ_WORD_F(adr, src)
19674 res = DREGu16((Opcode >> 9) & 7);
19675 if (((s32)res < 0) || (res > src))
19676 {
19677 flag_N = res >> 8;
19678 execute_exception(M68K_CHK_EX);
19679 }
19680 POST_IO
19681RET(20)
19682}
19683
19684// CHK
19685OPCODE(0x41BC)
19686{
19687 u32 adr, res;
19688 u32 src, dst;
19689
19690 FETCH_WORD(src);
19691 res = DREGu16((Opcode >> 9) & 7);
19692 if (((s32)res < 0) || (res > src))
19693 {
19694 flag_N = res >> 8;
19695 execute_exception(M68K_CHK_EX);
19696 }
19697 POST_IO
19698RET(14)
19699}
19700
19701// CHK
19702OPCODE(0x419F)
19703{
19704 u32 adr, res;
19705 u32 src, dst;
19706
19707 adr = AREG(7);
19708 AREG(7) += 2;
19709 PRE_IO
19710 READ_WORD_F(adr, src)
19711 res = DREGu16((Opcode >> 9) & 7);
19712 if (((s32)res < 0) || (res > src))
19713 {
19714 flag_N = res >> 8;
19715 execute_exception(M68K_CHK_EX);
19716 }
19717 POST_IO
19718RET(14)
19719}
19720
19721// CHK
19722OPCODE(0x41A7)
19723{
19724 u32 adr, res;
19725 u32 src, dst;
19726
19727 adr = AREG(7) - 2;
19728 AREG(7) = adr;
19729 PRE_IO
19730 READ_WORD_F(adr, src)
19731 res = DREGu16((Opcode >> 9) & 7);
19732 if (((s32)res < 0) || (res > src))
19733 {
19734 flag_N = res >> 8;
19735 execute_exception(M68K_CHK_EX);
19736 }
19737 POST_IO
19738RET(16)
19739}
19740
19741// LEA
19742OPCODE(0x41D0)
19743{
19744 u32 adr, res;
19745 u32 src, dst;
19746
19747 adr = AREG((Opcode >> 0) & 7);
19748 res = adr;
19749 AREG((Opcode >> 9) & 7) = res;
19750RET(4)
19751}
19752
19753// LEA
19754OPCODE(0x41E8)
19755{
19756 u32 adr, res;
19757 u32 src, dst;
19758
19759 FETCH_SWORD(adr);
19760 adr += AREG((Opcode >> 0) & 7);
19761 res = adr;
19762 AREG((Opcode >> 9) & 7) = res;
19763RET(8)
19764}
19765
19766// LEA
19767OPCODE(0x41F0)
19768{
19769 u32 adr, res;
19770 u32 src, dst;
19771
19772 adr = AREG((Opcode >> 0) & 7);
19773 DECODE_EXT_WORD
19774 res = adr;
19775 AREG((Opcode >> 9) & 7) = res;
19776RET(12)
19777}
19778
19779// LEA
19780OPCODE(0x41F8)
19781{
19782 u32 adr, res;
19783 u32 src, dst;
19784
19785 FETCH_SWORD(adr);
19786 res = adr;
19787 AREG((Opcode >> 9) & 7) = res;
19788RET(8)
19789}
19790
19791// LEA
19792OPCODE(0x41F9)
19793{
19794 u32 adr, res;
19795 u32 src, dst;
19796
19797 FETCH_LONG(adr);
19798 res = adr;
19799 AREG((Opcode >> 9) & 7) = res;
19800RET(12)
19801}
19802
19803// LEA
19804OPCODE(0x41FA)
19805{
19806 u32 adr, res;
19807 u32 src, dst;
19808
19809 adr = GET_SWORD + ((u32)(PC) - BasePC);
19810 PC++;
19811 res = adr;
19812 AREG((Opcode >> 9) & 7) = res;
19813RET(8)
19814}
19815
19816// LEA
19817OPCODE(0x41FB)
19818{
19819 u32 adr, res;
19820 u32 src, dst;
19821
19822 adr = (u32)(PC) - BasePC;
19823 DECODE_EXT_WORD
19824 res = adr;
19825 AREG((Opcode >> 9) & 7) = res;
19826RET(12)
19827}
19828
19829// STCC
19830OPCODE(0x50C0)
19831{
19832 u32 adr, res;
19833 u32 src, dst;
19834
19835 res = 0xFF;
19836 DREGu8((Opcode >> 0) & 7) = res;
19837 RET(6)
19838}
19839
19840// STCC
19841OPCODE(0x51C0)
19842{
19843 u32 adr, res;
19844 u32 src, dst;
19845
19846 res = 0;
19847 DREGu8((Opcode >> 0) & 7) = res;
19848 RET(4)
19849}
19850
19851// STCC
19852OPCODE(0x52C0)
19853{
19854 u32 adr, res;
19855 u32 src, dst;
19856
19857 if (flag_NotZ && (!(flag_C & 0x100)))
19858 {
19859 res = 0xFF;
19860 DREGu8((Opcode >> 0) & 7) = res;
19861 RET(6)
19862 }
19863 res = 0;
19864 DREGu8((Opcode >> 0) & 7) = res;
19865 RET(4)
19866}
19867
19868// STCC
19869OPCODE(0x53C0)
19870{
19871 u32 adr, res;
19872 u32 src, dst;
19873
19874 if ((!flag_NotZ) || (flag_C & 0x100))
19875 {
19876 res = 0xFF;
19877 DREGu8((Opcode >> 0) & 7) = res;
19878 RET(6)
19879 }
19880 res = 0;
19881 DREGu8((Opcode >> 0) & 7) = res;
19882 RET(4)
19883}
19884
19885// STCC
19886OPCODE(0x54C0)
19887{
19888 u32 adr, res;
19889 u32 src, dst;
19890
19891 if (!(flag_C & 0x100))
19892 {
19893 res = 0xFF;
19894 DREGu8((Opcode >> 0) & 7) = res;
19895 RET(6)
19896 }
19897 res = 0;
19898 DREGu8((Opcode >> 0) & 7) = res;
19899 RET(4)
19900}
19901
19902// STCC
19903OPCODE(0x55C0)
19904{
19905 u32 adr, res;
19906 u32 src, dst;
19907
19908 if (flag_C & 0x100)
19909 {
19910 res = 0xFF;
19911 DREGu8((Opcode >> 0) & 7) = res;
19912 RET(6)
19913 }
19914 res = 0;
19915 DREGu8((Opcode >> 0) & 7) = res;
19916 RET(4)
19917}
19918
19919// STCC
19920OPCODE(0x56C0)
19921{
19922 u32 adr, res;
19923 u32 src, dst;
19924
19925 if (flag_NotZ)
19926 {
19927 res = 0xFF;
19928 DREGu8((Opcode >> 0) & 7) = res;
19929 RET(6)
19930 }
19931 res = 0;
19932 DREGu8((Opcode >> 0) & 7) = res;
19933 RET(4)
19934}
19935
19936// STCC
19937OPCODE(0x57C0)
19938{
19939 u32 adr, res;
19940 u32 src, dst;
19941
19942 if (!flag_NotZ)
19943 {
19944 res = 0xFF;
19945 DREGu8((Opcode >> 0) & 7) = res;
19946 RET(6)
19947 }
19948 res = 0;
19949 DREGu8((Opcode >> 0) & 7) = res;
19950 RET(4)
19951}
19952
19953// STCC
19954OPCODE(0x58C0)
19955{
19956 u32 adr, res;
19957 u32 src, dst;
19958
19959 if (!(flag_V & 0x80))
19960 {
19961 res = 0xFF;
19962 DREGu8((Opcode >> 0) & 7) = res;
19963 RET(6)
19964 }
19965 res = 0;
19966 DREGu8((Opcode >> 0) & 7) = res;
19967 RET(4)
19968}
19969
19970// STCC
19971OPCODE(0x59C0)
19972{
19973 u32 adr, res;
19974 u32 src, dst;
19975
19976 if (flag_V & 0x80)
19977 {
19978 res = 0xFF;
19979 DREGu8((Opcode >> 0) & 7) = res;
19980 RET(6)
19981 }
19982 res = 0;
19983 DREGu8((Opcode >> 0) & 7) = res;
19984 RET(4)
19985}
19986
19987// STCC
19988OPCODE(0x5AC0)
19989{
19990 u32 adr, res;
19991 u32 src, dst;
19992
19993 if (!(flag_N & 0x80))
19994 {
19995 res = 0xFF;
19996 DREGu8((Opcode >> 0) & 7) = res;
19997 RET(6)
19998 }
19999 res = 0;
20000 DREGu8((Opcode >> 0) & 7) = res;
20001 RET(4)
20002}
20003
20004// STCC
20005OPCODE(0x5BC0)
20006{
20007 u32 adr, res;
20008 u32 src, dst;
20009
20010 if (flag_N & 0x80)
20011 {
20012 res = 0xFF;
20013 DREGu8((Opcode >> 0) & 7) = res;
20014 RET(6)
20015 }
20016 res = 0;
20017 DREGu8((Opcode >> 0) & 7) = res;
20018 RET(4)
20019}
20020
20021// STCC
20022OPCODE(0x5CC0)
20023{
20024 u32 adr, res;
20025 u32 src, dst;
20026
20027 if (!((flag_N ^ flag_V) & 0x80))
20028 {
20029 res = 0xFF;
20030 DREGu8((Opcode >> 0) & 7) = res;
20031 RET(6)
20032 }
20033 res = 0;
20034 DREGu8((Opcode >> 0) & 7) = res;
20035 RET(4)
20036}
20037
20038// STCC
20039OPCODE(0x5DC0)
20040{
20041 u32 adr, res;
20042 u32 src, dst;
20043
20044 if ((flag_N ^ flag_V) & 0x80)
20045 {
20046 res = 0xFF;
20047 DREGu8((Opcode >> 0) & 7) = res;
20048 RET(6)
20049 }
20050 res = 0;
20051 DREGu8((Opcode >> 0) & 7) = res;
20052 RET(4)
20053}
20054
20055// STCC
20056OPCODE(0x5EC0)
20057{
20058 u32 adr, res;
20059 u32 src, dst;
20060
20061 if (flag_NotZ && (!((flag_N ^ flag_V) & 0x80)))
20062 {
20063 res = 0xFF;
20064 DREGu8((Opcode >> 0) & 7) = res;
20065 RET(6)
20066 }
20067 res = 0;
20068 DREGu8((Opcode >> 0) & 7) = res;
20069 RET(4)
20070}
20071
20072// STCC
20073OPCODE(0x5FC0)
20074{
20075 u32 adr, res;
20076 u32 src, dst;
20077
20078 if ((!flag_NotZ) || ((flag_N ^ flag_V) & 0x80))
20079 {
20080 res = 0xFF;
20081 DREGu8((Opcode >> 0) & 7) = res;
20082 RET(6)
20083 }
20084 res = 0;
20085 DREGu8((Opcode >> 0) & 7) = res;
20086 RET(4)
20087}
20088
20089// STCC
20090OPCODE(0x50D0)
20091{
20092 u32 adr, res;
20093 u32 src, dst;
20094
20095 adr = AREG((Opcode >> 0) & 7);
20096 res = 0xFF;
20097 PRE_IO
20098 WRITE_BYTE_F(adr, res)
20099 POST_IO
20100 RET(12)
20101}
20102
20103// STCC
20104OPCODE(0x51D0)
20105{
20106 u32 adr, res;
20107 u32 src, dst;
20108
20109 adr = AREG((Opcode >> 0) & 7);
20110 res = 0;
20111 PRE_IO
20112 WRITE_BYTE_F(adr, res)
20113 POST_IO
20114 RET(12)
20115}
20116
20117// STCC
20118OPCODE(0x52D0)
20119{
20120 u32 adr, res;
20121 u32 src, dst;
20122
20123 adr = AREG((Opcode >> 0) & 7);
20124 if (flag_NotZ && (!(flag_C & 0x100)))
20125 {
20126 res = 0xFF;
20127 PRE_IO
20128 WRITE_BYTE_F(adr, res)
20129 POST_IO
20130 RET(12)
20131 }
20132 res = 0;
20133 PRE_IO
20134 WRITE_BYTE_F(adr, res)
20135 POST_IO
20136 RET(12)
20137}
20138
20139// STCC
20140OPCODE(0x53D0)
20141{
20142 u32 adr, res;
20143 u32 src, dst;
20144
20145 adr = AREG((Opcode >> 0) & 7);
20146 if ((!flag_NotZ) || (flag_C & 0x100))
20147 {
20148 res = 0xFF;
20149 PRE_IO
20150 WRITE_BYTE_F(adr, res)
20151 POST_IO
20152 RET(12)
20153 }
20154 res = 0;
20155 PRE_IO
20156 WRITE_BYTE_F(adr, res)
20157 POST_IO
20158 RET(12)
20159}
20160
20161// STCC
20162OPCODE(0x54D0)
20163{
20164 u32 adr, res;
20165 u32 src, dst;
20166
20167 adr = AREG((Opcode >> 0) & 7);
20168 if (!(flag_C & 0x100))
20169 {
20170 res = 0xFF;
20171 PRE_IO
20172 WRITE_BYTE_F(adr, res)
20173 POST_IO
20174 RET(12)
20175 }
20176 res = 0;
20177 PRE_IO
20178 WRITE_BYTE_F(adr, res)
20179 POST_IO
20180 RET(12)
20181}
20182
20183// STCC
20184OPCODE(0x55D0)
20185{
20186 u32 adr, res;
20187 u32 src, dst;
20188
20189 adr = AREG((Opcode >> 0) & 7);
20190 if (flag_C & 0x100)
20191 {
20192 res = 0xFF;
20193 PRE_IO
20194 WRITE_BYTE_F(adr, res)
20195 POST_IO
20196 RET(12)
20197 }
20198 res = 0;
20199 PRE_IO
20200 WRITE_BYTE_F(adr, res)
20201 POST_IO
20202 RET(12)
20203}
20204
20205// STCC
20206OPCODE(0x56D0)
20207{
20208 u32 adr, res;
20209 u32 src, dst;
20210
20211 adr = AREG((Opcode >> 0) & 7);
20212 if (flag_NotZ)
20213 {
20214 res = 0xFF;
20215 PRE_IO
20216 WRITE_BYTE_F(adr, res)
20217 POST_IO
20218 RET(12)
20219 }
20220 res = 0;
20221 PRE_IO
20222 WRITE_BYTE_F(adr, res)
20223 POST_IO
20224 RET(12)
20225}
20226
20227// STCC
20228OPCODE(0x57D0)
20229{
20230 u32 adr, res;
20231 u32 src, dst;
20232
20233 adr = AREG((Opcode >> 0) & 7);
20234 if (!flag_NotZ)
20235 {
20236 res = 0xFF;
20237 PRE_IO
20238 WRITE_BYTE_F(adr, res)
20239 POST_IO
20240 RET(12)
20241 }
20242 res = 0;
20243 PRE_IO
20244 WRITE_BYTE_F(adr, res)
20245 POST_IO
20246 RET(12)
20247}
20248
20249// STCC
20250OPCODE(0x58D0)
20251{
20252 u32 adr, res;
20253 u32 src, dst;
20254
20255 adr = AREG((Opcode >> 0) & 7);
20256 if (!(flag_V & 0x80))
20257 {
20258 res = 0xFF;
20259 PRE_IO
20260 WRITE_BYTE_F(adr, res)
20261 POST_IO
20262 RET(12)
20263 }
20264 res = 0;
20265 PRE_IO
20266 WRITE_BYTE_F(adr, res)
20267 POST_IO
20268 RET(12)
20269}
20270
20271// STCC
20272OPCODE(0x59D0)
20273{
20274 u32 adr, res;
20275 u32 src, dst;
20276
20277 adr = AREG((Opcode >> 0) & 7);
20278 if (flag_V & 0x80)
20279 {
20280 res = 0xFF;
20281 PRE_IO
20282 WRITE_BYTE_F(adr, res)
20283 POST_IO
20284 RET(12)
20285 }
20286 res = 0;
20287 PRE_IO
20288 WRITE_BYTE_F(adr, res)
20289 POST_IO
20290 RET(12)
20291}
20292
20293// STCC
20294OPCODE(0x5AD0)
20295{
20296 u32 adr, res;
20297 u32 src, dst;
20298
20299 adr = AREG((Opcode >> 0) & 7);
20300 if (!(flag_N & 0x80))
20301 {
20302 res = 0xFF;
20303 PRE_IO
20304 WRITE_BYTE_F(adr, res)
20305 POST_IO
20306 RET(12)
20307 }
20308 res = 0;
20309 PRE_IO
20310 WRITE_BYTE_F(adr, res)
20311 POST_IO
20312 RET(12)
20313}
20314
20315// STCC
20316OPCODE(0x5BD0)
20317{
20318 u32 adr, res;
20319 u32 src, dst;
20320
20321 adr = AREG((Opcode >> 0) & 7);
20322 if (flag_N & 0x80)
20323 {
20324 res = 0xFF;
20325 PRE_IO
20326 WRITE_BYTE_F(adr, res)
20327 POST_IO
20328 RET(12)
20329 }
20330 res = 0;
20331 PRE_IO
20332 WRITE_BYTE_F(adr, res)
20333 POST_IO
20334 RET(12)
20335}
20336
20337// STCC
20338OPCODE(0x5CD0)
20339{
20340 u32 adr, res;
20341 u32 src, dst;
20342
20343 adr = AREG((Opcode >> 0) & 7);
20344 if (!((flag_N ^ flag_V) & 0x80))
20345 {
20346 res = 0xFF;
20347 PRE_IO
20348 WRITE_BYTE_F(adr, res)
20349 POST_IO
20350 RET(12)
20351 }
20352 res = 0;
20353 PRE_IO
20354 WRITE_BYTE_F(adr, res)
20355 POST_IO
20356 RET(12)
20357}
20358
20359// STCC
20360OPCODE(0x5DD0)
20361{
20362 u32 adr, res;
20363 u32 src, dst;
20364
20365 adr = AREG((Opcode >> 0) & 7);
20366 if ((flag_N ^ flag_V) & 0x80)
20367 {
20368 res = 0xFF;
20369 PRE_IO
20370 WRITE_BYTE_F(adr, res)
20371 POST_IO
20372 RET(12)
20373 }
20374 res = 0;
20375 PRE_IO
20376 WRITE_BYTE_F(adr, res)
20377 POST_IO
20378 RET(12)
20379}
20380
20381// STCC
20382OPCODE(0x5ED0)
20383{
20384 u32 adr, res;
20385 u32 src, dst;
20386
20387 adr = AREG((Opcode >> 0) & 7);
20388 if (flag_NotZ && (!((flag_N ^ flag_V) & 0x80)))
20389 {
20390 res = 0xFF;
20391 PRE_IO
20392 WRITE_BYTE_F(adr, res)
20393 POST_IO
20394 RET(12)
20395 }
20396 res = 0;
20397 PRE_IO
20398 WRITE_BYTE_F(adr, res)
20399 POST_IO
20400 RET(12)
20401}
20402
20403// STCC
20404OPCODE(0x5FD0)
20405{
20406 u32 adr, res;
20407 u32 src, dst;
20408
20409 adr = AREG((Opcode >> 0) & 7);
20410 if ((!flag_NotZ) || ((flag_N ^ flag_V) & 0x80))
20411 {
20412 res = 0xFF;
20413 PRE_IO
20414 WRITE_BYTE_F(adr, res)
20415 POST_IO
20416 RET(12)
20417 }
20418 res = 0;
20419 PRE_IO
20420 WRITE_BYTE_F(adr, res)
20421 POST_IO
20422 RET(12)
20423}
20424
20425// STCC
20426OPCODE(0x50D8)
20427{
20428 u32 adr, res;
20429 u32 src, dst;
20430
20431 adr = AREG((Opcode >> 0) & 7);
20432 AREG((Opcode >> 0) & 7) += 1;
20433 res = 0xFF;
20434 PRE_IO
20435 WRITE_BYTE_F(adr, res)
20436 POST_IO
20437 RET(12)
20438}
20439
20440// STCC
20441OPCODE(0x51D8)
20442{
20443 u32 adr, res;
20444 u32 src, dst;
20445
20446 adr = AREG((Opcode >> 0) & 7);
20447 AREG((Opcode >> 0) & 7) += 1;
20448 res = 0;
20449 PRE_IO
20450 WRITE_BYTE_F(adr, res)
20451 POST_IO
20452 RET(12)
20453}
20454
20455// STCC
20456OPCODE(0x52D8)
20457{
20458 u32 adr, res;
20459 u32 src, dst;
20460
20461 adr = AREG((Opcode >> 0) & 7);
20462 AREG((Opcode >> 0) & 7) += 1;
20463 if (flag_NotZ && (!(flag_C & 0x100)))
20464 {
20465 res = 0xFF;
20466 PRE_IO
20467 WRITE_BYTE_F(adr, res)
20468 POST_IO
20469 RET(12)
20470 }
20471 res = 0;
20472 PRE_IO
20473 WRITE_BYTE_F(adr, res)
20474 POST_IO
20475 RET(12)
20476}
20477
20478// STCC
20479OPCODE(0x53D8)
20480{
20481 u32 adr, res;
20482 u32 src, dst;
20483
20484 adr = AREG((Opcode >> 0) & 7);
20485 AREG((Opcode >> 0) & 7) += 1;
20486 if ((!flag_NotZ) || (flag_C & 0x100))
20487 {
20488 res = 0xFF;
20489 PRE_IO
20490 WRITE_BYTE_F(adr, res)
20491 POST_IO
20492 RET(12)
20493 }
20494 res = 0;
20495 PRE_IO
20496 WRITE_BYTE_F(adr, res)
20497 POST_IO
20498 RET(12)
20499}
20500
20501// STCC
20502OPCODE(0x54D8)
20503{
20504 u32 adr, res;
20505 u32 src, dst;
20506
20507 adr = AREG((Opcode >> 0) & 7);
20508 AREG((Opcode >> 0) & 7) += 1;
20509 if (!(flag_C & 0x100))
20510 {
20511 res = 0xFF;
20512 PRE_IO
20513 WRITE_BYTE_F(adr, res)
20514 POST_IO
20515 RET(12)
20516 }
20517 res = 0;
20518 PRE_IO
20519 WRITE_BYTE_F(adr, res)
20520 POST_IO
20521 RET(12)
20522}
20523
20524// STCC
20525OPCODE(0x55D8)
20526{
20527 u32 adr, res;
20528 u32 src, dst;
20529
20530 adr = AREG((Opcode >> 0) & 7);
20531 AREG((Opcode >> 0) & 7) += 1;
20532 if (flag_C & 0x100)
20533 {
20534 res = 0xFF;
20535 PRE_IO
20536 WRITE_BYTE_F(adr, res)
20537 POST_IO
20538 RET(12)
20539 }
20540 res = 0;
20541 PRE_IO
20542 WRITE_BYTE_F(adr, res)
20543 POST_IO
20544 RET(12)
20545}
20546
20547// STCC
20548OPCODE(0x56D8)
20549{
20550 u32 adr, res;
20551 u32 src, dst;
20552
20553 adr = AREG((Opcode >> 0) & 7);
20554 AREG((Opcode >> 0) & 7) += 1;
20555 if (flag_NotZ)
20556 {
20557 res = 0xFF;
20558 PRE_IO
20559 WRITE_BYTE_F(adr, res)
20560 POST_IO
20561 RET(12)
20562 }
20563 res = 0;
20564 PRE_IO
20565 WRITE_BYTE_F(adr, res)
20566 POST_IO
20567 RET(12)
20568}
20569
20570// STCC
20571OPCODE(0x57D8)
20572{
20573 u32 adr, res;
20574 u32 src, dst;
20575
20576 adr = AREG((Opcode >> 0) & 7);
20577 AREG((Opcode >> 0) & 7) += 1;
20578 if (!flag_NotZ)
20579 {
20580 res = 0xFF;
20581 PRE_IO
20582 WRITE_BYTE_F(adr, res)
20583 POST_IO
20584 RET(12)
20585 }
20586 res = 0;
20587 PRE_IO
20588 WRITE_BYTE_F(adr, res)
20589 POST_IO
20590 RET(12)
20591}
20592
20593// STCC
20594OPCODE(0x58D8)
20595{
20596 u32 adr, res;
20597 u32 src, dst;
20598
20599 adr = AREG((Opcode >> 0) & 7);
20600 AREG((Opcode >> 0) & 7) += 1;
20601 if (!(flag_V & 0x80))
20602 {
20603 res = 0xFF;
20604 PRE_IO
20605 WRITE_BYTE_F(adr, res)
20606 POST_IO
20607 RET(12)
20608 }
20609 res = 0;
20610 PRE_IO
20611 WRITE_BYTE_F(adr, res)
20612 POST_IO
20613 RET(12)
20614}
20615
20616// STCC
20617OPCODE(0x59D8)
20618{
20619 u32 adr, res;
20620 u32 src, dst;
20621
20622 adr = AREG((Opcode >> 0) & 7);
20623 AREG((Opcode >> 0) & 7) += 1;
20624 if (flag_V & 0x80)
20625 {
20626 res = 0xFF;
20627 PRE_IO
20628 WRITE_BYTE_F(adr, res)
20629 POST_IO
20630 RET(12)
20631 }
20632 res = 0;
20633 PRE_IO
20634 WRITE_BYTE_F(adr, res)
20635 POST_IO
20636 RET(12)
20637}
20638
20639// STCC
20640OPCODE(0x5AD8)
20641{
20642 u32 adr, res;
20643 u32 src, dst;
20644
20645 adr = AREG((Opcode >> 0) & 7);
20646 AREG((Opcode >> 0) & 7) += 1;
20647 if (!(flag_N & 0x80))
20648 {
20649 res = 0xFF;
20650 PRE_IO
20651 WRITE_BYTE_F(adr, res)
20652 POST_IO
20653 RET(12)
20654 }
20655 res = 0;
20656 PRE_IO
20657 WRITE_BYTE_F(adr, res)
20658 POST_IO
20659 RET(12)
20660}
20661
20662// STCC
20663OPCODE(0x5BD8)
20664{
20665 u32 adr, res;
20666 u32 src, dst;
20667
20668 adr = AREG((Opcode >> 0) & 7);
20669 AREG((Opcode >> 0) & 7) += 1;
20670 if (flag_N & 0x80)
20671 {
20672 res = 0xFF;
20673 PRE_IO
20674 WRITE_BYTE_F(adr, res)
20675 POST_IO
20676 RET(12)
20677 }
20678 res = 0;
20679 PRE_IO
20680 WRITE_BYTE_F(adr, res)
20681 POST_IO
20682 RET(12)
20683}
20684
20685// STCC
20686OPCODE(0x5CD8)
20687{
20688 u32 adr, res;
20689 u32 src, dst;
20690
20691 adr = AREG((Opcode >> 0) & 7);
20692 AREG((Opcode >> 0) & 7) += 1;
20693 if (!((flag_N ^ flag_V) & 0x80))
20694 {
20695 res = 0xFF;
20696 PRE_IO
20697 WRITE_BYTE_F(adr, res)
20698 POST_IO
20699 RET(12)
20700 }
20701 res = 0;
20702 PRE_IO
20703 WRITE_BYTE_F(adr, res)
20704 POST_IO
20705 RET(12)
20706}
20707
20708// STCC
20709OPCODE(0x5DD8)
20710{
20711 u32 adr, res;
20712 u32 src, dst;
20713
20714 adr = AREG((Opcode >> 0) & 7);
20715 AREG((Opcode >> 0) & 7) += 1;
20716 if ((flag_N ^ flag_V) & 0x80)
20717 {
20718 res = 0xFF;
20719 PRE_IO
20720 WRITE_BYTE_F(adr, res)
20721 POST_IO
20722 RET(12)
20723 }
20724 res = 0;
20725 PRE_IO
20726 WRITE_BYTE_F(adr, res)
20727 POST_IO
20728 RET(12)
20729}
20730
20731// STCC
20732OPCODE(0x5ED8)
20733{
20734 u32 adr, res;
20735 u32 src, dst;
20736
20737 adr = AREG((Opcode >> 0) & 7);
20738 AREG((Opcode >> 0) & 7) += 1;
20739 if (flag_NotZ && (!((flag_N ^ flag_V) & 0x80)))
20740 {
20741 res = 0xFF;
20742 PRE_IO
20743 WRITE_BYTE_F(adr, res)
20744 POST_IO
20745 RET(12)
20746 }
20747 res = 0;
20748 PRE_IO
20749 WRITE_BYTE_F(adr, res)
20750 POST_IO
20751 RET(12)
20752}
20753
20754// STCC
20755OPCODE(0x5FD8)
20756{
20757 u32 adr, res;
20758 u32 src, dst;
20759
20760 adr = AREG((Opcode >> 0) & 7);
20761 AREG((Opcode >> 0) & 7) += 1;
20762 if ((!flag_NotZ) || ((flag_N ^ flag_V) & 0x80))
20763 {
20764 res = 0xFF;
20765 PRE_IO
20766 WRITE_BYTE_F(adr, res)
20767 POST_IO
20768 RET(12)
20769 }
20770 res = 0;
20771 PRE_IO
20772 WRITE_BYTE_F(adr, res)
20773 POST_IO
20774 RET(12)
20775}
20776
20777// STCC
20778OPCODE(0x50E0)
20779{
20780 u32 adr, res;
20781 u32 src, dst;
20782
20783 adr = AREG((Opcode >> 0) & 7) - 1;
20784 AREG((Opcode >> 0) & 7) = adr;
20785 res = 0xFF;
20786 PRE_IO
20787 WRITE_BYTE_F(adr, res)
20788 POST_IO
20789 RET(14)
20790}
20791
20792// STCC
20793OPCODE(0x51E0)
20794{
20795 u32 adr, res;
20796 u32 src, dst;
20797
20798 adr = AREG((Opcode >> 0) & 7) - 1;
20799 AREG((Opcode >> 0) & 7) = adr;
20800 res = 0;
20801 PRE_IO
20802 WRITE_BYTE_F(adr, res)
20803 POST_IO
20804 RET(14)
20805}
20806
20807// STCC
20808OPCODE(0x52E0)
20809{
20810 u32 adr, res;
20811 u32 src, dst;
20812
20813 adr = AREG((Opcode >> 0) & 7) - 1;
20814 AREG((Opcode >> 0) & 7) = adr;
20815 if (flag_NotZ && (!(flag_C & 0x100)))
20816 {
20817 res = 0xFF;
20818 PRE_IO
20819 WRITE_BYTE_F(adr, res)
20820 POST_IO
20821 RET(14)
20822 }
20823 res = 0;
20824 PRE_IO
20825 WRITE_BYTE_F(adr, res)
20826 POST_IO
20827 RET(14)
20828}
20829
20830// STCC
20831OPCODE(0x53E0)
20832{
20833 u32 adr, res;
20834 u32 src, dst;
20835
20836 adr = AREG((Opcode >> 0) & 7) - 1;
20837 AREG((Opcode >> 0) & 7) = adr;
20838 if ((!flag_NotZ) || (flag_C & 0x100))
20839 {
20840 res = 0xFF;
20841 PRE_IO
20842 WRITE_BYTE_F(adr, res)
20843 POST_IO
20844 RET(14)
20845 }
20846 res = 0;
20847 PRE_IO
20848 WRITE_BYTE_F(adr, res)
20849 POST_IO
20850 RET(14)
20851}
20852
20853// STCC
20854OPCODE(0x54E0)
20855{
20856 u32 adr, res;
20857 u32 src, dst;
20858
20859 adr = AREG((Opcode >> 0) & 7) - 1;
20860 AREG((Opcode >> 0) & 7) = adr;
20861 if (!(flag_C & 0x100))
20862 {
20863 res = 0xFF;
20864 PRE_IO
20865 WRITE_BYTE_F(adr, res)
20866 POST_IO
20867 RET(14)
20868 }
20869 res = 0;
20870 PRE_IO
20871 WRITE_BYTE_F(adr, res)
20872 POST_IO
20873 RET(14)
20874}
20875
20876// STCC
20877OPCODE(0x55E0)
20878{
20879 u32 adr, res;
20880 u32 src, dst;
20881
20882 adr = AREG((Opcode >> 0) & 7) - 1;
20883 AREG((Opcode >> 0) & 7) = adr;
20884 if (flag_C & 0x100)
20885 {
20886 res = 0xFF;
20887 PRE_IO
20888 WRITE_BYTE_F(adr, res)
20889 POST_IO
20890 RET(14)
20891 }
20892 res = 0;
20893 PRE_IO
20894 WRITE_BYTE_F(adr, res)
20895 POST_IO
20896 RET(14)
20897}
20898
20899// STCC
20900OPCODE(0x56E0)
20901{
20902 u32 adr, res;
20903 u32 src, dst;
20904
20905 adr = AREG((Opcode >> 0) & 7) - 1;
20906 AREG((Opcode >> 0) & 7) = adr;
20907 if (flag_NotZ)
20908 {
20909 res = 0xFF;
20910 PRE_IO
20911 WRITE_BYTE_F(adr, res)
20912 POST_IO
20913 RET(14)
20914 }
20915 res = 0;
20916 PRE_IO
20917 WRITE_BYTE_F(adr, res)
20918 POST_IO
20919 RET(14)
20920}
20921
20922// STCC
20923OPCODE(0x57E0)
20924{
20925 u32 adr, res;
20926 u32 src, dst;
20927
20928 adr = AREG((Opcode >> 0) & 7) - 1;
20929 AREG((Opcode >> 0) & 7) = adr;
20930 if (!flag_NotZ)
20931 {
20932 res = 0xFF;
20933 PRE_IO
20934 WRITE_BYTE_F(adr, res)
20935 POST_IO
20936 RET(14)
20937 }
20938 res = 0;
20939 PRE_IO
20940 WRITE_BYTE_F(adr, res)
20941 POST_IO
20942 RET(14)
20943}
20944
20945// STCC
20946OPCODE(0x58E0)
20947{
20948 u32 adr, res;
20949 u32 src, dst;
20950
20951 adr = AREG((Opcode >> 0) & 7) - 1;
20952 AREG((Opcode >> 0) & 7) = adr;
20953 if (!(flag_V & 0x80))
20954 {
20955 res = 0xFF;
20956 PRE_IO
20957 WRITE_BYTE_F(adr, res)
20958 POST_IO
20959 RET(14)
20960 }
20961 res = 0;
20962 PRE_IO
20963 WRITE_BYTE_F(adr, res)
20964 POST_IO
20965 RET(14)
20966}
20967
20968// STCC
20969OPCODE(0x59E0)
20970{
20971 u32 adr, res;
20972 u32 src, dst;
20973
20974 adr = AREG((Opcode >> 0) & 7) - 1;
20975 AREG((Opcode >> 0) & 7) = adr;
20976 if (flag_V & 0x80)
20977 {
20978 res = 0xFF;
20979 PRE_IO
20980 WRITE_BYTE_F(adr, res)
20981 POST_IO
20982 RET(14)
20983 }
20984 res = 0;
20985 PRE_IO
20986 WRITE_BYTE_F(adr, res)
20987 POST_IO
20988 RET(14)
20989}
20990
20991// STCC
20992OPCODE(0x5AE0)
20993{
20994 u32 adr, res;
20995 u32 src, dst;
20996
20997 adr = AREG((Opcode >> 0) & 7) - 1;
20998 AREG((Opcode >> 0) & 7) = adr;
20999 if (!(flag_N & 0x80))
21000 {
21001 res = 0xFF;
21002 PRE_IO
21003 WRITE_BYTE_F(adr, res)
21004 POST_IO
21005 RET(14)
21006 }
21007 res = 0;
21008 PRE_IO
21009 WRITE_BYTE_F(adr, res)
21010 POST_IO
21011 RET(14)
21012}
21013
21014// STCC
21015OPCODE(0x5BE0)
21016{
21017 u32 adr, res;
21018 u32 src, dst;
21019
21020 adr = AREG((Opcode >> 0) & 7) - 1;
21021 AREG((Opcode >> 0) & 7) = adr;
21022 if (flag_N & 0x80)
21023 {
21024 res = 0xFF;
21025 PRE_IO
21026 WRITE_BYTE_F(adr, res)
21027 POST_IO
21028 RET(14)
21029 }
21030 res = 0;
21031 PRE_IO
21032 WRITE_BYTE_F(adr, res)
21033 POST_IO
21034 RET(14)
21035}
21036
21037// STCC
21038OPCODE(0x5CE0)
21039{
21040 u32 adr, res;
21041 u32 src, dst;
21042
21043 adr = AREG((Opcode >> 0) & 7) - 1;
21044 AREG((Opcode >> 0) & 7) = adr;
21045 if (!((flag_N ^ flag_V) & 0x80))
21046 {
21047 res = 0xFF;
21048 PRE_IO
21049 WRITE_BYTE_F(adr, res)
21050 POST_IO
21051 RET(14)
21052 }
21053 res = 0;
21054 PRE_IO
21055 WRITE_BYTE_F(adr, res)
21056 POST_IO
21057 RET(14)
21058}
21059
21060// STCC
21061OPCODE(0x5DE0)
21062{
21063 u32 adr, res;
21064 u32 src, dst;
21065
21066 adr = AREG((Opcode >> 0) & 7) - 1;
21067 AREG((Opcode >> 0) & 7) = adr;
21068 if ((flag_N ^ flag_V) & 0x80)
21069 {
21070 res = 0xFF;
21071 PRE_IO
21072 WRITE_BYTE_F(adr, res)
21073 POST_IO
21074 RET(14)
21075 }
21076 res = 0;
21077 PRE_IO
21078 WRITE_BYTE_F(adr, res)
21079 POST_IO
21080 RET(14)
21081}
21082
21083// STCC
21084OPCODE(0x5EE0)
21085{
21086 u32 adr, res;
21087 u32 src, dst;
21088
21089 adr = AREG((Opcode >> 0) & 7) - 1;
21090 AREG((Opcode >> 0) & 7) = adr;
21091 if (flag_NotZ && (!((flag_N ^ flag_V) & 0x80)))
21092 {
21093 res = 0xFF;
21094 PRE_IO
21095 WRITE_BYTE_F(adr, res)
21096 POST_IO
21097 RET(14)
21098 }
21099 res = 0;
21100 PRE_IO
21101 WRITE_BYTE_F(adr, res)
21102 POST_IO
21103 RET(14)
21104}
21105
21106// STCC
21107OPCODE(0x5FE0)
21108{
21109 u32 adr, res;
21110 u32 src, dst;
21111
21112 adr = AREG((Opcode >> 0) & 7) - 1;
21113 AREG((Opcode >> 0) & 7) = adr;
21114 if ((!flag_NotZ) || ((flag_N ^ flag_V) & 0x80))
21115 {
21116 res = 0xFF;
21117 PRE_IO
21118 WRITE_BYTE_F(adr, res)
21119 POST_IO
21120 RET(14)
21121 }
21122 res = 0;
21123 PRE_IO
21124 WRITE_BYTE_F(adr, res)
21125 POST_IO
21126 RET(14)
21127}
21128
21129// STCC
21130OPCODE(0x50E8)
21131{
21132 u32 adr, res;
21133 u32 src, dst;
21134
21135 FETCH_SWORD(adr);
21136 adr += AREG((Opcode >> 0) & 7);
21137 res = 0xFF;
21138 PRE_IO
21139 WRITE_BYTE_F(adr, res)
21140 POST_IO
21141 RET(16)
21142}
21143
21144// STCC
21145OPCODE(0x51E8)
21146{
21147 u32 adr, res;
21148 u32 src, dst;
21149
21150 FETCH_SWORD(adr);
21151 adr += AREG((Opcode >> 0) & 7);
21152 res = 0;
21153 PRE_IO
21154 WRITE_BYTE_F(adr, res)
21155 POST_IO
21156 RET(16)
21157}
21158
21159// STCC
21160OPCODE(0x52E8)
21161{
21162 u32 adr, res;
21163 u32 src, dst;
21164
21165 FETCH_SWORD(adr);
21166 adr += AREG((Opcode >> 0) & 7);
21167 if (flag_NotZ && (!(flag_C & 0x100)))
21168 {
21169 res = 0xFF;
21170 PRE_IO
21171 WRITE_BYTE_F(adr, res)
21172 POST_IO
21173 RET(16)
21174 }
21175 res = 0;
21176 PRE_IO
21177 WRITE_BYTE_F(adr, res)
21178 POST_IO
21179 RET(16)
21180}
21181
21182// STCC
21183OPCODE(0x53E8)
21184{
21185 u32 adr, res;
21186 u32 src, dst;
21187
21188 FETCH_SWORD(adr);
21189 adr += AREG((Opcode >> 0) & 7);
21190 if ((!flag_NotZ) || (flag_C & 0x100))
21191 {
21192 res = 0xFF;
21193 PRE_IO
21194 WRITE_BYTE_F(adr, res)
21195 POST_IO
21196 RET(16)
21197 }
21198 res = 0;
21199 PRE_IO
21200 WRITE_BYTE_F(adr, res)
21201 POST_IO
21202 RET(16)
21203}
21204
21205// STCC
21206OPCODE(0x54E8)
21207{
21208 u32 adr, res;
21209 u32 src, dst;
21210
21211 FETCH_SWORD(adr);
21212 adr += AREG((Opcode >> 0) & 7);
21213 if (!(flag_C & 0x100))
21214 {
21215 res = 0xFF;
21216 PRE_IO
21217 WRITE_BYTE_F(adr, res)
21218 POST_IO
21219 RET(16)
21220 }
21221 res = 0;
21222 PRE_IO
21223 WRITE_BYTE_F(adr, res)
21224 POST_IO
21225 RET(16)
21226}
21227
21228// STCC
21229OPCODE(0x55E8)
21230{
21231 u32 adr, res;
21232 u32 src, dst;
21233
21234 FETCH_SWORD(adr);
21235 adr += AREG((Opcode >> 0) & 7);
21236 if (flag_C & 0x100)
21237 {
21238 res = 0xFF;
21239 PRE_IO
21240 WRITE_BYTE_F(adr, res)
21241 POST_IO
21242 RET(16)
21243 }
21244 res = 0;
21245 PRE_IO
21246 WRITE_BYTE_F(adr, res)
21247 POST_IO
21248 RET(16)
21249}
21250
21251// STCC
21252OPCODE(0x56E8)
21253{
21254 u32 adr, res;
21255 u32 src, dst;
21256
21257 FETCH_SWORD(adr);
21258 adr += AREG((Opcode >> 0) & 7);
21259 if (flag_NotZ)
21260 {
21261 res = 0xFF;
21262 PRE_IO
21263 WRITE_BYTE_F(adr, res)
21264 POST_IO
21265 RET(16)
21266 }
21267 res = 0;
21268 PRE_IO
21269 WRITE_BYTE_F(adr, res)
21270 POST_IO
21271 RET(16)
21272}
21273
21274// STCC
21275OPCODE(0x57E8)
21276{
21277 u32 adr, res;
21278 u32 src, dst;
21279
21280 FETCH_SWORD(adr);
21281 adr += AREG((Opcode >> 0) & 7);
21282 if (!flag_NotZ)
21283 {
21284 res = 0xFF;
21285 PRE_IO
21286 WRITE_BYTE_F(adr, res)
21287 POST_IO
21288 RET(16)
21289 }
21290 res = 0;
21291 PRE_IO
21292 WRITE_BYTE_F(adr, res)
21293 POST_IO
21294 RET(16)
21295}
21296
21297// STCC
21298OPCODE(0x58E8)
21299{
21300 u32 adr, res;
21301 u32 src, dst;
21302
21303 FETCH_SWORD(adr);
21304 adr += AREG((Opcode >> 0) & 7);
21305 if (!(flag_V & 0x80))
21306 {
21307 res = 0xFF;
21308 PRE_IO
21309 WRITE_BYTE_F(adr, res)
21310 POST_IO
21311 RET(16)
21312 }
21313 res = 0;
21314 PRE_IO
21315 WRITE_BYTE_F(adr, res)
21316 POST_IO
21317 RET(16)
21318}
21319
21320// STCC
21321OPCODE(0x59E8)
21322{
21323 u32 adr, res;
21324 u32 src, dst;
21325
21326 FETCH_SWORD(adr);
21327 adr += AREG((Opcode >> 0) & 7);
21328 if (flag_V & 0x80)
21329 {
21330 res = 0xFF;
21331 PRE_IO
21332 WRITE_BYTE_F(adr, res)
21333 POST_IO
21334 RET(16)
21335 }
21336 res = 0;
21337 PRE_IO
21338 WRITE_BYTE_F(adr, res)
21339 POST_IO
21340 RET(16)
21341}
21342
21343// STCC
21344OPCODE(0x5AE8)
21345{
21346 u32 adr, res;
21347 u32 src, dst;
21348
21349 FETCH_SWORD(adr);
21350 adr += AREG((Opcode >> 0) & 7);
21351 if (!(flag_N & 0x80))
21352 {
21353 res = 0xFF;
21354 PRE_IO
21355 WRITE_BYTE_F(adr, res)
21356 POST_IO
21357 RET(16)
21358 }
21359 res = 0;
21360 PRE_IO
21361 WRITE_BYTE_F(adr, res)
21362 POST_IO
21363 RET(16)
21364}
21365
21366// STCC
21367OPCODE(0x5BE8)
21368{
21369 u32 adr, res;
21370 u32 src, dst;
21371
21372 FETCH_SWORD(adr);
21373 adr += AREG((Opcode >> 0) & 7);
21374 if (flag_N & 0x80)
21375 {
21376 res = 0xFF;
21377 PRE_IO
21378 WRITE_BYTE_F(adr, res)
21379 POST_IO
21380 RET(16)
21381 }
21382 res = 0;
21383 PRE_IO
21384 WRITE_BYTE_F(adr, res)
21385 POST_IO
21386 RET(16)
21387}
21388
21389// STCC
21390OPCODE(0x5CE8)
21391{
21392 u32 adr, res;
21393 u32 src, dst;
21394
21395 FETCH_SWORD(adr);
21396 adr += AREG((Opcode >> 0) & 7);
21397 if (!((flag_N ^ flag_V) & 0x80))
21398 {
21399 res = 0xFF;
21400 PRE_IO
21401 WRITE_BYTE_F(adr, res)
21402 POST_IO
21403 RET(16)
21404 }
21405 res = 0;
21406 PRE_IO
21407 WRITE_BYTE_F(adr, res)
21408 POST_IO
21409 RET(16)
21410}
21411
21412// STCC
21413OPCODE(0x5DE8)
21414{
21415 u32 adr, res;
21416 u32 src, dst;
21417
21418 FETCH_SWORD(adr);
21419 adr += AREG((Opcode >> 0) & 7);
21420 if ((flag_N ^ flag_V) & 0x80)
21421 {
21422 res = 0xFF;
21423 PRE_IO
21424 WRITE_BYTE_F(adr, res)
21425 POST_IO
21426 RET(16)
21427 }
21428 res = 0;
21429 PRE_IO
21430 WRITE_BYTE_F(adr, res)
21431 POST_IO
21432 RET(16)
21433}
21434
21435// STCC
21436OPCODE(0x5EE8)
21437{
21438 u32 adr, res;
21439 u32 src, dst;
21440
21441 FETCH_SWORD(adr);
21442 adr += AREG((Opcode >> 0) & 7);
21443 if (flag_NotZ && (!((flag_N ^ flag_V) & 0x80)))
21444 {
21445 res = 0xFF;
21446 PRE_IO
21447 WRITE_BYTE_F(adr, res)
21448 POST_IO
21449 RET(16)
21450 }
21451 res = 0;
21452 PRE_IO
21453 WRITE_BYTE_F(adr, res)
21454 POST_IO
21455 RET(16)
21456}
21457
21458// STCC
21459OPCODE(0x5FE8)
21460{
21461 u32 adr, res;
21462 u32 src, dst;
21463
21464 FETCH_SWORD(adr);
21465 adr += AREG((Opcode >> 0) & 7);
21466 if ((!flag_NotZ) || ((flag_N ^ flag_V) & 0x80))
21467 {
21468 res = 0xFF;
21469 PRE_IO
21470 WRITE_BYTE_F(adr, res)
21471 POST_IO
21472 RET(16)
21473 }
21474 res = 0;
21475 PRE_IO
21476 WRITE_BYTE_F(adr, res)
21477 POST_IO
21478 RET(16)
21479}
21480
21481// STCC
21482OPCODE(0x50F0)
21483{
21484 u32 adr, res;
21485 u32 src, dst;
21486
21487 adr = AREG((Opcode >> 0) & 7);
21488 DECODE_EXT_WORD
21489 res = 0xFF;
21490 PRE_IO
21491 WRITE_BYTE_F(adr, res)
21492 POST_IO
21493 RET(18)
21494}
21495
21496// STCC
21497OPCODE(0x51F0)
21498{
21499 u32 adr, res;
21500 u32 src, dst;
21501
21502 adr = AREG((Opcode >> 0) & 7);
21503 DECODE_EXT_WORD
21504 res = 0;
21505 PRE_IO
21506 WRITE_BYTE_F(adr, res)
21507 POST_IO
21508 RET(18)
21509}
21510
21511// STCC
21512OPCODE(0x52F0)
21513{
21514 u32 adr, res;
21515 u32 src, dst;
21516
21517 adr = AREG((Opcode >> 0) & 7);
21518 DECODE_EXT_WORD
21519 if (flag_NotZ && (!(flag_C & 0x100)))
21520 {
21521 res = 0xFF;
21522 PRE_IO
21523 WRITE_BYTE_F(adr, res)
21524 POST_IO
21525 RET(18)
21526 }
21527 res = 0;
21528 PRE_IO
21529 WRITE_BYTE_F(adr, res)
21530 POST_IO
21531 RET(18)
21532}
21533
21534// STCC
21535OPCODE(0x53F0)
21536{
21537 u32 adr, res;
21538 u32 src, dst;
21539
21540 adr = AREG((Opcode >> 0) & 7);
21541 DECODE_EXT_WORD
21542 if ((!flag_NotZ) || (flag_C & 0x100))
21543 {
21544 res = 0xFF;
21545 PRE_IO
21546 WRITE_BYTE_F(adr, res)
21547 POST_IO
21548 RET(18)
21549 }
21550 res = 0;
21551 PRE_IO
21552 WRITE_BYTE_F(adr, res)
21553 POST_IO
21554 RET(18)
21555}
21556
21557// STCC
21558OPCODE(0x54F0)
21559{
21560 u32 adr, res;
21561 u32 src, dst;
21562
21563 adr = AREG((Opcode >> 0) & 7);
21564 DECODE_EXT_WORD
21565 if (!(flag_C & 0x100))
21566 {
21567 res = 0xFF;
21568 PRE_IO
21569 WRITE_BYTE_F(adr, res)
21570 POST_IO
21571 RET(18)
21572 }
21573 res = 0;
21574 PRE_IO
21575 WRITE_BYTE_F(adr, res)
21576 POST_IO
21577 RET(18)
21578}
21579
21580// STCC
21581OPCODE(0x55F0)
21582{
21583 u32 adr, res;
21584 u32 src, dst;
21585
21586 adr = AREG((Opcode >> 0) & 7);
21587 DECODE_EXT_WORD
21588 if (flag_C & 0x100)
21589 {
21590 res = 0xFF;
21591 PRE_IO
21592 WRITE_BYTE_F(adr, res)
21593 POST_IO
21594 RET(18)
21595 }
21596 res = 0;
21597 PRE_IO
21598 WRITE_BYTE_F(adr, res)
21599 POST_IO
21600 RET(18)
21601}
21602
21603// STCC
21604OPCODE(0x56F0)
21605{
21606 u32 adr, res;
21607 u32 src, dst;
21608
21609 adr = AREG((Opcode >> 0) & 7);
21610 DECODE_EXT_WORD
21611 if (flag_NotZ)
21612 {
21613 res = 0xFF;
21614 PRE_IO
21615 WRITE_BYTE_F(adr, res)
21616 POST_IO
21617 RET(18)
21618 }
21619 res = 0;
21620 PRE_IO
21621 WRITE_BYTE_F(adr, res)
21622 POST_IO
21623 RET(18)
21624}
21625
21626// STCC
21627OPCODE(0x57F0)
21628{
21629 u32 adr, res;
21630 u32 src, dst;
21631
21632 adr = AREG((Opcode >> 0) & 7);
21633 DECODE_EXT_WORD
21634 if (!flag_NotZ)
21635 {
21636 res = 0xFF;
21637 PRE_IO
21638 WRITE_BYTE_F(adr, res)
21639 POST_IO
21640 RET(18)
21641 }
21642 res = 0;
21643 PRE_IO
21644 WRITE_BYTE_F(adr, res)
21645 POST_IO
21646 RET(18)
21647}
21648
21649// STCC
21650OPCODE(0x58F0)
21651{
21652 u32 adr, res;
21653 u32 src, dst;
21654
21655 adr = AREG((Opcode >> 0) & 7);
21656 DECODE_EXT_WORD
21657 if (!(flag_V & 0x80))
21658 {
21659 res = 0xFF;
21660 PRE_IO
21661 WRITE_BYTE_F(adr, res)
21662 POST_IO
21663 RET(18)
21664 }
21665 res = 0;
21666 PRE_IO
21667 WRITE_BYTE_F(adr, res)
21668 POST_IO
21669 RET(18)
21670}
21671
21672// STCC
21673OPCODE(0x59F0)
21674{
21675 u32 adr, res;
21676 u32 src, dst;
21677
21678 adr = AREG((Opcode >> 0) & 7);
21679 DECODE_EXT_WORD
21680 if (flag_V & 0x80)
21681 {
21682 res = 0xFF;
21683 PRE_IO
21684 WRITE_BYTE_F(adr, res)
21685 POST_IO
21686 RET(18)
21687 }
21688 res = 0;
21689 PRE_IO
21690 WRITE_BYTE_F(adr, res)
21691 POST_IO
21692 RET(18)
21693}
21694
21695// STCC
21696OPCODE(0x5AF0)
21697{
21698 u32 adr, res;
21699 u32 src, dst;
21700
21701 adr = AREG((Opcode >> 0) & 7);
21702 DECODE_EXT_WORD
21703 if (!(flag_N & 0x80))
21704 {
21705 res = 0xFF;
21706 PRE_IO
21707 WRITE_BYTE_F(adr, res)
21708 POST_IO
21709 RET(18)
21710 }
21711 res = 0;
21712 PRE_IO
21713 WRITE_BYTE_F(adr, res)
21714 POST_IO
21715 RET(18)
21716}
21717
21718// STCC
21719OPCODE(0x5BF0)
21720{
21721 u32 adr, res;
21722 u32 src, dst;
21723
21724 adr = AREG((Opcode >> 0) & 7);
21725 DECODE_EXT_WORD
21726 if (flag_N & 0x80)
21727 {
21728 res = 0xFF;
21729 PRE_IO
21730 WRITE_BYTE_F(adr, res)
21731 POST_IO
21732 RET(18)
21733 }
21734 res = 0;
21735 PRE_IO
21736 WRITE_BYTE_F(adr, res)
21737 POST_IO
21738 RET(18)
21739}
21740
21741// STCC
21742OPCODE(0x5CF0)
21743{
21744 u32 adr, res;
21745 u32 src, dst;
21746
21747 adr = AREG((Opcode >> 0) & 7);
21748 DECODE_EXT_WORD
21749 if (!((flag_N ^ flag_V) & 0x80))
21750 {
21751 res = 0xFF;
21752 PRE_IO
21753 WRITE_BYTE_F(adr, res)
21754 POST_IO
21755 RET(18)
21756 }
21757 res = 0;
21758 PRE_IO
21759 WRITE_BYTE_F(adr, res)
21760 POST_IO
21761 RET(18)
21762}
21763
21764// STCC
21765OPCODE(0x5DF0)
21766{
21767 u32 adr, res;
21768 u32 src, dst;
21769
21770 adr = AREG((Opcode >> 0) & 7);
21771 DECODE_EXT_WORD
21772 if ((flag_N ^ flag_V) & 0x80)
21773 {
21774 res = 0xFF;
21775 PRE_IO
21776 WRITE_BYTE_F(adr, res)
21777 POST_IO
21778 RET(18)
21779 }
21780 res = 0;
21781 PRE_IO
21782 WRITE_BYTE_F(adr, res)
21783 POST_IO
21784 RET(18)
21785}
21786
21787// STCC
21788OPCODE(0x5EF0)
21789{
21790 u32 adr, res;
21791 u32 src, dst;
21792
21793 adr = AREG((Opcode >> 0) & 7);
21794 DECODE_EXT_WORD
21795 if (flag_NotZ && (!((flag_N ^ flag_V) & 0x80)))
21796 {
21797 res = 0xFF;
21798 PRE_IO
21799 WRITE_BYTE_F(adr, res)
21800 POST_IO
21801 RET(18)
21802 }
21803 res = 0;
21804 PRE_IO
21805 WRITE_BYTE_F(adr, res)
21806 POST_IO
21807 RET(18)
21808}
21809
21810// STCC
21811OPCODE(0x5FF0)
21812{
21813 u32 adr, res;
21814 u32 src, dst;
21815
21816 adr = AREG((Opcode >> 0) & 7);
21817 DECODE_EXT_WORD
21818 if ((!flag_NotZ) || ((flag_N ^ flag_V) & 0x80))
21819 {
21820 res = 0xFF;
21821 PRE_IO
21822 WRITE_BYTE_F(adr, res)
21823 POST_IO
21824 RET(18)
21825 }
21826 res = 0;
21827 PRE_IO
21828 WRITE_BYTE_F(adr, res)
21829 POST_IO
21830 RET(18)
21831}
21832
21833// STCC
21834OPCODE(0x50F8)
21835{
21836 u32 adr, res;
21837 u32 src, dst;
21838
21839 FETCH_SWORD(adr);
21840 res = 0xFF;
21841 PRE_IO
21842 WRITE_BYTE_F(adr, res)
21843 POST_IO
21844 RET(16)
21845}
21846
21847// STCC
21848OPCODE(0x51F8)
21849{
21850 u32 adr, res;
21851 u32 src, dst;
21852
21853 FETCH_SWORD(adr);
21854 res = 0;
21855 PRE_IO
21856 WRITE_BYTE_F(adr, res)
21857 POST_IO
21858 RET(16)
21859}
21860
21861// STCC
21862OPCODE(0x52F8)
21863{
21864 u32 adr, res;
21865 u32 src, dst;
21866
21867 FETCH_SWORD(adr);
21868 if (flag_NotZ && (!(flag_C & 0x100)))
21869 {
21870 res = 0xFF;
21871 PRE_IO
21872 WRITE_BYTE_F(adr, res)
21873 POST_IO
21874 RET(16)
21875 }
21876 res = 0;
21877 PRE_IO
21878 WRITE_BYTE_F(adr, res)
21879 POST_IO
21880 RET(16)
21881}
21882
21883// STCC
21884OPCODE(0x53F8)
21885{
21886 u32 adr, res;
21887 u32 src, dst;
21888
21889 FETCH_SWORD(adr);
21890 if ((!flag_NotZ) || (flag_C & 0x100))
21891 {
21892 res = 0xFF;
21893 PRE_IO
21894 WRITE_BYTE_F(adr, res)
21895 POST_IO
21896 RET(16)
21897 }
21898 res = 0;
21899 PRE_IO
21900 WRITE_BYTE_F(adr, res)
21901 POST_IO
21902 RET(16)
21903}
21904
21905// STCC
21906OPCODE(0x54F8)
21907{
21908 u32 adr, res;
21909 u32 src, dst;
21910
21911 FETCH_SWORD(adr);
21912 if (!(flag_C & 0x100))
21913 {
21914 res = 0xFF;
21915 PRE_IO
21916 WRITE_BYTE_F(adr, res)
21917 POST_IO
21918 RET(16)
21919 }
21920 res = 0;
21921 PRE_IO
21922 WRITE_BYTE_F(adr, res)
21923 POST_IO
21924 RET(16)
21925}
21926
21927// STCC
21928OPCODE(0x55F8)
21929{
21930 u32 adr, res;
21931 u32 src, dst;
21932
21933 FETCH_SWORD(adr);
21934 if (flag_C & 0x100)
21935 {
21936 res = 0xFF;
21937 PRE_IO
21938 WRITE_BYTE_F(adr, res)
21939 POST_IO
21940 RET(16)
21941 }
21942 res = 0;
21943 PRE_IO
21944 WRITE_BYTE_F(adr, res)
21945 POST_IO
21946 RET(16)
21947}
21948
21949// STCC
21950OPCODE(0x56F8)
21951{
21952 u32 adr, res;
21953 u32 src, dst;
21954
21955 FETCH_SWORD(adr);
21956 if (flag_NotZ)
21957 {
21958 res = 0xFF;
21959 PRE_IO
21960 WRITE_BYTE_F(adr, res)
21961 POST_IO
21962 RET(16)
21963 }
21964 res = 0;
21965 PRE_IO
21966 WRITE_BYTE_F(adr, res)
21967 POST_IO
21968 RET(16)
21969}
21970
21971// STCC
21972OPCODE(0x57F8)
21973{
21974 u32 adr, res;
21975 u32 src, dst;
21976
21977 FETCH_SWORD(adr);
21978 if (!flag_NotZ)
21979 {
21980 res = 0xFF;
21981 PRE_IO
21982 WRITE_BYTE_F(adr, res)
21983 POST_IO
21984 RET(16)
21985 }
21986 res = 0;
21987 PRE_IO
21988 WRITE_BYTE_F(adr, res)
21989 POST_IO
21990 RET(16)
21991}
21992
21993// STCC
21994OPCODE(0x58F8)
21995{
21996 u32 adr, res;
21997 u32 src, dst;
21998
21999 FETCH_SWORD(adr);
22000 if (!(flag_V & 0x80))
22001 {
22002 res = 0xFF;
22003 PRE_IO
22004 WRITE_BYTE_F(adr, res)
22005 POST_IO
22006 RET(16)
22007 }
22008 res = 0;
22009 PRE_IO
22010 WRITE_BYTE_F(adr, res)
22011 POST_IO
22012 RET(16)
22013}
22014
22015// STCC
22016OPCODE(0x59F8)
22017{
22018 u32 adr, res;
22019 u32 src, dst;
22020
22021 FETCH_SWORD(adr);
22022 if (flag_V & 0x80)
22023 {
22024 res = 0xFF;
22025 PRE_IO
22026 WRITE_BYTE_F(adr, res)
22027 POST_IO
22028 RET(16)
22029 }
22030 res = 0;
22031 PRE_IO
22032 WRITE_BYTE_F(adr, res)
22033 POST_IO
22034 RET(16)
22035}
22036
22037// STCC
22038OPCODE(0x5AF8)
22039{
22040 u32 adr, res;
22041 u32 src, dst;
22042
22043 FETCH_SWORD(adr);
22044 if (!(flag_N & 0x80))
22045 {
22046 res = 0xFF;
22047 PRE_IO
22048 WRITE_BYTE_F(adr, res)
22049 POST_IO
22050 RET(16)
22051 }
22052 res = 0;
22053 PRE_IO
22054 WRITE_BYTE_F(adr, res)
22055 POST_IO
22056 RET(16)
22057}
22058
22059// STCC
22060OPCODE(0x5BF8)
22061{
22062 u32 adr, res;
22063 u32 src, dst;
22064
22065 FETCH_SWORD(adr);
22066 if (flag_N & 0x80)
22067 {
22068 res = 0xFF;
22069 PRE_IO
22070 WRITE_BYTE_F(adr, res)
22071 POST_IO
22072 RET(16)
22073 }
22074 res = 0;
22075 PRE_IO
22076 WRITE_BYTE_F(adr, res)
22077 POST_IO
22078 RET(16)
22079}
22080
22081// STCC
22082OPCODE(0x5CF8)
22083{
22084 u32 adr, res;
22085 u32 src, dst;
22086
22087 FETCH_SWORD(adr);
22088 if (!((flag_N ^ flag_V) & 0x80))
22089 {
22090 res = 0xFF;
22091 PRE_IO
22092 WRITE_BYTE_F(adr, res)
22093 POST_IO
22094 RET(16)
22095 }
22096 res = 0;
22097 PRE_IO
22098 WRITE_BYTE_F(adr, res)
22099 POST_IO
22100 RET(16)
22101}
22102
22103// STCC
22104OPCODE(0x5DF8)
22105{
22106 u32 adr, res;
22107 u32 src, dst;
22108
22109 FETCH_SWORD(adr);
22110 if ((flag_N ^ flag_V) & 0x80)
22111 {
22112 res = 0xFF;
22113 PRE_IO
22114 WRITE_BYTE_F(adr, res)
22115 POST_IO
22116 RET(16)
22117 }
22118 res = 0;
22119 PRE_IO
22120 WRITE_BYTE_F(adr, res)
22121 POST_IO
22122 RET(16)
22123}
22124
22125// STCC
22126OPCODE(0x5EF8)
22127{
22128 u32 adr, res;
22129 u32 src, dst;
22130
22131 FETCH_SWORD(adr);
22132 if (flag_NotZ && (!((flag_N ^ flag_V) & 0x80)))
22133 {
22134 res = 0xFF;
22135 PRE_IO
22136 WRITE_BYTE_F(adr, res)
22137 POST_IO
22138 RET(16)
22139 }
22140 res = 0;
22141 PRE_IO
22142 WRITE_BYTE_F(adr, res)
22143 POST_IO
22144 RET(16)
22145}
22146
22147// STCC
22148OPCODE(0x5FF8)
22149{
22150 u32 adr, res;
22151 u32 src, dst;
22152
22153 FETCH_SWORD(adr);
22154 if ((!flag_NotZ) || ((flag_N ^ flag_V) & 0x80))
22155 {
22156 res = 0xFF;
22157 PRE_IO
22158 WRITE_BYTE_F(adr, res)
22159 POST_IO
22160 RET(16)
22161 }
22162 res = 0;
22163 PRE_IO
22164 WRITE_BYTE_F(adr, res)
22165 POST_IO
22166 RET(16)
22167}
22168
22169// STCC
22170OPCODE(0x50F9)
22171{
22172 u32 adr, res;
22173 u32 src, dst;
22174
22175 FETCH_LONG(adr);
22176 res = 0xFF;
22177 PRE_IO
22178 WRITE_BYTE_F(adr, res)
22179 POST_IO
22180 RET(20)
22181}
22182
22183// STCC
22184OPCODE(0x51F9)
22185{
22186 u32 adr, res;
22187 u32 src, dst;
22188
22189 FETCH_LONG(adr);
22190 res = 0;
22191 PRE_IO
22192 WRITE_BYTE_F(adr, res)
22193 POST_IO
22194 RET(20)
22195}
22196
22197// STCC
22198OPCODE(0x52F9)
22199{
22200 u32 adr, res;
22201 u32 src, dst;
22202
22203 FETCH_LONG(adr);
22204 if (flag_NotZ && (!(flag_C & 0x100)))
22205 {
22206 res = 0xFF;
22207 PRE_IO
22208 WRITE_BYTE_F(adr, res)
22209 POST_IO
22210 RET(20)
22211 }
22212 res = 0;
22213 PRE_IO
22214 WRITE_BYTE_F(adr, res)
22215 POST_IO
22216 RET(20)
22217}
22218
22219// STCC
22220OPCODE(0x53F9)
22221{
22222 u32 adr, res;
22223 u32 src, dst;
22224
22225 FETCH_LONG(adr);
22226 if ((!flag_NotZ) || (flag_C & 0x100))
22227 {
22228 res = 0xFF;
22229 PRE_IO
22230 WRITE_BYTE_F(adr, res)
22231 POST_IO
22232 RET(20)
22233 }
22234 res = 0;
22235 PRE_IO
22236 WRITE_BYTE_F(adr, res)
22237 POST_IO
22238 RET(20)
22239}
22240
22241// STCC
22242OPCODE(0x54F9)
22243{
22244 u32 adr, res;
22245 u32 src, dst;
22246
22247 FETCH_LONG(adr);
22248 if (!(flag_C & 0x100))
22249 {
22250 res = 0xFF;
22251 PRE_IO
22252 WRITE_BYTE_F(adr, res)
22253 POST_IO
22254 RET(20)
22255 }
22256 res = 0;
22257 PRE_IO
22258 WRITE_BYTE_F(adr, res)
22259 POST_IO
22260 RET(20)
22261}
22262
22263// STCC
22264OPCODE(0x55F9)
22265{
22266 u32 adr, res;
22267 u32 src, dst;
22268
22269 FETCH_LONG(adr);
22270 if (flag_C & 0x100)
22271 {
22272 res = 0xFF;
22273 PRE_IO
22274 WRITE_BYTE_F(adr, res)
22275 POST_IO
22276 RET(20)
22277 }
22278 res = 0;
22279 PRE_IO
22280 WRITE_BYTE_F(adr, res)
22281 POST_IO
22282 RET(20)
22283}
22284
22285// STCC
22286OPCODE(0x56F9)
22287{
22288 u32 adr, res;
22289 u32 src, dst;
22290
22291 FETCH_LONG(adr);
22292 if (flag_NotZ)
22293 {
22294 res = 0xFF;
22295 PRE_IO
22296 WRITE_BYTE_F(adr, res)
22297 POST_IO
22298 RET(20)
22299 }
22300 res = 0;
22301 PRE_IO
22302 WRITE_BYTE_F(adr, res)
22303 POST_IO
22304 RET(20)
22305}
22306
22307// STCC
22308OPCODE(0x57F9)
22309{
22310 u32 adr, res;
22311 u32 src, dst;
22312
22313 FETCH_LONG(adr);
22314 if (!flag_NotZ)
22315 {
22316 res = 0xFF;
22317 PRE_IO
22318 WRITE_BYTE_F(adr, res)
22319 POST_IO
22320 RET(20)
22321 }
22322 res = 0;
22323 PRE_IO
22324 WRITE_BYTE_F(adr, res)
22325 POST_IO
22326 RET(20)
22327}
22328
22329// STCC
22330OPCODE(0x58F9)
22331{
22332 u32 adr, res;
22333 u32 src, dst;
22334
22335 FETCH_LONG(adr);
22336 if (!(flag_V & 0x80))
22337 {
22338 res = 0xFF;
22339 PRE_IO
22340 WRITE_BYTE_F(adr, res)
22341 POST_IO
22342 RET(20)
22343 }
22344 res = 0;
22345 PRE_IO
22346 WRITE_BYTE_F(adr, res)
22347 POST_IO
22348 RET(20)
22349}
22350
22351// STCC
22352OPCODE(0x59F9)
22353{
22354 u32 adr, res;
22355 u32 src, dst;
22356
22357 FETCH_LONG(adr);
22358 if (flag_V & 0x80)
22359 {
22360 res = 0xFF;
22361 PRE_IO
22362 WRITE_BYTE_F(adr, res)
22363 POST_IO
22364 RET(20)
22365 }
22366 res = 0;
22367 PRE_IO
22368 WRITE_BYTE_F(adr, res)
22369 POST_IO
22370 RET(20)
22371}
22372
22373// STCC
22374OPCODE(0x5AF9)
22375{
22376 u32 adr, res;
22377 u32 src, dst;
22378
22379 FETCH_LONG(adr);
22380 if (!(flag_N & 0x80))
22381 {
22382 res = 0xFF;
22383 PRE_IO
22384 WRITE_BYTE_F(adr, res)
22385 POST_IO
22386 RET(20)
22387 }
22388 res = 0;
22389 PRE_IO
22390 WRITE_BYTE_F(adr, res)
22391 POST_IO
22392 RET(20)
22393}
22394
22395// STCC
22396OPCODE(0x5BF9)
22397{
22398 u32 adr, res;
22399 u32 src, dst;
22400
22401 FETCH_LONG(adr);
22402 if (flag_N & 0x80)
22403 {
22404 res = 0xFF;
22405 PRE_IO
22406 WRITE_BYTE_F(adr, res)
22407 POST_IO
22408 RET(20)
22409 }
22410 res = 0;
22411 PRE_IO
22412 WRITE_BYTE_F(adr, res)
22413 POST_IO
22414 RET(20)
22415}
22416
22417// STCC
22418OPCODE(0x5CF9)
22419{
22420 u32 adr, res;
22421 u32 src, dst;
22422
22423 FETCH_LONG(adr);
22424 if (!((flag_N ^ flag_V) & 0x80))
22425 {
22426 res = 0xFF;
22427 PRE_IO
22428 WRITE_BYTE_F(adr, res)
22429 POST_IO
22430 RET(20)
22431 }
22432 res = 0;
22433 PRE_IO
22434 WRITE_BYTE_F(adr, res)
22435 POST_IO
22436 RET(20)
22437}
22438
22439// STCC
22440OPCODE(0x5DF9)
22441{
22442 u32 adr, res;
22443 u32 src, dst;
22444
22445 FETCH_LONG(adr);
22446 if ((flag_N ^ flag_V) & 0x80)
22447 {
22448 res = 0xFF;
22449 PRE_IO
22450 WRITE_BYTE_F(adr, res)
22451 POST_IO
22452 RET(20)
22453 }
22454 res = 0;
22455 PRE_IO
22456 WRITE_BYTE_F(adr, res)
22457 POST_IO
22458 RET(20)
22459}
22460
22461// STCC
22462OPCODE(0x5EF9)
22463{
22464 u32 adr, res;
22465 u32 src, dst;
22466
22467 FETCH_LONG(adr);
22468 if (flag_NotZ && (!((flag_N ^ flag_V) & 0x80)))
22469 {
22470 res = 0xFF;
22471 PRE_IO
22472 WRITE_BYTE_F(adr, res)
22473 POST_IO
22474 RET(20)
22475 }
22476 res = 0;
22477 PRE_IO
22478 WRITE_BYTE_F(adr, res)
22479 POST_IO
22480 RET(20)
22481}
22482
22483// STCC
22484OPCODE(0x5FF9)
22485{
22486 u32 adr, res;
22487 u32 src, dst;
22488
22489 FETCH_LONG(adr);
22490 if ((!flag_NotZ) || ((flag_N ^ flag_V) & 0x80))
22491 {
22492 res = 0xFF;
22493 PRE_IO
22494 WRITE_BYTE_F(adr, res)
22495 POST_IO
22496 RET(20)
22497 }
22498 res = 0;
22499 PRE_IO
22500 WRITE_BYTE_F(adr, res)
22501 POST_IO
22502 RET(20)
22503}
22504
22505// STCC
22506OPCODE(0x50DF)
22507{
22508 u32 adr, res;
22509 u32 src, dst;
22510
22511 adr = AREG(7);
22512 AREG(7) += 2;
22513 res = 0xFF;
22514 PRE_IO
22515 WRITE_BYTE_F(adr, res)
22516 POST_IO
22517 RET(12)
22518}
22519
22520// STCC
22521OPCODE(0x51DF)
22522{
22523 u32 adr, res;
22524 u32 src, dst;
22525
22526 adr = AREG(7);
22527 AREG(7) += 2;
22528 res = 0;
22529 PRE_IO
22530 WRITE_BYTE_F(adr, res)
22531 POST_IO
22532 RET(12)
22533}
22534
22535// STCC
22536OPCODE(0x52DF)
22537{
22538 u32 adr, res;
22539 u32 src, dst;
22540
22541 adr = AREG(7);
22542 AREG(7) += 2;
22543 if (flag_NotZ && (!(flag_C & 0x100)))
22544 {
22545 res = 0xFF;
22546 PRE_IO
22547 WRITE_BYTE_F(adr, res)
22548 POST_IO
22549 RET(12)
22550 }
22551 res = 0;
22552 PRE_IO
22553 WRITE_BYTE_F(adr, res)
22554 POST_IO
22555 RET(12)
22556}
22557
22558// STCC
22559OPCODE(0x53DF)
22560{
22561 u32 adr, res;
22562 u32 src, dst;
22563
22564 adr = AREG(7);
22565 AREG(7) += 2;
22566 if ((!flag_NotZ) || (flag_C & 0x100))
22567 {
22568 res = 0xFF;
22569 PRE_IO
22570 WRITE_BYTE_F(adr, res)
22571 POST_IO
22572 RET(12)
22573 }
22574 res = 0;
22575 PRE_IO
22576 WRITE_BYTE_F(adr, res)
22577 POST_IO
22578 RET(12)
22579}
22580
22581// STCC
22582OPCODE(0x54DF)
22583{
22584 u32 adr, res;
22585 u32 src, dst;
22586
22587 adr = AREG(7);
22588 AREG(7) += 2;
22589 if (!(flag_C & 0x100))
22590 {
22591 res = 0xFF;
22592 PRE_IO
22593 WRITE_BYTE_F(adr, res)
22594 POST_IO
22595 RET(12)
22596 }
22597 res = 0;
22598 PRE_IO
22599 WRITE_BYTE_F(adr, res)
22600 POST_IO
22601 RET(12)
22602}
22603
22604// STCC
22605OPCODE(0x55DF)
22606{
22607 u32 adr, res;
22608 u32 src, dst;
22609
22610 adr = AREG(7);
22611 AREG(7) += 2;
22612 if (flag_C & 0x100)
22613 {
22614 res = 0xFF;
22615 PRE_IO
22616 WRITE_BYTE_F(adr, res)
22617 POST_IO
22618 RET(12)
22619 }
22620 res = 0;
22621 PRE_IO
22622 WRITE_BYTE_F(adr, res)
22623 POST_IO
22624 RET(12)
22625}
22626
22627// STCC
22628OPCODE(0x56DF)
22629{
22630 u32 adr, res;
22631 u32 src, dst;
22632
22633 adr = AREG(7);
22634 AREG(7) += 2;
22635 if (flag_NotZ)
22636 {
22637 res = 0xFF;
22638 PRE_IO
22639 WRITE_BYTE_F(adr, res)
22640 POST_IO
22641 RET(12)
22642 }
22643 res = 0;
22644 PRE_IO
22645 WRITE_BYTE_F(adr, res)
22646 POST_IO
22647 RET(12)
22648}
22649
22650// STCC
22651OPCODE(0x57DF)
22652{
22653 u32 adr, res;
22654 u32 src, dst;
22655
22656 adr = AREG(7);
22657 AREG(7) += 2;
22658 if (!flag_NotZ)
22659 {
22660 res = 0xFF;
22661 PRE_IO
22662 WRITE_BYTE_F(adr, res)
22663 POST_IO
22664 RET(12)
22665 }
22666 res = 0;
22667 PRE_IO
22668 WRITE_BYTE_F(adr, res)
22669 POST_IO
22670 RET(12)
22671}
22672
22673// STCC
22674OPCODE(0x58DF)
22675{
22676 u32 adr, res;
22677 u32 src, dst;
22678
22679 adr = AREG(7);
22680 AREG(7) += 2;
22681 if (!(flag_V & 0x80))
22682 {
22683 res = 0xFF;
22684 PRE_IO
22685 WRITE_BYTE_F(adr, res)
22686 POST_IO
22687 RET(12)
22688 }
22689 res = 0;
22690 PRE_IO
22691 WRITE_BYTE_F(adr, res)
22692 POST_IO
22693 RET(12)
22694}
22695
22696// STCC
22697OPCODE(0x59DF)
22698{
22699 u32 adr, res;
22700 u32 src, dst;
22701
22702 adr = AREG(7);
22703 AREG(7) += 2;
22704 if (flag_V & 0x80)
22705 {
22706 res = 0xFF;
22707 PRE_IO
22708 WRITE_BYTE_F(adr, res)
22709 POST_IO
22710 RET(12)
22711 }
22712 res = 0;
22713 PRE_IO
22714 WRITE_BYTE_F(adr, res)
22715 POST_IO
22716 RET(12)
22717}
22718
22719// STCC
22720OPCODE(0x5ADF)
22721{
22722 u32 adr, res;
22723 u32 src, dst;
22724
22725 adr = AREG(7);
22726 AREG(7) += 2;
22727 if (!(flag_N & 0x80))
22728 {
22729 res = 0xFF;
22730 PRE_IO
22731 WRITE_BYTE_F(adr, res)
22732 POST_IO
22733 RET(12)
22734 }
22735 res = 0;
22736 PRE_IO
22737 WRITE_BYTE_F(adr, res)
22738 POST_IO
22739 RET(12)
22740}
22741
22742// STCC
22743OPCODE(0x5BDF)
22744{
22745 u32 adr, res;
22746 u32 src, dst;
22747
22748 adr = AREG(7);
22749 AREG(7) += 2;
22750 if (flag_N & 0x80)
22751 {
22752 res = 0xFF;
22753 PRE_IO
22754 WRITE_BYTE_F(adr, res)
22755 POST_IO
22756 RET(12)
22757 }
22758 res = 0;
22759 PRE_IO
22760 WRITE_BYTE_F(adr, res)
22761 POST_IO
22762 RET(12)
22763}
22764
22765// STCC
22766OPCODE(0x5CDF)
22767{
22768 u32 adr, res;
22769 u32 src, dst;
22770
22771 adr = AREG(7);
22772 AREG(7) += 2;
22773 if (!((flag_N ^ flag_V) & 0x80))
22774 {
22775 res = 0xFF;
22776 PRE_IO
22777 WRITE_BYTE_F(adr, res)
22778 POST_IO
22779 RET(12)
22780 }
22781 res = 0;
22782 PRE_IO
22783 WRITE_BYTE_F(adr, res)
22784 POST_IO
22785 RET(12)
22786}
22787
22788// STCC
22789OPCODE(0x5DDF)
22790{
22791 u32 adr, res;
22792 u32 src, dst;
22793
22794 adr = AREG(7);
22795 AREG(7) += 2;
22796 if ((flag_N ^ flag_V) & 0x80)
22797 {
22798 res = 0xFF;
22799 PRE_IO
22800 WRITE_BYTE_F(adr, res)
22801 POST_IO
22802 RET(12)
22803 }
22804 res = 0;
22805 PRE_IO
22806 WRITE_BYTE_F(adr, res)
22807 POST_IO
22808 RET(12)
22809}
22810
22811// STCC
22812OPCODE(0x5EDF)
22813{
22814 u32 adr, res;
22815 u32 src, dst;
22816
22817 adr = AREG(7);
22818 AREG(7) += 2;
22819 if (flag_NotZ && (!((flag_N ^ flag_V) & 0x80)))
22820 {
22821 res = 0xFF;
22822 PRE_IO
22823 WRITE_BYTE_F(adr, res)
22824 POST_IO
22825 RET(12)
22826 }
22827 res = 0;
22828 PRE_IO
22829 WRITE_BYTE_F(adr, res)
22830 POST_IO
22831 RET(12)
22832}
22833
22834// STCC
22835OPCODE(0x5FDF)
22836{
22837 u32 adr, res;
22838 u32 src, dst;
22839
22840 adr = AREG(7);
22841 AREG(7) += 2;
22842 if ((!flag_NotZ) || ((flag_N ^ flag_V) & 0x80))
22843 {
22844 res = 0xFF;
22845 PRE_IO
22846 WRITE_BYTE_F(adr, res)
22847 POST_IO
22848 RET(12)
22849 }
22850 res = 0;
22851 PRE_IO
22852 WRITE_BYTE_F(adr, res)
22853 POST_IO
22854 RET(12)
22855}
22856
22857// STCC
22858OPCODE(0x50E7)
22859{
22860 u32 adr, res;
22861 u32 src, dst;
22862
22863 adr = AREG(7) - 2;
22864 AREG(7) = adr;
22865 res = 0xFF;
22866 PRE_IO
22867 WRITE_BYTE_F(adr, res)
22868 POST_IO
22869 RET(14)
22870}
22871
22872// STCC
22873OPCODE(0x51E7)
22874{
22875 u32 adr, res;
22876 u32 src, dst;
22877
22878 adr = AREG(7) - 2;
22879 AREG(7) = adr;
22880 res = 0;
22881 PRE_IO
22882 WRITE_BYTE_F(adr, res)
22883 POST_IO
22884 RET(14)
22885}
22886
22887// STCC
22888OPCODE(0x52E7)
22889{
22890 u32 adr, res;
22891 u32 src, dst;
22892
22893 adr = AREG(7) - 2;
22894 AREG(7) = adr;
22895 if (flag_NotZ && (!(flag_C & 0x100)))
22896 {
22897 res = 0xFF;
22898 PRE_IO
22899 WRITE_BYTE_F(adr, res)
22900 POST_IO
22901 RET(14)
22902 }
22903 res = 0;
22904 PRE_IO
22905 WRITE_BYTE_F(adr, res)
22906 POST_IO
22907 RET(14)
22908}
22909
22910// STCC
22911OPCODE(0x53E7)
22912{
22913 u32 adr, res;
22914 u32 src, dst;
22915
22916 adr = AREG(7) - 2;
22917 AREG(7) = adr;
22918 if ((!flag_NotZ) || (flag_C & 0x100))
22919 {
22920 res = 0xFF;
22921 PRE_IO
22922 WRITE_BYTE_F(adr, res)
22923 POST_IO
22924 RET(14)
22925 }
22926 res = 0;
22927 PRE_IO
22928 WRITE_BYTE_F(adr, res)
22929 POST_IO
22930 RET(14)
22931}
22932
22933// STCC
22934OPCODE(0x54E7)
22935{
22936 u32 adr, res;
22937 u32 src, dst;
22938
22939 adr = AREG(7) - 2;
22940 AREG(7) = adr;
22941 if (!(flag_C & 0x100))
22942 {
22943 res = 0xFF;
22944 PRE_IO
22945 WRITE_BYTE_F(adr, res)
22946 POST_IO
22947 RET(14)
22948 }
22949 res = 0;
22950 PRE_IO
22951 WRITE_BYTE_F(adr, res)
22952 POST_IO
22953 RET(14)
22954}
22955
22956// STCC
22957OPCODE(0x55E7)
22958{
22959 u32 adr, res;
22960 u32 src, dst;
22961
22962 adr = AREG(7) - 2;
22963 AREG(7) = adr;
22964 if (flag_C & 0x100)
22965 {
22966 res = 0xFF;
22967 PRE_IO
22968 WRITE_BYTE_F(adr, res)
22969 POST_IO
22970 RET(14)
22971 }
22972 res = 0;
22973 PRE_IO
22974 WRITE_BYTE_F(adr, res)
22975 POST_IO
22976 RET(14)
22977}
22978
22979// STCC
22980OPCODE(0x56E7)
22981{
22982 u32 adr, res;
22983 u32 src, dst;
22984
22985 adr = AREG(7) - 2;
22986 AREG(7) = adr;
22987 if (flag_NotZ)
22988 {
22989 res = 0xFF;
22990 PRE_IO
22991 WRITE_BYTE_F(adr, res)
22992 POST_IO
22993 RET(14)
22994 }
22995 res = 0;
22996 PRE_IO
22997 WRITE_BYTE_F(adr, res)
22998 POST_IO
22999 RET(14)
23000}
23001
23002// STCC
23003OPCODE(0x57E7)
23004{
23005 u32 adr, res;
23006 u32 src, dst;
23007
23008 adr = AREG(7) - 2;
23009 AREG(7) = adr;
23010 if (!flag_NotZ)
23011 {
23012 res = 0xFF;
23013 PRE_IO
23014 WRITE_BYTE_F(adr, res)
23015 POST_IO
23016 RET(14)
23017 }
23018 res = 0;
23019 PRE_IO
23020 WRITE_BYTE_F(adr, res)
23021 POST_IO
23022 RET(14)
23023}
23024
23025// STCC
23026OPCODE(0x58E7)
23027{
23028 u32 adr, res;
23029 u32 src, dst;
23030
23031 adr = AREG(7) - 2;
23032 AREG(7) = adr;
23033 if (!(flag_V & 0x80))
23034 {
23035 res = 0xFF;
23036 PRE_IO
23037 WRITE_BYTE_F(adr, res)
23038 POST_IO
23039 RET(14)
23040 }
23041 res = 0;
23042 PRE_IO
23043 WRITE_BYTE_F(adr, res)
23044 POST_IO
23045 RET(14)
23046}
23047
23048// STCC
23049OPCODE(0x59E7)
23050{
23051 u32 adr, res;
23052 u32 src, dst;
23053
23054 adr = AREG(7) - 2;
23055 AREG(7) = adr;
23056 if (flag_V & 0x80)
23057 {
23058 res = 0xFF;
23059 PRE_IO
23060 WRITE_BYTE_F(adr, res)
23061 POST_IO
23062 RET(14)
23063 }
23064 res = 0;
23065 PRE_IO
23066 WRITE_BYTE_F(adr, res)
23067 POST_IO
23068 RET(14)
23069}
23070
23071// STCC
23072OPCODE(0x5AE7)
23073{
23074 u32 adr, res;
23075 u32 src, dst;
23076
23077 adr = AREG(7) - 2;
23078 AREG(7) = adr;
23079 if (!(flag_N & 0x80))
23080 {
23081 res = 0xFF;
23082 PRE_IO
23083 WRITE_BYTE_F(adr, res)
23084 POST_IO
23085 RET(14)
23086 }
23087 res = 0;
23088 PRE_IO
23089 WRITE_BYTE_F(adr, res)
23090 POST_IO
23091 RET(14)
23092}
23093
23094// STCC
23095OPCODE(0x5BE7)
23096{
23097 u32 adr, res;
23098 u32 src, dst;
23099
23100 adr = AREG(7) - 2;
23101 AREG(7) = adr;
23102 if (flag_N & 0x80)
23103 {
23104 res = 0xFF;
23105 PRE_IO
23106 WRITE_BYTE_F(adr, res)
23107 POST_IO
23108 RET(14)
23109 }
23110 res = 0;
23111 PRE_IO
23112 WRITE_BYTE_F(adr, res)
23113 POST_IO
23114 RET(14)
23115}
23116
23117// STCC
23118OPCODE(0x5CE7)
23119{
23120 u32 adr, res;
23121 u32 src, dst;
23122
23123 adr = AREG(7) - 2;
23124 AREG(7) = adr;
23125 if (!((flag_N ^ flag_V) & 0x80))
23126 {
23127 res = 0xFF;
23128 PRE_IO
23129 WRITE_BYTE_F(adr, res)
23130 POST_IO
23131 RET(14)
23132 }
23133 res = 0;
23134 PRE_IO
23135 WRITE_BYTE_F(adr, res)
23136 POST_IO
23137 RET(14)
23138}
23139
23140// STCC
23141OPCODE(0x5DE7)
23142{
23143 u32 adr, res;
23144 u32 src, dst;
23145
23146 adr = AREG(7) - 2;
23147 AREG(7) = adr;
23148 if ((flag_N ^ flag_V) & 0x80)
23149 {
23150 res = 0xFF;
23151 PRE_IO
23152 WRITE_BYTE_F(adr, res)
23153 POST_IO
23154 RET(14)
23155 }
23156 res = 0;
23157 PRE_IO
23158 WRITE_BYTE_F(adr, res)
23159 POST_IO
23160 RET(14)
23161}
23162
23163// STCC
23164OPCODE(0x5EE7)
23165{
23166 u32 adr, res;
23167 u32 src, dst;
23168
23169 adr = AREG(7) - 2;
23170 AREG(7) = adr;
23171 if (flag_NotZ && (!((flag_N ^ flag_V) & 0x80)))
23172 {
23173 res = 0xFF;
23174 PRE_IO
23175 WRITE_BYTE_F(adr, res)
23176 POST_IO
23177 RET(14)
23178 }
23179 res = 0;
23180 PRE_IO
23181 WRITE_BYTE_F(adr, res)
23182 POST_IO
23183 RET(14)
23184}
23185
23186// STCC
23187OPCODE(0x5FE7)
23188{
23189 u32 adr, res;
23190 u32 src, dst;
23191
23192 adr = AREG(7) - 2;
23193 AREG(7) = adr;
23194 if ((!flag_NotZ) || ((flag_N ^ flag_V) & 0x80))
23195 {
23196 res = 0xFF;
23197 PRE_IO
23198 WRITE_BYTE_F(adr, res)
23199 POST_IO
23200 RET(14)
23201 }
23202 res = 0;
23203 PRE_IO
23204 WRITE_BYTE_F(adr, res)
23205 POST_IO
23206 RET(14)
23207}
23208
23209// DBCC
23210OPCODE(0x50C8)
23211{
23212 u32 adr, res;
23213 u32 src, dst;
23214
23215 PC++;
23216RET(12)
23217}
23218
23219// DBCC
23220OPCODE(0x51C8)
23221{
23222 u32 adr, res;
23223 u32 src, dst;
23224
23225 res = DREGu16((Opcode >> 0) & 7);
23226 res--;
23227 DREGu16((Opcode >> 0) & 7) = res;
23228 if ((s32)res != -1)
23229 {
23230 u32 newPC;
23231
23232 newPC = (u32)(PC) - BasePC;
23233 newPC += GET_SWORD;
23234 SET_PC(newPC);
23235 CHECK_BRANCH_EXCEPTION(newPC)
23236 RET(10)
23237 }
23238 PC++;
23239RET(14)
23240}
23241
23242// DBCC
23243OPCODE(0x52C8)
23244{
23245 u32 adr, res;
23246 u32 src, dst;
23247
23248 if ((!flag_NotZ) || (flag_C & 0x100))
23249 {
23250 res = DREGu16((Opcode >> 0) & 7);
23251 res--;
23252 DREGu16((Opcode >> 0) & 7) = res;
23253 if ((s32)res != -1)
23254 {
23255 u32 newPC;
23256
23257 newPC = (u32)(PC) - BasePC;
23258 newPC += GET_SWORD;
23259 SET_PC(newPC);
23260 CHECK_BRANCH_EXCEPTION(newPC)
23261 RET(10)
23262 }
23263 }
23264 else
23265 {
23266 PC++;
23267 RET(12)
23268 }
23269 PC++;
23270RET(14)
23271}
23272
23273// DBCC
23274OPCODE(0x53C8)
23275{
23276 u32 adr, res;
23277 u32 src, dst;
23278
23279 if (flag_NotZ && (!(flag_C & 0x100)))
23280 {
23281 res = DREGu16((Opcode >> 0) & 7);
23282 res--;
23283 DREGu16((Opcode >> 0) & 7) = res;
23284 if ((s32)res != -1)
23285 {
23286 u32 newPC;
23287
23288 newPC = (u32)(PC) - BasePC;
23289 newPC += GET_SWORD;
23290 SET_PC(newPC);
23291 CHECK_BRANCH_EXCEPTION(newPC)
23292 RET(10)
23293 }
23294 }
23295 else
23296 {
23297 PC++;
23298 RET(12)
23299 }
23300 PC++;
23301RET(14)
23302}
23303
23304// DBCC
23305OPCODE(0x54C8)
23306{
23307 u32 adr, res;
23308 u32 src, dst;
23309
23310 if (flag_C & 0x100)
23311 {
23312 res = DREGu16((Opcode >> 0) & 7);
23313 res--;
23314 DREGu16((Opcode >> 0) & 7) = res;
23315 if ((s32)res != -1)
23316 {
23317 u32 newPC;
23318
23319 newPC = (u32)(PC) - BasePC;
23320 newPC += GET_SWORD;
23321 SET_PC(newPC);
23322 CHECK_BRANCH_EXCEPTION(newPC)
23323 RET(10)
23324 }
23325 }
23326 else
23327 {
23328 PC++;
23329 RET(12)
23330 }
23331 PC++;
23332RET(14)
23333}
23334
23335// DBCC
23336OPCODE(0x55C8)
23337{
23338 u32 adr, res;
23339 u32 src, dst;
23340
23341 if (!(flag_C & 0x100))
23342 {
23343 res = DREGu16((Opcode >> 0) & 7);
23344 res--;
23345 DREGu16((Opcode >> 0) & 7) = res;
23346 if ((s32)res != -1)
23347 {
23348 u32 newPC;
23349
23350 newPC = (u32)(PC) - BasePC;
23351 newPC += GET_SWORD;
23352 SET_PC(newPC);
23353 CHECK_BRANCH_EXCEPTION(newPC)
23354 RET(10)
23355 }
23356 }
23357 else
23358 {
23359 PC++;
23360 RET(12)
23361 }
23362 PC++;
23363RET(14)
23364}
23365
23366// DBCC
23367OPCODE(0x56C8)
23368{
23369 u32 adr, res;
23370 u32 src, dst;
23371
23372 if (!flag_NotZ)
23373 {
23374 res = DREGu16((Opcode >> 0) & 7);
23375 res--;
23376 DREGu16((Opcode >> 0) & 7) = res;
23377 if ((s32)res != -1)
23378 {
23379 u32 newPC;
23380
23381 newPC = (u32)(PC) - BasePC;
23382 newPC += GET_SWORD;
23383 SET_PC(newPC);
23384 CHECK_BRANCH_EXCEPTION(newPC)
23385 RET(10)
23386 }
23387 }
23388 else
23389 {
23390 PC++;
23391 RET(12)
23392 }
23393 PC++;
23394RET(14)
23395}
23396
23397// DBCC
23398OPCODE(0x57C8)
23399{
23400 u32 adr, res;
23401 u32 src, dst;
23402
23403 if (flag_NotZ)
23404 {
23405 res = DREGu16((Opcode >> 0) & 7);
23406 res--;
23407 DREGu16((Opcode >> 0) & 7) = res;
23408 if ((s32)res != -1)
23409 {
23410 u32 newPC;
23411
23412 newPC = (u32)(PC) - BasePC;
23413 newPC += GET_SWORD;
23414 SET_PC(newPC);
23415 CHECK_BRANCH_EXCEPTION(newPC)
23416 RET(10)
23417 }
23418 }
23419 else
23420 {
23421 PC++;
23422 RET(12)
23423 }
23424 PC++;
23425RET(14)
23426}
23427
23428// DBCC
23429OPCODE(0x58C8)
23430{
23431 u32 adr, res;
23432 u32 src, dst;
23433
23434 if (flag_V & 0x80)
23435 {
23436 res = DREGu16((Opcode >> 0) & 7);
23437 res--;
23438 DREGu16((Opcode >> 0) & 7) = res;
23439 if ((s32)res != -1)
23440 {
23441 u32 newPC;
23442
23443 newPC = (u32)(PC) - BasePC;
23444 newPC += GET_SWORD;
23445 SET_PC(newPC);
23446 CHECK_BRANCH_EXCEPTION(newPC)
23447 RET(10)
23448 }
23449 }
23450 else
23451 {
23452 PC++;
23453 RET(12)
23454 }
23455 PC++;
23456RET(14)
23457}
23458
23459// DBCC
23460OPCODE(0x59C8)
23461{
23462 u32 adr, res;
23463 u32 src, dst;
23464
23465 if (!(flag_V & 0x80))
23466 {
23467 res = DREGu16((Opcode >> 0) & 7);
23468 res--;
23469 DREGu16((Opcode >> 0) & 7) = res;
23470 if ((s32)res != -1)
23471 {
23472 u32 newPC;
23473
23474 newPC = (u32)(PC) - BasePC;
23475 newPC += GET_SWORD;
23476 SET_PC(newPC);
23477 CHECK_BRANCH_EXCEPTION(newPC)
23478 RET(10)
23479 }
23480 }
23481 else
23482 {
23483 PC++;
23484 RET(12)
23485 }
23486 PC++;
23487RET(14)
23488}
23489
23490// DBCC
23491OPCODE(0x5AC8)
23492{
23493 u32 adr, res;
23494 u32 src, dst;
23495
23496 if (flag_N & 0x80)
23497 {
23498 res = DREGu16((Opcode >> 0) & 7);
23499 res--;
23500 DREGu16((Opcode >> 0) & 7) = res;
23501 if ((s32)res != -1)
23502 {
23503 u32 newPC;
23504
23505 newPC = (u32)(PC) - BasePC;
23506 newPC += GET_SWORD;
23507 SET_PC(newPC);
23508 CHECK_BRANCH_EXCEPTION(newPC)
23509 RET(10)
23510 }
23511 }
23512 else
23513 {
23514 PC++;
23515 RET(12)
23516 }
23517 PC++;
23518RET(14)
23519}
23520
23521// DBCC
23522OPCODE(0x5BC8)
23523{
23524 u32 adr, res;
23525 u32 src, dst;
23526
23527 if (!(flag_N & 0x80))
23528 {
23529 res = DREGu16((Opcode >> 0) & 7);
23530 res--;
23531 DREGu16((Opcode >> 0) & 7) = res;
23532 if ((s32)res != -1)
23533 {
23534 u32 newPC;
23535
23536 newPC = (u32)(PC) - BasePC;
23537 newPC += GET_SWORD;
23538 SET_PC(newPC);
23539 CHECK_BRANCH_EXCEPTION(newPC)
23540 RET(10)
23541 }
23542 }
23543 else
23544 {
23545 PC++;
23546 RET(12)
23547 }
23548 PC++;
23549RET(14)
23550}
23551
23552// DBCC
23553OPCODE(0x5CC8)
23554{
23555 u32 adr, res;
23556 u32 src, dst;
23557
23558 if ((flag_N ^ flag_V) & 0x80)
23559 {
23560 res = DREGu16((Opcode >> 0) & 7);
23561 res--;
23562 DREGu16((Opcode >> 0) & 7) = res;
23563 if ((s32)res != -1)
23564 {
23565 u32 newPC;
23566
23567 newPC = (u32)(PC) - BasePC;
23568 newPC += GET_SWORD;
23569 SET_PC(newPC);
23570 CHECK_BRANCH_EXCEPTION(newPC)
23571 RET(10)
23572 }
23573 }
23574 else
23575 {
23576 PC++;
23577 RET(12)
23578 }
23579 PC++;
23580RET(14)
23581}
23582
23583// DBCC
23584OPCODE(0x5DC8)
23585{
23586 u32 adr, res;
23587 u32 src, dst;
23588
23589 if (!((flag_N ^ flag_V) & 0x80))
23590 {
23591 res = DREGu16((Opcode >> 0) & 7);
23592 res--;
23593 DREGu16((Opcode >> 0) & 7) = res;
23594 if ((s32)res != -1)
23595 {
23596 u32 newPC;
23597
23598 newPC = (u32)(PC) - BasePC;
23599 newPC += GET_SWORD;
23600 SET_PC(newPC);
23601 CHECK_BRANCH_EXCEPTION(newPC)
23602 RET(10)
23603 }
23604 }
23605 else
23606 {
23607 PC++;
23608 RET(12)
23609 }
23610 PC++;
23611RET(14)
23612}
23613
23614// DBCC
23615OPCODE(0x5EC8)
23616{
23617 u32 adr, res;
23618 u32 src, dst;
23619
23620 if ((!flag_NotZ) || ((flag_N ^ flag_V) & 0x80))
23621 {
23622 res = DREGu16((Opcode >> 0) & 7);
23623 res--;
23624 DREGu16((Opcode >> 0) & 7) = res;
23625 if ((s32)res != -1)
23626 {
23627 u32 newPC;
23628
23629 newPC = (u32)(PC) - BasePC;
23630 newPC += GET_SWORD;
23631 SET_PC(newPC);
23632 CHECK_BRANCH_EXCEPTION(newPC)
23633 RET(10)
23634 }
23635 }
23636 else
23637 {
23638 PC++;
23639 RET(12)
23640 }
23641 PC++;
23642RET(14)
23643}
23644
23645// DBCC
23646OPCODE(0x5FC8)
23647{
23648 u32 adr, res;
23649 u32 src, dst;
23650
23651 if (flag_NotZ && (!((flag_N ^ flag_V) & 0x80)))
23652 {
23653 res = DREGu16((Opcode >> 0) & 7);
23654 res--;
23655 DREGu16((Opcode >> 0) & 7) = res;
23656 if ((s32)res != -1)
23657 {
23658 u32 newPC;
23659
23660 newPC = (u32)(PC) - BasePC;
23661 newPC += GET_SWORD;
23662 SET_PC(newPC);
23663 CHECK_BRANCH_EXCEPTION(newPC)
23664 RET(10)
23665 }
23666 }
23667 else
23668 {
23669 PC++;
23670 RET(12)
23671 }
23672 PC++;
23673RET(14)
23674}
23675
23676// ADDQ
23677OPCODE(0x5000)
23678{
23679 u32 adr, res;
23680 u32 src, dst;
23681
23682 src = (((Opcode >> 9) - 1) & 7) + 1;
23683 dst = DREGu8((Opcode >> 0) & 7);
23684 res = dst + src;
23685 flag_N = flag_X = flag_C = res;
23686 flag_V = (src ^ res) & (dst ^ res);
23687 flag_NotZ = res & 0xFF;
23688 DREGu8((Opcode >> 0) & 7) = res;
23689RET(4)
23690}
23691
23692// ADDQ
23693OPCODE(0x5010)
23694{
23695 u32 adr, res;
23696 u32 src, dst;
23697
23698 src = (((Opcode >> 9) - 1) & 7) + 1;
23699 adr = AREG((Opcode >> 0) & 7);
23700 PRE_IO
23701 READ_BYTE_F(adr, dst)
23702 res = dst + src;
23703 flag_N = flag_X = flag_C = res;
23704 flag_V = (src ^ res) & (dst ^ res);
23705 flag_NotZ = res & 0xFF;
23706 WRITE_BYTE_F(adr, res)
23707 POST_IO
23708RET(12)
23709}
23710
23711// ADDQ
23712OPCODE(0x5018)
23713{
23714 u32 adr, res;
23715 u32 src, dst;
23716
23717 src = (((Opcode >> 9) - 1) & 7) + 1;
23718 adr = AREG((Opcode >> 0) & 7);
23719 AREG((Opcode >> 0) & 7) += 1;
23720 PRE_IO
23721 READ_BYTE_F(adr, dst)
23722 res = dst + src;
23723 flag_N = flag_X = flag_C = res;
23724 flag_V = (src ^ res) & (dst ^ res);
23725 flag_NotZ = res & 0xFF;
23726 WRITE_BYTE_F(adr, res)
23727 POST_IO
23728RET(12)
23729}
23730
23731// ADDQ
23732OPCODE(0x5020)
23733{
23734 u32 adr, res;
23735 u32 src, dst;
23736
23737 src = (((Opcode >> 9) - 1) & 7) + 1;
23738 adr = AREG((Opcode >> 0) & 7) - 1;
23739 AREG((Opcode >> 0) & 7) = adr;
23740 PRE_IO
23741 READ_BYTE_F(adr, dst)
23742 res = dst + src;
23743 flag_N = flag_X = flag_C = res;
23744 flag_V = (src ^ res) & (dst ^ res);
23745 flag_NotZ = res & 0xFF;
23746 WRITE_BYTE_F(adr, res)
23747 POST_IO
23748RET(14)
23749}
23750
23751// ADDQ
23752OPCODE(0x5028)
23753{
23754 u32 adr, res;
23755 u32 src, dst;
23756
23757 src = (((Opcode >> 9) - 1) & 7) + 1;
23758 FETCH_SWORD(adr);
23759 adr += AREG((Opcode >> 0) & 7);
23760 PRE_IO
23761 READ_BYTE_F(adr, dst)
23762 res = dst + src;
23763 flag_N = flag_X = flag_C = res;
23764 flag_V = (src ^ res) & (dst ^ res);
23765 flag_NotZ = res & 0xFF;
23766 WRITE_BYTE_F(adr, res)
23767 POST_IO
23768RET(16)
23769}
23770
23771// ADDQ
23772OPCODE(0x5030)
23773{
23774 u32 adr, res;
23775 u32 src, dst;
23776
23777 src = (((Opcode >> 9) - 1) & 7) + 1;
23778 adr = AREG((Opcode >> 0) & 7);
23779 DECODE_EXT_WORD
23780 PRE_IO
23781 READ_BYTE_F(adr, dst)
23782 res = dst + src;
23783 flag_N = flag_X = flag_C = res;
23784 flag_V = (src ^ res) & (dst ^ res);
23785 flag_NotZ = res & 0xFF;
23786 WRITE_BYTE_F(adr, res)
23787 POST_IO
23788RET(18)
23789}
23790
23791// ADDQ
23792OPCODE(0x5038)
23793{
23794 u32 adr, res;
23795 u32 src, dst;
23796
23797 src = (((Opcode >> 9) - 1) & 7) + 1;
23798 FETCH_SWORD(adr);
23799 PRE_IO
23800 READ_BYTE_F(adr, dst)
23801 res = dst + src;
23802 flag_N = flag_X = flag_C = res;
23803 flag_V = (src ^ res) & (dst ^ res);
23804 flag_NotZ = res & 0xFF;
23805 WRITE_BYTE_F(adr, res)
23806 POST_IO
23807RET(16)
23808}
23809
23810// ADDQ
23811OPCODE(0x5039)
23812{
23813 u32 adr, res;
23814 u32 src, dst;
23815
23816 src = (((Opcode >> 9) - 1) & 7) + 1;
23817 FETCH_LONG(adr);
23818 PRE_IO
23819 READ_BYTE_F(adr, dst)
23820 res = dst + src;
23821 flag_N = flag_X = flag_C = res;
23822 flag_V = (src ^ res) & (dst ^ res);
23823 flag_NotZ = res & 0xFF;
23824 WRITE_BYTE_F(adr, res)
23825 POST_IO
23826RET(20)
23827}
23828
23829// ADDQ
23830OPCODE(0x501F)
23831{
23832 u32 adr, res;
23833 u32 src, dst;
23834
23835 src = (((Opcode >> 9) - 1) & 7) + 1;
23836 adr = AREG(7);
23837 AREG(7) += 2;
23838 PRE_IO
23839 READ_BYTE_F(adr, dst)
23840 res = dst + src;
23841 flag_N = flag_X = flag_C = res;
23842 flag_V = (src ^ res) & (dst ^ res);
23843 flag_NotZ = res & 0xFF;
23844 WRITE_BYTE_F(adr, res)
23845 POST_IO
23846RET(12)
23847}
23848
23849// ADDQ
23850OPCODE(0x5027)
23851{
23852 u32 adr, res;
23853 u32 src, dst;
23854
23855 src = (((Opcode >> 9) - 1) & 7) + 1;
23856 adr = AREG(7) - 2;
23857 AREG(7) = adr;
23858 PRE_IO
23859 READ_BYTE_F(adr, dst)
23860 res = dst + src;
23861 flag_N = flag_X = flag_C = res;
23862 flag_V = (src ^ res) & (dst ^ res);
23863 flag_NotZ = res & 0xFF;
23864 WRITE_BYTE_F(adr, res)
23865 POST_IO
23866RET(14)
23867}
23868
23869// ADDQ
23870OPCODE(0x5040)
23871{
23872 u32 adr, res;
23873 u32 src, dst;
23874
23875 src = (((Opcode >> 9) - 1) & 7) + 1;
23876 dst = DREGu16((Opcode >> 0) & 7);
23877 res = dst + src;
23878 flag_V = ((src ^ res) & (dst ^ res)) >> 8;
23879 flag_N = flag_X = flag_C = res >> 8;
23880 flag_NotZ = res & 0xFFFF;
23881 DREGu16((Opcode >> 0) & 7) = res;
23882RET(4)
23883}
23884
23885// ADDQ
23886OPCODE(0x5048)
23887{
23888 u32 adr, res;
23889 u32 src, dst;
23890
23891 src = (((Opcode >> 9) - 1) & 7) + 1;
23892 dst = AREGu32((Opcode >> 0) & 7);
23893 res = dst + src;
23894 AREG((Opcode >> 0) & 7) = res;
23895#ifdef USE_CYCLONE_TIMING_ // breaks Project-X
23896RET(4)
23897#else
23898RET(8)
23899#endif
23900}
23901
23902// ADDQ
23903OPCODE(0x5050)
23904{
23905 u32 adr, res;
23906 u32 src, dst;
23907
23908 src = (((Opcode >> 9) - 1) & 7) + 1;
23909 adr = AREG((Opcode >> 0) & 7);
23910 PRE_IO
23911 READ_WORD_F(adr, dst)
23912 res = dst + src;
23913 flag_V = ((src ^ res) & (dst ^ res)) >> 8;
23914 flag_N = flag_X = flag_C = res >> 8;
23915 flag_NotZ = res & 0xFFFF;
23916 WRITE_WORD_F(adr, res)
23917 POST_IO
23918RET(12)
23919}
23920
23921// ADDQ
23922OPCODE(0x5058)
23923{
23924 u32 adr, res;
23925 u32 src, dst;
23926
23927 src = (((Opcode >> 9) - 1) & 7) + 1;
23928 adr = AREG((Opcode >> 0) & 7);
23929 AREG((Opcode >> 0) & 7) += 2;
23930 PRE_IO
23931 READ_WORD_F(adr, dst)
23932 res = dst + src;
23933 flag_V = ((src ^ res) & (dst ^ res)) >> 8;
23934 flag_N = flag_X = flag_C = res >> 8;
23935 flag_NotZ = res & 0xFFFF;
23936 WRITE_WORD_F(adr, res)
23937 POST_IO
23938RET(12)
23939}
23940
23941// ADDQ
23942OPCODE(0x5060)
23943{
23944 u32 adr, res;
23945 u32 src, dst;
23946
23947 src = (((Opcode >> 9) - 1) & 7) + 1;
23948 adr = AREG((Opcode >> 0) & 7) - 2;
23949 AREG((Opcode >> 0) & 7) = adr;
23950 PRE_IO
23951 READ_WORD_F(adr, dst)
23952 res = dst + src;
23953 flag_V = ((src ^ res) & (dst ^ res)) >> 8;
23954 flag_N = flag_X = flag_C = res >> 8;
23955 flag_NotZ = res & 0xFFFF;
23956 WRITE_WORD_F(adr, res)
23957 POST_IO
23958RET(14)
23959}
23960
23961// ADDQ
23962OPCODE(0x5068)
23963{
23964 u32 adr, res;
23965 u32 src, dst;
23966
23967 src = (((Opcode >> 9) - 1) & 7) + 1;
23968 FETCH_SWORD(adr);
23969 adr += AREG((Opcode >> 0) & 7);
23970 PRE_IO
23971 READ_WORD_F(adr, dst)
23972 res = dst + src;
23973 flag_V = ((src ^ res) & (dst ^ res)) >> 8;
23974 flag_N = flag_X = flag_C = res >> 8;
23975 flag_NotZ = res & 0xFFFF;
23976 WRITE_WORD_F(adr, res)
23977 POST_IO
23978RET(16)
23979}
23980
23981// ADDQ
23982OPCODE(0x5070)
23983{
23984 u32 adr, res;
23985 u32 src, dst;
23986
23987 src = (((Opcode >> 9) - 1) & 7) + 1;
23988 adr = AREG((Opcode >> 0) & 7);
23989 DECODE_EXT_WORD
23990 PRE_IO
23991 READ_WORD_F(adr, dst)
23992 res = dst + src;
23993 flag_V = ((src ^ res) & (dst ^ res)) >> 8;
23994 flag_N = flag_X = flag_C = res >> 8;
23995 flag_NotZ = res & 0xFFFF;
23996 WRITE_WORD_F(adr, res)
23997 POST_IO
23998RET(18)
23999}
24000
24001// ADDQ
24002OPCODE(0x5078)
24003{
24004 u32 adr, res;
24005 u32 src, dst;
24006
24007 src = (((Opcode >> 9) - 1) & 7) + 1;
24008 FETCH_SWORD(adr);
24009 PRE_IO
24010 READ_WORD_F(adr, dst)
24011 res = dst + src;
24012 flag_V = ((src ^ res) & (dst ^ res)) >> 8;
24013 flag_N = flag_X = flag_C = res >> 8;
24014 flag_NotZ = res & 0xFFFF;
24015 WRITE_WORD_F(adr, res)
24016 POST_IO
24017RET(16)
24018}
24019
24020// ADDQ
24021OPCODE(0x5079)
24022{
24023 u32 adr, res;
24024 u32 src, dst;
24025
24026 src = (((Opcode >> 9) - 1) & 7) + 1;
24027 FETCH_LONG(adr);
24028 PRE_IO
24029 READ_WORD_F(adr, dst)
24030 res = dst + src;
24031 flag_V = ((src ^ res) & (dst ^ res)) >> 8;
24032 flag_N = flag_X = flag_C = res >> 8;
24033 flag_NotZ = res & 0xFFFF;
24034 WRITE_WORD_F(adr, res)
24035 POST_IO
24036RET(20)
24037}
24038
24039// ADDQ
24040OPCODE(0x505F)
24041{
24042 u32 adr, res;
24043 u32 src, dst;
24044
24045 src = (((Opcode >> 9) - 1) & 7) + 1;
24046 adr = AREG(7);
24047 AREG(7) += 2;
24048 PRE_IO
24049 READ_WORD_F(adr, dst)
24050 res = dst + src;
24051 flag_V = ((src ^ res) & (dst ^ res)) >> 8;
24052 flag_N = flag_X = flag_C = res >> 8;
24053 flag_NotZ = res & 0xFFFF;
24054 WRITE_WORD_F(adr, res)
24055 POST_IO
24056RET(12)
24057}
24058
24059// ADDQ
24060OPCODE(0x5067)
24061{
24062 u32 adr, res;
24063 u32 src, dst;
24064
24065 src = (((Opcode >> 9) - 1) & 7) + 1;
24066 adr = AREG(7) - 2;
24067 AREG(7) = adr;
24068 PRE_IO
24069 READ_WORD_F(adr, dst)
24070 res = dst + src;
24071 flag_V = ((src ^ res) & (dst ^ res)) >> 8;
24072 flag_N = flag_X = flag_C = res >> 8;
24073 flag_NotZ = res & 0xFFFF;
24074 WRITE_WORD_F(adr, res)
24075 POST_IO
24076RET(14)
24077}
24078
24079// ADDQ
24080OPCODE(0x5080)
24081{
24082 u32 adr, res;
24083 u32 src, dst;
24084
24085 src = (((Opcode >> 9) - 1) & 7) + 1;
24086 dst = DREGu32((Opcode >> 0) & 7);
24087 res = dst + src;
24088 flag_NotZ = res;
24089 flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
24090 flag_V = ((src ^ res) & (dst ^ res)) >> 24;
24091 flag_N = res >> 24;
24092 DREGu32((Opcode >> 0) & 7) = res;
24093RET(8)
24094}
24095
24096// ADDQ
24097OPCODE(0x5088)
24098{
24099 u32 adr, res;
24100 u32 src, dst;
24101
24102 src = (((Opcode >> 9) - 1) & 7) + 1;
24103 dst = AREGu32((Opcode >> 0) & 7);
24104 res = dst + src;
24105 AREG((Opcode >> 0) & 7) = res;
24106RET(8)
24107}
24108
24109// ADDQ
24110OPCODE(0x5090)
24111{
24112 u32 adr, res;
24113 u32 src, dst;
24114
24115 src = (((Opcode >> 9) - 1) & 7) + 1;
24116 adr = AREG((Opcode >> 0) & 7);
24117 PRE_IO
24118 READ_LONG_F(adr, dst)
24119 res = dst + src;
24120 flag_NotZ = res;
24121 flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
24122 flag_V = ((src ^ res) & (dst ^ res)) >> 24;
24123 flag_N = res >> 24;
24124 WRITE_LONG_F(adr, res)
24125 POST_IO
24126RET(20)
24127}
24128
24129// ADDQ
24130OPCODE(0x5098)
24131{
24132 u32 adr, res;
24133 u32 src, dst;
24134
24135 src = (((Opcode >> 9) - 1) & 7) + 1;
24136 adr = AREG((Opcode >> 0) & 7);
24137 AREG((Opcode >> 0) & 7) += 4;
24138 PRE_IO
24139 READ_LONG_F(adr, dst)
24140 res = dst + src;
24141 flag_NotZ = res;
24142 flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
24143 flag_V = ((src ^ res) & (dst ^ res)) >> 24;
24144 flag_N = res >> 24;
24145 WRITE_LONG_F(adr, res)
24146 POST_IO
24147RET(20)
24148}
24149
24150// ADDQ
24151OPCODE(0x50A0)
24152{
24153 u32 adr, res;
24154 u32 src, dst;
24155
24156 src = (((Opcode >> 9) - 1) & 7) + 1;
24157 adr = AREG((Opcode >> 0) & 7) - 4;
24158 AREG((Opcode >> 0) & 7) = adr;
24159 PRE_IO
24160 READ_LONG_F(adr, dst)
24161 res = dst + src;
24162 flag_NotZ = res;
24163 flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
24164 flag_V = ((src ^ res) & (dst ^ res)) >> 24;
24165 flag_N = res >> 24;
24166 WRITE_LONG_F(adr, res)
24167 POST_IO
24168RET(22)
24169}
24170
24171// ADDQ
24172OPCODE(0x50A8)
24173{
24174 u32 adr, res;
24175 u32 src, dst;
24176
24177 src = (((Opcode >> 9) - 1) & 7) + 1;
24178 FETCH_SWORD(adr);
24179 adr += AREG((Opcode >> 0) & 7);
24180 PRE_IO
24181 READ_LONG_F(adr, dst)
24182 res = dst + src;
24183 flag_NotZ = res;
24184 flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
24185 flag_V = ((src ^ res) & (dst ^ res)) >> 24;
24186 flag_N = res >> 24;
24187 WRITE_LONG_F(adr, res)
24188 POST_IO
24189RET(24)
24190}
24191
24192// ADDQ
24193OPCODE(0x50B0)
24194{
24195 u32 adr, res;
24196 u32 src, dst;
24197
24198 src = (((Opcode >> 9) - 1) & 7) + 1;
24199 adr = AREG((Opcode >> 0) & 7);
24200 DECODE_EXT_WORD
24201 PRE_IO
24202 READ_LONG_F(adr, dst)
24203 res = dst + src;
24204 flag_NotZ = res;
24205 flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
24206 flag_V = ((src ^ res) & (dst ^ res)) >> 24;
24207 flag_N = res >> 24;
24208 WRITE_LONG_F(adr, res)
24209 POST_IO
24210RET(26)
24211}
24212
24213// ADDQ
24214OPCODE(0x50B8)
24215{
24216 u32 adr, res;
24217 u32 src, dst;
24218
24219 src = (((Opcode >> 9) - 1) & 7) + 1;
24220 FETCH_SWORD(adr);
24221 PRE_IO
24222 READ_LONG_F(adr, dst)
24223 res = dst + src;
24224 flag_NotZ = res;
24225 flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
24226 flag_V = ((src ^ res) & (dst ^ res)) >> 24;
24227 flag_N = res >> 24;
24228 WRITE_LONG_F(adr, res)
24229 POST_IO
24230RET(24)
24231}
24232
24233// ADDQ
24234OPCODE(0x50B9)
24235{
24236 u32 adr, res;
24237 u32 src, dst;
24238
24239 src = (((Opcode >> 9) - 1) & 7) + 1;
24240 FETCH_LONG(adr);
24241 PRE_IO
24242 READ_LONG_F(adr, dst)
24243 res = dst + src;
24244 flag_NotZ = res;
24245 flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
24246 flag_V = ((src ^ res) & (dst ^ res)) >> 24;
24247 flag_N = res >> 24;
24248 WRITE_LONG_F(adr, res)
24249 POST_IO
24250RET(28)
24251}
24252
24253// ADDQ
24254OPCODE(0x509F)
24255{
24256 u32 adr, res;
24257 u32 src, dst;
24258
24259 src = (((Opcode >> 9) - 1) & 7) + 1;
24260 adr = AREG(7);
24261 AREG(7) += 4;
24262 PRE_IO
24263 READ_LONG_F(adr, dst)
24264 res = dst + src;
24265 flag_NotZ = res;
24266 flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
24267 flag_V = ((src ^ res) & (dst ^ res)) >> 24;
24268 flag_N = res >> 24;
24269 WRITE_LONG_F(adr, res)
24270 POST_IO
24271RET(20)
24272}
24273
24274// ADDQ
24275OPCODE(0x50A7)
24276{
24277 u32 adr, res;
24278 u32 src, dst;
24279
24280 src = (((Opcode >> 9) - 1) & 7) + 1;
24281 adr = AREG(7) - 4;
24282 AREG(7) = adr;
24283 PRE_IO
24284 READ_LONG_F(adr, dst)
24285 res = dst + src;
24286 flag_NotZ = res;
24287 flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
24288 flag_V = ((src ^ res) & (dst ^ res)) >> 24;
24289 flag_N = res >> 24;
24290 WRITE_LONG_F(adr, res)
24291 POST_IO
24292RET(22)
24293}
24294
24295// SUBQ
24296OPCODE(0x5100)
24297{
24298 u32 adr, res;
24299 u32 src, dst;
24300
24301 src = (((Opcode >> 9) - 1) & 7) + 1;
24302 dst = DREGu8((Opcode >> 0) & 7);
24303 res = dst - src;
24304 flag_N = flag_X = flag_C = res;
24305 flag_V = (src ^ dst) & (res ^ dst);
24306 flag_NotZ = res & 0xFF;
24307 DREGu8((Opcode >> 0) & 7) = res;
24308RET(4)
24309}
24310
24311// SUBQ
24312OPCODE(0x5110)
24313{
24314 u32 adr, res;
24315 u32 src, dst;
24316
24317 src = (((Opcode >> 9) - 1) & 7) + 1;
24318 adr = AREG((Opcode >> 0) & 7);
24319 PRE_IO
24320 READ_BYTE_F(adr, dst)
24321 res = dst - src;
24322 flag_N = flag_X = flag_C = res;
24323 flag_V = (src ^ dst) & (res ^ dst);
24324 flag_NotZ = res & 0xFF;
24325 WRITE_BYTE_F(adr, res)
24326 POST_IO
24327RET(12)
24328}
24329
24330// SUBQ
24331OPCODE(0x5118)
24332{
24333 u32 adr, res;
24334 u32 src, dst;
24335
24336 src = (((Opcode >> 9) - 1) & 7) + 1;
24337 adr = AREG((Opcode >> 0) & 7);
24338 AREG((Opcode >> 0) & 7) += 1;
24339 PRE_IO
24340 READ_BYTE_F(adr, dst)
24341 res = dst - src;
24342 flag_N = flag_X = flag_C = res;
24343 flag_V = (src ^ dst) & (res ^ dst);
24344 flag_NotZ = res & 0xFF;
24345 WRITE_BYTE_F(adr, res)
24346 POST_IO
24347RET(12)
24348}
24349
24350// SUBQ
24351OPCODE(0x5120)
24352{
24353 u32 adr, res;
24354 u32 src, dst;
24355
24356 src = (((Opcode >> 9) - 1) & 7) + 1;
24357 adr = AREG((Opcode >> 0) & 7) - 1;
24358 AREG((Opcode >> 0) & 7) = adr;
24359 PRE_IO
24360 READ_BYTE_F(adr, dst)
24361 res = dst - src;
24362 flag_N = flag_X = flag_C = res;
24363 flag_V = (src ^ dst) & (res ^ dst);
24364 flag_NotZ = res & 0xFF;
24365 WRITE_BYTE_F(adr, res)
24366 POST_IO
24367RET(14)
24368}
24369
24370// SUBQ
24371OPCODE(0x5128)
24372{
24373 u32 adr, res;
24374 u32 src, dst;
24375
24376 src = (((Opcode >> 9) - 1) & 7) + 1;
24377 FETCH_SWORD(adr);
24378 adr += AREG((Opcode >> 0) & 7);
24379 PRE_IO
24380 READ_BYTE_F(adr, dst)
24381 res = dst - src;
24382 flag_N = flag_X = flag_C = res;
24383 flag_V = (src ^ dst) & (res ^ dst);
24384 flag_NotZ = res & 0xFF;
24385 WRITE_BYTE_F(adr, res)
24386 POST_IO
24387RET(16)
24388}
24389
24390// SUBQ
24391OPCODE(0x5130)
24392{
24393 u32 adr, res;
24394 u32 src, dst;
24395
24396 src = (((Opcode >> 9) - 1) & 7) + 1;
24397 adr = AREG((Opcode >> 0) & 7);
24398 DECODE_EXT_WORD
24399 PRE_IO
24400 READ_BYTE_F(adr, dst)
24401 res = dst - src;
24402 flag_N = flag_X = flag_C = res;
24403 flag_V = (src ^ dst) & (res ^ dst);
24404 flag_NotZ = res & 0xFF;
24405 WRITE_BYTE_F(adr, res)
24406 POST_IO
24407RET(18)
24408}
24409
24410// SUBQ
24411OPCODE(0x5138)
24412{
24413 u32 adr, res;
24414 u32 src, dst;
24415
24416 src = (((Opcode >> 9) - 1) & 7) + 1;
24417 FETCH_SWORD(adr);
24418 PRE_IO
24419 READ_BYTE_F(adr, dst)
24420 res = dst - src;
24421 flag_N = flag_X = flag_C = res;
24422 flag_V = (src ^ dst) & (res ^ dst);
24423 flag_NotZ = res & 0xFF;
24424 WRITE_BYTE_F(adr, res)
24425 POST_IO
24426RET(16)
24427}
24428
24429// SUBQ
24430OPCODE(0x5139)
24431{
24432 u32 adr, res;
24433 u32 src, dst;
24434
24435 src = (((Opcode >> 9) - 1) & 7) + 1;
24436 FETCH_LONG(adr);
24437 PRE_IO
24438 READ_BYTE_F(adr, dst)
24439 res = dst - src;
24440 flag_N = flag_X = flag_C = res;
24441 flag_V = (src ^ dst) & (res ^ dst);
24442 flag_NotZ = res & 0xFF;
24443 WRITE_BYTE_F(adr, res)
24444 POST_IO
24445RET(20)
24446}
24447
24448// SUBQ
24449OPCODE(0x511F)
24450{
24451 u32 adr, res;
24452 u32 src, dst;
24453
24454 src = (((Opcode >> 9) - 1) & 7) + 1;
24455 adr = AREG(7);
24456 AREG(7) += 2;
24457 PRE_IO
24458 READ_BYTE_F(adr, dst)
24459 res = dst - src;
24460 flag_N = flag_X = flag_C = res;
24461 flag_V = (src ^ dst) & (res ^ dst);
24462 flag_NotZ = res & 0xFF;
24463 WRITE_BYTE_F(adr, res)
24464 POST_IO
24465RET(12)
24466}
24467
24468// SUBQ
24469OPCODE(0x5127)
24470{
24471 u32 adr, res;
24472 u32 src, dst;
24473
24474 src = (((Opcode >> 9) - 1) & 7) + 1;
24475 adr = AREG(7) - 2;
24476 AREG(7) = adr;
24477 PRE_IO
24478 READ_BYTE_F(adr, dst)
24479 res = dst - src;
24480 flag_N = flag_X = flag_C = res;
24481 flag_V = (src ^ dst) & (res ^ dst);
24482 flag_NotZ = res & 0xFF;
24483 WRITE_BYTE_F(adr, res)
24484 POST_IO
24485RET(14)
24486}
24487
24488// SUBQ
24489OPCODE(0x5140)
24490{
24491 u32 adr, res;
24492 u32 src, dst;
24493
24494 src = (((Opcode >> 9) - 1) & 7) + 1;
24495 dst = DREGu16((Opcode >> 0) & 7);
24496 res = dst - src;
24497 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
24498 flag_N = flag_X = flag_C = res >> 8;
24499 flag_NotZ = res & 0xFFFF;
24500 DREGu16((Opcode >> 0) & 7) = res;
24501RET(4)
24502}
24503
24504// SUBQ
24505OPCODE(0x5148)
24506{
24507 u32 adr, res;
24508 u32 src, dst;
24509
24510 src = (((Opcode >> 9) - 1) & 7) + 1;
24511 dst = AREGu32((Opcode >> 0) & 7);
24512 res = dst - src;
24513 AREG((Opcode >> 0) & 7) = res;
24514RET(8)
24515}
24516
24517// SUBQ
24518OPCODE(0x5150)
24519{
24520 u32 adr, res;
24521 u32 src, dst;
24522
24523 src = (((Opcode >> 9) - 1) & 7) + 1;
24524 adr = AREG((Opcode >> 0) & 7);
24525 PRE_IO
24526 READ_WORD_F(adr, dst)
24527 res = dst - src;
24528 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
24529 flag_N = flag_X = flag_C = res >> 8;
24530 flag_NotZ = res & 0xFFFF;
24531 WRITE_WORD_F(adr, res)
24532 POST_IO
24533RET(12)
24534}
24535
24536// SUBQ
24537OPCODE(0x5158)
24538{
24539 u32 adr, res;
24540 u32 src, dst;
24541
24542 src = (((Opcode >> 9) - 1) & 7) + 1;
24543 adr = AREG((Opcode >> 0) & 7);
24544 AREG((Opcode >> 0) & 7) += 2;
24545 PRE_IO
24546 READ_WORD_F(adr, dst)
24547 res = dst - src;
24548 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
24549 flag_N = flag_X = flag_C = res >> 8;
24550 flag_NotZ = res & 0xFFFF;
24551 WRITE_WORD_F(adr, res)
24552 POST_IO
24553RET(12)
24554}
24555
24556// SUBQ
24557OPCODE(0x5160)
24558{
24559 u32 adr, res;
24560 u32 src, dst;
24561
24562 src = (((Opcode >> 9) - 1) & 7) + 1;
24563 adr = AREG((Opcode >> 0) & 7) - 2;
24564 AREG((Opcode >> 0) & 7) = adr;
24565 PRE_IO
24566 READ_WORD_F(adr, dst)
24567 res = dst - src;
24568 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
24569 flag_N = flag_X = flag_C = res >> 8;
24570 flag_NotZ = res & 0xFFFF;
24571 WRITE_WORD_F(adr, res)
24572 POST_IO
24573RET(14)
24574}
24575
24576// SUBQ
24577OPCODE(0x5168)
24578{
24579 u32 adr, res;
24580 u32 src, dst;
24581
24582 src = (((Opcode >> 9) - 1) & 7) + 1;
24583 FETCH_SWORD(adr);
24584 adr += AREG((Opcode >> 0) & 7);
24585 PRE_IO
24586 READ_WORD_F(adr, dst)
24587 res = dst - src;
24588 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
24589 flag_N = flag_X = flag_C = res >> 8;
24590 flag_NotZ = res & 0xFFFF;
24591 WRITE_WORD_F(adr, res)
24592 POST_IO
24593RET(16)
24594}
24595
24596// SUBQ
24597OPCODE(0x5170)
24598{
24599 u32 adr, res;
24600 u32 src, dst;
24601
24602 src = (((Opcode >> 9) - 1) & 7) + 1;
24603 adr = AREG((Opcode >> 0) & 7);
24604 DECODE_EXT_WORD
24605 PRE_IO
24606 READ_WORD_F(adr, dst)
24607 res = dst - src;
24608 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
24609 flag_N = flag_X = flag_C = res >> 8;
24610 flag_NotZ = res & 0xFFFF;
24611 WRITE_WORD_F(adr, res)
24612 POST_IO
24613RET(18)
24614}
24615
24616// SUBQ
24617OPCODE(0x5178)
24618{
24619 u32 adr, res;
24620 u32 src, dst;
24621
24622 src = (((Opcode >> 9) - 1) & 7) + 1;
24623 FETCH_SWORD(adr);
24624 PRE_IO
24625 READ_WORD_F(adr, dst)
24626 res = dst - src;
24627 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
24628 flag_N = flag_X = flag_C = res >> 8;
24629 flag_NotZ = res & 0xFFFF;
24630 WRITE_WORD_F(adr, res)
24631 POST_IO
24632RET(16)
24633}
24634
24635// SUBQ
24636OPCODE(0x5179)
24637{
24638 u32 adr, res;
24639 u32 src, dst;
24640
24641 src = (((Opcode >> 9) - 1) & 7) + 1;
24642 FETCH_LONG(adr);
24643 PRE_IO
24644 READ_WORD_F(adr, dst)
24645 res = dst - src;
24646 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
24647 flag_N = flag_X = flag_C = res >> 8;
24648 flag_NotZ = res & 0xFFFF;
24649 WRITE_WORD_F(adr, res)
24650 POST_IO
24651RET(20)
24652}
24653
24654// SUBQ
24655OPCODE(0x515F)
24656{
24657 u32 adr, res;
24658 u32 src, dst;
24659
24660 src = (((Opcode >> 9) - 1) & 7) + 1;
24661 adr = AREG(7);
24662 AREG(7) += 2;
24663 PRE_IO
24664 READ_WORD_F(adr, dst)
24665 res = dst - src;
24666 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
24667 flag_N = flag_X = flag_C = res >> 8;
24668 flag_NotZ = res & 0xFFFF;
24669 WRITE_WORD_F(adr, res)
24670 POST_IO
24671RET(12)
24672}
24673
24674// SUBQ
24675OPCODE(0x5167)
24676{
24677 u32 adr, res;
24678 u32 src, dst;
24679
24680 src = (((Opcode >> 9) - 1) & 7) + 1;
24681 adr = AREG(7) - 2;
24682 AREG(7) = adr;
24683 PRE_IO
24684 READ_WORD_F(adr, dst)
24685 res = dst - src;
24686 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
24687 flag_N = flag_X = flag_C = res >> 8;
24688 flag_NotZ = res & 0xFFFF;
24689 WRITE_WORD_F(adr, res)
24690 POST_IO
24691RET(14)
24692}
24693
24694// SUBQ
24695OPCODE(0x5180)
24696{
24697 u32 adr, res;
24698 u32 src, dst;
24699
24700 src = (((Opcode >> 9) - 1) & 7) + 1;
24701 dst = DREGu32((Opcode >> 0) & 7);
24702 res = dst - src;
24703 flag_NotZ = res;
24704 flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
24705 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
24706 flag_N = res >> 24;
24707 DREGu32((Opcode >> 0) & 7) = res;
24708RET(8)
24709}
24710
24711// SUBQ
24712OPCODE(0x5188)
24713{
24714 u32 adr, res;
24715 u32 src, dst;
24716
24717 src = (((Opcode >> 9) - 1) & 7) + 1;
24718 dst = AREGu32((Opcode >> 0) & 7);
24719 res = dst - src;
24720 AREG((Opcode >> 0) & 7) = res;
24721RET(8)
24722}
24723
24724// SUBQ
24725OPCODE(0x5190)
24726{
24727 u32 adr, res;
24728 u32 src, dst;
24729
24730 src = (((Opcode >> 9) - 1) & 7) + 1;
24731 adr = AREG((Opcode >> 0) & 7);
24732 PRE_IO
24733 READ_LONG_F(adr, dst)
24734 res = dst - src;
24735 flag_NotZ = res;
24736 flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
24737 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
24738 flag_N = res >> 24;
24739 WRITE_LONG_F(adr, res)
24740 POST_IO
24741RET(20)
24742}
24743
24744// SUBQ
24745OPCODE(0x5198)
24746{
24747 u32 adr, res;
24748 u32 src, dst;
24749
24750 src = (((Opcode >> 9) - 1) & 7) + 1;
24751 adr = AREG((Opcode >> 0) & 7);
24752 AREG((Opcode >> 0) & 7) += 4;
24753 PRE_IO
24754 READ_LONG_F(adr, dst)
24755 res = dst - src;
24756 flag_NotZ = res;
24757 flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
24758 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
24759 flag_N = res >> 24;
24760 WRITE_LONG_F(adr, res)
24761 POST_IO
24762RET(20)
24763}
24764
24765// SUBQ
24766OPCODE(0x51A0)
24767{
24768 u32 adr, res;
24769 u32 src, dst;
24770
24771 src = (((Opcode >> 9) - 1) & 7) + 1;
24772 adr = AREG((Opcode >> 0) & 7) - 4;
24773 AREG((Opcode >> 0) & 7) = adr;
24774 PRE_IO
24775 READ_LONG_F(adr, dst)
24776 res = dst - src;
24777 flag_NotZ = res;
24778 flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
24779 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
24780 flag_N = res >> 24;
24781 WRITE_LONG_F(adr, res)
24782 POST_IO
24783RET(22)
24784}
24785
24786// SUBQ
24787OPCODE(0x51A8)
24788{
24789 u32 adr, res;
24790 u32 src, dst;
24791
24792 src = (((Opcode >> 9) - 1) & 7) + 1;
24793 FETCH_SWORD(adr);
24794 adr += AREG((Opcode >> 0) & 7);
24795 PRE_IO
24796 READ_LONG_F(adr, dst)
24797 res = dst - src;
24798 flag_NotZ = res;
24799 flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
24800 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
24801 flag_N = res >> 24;
24802 WRITE_LONG_F(adr, res)
24803 POST_IO
24804RET(24)
24805}
24806
24807// SUBQ
24808OPCODE(0x51B0)
24809{
24810 u32 adr, res;
24811 u32 src, dst;
24812
24813 src = (((Opcode >> 9) - 1) & 7) + 1;
24814 adr = AREG((Opcode >> 0) & 7);
24815 DECODE_EXT_WORD
24816 PRE_IO
24817 READ_LONG_F(adr, dst)
24818 res = dst - src;
24819 flag_NotZ = res;
24820 flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
24821 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
24822 flag_N = res >> 24;
24823 WRITE_LONG_F(adr, res)
24824 POST_IO
24825RET(26)
24826}
24827
24828// SUBQ
24829OPCODE(0x51B8)
24830{
24831 u32 adr, res;
24832 u32 src, dst;
24833
24834 src = (((Opcode >> 9) - 1) & 7) + 1;
24835 FETCH_SWORD(adr);
24836 PRE_IO
24837 READ_LONG_F(adr, dst)
24838 res = dst - src;
24839 flag_NotZ = res;
24840 flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
24841 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
24842 flag_N = res >> 24;
24843 WRITE_LONG_F(adr, res)
24844 POST_IO
24845RET(24)
24846}
24847
24848// SUBQ
24849OPCODE(0x51B9)
24850{
24851 u32 adr, res;
24852 u32 src, dst;
24853
24854 src = (((Opcode >> 9) - 1) & 7) + 1;
24855 FETCH_LONG(adr);
24856 PRE_IO
24857 READ_LONG_F(adr, dst)
24858 res = dst - src;
24859 flag_NotZ = res;
24860 flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
24861 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
24862 flag_N = res >> 24;
24863 WRITE_LONG_F(adr, res)
24864 POST_IO
24865RET(28)
24866}
24867
24868// SUBQ
24869OPCODE(0x519F)
24870{
24871 u32 adr, res;
24872 u32 src, dst;
24873
24874 src = (((Opcode >> 9) - 1) & 7) + 1;
24875 adr = AREG(7);
24876 AREG(7) += 4;
24877 PRE_IO
24878 READ_LONG_F(adr, dst)
24879 res = dst - src;
24880 flag_NotZ = res;
24881 flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
24882 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
24883 flag_N = res >> 24;
24884 WRITE_LONG_F(adr, res)
24885 POST_IO
24886RET(20)
24887}
24888
24889// SUBQ
24890OPCODE(0x51A7)
24891{
24892 u32 adr, res;
24893 u32 src, dst;
24894
24895 src = (((Opcode >> 9) - 1) & 7) + 1;
24896 adr = AREG(7) - 4;
24897 AREG(7) = adr;
24898 PRE_IO
24899 READ_LONG_F(adr, dst)
24900 res = dst - src;
24901 flag_NotZ = res;
24902 flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
24903 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
24904 flag_N = res >> 24;
24905 WRITE_LONG_F(adr, res)
24906 POST_IO
24907RET(22)
24908}
24909
24910// BCC
24911OPCODE(0x6201)
24912{
24913 u32 adr, res;
24914 u32 src, dst;
24915
24916 if (flag_NotZ && (!(flag_C & 0x100)))
24917 {
24918 PC += ((s8)(Opcode & 0xFE)) >> 1;
24919 m68kcontext.io_cycle_counter -= 2;
24920 }
24921RET(8)
24922}
24923
24924// BCC
24925OPCODE(0x6301)
24926{
24927 u32 adr, res;
24928 u32 src, dst;
24929
24930 if ((!flag_NotZ) || (flag_C & 0x100))
24931 {
24932 PC += ((s8)(Opcode & 0xFE)) >> 1;
24933 m68kcontext.io_cycle_counter -= 2;
24934 }
24935RET(8)
24936}
24937
24938// BCC
24939OPCODE(0x6401)
24940{
24941 u32 adr, res;
24942 u32 src, dst;
24943
24944 if (!(flag_C & 0x100))
24945 {
24946 PC += ((s8)(Opcode & 0xFE)) >> 1;
24947 m68kcontext.io_cycle_counter -= 2;
24948 }
24949RET(8)
24950}
24951
24952// BCC
24953OPCODE(0x6501)
24954{
24955 u32 adr, res;
24956 u32 src, dst;
24957
24958 if (flag_C & 0x100)
24959 {
24960 PC += ((s8)(Opcode & 0xFE)) >> 1;
24961 m68kcontext.io_cycle_counter -= 2;
24962 }
24963RET(8)
24964}
24965
24966// BCC
24967OPCODE(0x6601)
24968{
24969 u32 adr, res;
24970 u32 src, dst;
24971
24972 if (flag_NotZ)
24973 {
24974 PC += ((s8)(Opcode & 0xFE)) >> 1;
24975 m68kcontext.io_cycle_counter -= 2;
24976 }
24977RET(8)
24978}
24979
24980// BCC
24981OPCODE(0x6701)
24982{
24983 u32 adr, res;
24984 u32 src, dst;
24985
24986 if (!flag_NotZ)
24987 {
24988 PC += ((s8)(Opcode & 0xFE)) >> 1;
24989 m68kcontext.io_cycle_counter -= 2;
24990 }
24991RET(8)
24992}
24993
24994// BCC
24995OPCODE(0x6801)
24996{
24997 u32 adr, res;
24998 u32 src, dst;
24999
25000 if (!(flag_V & 0x80))
25001 {
25002 PC += ((s8)(Opcode & 0xFE)) >> 1;
25003 m68kcontext.io_cycle_counter -= 2;
25004 }
25005RET(8)
25006}
25007
25008// BCC
25009OPCODE(0x6901)
25010{
25011 u32 adr, res;
25012 u32 src, dst;
25013
25014 if (flag_V & 0x80)
25015 {
25016 PC += ((s8)(Opcode & 0xFE)) >> 1;
25017 m68kcontext.io_cycle_counter -= 2;
25018 }
25019RET(8)
25020}
25021
25022// BCC
25023OPCODE(0x6A01)
25024{
25025 u32 adr, res;
25026 u32 src, dst;
25027
25028 if (!(flag_N & 0x80))
25029 {
25030 PC += ((s8)(Opcode & 0xFE)) >> 1;
25031 m68kcontext.io_cycle_counter -= 2;
25032 }
25033RET(8)
25034}
25035
25036// BCC
25037OPCODE(0x6B01)
25038{
25039 u32 adr, res;
25040 u32 src, dst;
25041
25042 if (flag_N & 0x80)
25043 {
25044 PC += ((s8)(Opcode & 0xFE)) >> 1;
25045 m68kcontext.io_cycle_counter -= 2;
25046 }
25047RET(8)
25048}
25049
25050// BCC
25051OPCODE(0x6C01)
25052{
25053 u32 adr, res;
25054 u32 src, dst;
25055
25056 if (!((flag_N ^ flag_V) & 0x80))
25057 {
25058 PC += ((s8)(Opcode & 0xFE)) >> 1;
25059 m68kcontext.io_cycle_counter -= 2;
25060 }
25061RET(8)
25062}
25063
25064// BCC
25065OPCODE(0x6D01)
25066{
25067 u32 adr, res;
25068 u32 src, dst;
25069
25070 if ((flag_N ^ flag_V) & 0x80)
25071 {
25072 PC += ((s8)(Opcode & 0xFE)) >> 1;
25073 m68kcontext.io_cycle_counter -= 2;
25074 }
25075RET(8)
25076}
25077
25078// BCC
25079OPCODE(0x6E01)
25080{
25081 u32 adr, res;
25082 u32 src, dst;
25083
25084 if (flag_NotZ && (!((flag_N ^ flag_V) & 0x80)))
25085 {
25086 PC += ((s8)(Opcode & 0xFE)) >> 1;
25087 m68kcontext.io_cycle_counter -= 2;
25088 }
25089RET(8)
25090}
25091
25092// BCC
25093OPCODE(0x6F01)
25094{
25095 u32 adr, res;
25096 u32 src, dst;
25097
25098 if ((!flag_NotZ) || ((flag_N ^ flag_V) & 0x80))
25099 {
25100 PC += ((s8)(Opcode & 0xFE)) >> 1;
25101 m68kcontext.io_cycle_counter -= 2;
25102 }
25103RET(8)
25104}
25105
25106// BCC16
25107OPCODE(0x6200)
25108{
25109 u32 adr, res;
25110 u32 src, dst;
25111
25112 if (flag_NotZ && (!(flag_C & 0x100)))
25113 {
25114 u32 newPC;
25115
25116 newPC = (u32)(PC) - BasePC;
25117 newPC += GET_SWORD;
25118 SET_PC(newPC);
25119 CHECK_BRANCH_EXCEPTION(newPC)
25120 RET(10)
25121 }
25122 PC++;
25123RET(12)
25124}
25125
25126// BCC16
25127OPCODE(0x6300)
25128{
25129 u32 adr, res;
25130 u32 src, dst;
25131
25132 if ((!flag_NotZ) || (flag_C & 0x100))
25133 {
25134 u32 newPC;
25135
25136 newPC = (u32)(PC) - BasePC;
25137 newPC += GET_SWORD;
25138 SET_PC(newPC);
25139 CHECK_BRANCH_EXCEPTION(newPC)
25140 RET(10)
25141 }
25142 PC++;
25143RET(12)
25144}
25145
25146// BCC16
25147OPCODE(0x6400)
25148{
25149 u32 adr, res;
25150 u32 src, dst;
25151
25152 if (!(flag_C & 0x100))
25153 {
25154 u32 newPC;
25155
25156 newPC = (u32)(PC) - BasePC;
25157 newPC += GET_SWORD;
25158 SET_PC(newPC);
25159 CHECK_BRANCH_EXCEPTION(newPC)
25160 RET(10)
25161 }
25162 PC++;
25163RET(12)
25164}
25165
25166// BCC16
25167OPCODE(0x6500)
25168{
25169 u32 adr, res;
25170 u32 src, dst;
25171
25172 if (flag_C & 0x100)
25173 {
25174 u32 newPC;
25175
25176 newPC = (u32)(PC) - BasePC;
25177 newPC += GET_SWORD;
25178 SET_PC(newPC);
25179 CHECK_BRANCH_EXCEPTION(newPC)
25180 RET(10)
25181 }
25182 PC++;
25183RET(12)
25184}
25185
25186// BCC16
25187OPCODE(0x6600)
25188{
25189 u32 adr, res;
25190 u32 src, dst;
25191
25192 if (flag_NotZ)
25193 {
25194 u32 newPC;
25195
25196 newPC = (u32)(PC) - BasePC;
25197 newPC += GET_SWORD;
25198 SET_PC(newPC);
25199 CHECK_BRANCH_EXCEPTION(newPC)
25200 RET(10)
25201 }
25202 PC++;
25203RET(12)
25204}
25205
25206// BCC16
25207OPCODE(0x6700)
25208{
25209 u32 adr, res;
25210 u32 src, dst;
25211
25212 if (!flag_NotZ)
25213 {
25214 u32 newPC;
25215
25216 newPC = (u32)(PC) - BasePC;
25217 newPC += GET_SWORD;
25218 SET_PC(newPC);
25219 CHECK_BRANCH_EXCEPTION(newPC)
25220 RET(10)
25221 }
25222 PC++;
25223RET(12)
25224}
25225
25226// BCC16
25227OPCODE(0x6800)
25228{
25229 u32 adr, res;
25230 u32 src, dst;
25231
25232 if (!(flag_V & 0x80))
25233 {
25234 u32 newPC;
25235
25236 newPC = (u32)(PC) - BasePC;
25237 newPC += GET_SWORD;
25238 SET_PC(newPC);
25239 CHECK_BRANCH_EXCEPTION(newPC)
25240 RET(10)
25241 }
25242 PC++;
25243RET(12)
25244}
25245
25246// BCC16
25247OPCODE(0x6900)
25248{
25249 u32 adr, res;
25250 u32 src, dst;
25251
25252 if (flag_V & 0x80)
25253 {
25254 u32 newPC;
25255
25256 newPC = (u32)(PC) - BasePC;
25257 newPC += GET_SWORD;
25258 SET_PC(newPC);
25259 CHECK_BRANCH_EXCEPTION(newPC)
25260 RET(10)
25261 }
25262 PC++;
25263RET(12)
25264}
25265
25266// BCC16
25267OPCODE(0x6A00)
25268{
25269 u32 adr, res;
25270 u32 src, dst;
25271
25272 if (!(flag_N & 0x80))
25273 {
25274 u32 newPC;
25275
25276 newPC = (u32)(PC) - BasePC;
25277 newPC += GET_SWORD;
25278 SET_PC(newPC);
25279 CHECK_BRANCH_EXCEPTION(newPC)
25280 RET(10)
25281 }
25282 PC++;
25283RET(12)
25284}
25285
25286// BCC16
25287OPCODE(0x6B00)
25288{
25289 u32 adr, res;
25290 u32 src, dst;
25291
25292 if (flag_N & 0x80)
25293 {
25294 u32 newPC;
25295
25296 newPC = (u32)(PC) - BasePC;
25297 newPC += GET_SWORD;
25298 SET_PC(newPC);
25299 CHECK_BRANCH_EXCEPTION(newPC)
25300 RET(10)
25301 }
25302 PC++;
25303RET(12)
25304}
25305
25306// BCC16
25307OPCODE(0x6C00)
25308{
25309 u32 adr, res;
25310 u32 src, dst;
25311
25312 if (!((flag_N ^ flag_V) & 0x80))
25313 {
25314 u32 newPC;
25315
25316 newPC = (u32)(PC) - BasePC;
25317 newPC += GET_SWORD;
25318 SET_PC(newPC);
25319 CHECK_BRANCH_EXCEPTION(newPC)
25320 RET(10)
25321 }
25322 PC++;
25323RET(12)
25324}
25325
25326// BCC16
25327OPCODE(0x6D00)
25328{
25329 u32 adr, res;
25330 u32 src, dst;
25331
25332 if ((flag_N ^ flag_V) & 0x80)
25333 {
25334 u32 newPC;
25335
25336 newPC = (u32)(PC) - BasePC;
25337 newPC += GET_SWORD;
25338 SET_PC(newPC);
25339 CHECK_BRANCH_EXCEPTION(newPC)
25340 RET(10)
25341 }
25342 PC++;
25343RET(12)
25344}
25345
25346// BCC16
25347OPCODE(0x6E00)
25348{
25349 u32 adr, res;
25350 u32 src, dst;
25351
25352 if (flag_NotZ && (!((flag_N ^ flag_V) & 0x80)))
25353 {
25354 u32 newPC;
25355
25356 newPC = (u32)(PC) - BasePC;
25357 newPC += GET_SWORD;
25358 SET_PC(newPC);
25359 CHECK_BRANCH_EXCEPTION(newPC)
25360 RET(10)
25361 }
25362 PC++;
25363RET(12)
25364}
25365
25366// BCC16
25367OPCODE(0x6F00)
25368{
25369 u32 adr, res;
25370 u32 src, dst;
25371
25372 if ((!flag_NotZ) || ((flag_N ^ flag_V) & 0x80))
25373 {
25374 u32 newPC;
25375
25376 newPC = (u32)(PC) - BasePC;
25377 newPC += GET_SWORD;
25378 SET_PC(newPC);
25379 CHECK_BRANCH_EXCEPTION(newPC)
25380 RET(10)
25381 }
25382 PC++;
25383RET(12)
25384}
25385
25386// BRA
25387OPCODE(0x6001)
25388{
25389#ifdef FAMEC_CHECK_BRANCHES
25390 u32 newPC = (u32)(PC) - BasePC;
25391 s8 offs=Opcode;
25392 newPC += offs;
25393 SET_PC(newPC);
25394 CHECK_BRANCH_EXCEPTION(offs)
25395#else
25396 PC += ((s8)(Opcode & 0xFE)) >> 1;
25397#endif
25398RET(10)
25399}
25400
25401// BRA16
25402OPCODE(0x6000)
25403{
25404 u32 adr, res;
25405 u32 src, dst;
25406
25407 {
25408 u32 newPC;
25409
25410 newPC = (u32)(PC) - BasePC;
25411 newPC += GET_SWORD;
25412 SET_PC(newPC);
25413 CHECK_BRANCH_EXCEPTION(newPC)
25414 }
25415RET(10)
25416}
25417
25418// BSR
25419OPCODE(0x6101)
25420{
25421 u32 adr, res;
25422 u32 src, dst;
25423 u32 oldPC;
25424 s8 offs;
25425
25426 PRE_IO
25427
25428 oldPC = (u32)(PC) - BasePC;
25429 PUSH_32_F(oldPC)
25430#ifdef FAMEC_CHECK_BRANCHES
25431 offs = Opcode;
25432 oldPC += offs;
25433 SET_PC(oldPC);
25434 CHECK_BRANCH_EXCEPTION(offs)
25435#else
25436 PC += ((s8)(Opcode & 0xFE)) >> 1;
25437#endif
25438 POST_IO
25439RET(18)
25440}
25441
25442// BSR16
25443OPCODE(0x6100)
25444{
25445 u32 adr, res;
25446 u32 src, dst;
25447
25448 PRE_IO
25449 {
25450 u32 oldPC, newPC;
25451
25452 newPC = (u32)(PC) - BasePC;
25453 oldPC = newPC + 2;
25454 PUSH_32_F(oldPC)
25455 newPC += GET_SWORD;
25456 SET_PC(newPC);
25457 CHECK_BRANCH_EXCEPTION(newPC)
25458 }
25459 POST_IO
25460RET(18)
25461}
25462
25463// MOVEQ
25464OPCODE(0x7000)
25465{
25466 u32 adr, res;
25467 u32 src, dst;
25468
25469 res = (s32)(s8)Opcode;
25470 flag_C = flag_V = 0;
25471 flag_N = flag_NotZ = res;
25472 DREGu32((Opcode >> 9) & 7) = res;
25473RET(4)
25474}
25475
25476// ORaD
25477OPCODE(0x8000)
25478{
25479 u32 adr, res;
25480 u32 src, dst;
25481
25482 src = DREGu8((Opcode >> 0) & 7);
25483 res = DREGu8((Opcode >> 9) & 7);
25484 res |= src;
25485 flag_C = 0;
25486 flag_V = 0;
25487 flag_NotZ = res;
25488 flag_N = res;
25489 DREGu8((Opcode >> 9) & 7) = res;
25490RET(4)
25491}
25492
25493// ORaD
25494OPCODE(0x8010)
25495{
25496 u32 adr, res;
25497 u32 src, dst;
25498
25499 adr = AREG((Opcode >> 0) & 7);
25500 PRE_IO
25501 READ_BYTE_F(adr, src)
25502 res = DREGu8((Opcode >> 9) & 7);
25503 res |= src;
25504 flag_C = 0;
25505 flag_V = 0;
25506 flag_NotZ = res;
25507 flag_N = res;
25508 DREGu8((Opcode >> 9) & 7) = res;
25509 POST_IO
25510RET(8)
25511}
25512
25513// ORaD
25514OPCODE(0x8018)
25515{
25516 u32 adr, res;
25517 u32 src, dst;
25518
25519 adr = AREG((Opcode >> 0) & 7);
25520 AREG((Opcode >> 0) & 7) += 1;
25521 PRE_IO
25522 READ_BYTE_F(adr, src)
25523 res = DREGu8((Opcode >> 9) & 7);
25524 res |= src;
25525 flag_C = 0;
25526 flag_V = 0;
25527 flag_NotZ = res;
25528 flag_N = res;
25529 DREGu8((Opcode >> 9) & 7) = res;
25530 POST_IO
25531RET(8)
25532}
25533
25534// ORaD
25535OPCODE(0x8020)
25536{
25537 u32 adr, res;
25538 u32 src, dst;
25539
25540 adr = AREG((Opcode >> 0) & 7) - 1;
25541 AREG((Opcode >> 0) & 7) = adr;
25542 PRE_IO
25543 READ_BYTE_F(adr, src)
25544 res = DREGu8((Opcode >> 9) & 7);
25545 res |= src;
25546 flag_C = 0;
25547 flag_V = 0;
25548 flag_NotZ = res;
25549 flag_N = res;
25550 DREGu8((Opcode >> 9) & 7) = res;
25551 POST_IO
25552RET(10)
25553}
25554
25555// ORaD
25556OPCODE(0x8028)
25557{
25558 u32 adr, res;
25559 u32 src, dst;
25560
25561 FETCH_SWORD(adr);
25562 adr += AREG((Opcode >> 0) & 7);
25563 PRE_IO
25564 READ_BYTE_F(adr, src)
25565 res = DREGu8((Opcode >> 9) & 7);
25566 res |= src;
25567 flag_C = 0;
25568 flag_V = 0;
25569 flag_NotZ = res;
25570 flag_N = res;
25571 DREGu8((Opcode >> 9) & 7) = res;
25572 POST_IO
25573RET(12)
25574}
25575
25576// ORaD
25577OPCODE(0x8030)
25578{
25579 u32 adr, res;
25580 u32 src, dst;
25581
25582 adr = AREG((Opcode >> 0) & 7);
25583 DECODE_EXT_WORD
25584 PRE_IO
25585 READ_BYTE_F(adr, src)
25586 res = DREGu8((Opcode >> 9) & 7);
25587 res |= src;
25588 flag_C = 0;
25589 flag_V = 0;
25590 flag_NotZ = res;
25591 flag_N = res;
25592 DREGu8((Opcode >> 9) & 7) = res;
25593 POST_IO
25594RET(14)
25595}
25596
25597// ORaD
25598OPCODE(0x8038)
25599{
25600 u32 adr, res;
25601 u32 src, dst;
25602
25603 FETCH_SWORD(adr);
25604 PRE_IO
25605 READ_BYTE_F(adr, src)
25606 res = DREGu8((Opcode >> 9) & 7);
25607 res |= src;
25608 flag_C = 0;
25609 flag_V = 0;
25610 flag_NotZ = res;
25611 flag_N = res;
25612 DREGu8((Opcode >> 9) & 7) = res;
25613 POST_IO
25614RET(12)
25615}
25616
25617// ORaD
25618OPCODE(0x8039)
25619{
25620 u32 adr, res;
25621 u32 src, dst;
25622
25623 FETCH_LONG(adr);
25624 PRE_IO
25625 READ_BYTE_F(adr, src)
25626 res = DREGu8((Opcode >> 9) & 7);
25627 res |= src;
25628 flag_C = 0;
25629 flag_V = 0;
25630 flag_NotZ = res;
25631 flag_N = res;
25632 DREGu8((Opcode >> 9) & 7) = res;
25633 POST_IO
25634RET(16)
25635}
25636
25637// ORaD
25638OPCODE(0x803A)
25639{
25640 u32 adr, res;
25641 u32 src, dst;
25642
25643 adr = GET_SWORD + ((u32)(PC) - BasePC);
25644 PC++;
25645 PRE_IO
25646 READ_BYTE_F(adr, src)
25647 res = DREGu8((Opcode >> 9) & 7);
25648 res |= src;
25649 flag_C = 0;
25650 flag_V = 0;
25651 flag_NotZ = res;
25652 flag_N = res;
25653 DREGu8((Opcode >> 9) & 7) = res;
25654 POST_IO
25655RET(12)
25656}
25657
25658// ORaD
25659OPCODE(0x803B)
25660{
25661 u32 adr, res;
25662 u32 src, dst;
25663
25664 adr = (u32)(PC) - BasePC;
25665 DECODE_EXT_WORD
25666 PRE_IO
25667 READ_BYTE_F(adr, src)
25668 res = DREGu8((Opcode >> 9) & 7);
25669 res |= src;
25670 flag_C = 0;
25671 flag_V = 0;
25672 flag_NotZ = res;
25673 flag_N = res;
25674 DREGu8((Opcode >> 9) & 7) = res;
25675 POST_IO
25676RET(14)
25677}
25678
25679// ORaD
25680OPCODE(0x803C)
25681{
25682 u32 adr, res;
25683 u32 src, dst;
25684
25685 FETCH_BYTE(src);
25686 res = DREGu8((Opcode >> 9) & 7);
25687 res |= src;
25688 flag_C = 0;
25689 flag_V = 0;
25690 flag_NotZ = res;
25691 flag_N = res;
25692 DREGu8((Opcode >> 9) & 7) = res;
25693RET(8)
25694}
25695
25696// ORaD
25697OPCODE(0x801F)
25698{
25699 u32 adr, res;
25700 u32 src, dst;
25701
25702 adr = AREG(7);
25703 AREG(7) += 2;
25704 PRE_IO
25705 READ_BYTE_F(adr, src)
25706 res = DREGu8((Opcode >> 9) & 7);
25707 res |= src;
25708 flag_C = 0;
25709 flag_V = 0;
25710 flag_NotZ = res;
25711 flag_N = res;
25712 DREGu8((Opcode >> 9) & 7) = res;
25713 POST_IO
25714RET(8)
25715}
25716
25717// ORaD
25718OPCODE(0x8027)
25719{
25720 u32 adr, res;
25721 u32 src, dst;
25722
25723 adr = AREG(7) - 2;
25724 AREG(7) = adr;
25725 PRE_IO
25726 READ_BYTE_F(adr, src)
25727 res = DREGu8((Opcode >> 9) & 7);
25728 res |= src;
25729 flag_C = 0;
25730 flag_V = 0;
25731 flag_NotZ = res;
25732 flag_N = res;
25733 DREGu8((Opcode >> 9) & 7) = res;
25734 POST_IO
25735RET(10)
25736}
25737
25738// ORaD
25739OPCODE(0x8040)
25740{
25741 u32 adr, res;
25742 u32 src, dst;
25743
25744 src = DREGu16((Opcode >> 0) & 7);
25745 res = DREGu16((Opcode >> 9) & 7);
25746 res |= src;
25747 flag_C = 0;
25748 flag_V = 0;
25749 flag_NotZ = res;
25750 flag_N = res >> 8;
25751 DREGu16((Opcode >> 9) & 7) = res;
25752RET(4)
25753}
25754
25755// ORaD
25756OPCODE(0x8050)
25757{
25758 u32 adr, res;
25759 u32 src, dst;
25760
25761 adr = AREG((Opcode >> 0) & 7);
25762 PRE_IO
25763 READ_WORD_F(adr, src)
25764 res = DREGu16((Opcode >> 9) & 7);
25765 res |= src;
25766 flag_C = 0;
25767 flag_V = 0;
25768 flag_NotZ = res;
25769 flag_N = res >> 8;
25770 DREGu16((Opcode >> 9) & 7) = res;
25771 POST_IO
25772RET(8)
25773}
25774
25775// ORaD
25776OPCODE(0x8058)
25777{
25778 u32 adr, res;
25779 u32 src, dst;
25780
25781 adr = AREG((Opcode >> 0) & 7);
25782 AREG((Opcode >> 0) & 7) += 2;
25783 PRE_IO
25784 READ_WORD_F(adr, src)
25785 res = DREGu16((Opcode >> 9) & 7);
25786 res |= src;
25787 flag_C = 0;
25788 flag_V = 0;
25789 flag_NotZ = res;
25790 flag_N = res >> 8;
25791 DREGu16((Opcode >> 9) & 7) = res;
25792 POST_IO
25793RET(8)
25794}
25795
25796// ORaD
25797OPCODE(0x8060)
25798{
25799 u32 adr, res;
25800 u32 src, dst;
25801
25802 adr = AREG((Opcode >> 0) & 7) - 2;
25803 AREG((Opcode >> 0) & 7) = adr;
25804 PRE_IO
25805 READ_WORD_F(adr, src)
25806 res = DREGu16((Opcode >> 9) & 7);
25807 res |= src;
25808 flag_C = 0;
25809 flag_V = 0;
25810 flag_NotZ = res;
25811 flag_N = res >> 8;
25812 DREGu16((Opcode >> 9) & 7) = res;
25813 POST_IO
25814RET(10)
25815}
25816
25817// ORaD
25818OPCODE(0x8068)
25819{
25820 u32 adr, res;
25821 u32 src, dst;
25822
25823 FETCH_SWORD(adr);
25824 adr += AREG((Opcode >> 0) & 7);
25825 PRE_IO
25826 READ_WORD_F(adr, src)
25827 res = DREGu16((Opcode >> 9) & 7);
25828 res |= src;
25829 flag_C = 0;
25830 flag_V = 0;
25831 flag_NotZ = res;
25832 flag_N = res >> 8;
25833 DREGu16((Opcode >> 9) & 7) = res;
25834 POST_IO
25835RET(12)
25836}
25837
25838// ORaD
25839OPCODE(0x8070)
25840{
25841 u32 adr, res;
25842 u32 src, dst;
25843
25844 adr = AREG((Opcode >> 0) & 7);
25845 DECODE_EXT_WORD
25846 PRE_IO
25847 READ_WORD_F(adr, src)
25848 res = DREGu16((Opcode >> 9) & 7);
25849 res |= src;
25850 flag_C = 0;
25851 flag_V = 0;
25852 flag_NotZ = res;
25853 flag_N = res >> 8;
25854 DREGu16((Opcode >> 9) & 7) = res;
25855 POST_IO
25856RET(14)
25857}
25858
25859// ORaD
25860OPCODE(0x8078)
25861{
25862 u32 adr, res;
25863 u32 src, dst;
25864
25865 FETCH_SWORD(adr);
25866 PRE_IO
25867 READ_WORD_F(adr, src)
25868 res = DREGu16((Opcode >> 9) & 7);
25869 res |= src;
25870 flag_C = 0;
25871 flag_V = 0;
25872 flag_NotZ = res;
25873 flag_N = res >> 8;
25874 DREGu16((Opcode >> 9) & 7) = res;
25875 POST_IO
25876RET(12)
25877}
25878
25879// ORaD
25880OPCODE(0x8079)
25881{
25882 u32 adr, res;
25883 u32 src, dst;
25884
25885 FETCH_LONG(adr);
25886 PRE_IO
25887 READ_WORD_F(adr, src)
25888 res = DREGu16((Opcode >> 9) & 7);
25889 res |= src;
25890 flag_C = 0;
25891 flag_V = 0;
25892 flag_NotZ = res;
25893 flag_N = res >> 8;
25894 DREGu16((Opcode >> 9) & 7) = res;
25895 POST_IO
25896RET(16)
25897}
25898
25899// ORaD
25900OPCODE(0x807A)
25901{
25902 u32 adr, res;
25903 u32 src, dst;
25904
25905 adr = GET_SWORD + ((u32)(PC) - BasePC);
25906 PC++;
25907 PRE_IO
25908 READ_WORD_F(adr, src)
25909 res = DREGu16((Opcode >> 9) & 7);
25910 res |= src;
25911 flag_C = 0;
25912 flag_V = 0;
25913 flag_NotZ = res;
25914 flag_N = res >> 8;
25915 DREGu16((Opcode >> 9) & 7) = res;
25916 POST_IO
25917RET(12)
25918}
25919
25920// ORaD
25921OPCODE(0x807B)
25922{
25923 u32 adr, res;
25924 u32 src, dst;
25925
25926 adr = (u32)(PC) - BasePC;
25927 DECODE_EXT_WORD
25928 PRE_IO
25929 READ_WORD_F(adr, src)
25930 res = DREGu16((Opcode >> 9) & 7);
25931 res |= src;
25932 flag_C = 0;
25933 flag_V = 0;
25934 flag_NotZ = res;
25935 flag_N = res >> 8;
25936 DREGu16((Opcode >> 9) & 7) = res;
25937 POST_IO
25938RET(14)
25939}
25940
25941// ORaD
25942OPCODE(0x807C)
25943{
25944 u32 adr, res;
25945 u32 src, dst;
25946
25947 FETCH_WORD(src);
25948 res = DREGu16((Opcode >> 9) & 7);
25949 res |= src;
25950 flag_C = 0;
25951 flag_V = 0;
25952 flag_NotZ = res;
25953 flag_N = res >> 8;
25954 DREGu16((Opcode >> 9) & 7) = res;
25955RET(8)
25956}
25957
25958// ORaD
25959OPCODE(0x805F)
25960{
25961 u32 adr, res;
25962 u32 src, dst;
25963
25964 adr = AREG(7);
25965 AREG(7) += 2;
25966 PRE_IO
25967 READ_WORD_F(adr, src)
25968 res = DREGu16((Opcode >> 9) & 7);
25969 res |= src;
25970 flag_C = 0;
25971 flag_V = 0;
25972 flag_NotZ = res;
25973 flag_N = res >> 8;
25974 DREGu16((Opcode >> 9) & 7) = res;
25975 POST_IO
25976RET(8)
25977}
25978
25979// ORaD
25980OPCODE(0x8067)
25981{
25982 u32 adr, res;
25983 u32 src, dst;
25984
25985 adr = AREG(7) - 2;
25986 AREG(7) = adr;
25987 PRE_IO
25988 READ_WORD_F(adr, src)
25989 res = DREGu16((Opcode >> 9) & 7);
25990 res |= src;
25991 flag_C = 0;
25992 flag_V = 0;
25993 flag_NotZ = res;
25994 flag_N = res >> 8;
25995 DREGu16((Opcode >> 9) & 7) = res;
25996 POST_IO
25997RET(10)
25998}
25999
26000// ORaD
26001OPCODE(0x8080)
26002{
26003 u32 adr, res;
26004 u32 src, dst;
26005
26006 src = DREGu32((Opcode >> 0) & 7);
26007 res = DREGu32((Opcode >> 9) & 7);
26008 res |= src;
26009 flag_C = 0;
26010 flag_V = 0;
26011 flag_NotZ = res;
26012 flag_N = res >> 24;
26013 DREGu32((Opcode >> 9) & 7) = res;
26014RET(8)
26015}
26016
26017// ORaD
26018OPCODE(0x8090)
26019{
26020 u32 adr, res;
26021 u32 src, dst;
26022
26023 adr = AREG((Opcode >> 0) & 7);
26024 PRE_IO
26025 READ_LONG_F(adr, src)
26026 res = DREGu32((Opcode >> 9) & 7);
26027 res |= src;
26028 flag_C = 0;
26029 flag_V = 0;
26030 flag_NotZ = res;
26031 flag_N = res >> 24;
26032 DREGu32((Opcode >> 9) & 7) = res;
26033 POST_IO
26034RET(14)
26035}
26036
26037// ORaD
26038OPCODE(0x8098)
26039{
26040 u32 adr, res;
26041 u32 src, dst;
26042
26043 adr = AREG((Opcode >> 0) & 7);
26044 AREG((Opcode >> 0) & 7) += 4;
26045 PRE_IO
26046 READ_LONG_F(adr, src)
26047 res = DREGu32((Opcode >> 9) & 7);
26048 res |= src;
26049 flag_C = 0;
26050 flag_V = 0;
26051 flag_NotZ = res;
26052 flag_N = res >> 24;
26053 DREGu32((Opcode >> 9) & 7) = res;
26054 POST_IO
26055RET(14)
26056}
26057
26058// ORaD
26059OPCODE(0x80A0)
26060{
26061 u32 adr, res;
26062 u32 src, dst;
26063
26064 adr = AREG((Opcode >> 0) & 7) - 4;
26065 AREG((Opcode >> 0) & 7) = adr;
26066 PRE_IO
26067 READ_LONG_F(adr, src)
26068 res = DREGu32((Opcode >> 9) & 7);
26069 res |= src;
26070 flag_C = 0;
26071 flag_V = 0;
26072 flag_NotZ = res;
26073 flag_N = res >> 24;
26074 DREGu32((Opcode >> 9) & 7) = res;
26075 POST_IO
26076RET(16)
26077}
26078
26079// ORaD
26080OPCODE(0x80A8)
26081{
26082 u32 adr, res;
26083 u32 src, dst;
26084
26085 FETCH_SWORD(adr);
26086 adr += AREG((Opcode >> 0) & 7);
26087 PRE_IO
26088 READ_LONG_F(adr, src)
26089 res = DREGu32((Opcode >> 9) & 7);
26090 res |= src;
26091 flag_C = 0;
26092 flag_V = 0;
26093 flag_NotZ = res;
26094 flag_N = res >> 24;
26095 DREGu32((Opcode >> 9) & 7) = res;
26096 POST_IO
26097RET(18)
26098}
26099
26100// ORaD
26101OPCODE(0x80B0)
26102{
26103 u32 adr, res;
26104 u32 src, dst;
26105
26106 adr = AREG((Opcode >> 0) & 7);
26107 DECODE_EXT_WORD
26108 PRE_IO
26109 READ_LONG_F(adr, src)
26110 res = DREGu32((Opcode >> 9) & 7);
26111 res |= src;
26112 flag_C = 0;
26113 flag_V = 0;
26114 flag_NotZ = res;
26115 flag_N = res >> 24;
26116 DREGu32((Opcode >> 9) & 7) = res;
26117 POST_IO
26118RET(20)
26119}
26120
26121// ORaD
26122OPCODE(0x80B8)
26123{
26124 u32 adr, res;
26125 u32 src, dst;
26126
26127 FETCH_SWORD(adr);
26128 PRE_IO
26129 READ_LONG_F(adr, src)
26130 res = DREGu32((Opcode >> 9) & 7);
26131 res |= src;
26132 flag_C = 0;
26133 flag_V = 0;
26134 flag_NotZ = res;
26135 flag_N = res >> 24;
26136 DREGu32((Opcode >> 9) & 7) = res;
26137 POST_IO
26138RET(18)
26139}
26140
26141// ORaD
26142OPCODE(0x80B9)
26143{
26144 u32 adr, res;
26145 u32 src, dst;
26146
26147 FETCH_LONG(adr);
26148 PRE_IO
26149 READ_LONG_F(adr, src)
26150 res = DREGu32((Opcode >> 9) & 7);
26151 res |= src;
26152 flag_C = 0;
26153 flag_V = 0;
26154 flag_NotZ = res;
26155 flag_N = res >> 24;
26156 DREGu32((Opcode >> 9) & 7) = res;
26157 POST_IO
26158RET(22)
26159}
26160
26161// ORaD
26162OPCODE(0x80BA)
26163{
26164 u32 adr, res;
26165 u32 src, dst;
26166
26167 adr = GET_SWORD + ((u32)(PC) - BasePC);
26168 PC++;
26169 PRE_IO
26170 READ_LONG_F(adr, src)
26171 res = DREGu32((Opcode >> 9) & 7);
26172 res |= src;
26173 flag_C = 0;
26174 flag_V = 0;
26175 flag_NotZ = res;
26176 flag_N = res >> 24;
26177 DREGu32((Opcode >> 9) & 7) = res;
26178 POST_IO
26179RET(18)
26180}
26181
26182// ORaD
26183OPCODE(0x80BB)
26184{
26185 u32 adr, res;
26186 u32 src, dst;
26187
26188 adr = (u32)(PC) - BasePC;
26189 DECODE_EXT_WORD
26190 PRE_IO
26191 READ_LONG_F(adr, src)
26192 res = DREGu32((Opcode >> 9) & 7);
26193 res |= src;
26194 flag_C = 0;
26195 flag_V = 0;
26196 flag_NotZ = res;
26197 flag_N = res >> 24;
26198 DREGu32((Opcode >> 9) & 7) = res;
26199 POST_IO
26200RET(20)
26201}
26202
26203// ORaD
26204OPCODE(0x80BC)
26205{
26206 u32 adr, res;
26207 u32 src, dst;
26208
26209 FETCH_LONG(src);
26210 res = DREGu32((Opcode >> 9) & 7);
26211 res |= src;
26212 flag_C = 0;
26213 flag_V = 0;
26214 flag_NotZ = res;
26215 flag_N = res >> 24;
26216 DREGu32((Opcode >> 9) & 7) = res;
26217RET(16)
26218}
26219
26220// ORaD
26221OPCODE(0x809F)
26222{
26223 u32 adr, res;
26224 u32 src, dst;
26225
26226 adr = AREG(7);
26227 AREG(7) += 4;
26228 PRE_IO
26229 READ_LONG_F(adr, src)
26230 res = DREGu32((Opcode >> 9) & 7);
26231 res |= src;
26232 flag_C = 0;
26233 flag_V = 0;
26234 flag_NotZ = res;
26235 flag_N = res >> 24;
26236 DREGu32((Opcode >> 9) & 7) = res;
26237 POST_IO
26238RET(14)
26239}
26240
26241// ORaD
26242OPCODE(0x80A7)
26243{
26244 u32 adr, res;
26245 u32 src, dst;
26246
26247 adr = AREG(7) - 4;
26248 AREG(7) = adr;
26249 PRE_IO
26250 READ_LONG_F(adr, src)
26251 res = DREGu32((Opcode >> 9) & 7);
26252 res |= src;
26253 flag_C = 0;
26254 flag_V = 0;
26255 flag_NotZ = res;
26256 flag_N = res >> 24;
26257 DREGu32((Opcode >> 9) & 7) = res;
26258 POST_IO
26259RET(16)
26260}
26261
26262// ORDa
26263OPCODE(0x8110)
26264{
26265 u32 adr, res;
26266 u32 src, dst;
26267
26268 src = DREGu8((Opcode >> 9) & 7);
26269 adr = AREG((Opcode >> 0) & 7);
26270 PRE_IO
26271 READ_BYTE_F(adr, res)
26272 res |= src;
26273 flag_C = 0;
26274 flag_V = 0;
26275 flag_NotZ = res;
26276 flag_N = res;
26277 WRITE_BYTE_F(adr, res)
26278 POST_IO
26279RET(12)
26280}
26281
26282// ORDa
26283OPCODE(0x8118)
26284{
26285 u32 adr, res;
26286 u32 src, dst;
26287
26288 src = DREGu8((Opcode >> 9) & 7);
26289 adr = AREG((Opcode >> 0) & 7);
26290 AREG((Opcode >> 0) & 7) += 1;
26291 PRE_IO
26292 READ_BYTE_F(adr, res)
26293 res |= src;
26294 flag_C = 0;
26295 flag_V = 0;
26296 flag_NotZ = res;
26297 flag_N = res;
26298 WRITE_BYTE_F(adr, res)
26299 POST_IO
26300RET(12)
26301}
26302
26303// ORDa
26304OPCODE(0x8120)
26305{
26306 u32 adr, res;
26307 u32 src, dst;
26308
26309 src = DREGu8((Opcode >> 9) & 7);
26310 adr = AREG((Opcode >> 0) & 7) - 1;
26311 AREG((Opcode >> 0) & 7) = adr;
26312 PRE_IO
26313 READ_BYTE_F(adr, res)
26314 res |= src;
26315 flag_C = 0;
26316 flag_V = 0;
26317 flag_NotZ = res;
26318 flag_N = res;
26319 WRITE_BYTE_F(adr, res)
26320 POST_IO
26321RET(14)
26322}
26323
26324// ORDa
26325OPCODE(0x8128)
26326{
26327 u32 adr, res;
26328 u32 src, dst;
26329
26330 src = DREGu8((Opcode >> 9) & 7);
26331 FETCH_SWORD(adr);
26332 adr += AREG((Opcode >> 0) & 7);
26333 PRE_IO
26334 READ_BYTE_F(adr, res)
26335 res |= src;
26336 flag_C = 0;
26337 flag_V = 0;
26338 flag_NotZ = res;
26339 flag_N = res;
26340 WRITE_BYTE_F(adr, res)
26341 POST_IO
26342RET(16)
26343}
26344
26345// ORDa
26346OPCODE(0x8130)
26347{
26348 u32 adr, res;
26349 u32 src, dst;
26350
26351 src = DREGu8((Opcode >> 9) & 7);
26352 adr = AREG((Opcode >> 0) & 7);
26353 DECODE_EXT_WORD
26354 PRE_IO
26355 READ_BYTE_F(adr, res)
26356 res |= src;
26357 flag_C = 0;
26358 flag_V = 0;
26359 flag_NotZ = res;
26360 flag_N = res;
26361 WRITE_BYTE_F(adr, res)
26362 POST_IO
26363RET(18)
26364}
26365
26366// ORDa
26367OPCODE(0x8138)
26368{
26369 u32 adr, res;
26370 u32 src, dst;
26371
26372 src = DREGu8((Opcode >> 9) & 7);
26373 FETCH_SWORD(adr);
26374 PRE_IO
26375 READ_BYTE_F(adr, res)
26376 res |= src;
26377 flag_C = 0;
26378 flag_V = 0;
26379 flag_NotZ = res;
26380 flag_N = res;
26381 WRITE_BYTE_F(adr, res)
26382 POST_IO
26383RET(16)
26384}
26385
26386// ORDa
26387OPCODE(0x8139)
26388{
26389 u32 adr, res;
26390 u32 src, dst;
26391
26392 src = DREGu8((Opcode >> 9) & 7);
26393 FETCH_LONG(adr);
26394 PRE_IO
26395 READ_BYTE_F(adr, res)
26396 res |= src;
26397 flag_C = 0;
26398 flag_V = 0;
26399 flag_NotZ = res;
26400 flag_N = res;
26401 WRITE_BYTE_F(adr, res)
26402 POST_IO
26403RET(20)
26404}
26405
26406// ORDa
26407OPCODE(0x811F)
26408{
26409 u32 adr, res;
26410 u32 src, dst;
26411
26412 src = DREGu8((Opcode >> 9) & 7);
26413 adr = AREG(7);
26414 AREG(7) += 2;
26415 PRE_IO
26416 READ_BYTE_F(adr, res)
26417 res |= src;
26418 flag_C = 0;
26419 flag_V = 0;
26420 flag_NotZ = res;
26421 flag_N = res;
26422 WRITE_BYTE_F(adr, res)
26423 POST_IO
26424RET(12)
26425}
26426
26427// ORDa
26428OPCODE(0x8127)
26429{
26430 u32 adr, res;
26431 u32 src, dst;
26432
26433 src = DREGu8((Opcode >> 9) & 7);
26434 adr = AREG(7) - 2;
26435 AREG(7) = adr;
26436 PRE_IO
26437 READ_BYTE_F(adr, res)
26438 res |= src;
26439 flag_C = 0;
26440 flag_V = 0;
26441 flag_NotZ = res;
26442 flag_N = res;
26443 WRITE_BYTE_F(adr, res)
26444 POST_IO
26445RET(14)
26446}
26447
26448// ORDa
26449OPCODE(0x8150)
26450{
26451 u32 adr, res;
26452 u32 src, dst;
26453
26454 src = DREGu16((Opcode >> 9) & 7);
26455 adr = AREG((Opcode >> 0) & 7);
26456 PRE_IO
26457 READ_WORD_F(adr, res)
26458 res |= src;
26459 flag_C = 0;
26460 flag_V = 0;
26461 flag_NotZ = res;
26462 flag_N = res >> 8;
26463 WRITE_WORD_F(adr, res)
26464 POST_IO
26465RET(12)
26466}
26467
26468// ORDa
26469OPCODE(0x8158)
26470{
26471 u32 adr, res;
26472 u32 src, dst;
26473
26474 src = DREGu16((Opcode >> 9) & 7);
26475 adr = AREG((Opcode >> 0) & 7);
26476 AREG((Opcode >> 0) & 7) += 2;
26477 PRE_IO
26478 READ_WORD_F(adr, res)
26479 res |= src;
26480 flag_C = 0;
26481 flag_V = 0;
26482 flag_NotZ = res;
26483 flag_N = res >> 8;
26484 WRITE_WORD_F(adr, res)
26485 POST_IO
26486RET(12)
26487}
26488
26489// ORDa
26490OPCODE(0x8160)
26491{
26492 u32 adr, res;
26493 u32 src, dst;
26494
26495 src = DREGu16((Opcode >> 9) & 7);
26496 adr = AREG((Opcode >> 0) & 7) - 2;
26497 AREG((Opcode >> 0) & 7) = adr;
26498 PRE_IO
26499 READ_WORD_F(adr, res)
26500 res |= src;
26501 flag_C = 0;
26502 flag_V = 0;
26503 flag_NotZ = res;
26504 flag_N = res >> 8;
26505 WRITE_WORD_F(adr, res)
26506 POST_IO
26507RET(14)
26508}
26509
26510// ORDa
26511OPCODE(0x8168)
26512{
26513 u32 adr, res;
26514 u32 src, dst;
26515
26516 src = DREGu16((Opcode >> 9) & 7);
26517 FETCH_SWORD(adr);
26518 adr += AREG((Opcode >> 0) & 7);
26519 PRE_IO
26520 READ_WORD_F(adr, res)
26521 res |= src;
26522 flag_C = 0;
26523 flag_V = 0;
26524 flag_NotZ = res;
26525 flag_N = res >> 8;
26526 WRITE_WORD_F(adr, res)
26527 POST_IO
26528RET(16)
26529}
26530
26531// ORDa
26532OPCODE(0x8170)
26533{
26534 u32 adr, res;
26535 u32 src, dst;
26536
26537 src = DREGu16((Opcode >> 9) & 7);
26538 adr = AREG((Opcode >> 0) & 7);
26539 DECODE_EXT_WORD
26540 PRE_IO
26541 READ_WORD_F(adr, res)
26542 res |= src;
26543 flag_C = 0;
26544 flag_V = 0;
26545 flag_NotZ = res;
26546 flag_N = res >> 8;
26547 WRITE_WORD_F(adr, res)
26548 POST_IO
26549RET(18)
26550}
26551
26552// ORDa
26553OPCODE(0x8178)
26554{
26555 u32 adr, res;
26556 u32 src, dst;
26557
26558 src = DREGu16((Opcode >> 9) & 7);
26559 FETCH_SWORD(adr);
26560 PRE_IO
26561 READ_WORD_F(adr, res)
26562 res |= src;
26563 flag_C = 0;
26564 flag_V = 0;
26565 flag_NotZ = res;
26566 flag_N = res >> 8;
26567 WRITE_WORD_F(adr, res)
26568 POST_IO
26569RET(16)
26570}
26571
26572// ORDa
26573OPCODE(0x8179)
26574{
26575 u32 adr, res;
26576 u32 src, dst;
26577
26578 src = DREGu16((Opcode >> 9) & 7);
26579 FETCH_LONG(adr);
26580 PRE_IO
26581 READ_WORD_F(adr, res)
26582 res |= src;
26583 flag_C = 0;
26584 flag_V = 0;
26585 flag_NotZ = res;
26586 flag_N = res >> 8;
26587 WRITE_WORD_F(adr, res)
26588 POST_IO
26589RET(20)
26590}
26591
26592// ORDa
26593OPCODE(0x815F)
26594{
26595 u32 adr, res;
26596 u32 src, dst;
26597
26598 src = DREGu16((Opcode >> 9) & 7);
26599 adr = AREG(7);
26600 AREG(7) += 2;
26601 PRE_IO
26602 READ_WORD_F(adr, res)
26603 res |= src;
26604 flag_C = 0;
26605 flag_V = 0;
26606 flag_NotZ = res;
26607 flag_N = res >> 8;
26608 WRITE_WORD_F(adr, res)
26609 POST_IO
26610RET(12)
26611}
26612
26613// ORDa
26614OPCODE(0x8167)
26615{
26616 u32 adr, res;
26617 u32 src, dst;
26618
26619 src = DREGu16((Opcode >> 9) & 7);
26620 adr = AREG(7) - 2;
26621 AREG(7) = adr;
26622 PRE_IO
26623 READ_WORD_F(adr, res)
26624 res |= src;
26625 flag_C = 0;
26626 flag_V = 0;
26627 flag_NotZ = res;
26628 flag_N = res >> 8;
26629 WRITE_WORD_F(adr, res)
26630 POST_IO
26631RET(14)
26632}
26633
26634// ORDa
26635OPCODE(0x8190)
26636{
26637 u32 adr, res;
26638 u32 src, dst;
26639
26640 src = DREGu32((Opcode >> 9) & 7);
26641 adr = AREG((Opcode >> 0) & 7);
26642 PRE_IO
26643 READ_LONG_F(adr, res)
26644 res |= src;
26645 flag_C = 0;
26646 flag_V = 0;
26647 flag_NotZ = res;
26648 flag_N = res >> 24;
26649 WRITE_LONG_F(adr, res)
26650 POST_IO
26651RET(20)
26652}
26653
26654// ORDa
26655OPCODE(0x8198)
26656{
26657 u32 adr, res;
26658 u32 src, dst;
26659
26660 src = DREGu32((Opcode >> 9) & 7);
26661 adr = AREG((Opcode >> 0) & 7);
26662 AREG((Opcode >> 0) & 7) += 4;
26663 PRE_IO
26664 READ_LONG_F(adr, res)
26665 res |= src;
26666 flag_C = 0;
26667 flag_V = 0;
26668 flag_NotZ = res;
26669 flag_N = res >> 24;
26670 WRITE_LONG_F(adr, res)
26671 POST_IO
26672RET(20)
26673}
26674
26675// ORDa
26676OPCODE(0x81A0)
26677{
26678 u32 adr, res;
26679 u32 src, dst;
26680
26681 src = DREGu32((Opcode >> 9) & 7);
26682 adr = AREG((Opcode >> 0) & 7) - 4;
26683 AREG((Opcode >> 0) & 7) = adr;
26684 PRE_IO
26685 READ_LONG_F(adr, res)
26686 res |= src;
26687 flag_C = 0;
26688 flag_V = 0;
26689 flag_NotZ = res;
26690 flag_N = res >> 24;
26691 WRITE_LONG_F(adr, res)
26692 POST_IO
26693RET(22)
26694}
26695
26696// ORDa
26697OPCODE(0x81A8)
26698{
26699 u32 adr, res;
26700 u32 src, dst;
26701
26702 src = DREGu32((Opcode >> 9) & 7);
26703 FETCH_SWORD(adr);
26704 adr += AREG((Opcode >> 0) & 7);
26705 PRE_IO
26706 READ_LONG_F(adr, res)
26707 res |= src;
26708 flag_C = 0;
26709 flag_V = 0;
26710 flag_NotZ = res;
26711 flag_N = res >> 24;
26712 WRITE_LONG_F(adr, res)
26713 POST_IO
26714RET(24)
26715}
26716
26717// ORDa
26718OPCODE(0x81B0)
26719{
26720 u32 adr, res;
26721 u32 src, dst;
26722
26723 src = DREGu32((Opcode >> 9) & 7);
26724 adr = AREG((Opcode >> 0) & 7);
26725 DECODE_EXT_WORD
26726 PRE_IO
26727 READ_LONG_F(adr, res)
26728 res |= src;
26729 flag_C = 0;
26730 flag_V = 0;
26731 flag_NotZ = res;
26732 flag_N = res >> 24;
26733 WRITE_LONG_F(adr, res)
26734 POST_IO
26735RET(26)
26736}
26737
26738// ORDa
26739OPCODE(0x81B8)
26740{
26741 u32 adr, res;
26742 u32 src, dst;
26743
26744 src = DREGu32((Opcode >> 9) & 7);
26745 FETCH_SWORD(adr);
26746 PRE_IO
26747 READ_LONG_F(adr, res)
26748 res |= src;
26749 flag_C = 0;
26750 flag_V = 0;
26751 flag_NotZ = res;
26752 flag_N = res >> 24;
26753 WRITE_LONG_F(adr, res)
26754 POST_IO
26755RET(24)
26756}
26757
26758// ORDa
26759OPCODE(0x81B9)
26760{
26761 u32 adr, res;
26762 u32 src, dst;
26763
26764 src = DREGu32((Opcode >> 9) & 7);
26765 FETCH_LONG(adr);
26766 PRE_IO
26767 READ_LONG_F(adr, res)
26768 res |= src;
26769 flag_C = 0;
26770 flag_V = 0;
26771 flag_NotZ = res;
26772 flag_N = res >> 24;
26773 WRITE_LONG_F(adr, res)
26774 POST_IO
26775RET(28)
26776}
26777
26778// ORDa
26779OPCODE(0x819F)
26780{
26781 u32 adr, res;
26782 u32 src, dst;
26783
26784 src = DREGu32((Opcode >> 9) & 7);
26785 adr = AREG(7);
26786 AREG(7) += 4;
26787 PRE_IO
26788 READ_LONG_F(adr, res)
26789 res |= src;
26790 flag_C = 0;
26791 flag_V = 0;
26792 flag_NotZ = res;
26793 flag_N = res >> 24;
26794 WRITE_LONG_F(adr, res)
26795 POST_IO
26796RET(20)
26797}
26798
26799// ORDa
26800OPCODE(0x81A7)
26801{
26802 u32 adr, res;
26803 u32 src, dst;
26804
26805 src = DREGu32((Opcode >> 9) & 7);
26806 adr = AREG(7) - 4;
26807 AREG(7) = adr;
26808 PRE_IO
26809 READ_LONG_F(adr, res)
26810 res |= src;
26811 flag_C = 0;
26812 flag_V = 0;
26813 flag_NotZ = res;
26814 flag_N = res >> 24;
26815 WRITE_LONG_F(adr, res)
26816 POST_IO
26817RET(22)
26818}
26819
26820// SBCD
26821OPCODE(0x8100)
26822{
26823 u32 adr, res;
26824 u32 src, dst;
26825
26826 src = DREGu8((Opcode >> 0) & 7);
26827 dst = DREGu8((Opcode >> 9) & 7);
26828 res = (dst & 0xF) - (src & 0xF) - ((flag_X >> M68K_SR_X_SFT) & 1);
26829 if (res > 9) res -= 6;
26830 res += (dst & 0xF0) - (src & 0xF0);
26831 if (res > 0x99)
26832 {
26833 res += 0xA0;
26834 flag_X = flag_C = M68K_SR_C;
26835 }
26836 else flag_X = flag_C = 0;
26837 flag_NotZ |= res & 0xFF;
26838 flag_N = res;
26839 DREGu8((Opcode >> 9) & 7) = res;
26840RET(6)
26841}
26842
26843// SBCDM
26844OPCODE(0x8108)
26845{
26846 u32 adr, res;
26847 u32 src, dst;
26848
26849 adr = AREG((Opcode >> 0) & 7) - 1;
26850 AREG((Opcode >> 0) & 7) = adr;
26851 PRE_IO
26852 READ_BYTE_F(adr, src)
26853 adr = AREG((Opcode >> 9) & 7) - 1;
26854 AREG((Opcode >> 9) & 7) = adr;
26855 READ_BYTE_F(adr, dst)
26856 res = (dst & 0xF) - (src & 0xF) - ((flag_X >> M68K_SR_X_SFT) & 1);
26857 if (res > 9) res -= 6;
26858 res += (dst & 0xF0) - (src & 0xF0);
26859 if (res > 0x99)
26860 {
26861 res += 0xA0;
26862 flag_X = flag_C = M68K_SR_C;
26863 }
26864 else flag_X = flag_C = 0;
26865 flag_NotZ |= res & 0xFF;
26866 flag_N = res;
26867 WRITE_BYTE_F(adr, res)
26868 POST_IO
26869RET(18)
26870}
26871
26872// SBCD7M
26873OPCODE(0x810F)
26874{
26875 u32 adr, res;
26876 u32 src, dst;
26877
26878 adr = AREG(7) - 2;
26879 AREG(7) = adr;
26880 PRE_IO
26881 READ_BYTE_F(adr, src)
26882 adr = AREG((Opcode >> 9) & 7) - 1;
26883 AREG((Opcode >> 9) & 7) = adr;
26884 READ_BYTE_F(adr, dst)
26885 res = (dst & 0xF) - (src & 0xF) - ((flag_X >> M68K_SR_X_SFT) & 1);
26886 if (res > 9) res -= 6;
26887 res += (dst & 0xF0) - (src & 0xF0);
26888 if (res > 0x99)
26889 {
26890 res += 0xA0;
26891 flag_X = flag_C = M68K_SR_C;
26892 }
26893 else flag_X = flag_C = 0;
26894 flag_NotZ |= res & 0xFF;
26895 flag_N = res;
26896 WRITE_BYTE_F(adr, res)
26897 POST_IO
26898RET(18)
26899}
26900
26901// SBCDM7
26902OPCODE(0x8F08)
26903{
26904 u32 adr, res;
26905 u32 src, dst;
26906
26907 adr = AREG((Opcode >> 0) & 7) - 1;
26908 AREG((Opcode >> 0) & 7) = adr;
26909 PRE_IO
26910 READ_BYTE_F(adr, src)
26911 adr = AREG(7) - 2;
26912 AREG(7) = adr;
26913 READ_BYTE_F(adr, dst)
26914 res = (dst & 0xF) - (src & 0xF) - ((flag_X >> M68K_SR_X_SFT) & 1);
26915 if (res > 9) res -= 6;
26916 res += (dst & 0xF0) - (src & 0xF0);
26917 if (res > 0x99)
26918 {
26919 res += 0xA0;
26920 flag_X = flag_C = M68K_SR_C;
26921 }
26922 else flag_X = flag_C = 0;
26923 flag_NotZ |= res & 0xFF;
26924 flag_N = res;
26925 WRITE_BYTE_F(adr, res)
26926 POST_IO
26927RET(18)
26928}
26929
26930// SBCD7M7
26931OPCODE(0x8F0F)
26932{
26933 u32 adr, res;
26934 u32 src, dst;
26935
26936 adr = AREG(7) - 2;
26937 AREG(7) = adr;
26938 PRE_IO
26939 READ_BYTE_F(adr, src)
26940 adr = AREG(7) - 2;
26941 AREG(7) = adr;
26942 READ_BYTE_F(adr, dst)
26943 res = (dst & 0xF) - (src & 0xF) - ((flag_X >> M68K_SR_X_SFT) & 1);
26944 if (res > 9) res -= 6;
26945 res += (dst & 0xF0) - (src & 0xF0);
26946 if (res > 0x99)
26947 {
26948 res += 0xA0;
26949 flag_X = flag_C = M68K_SR_C;
26950 }
26951 else flag_X = flag_C = 0;
26952 flag_NotZ |= res & 0xFF;
26953 flag_N = res;
26954 WRITE_BYTE_F(adr, res)
26955 POST_IO
26956RET(18)
26957}
26958
26959// DIVU
26960OPCODE(0x80C0)
26961{
26962 u32 adr, res;
26963 u32 src, dst;
26964
26965 src = DREGu16((Opcode >> 0) & 7);
26966 if (src == 0)
26967 {
26968 execute_exception(M68K_ZERO_DIVIDE_EX);
26969#ifdef USE_CYCLONE_TIMING_DIV
26970RET(140)
26971#else
26972RET(10)
26973#endif
26974 }
26975 dst = DREGu32((Opcode >> 9) & 7);
26976 {
26977 u32 q, r;
26978
26979 q = dst / src;
26980 r = dst % src;
26981
26982 if (q & 0xFFFF0000)
26983 {
26984 flag_V = M68K_SR_V;
26985#ifdef USE_CYCLONE_TIMING_DIV
26986RET(140)
26987#else
26988RET(70)
26989#endif
26990 }
26991 q &= 0x0000FFFF;
26992 flag_NotZ = q;
26993 flag_N = q >> 8;
26994 flag_V = flag_C = 0;
26995 res = q | (r << 16);
26996 DREGu32((Opcode >> 9) & 7) = res;
26997 }
26998#ifdef USE_CYCLONE_TIMING_DIV
26999RET(140)
27000#else
27001RET(90)
27002#endif
27003}
27004
27005// DIVU
27006OPCODE(0x80D0)
27007{
27008 u32 adr, res;
27009 u32 src, dst;
27010
27011 adr = AREG((Opcode >> 0) & 7);
27012 PRE_IO
27013 READ_WORD_F(adr, src)
27014 if (src == 0)
27015 {
27016 execute_exception(M68K_ZERO_DIVIDE_EX);
27017#ifdef USE_CYCLONE_TIMING_DIV
27018RET(144)
27019#else
27020RET(14)
27021#endif
27022 }
27023 dst = DREGu32((Opcode >> 9) & 7);
27024 {
27025 u32 q, r;
27026
27027 q = dst / src;
27028 r = dst % src;
27029
27030 if (q & 0xFFFF0000)
27031 {
27032 flag_V = M68K_SR_V;
27033#ifdef USE_CYCLONE_TIMING_DIV
27034RET(144)
27035#else
27036 RET(74)
27037#endif
27038 }
27039 q &= 0x0000FFFF;
27040 flag_NotZ = q;
27041 flag_N = q >> 8;
27042 flag_V = flag_C = 0;
27043 res = q | (r << 16);
27044 DREGu32((Opcode >> 9) & 7) = res;
27045 }
27046#ifdef USE_CYCLONE_TIMING_DIV
27047RET(144)
27048#else
27049RET(94)
27050#endif
27051}
27052
27053// DIVU
27054OPCODE(0x80D8)
27055{
27056 u32 adr, res;
27057 u32 src, dst;
27058
27059 adr = AREG((Opcode >> 0) & 7);
27060 AREG((Opcode >> 0) & 7) += 2;
27061 PRE_IO
27062 READ_WORD_F(adr, src)
27063 if (src == 0)
27064 {
27065 execute_exception(M68K_ZERO_DIVIDE_EX);
27066#ifdef USE_CYCLONE_TIMING_DIV
27067RET(144)
27068#else
27069RET(14)
27070#endif
27071 }
27072 dst = DREGu32((Opcode >> 9) & 7);
27073 {
27074 u32 q, r;
27075
27076 q = dst / src;
27077 r = dst % src;
27078
27079 if (q & 0xFFFF0000)
27080 {
27081 flag_V = M68K_SR_V;
27082#ifdef USE_CYCLONE_TIMING_DIV
27083RET(144)
27084#else
27085 RET(74)
27086#endif
27087 }
27088 q &= 0x0000FFFF;
27089 flag_NotZ = q;
27090 flag_N = q >> 8;
27091 flag_V = flag_C = 0;
27092 res = q | (r << 16);
27093 DREGu32((Opcode >> 9) & 7) = res;
27094 }
27095#ifdef USE_CYCLONE_TIMING_DIV
27096RET(144)
27097#else
27098RET(94)
27099#endif
27100}
27101
27102// DIVU
27103OPCODE(0x80E0)
27104{
27105 u32 adr, res;
27106 u32 src, dst;
27107
27108 adr = AREG((Opcode >> 0) & 7) - 2;
27109 AREG((Opcode >> 0) & 7) = adr;
27110 PRE_IO
27111 READ_WORD_F(adr, src)
27112 if (src == 0)
27113 {
27114 execute_exception(M68K_ZERO_DIVIDE_EX);
27115#ifdef USE_CYCLONE_TIMING_DIV
27116RET(146)
27117#else
27118RET(16)
27119#endif
27120 }
27121 dst = DREGu32((Opcode >> 9) & 7);
27122 {
27123 u32 q, r;
27124
27125 q = dst / src;
27126 r = dst % src;
27127
27128 if (q & 0xFFFF0000)
27129 {
27130 flag_V = M68K_SR_V;
27131#ifdef USE_CYCLONE_TIMING_DIV
27132RET(146)
27133#else
27134 RET(76)
27135#endif
27136 }
27137 q &= 0x0000FFFF;
27138 flag_NotZ = q;
27139 flag_N = q >> 8;
27140 flag_V = flag_C = 0;
27141 res = q | (r << 16);
27142 DREGu32((Opcode >> 9) & 7) = res;
27143 }
27144#ifdef USE_CYCLONE_TIMING_DIV
27145RET(146)
27146#else
27147RET(96)
27148#endif
27149}
27150
27151// DIVU
27152OPCODE(0x80E8)
27153{
27154 u32 adr, res;
27155 u32 src, dst;
27156
27157 FETCH_SWORD(adr);
27158 adr += AREG((Opcode >> 0) & 7);
27159 PRE_IO
27160 READ_WORD_F(adr, src)
27161 if (src == 0)
27162 {
27163 execute_exception(M68K_ZERO_DIVIDE_EX);
27164#ifdef USE_CYCLONE_TIMING_DIV
27165RET(148)
27166#else
27167RET(18)
27168#endif
27169 }
27170 dst = DREGu32((Opcode >> 9) & 7);
27171 {
27172 u32 q, r;
27173
27174 q = dst / src;
27175 r = dst % src;
27176
27177 if (q & 0xFFFF0000)
27178 {
27179 flag_V = M68K_SR_V;
27180#ifdef USE_CYCLONE_TIMING_DIV
27181RET(148)
27182#else
27183 RET(78)
27184#endif
27185 }
27186 q &= 0x0000FFFF;
27187 flag_NotZ = q;
27188 flag_N = q >> 8;
27189 flag_V = flag_C = 0;
27190 res = q | (r << 16);
27191 DREGu32((Opcode >> 9) & 7) = res;
27192 }
27193#ifdef USE_CYCLONE_TIMING_DIV
27194RET(148)
27195#else
27196RET(98)
27197#endif
27198}
27199
27200// DIVU
27201OPCODE(0x80F0)
27202{
27203 u32 adr, res;
27204 u32 src, dst;
27205
27206 adr = AREG((Opcode >> 0) & 7);
27207 DECODE_EXT_WORD
27208 PRE_IO
27209 READ_WORD_F(adr, src)
27210 if (src == 0)
27211 {
27212 execute_exception(M68K_ZERO_DIVIDE_EX);
27213#ifdef USE_CYCLONE_TIMING_DIV
27214RET(150)
27215#else
27216RET(20)
27217#endif
27218 }
27219 dst = DREGu32((Opcode >> 9) & 7);
27220 {
27221 u32 q, r;
27222
27223 q = dst / src;
27224 r = dst % src;
27225
27226 if (q & 0xFFFF0000)
27227 {
27228 flag_V = M68K_SR_V;
27229#ifdef USE_CYCLONE_TIMING_DIV
27230RET(150)
27231#else
27232 RET(80)
27233#endif
27234 }
27235 q &= 0x0000FFFF;
27236 flag_NotZ = q;
27237 flag_N = q >> 8;
27238 flag_V = flag_C = 0;
27239 res = q | (r << 16);
27240 DREGu32((Opcode >> 9) & 7) = res;
27241 }
27242#ifdef USE_CYCLONE_TIMING_DIV
27243RET(150)
27244#else
27245RET(100)
27246#endif
27247}
27248
27249// DIVU
27250OPCODE(0x80F8)
27251{
27252 u32 adr, res;
27253 u32 src, dst;
27254
27255 FETCH_SWORD(adr);
27256 PRE_IO
27257 READ_WORD_F(adr, src)
27258 if (src == 0)
27259 {
27260 execute_exception(M68K_ZERO_DIVIDE_EX);
27261#ifdef USE_CYCLONE_TIMING_DIV
27262RET(148)
27263#else
27264RET(18)
27265#endif
27266 }
27267 dst = DREGu32((Opcode >> 9) & 7);
27268 {
27269 u32 q, r;
27270
27271 q = dst / src;
27272 r = dst % src;
27273
27274 if (q & 0xFFFF0000)
27275 {
27276 flag_V = M68K_SR_V;
27277#ifdef USE_CYCLONE_TIMING_DIV
27278RET(148)
27279#else
27280 RET(78)
27281#endif
27282 }
27283 q &= 0x0000FFFF;
27284 flag_NotZ = q;
27285 flag_N = q >> 8;
27286 flag_V = flag_C = 0;
27287 res = q | (r << 16);
27288 DREGu32((Opcode >> 9) & 7) = res;
27289 }
27290#ifdef USE_CYCLONE_TIMING_DIV
27291RET(148)
27292#else
27293RET(98)
27294#endif
27295}
27296
27297// DIVU
27298OPCODE(0x80F9)
27299{
27300 u32 adr, res;
27301 u32 src, dst;
27302
27303 FETCH_LONG(adr);
27304 PRE_IO
27305 READ_WORD_F(adr, src)
27306 if (src == 0)
27307 {
27308 execute_exception(M68K_ZERO_DIVIDE_EX);
27309#ifdef USE_CYCLONE_TIMING_DIV
27310RET(162)
27311#else
27312RET(22)
27313#endif
27314 }
27315 dst = DREGu32((Opcode >> 9) & 7);
27316 {
27317 u32 q, r;
27318
27319 q = dst / src;
27320 r = dst % src;
27321
27322 if (q & 0xFFFF0000)
27323 {
27324 flag_V = M68K_SR_V;
27325#ifdef USE_CYCLONE_TIMING_DIV
27326RET(162)
27327#else
27328 RET(82)
27329#endif
27330 }
27331 q &= 0x0000FFFF;
27332 flag_NotZ = q;
27333 flag_N = q >> 8;
27334 flag_V = flag_C = 0;
27335 res = q | (r << 16);
27336 DREGu32((Opcode >> 9) & 7) = res;
27337 }
27338#ifdef USE_CYCLONE_TIMING_DIV
27339RET(162)
27340#else
27341RET(102)
27342#endif
27343}
27344
27345// DIVU
27346OPCODE(0x80FA)
27347{
27348 u32 adr, res;
27349 u32 src, dst;
27350
27351 adr = GET_SWORD + ((u32)(PC) - BasePC);
27352 PC++;
27353 PRE_IO
27354 READ_WORD_F(adr, src)
27355 if (src == 0)
27356 {
27357 execute_exception(M68K_ZERO_DIVIDE_EX);
27358#ifdef USE_CYCLONE_TIMING_DIV
27359RET(148)
27360#else
27361RET(18)
27362#endif
27363 }
27364 dst = DREGu32((Opcode >> 9) & 7);
27365 {
27366 u32 q, r;
27367
27368 q = dst / src;
27369 r = dst % src;
27370
27371 if (q & 0xFFFF0000)
27372 {
27373 flag_V = M68K_SR_V;
27374#ifdef USE_CYCLONE_TIMING_DIV
27375RET(148)
27376#else
27377 RET(78)
27378#endif
27379 }
27380 q &= 0x0000FFFF;
27381 flag_NotZ = q;
27382 flag_N = q >> 8;
27383 flag_V = flag_C = 0;
27384 res = q | (r << 16);
27385 DREGu32((Opcode >> 9) & 7) = res;
27386 }
27387#ifdef USE_CYCLONE_TIMING_DIV
27388RET(148)
27389#else
27390RET(98)
27391#endif
27392}
27393
27394// DIVU
27395OPCODE(0x80FB)
27396{
27397 u32 adr, res;
27398 u32 src, dst;
27399
27400 adr = (u32)(PC) - BasePC;
27401 DECODE_EXT_WORD
27402 PRE_IO
27403 READ_WORD_F(adr, src)
27404 if (src == 0)
27405 {
27406 execute_exception(M68K_ZERO_DIVIDE_EX);
27407#ifdef USE_CYCLONE_TIMING_DIV
27408RET(160)
27409#else
27410RET(20)
27411#endif
27412 }
27413 dst = DREGu32((Opcode >> 9) & 7);
27414 {
27415 u32 q, r;
27416
27417 q = dst / src;
27418 r = dst % src;
27419
27420 if (q & 0xFFFF0000)
27421 {
27422 flag_V = M68K_SR_V;
27423#ifdef USE_CYCLONE_TIMING_DIV
27424RET(160)
27425#else
27426 RET(80)
27427#endif
27428 }
27429 q &= 0x0000FFFF;
27430 flag_NotZ = q;
27431 flag_N = q >> 8;
27432 flag_V = flag_C = 0;
27433 res = q | (r << 16);
27434 DREGu32((Opcode >> 9) & 7) = res;
27435 }
27436#ifdef USE_CYCLONE_TIMING_DIV
27437RET(160)
27438#else
27439RET(100)
27440#endif
27441}
27442
27443// DIVU
27444OPCODE(0x80FC)
27445{
27446 u32 adr, res;
27447 u32 src, dst;
27448
27449 FETCH_WORD(src);
27450 if (src == 0)
27451 {
27452 execute_exception(M68K_ZERO_DIVIDE_EX);
27453#ifdef USE_CYCLONE_TIMING_DIV
27454RET(144)
27455#else
27456RET(14)
27457#endif
27458 }
27459 dst = DREGu32((Opcode >> 9) & 7);
27460 {
27461 u32 q, r;
27462
27463 q = dst / src;
27464 r = dst % src;
27465
27466 if (q & 0xFFFF0000)
27467 {
27468 flag_V = M68K_SR_V;
27469#ifdef USE_CYCLONE_TIMING_DIV
27470RET(144)
27471#else
27472 RET(74)
27473#endif
27474 }
27475 q &= 0x0000FFFF;
27476 flag_NotZ = q;
27477 flag_N = q >> 8;
27478 flag_V = flag_C = 0;
27479 res = q | (r << 16);
27480 DREGu32((Opcode >> 9) & 7) = res;
27481 }
27482#ifdef USE_CYCLONE_TIMING_DIV
27483RET(144)
27484#else
27485RET(94)
27486#endif
27487}
27488
27489// DIVU
27490OPCODE(0x80DF)
27491{
27492 u32 adr, res;
27493 u32 src, dst;
27494
27495 adr = AREG(7);
27496 AREG(7) += 2;
27497 PRE_IO
27498 READ_WORD_F(adr, src)
27499 if (src == 0)
27500 {
27501 execute_exception(M68K_ZERO_DIVIDE_EX);
27502#ifdef USE_CYCLONE_TIMING_DIV
27503RET(144)
27504#else
27505RET(14)
27506#endif
27507 }
27508 dst = DREGu32((Opcode >> 9) & 7);
27509 {
27510 u32 q, r;
27511
27512 q = dst / src;
27513 r = dst % src;
27514
27515 if (q & 0xFFFF0000)
27516 {
27517 flag_V = M68K_SR_V;
27518#ifdef USE_CYCLONE_TIMING_DIV
27519RET(144)
27520#else
27521 RET(74)
27522#endif
27523 }
27524 q &= 0x0000FFFF;
27525 flag_NotZ = q;
27526 flag_N = q >> 8;
27527 flag_V = flag_C = 0;
27528 res = q | (r << 16);
27529 DREGu32((Opcode >> 9) & 7) = res;
27530 }
27531#ifdef USE_CYCLONE_TIMING_DIV
27532RET(144)
27533#else
27534RET(94)
27535#endif
27536}
27537
27538// DIVU
27539OPCODE(0x80E7)
27540{
27541 u32 adr, res;
27542 u32 src, dst;
27543
27544 adr = AREG(7) - 2;
27545 AREG(7) = adr;
27546 PRE_IO
27547 READ_WORD_F(adr, src)
27548 if (src == 0)
27549 {
27550 execute_exception(M68K_ZERO_DIVIDE_EX);
27551#ifdef USE_CYCLONE_TIMING_DIV
27552RET(146)
27553#else
27554RET(16)
27555#endif
27556 }
27557 dst = DREGu32((Opcode >> 9) & 7);
27558 {
27559 u32 q, r;
27560
27561 q = dst / src;
27562 r = dst % src;
27563
27564 if (q & 0xFFFF0000)
27565 {
27566 flag_V = M68K_SR_V;
27567#ifdef USE_CYCLONE_TIMING_DIV
27568RET(146)
27569#else
27570 RET(76)
27571#endif
27572 }
27573 q &= 0x0000FFFF;
27574 flag_NotZ = q;
27575 flag_N = q >> 8;
27576 flag_V = flag_C = 0;
27577 res = q | (r << 16);
27578 DREGu32((Opcode >> 9) & 7) = res;
27579 }
27580#ifdef USE_CYCLONE_TIMING_DIV
27581RET(146)
27582#else
27583RET(96)
27584#endif
27585}
27586
27587// DIVS
27588OPCODE(0x81C0)
27589{
27590 u32 adr, res;
27591 u32 src, dst;
27592
27593 src = (s32)DREGs16((Opcode >> 0) & 7);
27594 if (src == 0)
27595 {
27596 execute_exception(M68K_ZERO_DIVIDE_EX);
27597#ifdef USE_CYCLONE_TIMING_DIV
9112b6ce 27598goto end81C0;
70357ce5 27599#endif
27600 RET(10)
27601 }
27602 dst = DREGu32((Opcode >> 9) & 7);
27603 if ((dst == 0x80000000) && (src == (u32)-1))
27604 {
27605 flag_NotZ = flag_N = 0;
27606 flag_V = flag_C = 0;
27607 res = 0;
27608 DREGu32((Opcode >> 9) & 7) = res;
27609#ifdef USE_CYCLONE_TIMING_DIV
9112b6ce 27610goto end81C0;
70357ce5 27611#endif
27612 RET(50)
27613 }
27614 {
27615 s32 q, r;
27616
27617 q = (s32)dst / (s32)src;
27618 r = (s32)dst % (s32)src;
27619
27620 if ((q > 0x7FFF) || (q < -0x8000))
27621 {
27622 flag_V = M68K_SR_V;
27623#ifdef USE_CYCLONE_TIMING_DIV
9112b6ce 27624goto end81C0;
70357ce5 27625#endif
27626 RET(80)
27627 }
27628 q &= 0x0000FFFF;
27629 flag_NotZ = q;
27630 flag_N = q >> 8;
27631 flag_V = flag_C = 0;
27632 res = q | (r << 16);
27633 DREGu32((Opcode >> 9) & 7) = res;
27634 }
27635#ifdef USE_CYCLONE_TIMING_DIV
9112b6ce 27636end81C0: m68kcontext.io_cycle_counter -= 50;
70357ce5 27637#endif
27638RET(108)
27639}
27640
27641// DIVS
27642OPCODE(0x81D0)
27643{
27644 u32 adr, res;
27645 u32 src, dst;
27646
27647 adr = AREG((Opcode >> 0) & 7);
27648 PRE_IO
27649 READSX_WORD_F(adr, src)
27650 if (src == 0)
27651 {
27652 execute_exception(M68K_ZERO_DIVIDE_EX);
27653#ifdef USE_CYCLONE_TIMING_DIV
9112b6ce 27654goto end81D0;
70357ce5 27655#endif
27656 RET(14)
27657 }
27658 dst = DREGu32((Opcode >> 9) & 7);
27659 if ((dst == 0x80000000) && (src == (u32)-1))
27660 {
27661 flag_NotZ = flag_N = 0;
27662 flag_V = flag_C = 0;
27663 res = 0;
27664 DREGu32((Opcode >> 9) & 7) = res;
27665#ifdef USE_CYCLONE_TIMING_DIV
9112b6ce 27666goto end81D0;
70357ce5 27667#endif
27668 RET(54)
27669 }
27670 {
27671 s32 q, r;
27672
27673 q = (s32)dst / (s32)src;
27674 r = (s32)dst % (s32)src;
27675
27676 if ((q > 0x7FFF) || (q < -0x8000))
27677 {
27678 flag_V = M68K_SR_V;
27679#ifdef USE_CYCLONE_TIMING_DIV
9112b6ce 27680goto end81D0;
70357ce5 27681#endif
27682 RET(84)
27683 }
27684 q &= 0x0000FFFF;
27685 flag_NotZ = q;
27686 flag_N = q >> 8;
27687 flag_V = flag_C = 0;
27688 res = q | (r << 16);
27689 DREGu32((Opcode >> 9) & 7) = res;
27690 }
27691#ifdef USE_CYCLONE_TIMING_DIV
9112b6ce 27692end81D0: m68kcontext.io_cycle_counter -= 50;
70357ce5 27693#endif
27694RET(112)
27695}
27696
27697// DIVS
27698OPCODE(0x81D8)
27699{
27700 u32 adr, res;
27701 u32 src, dst;
27702
27703 adr = AREG((Opcode >> 0) & 7);
27704 AREG((Opcode >> 0) & 7) += 2;
27705 PRE_IO
27706 READSX_WORD_F(adr, src)
27707 if (src == 0)
27708 {
27709 execute_exception(M68K_ZERO_DIVIDE_EX);
27710#ifdef USE_CYCLONE_TIMING_DIV
9112b6ce 27711goto end81D8;
70357ce5 27712#endif
27713 RET(14)
27714 }
27715 dst = DREGu32((Opcode >> 9) & 7);
27716 if ((dst == 0x80000000) && (src == (u32)-1))
27717 {
27718 flag_NotZ = flag_N = 0;
27719 flag_V = flag_C = 0;
27720 res = 0;
27721 DREGu32((Opcode >> 9) & 7) = res;
27722#ifdef USE_CYCLONE_TIMING_DIV
9112b6ce 27723goto end81D8;
70357ce5 27724#endif
27725 RET(54)
27726 }
27727 {
27728 s32 q, r;
27729
27730 q = (s32)dst / (s32)src;
27731 r = (s32)dst % (s32)src;
27732
27733 if ((q > 0x7FFF) || (q < -0x8000))
27734 {
27735 flag_V = M68K_SR_V;
27736#ifdef USE_CYCLONE_TIMING_DIV
9112b6ce 27737goto end81D8;
70357ce5 27738#endif
27739 RET(84)
27740 }
27741 q &= 0x0000FFFF;
27742 flag_NotZ = q;
27743 flag_N = q >> 8;
27744 flag_V = flag_C = 0;
27745 res = q | (r << 16);
27746 DREGu32((Opcode >> 9) & 7) = res;
27747 }
27748#ifdef USE_CYCLONE_TIMING_DIV
9112b6ce 27749end81D8: m68kcontext.io_cycle_counter -= 50;
70357ce5 27750#endif
27751RET(112)
27752}
27753
27754// DIVS
27755OPCODE(0x81E0)
27756{
27757 u32 adr, res;
27758 u32 src, dst;
27759
27760 adr = AREG((Opcode >> 0) & 7) - 2;
27761 AREG((Opcode >> 0) & 7) = adr;
27762 PRE_IO
27763 READSX_WORD_F(adr, src)
27764 if (src == 0)
27765 {
27766 execute_exception(M68K_ZERO_DIVIDE_EX);
27767#ifdef USE_CYCLONE_TIMING_DIV
9112b6ce 27768goto end81E0;
70357ce5 27769#endif
27770 RET(16)
27771 }
27772 dst = DREGu32((Opcode >> 9) & 7);
27773 if ((dst == 0x80000000) && (src == (u32)-1))
27774 {
27775 flag_NotZ = flag_N = 0;
27776 flag_V = flag_C = 0;
27777 res = 0;
27778 DREGu32((Opcode >> 9) & 7) = res;
27779#ifdef USE_CYCLONE_TIMING_DIV
9112b6ce 27780goto end81E0;
70357ce5 27781#endif
27782 RET(56)
27783 }
27784 {
27785 s32 q, r;
27786
27787 q = (s32)dst / (s32)src;
27788 r = (s32)dst % (s32)src;
27789
27790 if ((q > 0x7FFF) || (q < -0x8000))
27791 {
27792 flag_V = M68K_SR_V;
27793#ifdef USE_CYCLONE_TIMING_DIV
9112b6ce 27794goto end81E0;
70357ce5 27795#endif
27796 RET(86)
27797 }
27798 q &= 0x0000FFFF;
27799 flag_NotZ = q;
27800 flag_N = q >> 8;
27801 flag_V = flag_C = 0;
27802 res = q | (r << 16);
27803 DREGu32((Opcode >> 9) & 7) = res;
27804 }
27805#ifdef USE_CYCLONE_TIMING_DIV
9112b6ce 27806end81E0: m68kcontext.io_cycle_counter -= 50;
70357ce5 27807#endif
27808RET(114)
27809}
27810
27811// DIVS
27812OPCODE(0x81E8)
27813{
27814 u32 adr, res;
27815 u32 src, dst;
27816
27817 FETCH_SWORD(adr);
27818 adr += AREG((Opcode >> 0) & 7);
27819 PRE_IO
27820 READSX_WORD_F(adr, src)
27821 if (src == 0)
27822 {
27823 execute_exception(M68K_ZERO_DIVIDE_EX);
27824#ifdef USE_CYCLONE_TIMING_DIV
9112b6ce 27825goto end81E8;
70357ce5 27826#endif
27827 RET(18)
27828 }
27829 dst = DREGu32((Opcode >> 9) & 7);
27830 if ((dst == 0x80000000) && (src == (u32)-1))
27831 {
27832 flag_NotZ = flag_N = 0;
27833 flag_V = flag_C = 0;
27834 res = 0;
27835 DREGu32((Opcode >> 9) & 7) = res;
27836#ifdef USE_CYCLONE_TIMING_DIV
9112b6ce 27837goto end81E8;
70357ce5 27838#endif
27839 RET(58)
27840 }
27841 {
27842 s32 q, r;
27843
27844 q = (s32)dst / (s32)src;
27845 r = (s32)dst % (s32)src;
27846
27847 if ((q > 0x7FFF) || (q < -0x8000))
27848 {
27849 flag_V = M68K_SR_V;
27850#ifdef USE_CYCLONE_TIMING_DIV
9112b6ce 27851goto end81E8;
70357ce5 27852#endif
27853 RET(88)
27854 }
27855 q &= 0x0000FFFF;
27856 flag_NotZ = q;
27857 flag_N = q >> 8;
27858 flag_V = flag_C = 0;
27859 res = q | (r << 16);
27860 DREGu32((Opcode >> 9) & 7) = res;
27861 }
27862#ifdef USE_CYCLONE_TIMING_DIV
9112b6ce 27863end81E8: m68kcontext.io_cycle_counter -= 50;
70357ce5 27864#endif
27865RET(116)
27866}
27867
27868// DIVS
27869OPCODE(0x81F0)
27870{
27871 u32 adr, res;
27872 u32 src, dst;
27873
27874 adr = AREG((Opcode >> 0) & 7);
27875 DECODE_EXT_WORD
27876 PRE_IO
27877 READSX_WORD_F(adr, src)
27878 if (src == 0)
27879 {
27880 execute_exception(M68K_ZERO_DIVIDE_EX);
27881#ifdef USE_CYCLONE_TIMING_DIV
9112b6ce 27882goto end81F0;
70357ce5 27883#endif
27884 RET(20)
27885 }
27886 dst = DREGu32((Opcode >> 9) & 7);
27887 if ((dst == 0x80000000) && (src == (u32)-1))
27888 {
27889 flag_NotZ = flag_N = 0;
27890 flag_V = flag_C = 0;
27891 res = 0;
27892 DREGu32((Opcode >> 9) & 7) = res;
27893#ifdef USE_CYCLONE_TIMING_DIV
9112b6ce 27894goto end81F0;
70357ce5 27895#endif
27896 RET(60)
27897 }
27898 {
27899 s32 q, r;
27900
27901 q = (s32)dst / (s32)src;
27902 r = (s32)dst % (s32)src;
27903
27904 if ((q > 0x7FFF) || (q < -0x8000))
27905 {
27906 flag_V = M68K_SR_V;
27907#ifdef USE_CYCLONE_TIMING_DIV
9112b6ce 27908goto end81F0;
70357ce5 27909#endif
27910 RET(90)
27911 }
27912 q &= 0x0000FFFF;
27913 flag_NotZ = q;
27914 flag_N = q >> 8;
27915 flag_V = flag_C = 0;
27916 res = q | (r << 16);
27917 DREGu32((Opcode >> 9) & 7) = res;
27918 }
27919#ifdef USE_CYCLONE_TIMING_DIV
9112b6ce 27920end81F0: m68kcontext.io_cycle_counter -= 50;
70357ce5 27921#endif
27922RET(118)
27923}
27924
27925// DIVS
27926OPCODE(0x81F8)
27927{
27928 u32 adr, res;
27929 u32 src, dst;
27930
27931 FETCH_SWORD(adr);
27932 PRE_IO
27933 READSX_WORD_F(adr, src)
27934 if (src == 0)
27935 {
27936 execute_exception(M68K_ZERO_DIVIDE_EX);
27937#ifdef USE_CYCLONE_TIMING_DIV
9112b6ce 27938goto end81F8;
70357ce5 27939#endif
27940 RET(18)
27941 }
27942 dst = DREGu32((Opcode >> 9) & 7);
27943 if ((dst == 0x80000000) && (src == (u32)-1))
27944 {
27945 flag_NotZ = flag_N = 0;
27946 flag_V = flag_C = 0;
27947 res = 0;
27948 DREGu32((Opcode >> 9) & 7) = res;
27949#ifdef USE_CYCLONE_TIMING_DIV
9112b6ce 27950goto end81F8;
70357ce5 27951#endif
27952 RET(58)
27953 }
27954 {
27955 s32 q, r;
27956
27957 q = (s32)dst / (s32)src;
27958 r = (s32)dst % (s32)src;
27959
27960 if ((q > 0x7FFF) || (q < -0x8000))
27961 {
27962 flag_V = M68K_SR_V;
27963#ifdef USE_CYCLONE_TIMING_DIV
9112b6ce 27964goto end81F8;
70357ce5 27965#endif
27966 RET(88)
27967 }
27968 q &= 0x0000FFFF;
27969 flag_NotZ = q;
27970 flag_N = q >> 8;
27971 flag_V = flag_C = 0;
27972 res = q | (r << 16);
27973 DREGu32((Opcode >> 9) & 7) = res;
27974 }
27975#ifdef USE_CYCLONE_TIMING_DIV
9112b6ce 27976end81F8: m68kcontext.io_cycle_counter -= 50;
70357ce5 27977#endif
27978RET(116)
27979}
27980
27981// DIVS
27982OPCODE(0x81F9)
27983{
27984 u32 adr, res;
27985 u32 src, dst;
27986
27987 FETCH_LONG(adr);
27988 PRE_IO
27989 READSX_WORD_F(adr, src)
27990 if (src == 0)
27991 {
27992 execute_exception(M68K_ZERO_DIVIDE_EX);
27993#ifdef USE_CYCLONE_TIMING_DIV
9112b6ce 27994goto end81F9;
70357ce5 27995#endif
27996 RET(22)
27997 }
27998 dst = DREGu32((Opcode >> 9) & 7);
27999 if ((dst == 0x80000000) && (src == (u32)-1))
28000 {
28001 flag_NotZ = flag_N = 0;
28002 flag_V = flag_C = 0;
28003 res = 0;
28004 DREGu32((Opcode >> 9) & 7) = res;
28005#ifdef USE_CYCLONE_TIMING_DIV
9112b6ce 28006goto end81F9;
70357ce5 28007#endif
28008 RET(62)
28009 }
28010 {
28011 s32 q, r;
28012
28013 q = (s32)dst / (s32)src;
28014 r = (s32)dst % (s32)src;
28015
28016 if ((q > 0x7FFF) || (q < -0x8000))
28017 {
28018 flag_V = M68K_SR_V;
28019#ifdef USE_CYCLONE_TIMING_DIV
9112b6ce 28020goto end81F9;
70357ce5 28021#endif
28022 RET(92)
28023 }
28024 q &= 0x0000FFFF;
28025 flag_NotZ = q;
28026 flag_N = q >> 8;
28027 flag_V = flag_C = 0;
28028 res = q | (r << 16);
28029 DREGu32((Opcode >> 9) & 7) = res;
28030 }
28031#ifdef USE_CYCLONE_TIMING_DIV
9112b6ce 28032end81F9: m68kcontext.io_cycle_counter -= 50;
70357ce5 28033#endif
28034RET(120)
28035}
28036
28037// DIVS
28038OPCODE(0x81FA)
28039{
28040 u32 adr, res;
28041 u32 src, dst;
28042
28043 adr = GET_SWORD + ((u32)(PC) - BasePC);
28044 PC++;
28045 PRE_IO
28046 READSX_WORD_F(adr, src)
28047 if (src == 0)
28048 {
28049 execute_exception(M68K_ZERO_DIVIDE_EX);
28050#ifdef USE_CYCLONE_TIMING_DIV
9112b6ce 28051goto end81FA;
70357ce5 28052#endif
28053 RET(18)
28054 }
28055 dst = DREGu32((Opcode >> 9) & 7);
28056 if ((dst == 0x80000000) && (src == (u32)-1))
28057 {
28058 flag_NotZ = flag_N = 0;
28059 flag_V = flag_C = 0;
28060 res = 0;
28061 DREGu32((Opcode >> 9) & 7) = res;
28062#ifdef USE_CYCLONE_TIMING_DIV
9112b6ce 28063goto end81FA;
70357ce5 28064#endif
28065 RET(58)
28066 }
28067 {
28068 s32 q, r;
28069
28070 q = (s32)dst / (s32)src;
28071 r = (s32)dst % (s32)src;
28072
28073 if ((q > 0x7FFF) || (q < -0x8000))
28074 {
28075 flag_V = M68K_SR_V;
28076#ifdef USE_CYCLONE_TIMING_DIV
9112b6ce 28077goto end81FA;
70357ce5 28078#endif
28079 RET(88)
28080 }
28081 q &= 0x0000FFFF;
28082 flag_NotZ = q;
28083 flag_N = q >> 8;
28084 flag_V = flag_C = 0;
28085 res = q | (r << 16);
28086 DREGu32((Opcode >> 9) & 7) = res;
28087 }
28088#ifdef USE_CYCLONE_TIMING_DIV
9112b6ce 28089end81FA: m68kcontext.io_cycle_counter -= 50;
70357ce5 28090#endif
28091RET(116)
28092}
28093
28094// DIVS
28095OPCODE(0x81FB)
28096{
28097 u32 adr, res;
28098 u32 src, dst;
28099
28100 adr = (u32)(PC) - BasePC;
28101 DECODE_EXT_WORD
28102 PRE_IO
28103 READSX_WORD_F(adr, src)
28104 if (src == 0)
28105 {
28106 execute_exception(M68K_ZERO_DIVIDE_EX);
28107#ifdef USE_CYCLONE_TIMING_DIV
9112b6ce 28108goto end81FB;
70357ce5 28109#endif
28110 RET(20)
28111 }
28112 dst = DREGu32((Opcode >> 9) & 7);
28113 if ((dst == 0x80000000) && (src == (u32)-1))
28114 {
28115 flag_NotZ = flag_N = 0;
28116 flag_V = flag_C = 0;
28117 res = 0;
28118 DREGu32((Opcode >> 9) & 7) = res;
28119#ifdef USE_CYCLONE_TIMING_DIV
9112b6ce 28120goto end81FB;
70357ce5 28121#endif
28122 RET(60)
28123 }
28124 {
28125 s32 q, r;
28126
28127 q = (s32)dst / (s32)src;
28128 r = (s32)dst % (s32)src;
28129
28130 if ((q > 0x7FFF) || (q < -0x8000))
28131 {
28132 flag_V = M68K_SR_V;
28133#ifdef USE_CYCLONE_TIMING_DIV
9112b6ce 28134goto end81FB;
70357ce5 28135#endif
28136 RET(90)
28137 }
28138 q &= 0x0000FFFF;
28139 flag_NotZ = q;
28140 flag_N = q >> 8;
28141 flag_V = flag_C = 0;
28142 res = q | (r << 16);
28143 DREGu32((Opcode >> 9) & 7) = res;
28144 }
28145#ifdef USE_CYCLONE_TIMING_DIV
9112b6ce 28146end81FB: m68kcontext.io_cycle_counter -= 50;
70357ce5 28147#endif
28148RET(118)
28149}
28150
28151// DIVS
28152OPCODE(0x81FC)
28153{
28154 u32 adr, res;
28155 u32 src, dst;
28156
28157 FETCH_SWORD(src);
28158 if (src == 0)
28159 {
28160 execute_exception(M68K_ZERO_DIVIDE_EX);
28161#ifdef USE_CYCLONE_TIMING_DIV
9112b6ce 28162goto end81FC;
70357ce5 28163#endif
28164 RET(14)
28165 }
28166 dst = DREGu32((Opcode >> 9) & 7);
28167 if ((dst == 0x80000000) && (src == (u32)-1))
28168 {
28169 flag_NotZ = flag_N = 0;
28170 flag_V = flag_C = 0;
28171 res = 0;
28172 DREGu32((Opcode >> 9) & 7) = res;
28173#ifdef USE_CYCLONE_TIMING_DIV
9112b6ce 28174goto end81FC;
70357ce5 28175#endif
28176 RET(54)
28177 }
28178 {
28179 s32 q, r;
28180
28181 q = (s32)dst / (s32)src;
28182 r = (s32)dst % (s32)src;
28183
28184 if ((q > 0x7FFF) || (q < -0x8000))
28185 {
28186 flag_V = M68K_SR_V;
28187#ifdef USE_CYCLONE_TIMING_DIV
9112b6ce 28188goto end81FC;
70357ce5 28189#endif
28190 RET(84)
28191 }
28192 q &= 0x0000FFFF;
28193 flag_NotZ = q;
28194 flag_N = q >> 8;
28195 flag_V = flag_C = 0;
28196 res = q | (r << 16);
28197 DREGu32((Opcode >> 9) & 7) = res;
28198 }
28199#ifdef USE_CYCLONE_TIMING_DIV
9112b6ce 28200end81FC: m68kcontext.io_cycle_counter -= 50;
70357ce5 28201#endif
28202RET(112)
28203}
28204
28205// DIVS
28206OPCODE(0x81DF)
28207{
28208 u32 adr, res;
28209 u32 src, dst;
28210
28211 adr = AREG(7);
28212 AREG(7) += 2;
28213 PRE_IO
28214 READSX_WORD_F(adr, src)
28215 if (src == 0)
28216 {
28217 execute_exception(M68K_ZERO_DIVIDE_EX);
28218#ifdef USE_CYCLONE_TIMING_DIV
9112b6ce 28219goto end81DF;
70357ce5 28220#endif
28221 RET(14)
28222 }
28223 dst = DREGu32((Opcode >> 9) & 7);
28224 if ((dst == 0x80000000) && (src == (u32)-1))
28225 {
28226 flag_NotZ = flag_N = 0;
28227 flag_V = flag_C = 0;
28228 res = 0;
28229 DREGu32((Opcode >> 9) & 7) = res;
28230#ifdef USE_CYCLONE_TIMING_DIV
9112b6ce 28231goto end81DF;
70357ce5 28232#endif
28233 RET(54)
28234 }
28235 {
28236 s32 q, r;
28237
28238 q = (s32)dst / (s32)src;
28239 r = (s32)dst % (s32)src;
28240
28241 if ((q > 0x7FFF) || (q < -0x8000))
28242 {
28243 flag_V = M68K_SR_V;
28244#ifdef USE_CYCLONE_TIMING_DIV
9112b6ce 28245goto end81DF;
70357ce5 28246#endif
28247 RET(84)
28248 }
28249 q &= 0x0000FFFF;
28250 flag_NotZ = q;
28251 flag_N = q >> 8;
28252 flag_V = flag_C = 0;
28253 res = q | (r << 16);
28254 DREGu32((Opcode >> 9) & 7) = res;
28255 }
28256#ifdef USE_CYCLONE_TIMING_DIV
9112b6ce 28257end81DF: m68kcontext.io_cycle_counter -= 50;
70357ce5 28258#endif
28259RET(112)
28260}
28261
28262// DIVS
28263OPCODE(0x81E7)
28264{
28265 u32 adr, res;
28266 u32 src, dst;
28267
28268 adr = AREG(7) - 2;
28269 AREG(7) = adr;
28270 PRE_IO
28271 READSX_WORD_F(adr, src)
28272 if (src == 0)
28273 {
28274 execute_exception(M68K_ZERO_DIVIDE_EX);
28275#ifdef USE_CYCLONE_TIMING_DIV
9112b6ce 28276goto end81E7;
70357ce5 28277#endif
28278 RET(16)
28279 }
28280 dst = DREGu32((Opcode >> 9) & 7);
28281 if ((dst == 0x80000000) && (src == (u32)-1))
28282 {
28283 flag_NotZ = flag_N = 0;
28284 flag_V = flag_C = 0;
28285 res = 0;
28286 DREGu32((Opcode >> 9) & 7) = res;
28287#ifdef USE_CYCLONE_TIMING_DIV
9112b6ce 28288goto end81E7;
70357ce5 28289#endif
28290 RET(56)
28291 }
28292 {
28293 s32 q, r;
28294
28295 q = (s32)dst / (s32)src;
28296 r = (s32)dst % (s32)src;
28297
28298 if ((q > 0x7FFF) || (q < -0x8000))
28299 {
28300 flag_V = M68K_SR_V;
28301#ifdef USE_CYCLONE_TIMING_DIV
9112b6ce 28302goto end81E7;
70357ce5 28303#endif
28304 RET(86)
28305 }
28306 q &= 0x0000FFFF;
28307 flag_NotZ = q;
28308 flag_N = q >> 8;
28309 flag_V = flag_C = 0;
28310 res = q | (r << 16);
28311 DREGu32((Opcode >> 9) & 7) = res;
28312 }
28313#ifdef USE_CYCLONE_TIMING_DIV
9112b6ce 28314end81E7: m68kcontext.io_cycle_counter -= 50;
70357ce5 28315#endif
28316RET(114)
28317}
28318
28319// SUBaD
28320OPCODE(0x9000)
28321{
28322 u32 adr, res;
28323 u32 src, dst;
28324
28325 src = DREGu8((Opcode >> 0) & 7);
28326 dst = DREGu8((Opcode >> 9) & 7);
28327 res = dst - src;
28328 flag_N = flag_X = flag_C = res;
28329 flag_V = (src ^ dst) & (res ^ dst);
28330 flag_NotZ = res & 0xFF;
28331 DREGu8((Opcode >> 9) & 7) = res;
28332RET(4)
28333}
28334
28335// SUBaD
28336OPCODE(0x9008)
28337{
28338 u32 adr, res;
28339 u32 src, dst;
28340
28341 // can't read byte from Ax registers !
28342 m68kcontext.execinfo |= M68K_FAULTED;
28343 m68kcontext.io_cycle_counter = 0;
28344/*
28345 goto famec_Exec_End;
28346 dst = DREGu8((Opcode >> 9) & 7);
28347 res = dst - src;
28348 flag_N = flag_X = flag_C = res;
28349 flag_V = (src ^ dst) & (res ^ dst);
28350 flag_NotZ = res & 0xFF;
28351 DREGu8((Opcode >> 9) & 7) = res;
28352*/
28353RET(4)
28354}
28355
28356// SUBaD
28357OPCODE(0x9010)
28358{
28359 u32 adr, res;
28360 u32 src, dst;
28361
28362 adr = AREG((Opcode >> 0) & 7);
28363 PRE_IO
28364 READ_BYTE_F(adr, src)
28365 dst = DREGu8((Opcode >> 9) & 7);
28366 res = dst - src;
28367 flag_N = flag_X = flag_C = res;
28368 flag_V = (src ^ dst) & (res ^ dst);
28369 flag_NotZ = res & 0xFF;
28370 DREGu8((Opcode >> 9) & 7) = res;
28371 POST_IO
28372RET(8)
28373}
28374
28375// SUBaD
28376OPCODE(0x9018)
28377{
28378 u32 adr, res;
28379 u32 src, dst;
28380
28381 adr = AREG((Opcode >> 0) & 7);
28382 AREG((Opcode >> 0) & 7) += 1;
28383 PRE_IO
28384 READ_BYTE_F(adr, src)
28385 dst = DREGu8((Opcode >> 9) & 7);
28386 res = dst - src;
28387 flag_N = flag_X = flag_C = res;
28388 flag_V = (src ^ dst) & (res ^ dst);
28389 flag_NotZ = res & 0xFF;
28390 DREGu8((Opcode >> 9) & 7) = res;
28391 POST_IO
28392RET(8)
28393}
28394
28395// SUBaD
28396OPCODE(0x9020)
28397{
28398 u32 adr, res;
28399 u32 src, dst;
28400
28401 adr = AREG((Opcode >> 0) & 7) - 1;
28402 AREG((Opcode >> 0) & 7) = adr;
28403 PRE_IO
28404 READ_BYTE_F(adr, src)
28405 dst = DREGu8((Opcode >> 9) & 7);
28406 res = dst - src;
28407 flag_N = flag_X = flag_C = res;
28408 flag_V = (src ^ dst) & (res ^ dst);
28409 flag_NotZ = res & 0xFF;
28410 DREGu8((Opcode >> 9) & 7) = res;
28411 POST_IO
28412RET(10)
28413}
28414
28415// SUBaD
28416OPCODE(0x9028)
28417{
28418 u32 adr, res;
28419 u32 src, dst;
28420
28421 FETCH_SWORD(adr);
28422 adr += AREG((Opcode >> 0) & 7);
28423 PRE_IO
28424 READ_BYTE_F(adr, src)
28425 dst = DREGu8((Opcode >> 9) & 7);
28426 res = dst - src;
28427 flag_N = flag_X = flag_C = res;
28428 flag_V = (src ^ dst) & (res ^ dst);
28429 flag_NotZ = res & 0xFF;
28430 DREGu8((Opcode >> 9) & 7) = res;
28431 POST_IO
28432RET(12)
28433}
28434
28435// SUBaD
28436OPCODE(0x9030)
28437{
28438 u32 adr, res;
28439 u32 src, dst;
28440
28441 adr = AREG((Opcode >> 0) & 7);
28442 DECODE_EXT_WORD
28443 PRE_IO
28444 READ_BYTE_F(adr, src)
28445 dst = DREGu8((Opcode >> 9) & 7);
28446 res = dst - src;
28447 flag_N = flag_X = flag_C = res;
28448 flag_V = (src ^ dst) & (res ^ dst);
28449 flag_NotZ = res & 0xFF;
28450 DREGu8((Opcode >> 9) & 7) = res;
28451 POST_IO
28452RET(14)
28453}
28454
28455// SUBaD
28456OPCODE(0x9038)
28457{
28458 u32 adr, res;
28459 u32 src, dst;
28460
28461 FETCH_SWORD(adr);
28462 PRE_IO
28463 READ_BYTE_F(adr, src)
28464 dst = DREGu8((Opcode >> 9) & 7);
28465 res = dst - src;
28466 flag_N = flag_X = flag_C = res;
28467 flag_V = (src ^ dst) & (res ^ dst);
28468 flag_NotZ = res & 0xFF;
28469 DREGu8((Opcode >> 9) & 7) = res;
28470 POST_IO
28471RET(12)
28472}
28473
28474// SUBaD
28475OPCODE(0x9039)
28476{
28477 u32 adr, res;
28478 u32 src, dst;
28479
28480 FETCH_LONG(adr);
28481 PRE_IO
28482 READ_BYTE_F(adr, src)
28483 dst = DREGu8((Opcode >> 9) & 7);
28484 res = dst - src;
28485 flag_N = flag_X = flag_C = res;
28486 flag_V = (src ^ dst) & (res ^ dst);
28487 flag_NotZ = res & 0xFF;
28488 DREGu8((Opcode >> 9) & 7) = res;
28489 POST_IO
28490RET(16)
28491}
28492
28493// SUBaD
28494OPCODE(0x903A)
28495{
28496 u32 adr, res;
28497 u32 src, dst;
28498
28499 adr = GET_SWORD + ((u32)(PC) - BasePC);
28500 PC++;
28501 PRE_IO
28502 READ_BYTE_F(adr, src)
28503 dst = DREGu8((Opcode >> 9) & 7);
28504 res = dst - src;
28505 flag_N = flag_X = flag_C = res;
28506 flag_V = (src ^ dst) & (res ^ dst);
28507 flag_NotZ = res & 0xFF;
28508 DREGu8((Opcode >> 9) & 7) = res;
28509 POST_IO
28510RET(12)
28511}
28512
28513// SUBaD
28514OPCODE(0x903B)
28515{
28516 u32 adr, res;
28517 u32 src, dst;
28518
28519 adr = (u32)(PC) - BasePC;
28520 DECODE_EXT_WORD
28521 PRE_IO
28522 READ_BYTE_F(adr, src)
28523 dst = DREGu8((Opcode >> 9) & 7);
28524 res = dst - src;
28525 flag_N = flag_X = flag_C = res;
28526 flag_V = (src ^ dst) & (res ^ dst);
28527 flag_NotZ = res & 0xFF;
28528 DREGu8((Opcode >> 9) & 7) = res;
28529 POST_IO
28530RET(14)
28531}
28532
28533// SUBaD
28534OPCODE(0x903C)
28535{
28536 u32 adr, res;
28537 u32 src, dst;
28538
28539 FETCH_BYTE(src);
28540 dst = DREGu8((Opcode >> 9) & 7);
28541 res = dst - src;
28542 flag_N = flag_X = flag_C = res;
28543 flag_V = (src ^ dst) & (res ^ dst);
28544 flag_NotZ = res & 0xFF;
28545 DREGu8((Opcode >> 9) & 7) = res;
28546RET(8)
28547}
28548
28549// SUBaD
28550OPCODE(0x901F)
28551{
28552 u32 adr, res;
28553 u32 src, dst;
28554
28555 adr = AREG(7);
28556 AREG(7) += 2;
28557 PRE_IO
28558 READ_BYTE_F(adr, src)
28559 dst = DREGu8((Opcode >> 9) & 7);
28560 res = dst - src;
28561 flag_N = flag_X = flag_C = res;
28562 flag_V = (src ^ dst) & (res ^ dst);
28563 flag_NotZ = res & 0xFF;
28564 DREGu8((Opcode >> 9) & 7) = res;
28565 POST_IO
28566RET(8)
28567}
28568
28569// SUBaD
28570OPCODE(0x9027)
28571{
28572 u32 adr, res;
28573 u32 src, dst;
28574
28575 adr = AREG(7) - 2;
28576 AREG(7) = adr;
28577 PRE_IO
28578 READ_BYTE_F(adr, src)
28579 dst = DREGu8((Opcode >> 9) & 7);
28580 res = dst - src;
28581 flag_N = flag_X = flag_C = res;
28582 flag_V = (src ^ dst) & (res ^ dst);
28583 flag_NotZ = res & 0xFF;
28584 DREGu8((Opcode >> 9) & 7) = res;
28585 POST_IO
28586RET(10)
28587}
28588
28589// SUBaD
28590OPCODE(0x9040)
28591{
28592 u32 adr, res;
28593 u32 src, dst;
28594
28595 src = DREGu16((Opcode >> 0) & 7);
28596 dst = DREGu16((Opcode >> 9) & 7);
28597 res = dst - src;
28598 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
28599 flag_N = flag_X = flag_C = res >> 8;
28600 flag_NotZ = res & 0xFFFF;
28601 DREGu16((Opcode >> 9) & 7) = res;
28602RET(4)
28603}
28604
28605// SUBaD
28606OPCODE(0x9048)
28607{
28608 u32 adr, res;
28609 u32 src, dst;
28610
28611 src = AREGu16((Opcode >> 0) & 7);
28612 dst = DREGu16((Opcode >> 9) & 7);
28613 res = dst - src;
28614 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
28615 flag_N = flag_X = flag_C = res >> 8;
28616 flag_NotZ = res & 0xFFFF;
28617 DREGu16((Opcode >> 9) & 7) = res;
28618RET(4)
28619}
28620
28621// SUBaD
28622OPCODE(0x9050)
28623{
28624 u32 adr, res;
28625 u32 src, dst;
28626
28627 adr = AREG((Opcode >> 0) & 7);
28628 PRE_IO
28629 READ_WORD_F(adr, src)
28630 dst = DREGu16((Opcode >> 9) & 7);
28631 res = dst - src;
28632 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
28633 flag_N = flag_X = flag_C = res >> 8;
28634 flag_NotZ = res & 0xFFFF;
28635 DREGu16((Opcode >> 9) & 7) = res;
28636 POST_IO
28637RET(8)
28638}
28639
28640// SUBaD
28641OPCODE(0x9058)
28642{
28643 u32 adr, res;
28644 u32 src, dst;
28645
28646 adr = AREG((Opcode >> 0) & 7);
28647 AREG((Opcode >> 0) & 7) += 2;
28648 PRE_IO
28649 READ_WORD_F(adr, src)
28650 dst = DREGu16((Opcode >> 9) & 7);
28651 res = dst - src;
28652 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
28653 flag_N = flag_X = flag_C = res >> 8;
28654 flag_NotZ = res & 0xFFFF;
28655 DREGu16((Opcode >> 9) & 7) = res;
28656 POST_IO
28657RET(8)
28658}
28659
28660// SUBaD
28661OPCODE(0x9060)
28662{
28663 u32 adr, res;
28664 u32 src, dst;
28665
28666 adr = AREG((Opcode >> 0) & 7) - 2;
28667 AREG((Opcode >> 0) & 7) = adr;
28668 PRE_IO
28669 READ_WORD_F(adr, src)
28670 dst = DREGu16((Opcode >> 9) & 7);
28671 res = dst - src;
28672 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
28673 flag_N = flag_X = flag_C = res >> 8;
28674 flag_NotZ = res & 0xFFFF;
28675 DREGu16((Opcode >> 9) & 7) = res;
28676 POST_IO
28677RET(10)
28678}
28679
28680// SUBaD
28681OPCODE(0x9068)
28682{
28683 u32 adr, res;
28684 u32 src, dst;
28685
28686 FETCH_SWORD(adr);
28687 adr += AREG((Opcode >> 0) & 7);
28688 PRE_IO
28689 READ_WORD_F(adr, src)
28690 dst = DREGu16((Opcode >> 9) & 7);
28691 res = dst - src;
28692 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
28693 flag_N = flag_X = flag_C = res >> 8;
28694 flag_NotZ = res & 0xFFFF;
28695 DREGu16((Opcode >> 9) & 7) = res;
28696 POST_IO
28697RET(12)
28698}
28699
28700// SUBaD
28701OPCODE(0x9070)
28702{
28703 u32 adr, res;
28704 u32 src, dst;
28705
28706 adr = AREG((Opcode >> 0) & 7);
28707 DECODE_EXT_WORD
28708 PRE_IO
28709 READ_WORD_F(adr, src)
28710 dst = DREGu16((Opcode >> 9) & 7);
28711 res = dst - src;
28712 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
28713 flag_N = flag_X = flag_C = res >> 8;
28714 flag_NotZ = res & 0xFFFF;
28715 DREGu16((Opcode >> 9) & 7) = res;
28716 POST_IO
28717RET(14)
28718}
28719
28720// SUBaD
28721OPCODE(0x9078)
28722{
28723 u32 adr, res;
28724 u32 src, dst;
28725
28726 FETCH_SWORD(adr);
28727 PRE_IO
28728 READ_WORD_F(adr, src)
28729 dst = DREGu16((Opcode >> 9) & 7);
28730 res = dst - src;
28731 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
28732 flag_N = flag_X = flag_C = res >> 8;
28733 flag_NotZ = res & 0xFFFF;
28734 DREGu16((Opcode >> 9) & 7) = res;
28735 POST_IO
28736RET(12)
28737}
28738
28739// SUBaD
28740OPCODE(0x9079)
28741{
28742 u32 adr, res;
28743 u32 src, dst;
28744
28745 FETCH_LONG(adr);
28746 PRE_IO
28747 READ_WORD_F(adr, src)
28748 dst = DREGu16((Opcode >> 9) & 7);
28749 res = dst - src;
28750 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
28751 flag_N = flag_X = flag_C = res >> 8;
28752 flag_NotZ = res & 0xFFFF;
28753 DREGu16((Opcode >> 9) & 7) = res;
28754 POST_IO
28755RET(16)
28756}
28757
28758// SUBaD
28759OPCODE(0x907A)
28760{
28761 u32 adr, res;
28762 u32 src, dst;
28763
28764 adr = GET_SWORD + ((u32)(PC) - BasePC);
28765 PC++;
28766 PRE_IO
28767 READ_WORD_F(adr, src)
28768 dst = DREGu16((Opcode >> 9) & 7);
28769 res = dst - src;
28770 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
28771 flag_N = flag_X = flag_C = res >> 8;
28772 flag_NotZ = res & 0xFFFF;
28773 DREGu16((Opcode >> 9) & 7) = res;
28774 POST_IO
28775RET(12)
28776}
28777
28778// SUBaD
28779OPCODE(0x907B)
28780{
28781 u32 adr, res;
28782 u32 src, dst;
28783
28784 adr = (u32)(PC) - BasePC;
28785 DECODE_EXT_WORD
28786 PRE_IO
28787 READ_WORD_F(adr, src)
28788 dst = DREGu16((Opcode >> 9) & 7);
28789 res = dst - src;
28790 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
28791 flag_N = flag_X = flag_C = res >> 8;
28792 flag_NotZ = res & 0xFFFF;
28793 DREGu16((Opcode >> 9) & 7) = res;
28794 POST_IO
28795RET(14)
28796}
28797
28798// SUBaD
28799OPCODE(0x907C)
28800{
28801 u32 adr, res;
28802 u32 src, dst;
28803
28804 FETCH_WORD(src);
28805 dst = DREGu16((Opcode >> 9) & 7);
28806 res = dst - src;
28807 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
28808 flag_N = flag_X = flag_C = res >> 8;
28809 flag_NotZ = res & 0xFFFF;
28810 DREGu16((Opcode >> 9) & 7) = res;
28811RET(8)
28812}
28813
28814// SUBaD
28815OPCODE(0x905F)
28816{
28817 u32 adr, res;
28818 u32 src, dst;
28819
28820 adr = AREG(7);
28821 AREG(7) += 2;
28822 PRE_IO
28823 READ_WORD_F(adr, src)
28824 dst = DREGu16((Opcode >> 9) & 7);
28825 res = dst - src;
28826 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
28827 flag_N = flag_X = flag_C = res >> 8;
28828 flag_NotZ = res & 0xFFFF;
28829 DREGu16((Opcode >> 9) & 7) = res;
28830 POST_IO
28831RET(8)
28832}
28833
28834// SUBaD
28835OPCODE(0x9067)
28836{
28837 u32 adr, res;
28838 u32 src, dst;
28839
28840 adr = AREG(7) - 2;
28841 AREG(7) = adr;
28842 PRE_IO
28843 READ_WORD_F(adr, src)
28844 dst = DREGu16((Opcode >> 9) & 7);
28845 res = dst - src;
28846 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
28847 flag_N = flag_X = flag_C = res >> 8;
28848 flag_NotZ = res & 0xFFFF;
28849 DREGu16((Opcode >> 9) & 7) = res;
28850 POST_IO
28851RET(10)
28852}
28853
28854// SUBaD
28855OPCODE(0x9080)
28856{
28857 u32 adr, res;
28858 u32 src, dst;
28859
28860 src = DREGu32((Opcode >> 0) & 7);
28861 dst = DREGu32((Opcode >> 9) & 7);
28862 res = dst - src;
28863 flag_NotZ = res;
28864 flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
28865 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
28866 flag_N = res >> 24;
28867 DREGu32((Opcode >> 9) & 7) = res;
28868RET(8)
28869}
28870
28871// SUBaD
28872OPCODE(0x9088)
28873{
28874 u32 adr, res;
28875 u32 src, dst;
28876
28877 src = AREGu32((Opcode >> 0) & 7);
28878 dst = DREGu32((Opcode >> 9) & 7);
28879 res = dst - src;
28880 flag_NotZ = res;
28881 flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
28882 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
28883 flag_N = res >> 24;
28884 DREGu32((Opcode >> 9) & 7) = res;
28885RET(8)
28886}
28887
28888// SUBaD
28889OPCODE(0x9090)
28890{
28891 u32 adr, res;
28892 u32 src, dst;
28893
28894 adr = AREG((Opcode >> 0) & 7);
28895 PRE_IO
28896 READ_LONG_F(adr, src)
28897 dst = DREGu32((Opcode >> 9) & 7);
28898 res = dst - src;
28899 flag_NotZ = res;
28900 flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
28901 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
28902 flag_N = res >> 24;
28903 DREGu32((Opcode >> 9) & 7) = res;
28904 POST_IO
28905RET(14)
28906}
28907
28908// SUBaD
28909OPCODE(0x9098)
28910{
28911 u32 adr, res;
28912 u32 src, dst;
28913
28914 adr = AREG((Opcode >> 0) & 7);
28915 AREG((Opcode >> 0) & 7) += 4;
28916 PRE_IO
28917 READ_LONG_F(adr, src)
28918 dst = DREGu32((Opcode >> 9) & 7);
28919 res = dst - src;
28920 flag_NotZ = res;
28921 flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
28922 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
28923 flag_N = res >> 24;
28924 DREGu32((Opcode >> 9) & 7) = res;
28925 POST_IO
28926RET(14)
28927}
28928
28929// SUBaD
28930OPCODE(0x90A0)
28931{
28932 u32 adr, res;
28933 u32 src, dst;
28934
28935 adr = AREG((Opcode >> 0) & 7) - 4;
28936 AREG((Opcode >> 0) & 7) = adr;
28937 PRE_IO
28938 READ_LONG_F(adr, src)
28939 dst = DREGu32((Opcode >> 9) & 7);
28940 res = dst - src;
28941 flag_NotZ = res;
28942 flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
28943 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
28944 flag_N = res >> 24;
28945 DREGu32((Opcode >> 9) & 7) = res;
28946 POST_IO
28947RET(16)
28948}
28949
28950// SUBaD
28951OPCODE(0x90A8)
28952{
28953 u32 adr, res;
28954 u32 src, dst;
28955
28956 FETCH_SWORD(adr);
28957 adr += AREG((Opcode >> 0) & 7);
28958 PRE_IO
28959 READ_LONG_F(adr, src)
28960 dst = DREGu32((Opcode >> 9) & 7);
28961 res = dst - src;
28962 flag_NotZ = res;
28963 flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
28964 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
28965 flag_N = res >> 24;
28966 DREGu32((Opcode >> 9) & 7) = res;
28967 POST_IO
28968RET(18)
28969}
28970
28971// SUBaD
28972OPCODE(0x90B0)
28973{
28974 u32 adr, res;
28975 u32 src, dst;
28976
28977 adr = AREG((Opcode >> 0) & 7);
28978 DECODE_EXT_WORD
28979 PRE_IO
28980 READ_LONG_F(adr, src)
28981 dst = DREGu32((Opcode >> 9) & 7);
28982 res = dst - src;
28983 flag_NotZ = res;
28984 flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
28985 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
28986 flag_N = res >> 24;
28987 DREGu32((Opcode >> 9) & 7) = res;
28988 POST_IO
28989RET(20)
28990}
28991
28992// SUBaD
28993OPCODE(0x90B8)
28994{
28995 u32 adr, res;
28996 u32 src, dst;
28997
28998 FETCH_SWORD(adr);
28999 PRE_IO
29000 READ_LONG_F(adr, src)
29001 dst = DREGu32((Opcode >> 9) & 7);
29002 res = dst - src;
29003 flag_NotZ = res;
29004 flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
29005 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
29006 flag_N = res >> 24;
29007 DREGu32((Opcode >> 9) & 7) = res;
29008 POST_IO
29009RET(18)
29010}
29011
29012// SUBaD
29013OPCODE(0x90B9)
29014{
29015 u32 adr, res;
29016 u32 src, dst;
29017
29018 FETCH_LONG(adr);
29019 PRE_IO
29020 READ_LONG_F(adr, src)
29021 dst = DREGu32((Opcode >> 9) & 7);
29022 res = dst - src;
29023 flag_NotZ = res;
29024 flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
29025 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
29026 flag_N = res >> 24;
29027 DREGu32((Opcode >> 9) & 7) = res;
29028 POST_IO
29029RET(22)
29030}
29031
29032// SUBaD
29033OPCODE(0x90BA)
29034{
29035 u32 adr, res;
29036 u32 src, dst;
29037
29038 adr = GET_SWORD + ((u32)(PC) - BasePC);
29039 PC++;
29040 PRE_IO
29041 READ_LONG_F(adr, src)
29042 dst = DREGu32((Opcode >> 9) & 7);
29043 res = dst - src;
29044 flag_NotZ = res;
29045 flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
29046 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
29047 flag_N = res >> 24;
29048 DREGu32((Opcode >> 9) & 7) = res;
29049 POST_IO
29050RET(18)
29051}
29052
29053// SUBaD
29054OPCODE(0x90BB)
29055{
29056 u32 adr, res;
29057 u32 src, dst;
29058
29059 adr = (u32)(PC) - BasePC;
29060 DECODE_EXT_WORD
29061 PRE_IO
29062 READ_LONG_F(adr, src)
29063 dst = DREGu32((Opcode >> 9) & 7);
29064 res = dst - src;
29065 flag_NotZ = res;
29066 flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
29067 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
29068 flag_N = res >> 24;
29069 DREGu32((Opcode >> 9) & 7) = res;
29070 POST_IO
29071RET(20)
29072}
29073
29074// SUBaD
29075OPCODE(0x90BC)
29076{
29077 u32 adr, res;
29078 u32 src, dst;
29079
29080 FETCH_LONG(src);
29081 dst = DREGu32((Opcode >> 9) & 7);
29082 res = dst - src;
29083 flag_NotZ = res;
29084 flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
29085 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
29086 flag_N = res >> 24;
29087 DREGu32((Opcode >> 9) & 7) = res;
29088RET(16)
29089}
29090
29091// SUBaD
29092OPCODE(0x909F)
29093{
29094 u32 adr, res;
29095 u32 src, dst;
29096
29097 adr = AREG(7);
29098 AREG(7) += 4;
29099 PRE_IO
29100 READ_LONG_F(adr, src)
29101 dst = DREGu32((Opcode >> 9) & 7);
29102 res = dst - src;
29103 flag_NotZ = res;
29104 flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
29105 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
29106 flag_N = res >> 24;
29107 DREGu32((Opcode >> 9) & 7) = res;
29108 POST_IO
29109RET(14)
29110}
29111
29112// SUBaD
29113OPCODE(0x90A7)
29114{
29115 u32 adr, res;
29116 u32 src, dst;
29117
29118 adr = AREG(7) - 4;
29119 AREG(7) = adr;
29120 PRE_IO
29121 READ_LONG_F(adr, src)
29122 dst = DREGu32((Opcode >> 9) & 7);
29123 res = dst - src;
29124 flag_NotZ = res;
29125 flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
29126 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
29127 flag_N = res >> 24;
29128 DREGu32((Opcode >> 9) & 7) = res;
29129 POST_IO
29130RET(16)
29131}
29132
29133// SUBDa
29134OPCODE(0x9110)
29135{
29136 u32 adr, res;
29137 u32 src, dst;
29138
29139 src = DREGu8((Opcode >> 9) & 7);
29140 adr = AREG((Opcode >> 0) & 7);
29141 PRE_IO
29142 READ_BYTE_F(adr, dst)
29143 res = dst - src;
29144 flag_N = flag_X = flag_C = res;
29145 flag_V = (src ^ dst) & (res ^ dst);
29146 flag_NotZ = res & 0xFF;
29147 WRITE_BYTE_F(adr, res)
29148 POST_IO
29149RET(12)
29150}
29151
29152// SUBDa
29153OPCODE(0x9118)
29154{
29155 u32 adr, res;
29156 u32 src, dst;
29157
29158 src = DREGu8((Opcode >> 9) & 7);
29159 adr = AREG((Opcode >> 0) & 7);
29160 AREG((Opcode >> 0) & 7) += 1;
29161 PRE_IO
29162 READ_BYTE_F(adr, dst)
29163 res = dst - src;
29164 flag_N = flag_X = flag_C = res;
29165 flag_V = (src ^ dst) & (res ^ dst);
29166 flag_NotZ = res & 0xFF;
29167 WRITE_BYTE_F(adr, res)
29168 POST_IO
29169RET(12)
29170}
29171
29172// SUBDa
29173OPCODE(0x9120)
29174{
29175 u32 adr, res;
29176 u32 src, dst;
29177
29178 src = DREGu8((Opcode >> 9) & 7);
29179 adr = AREG((Opcode >> 0) & 7) - 1;
29180 AREG((Opcode >> 0) & 7) = adr;
29181 PRE_IO
29182 READ_BYTE_F(adr, dst)
29183 res = dst - src;
29184 flag_N = flag_X = flag_C = res;
29185 flag_V = (src ^ dst) & (res ^ dst);
29186 flag_NotZ = res & 0xFF;
29187 WRITE_BYTE_F(adr, res)
29188 POST_IO
29189RET(14)
29190}
29191
29192// SUBDa
29193OPCODE(0x9128)
29194{
29195 u32 adr, res;
29196 u32 src, dst;
29197
29198 src = DREGu8((Opcode >> 9) & 7);
29199 FETCH_SWORD(adr);
29200 adr += AREG((Opcode >> 0) & 7);
29201 PRE_IO
29202 READ_BYTE_F(adr, dst)
29203 res = dst - src;
29204 flag_N = flag_X = flag_C = res;
29205 flag_V = (src ^ dst) & (res ^ dst);
29206 flag_NotZ = res & 0xFF;
29207 WRITE_BYTE_F(adr, res)
29208 POST_IO
29209RET(16)
29210}
29211
29212// SUBDa
29213OPCODE(0x9130)
29214{
29215 u32 adr, res;
29216 u32 src, dst;
29217
29218 src = DREGu8((Opcode >> 9) & 7);
29219 adr = AREG((Opcode >> 0) & 7);
29220 DECODE_EXT_WORD
29221 PRE_IO
29222 READ_BYTE_F(adr, dst)
29223 res = dst - src;
29224 flag_N = flag_X = flag_C = res;
29225 flag_V = (src ^ dst) & (res ^ dst);
29226 flag_NotZ = res & 0xFF;
29227 WRITE_BYTE_F(adr, res)
29228 POST_IO
29229RET(18)
29230}
29231
29232// SUBDa
29233OPCODE(0x9138)
29234{
29235 u32 adr, res;
29236 u32 src, dst;
29237
29238 src = DREGu8((Opcode >> 9) & 7);
29239 FETCH_SWORD(adr);
29240 PRE_IO
29241 READ_BYTE_F(adr, dst)
29242 res = dst - src;
29243 flag_N = flag_X = flag_C = res;
29244 flag_V = (src ^ dst) & (res ^ dst);
29245 flag_NotZ = res & 0xFF;
29246 WRITE_BYTE_F(adr, res)
29247 POST_IO
29248RET(16)
29249}
29250
29251// SUBDa
29252OPCODE(0x9139)
29253{
29254 u32 adr, res;
29255 u32 src, dst;
29256
29257 src = DREGu8((Opcode >> 9) & 7);
29258 FETCH_LONG(adr);
29259 PRE_IO
29260 READ_BYTE_F(adr, dst)
29261 res = dst - src;
29262 flag_N = flag_X = flag_C = res;
29263 flag_V = (src ^ dst) & (res ^ dst);
29264 flag_NotZ = res & 0xFF;
29265 WRITE_BYTE_F(adr, res)
29266 POST_IO
29267RET(20)
29268}
29269
29270// SUBDa
29271OPCODE(0x911F)
29272{
29273 u32 adr, res;
29274 u32 src, dst;
29275
29276 src = DREGu8((Opcode >> 9) & 7);
29277 adr = AREG(7);
29278 AREG(7) += 2;
29279 PRE_IO
29280 READ_BYTE_F(adr, dst)
29281 res = dst - src;
29282 flag_N = flag_X = flag_C = res;
29283 flag_V = (src ^ dst) & (res ^ dst);
29284 flag_NotZ = res & 0xFF;
29285 WRITE_BYTE_F(adr, res)
29286 POST_IO
29287RET(12)
29288}
29289
29290// SUBDa
29291OPCODE(0x9127)
29292{
29293 u32 adr, res;
29294 u32 src, dst;
29295
29296 src = DREGu8((Opcode >> 9) & 7);
29297 adr = AREG(7) - 2;
29298 AREG(7) = adr;
29299 PRE_IO
29300 READ_BYTE_F(adr, dst)
29301 res = dst - src;
29302 flag_N = flag_X = flag_C = res;
29303 flag_V = (src ^ dst) & (res ^ dst);
29304 flag_NotZ = res & 0xFF;
29305 WRITE_BYTE_F(adr, res)
29306 POST_IO
29307RET(14)
29308}
29309
29310// SUBDa
29311OPCODE(0x9150)
29312{
29313 u32 adr, res;
29314 u32 src, dst;
29315
29316 src = DREGu16((Opcode >> 9) & 7);
29317 adr = AREG((Opcode >> 0) & 7);
29318 PRE_IO
29319 READ_WORD_F(adr, dst)
29320 res = dst - src;
29321 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
29322 flag_N = flag_X = flag_C = res >> 8;
29323 flag_NotZ = res & 0xFFFF;
29324 WRITE_WORD_F(adr, res)
29325 POST_IO
29326RET(12)
29327}
29328
29329// SUBDa
29330OPCODE(0x9158)
29331{
29332 u32 adr, res;
29333 u32 src, dst;
29334
29335 src = DREGu16((Opcode >> 9) & 7);
29336 adr = AREG((Opcode >> 0) & 7);
29337 AREG((Opcode >> 0) & 7) += 2;
29338 PRE_IO
29339 READ_WORD_F(adr, dst)
29340 res = dst - src;
29341 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
29342 flag_N = flag_X = flag_C = res >> 8;
29343 flag_NotZ = res & 0xFFFF;
29344 WRITE_WORD_F(adr, res)
29345 POST_IO
29346RET(12)
29347}
29348
29349// SUBDa
29350OPCODE(0x9160)
29351{
29352 u32 adr, res;
29353 u32 src, dst;
29354
29355 src = DREGu16((Opcode >> 9) & 7);
29356 adr = AREG((Opcode >> 0) & 7) - 2;
29357 AREG((Opcode >> 0) & 7) = adr;
29358 PRE_IO
29359 READ_WORD_F(adr, dst)
29360 res = dst - src;
29361 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
29362 flag_N = flag_X = flag_C = res >> 8;
29363 flag_NotZ = res & 0xFFFF;
29364 WRITE_WORD_F(adr, res)
29365 POST_IO
29366RET(14)
29367}
29368
29369// SUBDa
29370OPCODE(0x9168)
29371{
29372 u32 adr, res;
29373 u32 src, dst;
29374
29375 src = DREGu16((Opcode >> 9) & 7);
29376 FETCH_SWORD(adr);
29377 adr += AREG((Opcode >> 0) & 7);
29378 PRE_IO
29379 READ_WORD_F(adr, dst)
29380 res = dst - src;
29381 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
29382 flag_N = flag_X = flag_C = res >> 8;
29383 flag_NotZ = res & 0xFFFF;
29384 WRITE_WORD_F(adr, res)
29385 POST_IO
29386RET(16)
29387}
29388
29389// SUBDa
29390OPCODE(0x9170)
29391{
29392 u32 adr, res;
29393 u32 src, dst;
29394
29395 src = DREGu16((Opcode >> 9) & 7);
29396 adr = AREG((Opcode >> 0) & 7);
29397 DECODE_EXT_WORD
29398 PRE_IO
29399 READ_WORD_F(adr, dst)
29400 res = dst - src;
29401 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
29402 flag_N = flag_X = flag_C = res >> 8;
29403 flag_NotZ = res & 0xFFFF;
29404 WRITE_WORD_F(adr, res)
29405 POST_IO
29406RET(18)
29407}
29408
29409// SUBDa
29410OPCODE(0x9178)
29411{
29412 u32 adr, res;
29413 u32 src, dst;
29414
29415 src = DREGu16((Opcode >> 9) & 7);
29416 FETCH_SWORD(adr);
29417 PRE_IO
29418 READ_WORD_F(adr, dst)
29419 res = dst - src;
29420 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
29421 flag_N = flag_X = flag_C = res >> 8;
29422 flag_NotZ = res & 0xFFFF;
29423 WRITE_WORD_F(adr, res)
29424 POST_IO
29425RET(16)
29426}
29427
29428// SUBDa
29429OPCODE(0x9179)
29430{
29431 u32 adr, res;
29432 u32 src, dst;
29433
29434 src = DREGu16((Opcode >> 9) & 7);
29435 FETCH_LONG(adr);
29436 PRE_IO
29437 READ_WORD_F(adr, dst)
29438 res = dst - src;
29439 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
29440 flag_N = flag_X = flag_C = res >> 8;
29441 flag_NotZ = res & 0xFFFF;
29442 WRITE_WORD_F(adr, res)
29443 POST_IO
29444RET(20)
29445}
29446
29447// SUBDa
29448OPCODE(0x915F)
29449{
29450 u32 adr, res;
29451 u32 src, dst;
29452
29453 src = DREGu16((Opcode >> 9) & 7);
29454 adr = AREG(7);
29455 AREG(7) += 2;
29456 PRE_IO
29457 READ_WORD_F(adr, dst)
29458 res = dst - src;
29459 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
29460 flag_N = flag_X = flag_C = res >> 8;
29461 flag_NotZ = res & 0xFFFF;
29462 WRITE_WORD_F(adr, res)
29463 POST_IO
29464RET(12)
29465}
29466
29467// SUBDa
29468OPCODE(0x9167)
29469{
29470 u32 adr, res;
29471 u32 src, dst;
29472
29473 src = DREGu16((Opcode >> 9) & 7);
29474 adr = AREG(7) - 2;
29475 AREG(7) = adr;
29476 PRE_IO
29477 READ_WORD_F(adr, dst)
29478 res = dst - src;
29479 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
29480 flag_N = flag_X = flag_C = res >> 8;
29481 flag_NotZ = res & 0xFFFF;
29482 WRITE_WORD_F(adr, res)
29483 POST_IO
29484RET(14)
29485}
29486
29487// SUBDa
29488OPCODE(0x9190)
29489{
29490 u32 adr, res;
29491 u32 src, dst;
29492
29493 src = DREGu32((Opcode >> 9) & 7);
29494 adr = AREG((Opcode >> 0) & 7);
29495 PRE_IO
29496 READ_LONG_F(adr, dst)
29497 res = dst - src;
29498 flag_NotZ = res;
29499 flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
29500 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
29501 flag_N = res >> 24;
29502 WRITE_LONG_F(adr, res)
29503 POST_IO
29504RET(20)
29505}
29506
29507// SUBDa
29508OPCODE(0x9198)
29509{
29510 u32 adr, res;
29511 u32 src, dst;
29512
29513 src = DREGu32((Opcode >> 9) & 7);
29514 adr = AREG((Opcode >> 0) & 7);
29515 AREG((Opcode >> 0) & 7) += 4;
29516 PRE_IO
29517 READ_LONG_F(adr, dst)
29518 res = dst - src;
29519 flag_NotZ = res;
29520 flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
29521 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
29522 flag_N = res >> 24;
29523 WRITE_LONG_F(adr, res)
29524 POST_IO
29525RET(20)
29526}
29527
29528// SUBDa
29529OPCODE(0x91A0)
29530{
29531 u32 adr, res;
29532 u32 src, dst;
29533
29534 src = DREGu32((Opcode >> 9) & 7);
29535 adr = AREG((Opcode >> 0) & 7) - 4;
29536 AREG((Opcode >> 0) & 7) = adr;
29537 PRE_IO
29538 READ_LONG_F(adr, dst)
29539 res = dst - src;
29540 flag_NotZ = res;
29541 flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
29542 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
29543 flag_N = res >> 24;
29544 WRITE_LONG_F(adr, res)
29545 POST_IO
29546RET(22)
29547}
29548
29549// SUBDa
29550OPCODE(0x91A8)
29551{
29552 u32 adr, res;
29553 u32 src, dst;
29554
29555 src = DREGu32((Opcode >> 9) & 7);
29556 FETCH_SWORD(adr);
29557 adr += AREG((Opcode >> 0) & 7);
29558 PRE_IO
29559 READ_LONG_F(adr, dst)
29560 res = dst - src;
29561 flag_NotZ = res;
29562 flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
29563 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
29564 flag_N = res >> 24;
29565 WRITE_LONG_F(adr, res)
29566 POST_IO
29567RET(24)
29568}
29569
29570// SUBDa
29571OPCODE(0x91B0)
29572{
29573 u32 adr, res;
29574 u32 src, dst;
29575
29576 src = DREGu32((Opcode >> 9) & 7);
29577 adr = AREG((Opcode >> 0) & 7);
29578 DECODE_EXT_WORD
29579 PRE_IO
29580 READ_LONG_F(adr, dst)
29581 res = dst - src;
29582 flag_NotZ = res;
29583 flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
29584 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
29585 flag_N = res >> 24;
29586 WRITE_LONG_F(adr, res)
29587 POST_IO
29588RET(26)
29589}
29590
29591// SUBDa
29592OPCODE(0x91B8)
29593{
29594 u32 adr, res;
29595 u32 src, dst;
29596
29597 src = DREGu32((Opcode >> 9) & 7);
29598 FETCH_SWORD(adr);
29599 PRE_IO
29600 READ_LONG_F(adr, dst)
29601 res = dst - src;
29602 flag_NotZ = res;
29603 flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
29604 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
29605 flag_N = res >> 24;
29606 WRITE_LONG_F(adr, res)
29607 POST_IO
29608RET(24)
29609}
29610
29611// SUBDa
29612OPCODE(0x91B9)
29613{
29614 u32 adr, res;
29615 u32 src, dst;
29616
29617 src = DREGu32((Opcode >> 9) & 7);
29618 FETCH_LONG(adr);
29619 PRE_IO
29620 READ_LONG_F(adr, dst)
29621 res = dst - src;
29622 flag_NotZ = res;
29623 flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
29624 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
29625 flag_N = res >> 24;
29626 WRITE_LONG_F(adr, res)
29627 POST_IO
29628RET(28)
29629}
29630
29631// SUBDa
29632OPCODE(0x919F)
29633{
29634 u32 adr, res;
29635 u32 src, dst;
29636
29637 src = DREGu32((Opcode >> 9) & 7);
29638 adr = AREG(7);
29639 AREG(7) += 4;
29640 PRE_IO
29641 READ_LONG_F(adr, dst)
29642 res = dst - src;
29643 flag_NotZ = res;
29644 flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
29645 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
29646 flag_N = res >> 24;
29647 WRITE_LONG_F(adr, res)
29648 POST_IO
29649RET(20)
29650}
29651
29652// SUBDa
29653OPCODE(0x91A7)
29654{
29655 u32 adr, res;
29656 u32 src, dst;
29657
29658 src = DREGu32((Opcode >> 9) & 7);
29659 adr = AREG(7) - 4;
29660 AREG(7) = adr;
29661 PRE_IO
29662 READ_LONG_F(adr, dst)
29663 res = dst - src;
29664 flag_NotZ = res;
29665 flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
29666 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
29667 flag_N = res >> 24;
29668 WRITE_LONG_F(adr, res)
29669 POST_IO
29670RET(22)
29671}
29672
29673// SUBX
29674OPCODE(0x9100)
29675{
29676 u32 adr, res;
29677 u32 src, dst;
29678
29679 src = DREGu8((Opcode >> 0) & 7);
29680 dst = DREGu8((Opcode >> 9) & 7);
29681 res = dst - src - ((flag_X >> 8) & 1);
29682 flag_N = flag_X = flag_C = res;
29683 flag_V = (src ^ dst) & (res ^ dst);
29684 flag_NotZ |= res & 0xFF;
29685 DREGu8((Opcode >> 9) & 7) = res;
29686RET(4)
29687}
29688
29689// SUBX
29690OPCODE(0x9140)
29691{
29692 u32 adr, res;
29693 u32 src, dst;
29694
29695 src = DREGu16((Opcode >> 0) & 7);
29696 dst = DREGu16((Opcode >> 9) & 7);
29697 res = dst - src - ((flag_X >> 8) & 1);
29698 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
29699 flag_N = flag_X = flag_C = res >> 8;
29700 flag_NotZ |= res & 0xFFFF;
29701 DREGu16((Opcode >> 9) & 7) = res;
29702RET(4)
29703}
29704
29705// SUBX
29706OPCODE(0x9180)
29707{
29708 u32 adr, res;
29709 u32 src, dst;
29710
29711 src = DREGu32((Opcode >> 0) & 7);
29712 dst = DREGu32((Opcode >> 9) & 7);
29713 res = dst - src - ((flag_X >> 8) & 1);
29714 flag_NotZ |= res;
29715 flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
29716 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
29717 flag_N = res >> 24;
29718 DREGu32((Opcode >> 9) & 7) = res;
29719RET(8)
29720}
29721
29722// SUBXM
29723OPCODE(0x9108)
29724{
29725 u32 adr, res;
29726 u32 src, dst;
29727
29728 adr = AREG((Opcode >> 0) & 7) - 1;
29729 AREG((Opcode >> 0) & 7) = adr;
29730 PRE_IO
29731 READ_BYTE_F(adr, src)
29732 adr = AREG((Opcode >> 9) & 7) - 1;
29733 AREG((Opcode >> 9) & 7) = adr;
29734 READ_BYTE_F(adr, dst)
29735 res = dst - src - ((flag_X >> 8) & 1);
29736 flag_N = flag_X = flag_C = res;
29737 flag_V = (src ^ dst) & (res ^ dst);
29738 flag_NotZ |= res & 0xFF;
29739 WRITE_BYTE_F(adr, res)
29740 POST_IO
29741RET(18)
29742}
29743
29744// SUBXM
29745OPCODE(0x9148)
29746{
29747 u32 adr, res;
29748 u32 src, dst;
29749
29750 adr = AREG((Opcode >> 0) & 7) - 2;
29751 AREG((Opcode >> 0) & 7) = adr;
29752 PRE_IO
29753 READ_WORD_F(adr, src)
29754 adr = AREG((Opcode >> 9) & 7) - 2;
29755 AREG((Opcode >> 9) & 7) = adr;
29756 READ_WORD_F(adr, dst)
29757 res = dst - src - ((flag_X >> 8) & 1);
29758 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
29759 flag_N = flag_X = flag_C = res >> 8;
29760 flag_NotZ |= res & 0xFFFF;
29761 WRITE_WORD_F(adr, res)
29762 POST_IO
29763RET(18)
29764}
29765
29766// SUBXM
29767OPCODE(0x9188)
29768{
29769 u32 adr, res;
29770 u32 src, dst;
29771
29772 adr = AREG((Opcode >> 0) & 7) - 4;
29773 AREG((Opcode >> 0) & 7) = adr;
29774 PRE_IO
29775 READ_LONG_F(adr, src)
29776 adr = AREG((Opcode >> 9) & 7) - 4;
29777 AREG((Opcode >> 9) & 7) = adr;
29778 READ_LONG_F(adr, dst)
29779 res = dst - src - ((flag_X >> 8) & 1);
29780 flag_NotZ |= res;
29781 flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
29782 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
29783 flag_N = res >> 24;
29784 WRITE_LONG_F(adr, res)
29785 POST_IO
29786RET(30)
29787}
29788
29789// SUBX7M
29790OPCODE(0x910F)
29791{
29792 u32 adr, res;
29793 u32 src, dst;
29794
29795 adr = AREG(7) - 2;
29796 AREG(7) = adr;
29797 PRE_IO
29798 READ_BYTE_F(adr, src)
29799 adr = AREG((Opcode >> 9) & 7) - 1;
29800 AREG((Opcode >> 9) & 7) = adr;
29801 READ_BYTE_F(adr, dst)
29802 res = dst - src - ((flag_X >> 8) & 1);
29803 flag_N = flag_X = flag_C = res;
29804 flag_V = (src ^ dst) & (res ^ dst);
29805 flag_NotZ |= res & 0xFF;
29806 WRITE_BYTE_F(adr, res)
29807 POST_IO
29808RET(18)
29809}
29810
29811// SUBX7M
29812OPCODE(0x914F)
29813{
29814 u32 adr, res;
29815 u32 src, dst;
29816
29817 adr = AREG(7) - 2;
29818 AREG(7) = adr;
29819 PRE_IO
29820 READ_WORD_F(adr, src)
29821 adr = AREG((Opcode >> 9) & 7) - 2;
29822 AREG((Opcode >> 9) & 7) = adr;
29823 READ_WORD_F(adr, dst)
29824 res = dst - src - ((flag_X >> 8) & 1);
29825 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
29826 flag_N = flag_X = flag_C = res >> 8;
29827 flag_NotZ |= res & 0xFFFF;
29828 WRITE_WORD_F(adr, res)
29829 POST_IO
29830RET(18)
29831}
29832
29833// SUBX7M
29834OPCODE(0x918F)
29835{
29836 u32 adr, res;
29837 u32 src, dst;
29838
29839 adr = AREG(7) - 4;
29840 AREG(7) = adr;
29841 PRE_IO
29842 READ_LONG_F(adr, src)
29843 adr = AREG((Opcode >> 9) & 7) - 4;
29844 AREG((Opcode >> 9) & 7) = adr;
29845 READ_LONG_F(adr, dst)
29846 res = dst - src - ((flag_X >> 8) & 1);
29847 flag_NotZ |= res;
29848 flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
29849 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
29850 flag_N = res >> 24;
29851 WRITE_LONG_F(adr, res)
29852 POST_IO
29853RET(30)
29854}
29855
29856// SUBXM7
29857OPCODE(0x9F08)
29858{
29859 u32 adr, res;
29860 u32 src, dst;
29861
29862 adr = AREG((Opcode >> 0) & 7) - 1;
29863 AREG((Opcode >> 0) & 7) = adr;
29864 PRE_IO
29865 READ_BYTE_F(adr, src)
29866 adr = AREG(7) - 2;
29867 AREG(7) = adr;
29868 READ_BYTE_F(adr, dst)
29869 res = dst - src - ((flag_X >> 8) & 1);
29870 flag_N = flag_X = flag_C = res;
29871 flag_V = (src ^ dst) & (res ^ dst);
29872 flag_NotZ |= res & 0xFF;
29873 WRITE_BYTE_F(adr, res)
29874 POST_IO
29875RET(18)
29876}
29877
29878// SUBXM7
29879OPCODE(0x9F48)
29880{
29881 u32 adr, res;
29882 u32 src, dst;
29883
29884 adr = AREG((Opcode >> 0) & 7) - 2;
29885 AREG((Opcode >> 0) & 7) = adr;
29886 PRE_IO
29887 READ_WORD_F(adr, src)
29888 adr = AREG(7) - 2;
29889 AREG(7) = adr;
29890 READ_WORD_F(adr, dst)
29891 res = dst - src - ((flag_X >> 8) & 1);
29892 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
29893 flag_N = flag_X = flag_C = res >> 8;
29894 flag_NotZ |= res & 0xFFFF;
29895 WRITE_WORD_F(adr, res)
29896 POST_IO
29897RET(18)
29898}
29899
29900// SUBXM7
29901OPCODE(0x9F88)
29902{
29903 u32 adr, res;
29904 u32 src, dst;
29905
29906 adr = AREG((Opcode >> 0) & 7) - 4;
29907 AREG((Opcode >> 0) & 7) = adr;
29908 PRE_IO
29909 READ_LONG_F(adr, src)
29910 adr = AREG(7) - 4;
29911 AREG(7) = adr;
29912 READ_LONG_F(adr, dst)
29913 res = dst - src - ((flag_X >> 8) & 1);
29914 flag_NotZ |= res;
29915 flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
29916 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
29917 flag_N = res >> 24;
29918 WRITE_LONG_F(adr, res)
29919 POST_IO
29920RET(30)
29921}
29922
29923// SUBX7M7
29924OPCODE(0x9F0F)
29925{
29926 u32 adr, res;
29927 u32 src, dst;
29928
29929 adr = AREG(7) - 2;
29930 AREG(7) = adr;
29931 PRE_IO
29932 READ_BYTE_F(adr, src)
29933 adr = AREG(7) - 2;
29934 AREG(7) = adr;
29935 READ_BYTE_F(adr, dst)
29936 res = dst - src - ((flag_X >> 8) & 1);
29937 flag_N = flag_X = flag_C = res;
29938 flag_V = (src ^ dst) & (res ^ dst);
29939 flag_NotZ |= res & 0xFF;
29940 WRITE_BYTE_F(adr, res)
29941 POST_IO
29942RET(18)
29943}
29944
29945// SUBX7M7
29946OPCODE(0x9F4F)
29947{
29948 u32 adr, res;
29949 u32 src, dst;
29950
29951 adr = AREG(7) - 2;
29952 AREG(7) = adr;
29953 PRE_IO
29954 READ_WORD_F(adr, src)
29955 adr = AREG(7) - 2;
29956 AREG(7) = adr;
29957 READ_WORD_F(adr, dst)
29958 res = dst - src - ((flag_X >> 8) & 1);
29959 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
29960 flag_N = flag_X = flag_C = res >> 8;
29961 flag_NotZ |= res & 0xFFFF;
29962 WRITE_WORD_F(adr, res)
29963 POST_IO
29964RET(18)
29965}
29966
29967// SUBX7M7
29968OPCODE(0x9F8F)
29969{
29970 u32 adr, res;
29971 u32 src, dst;
29972
29973 adr = AREG(7) - 4;
29974 AREG(7) = adr;
29975 PRE_IO
29976 READ_LONG_F(adr, src)
29977 adr = AREG(7) - 4;
29978 AREG(7) = adr;
29979 READ_LONG_F(adr, dst)
29980 res = dst - src - ((flag_X >> 8) & 1);
29981 flag_NotZ |= res;
29982 flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
29983 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
29984 flag_N = res >> 24;
29985 WRITE_LONG_F(adr, res)
29986 POST_IO
29987RET(30)
29988}
29989
29990// SUBA
29991OPCODE(0x90C0)
29992{
29993 u32 adr, res;
29994 u32 src, dst;
29995
29996 src = (s32)DREGs16((Opcode >> 0) & 7);
29997 dst = AREGu32((Opcode >> 9) & 7);
29998 res = dst - src;
29999 AREG((Opcode >> 9) & 7) = res;
30000RET(8)
30001}
30002
30003// SUBA
30004OPCODE(0x90C8)
30005{
30006 u32 adr, res;
30007 u32 src, dst;
30008
30009 src = (s32)AREGs16((Opcode >> 0) & 7);
30010 dst = AREGu32((Opcode >> 9) & 7);
30011 res = dst - src;
30012 AREG((Opcode >> 9) & 7) = res;
30013RET(8)
30014}
30015
30016// SUBA
30017OPCODE(0x90D0)
30018{
30019 u32 adr, res;
30020 u32 src, dst;
30021
30022 adr = AREG((Opcode >> 0) & 7);
30023 PRE_IO
30024 READSX_WORD_F(adr, src)
30025 dst = AREGu32((Opcode >> 9) & 7);
30026 res = dst - src;
30027 AREG((Opcode >> 9) & 7) = res;
30028 POST_IO
30029RET(10)
30030}
30031
30032// SUBA
30033OPCODE(0x90D8)
30034{
30035 u32 adr, res;
30036 u32 src, dst;
30037
30038 adr = AREG((Opcode >> 0) & 7);
30039 AREG((Opcode >> 0) & 7) += 2;
30040 PRE_IO
30041 READSX_WORD_F(adr, src)
30042 dst = AREGu32((Opcode >> 9) & 7);
30043 res = dst - src;
30044 AREG((Opcode >> 9) & 7) = res;
30045 POST_IO
30046RET(10)
30047}
30048
30049// SUBA
30050OPCODE(0x90E0)
30051{
30052 u32 adr, res;
30053 u32 src, dst;
30054
30055 adr = AREG((Opcode >> 0) & 7) - 2;
30056 AREG((Opcode >> 0) & 7) = adr;
30057 PRE_IO
30058 READSX_WORD_F(adr, src)
30059 dst = AREGu32((Opcode >> 9) & 7);
30060 res = dst - src;
30061 AREG((Opcode >> 9) & 7) = res;
30062 POST_IO
30063RET(12)
30064}
30065
30066// SUBA
30067OPCODE(0x90E8)
30068{
30069 u32 adr, res;
30070 u32 src, dst;
30071
30072 FETCH_SWORD(adr);
30073 adr += AREG((Opcode >> 0) & 7);
30074 PRE_IO
30075 READSX_WORD_F(adr, src)
30076 dst = AREGu32((Opcode >> 9) & 7);
30077 res = dst - src;
30078 AREG((Opcode >> 9) & 7) = res;
30079 POST_IO
30080RET(14)
30081}
30082
30083// SUBA
30084OPCODE(0x90F0)
30085{
30086 u32 adr, res;
30087 u32 src, dst;
30088
30089 adr = AREG((Opcode >> 0) & 7);
30090 DECODE_EXT_WORD
30091 PRE_IO
30092 READSX_WORD_F(adr, src)
30093 dst = AREGu32((Opcode >> 9) & 7);
30094 res = dst - src;
30095 AREG((Opcode >> 9) & 7) = res;
30096 POST_IO
30097RET(16)
30098}
30099
30100// SUBA
30101OPCODE(0x90F8)
30102{
30103 u32 adr, res;
30104 u32 src, dst;
30105
30106 FETCH_SWORD(adr);
30107 PRE_IO
30108 READSX_WORD_F(adr, src)
30109 dst = AREGu32((Opcode >> 9) & 7);
30110 res = dst - src;
30111 AREG((Opcode >> 9) & 7) = res;
30112 POST_IO
30113RET(14)
30114}
30115
30116// SUBA
30117OPCODE(0x90F9)
30118{
30119 u32 adr, res;
30120 u32 src, dst;
30121
30122 FETCH_LONG(adr);
30123 PRE_IO
30124 READSX_WORD_F(adr, src)
30125 dst = AREGu32((Opcode >> 9) & 7);
30126 res = dst - src;
30127 AREG((Opcode >> 9) & 7) = res;
30128 POST_IO
30129RET(18)
30130}
30131
30132// SUBA
30133OPCODE(0x90FA)
30134{
30135 u32 adr, res;
30136 u32 src, dst;
30137
30138 adr = GET_SWORD + ((u32)(PC) - BasePC);
30139 PC++;
30140 PRE_IO
30141 READSX_WORD_F(adr, src)
30142 dst = AREGu32((Opcode >> 9) & 7);
30143 res = dst - src;
30144 AREG((Opcode >> 9) & 7) = res;
30145 POST_IO
30146RET(14)
30147}
30148
30149// SUBA
30150OPCODE(0x90FB)
30151{
30152 u32 adr, res;
30153 u32 src, dst;
30154
30155 adr = (u32)(PC) - BasePC;
30156 DECODE_EXT_WORD
30157 PRE_IO
30158 READSX_WORD_F(adr, src)
30159 dst = AREGu32((Opcode >> 9) & 7);
30160 res = dst - src;
30161 AREG((Opcode >> 9) & 7) = res;
30162 POST_IO
30163RET(16)
30164}
30165
30166// SUBA
30167OPCODE(0x90FC)
30168{
30169 u32 adr, res;
30170 u32 src, dst;
30171
30172 FETCH_SWORD(src);
30173 dst = AREGu32((Opcode >> 9) & 7);
30174 res = dst - src;
30175 AREG((Opcode >> 9) & 7) = res;
30176RET(12)
30177}
30178
30179// SUBA
30180OPCODE(0x90DF)
30181{
30182 u32 adr, res;
30183 u32 src, dst;
30184
30185 adr = AREG(7);
30186 AREG(7) += 2;
30187 PRE_IO
30188 READSX_WORD_F(adr, src)
30189 dst = AREGu32((Opcode >> 9) & 7);
30190 res = dst - src;
30191 AREG((Opcode >> 9) & 7) = res;
30192 POST_IO
30193RET(10)
30194}
30195
30196// SUBA
30197OPCODE(0x90E7)
30198{
30199 u32 adr, res;
30200 u32 src, dst;
30201
30202 adr = AREG(7) - 2;
30203 AREG(7) = adr;
30204 PRE_IO
30205 READSX_WORD_F(adr, src)
30206 dst = AREGu32((Opcode >> 9) & 7);
30207 res = dst - src;
30208 AREG((Opcode >> 9) & 7) = res;
30209 POST_IO
30210RET(12)
30211}
30212
30213// SUBA
30214OPCODE(0x91C0)
30215{
30216 u32 adr, res;
30217 u32 src, dst;
30218
30219 src = (s32)DREGs32((Opcode >> 0) & 7);
30220 dst = AREGu32((Opcode >> 9) & 7);
30221 res = dst - src;
30222 AREG((Opcode >> 9) & 7) = res;
30223#ifdef USE_CYCLONE_TIMING
30224RET(8)
30225#else
30226RET(6)
30227#endif
30228}
30229
30230// SUBA
30231OPCODE(0x91C8)
30232{
30233 u32 adr, res;
30234 u32 src, dst;
30235
30236 src = (s32)AREGs32((Opcode >> 0) & 7);
30237 dst = AREGu32((Opcode >> 9) & 7);
30238 res = dst - src;
30239 AREG((Opcode >> 9) & 7) = res;
30240#ifdef USE_CYCLONE_TIMING
30241RET(8)
30242#else
30243RET(6)
30244#endif
30245}
30246
30247// SUBA
30248OPCODE(0x91D0)
30249{
30250 u32 adr, res;
30251 u32 src, dst;
30252
30253 adr = AREG((Opcode >> 0) & 7);
30254 PRE_IO
30255 READSX_LONG_F(adr, src)
30256 dst = AREGu32((Opcode >> 9) & 7);
30257 res = dst - src;
30258 AREG((Opcode >> 9) & 7) = res;
30259 POST_IO
30260RET(14)
30261}
30262
30263// SUBA
30264OPCODE(0x91D8)
30265{
30266 u32 adr, res;
30267 u32 src, dst;
30268
30269 adr = AREG((Opcode >> 0) & 7);
30270 AREG((Opcode >> 0) & 7) += 4;
30271 PRE_IO
30272 READSX_LONG_F(adr, src)
30273 dst = AREGu32((Opcode >> 9) & 7);
30274 res = dst - src;
30275 AREG((Opcode >> 9) & 7) = res;
30276 POST_IO
30277RET(14)
30278}
30279
30280// SUBA
30281OPCODE(0x91E0)
30282{
30283 u32 adr, res;
30284 u32 src, dst;
30285
30286 adr = AREG((Opcode >> 0) & 7) - 4;
30287 AREG((Opcode >> 0) & 7) = adr;
30288 PRE_IO
30289 READSX_LONG_F(adr, src)
30290 dst = AREGu32((Opcode >> 9) & 7);
30291 res = dst - src;
30292 AREG((Opcode >> 9) & 7) = res;
30293 POST_IO
30294RET(16)
30295}
30296
30297// SUBA
30298OPCODE(0x91E8)
30299{
30300 u32 adr, res;
30301 u32 src, dst;
30302
30303 FETCH_SWORD(adr);
30304 adr += AREG((Opcode >> 0) & 7);
30305 PRE_IO
30306 READSX_LONG_F(adr, src)
30307 dst = AREGu32((Opcode >> 9) & 7);
30308 res = dst - src;
30309 AREG((Opcode >> 9) & 7) = res;
30310 POST_IO
30311RET(18)
30312}
30313
30314// SUBA
30315OPCODE(0x91F0)
30316{
30317 u32 adr, res;
30318 u32 src, dst;
30319
30320 adr = AREG((Opcode >> 0) & 7);
30321 DECODE_EXT_WORD
30322 PRE_IO
30323 READSX_LONG_F(adr, src)
30324 dst = AREGu32((Opcode >> 9) & 7);
30325 res = dst - src;
30326 AREG((Opcode >> 9) & 7) = res;
30327 POST_IO
30328RET(20)
30329}
30330
30331// SUBA
30332OPCODE(0x91F8)
30333{
30334 u32 adr, res;
30335 u32 src, dst;
30336
30337 FETCH_SWORD(adr);
30338 PRE_IO
30339 READSX_LONG_F(adr, src)
30340 dst = AREGu32((Opcode >> 9) & 7);
30341 res = dst - src;
30342 AREG((Opcode >> 9) & 7) = res;
30343 POST_IO
30344RET(18)
30345}
30346
30347// SUBA
30348OPCODE(0x91F9)
30349{
30350 u32 adr, res;
30351 u32 src, dst;
30352
30353 FETCH_LONG(adr);
30354 PRE_IO
30355 READSX_LONG_F(adr, src)
30356 dst = AREGu32((Opcode >> 9) & 7);
30357 res = dst - src;
30358 AREG((Opcode >> 9) & 7) = res;
30359 POST_IO
30360RET(22)
30361}
30362
30363// SUBA
30364OPCODE(0x91FA)
30365{
30366 u32 adr, res;
30367 u32 src, dst;
30368
30369 adr = GET_SWORD + ((u32)(PC) - BasePC);
30370 PC++;
30371 PRE_IO
30372 READSX_LONG_F(adr, src)
30373 dst = AREGu32((Opcode >> 9) & 7);
30374 res = dst - src;
30375 AREG((Opcode >> 9) & 7) = res;
30376 POST_IO
30377RET(18)
30378}
30379
30380// SUBA
30381OPCODE(0x91FB)
30382{
30383 u32 adr, res;
30384 u32 src, dst;
30385
30386 adr = (u32)(PC) - BasePC;
30387 DECODE_EXT_WORD
30388 PRE_IO
30389 READSX_LONG_F(adr, src)
30390 dst = AREGu32((Opcode >> 9) & 7);
30391 res = dst - src;
30392 AREG((Opcode >> 9) & 7) = res;
30393 POST_IO
30394RET(20)
30395}
30396
30397// SUBA
30398OPCODE(0x91FC)
30399{
30400 u32 adr, res;
30401 u32 src, dst;
30402
30403 FETCH_LONG(src);
30404 dst = AREGu32((Opcode >> 9) & 7);
30405 res = dst - src;
30406 AREG((Opcode >> 9) & 7) = res;
30407#ifdef USE_CYCLONE_TIMING
30408RET(16)
30409#else
30410RET(14)
30411#endif
30412}
30413
30414// SUBA
30415OPCODE(0x91DF)
30416{
30417 u32 adr, res;
30418 u32 src, dst;
30419
30420 adr = AREG(7);
30421 AREG(7) += 4;
30422 PRE_IO
30423 READSX_LONG_F(adr, src)
30424 dst = AREGu32((Opcode >> 9) & 7);
30425 res = dst - src;
30426 AREG((Opcode >> 9) & 7) = res;
30427 POST_IO
30428RET(14)
30429}
30430
30431// SUBA
30432OPCODE(0x91E7)
30433{
30434 u32 adr, res;
30435 u32 src, dst;
30436
30437 adr = AREG(7) - 4;
30438 AREG(7) = adr;
30439 PRE_IO
30440 READSX_LONG_F(adr, src)
30441 dst = AREGu32((Opcode >> 9) & 7);
30442 res = dst - src;
30443 AREG((Opcode >> 9) & 7) = res;
30444 POST_IO
30445RET(16)
30446}
30447
30448// CMP
30449OPCODE(0xB000)
30450{
30451 u32 adr, res;
30452 u32 src, dst;
30453
30454 src = DREGu8((Opcode >> 0) & 7);
30455 dst = DREGu8((Opcode >> 9) & 7);
30456 res = dst - src;
30457 flag_N = flag_C = res;
30458 flag_V = (src ^ dst) & (res ^ dst);
30459 flag_NotZ = res & 0xFF;
30460RET(4)
30461}
30462
30463// CMP
30464OPCODE(0xB008)
30465{
30466 u32 adr, res;
30467 u32 src, dst;
30468
30469 // can't read byte from Ax registers !
30470 m68kcontext.execinfo |= M68K_FAULTED;
30471 m68kcontext.io_cycle_counter = 0;
30472/*
30473 goto famec_Exec_End;
30474 dst = DREGu8((Opcode >> 9) & 7);
30475 res = dst - src;
30476 flag_N = flag_C = res;
30477 flag_V = (src ^ dst) & (res ^ dst);
30478 flag_NotZ = res & 0xFF;
30479*/
30480RET(4)
30481}
30482
30483// CMP
30484OPCODE(0xB010)
30485{
30486 u32 adr, res;
30487 u32 src, dst;
30488
30489 adr = AREG((Opcode >> 0) & 7);
30490 PRE_IO
30491 READ_BYTE_F(adr, src)
30492 dst = DREGu8((Opcode >> 9) & 7);
30493 res = dst - src;
30494 flag_N = flag_C = res;
30495 flag_V = (src ^ dst) & (res ^ dst);
30496 flag_NotZ = res & 0xFF;
30497 POST_IO
30498RET(8)
30499}
30500
30501// CMP
30502OPCODE(0xB018)
30503{
30504 u32 adr, res;
30505 u32 src, dst;
30506
30507 adr = AREG((Opcode >> 0) & 7);
30508 AREG((Opcode >> 0) & 7) += 1;
30509 PRE_IO
30510 READ_BYTE_F(adr, src)
30511 dst = DREGu8((Opcode >> 9) & 7);
30512 res = dst - src;
30513 flag_N = flag_C = res;
30514 flag_V = (src ^ dst) & (res ^ dst);
30515 flag_NotZ = res & 0xFF;
30516 POST_IO
30517RET(8)
30518}
30519
30520// CMP
30521OPCODE(0xB020)
30522{
30523 u32 adr, res;
30524 u32 src, dst;
30525
30526 adr = AREG((Opcode >> 0) & 7) - 1;
30527 AREG((Opcode >> 0) & 7) = adr;
30528 PRE_IO
30529 READ_BYTE_F(adr, src)
30530 dst = DREGu8((Opcode >> 9) & 7);
30531 res = dst - src;
30532 flag_N = flag_C = res;
30533 flag_V = (src ^ dst) & (res ^ dst);
30534 flag_NotZ = res & 0xFF;
30535 POST_IO
30536RET(10)
30537}
30538
30539// CMP
30540OPCODE(0xB028)
30541{
30542 u32 adr, res;
30543 u32 src, dst;
30544
30545 FETCH_SWORD(adr);
30546 adr += AREG((Opcode >> 0) & 7);
30547 PRE_IO
30548 READ_BYTE_F(adr, src)
30549 dst = DREGu8((Opcode >> 9) & 7);
30550 res = dst - src;
30551 flag_N = flag_C = res;
30552 flag_V = (src ^ dst) & (res ^ dst);
30553 flag_NotZ = res & 0xFF;
30554 POST_IO
30555RET(12)
30556}
30557
30558// CMP
30559OPCODE(0xB030)
30560{
30561 u32 adr, res;
30562 u32 src, dst;
30563
30564 adr = AREG((Opcode >> 0) & 7);
30565 DECODE_EXT_WORD
30566 PRE_IO
30567 READ_BYTE_F(adr, src)
30568 dst = DREGu8((Opcode >> 9) & 7);
30569 res = dst - src;
30570 flag_N = flag_C = res;
30571 flag_V = (src ^ dst) & (res ^ dst);
30572 flag_NotZ = res & 0xFF;
30573 POST_IO
30574RET(14)
30575}
30576
30577// CMP
30578OPCODE(0xB038)
30579{
30580 u32 adr, res;
30581 u32 src, dst;
30582
30583 FETCH_SWORD(adr);
30584 PRE_IO
30585 READ_BYTE_F(adr, src)
30586 dst = DREGu8((Opcode >> 9) & 7);
30587 res = dst - src;
30588 flag_N = flag_C = res;
30589 flag_V = (src ^ dst) & (res ^ dst);
30590 flag_NotZ = res & 0xFF;
30591 POST_IO
30592RET(12)
30593}
30594
30595// CMP
30596OPCODE(0xB039)
30597{
30598 u32 adr, res;
30599 u32 src, dst;
30600
30601 FETCH_LONG(adr);
30602 PRE_IO
30603 READ_BYTE_F(adr, src)
30604 dst = DREGu8((Opcode >> 9) & 7);
30605 res = dst - src;
30606 flag_N = flag_C = res;
30607 flag_V = (src ^ dst) & (res ^ dst);
30608 flag_NotZ = res & 0xFF;
30609 POST_IO
30610RET(16)
30611}
30612
30613// CMP
30614OPCODE(0xB03A)
30615{
30616 u32 adr, res;
30617 u32 src, dst;
30618
30619 adr = GET_SWORD + ((u32)(PC) - BasePC);
30620 PC++;
30621 PRE_IO
30622 READ_BYTE_F(adr, src)
30623 dst = DREGu8((Opcode >> 9) & 7);
30624 res = dst - src;
30625 flag_N = flag_C = res;
30626 flag_V = (src ^ dst) & (res ^ dst);
30627 flag_NotZ = res & 0xFF;
30628 POST_IO
30629RET(12)
30630}
30631
30632// CMP
30633OPCODE(0xB03B)
30634{
30635 u32 adr, res;
30636 u32 src, dst;
30637
30638 adr = (u32)(PC) - BasePC;
30639 DECODE_EXT_WORD
30640 PRE_IO
30641 READ_BYTE_F(adr, src)
30642 dst = DREGu8((Opcode >> 9) & 7);
30643 res = dst - src;
30644 flag_N = flag_C = res;
30645 flag_V = (src ^ dst) & (res ^ dst);
30646 flag_NotZ = res & 0xFF;
30647 POST_IO
30648RET(14)
30649}
30650
30651// CMP
30652OPCODE(0xB03C)
30653{
30654 u32 adr, res;
30655 u32 src, dst;
30656
30657 FETCH_BYTE(src);
30658 dst = DREGu8((Opcode >> 9) & 7);
30659 res = dst - src;
30660 flag_N = flag_C = res;
30661 flag_V = (src ^ dst) & (res ^ dst);
30662 flag_NotZ = res & 0xFF;
30663RET(8)
30664}
30665
30666// CMP
30667OPCODE(0xB01F)
30668{
30669 u32 adr, res;
30670 u32 src, dst;
30671
30672 adr = AREG(7);
30673 AREG(7) += 2;
30674 PRE_IO
30675 READ_BYTE_F(adr, src)
30676 dst = DREGu8((Opcode >> 9) & 7);
30677 res = dst - src;
30678 flag_N = flag_C = res;
30679 flag_V = (src ^ dst) & (res ^ dst);
30680 flag_NotZ = res & 0xFF;
30681 POST_IO
30682RET(8)
30683}
30684
30685// CMP
30686OPCODE(0xB027)
30687{
30688 u32 adr, res;
30689 u32 src, dst;
30690
30691 adr = AREG(7) - 2;
30692 AREG(7) = adr;
30693 PRE_IO
30694 READ_BYTE_F(adr, src)
30695 dst = DREGu8((Opcode >> 9) & 7);
30696 res = dst - src;
30697 flag_N = flag_C = res;
30698 flag_V = (src ^ dst) & (res ^ dst);
30699 flag_NotZ = res & 0xFF;
30700 POST_IO
30701RET(10)
30702}
30703
30704// CMP
30705OPCODE(0xB040)
30706{
30707 u32 adr, res;
30708 u32 src, dst;
30709
30710 src = DREGu16((Opcode >> 0) & 7);
30711 dst = DREGu16((Opcode >> 9) & 7);
30712 res = dst - src;
30713 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
30714 flag_N = flag_C = res >> 8;
30715 flag_NotZ = res & 0xFFFF;
30716RET(4)
30717}
30718
30719// CMP
30720OPCODE(0xB048)
30721{
30722 u32 adr, res;
30723 u32 src, dst;
30724
30725 src = AREGu16((Opcode >> 0) & 7);
30726 dst = DREGu16((Opcode >> 9) & 7);
30727 res = dst - src;
30728 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
30729 flag_N = flag_C = res >> 8;
30730 flag_NotZ = res & 0xFFFF;
30731RET(4)
30732}
30733
30734// CMP
30735OPCODE(0xB050)
30736{
30737 u32 adr, res;
30738 u32 src, dst;
30739
30740 adr = AREG((Opcode >> 0) & 7);
30741 PRE_IO
30742 READ_WORD_F(adr, src)
30743 dst = DREGu16((Opcode >> 9) & 7);
30744 res = dst - src;
30745 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
30746 flag_N = flag_C = res >> 8;
30747 flag_NotZ = res & 0xFFFF;
30748 POST_IO
30749RET(8)
30750}
30751
30752// CMP
30753OPCODE(0xB058)
30754{
30755 u32 adr, res;
30756 u32 src, dst;
30757
30758 adr = AREG((Opcode >> 0) & 7);
30759 AREG((Opcode >> 0) & 7) += 2;
30760 PRE_IO
30761 READ_WORD_F(adr, src)
30762 dst = DREGu16((Opcode >> 9) & 7);
30763 res = dst - src;
30764 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
30765 flag_N = flag_C = res >> 8;
30766 flag_NotZ = res & 0xFFFF;
30767 POST_IO
30768RET(8)
30769}
30770
30771// CMP
30772OPCODE(0xB060)
30773{
30774 u32 adr, res;
30775 u32 src, dst;
30776
30777 adr = AREG((Opcode >> 0) & 7) - 2;
30778 AREG((Opcode >> 0) & 7) = adr;
30779 PRE_IO
30780 READ_WORD_F(adr, src)
30781 dst = DREGu16((Opcode >> 9) & 7);
30782 res = dst - src;
30783 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
30784 flag_N = flag_C = res >> 8;
30785 flag_NotZ = res & 0xFFFF;
30786 POST_IO
30787RET(10)
30788}
30789
30790// CMP
30791OPCODE(0xB068)
30792{
30793 u32 adr, res;
30794 u32 src, dst;
30795
30796 FETCH_SWORD(adr);
30797 adr += AREG((Opcode >> 0) & 7);
30798 PRE_IO
30799 READ_WORD_F(adr, src)
30800 dst = DREGu16((Opcode >> 9) & 7);
30801 res = dst - src;
30802 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
30803 flag_N = flag_C = res >> 8;
30804 flag_NotZ = res & 0xFFFF;
30805 POST_IO
30806RET(12)
30807}
30808
30809// CMP
30810OPCODE(0xB070)
30811{
30812 u32 adr, res;
30813 u32 src, dst;
30814
30815 adr = AREG((Opcode >> 0) & 7);
30816 DECODE_EXT_WORD
30817 PRE_IO
30818 READ_WORD_F(adr, src)
30819 dst = DREGu16((Opcode >> 9) & 7);
30820 res = dst - src;
30821 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
30822 flag_N = flag_C = res >> 8;
30823 flag_NotZ = res & 0xFFFF;
30824 POST_IO
30825RET(14)
30826}
30827
30828// CMP
30829OPCODE(0xB078)
30830{
30831 u32 adr, res;
30832 u32 src, dst;
30833
30834 FETCH_SWORD(adr);
30835 PRE_IO
30836 READ_WORD_F(adr, src)
30837 dst = DREGu16((Opcode >> 9) & 7);
30838 res = dst - src;
30839 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
30840 flag_N = flag_C = res >> 8;
30841 flag_NotZ = res & 0xFFFF;
30842 POST_IO
30843RET(12)
30844}
30845
30846// CMP
30847OPCODE(0xB079)
30848{
30849 u32 adr, res;
30850 u32 src, dst;
30851
30852 FETCH_LONG(adr);
30853 PRE_IO
30854 READ_WORD_F(adr, src)
30855 dst = DREGu16((Opcode >> 9) & 7);
30856 res = dst - src;
30857 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
30858 flag_N = flag_C = res >> 8;
30859 flag_NotZ = res & 0xFFFF;
30860 POST_IO
30861RET(16)
30862}
30863
30864// CMP
30865OPCODE(0xB07A)
30866{
30867 u32 adr, res;
30868 u32 src, dst;
30869
30870 adr = GET_SWORD + ((u32)(PC) - BasePC);
30871 PC++;
30872 PRE_IO
30873 READ_WORD_F(adr, src)
30874 dst = DREGu16((Opcode >> 9) & 7);
30875 res = dst - src;
30876 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
30877 flag_N = flag_C = res >> 8;
30878 flag_NotZ = res & 0xFFFF;
30879 POST_IO
30880RET(12)
30881}
30882
30883// CMP
30884OPCODE(0xB07B)
30885{
30886 u32 adr, res;
30887 u32 src, dst;
30888
30889 adr = (u32)(PC) - BasePC;
30890 DECODE_EXT_WORD
30891 PRE_IO
30892 READ_WORD_F(adr, src)
30893 dst = DREGu16((Opcode >> 9) & 7);
30894 res = dst - src;
30895 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
30896 flag_N = flag_C = res >> 8;
30897 flag_NotZ = res & 0xFFFF;
30898 POST_IO
30899RET(14)
30900}
30901
30902// CMP
30903OPCODE(0xB07C)
30904{
30905 u32 adr, res;
30906 u32 src, dst;
30907
30908 FETCH_WORD(src);
30909 dst = DREGu16((Opcode >> 9) & 7);
30910 res = dst - src;
30911 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
30912 flag_N = flag_C = res >> 8;
30913 flag_NotZ = res & 0xFFFF;
30914RET(8)
30915}
30916
30917// CMP
30918OPCODE(0xB05F)
30919{
30920 u32 adr, res;
30921 u32 src, dst;
30922
30923 adr = AREG(7);
30924 AREG(7) += 2;
30925 PRE_IO
30926 READ_WORD_F(adr, src)
30927 dst = DREGu16((Opcode >> 9) & 7);
30928 res = dst - src;
30929 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
30930 flag_N = flag_C = res >> 8;
30931 flag_NotZ = res & 0xFFFF;
30932 POST_IO
30933RET(8)
30934}
30935
30936// CMP
30937OPCODE(0xB067)
30938{
30939 u32 adr, res;
30940 u32 src, dst;
30941
30942 adr = AREG(7) - 2;
30943 AREG(7) = adr;
30944 PRE_IO
30945 READ_WORD_F(adr, src)
30946 dst = DREGu16((Opcode >> 9) & 7);
30947 res = dst - src;
30948 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
30949 flag_N = flag_C = res >> 8;
30950 flag_NotZ = res & 0xFFFF;
30951 POST_IO
30952RET(10)
30953}
30954
30955// CMP
30956OPCODE(0xB080)
30957{
30958 u32 adr, res;
30959 u32 src, dst;
30960
30961 src = DREGu32((Opcode >> 0) & 7);
30962 dst = DREGu32((Opcode >> 9) & 7);
30963 res = dst - src;
30964 flag_NotZ = res;
30965 flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
30966 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
30967 flag_N = res >> 24;
30968RET(6)
30969}
30970
30971// CMP
30972OPCODE(0xB088)
30973{
30974 u32 adr, res;
30975 u32 src, dst;
30976
30977 src = AREGu32((Opcode >> 0) & 7);
30978 dst = DREGu32((Opcode >> 9) & 7);
30979 res = dst - src;
30980 flag_NotZ = res;
30981 flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
30982 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
30983 flag_N = res >> 24;
30984RET(6)
30985}
30986
30987// CMP
30988OPCODE(0xB090)
30989{
30990 u32 adr, res;
30991 u32 src, dst;
30992
30993 adr = AREG((Opcode >> 0) & 7);
30994 PRE_IO
30995 READ_LONG_F(adr, src)
30996 dst = DREGu32((Opcode >> 9) & 7);
30997 res = dst - src;
30998 flag_NotZ = res;
30999 flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
31000 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
31001 flag_N = res >> 24;
31002 POST_IO
31003RET(14)
31004}
31005
31006// CMP
31007OPCODE(0xB098)
31008{
31009 u32 adr, res;
31010 u32 src, dst;
31011
31012 adr = AREG((Opcode >> 0) & 7);
31013 AREG((Opcode >> 0) & 7) += 4;
31014 PRE_IO
31015 READ_LONG_F(adr, src)
31016 dst = DREGu32((Opcode >> 9) & 7);
31017 res = dst - src;
31018 flag_NotZ = res;
31019 flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
31020 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
31021 flag_N = res >> 24;
31022 POST_IO
31023RET(14)
31024}
31025
31026// CMP
31027OPCODE(0xB0A0)
31028{
31029 u32 adr, res;
31030 u32 src, dst;
31031
31032 adr = AREG((Opcode >> 0) & 7) - 4;
31033 AREG((Opcode >> 0) & 7) = adr;
31034 PRE_IO
31035 READ_LONG_F(adr, src)
31036 dst = DREGu32((Opcode >> 9) & 7);
31037 res = dst - src;
31038 flag_NotZ = res;
31039 flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
31040 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
31041 flag_N = res >> 24;
31042 POST_IO
31043RET(16)
31044}
31045
31046// CMP
31047OPCODE(0xB0A8)
31048{
31049 u32 adr, res;
31050 u32 src, dst;
31051
31052 FETCH_SWORD(adr);
31053 adr += AREG((Opcode >> 0) & 7);
31054 PRE_IO
31055 READ_LONG_F(adr, src)
31056 dst = DREGu32((Opcode >> 9) & 7);
31057 res = dst - src;
31058 flag_NotZ = res;
31059 flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
31060 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
31061 flag_N = res >> 24;
31062 POST_IO
31063RET(18)
31064}
31065
31066// CMP
31067OPCODE(0xB0B0)
31068{
31069 u32 adr, res;
31070 u32 src, dst;
31071
31072 adr = AREG((Opcode >> 0) & 7);
31073 DECODE_EXT_WORD
31074 PRE_IO
31075 READ_LONG_F(adr, src)
31076 dst = DREGu32((Opcode >> 9) & 7);
31077 res = dst - src;
31078 flag_NotZ = res;
31079 flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
31080 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
31081 flag_N = res >> 24;
31082 POST_IO
31083RET(20)
31084}
31085
31086// CMP
31087OPCODE(0xB0B8)
31088{
31089 u32 adr, res;
31090 u32 src, dst;
31091
31092 FETCH_SWORD(adr);
31093 PRE_IO
31094 READ_LONG_F(adr, src)
31095 dst = DREGu32((Opcode >> 9) & 7);
31096 res = dst - src;
31097 flag_NotZ = res;
31098 flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
31099 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
31100 flag_N = res >> 24;
31101 POST_IO
31102RET(18)
31103}
31104
31105// CMP
31106OPCODE(0xB0B9)
31107{
31108 u32 adr, res;
31109 u32 src, dst;
31110
31111 FETCH_LONG(adr);
31112 PRE_IO
31113 READ_LONG_F(adr, src)
31114 dst = DREGu32((Opcode >> 9) & 7);
31115 res = dst - src;
31116 flag_NotZ = res;
31117 flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
31118 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
31119 flag_N = res >> 24;
31120 POST_IO
31121RET(22)
31122}
31123
31124// CMP
31125OPCODE(0xB0BA)
31126{
31127 u32 adr, res;
31128 u32 src, dst;
31129
31130 adr = GET_SWORD + ((u32)(PC) - BasePC);
31131 PC++;
31132 PRE_IO
31133 READ_LONG_F(adr, src)
31134 dst = DREGu32((Opcode >> 9) & 7);
31135 res = dst - src;
31136 flag_NotZ = res;
31137 flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
31138 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
31139 flag_N = res >> 24;
31140 POST_IO
31141RET(18)
31142}
31143
31144// CMP
31145OPCODE(0xB0BB)
31146{
31147 u32 adr, res;
31148 u32 src, dst;
31149
31150 adr = (u32)(PC) - BasePC;
31151 DECODE_EXT_WORD
31152 PRE_IO
31153 READ_LONG_F(adr, src)
31154 dst = DREGu32((Opcode >> 9) & 7);
31155 res = dst - src;
31156 flag_NotZ = res;
31157 flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
31158 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
31159 flag_N = res >> 24;
31160 POST_IO
31161RET(20)
31162}
31163
31164// CMP
31165OPCODE(0xB0BC)
31166{
31167 u32 adr, res;
31168 u32 src, dst;
31169
31170 FETCH_LONG(src);
31171 dst = DREGu32((Opcode >> 9) & 7);
31172 res = dst - src;
31173 flag_NotZ = res;
31174 flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
31175 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
31176 flag_N = res >> 24;
31177RET(14)
31178}
31179
31180// CMP
31181OPCODE(0xB09F)
31182{
31183 u32 adr, res;
31184 u32 src, dst;
31185
31186 adr = AREG(7);
31187 AREG(7) += 4;
31188 PRE_IO
31189 READ_LONG_F(adr, src)
31190 dst = DREGu32((Opcode >> 9) & 7);
31191 res = dst - src;
31192 flag_NotZ = res;
31193 flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
31194 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
31195 flag_N = res >> 24;
31196 POST_IO
31197RET(14)
31198}
31199
31200// CMP
31201OPCODE(0xB0A7)
31202{
31203 u32 adr, res;
31204 u32 src, dst;
31205
31206 adr = AREG(7) - 4;
31207 AREG(7) = adr;
31208 PRE_IO
31209 READ_LONG_F(adr, src)
31210 dst = DREGu32((Opcode >> 9) & 7);
31211 res = dst - src;
31212 flag_NotZ = res;
31213 flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
31214 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
31215 flag_N = res >> 24;
31216 POST_IO
31217RET(16)
31218}
31219
31220// CMPM
31221OPCODE(0xB108)
31222{
31223 u32 adr, res;
31224 u32 src, dst;
31225
31226 adr = AREG((Opcode >> 0) & 7);
31227 AREG((Opcode >> 0) & 7) += 1;
31228 PRE_IO
31229 READ_BYTE_F(adr, src)
31230 adr = AREG((Opcode >> 9) & 7);
31231 AREG((Opcode >> 9) & 7) += 1;
31232 READ_BYTE_F(adr, dst)
31233 res = dst - src;
31234 flag_N = flag_C = res;
31235 flag_V = (src ^ dst) & (res ^ dst);
31236 flag_NotZ = res & 0xFF;
31237 POST_IO
31238RET(12)
31239}
31240
31241// CMPM
31242OPCODE(0xB148)
31243{
31244 u32 adr, res;
31245 u32 src, dst;
31246
31247 adr = AREG((Opcode >> 0) & 7);
31248 AREG((Opcode >> 0) & 7) += 2;
31249 PRE_IO
31250 READ_WORD_F(adr, src)
31251 adr = AREG((Opcode >> 9) & 7);
31252 AREG((Opcode >> 9) & 7) += 2;
31253 READ_WORD_F(adr, dst)
31254 res = dst - src;
31255 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
31256 flag_N = flag_C = res >> 8;
31257 flag_NotZ = res & 0xFFFF;
31258 POST_IO
31259RET(12)
31260}
31261
31262// CMPM
31263OPCODE(0xB188)
31264{
31265 u32 adr, res;
31266 u32 src, dst;
31267
31268 adr = AREG((Opcode >> 0) & 7);
31269 AREG((Opcode >> 0) & 7) += 4;
31270 PRE_IO
31271 READ_LONG_F(adr, src)
31272 adr = AREG((Opcode >> 9) & 7);
31273 AREG((Opcode >> 9) & 7) += 4;
31274 READ_LONG_F(adr, dst)
31275 res = dst - src;
31276 flag_NotZ = res;
31277 flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
31278 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
31279 flag_N = res >> 24;
31280 POST_IO
31281RET(20)
31282}
31283
31284// CMP7M
31285OPCODE(0xB10F)
31286{
31287 u32 adr, res;
31288 u32 src, dst;
31289
31290 adr = AREG(7);
31291 AREG(7) += 2;
31292 PRE_IO
31293 READ_BYTE_F(adr, src)
31294 adr = AREG((Opcode >> 9) & 7);
31295 AREG((Opcode >> 9) & 7) += 1;
31296 READ_BYTE_F(adr, dst)
31297 res = dst - src;
31298 flag_N = flag_C = res;
31299 flag_V = (src ^ dst) & (res ^ dst);
31300 flag_NotZ = res & 0xFF;
31301 POST_IO
31302RET(12)
31303}
31304
31305// CMP7M
31306OPCODE(0xB14F)
31307{
31308 u32 adr, res;
31309 u32 src, dst;
31310
31311 adr = AREG(7);
31312 AREG(7) += 2;
31313 PRE_IO
31314 READ_WORD_F(adr, src)
31315 adr = AREG((Opcode >> 9) & 7);
31316 AREG((Opcode >> 9) & 7) += 2;
31317 READ_WORD_F(adr, dst)
31318 res = dst - src;
31319 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
31320 flag_N = flag_C = res >> 8;
31321 flag_NotZ = res & 0xFFFF;
31322 POST_IO
31323RET(12)
31324}
31325
31326// CMP7M
31327OPCODE(0xB18F)
31328{
31329 u32 adr, res;
31330 u32 src, dst;
31331
31332 adr = AREG(7);
31333 AREG(7) += 4;
31334 PRE_IO
31335 READ_LONG_F(adr, src)
31336 adr = AREG((Opcode >> 9) & 7);
31337 AREG((Opcode >> 9) & 7) += 4;
31338 READ_LONG_F(adr, dst)
31339 res = dst - src;
31340 flag_NotZ = res;
31341 flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
31342 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
31343 flag_N = res >> 24;
31344 POST_IO
31345RET(20)
31346}
31347
31348// CMPM7
31349OPCODE(0xBF08)
31350{
31351 u32 adr, res;
31352 u32 src, dst;
31353
31354 adr = AREG((Opcode >> 0) & 7);
31355 AREG((Opcode >> 0) & 7) += 1;
31356 PRE_IO
31357 READ_BYTE_F(adr, src)
31358 adr = AREG(7);
31359 AREG(7) += 2;
31360 READ_BYTE_F(adr, dst)
31361 res = dst - src;
31362 flag_N = flag_C = res;
31363 flag_V = (src ^ dst) & (res ^ dst);
31364 flag_NotZ = res & 0xFF;
31365 POST_IO
31366RET(12)
31367}
31368
31369// CMPM7
31370OPCODE(0xBF48)
31371{
31372 u32 adr, res;
31373 u32 src, dst;
31374
31375 adr = AREG((Opcode >> 0) & 7);
31376 AREG((Opcode >> 0) & 7) += 2;
31377 PRE_IO
31378 READ_WORD_F(adr, src)
31379 adr = AREG(7);
31380 AREG(7) += 2;
31381 READ_WORD_F(adr, dst)
31382 res = dst - src;
31383 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
31384 flag_N = flag_C = res >> 8;
31385 flag_NotZ = res & 0xFFFF;
31386 POST_IO
31387RET(12)
31388}
31389
31390// CMPM7
31391OPCODE(0xBF88)
31392{
31393 u32 adr, res;
31394 u32 src, dst;
31395
31396 adr = AREG((Opcode >> 0) & 7);
31397 AREG((Opcode >> 0) & 7) += 4;
31398 PRE_IO
31399 READ_LONG_F(adr, src)
31400 adr = AREG(7);
31401 AREG(7) += 4;
31402 READ_LONG_F(adr, dst)
31403 res = dst - src;
31404 flag_NotZ = res;
31405 flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
31406 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
31407 flag_N = res >> 24;
31408 POST_IO
31409RET(20)
31410}
31411
31412// CMP7M7
31413OPCODE(0xBF0F)
31414{
31415 u32 adr, res;
31416 u32 src, dst;
31417
31418 adr = AREG(7);
31419 AREG(7) += 2;
31420 PRE_IO
31421 READ_BYTE_F(adr, src)
31422 adr = AREG(7);
31423 AREG(7) += 2;
31424 READ_BYTE_F(adr, dst)
31425 res = dst - src;
31426 flag_N = flag_C = res;
31427 flag_V = (src ^ dst) & (res ^ dst);
31428 flag_NotZ = res & 0xFF;
31429 POST_IO
31430RET(12)
31431}
31432
31433// CMP7M7
31434OPCODE(0xBF4F)
31435{
31436 u32 adr, res;
31437 u32 src, dst;
31438
31439 adr = AREG(7);
31440 AREG(7) += 2;
31441 PRE_IO
31442 READ_WORD_F(adr, src)
31443 adr = AREG(7);
31444 AREG(7) += 2;
31445 READ_WORD_F(adr, dst)
31446 res = dst - src;
31447 flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
31448 flag_N = flag_C = res >> 8;
31449 flag_NotZ = res & 0xFFFF;
31450 POST_IO
31451RET(12)
31452}
31453
31454// CMP7M7
31455OPCODE(0xBF8F)
31456{
31457 u32 adr, res;
31458 u32 src, dst;
31459
31460 adr = AREG(7);
31461 AREG(7) += 4;
31462 PRE_IO
31463 READ_LONG_F(adr, src)
31464 adr = AREG(7);
31465 AREG(7) += 4;
31466 READ_LONG_F(adr, dst)
31467 res = dst - src;
31468 flag_NotZ = res;
31469 flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
31470 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
31471 flag_N = res >> 24;
31472 POST_IO
31473RET(20)
31474}
31475
31476// EORDa
31477OPCODE(0xB100)
31478{
31479 u32 adr, res;
31480 u32 src, dst;
31481
31482 src = DREGu8((Opcode >> 9) & 7);
31483 res = DREGu8((Opcode >> 0) & 7);
31484 res ^= src;
31485 flag_C = 0;
31486 flag_V = 0;
31487 flag_NotZ = res;
31488 flag_N = res;
31489 DREGu8((Opcode >> 0) & 7) = res;
31490RET(4)
31491}
31492
31493// EORDa
31494OPCODE(0xB110)
31495{
31496 u32 adr, res;
31497 u32 src, dst;
31498
31499 src = DREGu8((Opcode >> 9) & 7);
31500 adr = AREG((Opcode >> 0) & 7);
31501 PRE_IO
31502 READ_BYTE_F(adr, res)
31503 res ^= src;
31504 flag_C = 0;
31505 flag_V = 0;
31506 flag_NotZ = res;
31507 flag_N = res;
31508 WRITE_BYTE_F(adr, res)
31509 POST_IO
31510RET(12)
31511}
31512
31513// EORDa
31514OPCODE(0xB118)
31515{
31516 u32 adr, res;
31517 u32 src, dst;
31518
31519 src = DREGu8((Opcode >> 9) & 7);
31520 adr = AREG((Opcode >> 0) & 7);
31521 AREG((Opcode >> 0) & 7) += 1;
31522 PRE_IO
31523 READ_BYTE_F(adr, res)
31524 res ^= src;
31525 flag_C = 0;
31526 flag_V = 0;
31527 flag_NotZ = res;
31528 flag_N = res;
31529 WRITE_BYTE_F(adr, res)
31530 POST_IO
31531RET(12)
31532}
31533
31534// EORDa
31535OPCODE(0xB120)
31536{
31537 u32 adr, res;
31538 u32 src, dst;
31539
31540 src = DREGu8((Opcode >> 9) & 7);
31541 adr = AREG((Opcode >> 0) & 7) - 1;
31542 AREG((Opcode >> 0) & 7) = adr;
31543 PRE_IO
31544 READ_BYTE_F(adr, res)
31545 res ^= src;
31546 flag_C = 0;
31547 flag_V = 0;
31548 flag_NotZ = res;
31549 flag_N = res;
31550 WRITE_BYTE_F(adr, res)
31551 POST_IO
31552RET(14)
31553}
31554
31555// EORDa
31556OPCODE(0xB128)
31557{
31558 u32 adr, res;
31559 u32 src, dst;
31560
31561 src = DREGu8((Opcode >> 9) & 7);
31562 FETCH_SWORD(adr);
31563 adr += AREG((Opcode >> 0) & 7);
31564 PRE_IO
31565 READ_BYTE_F(adr, res)
31566 res ^= src;
31567 flag_C = 0;
31568 flag_V = 0;
31569 flag_NotZ = res;
31570 flag_N = res;
31571 WRITE_BYTE_F(adr, res)
31572 POST_IO
31573RET(16)
31574}
31575
31576// EORDa
31577OPCODE(0xB130)
31578{
31579 u32 adr, res;
31580 u32 src, dst;
31581
31582 src = DREGu8((Opcode >> 9) & 7);
31583 adr = AREG((Opcode >> 0) & 7);
31584 DECODE_EXT_WORD
31585 PRE_IO
31586 READ_BYTE_F(adr, res)
31587 res ^= src;
31588 flag_C = 0;
31589 flag_V = 0;
31590 flag_NotZ = res;
31591 flag_N = res;
31592 WRITE_BYTE_F(adr, res)
31593 POST_IO
31594RET(18)
31595}
31596
31597// EORDa
31598OPCODE(0xB138)
31599{
31600 u32 adr, res;
31601 u32 src, dst;
31602
31603 src = DREGu8((Opcode >> 9) & 7);
31604 FETCH_SWORD(adr);
31605 PRE_IO
31606 READ_BYTE_F(adr, res)
31607 res ^= src;
31608 flag_C = 0;
31609 flag_V = 0;
31610 flag_NotZ = res;
31611 flag_N = res;
31612 WRITE_BYTE_F(adr, res)
31613 POST_IO
31614RET(16)
31615}
31616
31617// EORDa
31618OPCODE(0xB139)
31619{
31620 u32 adr, res;
31621 u32 src, dst;
31622
31623 src = DREGu8((Opcode >> 9) & 7);
31624 FETCH_LONG(adr);
31625 PRE_IO
31626 READ_BYTE_F(adr, res)
31627 res ^= src;
31628 flag_C = 0;
31629 flag_V = 0;
31630 flag_NotZ = res;
31631 flag_N = res;
31632 WRITE_BYTE_F(adr, res)
31633 POST_IO
31634RET(20)
31635}
31636
31637// EORDa
31638OPCODE(0xB11F)
31639{
31640 u32 adr, res;
31641 u32 src, dst;
31642
31643 src = DREGu8((Opcode >> 9) & 7);
31644 adr = AREG(7);
31645 AREG(7) += 2;
31646 PRE_IO
31647 READ_BYTE_F(adr, res)
31648 res ^= src;
31649 flag_C = 0;
31650 flag_V = 0;
31651 flag_NotZ = res;
31652 flag_N = res;
31653 WRITE_BYTE_F(adr, res)
31654 POST_IO
31655RET(12)
31656}
31657
31658// EORDa
31659OPCODE(0xB127)
31660{
31661 u32 adr, res;
31662 u32 src, dst;
31663
31664 src = DREGu8((Opcode >> 9) & 7);
31665 adr = AREG(7) - 2;
31666 AREG(7) = adr;
31667 PRE_IO
31668 READ_BYTE_F(adr, res)
31669 res ^= src;
31670 flag_C = 0;
31671 flag_V = 0;
31672 flag_NotZ = res;
31673 flag_N = res;
31674 WRITE_BYTE_F(adr, res)
31675 POST_IO
31676RET(14)
31677}
31678
31679// EORDa
31680OPCODE(0xB140)
31681{
31682 u32 adr, res;
31683 u32 src, dst;
31684
31685 src = DREGu16((Opcode >> 9) & 7);
31686 res = DREGu16((Opcode >> 0) & 7);
31687 res ^= src;
31688 flag_C = 0;
31689 flag_V = 0;
31690 flag_NotZ = res;
31691 flag_N = res >> 8;
31692 DREGu16((Opcode >> 0) & 7) = res;
31693RET(4)
31694}
31695
31696// EORDa
31697OPCODE(0xB150)
31698{
31699 u32 adr, res;
31700 u32 src, dst;
31701
31702 src = DREGu16((Opcode >> 9) & 7);
31703 adr = AREG((Opcode >> 0) & 7);
31704 PRE_IO
31705 READ_WORD_F(adr, res)
31706 res ^= src;
31707 flag_C = 0;
31708 flag_V = 0;
31709 flag_NotZ = res;
31710 flag_N = res >> 8;
31711 WRITE_WORD_F(adr, res)
31712 POST_IO
31713RET(12)
31714}
31715
31716// EORDa
31717OPCODE(0xB158)
31718{
31719 u32 adr, res;
31720 u32 src, dst;
31721
31722 src = DREGu16((Opcode >> 9) & 7);
31723 adr = AREG((Opcode >> 0) & 7);
31724 AREG((Opcode >> 0) & 7) += 2;
31725 PRE_IO
31726 READ_WORD_F(adr, res)
31727 res ^= src;
31728 flag_C = 0;
31729 flag_V = 0;
31730 flag_NotZ = res;
31731 flag_N = res >> 8;
31732 WRITE_WORD_F(adr, res)
31733 POST_IO
31734RET(12)
31735}
31736
31737// EORDa
31738OPCODE(0xB160)
31739{
31740 u32 adr, res;
31741 u32 src, dst;
31742
31743 src = DREGu16((Opcode >> 9) & 7);
31744 adr = AREG((Opcode >> 0) & 7) - 2;
31745 AREG((Opcode >> 0) & 7) = adr;
31746 PRE_IO
31747 READ_WORD_F(adr, res)
31748 res ^= src;
31749 flag_C = 0;
31750 flag_V = 0;
31751 flag_NotZ = res;
31752 flag_N = res >> 8;
31753 WRITE_WORD_F(adr, res)
31754 POST_IO
31755RET(14)
31756}
31757
31758// EORDa
31759OPCODE(0xB168)
31760{
31761 u32 adr, res;
31762 u32 src, dst;
31763
31764 src = DREGu16((Opcode >> 9) & 7);
31765 FETCH_SWORD(adr);
31766 adr += AREG((Opcode >> 0) & 7);
31767 PRE_IO
31768 READ_WORD_F(adr, res)
31769 res ^= src;
31770 flag_C = 0;
31771 flag_V = 0;
31772 flag_NotZ = res;
31773 flag_N = res >> 8;
31774 WRITE_WORD_F(adr, res)
31775 POST_IO
31776RET(16)
31777}
31778
31779// EORDa
31780OPCODE(0xB170)
31781{
31782 u32 adr, res;
31783 u32 src, dst;
31784
31785 src = DREGu16((Opcode >> 9) & 7);
31786 adr = AREG((Opcode >> 0) & 7);
31787 DECODE_EXT_WORD
31788 PRE_IO
31789 READ_WORD_F(adr, res)
31790 res ^= src;
31791 flag_C = 0;
31792 flag_V = 0;
31793 flag_NotZ = res;
31794 flag_N = res >> 8;
31795 WRITE_WORD_F(adr, res)
31796 POST_IO
31797RET(18)
31798}
31799
31800// EORDa
31801OPCODE(0xB178)
31802{
31803 u32 adr, res;
31804 u32 src, dst;
31805
31806 src = DREGu16((Opcode >> 9) & 7);
31807 FETCH_SWORD(adr);
31808 PRE_IO
31809 READ_WORD_F(adr, res)
31810 res ^= src;
31811 flag_C = 0;
31812 flag_V = 0;
31813 flag_NotZ = res;
31814 flag_N = res >> 8;
31815 WRITE_WORD_F(adr, res)
31816 POST_IO
31817RET(16)
31818}
31819
31820// EORDa
31821OPCODE(0xB179)
31822{
31823 u32 adr, res;
31824 u32 src, dst;
31825
31826 src = DREGu16((Opcode >> 9) & 7);
31827 FETCH_LONG(adr);
31828 PRE_IO
31829 READ_WORD_F(adr, res)
31830 res ^= src;
31831 flag_C = 0;
31832 flag_V = 0;
31833 flag_NotZ = res;
31834 flag_N = res >> 8;
31835 WRITE_WORD_F(adr, res)
31836 POST_IO
31837RET(20)
31838}
31839
31840// EORDa
31841OPCODE(0xB15F)
31842{
31843 u32 adr, res;
31844 u32 src, dst;
31845
31846 src = DREGu16((Opcode >> 9) & 7);
31847 adr = AREG(7);
31848 AREG(7) += 2;
31849 PRE_IO
31850 READ_WORD_F(adr, res)
31851 res ^= src;
31852 flag_C = 0;
31853 flag_V = 0;
31854 flag_NotZ = res;
31855 flag_N = res >> 8;
31856 WRITE_WORD_F(adr, res)
31857 POST_IO
31858RET(12)
31859}
31860
31861// EORDa
31862OPCODE(0xB167)
31863{
31864 u32 adr, res;
31865 u32 src, dst;
31866
31867 src = DREGu16((Opcode >> 9) & 7);
31868 adr = AREG(7) - 2;
31869 AREG(7) = adr;
31870 PRE_IO
31871 READ_WORD_F(adr, res)
31872 res ^= src;
31873 flag_C = 0;
31874 flag_V = 0;
31875 flag_NotZ = res;
31876 flag_N = res >> 8;
31877 WRITE_WORD_F(adr, res)
31878 POST_IO
31879RET(14)
31880}
31881
31882// EORDa
31883OPCODE(0xB180)
31884{
31885 u32 adr, res;
31886 u32 src, dst;
31887
31888 src = DREGu32((Opcode >> 9) & 7);
31889 res = DREGu32((Opcode >> 0) & 7);
31890 res ^= src;
31891 flag_C = 0;
31892 flag_V = 0;
31893 flag_NotZ = res;
31894 flag_N = res >> 24;
31895 DREGu32((Opcode >> 0) & 7) = res;
31896RET(8)
31897}
31898
31899// EORDa
31900OPCODE(0xB190)
31901{
31902 u32 adr, res;
31903 u32 src, dst;
31904
31905 src = DREGu32((Opcode >> 9) & 7);
31906 adr = AREG((Opcode >> 0) & 7);
31907 PRE_IO
31908 READ_LONG_F(adr, res)
31909 res ^= src;
31910 flag_C = 0;
31911 flag_V = 0;
31912 flag_NotZ = res;
31913 flag_N = res >> 24;
31914 WRITE_LONG_F(adr, res)
31915 POST_IO
31916RET(20)
31917}
31918
31919// EORDa
31920OPCODE(0xB198)
31921{
31922 u32 adr, res;
31923 u32 src, dst;
31924
31925 src = DREGu32((Opcode >> 9) & 7);
31926 adr = AREG((Opcode >> 0) & 7);
31927 AREG((Opcode >> 0) & 7) += 4;
31928 PRE_IO
31929 READ_LONG_F(adr, res)
31930 res ^= src;
31931 flag_C = 0;
31932 flag_V = 0;
31933 flag_NotZ = res;
31934 flag_N = res >> 24;
31935 WRITE_LONG_F(adr, res)
31936 POST_IO
31937RET(20)
31938}
31939
31940// EORDa
31941OPCODE(0xB1A0)
31942{
31943 u32 adr, res;
31944 u32 src, dst;
31945
31946 src = DREGu32((Opcode >> 9) & 7);
31947 adr = AREG((Opcode >> 0) & 7) - 4;
31948 AREG((Opcode >> 0) & 7) = adr;
31949 PRE_IO
31950 READ_LONG_F(adr, res)
31951 res ^= src;
31952 flag_C = 0;
31953 flag_V = 0;
31954 flag_NotZ = res;
31955 flag_N = res >> 24;
31956 WRITE_LONG_F(adr, res)
31957 POST_IO
31958RET(22)
31959}
31960
31961// EORDa
31962OPCODE(0xB1A8)
31963{
31964 u32 adr, res;
31965 u32 src, dst;
31966
31967 src = DREGu32((Opcode >> 9) & 7);
31968 FETCH_SWORD(adr);
31969 adr += AREG((Opcode >> 0) & 7);
31970 PRE_IO
31971 READ_LONG_F(adr, res)
31972 res ^= src;
31973 flag_C = 0;
31974 flag_V = 0;
31975 flag_NotZ = res;
31976 flag_N = res >> 24;
31977 WRITE_LONG_F(adr, res)
31978 POST_IO
31979RET(24)
31980}
31981
31982// EORDa
31983OPCODE(0xB1B0)
31984{
31985 u32 adr, res;
31986 u32 src, dst;
31987
31988 src = DREGu32((Opcode >> 9) & 7);
31989 adr = AREG((Opcode >> 0) & 7);
31990 DECODE_EXT_WORD
31991 PRE_IO
31992 READ_LONG_F(adr, res)
31993 res ^= src;
31994 flag_C = 0;
31995 flag_V = 0;
31996 flag_NotZ = res;
31997 flag_N = res >> 24;
31998 WRITE_LONG_F(adr, res)
31999 POST_IO
32000RET(26)
32001}
32002
32003// EORDa
32004OPCODE(0xB1B8)
32005{
32006 u32 adr, res;
32007 u32 src, dst;
32008
32009 src = DREGu32((Opcode >> 9) & 7);
32010 FETCH_SWORD(adr);
32011 PRE_IO
32012 READ_LONG_F(adr, res)
32013 res ^= src;
32014 flag_C = 0;
32015 flag_V = 0;
32016 flag_NotZ = res;
32017 flag_N = res >> 24;
32018 WRITE_LONG_F(adr, res)
32019 POST_IO
32020RET(24)
32021}
32022
32023// EORDa
32024OPCODE(0xB1B9)
32025{
32026 u32 adr, res;
32027 u32 src, dst;
32028
32029 src = DREGu32((Opcode >> 9) & 7);
32030 FETCH_LONG(adr);
32031 PRE_IO
32032 READ_LONG_F(adr, res)
32033 res ^= src;
32034 flag_C = 0;
32035 flag_V = 0;
32036 flag_NotZ = res;
32037 flag_N = res >> 24;
32038 WRITE_LONG_F(adr, res)
32039 POST_IO
32040RET(28)
32041}
32042
32043// EORDa
32044OPCODE(0xB19F)
32045{
32046 u32 adr, res;
32047 u32 src, dst;
32048
32049 src = DREGu32((Opcode >> 9) & 7);
32050 adr = AREG(7);
32051 AREG(7) += 4;
32052 PRE_IO
32053 READ_LONG_F(adr, res)
32054 res ^= src;
32055 flag_C = 0;
32056 flag_V = 0;
32057 flag_NotZ = res;
32058 flag_N = res >> 24;
32059 WRITE_LONG_F(adr, res)
32060 POST_IO
32061RET(20)
32062}
32063
32064// EORDa
32065OPCODE(0xB1A7)
32066{
32067 u32 adr, res;
32068 u32 src, dst;
32069
32070 src = DREGu32((Opcode >> 9) & 7);
32071 adr = AREG(7) - 4;
32072 AREG(7) = adr;
32073 PRE_IO
32074 READ_LONG_F(adr, res)
32075 res ^= src;
32076 flag_C = 0;
32077 flag_V = 0;
32078 flag_NotZ = res;
32079 flag_N = res >> 24;
32080 WRITE_LONG_F(adr, res)
32081 POST_IO
32082RET(22)
32083}
32084
32085// CMPA
32086OPCODE(0xB0C0)
32087{
32088 u32 adr, res;
32089 u32 src, dst;
32090
32091 src = (s32)DREGs16((Opcode >> 0) & 7);
32092 dst = AREGu32((Opcode >> 9) & 7);
32093 res = dst - src;
32094 flag_NotZ = res;
32095 flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
32096 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
32097 flag_N = res >> 24;
32098RET(6)
32099}
32100
32101// CMPA
32102OPCODE(0xB0C8)
32103{
32104 u32 adr, res;
32105 u32 src, dst;
32106
32107 src = (s32)AREGs16((Opcode >> 0) & 7);
32108 dst = AREGu32((Opcode >> 9) & 7);
32109 res = dst - src;
32110 flag_NotZ = res;
32111 flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
32112 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
32113 flag_N = res >> 24;
32114RET(6)
32115}
32116
32117// CMPA
32118OPCODE(0xB0D0)
32119{
32120 u32 adr, res;
32121 u32 src, dst;
32122
32123 adr = AREG((Opcode >> 0) & 7);
32124 PRE_IO
32125 READSX_WORD_F(adr, src)
32126 dst = AREGu32((Opcode >> 9) & 7);
32127 res = dst - src;
32128 flag_NotZ = res;
32129 flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
32130 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
32131 flag_N = res >> 24;
32132 POST_IO
32133RET(10)
32134}
32135
32136// CMPA
32137OPCODE(0xB0D8)
32138{
32139 u32 adr, res;
32140 u32 src, dst;
32141
32142 adr = AREG((Opcode >> 0) & 7);
32143 AREG((Opcode >> 0) & 7) += 2;
32144 PRE_IO
32145 READSX_WORD_F(adr, src)
32146 dst = AREGu32((Opcode >> 9) & 7);
32147 res = dst - src;
32148 flag_NotZ = res;
32149 flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
32150 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
32151 flag_N = res >> 24;
32152 POST_IO
32153RET(10)
32154}
32155
32156// CMPA
32157OPCODE(0xB0E0)
32158{
32159 u32 adr, res;
32160 u32 src, dst;
32161
32162 adr = AREG((Opcode >> 0) & 7) - 2;
32163 AREG((Opcode >> 0) & 7) = adr;
32164 PRE_IO
32165 READSX_WORD_F(adr, src)
32166 dst = AREGu32((Opcode >> 9) & 7);
32167 res = dst - src;
32168 flag_NotZ = res;
32169 flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
32170 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
32171 flag_N = res >> 24;
32172 POST_IO
32173RET(12)
32174}
32175
32176// CMPA
32177OPCODE(0xB0E8)
32178{
32179 u32 adr, res;
32180 u32 src, dst;
32181
32182 FETCH_SWORD(adr);
32183 adr += AREG((Opcode >> 0) & 7);
32184 PRE_IO
32185 READSX_WORD_F(adr, src)
32186 dst = AREGu32((Opcode >> 9) & 7);
32187 res = dst - src;
32188 flag_NotZ = res;
32189 flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
32190 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
32191 flag_N = res >> 24;
32192 POST_IO
32193RET(14)
32194}
32195
32196// CMPA
32197OPCODE(0xB0F0)
32198{
32199 u32 adr, res;
32200 u32 src, dst;
32201
32202 adr = AREG((Opcode >> 0) & 7);
32203 DECODE_EXT_WORD
32204 PRE_IO
32205 READSX_WORD_F(adr, src)
32206 dst = AREGu32((Opcode >> 9) & 7);
32207 res = dst - src;
32208 flag_NotZ = res;
32209 flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
32210 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
32211 flag_N = res >> 24;
32212 POST_IO
32213RET(16)
32214}
32215
32216// CMPA
32217OPCODE(0xB0F8)
32218{
32219 u32 adr, res;
32220 u32 src, dst;
32221
32222 FETCH_SWORD(adr);
32223 PRE_IO
32224 READSX_WORD_F(adr, src)
32225 dst = AREGu32((Opcode >> 9) & 7);
32226 res = dst - src;
32227 flag_NotZ = res;
32228 flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
32229 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
32230 flag_N = res >> 24;
32231 POST_IO
32232RET(14)
32233}
32234
32235// CMPA
32236OPCODE(0xB0F9)
32237{
32238 u32 adr, res;
32239 u32 src, dst;
32240
32241 FETCH_LONG(adr);
32242 PRE_IO
32243 READSX_WORD_F(adr, src)
32244 dst = AREGu32((Opcode >> 9) & 7);
32245 res = dst - src;
32246 flag_NotZ = res;
32247 flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
32248 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
32249 flag_N = res >> 24;
32250 POST_IO
32251RET(18)
32252}
32253
32254// CMPA
32255OPCODE(0xB0FA)
32256{
32257 u32 adr, res;
32258 u32 src, dst;
32259
32260 adr = GET_SWORD + ((u32)(PC) - BasePC);
32261 PC++;
32262 PRE_IO
32263 READSX_WORD_F(adr, src)
32264 dst = AREGu32((Opcode >> 9) & 7);
32265 res = dst - src;
32266 flag_NotZ = res;
32267 flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
32268 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
32269 flag_N = res >> 24;
32270 POST_IO
32271RET(14)
32272}
32273
32274// CMPA
32275OPCODE(0xB0FB)
32276{
32277 u32 adr, res;
32278 u32 src, dst;
32279
32280 adr = (u32)(PC) - BasePC;
32281 DECODE_EXT_WORD
32282 PRE_IO
32283 READSX_WORD_F(adr, src)
32284 dst = AREGu32((Opcode >> 9) & 7);
32285 res = dst - src;
32286 flag_NotZ = res;
32287 flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
32288 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
32289 flag_N = res >> 24;
32290 POST_IO
32291RET(16)
32292}
32293
32294// CMPA
32295OPCODE(0xB0FC)
32296{
32297 u32 adr, res;
32298 u32 src, dst;
32299
32300 FETCH_SWORD(src);
32301 dst = AREGu32((Opcode >> 9) & 7);
32302 res = dst - src;
32303 flag_NotZ = res;
32304 flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
32305 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
32306 flag_N = res >> 24;
32307RET(10)
32308}
32309
32310// CMPA
32311OPCODE(0xB0DF)
32312{
32313 u32 adr, res;
32314 u32 src, dst;
32315
32316 adr = AREG(7);
32317 AREG(7) += 2;
32318 PRE_IO
32319 READSX_WORD_F(adr, src)
32320 dst = AREGu32((Opcode >> 9) & 7);
32321 res = dst - src;
32322 flag_NotZ = res;
32323 flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
32324 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
32325 flag_N = res >> 24;
32326 POST_IO
32327RET(10)
32328}
32329
32330// CMPA
32331OPCODE(0xB0E7)
32332{
32333 u32 adr, res;
32334 u32 src, dst;
32335
32336 adr = AREG(7) - 2;
32337 AREG(7) = adr;
32338 PRE_IO
32339 READSX_WORD_F(adr, src)
32340 dst = AREGu32((Opcode >> 9) & 7);
32341 res = dst - src;
32342 flag_NotZ = res;
32343 flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
32344 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
32345 flag_N = res >> 24;
32346 POST_IO
32347RET(12)
32348}
32349
32350// CMPA
32351OPCODE(0xB1C0)
32352{
32353 u32 adr, res;
32354 u32 src, dst;
32355
32356 src = (s32)DREGs32((Opcode >> 0) & 7);
32357 dst = AREGu32((Opcode >> 9) & 7);
32358 res = dst - src;
32359 flag_NotZ = res;
32360 flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
32361 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
32362 flag_N = res >> 24;
32363RET(6)
32364}
32365
32366// CMPA
32367OPCODE(0xB1C8)
32368{
32369 u32 adr, res;
32370 u32 src, dst;
32371
32372 src = (s32)AREGs32((Opcode >> 0) & 7);
32373 dst = AREGu32((Opcode >> 9) & 7);
32374 res = dst - src;
32375 flag_NotZ = res;
32376 flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
32377 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
32378 flag_N = res >> 24;
32379RET(6)
32380}
32381
32382// CMPA
32383OPCODE(0xB1D0)
32384{
32385 u32 adr, res;
32386 u32 src, dst;
32387
32388 adr = AREG((Opcode >> 0) & 7);
32389 PRE_IO
32390 READSX_LONG_F(adr, src)
32391 dst = AREGu32((Opcode >> 9) & 7);
32392 res = dst - src;
32393 flag_NotZ = res;
32394 flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
32395 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
32396 flag_N = res >> 24;
32397 POST_IO
32398RET(14)
32399}
32400
32401// CMPA
32402OPCODE(0xB1D8)
32403{
32404 u32 adr, res;
32405 u32 src, dst;
32406
32407 adr = AREG((Opcode >> 0) & 7);
32408 AREG((Opcode >> 0) & 7) += 4;
32409 PRE_IO
32410 READSX_LONG_F(adr, src)
32411 dst = AREGu32((Opcode >> 9) & 7);
32412 res = dst - src;
32413 flag_NotZ = res;
32414 flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
32415 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
32416 flag_N = res >> 24;
32417 POST_IO
32418RET(14)
32419}
32420
32421// CMPA
32422OPCODE(0xB1E0)
32423{
32424 u32 adr, res;
32425 u32 src, dst;
32426
32427 adr = AREG((Opcode >> 0) & 7) - 4;
32428 AREG((Opcode >> 0) & 7) = adr;
32429 PRE_IO
32430 READSX_LONG_F(adr, src)
32431 dst = AREGu32((Opcode >> 9) & 7);
32432 res = dst - src;
32433 flag_NotZ = res;
32434 flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
32435 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
32436 flag_N = res >> 24;
32437 POST_IO
32438RET(16)
32439}
32440
32441// CMPA
32442OPCODE(0xB1E8)
32443{
32444 u32 adr, res;
32445 u32 src, dst;
32446
32447 FETCH_SWORD(adr);
32448 adr += AREG((Opcode >> 0) & 7);
32449 PRE_IO
32450 READSX_LONG_F(adr, src)
32451 dst = AREGu32((Opcode >> 9) & 7);
32452 res = dst - src;
32453 flag_NotZ = res;
32454 flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
32455 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
32456 flag_N = res >> 24;
32457 POST_IO
32458RET(18)
32459}
32460
32461// CMPA
32462OPCODE(0xB1F0)
32463{
32464 u32 adr, res;
32465 u32 src, dst;
32466
32467 adr = AREG((Opcode >> 0) & 7);
32468 DECODE_EXT_WORD
32469 PRE_IO
32470 READSX_LONG_F(adr, src)
32471 dst = AREGu32((Opcode >> 9) & 7);
32472 res = dst - src;
32473 flag_NotZ = res;
32474 flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
32475 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
32476 flag_N = res >> 24;
32477 POST_IO
32478RET(20)
32479}
32480
32481// CMPA
32482OPCODE(0xB1F8)
32483{
32484 u32 adr, res;
32485 u32 src, dst;
32486
32487 FETCH_SWORD(adr);
32488 PRE_IO
32489 READSX_LONG_F(adr, src)
32490 dst = AREGu32((Opcode >> 9) & 7);
32491 res = dst - src;
32492 flag_NotZ = res;
32493 flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
32494 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
32495 flag_N = res >> 24;
32496 POST_IO
32497RET(18)
32498}
32499
32500// CMPA
32501OPCODE(0xB1F9)
32502{
32503 u32 adr, res;
32504 u32 src, dst;
32505
32506 FETCH_LONG(adr);
32507 PRE_IO
32508 READSX_LONG_F(adr, src)
32509 dst = AREGu32((Opcode >> 9) & 7);
32510 res = dst - src;
32511 flag_NotZ = res;
32512 flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
32513 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
32514 flag_N = res >> 24;
32515 POST_IO
32516RET(22)
32517}
32518
32519// CMPA
32520OPCODE(0xB1FA)
32521{
32522 u32 adr, res;
32523 u32 src, dst;
32524
32525 adr = GET_SWORD + ((u32)(PC) - BasePC);
32526 PC++;
32527 PRE_IO
32528 READSX_LONG_F(adr, src)
32529 dst = AREGu32((Opcode >> 9) & 7);
32530 res = dst - src;
32531 flag_NotZ = res;
32532 flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
32533 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
32534 flag_N = res >> 24;
32535 POST_IO
32536RET(18)
32537}
32538
32539// CMPA
32540OPCODE(0xB1FB)
32541{
32542 u32 adr, res;
32543 u32 src, dst;
32544
32545 adr = (u32)(PC) - BasePC;
32546 DECODE_EXT_WORD
32547 PRE_IO
32548 READSX_LONG_F(adr, src)
32549 dst = AREGu32((Opcode >> 9) & 7);
32550 res = dst - src;
32551 flag_NotZ = res;
32552 flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
32553 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
32554 flag_N = res >> 24;
32555 POST_IO
32556RET(20)
32557}
32558
32559// CMPA
32560OPCODE(0xB1FC)
32561{
32562 u32 adr, res;
32563 u32 src, dst;
32564
32565 FETCH_LONG(src);
32566 dst = AREGu32((Opcode >> 9) & 7);
32567 res = dst - src;
32568 flag_NotZ = res;
32569 flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
32570 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
32571 flag_N = res >> 24;
32572RET(14)
32573}
32574
32575// CMPA
32576OPCODE(0xB1DF)
32577{
32578 u32 adr, res;
32579 u32 src, dst;
32580
32581 adr = AREG(7);
32582 AREG(7) += 4;
32583 PRE_IO
32584 READSX_LONG_F(adr, src)
32585 dst = AREGu32((Opcode >> 9) & 7);
32586 res = dst - src;
32587 flag_NotZ = res;
32588 flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
32589 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
32590 flag_N = res >> 24;
32591 POST_IO
32592RET(14)
32593}
32594
32595// CMPA
32596OPCODE(0xB1E7)
32597{
32598 u32 adr, res;
32599 u32 src, dst;
32600
32601 adr = AREG(7) - 4;
32602 AREG(7) = adr;
32603 PRE_IO
32604 READSX_LONG_F(adr, src)
32605 dst = AREGu32((Opcode >> 9) & 7);
32606 res = dst - src;
32607 flag_NotZ = res;
32608 flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
32609 flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
32610 flag_N = res >> 24;
32611 POST_IO
32612RET(16)
32613}
32614
32615// ANDaD
32616OPCODE(0xC000)
32617{
32618 u32 adr, res;
32619 u32 src, dst;
32620
32621 src = DREGu8((Opcode >> 0) & 7);
32622 res = DREGu8((Opcode >> 9) & 7);
32623 res &= src;
32624 flag_C = 0;
32625 flag_V = 0;
32626 flag_NotZ = res;
32627 flag_N = res;
32628 DREGu8((Opcode >> 9) & 7) = res;
32629RET(4)
32630}
32631
32632// ANDaD
32633OPCODE(0xC010)
32634{
32635 u32 adr, res;
32636 u32 src, dst;
32637
32638 adr = AREG((Opcode >> 0) & 7);
32639 PRE_IO
32640 READ_BYTE_F(adr, src)
32641 res = DREGu8((Opcode >> 9) & 7);
32642 res &= src;
32643 flag_C = 0;
32644 flag_V = 0;
32645 flag_NotZ = res;
32646 flag_N = res;
32647 DREGu8((Opcode >> 9) & 7) = res;
32648 POST_IO
32649RET(8)
32650}
32651
32652// ANDaD
32653OPCODE(0xC018)
32654{
32655 u32 adr, res;
32656 u32 src, dst;
32657
32658 adr = AREG((Opcode >> 0) & 7);
32659 AREG((Opcode >> 0) & 7) += 1;
32660 PRE_IO
32661 READ_BYTE_F(adr, src)
32662 res = DREGu8((Opcode >> 9) & 7);
32663 res &= src;
32664 flag_C = 0;
32665 flag_V = 0;
32666 flag_NotZ = res;
32667 flag_N = res;
32668 DREGu8((Opcode >> 9) & 7) = res;
32669 POST_IO
32670RET(8)
32671}
32672
32673// ANDaD
32674OPCODE(0xC020)
32675{
32676 u32 adr, res;
32677 u32 src, dst;
32678
32679 adr = AREG((Opcode >> 0) & 7) - 1;
32680 AREG((Opcode >> 0) & 7) = adr;
32681 PRE_IO
32682 READ_BYTE_F(adr, src)
32683 res = DREGu8((Opcode >> 9) & 7);
32684 res &= src;
32685 flag_C = 0;
32686 flag_V = 0;
32687 flag_NotZ = res;
32688 flag_N = res;
32689 DREGu8((Opcode >> 9) & 7) = res;
32690 POST_IO
32691RET(10)
32692}
32693
32694// ANDaD
32695OPCODE(0xC028)
32696{
32697 u32 adr, res;
32698 u32 src, dst;
32699
32700 FETCH_SWORD(adr);
32701 adr += AREG((Opcode >> 0) & 7);
32702 PRE_IO
32703 READ_BYTE_F(adr, src)
32704 res = DREGu8((Opcode >> 9) & 7);
32705 res &= src;
32706 flag_C = 0;
32707 flag_V = 0;
32708 flag_NotZ = res;
32709 flag_N = res;
32710 DREGu8((Opcode >> 9) & 7) = res;
32711 POST_IO
32712RET(12)
32713}
32714
32715// ANDaD
32716OPCODE(0xC030)
32717{
32718 u32 adr, res;
32719 u32 src, dst;
32720
32721 adr = AREG((Opcode >> 0) & 7);
32722 DECODE_EXT_WORD
32723 PRE_IO
32724 READ_BYTE_F(adr, src)
32725 res = DREGu8((Opcode >> 9) & 7);
32726 res &= src;
32727 flag_C = 0;
32728 flag_V = 0;
32729 flag_NotZ = res;
32730 flag_N = res;
32731 DREGu8((Opcode >> 9) & 7) = res;
32732 POST_IO
32733RET(14)
32734}
32735
32736// ANDaD
32737OPCODE(0xC038)
32738{
32739 u32 adr, res;
32740 u32 src, dst;
32741
32742 FETCH_SWORD(adr);
32743 PRE_IO
32744 READ_BYTE_F(adr, src)
32745 res = DREGu8((Opcode >> 9) & 7);
32746 res &= src;
32747 flag_C = 0;
32748 flag_V = 0;
32749 flag_NotZ = res;
32750 flag_N = res;
32751 DREGu8((Opcode >> 9) & 7) = res;
32752 POST_IO
32753RET(12)
32754}
32755
32756// ANDaD
32757OPCODE(0xC039)
32758{
32759 u32 adr, res;
32760 u32 src, dst;
32761
32762 FETCH_LONG(adr);
32763 PRE_IO
32764 READ_BYTE_F(adr, src)
32765 res = DREGu8((Opcode >> 9) & 7);
32766 res &= src;
32767 flag_C = 0;
32768 flag_V = 0;
32769 flag_NotZ = res;
32770 flag_N = res;
32771 DREGu8((Opcode >> 9) & 7) = res;
32772 POST_IO
32773RET(16)
32774}
32775
32776// ANDaD
32777OPCODE(0xC03A)
32778{
32779 u32 adr, res;
32780 u32 src, dst;
32781
32782 adr = GET_SWORD + ((u32)(PC) - BasePC);
32783 PC++;
32784 PRE_IO
32785 READ_BYTE_F(adr, src)
32786 res = DREGu8((Opcode >> 9) & 7);
32787 res &= src;
32788 flag_C = 0;
32789 flag_V = 0;
32790 flag_NotZ = res;
32791 flag_N = res;
32792 DREGu8((Opcode >> 9) & 7) = res;
32793 POST_IO
32794RET(12)
32795}
32796
32797// ANDaD
32798OPCODE(0xC03B)
32799{
32800 u32 adr, res;
32801 u32 src, dst;
32802
32803 adr = (u32)(PC) - BasePC;
32804 DECODE_EXT_WORD
32805 PRE_IO
32806 READ_BYTE_F(adr, src)
32807 res = DREGu8((Opcode >> 9) & 7);
32808 res &= src;
32809 flag_C = 0;
32810 flag_V = 0;
32811 flag_NotZ = res;
32812 flag_N = res;
32813 DREGu8((Opcode >> 9) & 7) = res;
32814 POST_IO
32815RET(14)
32816}
32817
32818// ANDaD
32819OPCODE(0xC03C)
32820{
32821 u32 adr, res;
32822 u32 src, dst;
32823
32824 FETCH_BYTE(src);
32825 res = DREGu8((Opcode >> 9) & 7);
32826 res &= src;
32827 flag_C = 0;
32828 flag_V = 0;
32829 flag_NotZ = res;
32830 flag_N = res;
32831 DREGu8((Opcode >> 9) & 7) = res;
32832RET(8)
32833}
32834
32835// ANDaD
32836OPCODE(0xC01F)
32837{
32838 u32 adr, res;
32839 u32 src, dst;
32840
32841 adr = AREG(7);
32842 AREG(7) += 2;
32843 PRE_IO
32844 READ_BYTE_F(adr, src)
32845 res = DREGu8((Opcode >> 9) & 7);
32846 res &= src;
32847 flag_C = 0;
32848 flag_V = 0;
32849 flag_NotZ = res;
32850 flag_N = res;
32851 DREGu8((Opcode >> 9) & 7) = res;
32852 POST_IO
32853RET(8)
32854}
32855
32856// ANDaD
32857OPCODE(0xC027)
32858{
32859 u32 adr, res;
32860 u32 src, dst;
32861
32862 adr = AREG(7) - 2;
32863 AREG(7) = adr;
32864 PRE_IO
32865 READ_BYTE_F(adr, src)
32866 res = DREGu8((Opcode >> 9) & 7);
32867 res &= src;
32868 flag_C = 0;
32869 flag_V = 0;
32870 flag_NotZ = res;
32871 flag_N = res;
32872 DREGu8((Opcode >> 9) & 7) = res;
32873 POST_IO
32874RET(10)
32875}
32876
32877// ANDaD
32878OPCODE(0xC040)
32879{
32880 u32 adr, res;
32881 u32 src, dst;
32882
32883 src = DREGu16((Opcode >> 0) & 7);
32884 res = DREGu16((Opcode >> 9) & 7);
32885 res &= src;
32886 flag_C = 0;
32887 flag_V = 0;
32888 flag_NotZ = res;
32889 flag_N = res >> 8;
32890 DREGu16((Opcode >> 9) & 7) = res;
32891RET(4)
32892}
32893
32894// ANDaD
32895OPCODE(0xC050)
32896{
32897 u32 adr, res;
32898 u32 src, dst;
32899
32900 adr = AREG((Opcode >> 0) & 7);
32901 PRE_IO
32902 READ_WORD_F(adr, src)
32903 res = DREGu16((Opcode >> 9) & 7);
32904 res &= src;
32905 flag_C = 0;
32906 flag_V = 0;
32907 flag_NotZ = res;
32908 flag_N = res >> 8;
32909 DREGu16((Opcode >> 9) & 7) = res;
32910 POST_IO
32911RET(8)
32912}
32913
32914// ANDaD
32915OPCODE(0xC058)
32916{
32917 u32 adr, res;
32918 u32 src, dst;
32919
32920 adr = AREG((Opcode >> 0) & 7);
32921 AREG((Opcode >> 0) & 7) += 2;
32922 PRE_IO
32923 READ_WORD_F(adr, src)
32924 res = DREGu16((Opcode >> 9) & 7);
32925 res &= src;
32926 flag_C = 0;
32927 flag_V = 0;
32928 flag_NotZ = res;
32929 flag_N = res >> 8;
32930 DREGu16((Opcode >> 9) & 7) = res;
32931 POST_IO
32932RET(8)
32933}
32934
32935// ANDaD
32936OPCODE(0xC060)
32937{
32938 u32 adr, res;
32939 u32 src, dst;
32940
32941 adr = AREG((Opcode >> 0) & 7) - 2;
32942 AREG((Opcode >> 0) & 7) = adr;
32943 PRE_IO
32944 READ_WORD_F(adr, src)
32945 res = DREGu16((Opcode >> 9) & 7);
32946 res &= src;
32947 flag_C = 0;
32948 flag_V = 0;
32949 flag_NotZ = res;
32950 flag_N = res >> 8;
32951 DREGu16((Opcode >> 9) & 7) = res;
32952 POST_IO
32953RET(10)
32954}
32955
32956// ANDaD
32957OPCODE(0xC068)
32958{
32959 u32 adr, res;
32960 u32 src, dst;
32961
32962 FETCH_SWORD(adr);
32963 adr += AREG((Opcode >> 0) & 7);
32964 PRE_IO
32965 READ_WORD_F(adr, src)
32966 res = DREGu16((Opcode >> 9) & 7);
32967 res &= src;
32968 flag_C = 0;
32969 flag_V = 0;
32970 flag_NotZ = res;
32971 flag_N = res >> 8;
32972 DREGu16((Opcode >> 9) & 7) = res;
32973 POST_IO
32974RET(12)
32975}
32976
32977// ANDaD
32978OPCODE(0xC070)
32979{
32980 u32 adr, res;
32981 u32 src, dst;
32982
32983 adr = AREG((Opcode >> 0) & 7);
32984 DECODE_EXT_WORD
32985 PRE_IO
32986 READ_WORD_F(adr, src)
32987 res = DREGu16((Opcode >> 9) & 7);
32988 res &= src;
32989 flag_C = 0;
32990 flag_V = 0;
32991 flag_NotZ = res;
32992 flag_N = res >> 8;
32993 DREGu16((Opcode >> 9) & 7) = res;
32994 POST_IO
32995RET(14)
32996}
32997
32998// ANDaD
32999OPCODE(0xC078)
33000{
33001 u32 adr, res;
33002 u32 src, dst;
33003
33004 FETCH_SWORD(adr);
33005 PRE_IO
33006 READ_WORD_F(adr, src)
33007 res = DREGu16((Opcode >> 9) & 7);
33008 res &= src;
33009 flag_C = 0;
33010 flag_V = 0;
33011 flag_NotZ = res;
33012 flag_N = res >> 8;
33013 DREGu16((Opcode >> 9) & 7) = res;
33014 POST_IO
33015RET(12)
33016}
33017
33018// ANDaD
33019OPCODE(0xC079)
33020{
33021 u32 adr, res;
33022 u32 src, dst;
33023
33024 FETCH_LONG(adr);
33025 PRE_IO
33026 READ_WORD_F(adr, src)
33027 res = DREGu16((Opcode >> 9) & 7);
33028 res &= src;
33029 flag_C = 0;
33030 flag_V = 0;
33031 flag_NotZ = res;
33032 flag_N = res >> 8;
33033 DREGu16((Opcode >> 9) & 7) = res;
33034 POST_IO
33035RET(16)
33036}
33037
33038// ANDaD
33039OPCODE(0xC07A)
33040{
33041 u32 adr, res;
33042 u32 src, dst;
33043
33044 adr = GET_SWORD + ((u32)(PC) - BasePC);
33045 PC++;
33046 PRE_IO
33047 READ_WORD_F(adr, src)
33048 res = DREGu16((Opcode >> 9) & 7);
33049 res &= src;
33050 flag_C = 0;
33051 flag_V = 0;
33052 flag_NotZ = res;
33053 flag_N = res >> 8;
33054 DREGu16((Opcode >> 9) & 7) = res;
33055 POST_IO
33056RET(12)
33057}
33058
33059// ANDaD
33060OPCODE(0xC07B)
33061{
33062 u32 adr, res;
33063 u32 src, dst;
33064
33065 adr = (u32)(PC) - BasePC;
33066 DECODE_EXT_WORD
33067 PRE_IO
33068 READ_WORD_F(adr, src)
33069 res = DREGu16((Opcode >> 9) & 7);
33070 res &= src;
33071 flag_C = 0;
33072 flag_V = 0;
33073 flag_NotZ = res;
33074 flag_N = res >> 8;
33075 DREGu16((Opcode >> 9) & 7) = res;
33076 POST_IO
33077RET(14)
33078}
33079
33080// ANDaD
33081OPCODE(0xC07C)
33082{
33083 u32 adr, res;
33084 u32 src, dst;
33085
33086 FETCH_WORD(src);
33087 res = DREGu16((Opcode >> 9) & 7);
33088 res &= src;
33089 flag_C = 0;
33090 flag_V = 0;
33091 flag_NotZ = res;
33092 flag_N = res >> 8;
33093 DREGu16((Opcode >> 9) & 7) = res;
33094RET(8)
33095}
33096
33097// ANDaD
33098OPCODE(0xC05F)
33099{
33100 u32 adr, res;
33101 u32 src, dst;
33102
33103 adr = AREG(7);
33104 AREG(7) += 2;
33105 PRE_IO
33106 READ_WORD_F(adr, src)
33107 res = DREGu16((Opcode >> 9) & 7);
33108 res &= src;
33109 flag_C = 0;
33110 flag_V = 0;
33111 flag_NotZ = res;
33112 flag_N = res >> 8;
33113 DREGu16((Opcode >> 9) & 7) = res;
33114 POST_IO
33115RET(8)
33116}
33117
33118// ANDaD
33119OPCODE(0xC067)
33120{
33121 u32 adr, res;
33122 u32 src, dst;
33123
33124 adr = AREG(7) - 2;
33125 AREG(7) = adr;
33126 PRE_IO
33127 READ_WORD_F(adr, src)
33128 res = DREGu16((Opcode >> 9) & 7);
33129 res &= src;
33130 flag_C = 0;
33131 flag_V = 0;
33132 flag_NotZ = res;
33133 flag_N = res >> 8;
33134 DREGu16((Opcode >> 9) & 7) = res;
33135 POST_IO
33136RET(10)
33137}
33138
33139// ANDaD
33140OPCODE(0xC080)
33141{
33142 u32 adr, res;
33143 u32 src, dst;
33144
33145 src = DREGu32((Opcode >> 0) & 7);
33146 res = DREGu32((Opcode >> 9) & 7);
33147 res &= src;
33148 flag_C = 0;
33149 flag_V = 0;
33150 flag_NotZ = res;
33151 flag_N = res >> 24;
33152 DREGu32((Opcode >> 9) & 7) = res;
33153RET(8)
33154}
33155
33156// ANDaD
33157OPCODE(0xC090)
33158{
33159 u32 adr, res;
33160 u32 src, dst;
33161
33162 adr = AREG((Opcode >> 0) & 7);
33163 PRE_IO
33164 READ_LONG_F(adr, src)
33165 res = DREGu32((Opcode >> 9) & 7);
33166 res &= src;
33167 flag_C = 0;
33168 flag_V = 0;
33169 flag_NotZ = res;
33170 flag_N = res >> 24;
33171 DREGu32((Opcode >> 9) & 7) = res;
33172 POST_IO
33173RET(14)
33174}
33175
33176// ANDaD
33177OPCODE(0xC098)
33178{
33179 u32 adr, res;
33180 u32 src, dst;
33181
33182 adr = AREG((Opcode >> 0) & 7);
33183 AREG((Opcode >> 0) & 7) += 4;
33184 PRE_IO
33185 READ_LONG_F(adr, src)
33186 res = DREGu32((Opcode >> 9) & 7);
33187 res &= src;
33188 flag_C = 0;
33189 flag_V = 0;
33190 flag_NotZ = res;
33191 flag_N = res >> 24;
33192 DREGu32((Opcode >> 9) & 7) = res;
33193 POST_IO
33194RET(14)
33195}
33196
33197// ANDaD
33198OPCODE(0xC0A0)
33199{
33200 u32 adr, res;
33201 u32 src, dst;
33202
33203 adr = AREG((Opcode >> 0) & 7) - 4;
33204 AREG((Opcode >> 0) & 7) = adr;
33205 PRE_IO
33206 READ_LONG_F(adr, src)
33207 res = DREGu32((Opcode >> 9) & 7);
33208 res &= src;
33209 flag_C = 0;
33210 flag_V = 0;
33211 flag_NotZ = res;
33212 flag_N = res >> 24;
33213 DREGu32((Opcode >> 9) & 7) = res;
33214 POST_IO
33215RET(16)
33216}
33217
33218// ANDaD
33219OPCODE(0xC0A8)
33220{
33221 u32 adr, res;
33222 u32 src, dst;
33223
33224 FETCH_SWORD(adr);
33225 adr += AREG((Opcode >> 0) & 7);
33226 PRE_IO
33227 READ_LONG_F(adr, src)
33228 res = DREGu32((Opcode >> 9) & 7);
33229 res &= src;
33230 flag_C = 0;
33231 flag_V = 0;
33232 flag_NotZ = res;
33233 flag_N = res >> 24;
33234 DREGu32((Opcode >> 9) & 7) = res;
33235 POST_IO
33236RET(18)
33237}
33238
33239// ANDaD
33240OPCODE(0xC0B0)
33241{
33242 u32 adr, res;
33243 u32 src, dst;
33244
33245 adr = AREG((Opcode >> 0) & 7);
33246 DECODE_EXT_WORD
33247 PRE_IO
33248 READ_LONG_F(adr, src)
33249 res = DREGu32((Opcode >> 9) & 7);
33250 res &= src;
33251 flag_C = 0;
33252 flag_V = 0;
33253 flag_NotZ = res;
33254 flag_N = res >> 24;
33255 DREGu32((Opcode >> 9) & 7) = res;
33256 POST_IO
33257RET(20)
33258}
33259
33260// ANDaD
33261OPCODE(0xC0B8)
33262{
33263 u32 adr, res;
33264 u32 src, dst;
33265
33266 FETCH_SWORD(adr);
33267 PRE_IO
33268 READ_LONG_F(adr, src)
33269 res = DREGu32((Opcode >> 9) & 7);
33270 res &= src;
33271 flag_C = 0;
33272 flag_V = 0;
33273 flag_NotZ = res;
33274 flag_N = res >> 24;
33275 DREGu32((Opcode >> 9) & 7) = res;
33276 POST_IO
33277RET(18)
33278}
33279
33280// ANDaD
33281OPCODE(0xC0B9)
33282{
33283 u32 adr, res;
33284 u32 src, dst;
33285
33286 FETCH_LONG(adr);
33287 PRE_IO
33288 READ_LONG_F(adr, src)
33289 res = DREGu32((Opcode >> 9) & 7);
33290 res &= src;
33291 flag_C = 0;
33292 flag_V = 0;
33293 flag_NotZ = res;
33294 flag_N = res >> 24;
33295 DREGu32((Opcode >> 9) & 7) = res;
33296 POST_IO
33297RET(22)
33298}
33299
33300// ANDaD
33301OPCODE(0xC0BA)
33302{
33303 u32 adr, res;
33304 u32 src, dst;
33305
33306 adr = GET_SWORD + ((u32)(PC) - BasePC);
33307 PC++;
33308 PRE_IO
33309 READ_LONG_F(adr, src)
33310 res = DREGu32((Opcode >> 9) & 7);
33311 res &= src;
33312 flag_C = 0;
33313 flag_V = 0;
33314 flag_NotZ = res;
33315 flag_N = res >> 24;
33316 DREGu32((Opcode >> 9) & 7) = res;
33317 POST_IO
33318RET(18)
33319}
33320
33321// ANDaD
33322OPCODE(0xC0BB)
33323{
33324 u32 adr, res;
33325 u32 src, dst;
33326
33327 adr = (u32)(PC) - BasePC;
33328 DECODE_EXT_WORD
33329 PRE_IO
33330 READ_LONG_F(adr, src)
33331 res = DREGu32((Opcode >> 9) & 7);
33332 res &= src;
33333 flag_C = 0;
33334 flag_V = 0;
33335 flag_NotZ = res;
33336 flag_N = res >> 24;
33337 DREGu32((Opcode >> 9) & 7) = res;
33338 POST_IO
33339RET(20)
33340}
33341
33342// ANDaD
33343OPCODE(0xC0BC)
33344{
33345 u32 adr, res;
33346 u32 src, dst;
33347
33348 FETCH_LONG(src);
33349 res = DREGu32((Opcode >> 9) & 7);
33350 res &= src;
33351 flag_C = 0;
33352 flag_V = 0;
33353 flag_NotZ = res;
33354 flag_N = res >> 24;
33355 DREGu32((Opcode >> 9) & 7) = res;
33356RET(16)
33357}
33358
33359// ANDaD
33360OPCODE(0xC09F)
33361{
33362 u32 adr, res;
33363 u32 src, dst;
33364
33365 adr = AREG(7);
33366 AREG(7) += 4;
33367 PRE_IO
33368 READ_LONG_F(adr, src)
33369 res = DREGu32((Opcode >> 9) & 7);
33370 res &= src;
33371 flag_C = 0;
33372 flag_V = 0;
33373 flag_NotZ = res;
33374 flag_N = res >> 24;
33375 DREGu32((Opcode >> 9) & 7) = res;
33376 POST_IO
33377RET(14)
33378}
33379
33380// ANDaD
33381OPCODE(0xC0A7)
33382{
33383 u32 adr, res;
33384 u32 src, dst;
33385
33386 adr = AREG(7) - 4;
33387 AREG(7) = adr;
33388 PRE_IO
33389 READ_LONG_F(adr, src)
33390 res = DREGu32((Opcode >> 9) & 7);
33391 res &= src;
33392 flag_C = 0;
33393 flag_V = 0;
33394 flag_NotZ = res;
33395 flag_N = res >> 24;
33396 DREGu32((Opcode >> 9) & 7) = res;
33397 POST_IO
33398RET(16)
33399}
33400
33401// ANDDa
33402OPCODE(0xC110)
33403{
33404 u32 adr, res;
33405 u32 src, dst;
33406
33407 src = DREGu8((Opcode >> 9) & 7);
33408 adr = AREG((Opcode >> 0) & 7);
33409 PRE_IO
33410 READ_BYTE_F(adr, res)
33411 res &= src;
33412 flag_C = 0;
33413 flag_V = 0;
33414 flag_NotZ = res;
33415 flag_N = res;
33416 WRITE_BYTE_F(adr, res)
33417 POST_IO
33418RET(12)
33419}
33420
33421// ANDDa
33422OPCODE(0xC118)
33423{
33424 u32 adr, res;
33425 u32 src, dst;
33426
33427 src = DREGu8((Opcode >> 9) & 7);
33428 adr = AREG((Opcode >> 0) & 7);
33429 AREG((Opcode >> 0) & 7) += 1;
33430 PRE_IO
33431 READ_BYTE_F(adr, res)
33432 res &= src;
33433 flag_C = 0;
33434 flag_V = 0;
33435 flag_NotZ = res;
33436 flag_N = res;
33437 WRITE_BYTE_F(adr, res)
33438 POST_IO
33439RET(12)
33440}
33441
33442// ANDDa
33443OPCODE(0xC120)
33444{
33445 u32 adr, res;
33446 u32 src, dst;
33447
33448 src = DREGu8((Opcode >> 9) & 7);
33449 adr = AREG((Opcode >> 0) & 7) - 1;
33450 AREG((Opcode >> 0) & 7) = adr;
33451 PRE_IO
33452 READ_BYTE_F(adr, res)
33453 res &= src;
33454 flag_C = 0;
33455 flag_V = 0;
33456 flag_NotZ = res;
33457 flag_N = res;
33458 WRITE_BYTE_F(adr, res)
33459 POST_IO
33460RET(14)
33461}
33462
33463// ANDDa
33464OPCODE(0xC128)
33465{
33466 u32 adr, res;
33467 u32 src, dst;
33468
33469 src = DREGu8((Opcode >> 9) & 7);
33470 FETCH_SWORD(adr);
33471 adr += AREG((Opcode >> 0) & 7);
33472 PRE_IO
33473 READ_BYTE_F(adr, res)
33474 res &= src;
33475 flag_C = 0;
33476 flag_V = 0;
33477 flag_NotZ = res;
33478 flag_N = res;
33479 WRITE_BYTE_F(adr, res)
33480 POST_IO
33481RET(16)
33482}
33483
33484// ANDDa
33485OPCODE(0xC130)
33486{
33487 u32 adr, res;
33488 u32 src, dst;
33489
33490 src = DREGu8((Opcode >> 9) & 7);
33491 adr = AREG((Opcode >> 0) & 7);
33492 DECODE_EXT_WORD
33493 PRE_IO
33494 READ_BYTE_F(adr, res)
33495 res &= src;
33496 flag_C = 0;
33497 flag_V = 0;
33498 flag_NotZ = res;
33499 flag_N = res;
33500 WRITE_BYTE_F(adr, res)
33501 POST_IO
33502RET(18)
33503}
33504
33505// ANDDa
33506OPCODE(0xC138)
33507{
33508 u32 adr, res;
33509 u32 src, dst;
33510
33511 src = DREGu8((Opcode >> 9) & 7);
33512 FETCH_SWORD(adr);
33513 PRE_IO
33514 READ_BYTE_F(adr, res)
33515 res &= src;
33516 flag_C = 0;
33517 flag_V = 0;
33518 flag_NotZ = res;
33519 flag_N = res;
33520 WRITE_BYTE_F(adr, res)
33521 POST_IO
33522RET(16)
33523}
33524
33525// ANDDa
33526OPCODE(0xC139)
33527{
33528 u32 adr, res;
33529 u32 src, dst;
33530
33531 src = DREGu8((Opcode >> 9) & 7);
33532 FETCH_LONG(adr);
33533 PRE_IO
33534 READ_BYTE_F(adr, res)
33535 res &= src;
33536 flag_C = 0;
33537 flag_V = 0;
33538 flag_NotZ = res;
33539 flag_N = res;
33540 WRITE_BYTE_F(adr, res)
33541 POST_IO
33542RET(20)
33543}
33544
33545// ANDDa
33546OPCODE(0xC11F)
33547{
33548 u32 adr, res;
33549 u32 src, dst;
33550
33551 src = DREGu8((Opcode >> 9) & 7);
33552 adr = AREG(7);
33553 AREG(7) += 2;
33554 PRE_IO
33555 READ_BYTE_F(adr, res)
33556 res &= src;
33557 flag_C = 0;
33558 flag_V = 0;
33559 flag_NotZ = res;
33560 flag_N = res;
33561 WRITE_BYTE_F(adr, res)
33562 POST_IO
33563RET(12)
33564}
33565
33566// ANDDa
33567OPCODE(0xC127)
33568{
33569 u32 adr, res;
33570 u32 src, dst;
33571
33572 src = DREGu8((Opcode >> 9) & 7);
33573 adr = AREG(7) - 2;
33574 AREG(7) = adr;
33575 PRE_IO
33576 READ_BYTE_F(adr, res)
33577 res &= src;
33578 flag_C = 0;
33579 flag_V = 0;
33580 flag_NotZ = res;
33581 flag_N = res;
33582 WRITE_BYTE_F(adr, res)
33583 POST_IO
33584RET(14)
33585}
33586
33587// ANDDa
33588OPCODE(0xC150)
33589{
33590 u32 adr, res;
33591 u32 src, dst;
33592
33593 src = DREGu16((Opcode >> 9) & 7);
33594 adr = AREG((Opcode >> 0) & 7);
33595 PRE_IO
33596 READ_WORD_F(adr, res)
33597 res &= src;
33598 flag_C = 0;
33599 flag_V = 0;
33600 flag_NotZ = res;
33601 flag_N = res >> 8;
33602 WRITE_WORD_F(adr, res)
33603 POST_IO
33604RET(12)
33605}
33606
33607// ANDDa
33608OPCODE(0xC158)
33609{
33610 u32 adr, res;
33611 u32 src, dst;
33612
33613 src = DREGu16((Opcode >> 9) & 7);
33614 adr = AREG((Opcode >> 0) & 7);
33615 AREG((Opcode >> 0) & 7) += 2;
33616 PRE_IO
33617 READ_WORD_F(adr, res)
33618 res &= src;
33619 flag_C = 0;
33620 flag_V = 0;
33621 flag_NotZ = res;
33622 flag_N = res >> 8;
33623 WRITE_WORD_F(adr, res)
33624 POST_IO
33625RET(12)
33626}
33627
33628// ANDDa
33629OPCODE(0xC160)
33630{
33631 u32 adr, res;
33632 u32 src, dst;
33633
33634 src = DREGu16((Opcode >> 9) & 7);
33635 adr = AREG((Opcode >> 0) & 7) - 2;
33636 AREG((Opcode >> 0) & 7) = adr;
33637 PRE_IO
33638 READ_WORD_F(adr, res)
33639 res &= src;
33640 flag_C = 0;
33641 flag_V = 0;
33642 flag_NotZ = res;
33643 flag_N = res >> 8;
33644 WRITE_WORD_F(adr, res)
33645 POST_IO
33646RET(14)
33647}
33648
33649// ANDDa
33650OPCODE(0xC168)
33651{
33652 u32 adr, res;
33653 u32 src, dst;
33654
33655 src = DREGu16((Opcode >> 9) & 7);
33656 FETCH_SWORD(adr);
33657 adr += AREG((Opcode >> 0) & 7);
33658 PRE_IO
33659 READ_WORD_F(adr, res)
33660 res &= src;
33661 flag_C = 0;
33662 flag_V = 0;
33663 flag_NotZ = res;
33664 flag_N = res >> 8;
33665 WRITE_WORD_F(adr, res)
33666 POST_IO
33667RET(16)
33668}
33669
33670// ANDDa
33671OPCODE(0xC170)
33672{
33673 u32 adr, res;
33674 u32 src, dst;
33675
33676 src = DREGu16((Opcode >> 9) & 7);
33677 adr = AREG((Opcode >> 0) & 7);
33678 DECODE_EXT_WORD
33679 PRE_IO
33680 READ_WORD_F(adr, res)
33681 res &= src;
33682 flag_C = 0;
33683 flag_V = 0;
33684 flag_NotZ = res;
33685 flag_N = res >> 8;
33686 WRITE_WORD_F(adr, res)
33687 POST_IO
33688RET(18)
33689}
33690
33691// ANDDa
33692OPCODE(0xC178)
33693{
33694 u32 adr, res;
33695 u32 src, dst;
33696
33697 src = DREGu16((Opcode >> 9) & 7);
33698 FETCH_SWORD(adr);
33699 PRE_IO
33700 READ_WORD_F(adr, res)
33701 res &= src;
33702 flag_C = 0;
33703 flag_V = 0;
33704 flag_NotZ = res;
33705 flag_N = res >> 8;
33706 WRITE_WORD_F(adr, res)
33707 POST_IO
33708RET(16)
33709}
33710
33711// ANDDa
33712OPCODE(0xC179)
33713{
33714 u32 adr, res;
33715 u32 src, dst;
33716
33717 src = DREGu16((Opcode >> 9) & 7);
33718 FETCH_LONG(adr);
33719 PRE_IO
33720 READ_WORD_F(adr, res)
33721 res &= src;
33722 flag_C = 0;
33723 flag_V = 0;
33724 flag_NotZ = res;
33725 flag_N = res >> 8;
33726 WRITE_WORD_F(adr, res)
33727 POST_IO
33728RET(20)
33729}
33730
33731// ANDDa
33732OPCODE(0xC15F)
33733{
33734 u32 adr, res;
33735 u32 src, dst;
33736
33737 src = DREGu16((Opcode >> 9) & 7);
33738 adr = AREG(7);
33739 AREG(7) += 2;
33740 PRE_IO
33741 READ_WORD_F(adr, res)
33742 res &= src;
33743 flag_C = 0;
33744 flag_V = 0;
33745 flag_NotZ = res;
33746 flag_N = res >> 8;
33747 WRITE_WORD_F(adr, res)
33748 POST_IO
33749RET(12)
33750}
33751
33752// ANDDa
33753OPCODE(0xC167)
33754{
33755 u32 adr, res;
33756 u32 src, dst;
33757
33758 src = DREGu16((Opcode >> 9) & 7);
33759 adr = AREG(7) - 2;
33760 AREG(7) = adr;
33761 PRE_IO
33762 READ_WORD_F(adr, res)
33763 res &= src;
33764 flag_C = 0;
33765 flag_V = 0;
33766 flag_NotZ = res;
33767 flag_N = res >> 8;
33768 WRITE_WORD_F(adr, res)
33769 POST_IO
33770RET(14)
33771}
33772
33773// ANDDa
33774OPCODE(0xC190)
33775{
33776 u32 adr, res;
33777 u32 src, dst;
33778
33779 src = DREGu32((Opcode >> 9) & 7);
33780 adr = AREG((Opcode >> 0) & 7);
33781 PRE_IO
33782 READ_LONG_F(adr, res)
33783 res &= src;
33784 flag_C = 0;
33785 flag_V = 0;
33786 flag_NotZ = res;
33787 flag_N = res >> 24;
33788 WRITE_LONG_F(adr, res)
33789 POST_IO
33790RET(20)
33791}
33792
33793// ANDDa
33794OPCODE(0xC198)
33795{
33796 u32 adr, res;
33797 u32 src, dst;
33798
33799 src = DREGu32((Opcode >> 9) & 7);
33800 adr = AREG((Opcode >> 0) & 7);
33801 AREG((Opcode >> 0) & 7) += 4;
33802 PRE_IO
33803 READ_LONG_F(adr, res)
33804 res &= src;
33805 flag_C = 0;
33806 flag_V = 0;
33807 flag_NotZ = res;
33808 flag_N = res >> 24;
33809 WRITE_LONG_F(adr, res)
33810 POST_IO
33811RET(20)
33812}
33813
33814// ANDDa
33815OPCODE(0xC1A0)
33816{
33817 u32 adr, res;
33818 u32 src, dst;
33819
33820 src = DREGu32((Opcode >> 9) & 7);
33821 adr = AREG((Opcode >> 0) & 7) - 4;
33822 AREG((Opcode >> 0) & 7) = adr;
33823 PRE_IO
33824 READ_LONG_F(adr, res)
33825 res &= src;
33826 flag_C = 0;
33827 flag_V = 0;
33828 flag_NotZ = res;
33829 flag_N = res >> 24;
33830 WRITE_LONG_F(adr, res)
33831 POST_IO
33832RET(22)
33833}
33834
33835// ANDDa
33836OPCODE(0xC1A8)
33837{
33838 u32 adr, res;
33839 u32 src, dst;
33840
33841 src = DREGu32((Opcode >> 9) & 7);
33842 FETCH_SWORD(adr);
33843 adr += AREG((Opcode >> 0) & 7);
33844 PRE_IO
33845 READ_LONG_F(adr, res)
33846 res &= src;
33847 flag_C = 0;
33848 flag_V = 0;
33849 flag_NotZ = res;
33850 flag_N = res >> 24;
33851 WRITE_LONG_F(adr, res)
33852 POST_IO
33853RET(24)
33854}
33855
33856// ANDDa
33857OPCODE(0xC1B0)
33858{
33859 u32 adr, res;
33860 u32 src, dst;
33861
33862 src = DREGu32((Opcode >> 9) & 7);
33863 adr = AREG((Opcode >> 0) & 7);
33864 DECODE_EXT_WORD
33865 PRE_IO
33866 READ_LONG_F(adr, res)
33867 res &= src;
33868 flag_C = 0;
33869 flag_V = 0;
33870 flag_NotZ = res;
33871 flag_N = res >> 24;
33872 WRITE_LONG_F(adr, res)
33873 POST_IO
33874RET(26)
33875}
33876
33877// ANDDa
33878OPCODE(0xC1B8)
33879{
33880 u32 adr, res;
33881 u32 src, dst;
33882
33883 src = DREGu32((Opcode >> 9) & 7);
33884 FETCH_SWORD(adr);
33885 PRE_IO
33886 READ_LONG_F(adr, res)
33887 res &= src;
33888 flag_C = 0;
33889 flag_V = 0;
33890 flag_NotZ = res;
33891 flag_N = res >> 24;
33892 WRITE_LONG_F(adr, res)
33893 POST_IO
33894RET(24)
33895}
33896
33897// ANDDa
33898OPCODE(0xC1B9)
33899{
33900 u32 adr, res;
33901 u32 src, dst;
33902
33903 src = DREGu32((Opcode >> 9) & 7);
33904 FETCH_LONG(adr);
33905 PRE_IO
33906 READ_LONG_F(adr, res)
33907 res &= src;
33908 flag_C = 0;
33909 flag_V = 0;
33910 flag_NotZ = res;
33911 flag_N = res >> 24;
33912 WRITE_LONG_F(adr, res)
33913 POST_IO
33914RET(28)
33915}
33916
33917// ANDDa
33918OPCODE(0xC19F)
33919{
33920 u32 adr, res;
33921 u32 src, dst;
33922
33923 src = DREGu32((Opcode >> 9) & 7);
33924 adr = AREG(7);
33925 AREG(7) += 4;
33926 PRE_IO
33927 READ_LONG_F(adr, res)
33928 res &= src;
33929 flag_C = 0;
33930 flag_V = 0;
33931 flag_NotZ = res;
33932 flag_N = res >> 24;
33933 WRITE_LONG_F(adr, res)
33934 POST_IO
33935RET(20)
33936}
33937
33938// ANDDa
33939OPCODE(0xC1A7)
33940{
33941 u32 adr, res;
33942 u32 src, dst;
33943
33944 src = DREGu32((Opcode >> 9) & 7);
33945 adr = AREG(7) - 4;
33946 AREG(7) = adr;
33947 PRE_IO
33948 READ_LONG_F(adr, res)
33949 res &= src;
33950 flag_C = 0;
33951 flag_V = 0;
33952 flag_NotZ = res;
33953 flag_N = res >> 24;
33954 WRITE_LONG_F(adr, res)
33955 POST_IO
33956RET(22)
33957}
33958
33959// ABCD
33960OPCODE(0xC100)
33961{
33962 u32 adr, res;
33963 u32 src, dst;
33964
33965 src = DREGu8((Opcode >> 0) & 7);
33966 dst = DREGu8((Opcode >> 9) & 7);
33967 res = (dst & 0xF) + (src & 0xF) + ((flag_X >> M68K_SR_X_SFT) & 1);
33968 if (res > 9) res += 6;
33969 res += (dst & 0xF0) + (src & 0xF0);
33970 if (res > 0x99)
33971 {
33972 res -= 0xA0;
33973 flag_X = flag_C = M68K_SR_C;
33974 }
33975 else flag_X = flag_C = 0;
33976 flag_NotZ |= res & 0xFF;
33977 flag_N = res;
33978 DREGu8((Opcode >> 9) & 7) = res;
33979RET(6)
33980}
33981
33982// ABCDM
33983OPCODE(0xC108)
33984{
33985 u32 adr, res;
33986 u32 src, dst;
33987
33988 adr = AREG((Opcode >> 0) & 7) - 1;
33989 AREG((Opcode >> 0) & 7) = adr;
33990 PRE_IO
33991 READ_BYTE_F(adr, src)
33992 adr = AREG((Opcode >> 9) & 7) - 1;
33993 AREG((Opcode >> 9) & 7) = adr;
33994 READ_BYTE_F(adr, dst)
33995 res = (dst & 0xF) + (src & 0xF) + ((flag_X >> M68K_SR_X_SFT) & 1);
33996 if (res > 9) res += 6;
33997 res += (dst & 0xF0) + (src & 0xF0);
33998 if (res > 0x99)
33999 {
34000 res -= 0xA0;
34001 flag_X = flag_C = M68K_SR_C;
34002 }
34003 else flag_X = flag_C = 0;
34004 flag_NotZ |= res & 0xFF;
34005 flag_N = res;
34006 WRITE_BYTE_F(adr, res)
34007 POST_IO
34008RET(18)
34009}
34010
34011// ABCD7M
34012OPCODE(0xC10F)
34013{
34014 u32 adr, res;
34015 u32 src, dst;
34016
34017 adr = AREG(7) - 2;
34018 AREG(7) = adr;
34019 PRE_IO
34020 READ_BYTE_F(adr, src)
34021 adr = AREG((Opcode >> 9) & 7) - 1;
34022 AREG((Opcode >> 9) & 7) = adr;
34023 READ_BYTE_F(adr, dst)
34024 res = (dst & 0xF) + (src & 0xF) + ((flag_X >> M68K_SR_X_SFT) & 1);
34025 if (res > 9) res += 6;
34026 res += (dst & 0xF0) + (src & 0xF0);
34027 if (res > 0x99)
34028 {
34029 res -= 0xA0;
34030 flag_X = flag_C = M68K_SR_C;
34031 }
34032 else flag_X = flag_C = 0;
34033 flag_NotZ |= res & 0xFF;
34034 flag_N = res;
34035 WRITE_BYTE_F(adr, res)
34036 POST_IO
34037RET(18)
34038}
34039
34040// ABCDM7
34041OPCODE(0xCF08)
34042{
34043 u32 adr, res;
34044 u32 src, dst;
34045
34046 adr = AREG((Opcode >> 0) & 7) - 1;
34047 AREG((Opcode >> 0) & 7) = adr;
34048 PRE_IO
34049 READ_BYTE_F(adr, src)
34050 adr = AREG(7) - 2;
34051 AREG(7) = adr;
34052 READ_BYTE_F(adr, dst)
34053 res = (dst & 0xF) + (src & 0xF) + ((flag_X >> M68K_SR_X_SFT) & 1);
34054 if (res > 9) res += 6;
34055 res += (dst & 0xF0) + (src & 0xF0);
34056 if (res > 0x99)
34057 {
34058 res -= 0xA0;
34059 flag_X = flag_C = M68K_SR_C;
34060 }
34061 else flag_X = flag_C = 0;
34062 flag_NotZ |= res & 0xFF;
34063 flag_N = res;
34064 WRITE_BYTE_F(adr, res)
34065 POST_IO
34066RET(18)
34067}
34068
34069// ABCD7M7
34070OPCODE(0xCF0F)
34071{
34072 u32 adr, res;
34073 u32 src, dst;
34074
34075 adr = AREG(7) - 2;
34076 AREG(7) = adr;
34077 PRE_IO
34078 READ_BYTE_F(adr, src)
34079 adr = AREG(7) - 2;
34080 AREG(7) = adr;
34081 READ_BYTE_F(adr, dst)
34082 res = (dst & 0xF) + (src & 0xF) + ((flag_X >> M68K_SR_X_SFT) & 1);
34083 if (res > 9) res += 6;
34084 res += (dst & 0xF0) + (src & 0xF0);
34085 if (res > 0x99)
34086 {
34087 res -= 0xA0;
34088 flag_X = flag_C = M68K_SR_C;
34089 }
34090 else flag_X = flag_C = 0;
34091 flag_NotZ |= res & 0xFF;
34092 flag_N = res;
34093 WRITE_BYTE_F(adr, res)
34094 POST_IO
34095RET(18)
34096}
34097
34098// MULU
34099OPCODE(0xC0C0)
34100{
34101 u32 adr, res;
34102 u32 src, dst;
34103
34104 src = DREGu16((Opcode >> 0) & 7);
34105 res = DREGu16((Opcode >> 9) & 7);
34106 res *= src;
34107 flag_N = res >> 24;
34108 flag_NotZ = res;
34109 flag_V = flag_C = 0;
34110 DREGu32((Opcode >> 9) & 7) = res;
34111#ifdef USE_CYCLONE_TIMING
34112RET(54)
34113#else
34114RET(50)
34115#endif
34116}
34117
34118// MULU
34119OPCODE(0xC0D0)
34120{
34121 u32 adr, res;
34122 u32 src, dst;
34123
34124 adr = AREG((Opcode >> 0) & 7);
34125 PRE_IO
34126 READ_WORD_F(adr, src)
34127 res = DREGu16((Opcode >> 9) & 7);
34128 res *= src;
34129 flag_N = res >> 24;
34130 flag_NotZ = res;
34131 flag_V = flag_C = 0;
34132 DREGu32((Opcode >> 9) & 7) = res;
34133 POST_IO
34134#ifdef USE_CYCLONE_TIMING
34135RET(58)
34136#else
34137RET(54)
34138#endif
34139}
34140
34141// MULU
34142OPCODE(0xC0D8)
34143{
34144 u32 adr, res;
34145 u32 src, dst;
34146
34147 adr = AREG((Opcode >> 0) & 7);
34148 AREG((Opcode >> 0) & 7) += 2;
34149 PRE_IO
34150 READ_WORD_F(adr, src)
34151 res = DREGu16((Opcode >> 9) & 7);
34152 res *= src;
34153 flag_N = res >> 24;
34154 flag_NotZ = res;
34155 flag_V = flag_C = 0;
34156 DREGu32((Opcode >> 9) & 7) = res;
34157 POST_IO
34158#ifdef USE_CYCLONE_TIMING
34159RET(58)
34160#else
34161RET(54)
34162#endif
34163}
34164
34165// MULU
34166OPCODE(0xC0E0)
34167{
34168 u32 adr, res;
34169 u32 src, dst;
34170
34171 adr = AREG((Opcode >> 0) & 7) - 2;
34172 AREG((Opcode >> 0) & 7) = adr;
34173 PRE_IO
34174 READ_WORD_F(adr, src)
34175 res = DREGu16((Opcode >> 9) & 7);
34176 res *= src;
34177 flag_N = res >> 24;
34178 flag_NotZ = res;
34179 flag_V = flag_C = 0;
34180 DREGu32((Opcode >> 9) & 7) = res;
34181 POST_IO
34182#ifdef USE_CYCLONE_TIMING
34183RET(60)
34184#else
34185RET(56)
34186#endif
34187}
34188
34189// MULU
34190OPCODE(0xC0E8)
34191{
34192 u32 adr, res;
34193 u32 src, dst;
34194
34195 FETCH_SWORD(adr);
34196 adr += AREG((Opcode >> 0) & 7);
34197 PRE_IO
34198 READ_WORD_F(adr, src)
34199 res = DREGu16((Opcode >> 9) & 7);
34200 res *= src;
34201 flag_N = res >> 24;
34202 flag_NotZ = res;
34203 flag_V = flag_C = 0;
34204 DREGu32((Opcode >> 9) & 7) = res;
34205 POST_IO
34206#ifdef USE_CYCLONE_TIMING
34207RET(62)
34208#else
34209RET(58)
34210#endif
34211}
34212
34213// MULU
34214OPCODE(0xC0F0)
34215{
34216 u32 adr, res;
34217 u32 src, dst;
34218
34219 adr = AREG((Opcode >> 0) & 7);
34220 DECODE_EXT_WORD
34221 PRE_IO
34222 READ_WORD_F(adr, src)
34223 res = DREGu16((Opcode >> 9) & 7);
34224 res *= src;
34225 flag_N = res >> 24;
34226 flag_NotZ = res;
34227 flag_V = flag_C = 0;
34228 DREGu32((Opcode >> 9) & 7) = res;
34229 POST_IO
34230#ifdef USE_CYCLONE_TIMING
34231RET(64)
34232#else
34233RET(60)
34234#endif
34235}
34236
34237// MULU
34238OPCODE(0xC0F8)
34239{
34240 u32 adr, res;
34241 u32 src, dst;
34242
34243 FETCH_SWORD(adr);
34244 PRE_IO
34245 READ_WORD_F(adr, src)
34246 res = DREGu16((Opcode >> 9) & 7);
34247 res *= src;
34248 flag_N = res >> 24;
34249 flag_NotZ = res;
34250 flag_V = flag_C = 0;
34251 DREGu32((Opcode >> 9) & 7) = res;
34252 POST_IO
34253#ifdef USE_CYCLONE_TIMING
34254RET(62)
34255#else
34256RET(58)
34257#endif
34258}
34259
34260// MULU
34261OPCODE(0xC0F9)
34262{
34263 u32 adr, res;
34264 u32 src, dst;
34265
34266 FETCH_LONG(adr);
34267 PRE_IO
34268 READ_WORD_F(adr, src)
34269 res = DREGu16((Opcode >> 9) & 7);
34270 res *= src;
34271 flag_N = res >> 24;
34272 flag_NotZ = res;
34273 flag_V = flag_C = 0;
34274 DREGu32((Opcode >> 9) & 7) = res;
34275 POST_IO
34276#ifdef USE_CYCLONE_TIMING
34277RET(66)
34278#else
34279RET(62)
34280#endif
34281}
34282
34283// MULU
34284OPCODE(0xC0FA)
34285{
34286 u32 adr, res;
34287 u32 src, dst;
34288
34289 adr = GET_SWORD + ((u32)(PC) - BasePC);
34290 PC++;
34291 PRE_IO
34292 READ_WORD_F(adr, src)
34293 res = DREGu16((Opcode >> 9) & 7);
34294 res *= src;
34295 flag_N = res >> 24;
34296 flag_NotZ = res;
34297 flag_V = flag_C = 0;
34298 DREGu32((Opcode >> 9) & 7) = res;
34299 POST_IO
34300#ifdef USE_CYCLONE_TIMING
34301RET(62)
34302#else
34303RET(58)
34304#endif
34305}
34306
34307// MULU
34308OPCODE(0xC0FB)
34309{
34310 u32 adr, res;
34311 u32 src, dst;
34312
34313 adr = (u32)(PC) - BasePC;
34314 DECODE_EXT_WORD
34315 PRE_IO
34316 READ_WORD_F(adr, src)
34317 res = DREGu16((Opcode >> 9) & 7);
34318 res *= src;
34319 flag_N = res >> 24;
34320 flag_NotZ = res;
34321 flag_V = flag_C = 0;
34322 DREGu32((Opcode >> 9) & 7) = res;
34323 POST_IO
34324#ifdef USE_CYCLONE_TIMING
34325RET(64)
34326#else
34327RET(60)
34328#endif
34329}
34330
34331// MULU
34332OPCODE(0xC0FC)
34333{
34334 u32 adr, res;
34335 u32 src, dst;
34336
34337 FETCH_WORD(src);
34338 res = DREGu16((Opcode >> 9) & 7);
34339 res *= src;
34340 flag_N = res >> 24;
34341 flag_NotZ = res;
34342 flag_V = flag_C = 0;
34343 DREGu32((Opcode >> 9) & 7) = res;
34344#ifdef USE_CYCLONE_TIMING
34345RET(58)
34346#else
34347RET(54)
34348#endif
34349}
34350
34351// MULU
34352OPCODE(0xC0DF)
34353{
34354 u32 adr, res;
34355 u32 src, dst;
34356
34357 adr = AREG(7);
34358 AREG(7) += 2;
34359 PRE_IO
34360 READ_WORD_F(adr, src)
34361 res = DREGu16((Opcode >> 9) & 7);
34362 res *= src;
34363 flag_N = res >> 24;
34364 flag_NotZ = res;
34365 flag_V = flag_C = 0;
34366 DREGu32((Opcode >> 9) & 7) = res;
34367 POST_IO
34368#ifdef USE_CYCLONE_TIMING
34369RET(58)
34370#else
34371RET(54)
34372#endif
34373}
34374
34375// MULU
34376OPCODE(0xC0E7)
34377{
34378 u32 adr, res;
34379 u32 src, dst;
34380
34381 adr = AREG(7) - 2;
34382 AREG(7) = adr;
34383 PRE_IO
34384 READ_WORD_F(adr, src)
34385 res = DREGu16((Opcode >> 9) & 7);
34386 res *= src;
34387 flag_N = res >> 24;
34388 flag_NotZ = res;
34389 flag_V = flag_C = 0;
34390 DREGu32((Opcode >> 9) & 7) = res;
34391 POST_IO
34392#ifdef USE_CYCLONE_TIMING
34393RET(60)
34394#else
34395RET(56)
34396#endif
34397}
34398
34399// MULS
34400OPCODE(0xC1C0)
34401{
34402 u32 adr, res;
34403 u32 src, dst;
34404
34405 src = (s32)DREGs16((Opcode >> 0) & 7);
34406 res = (s32)DREGs16((Opcode >> 9) & 7);
34407 res = ((s32)res) * ((s32)src);
34408 flag_N = res >> 24;
34409 flag_NotZ = res;
34410 flag_V = flag_C = 0;
34411 DREGu32((Opcode >> 9) & 7) = res;
34412#ifdef USE_CYCLONE_TIMING
34413RET(54)
34414#else
34415RET(50)
34416#endif
34417}
34418
34419// MULS
34420OPCODE(0xC1D0)
34421{
34422 u32 adr, res;
34423 u32 src, dst;
34424
34425 adr = AREG((Opcode >> 0) & 7);
34426 PRE_IO
34427 READSX_WORD_F(adr, src)
34428 res = (s32)DREGs16((Opcode >> 9) & 7);
34429 res = ((s32)res) * ((s32)src);
34430 flag_N = res >> 24;
34431 flag_NotZ = res;
34432 flag_V = flag_C = 0;
34433 DREGu32((Opcode >> 9) & 7) = res;
34434 POST_IO
34435#ifdef USE_CYCLONE_TIMING
34436RET(58)
34437#else
34438RET(54)
34439#endif
34440}
34441
34442// MULS
34443OPCODE(0xC1D8)
34444{
34445 u32 adr, res;
34446 u32 src, dst;
34447
34448 adr = AREG((Opcode >> 0) & 7);
34449 AREG((Opcode >> 0) & 7) += 2;
34450 PRE_IO
34451 READSX_WORD_F(adr, src)
34452 res = (s32)DREGs16((Opcode >> 9) & 7);
34453 res = ((s32)res) * ((s32)src);
34454 flag_N = res >> 24;
34455 flag_NotZ = res;
34456 flag_V = flag_C = 0;
34457 DREGu32((Opcode >> 9) & 7) = res;
34458 POST_IO
34459#ifdef USE_CYCLONE_TIMING
34460RET(58)
34461#else
34462RET(54)
34463#endif
34464}
34465
34466// MULS
34467OPCODE(0xC1E0)
34468{
34469 u32 adr, res;
34470 u32 src, dst;
34471
34472 adr = AREG((Opcode >> 0) & 7) - 2;
34473 AREG((Opcode >> 0) & 7) = adr;
34474 PRE_IO
34475 READSX_WORD_F(adr, src)
34476 res = (s32)DREGs16((Opcode >> 9) & 7);
34477 res = ((s32)res) * ((s32)src);
34478 flag_N = res >> 24;
34479 flag_NotZ = res;
34480 flag_V = flag_C = 0;
34481 DREGu32((Opcode >> 9) & 7) = res;
34482 POST_IO
34483#ifdef USE_CYCLONE_TIMING
34484RET(60)
34485#else
34486RET(56)
34487#endif
34488}
34489
34490// MULS
34491OPCODE(0xC1E8)
34492{
34493 u32 adr, res;
34494 u32 src, dst;
34495
34496 FETCH_SWORD(adr);
34497 adr += AREG((Opcode >> 0) & 7);
34498 PRE_IO
34499 READSX_WORD_F(adr, src)
34500 res = (s32)DREGs16((Opcode >> 9) & 7);
34501 res = ((s32)res) * ((s32)src);
34502 flag_N = res >> 24;
34503 flag_NotZ = res;
34504 flag_V = flag_C = 0;
34505 DREGu32((Opcode >> 9) & 7) = res;
34506 POST_IO
34507#ifdef USE_CYCLONE_TIMING
34508RET(62)
34509#else
34510RET(58)
34511#endif
34512}
34513
34514// MULS
34515OPCODE(0xC1F0)
34516{
34517 u32 adr, res;
34518 u32 src, dst;
34519
34520 adr = AREG((Opcode >> 0) & 7);
34521 DECODE_EXT_WORD
34522 PRE_IO
34523 READSX_WORD_F(adr, src)
34524 res = (s32)DREGs16((Opcode >> 9) & 7);
34525 res = ((s32)res) * ((s32)src);
34526 flag_N = res >> 24;
34527 flag_NotZ = res;
34528 flag_V = flag_C = 0;
34529 DREGu32((Opcode >> 9) & 7) = res;
34530 POST_IO
34531#ifdef USE_CYCLONE_TIMING
34532RET(64)
34533#else
34534RET(60)
34535#endif
34536}
34537
34538// MULS
34539OPCODE(0xC1F8)
34540{
34541 u32 adr, res;
34542 u32 src, dst;
34543
34544 FETCH_SWORD(adr);
34545 PRE_IO
34546 READSX_WORD_F(adr, src)
34547 res = (s32)DREGs16((Opcode >> 9) & 7);
34548 res = ((s32)res) * ((s32)src);
34549 flag_N = res >> 24;
34550 flag_NotZ = res;
34551 flag_V = flag_C = 0;
34552 DREGu32((Opcode >> 9) & 7) = res;
34553 POST_IO
34554#ifdef USE_CYCLONE_TIMING
34555RET(62)
34556#else
34557RET(58)
34558#endif
34559}
34560
34561// MULS
34562OPCODE(0xC1F9)
34563{
34564 u32 adr, res;
34565 u32 src, dst;
34566
34567 FETCH_LONG(adr);
34568 PRE_IO
34569 READSX_WORD_F(adr, src)
34570 res = (s32)DREGs16((Opcode >> 9) & 7);
34571 res = ((s32)res) * ((s32)src);
34572 flag_N = res >> 24;
34573 flag_NotZ = res;
34574 flag_V = flag_C = 0;
34575 DREGu32((Opcode >> 9) & 7) = res;
34576 POST_IO
34577#ifdef USE_CYCLONE_TIMING
34578RET(66)
34579#else
34580RET(62)
34581#endif
34582}
34583
34584// MULS
34585OPCODE(0xC1FA)
34586{
34587 u32 adr, res;
34588 u32 src, dst;
34589
34590 adr = GET_SWORD + ((u32)(PC) - BasePC);
34591 PC++;
34592 PRE_IO
34593 READSX_WORD_F(adr, src)
34594 res = (s32)DREGs16((Opcode >> 9) & 7);
34595 res = ((s32)res) * ((s32)src);
34596 flag_N = res >> 24;
34597 flag_NotZ = res;
34598 flag_V = flag_C = 0;
34599 DREGu32((Opcode >> 9) & 7) = res;
34600 POST_IO
34601#ifdef USE_CYCLONE_TIMING
34602RET(62)
34603#else
34604RET(58)
34605#endif
34606}
34607
34608// MULS
34609OPCODE(0xC1FB)
34610{
34611 u32 adr, res;
34612 u32 src, dst;
34613
34614 adr = (u32)(PC) - BasePC;
34615 DECODE_EXT_WORD
34616 PRE_IO
34617 READSX_WORD_F(adr, src)
34618 res = (s32)DREGs16((Opcode >> 9) & 7);
34619 res = ((s32)res) * ((s32)src);
34620 flag_N = res >> 24;
34621 flag_NotZ = res;
34622 flag_V = flag_C = 0;
34623 DREGu32((Opcode >> 9) & 7) = res;
34624 POST_IO
34625#ifdef USE_CYCLONE_TIMING
34626RET(64)
34627#else
34628RET(60)
34629#endif
34630}
34631
34632// MULS
34633OPCODE(0xC1FC)
34634{
34635 u32 adr, res;
34636 u32 src, dst;
34637
34638 FETCH_SWORD(src);
34639 res = (s32)DREGs16((Opcode >> 9) & 7);
34640 res = ((s32)res) * ((s32)src);
34641 flag_N = res >> 24;
34642 flag_NotZ = res;
34643 flag_V = flag_C = 0;
34644 DREGu32((Opcode >> 9) & 7) = res;
34645#ifdef USE_CYCLONE_TIMING
34646RET(58)
34647#else
34648RET(54)
34649#endif
34650}
34651
34652// MULS
34653OPCODE(0xC1DF)
34654{
34655 u32 adr, res;
34656 u32 src, dst;
34657
34658 adr = AREG(7);
34659 AREG(7) += 2;
34660 PRE_IO
34661 READSX_WORD_F(adr, src)
34662 res = (s32)DREGs16((Opcode >> 9) & 7);
34663 res = ((s32)res) * ((s32)src);
34664 flag_N = res >> 24;
34665 flag_NotZ = res;
34666 flag_V = flag_C = 0;
34667 DREGu32((Opcode >> 9) & 7) = res;
34668 POST_IO
34669#ifdef USE_CYCLONE_TIMING
34670RET(58)
34671#else
34672RET(54)
34673#endif
34674}
34675
34676// MULS
34677OPCODE(0xC1E7)
34678{
34679 u32 adr, res;
34680 u32 src, dst;
34681
34682 adr = AREG(7) - 2;
34683 AREG(7) = adr;
34684 PRE_IO
34685 READSX_WORD_F(adr, src)
34686 res = (s32)DREGs16((Opcode >> 9) & 7);
34687 res = ((s32)res) * ((s32)src);
34688 flag_N = res >> 24;
34689 flag_NotZ = res;
34690 flag_V = flag_C = 0;
34691 DREGu32((Opcode >> 9) & 7) = res;
34692 POST_IO
34693#ifdef USE_CYCLONE_TIMING
34694RET(60)
34695#else
34696RET(56)
34697#endif
34698}
34699
34700// EXGDD
34701OPCODE(0xC140)
34702{
34703 u32 adr, res;
34704 u32 src, dst;
34705
34706 res = DREGu32((Opcode >> 0) & 7);
34707 src = DREGu32((Opcode >> 9) & 7);
34708 DREGu32((Opcode >> 9) & 7) = res;
34709 res = src;
34710 DREGu32((Opcode >> 0) & 7) = res;
34711RET(6)
34712}
34713
34714// EXGAA
34715OPCODE(0xC148)
34716{
34717 u32 adr, res;
34718 u32 src, dst;
34719
34720 res = AREGu32((Opcode >> 0) & 7);
34721 src = AREGu32((Opcode >> 9) & 7);
34722 AREG((Opcode >> 9) & 7) = res;
34723 res = src;
34724 AREG((Opcode >> 0) & 7) = res;
34725RET(6)
34726}
34727
34728// EXGAD
34729OPCODE(0xC188)
34730{
34731 u32 adr, res;
34732 u32 src, dst;
34733
34734 res = AREGu32((Opcode >> 0) & 7);
34735 src = DREGu32((Opcode >> 9) & 7);
34736 DREGu32((Opcode >> 9) & 7) = res;
34737 res = src;
34738 AREG((Opcode >> 0) & 7) = res;
34739RET(6)
34740}
34741
34742// ADDaD
34743OPCODE(0xD000)
34744{
34745 u32 adr, res;
34746 u32 src, dst;
34747
34748 src = DREGu8((Opcode >> 0) & 7);
34749 dst = DREGu8((Opcode >> 9) & 7);
34750 res = dst + src;
34751 flag_N = flag_X = flag_C = res;
34752 flag_V = (src ^ res) & (dst ^ res);
34753 flag_NotZ = res & 0xFF;
34754 DREGu8((Opcode >> 9) & 7) = res;
34755RET(4)
34756}
34757
34758// ADDaD
34759OPCODE(0xD008)
34760{
34761 u32 adr, res;
34762 u32 src, dst;
34763
34764 // can't read byte from Ax registers !
34765 m68kcontext.execinfo |= M68K_FAULTED;
34766 m68kcontext.io_cycle_counter = 0;
34767/*
34768 goto famec_Exec_End;
34769 dst = DREGu8((Opcode >> 9) & 7);
34770 res = dst + src;
34771 flag_N = flag_X = flag_C = res;
34772 flag_V = (src ^ res) & (dst ^ res);
34773 flag_NotZ = res & 0xFF;
34774 DREGu8((Opcode >> 9) & 7) = res;
34775*/
34776RET(4)
34777}
34778
34779// ADDaD
34780OPCODE(0xD010)
34781{
34782 u32 adr, res;
34783 u32 src, dst;
34784
34785 adr = AREG((Opcode >> 0) & 7);
34786 PRE_IO
34787 READ_BYTE_F(adr, src)
34788 dst = DREGu8((Opcode >> 9) & 7);
34789 res = dst + src;
34790 flag_N = flag_X = flag_C = res;
34791 flag_V = (src ^ res) & (dst ^ res);
34792 flag_NotZ = res & 0xFF;
34793 DREGu8((Opcode >> 9) & 7) = res;
34794 POST_IO
34795RET(8)
34796}
34797
34798// ADDaD
34799OPCODE(0xD018)
34800{
34801 u32 adr, res;
34802 u32 src, dst;
34803
34804 adr = AREG((Opcode >> 0) & 7);
34805 AREG((Opcode >> 0) & 7) += 1;
34806 PRE_IO
34807 READ_BYTE_F(adr, src)
34808 dst = DREGu8((Opcode >> 9) & 7);
34809 res = dst + src;
34810 flag_N = flag_X = flag_C = res;
34811 flag_V = (src ^ res) & (dst ^ res);
34812 flag_NotZ = res & 0xFF;
34813 DREGu8((Opcode >> 9) & 7) = res;
34814 POST_IO
34815RET(8)
34816}
34817
34818// ADDaD
34819OPCODE(0xD020)
34820{
34821 u32 adr, res;
34822 u32 src, dst;
34823
34824 adr = AREG((Opcode >> 0) & 7) - 1;
34825 AREG((Opcode >> 0) & 7) = adr;
34826 PRE_IO
34827 READ_BYTE_F(adr, src)
34828 dst = DREGu8((Opcode >> 9) & 7);
34829 res = dst + src;
34830 flag_N = flag_X = flag_C = res;
34831 flag_V = (src ^ res) & (dst ^ res);
34832 flag_NotZ = res & 0xFF;
34833 DREGu8((Opcode >> 9) & 7) = res;
34834 POST_IO
34835RET(10)
34836}
34837
34838// ADDaD
34839OPCODE(0xD028)
34840{
34841 u32 adr, res;
34842 u32 src, dst;
34843
34844 FETCH_SWORD(adr);
34845 adr += AREG((Opcode >> 0) & 7);
34846 PRE_IO
34847 READ_BYTE_F(adr, src)
34848 dst = DREGu8((Opcode >> 9) & 7);
34849 res = dst + src;
34850 flag_N = flag_X = flag_C = res;
34851 flag_V = (src ^ res) & (dst ^ res);
34852 flag_NotZ = res & 0xFF;
34853 DREGu8((Opcode >> 9) & 7) = res;
34854 POST_IO
34855RET(12)
34856}
34857
34858// ADDaD
34859OPCODE(0xD030)
34860{
34861 u32 adr, res;
34862 u32 src, dst;
34863
34864 adr = AREG((Opcode >> 0) & 7);
34865 DECODE_EXT_WORD
34866 PRE_IO
34867 READ_BYTE_F(adr, src)
34868 dst = DREGu8((Opcode >> 9) & 7);
34869 res = dst + src;
34870 flag_N = flag_X = flag_C = res;
34871 flag_V = (src ^ res) & (dst ^ res);
34872 flag_NotZ = res & 0xFF;
34873 DREGu8((Opcode >> 9) & 7) = res;
34874 POST_IO
34875RET(14)
34876}
34877
34878// ADDaD
34879OPCODE(0xD038)
34880{
34881 u32 adr, res;
34882 u32 src, dst;
34883
34884 FETCH_SWORD(adr);
34885 PRE_IO
34886 READ_BYTE_F(adr, src)
34887 dst = DREGu8((Opcode >> 9) & 7);
34888 res = dst + src;
34889 flag_N = flag_X = flag_C = res;
34890 flag_V = (src ^ res) & (dst ^ res);
34891 flag_NotZ = res & 0xFF;
34892 DREGu8((Opcode >> 9) & 7) = res;
34893 POST_IO
34894RET(12)
34895}
34896
34897// ADDaD
34898OPCODE(0xD039)
34899{
34900 u32 adr, res;
34901 u32 src, dst;
34902
34903 FETCH_LONG(adr);
34904 PRE_IO
34905 READ_BYTE_F(adr, src)
34906 dst = DREGu8((Opcode >> 9) & 7);
34907 res = dst + src;
34908 flag_N = flag_X = flag_C = res;
34909 flag_V = (src ^ res) & (dst ^ res);
34910 flag_NotZ = res & 0xFF;
34911 DREGu8((Opcode >> 9) & 7) = res;
34912 POST_IO
34913RET(16)
34914}
34915
34916// ADDaD
34917OPCODE(0xD03A)
34918{
34919 u32 adr, res;
34920 u32 src, dst;
34921
34922 adr = GET_SWORD + ((u32)(PC) - BasePC);
34923 PC++;
34924 PRE_IO
34925 READ_BYTE_F(adr, src)
34926 dst = DREGu8((Opcode >> 9) & 7);
34927 res = dst + src;
34928 flag_N = flag_X = flag_C = res;
34929 flag_V = (src ^ res) & (dst ^ res);
34930 flag_NotZ = res & 0xFF;
34931 DREGu8((Opcode >> 9) & 7) = res;
34932 POST_IO
34933RET(12)
34934}
34935
34936// ADDaD
34937OPCODE(0xD03B)
34938{
34939 u32 adr, res;
34940 u32 src, dst;
34941
34942 adr = (u32)(PC) - BasePC;
34943 DECODE_EXT_WORD
34944 PRE_IO
34945 READ_BYTE_F(adr, src)
34946 dst = DREGu8((Opcode >> 9) & 7);
34947 res = dst + src;
34948 flag_N = flag_X = flag_C = res;
34949 flag_V = (src ^ res) & (dst ^ res);
34950 flag_NotZ = res & 0xFF;
34951 DREGu8((Opcode >> 9) & 7) = res;
34952 POST_IO
34953RET(14)
34954}
34955
34956// ADDaD
34957OPCODE(0xD03C)
34958{
34959 u32 adr, res;
34960 u32 src, dst;
34961
34962 FETCH_BYTE(src);
34963 dst = DREGu8((Opcode >> 9) & 7);
34964 res = dst + src;
34965 flag_N = flag_X = flag_C = res;
34966 flag_V = (src ^ res) & (dst ^ res);
34967 flag_NotZ = res & 0xFF;
34968 DREGu8((Opcode >> 9) & 7) = res;
34969RET(8)
34970}
34971
34972// ADDaD
34973OPCODE(0xD01F)
34974{
34975 u32 adr, res;
34976 u32 src, dst;
34977
34978 adr = AREG(7);
34979 AREG(7) += 2;
34980 PRE_IO
34981 READ_BYTE_F(adr, src)
34982 dst = DREGu8((Opcode >> 9) & 7);
34983 res = dst + src;
34984 flag_N = flag_X = flag_C = res;
34985 flag_V = (src ^ res) & (dst ^ res);
34986 flag_NotZ = res & 0xFF;
34987 DREGu8((Opcode >> 9) & 7) = res;
34988 POST_IO
34989RET(8)
34990}
34991
34992// ADDaD
34993OPCODE(0xD027)
34994{
34995 u32 adr, res;
34996 u32 src, dst;
34997
34998 adr = AREG(7) - 2;
34999 AREG(7) = adr;
35000 PRE_IO
35001 READ_BYTE_F(adr, src)
35002 dst = DREGu8((Opcode >> 9) & 7);
35003 res = dst + src;
35004 flag_N = flag_X = flag_C = res;
35005 flag_V = (src ^ res) & (dst ^ res);
35006 flag_NotZ = res & 0xFF;
35007 DREGu8((Opcode >> 9) & 7) = res;
35008 POST_IO
35009RET(10)
35010}
35011
35012// ADDaD
35013OPCODE(0xD040)
35014{
35015 u32 adr, res;
35016 u32 src, dst;
35017
35018 src = DREGu16((Opcode >> 0) & 7);
35019 dst = DREGu16((Opcode >> 9) & 7);
35020 res = dst + src;
35021 flag_V = ((src ^ res) & (dst ^ res)) >> 8;
35022 flag_N = flag_X = flag_C = res >> 8;
35023 flag_NotZ = res & 0xFFFF;
35024 DREGu16((Opcode >> 9) & 7) = res;
35025RET(4)
35026}
35027
35028// ADDaD
35029OPCODE(0xD048)
35030{
35031 u32 adr, res;
35032 u32 src, dst;
35033
35034 src = AREGu16((Opcode >> 0) & 7);
35035 dst = DREGu16((Opcode >> 9) & 7);
35036 res = dst + src;
35037 flag_V = ((src ^ res) & (dst ^ res)) >> 8;
35038 flag_N = flag_X = flag_C = res >> 8;
35039 flag_NotZ = res & 0xFFFF;
35040 DREGu16((Opcode >> 9) & 7) = res;
35041RET(4)
35042}
35043
35044// ADDaD
35045OPCODE(0xD050)
35046{
35047 u32 adr, res;
35048 u32 src, dst;
35049
35050 adr = AREG((Opcode >> 0) & 7);
35051 PRE_IO
35052 READ_WORD_F(adr, src)
35053 dst = DREGu16((Opcode >> 9) & 7);
35054 res = dst + src;
35055 flag_V = ((src ^ res) & (dst ^ res)) >> 8;
35056 flag_N = flag_X = flag_C = res >> 8;
35057 flag_NotZ = res & 0xFFFF;
35058 DREGu16((Opcode >> 9) & 7) = res;
35059 POST_IO
35060RET(8)
35061}
35062
35063// ADDaD
35064OPCODE(0xD058)
35065{
35066 u32 adr, res;
35067 u32 src, dst;
35068
35069 adr = AREG((Opcode >> 0) & 7);
35070 AREG((Opcode >> 0) & 7) += 2;
35071 PRE_IO
35072 READ_WORD_F(adr, src)
35073 dst = DREGu16((Opcode >> 9) & 7);
35074 res = dst + src;
35075 flag_V = ((src ^ res) & (dst ^ res)) >> 8;
35076 flag_N = flag_X = flag_C = res >> 8;
35077 flag_NotZ = res & 0xFFFF;
35078 DREGu16((Opcode >> 9) & 7) = res;
35079 POST_IO
35080RET(8)
35081}
35082
35083// ADDaD
35084OPCODE(0xD060)
35085{
35086 u32 adr, res;
35087 u32 src, dst;
35088
35089 adr = AREG((Opcode >> 0) & 7) - 2;
35090 AREG((Opcode >> 0) & 7) = adr;
35091 PRE_IO
35092 READ_WORD_F(adr, src)
35093 dst = DREGu16((Opcode >> 9) & 7);
35094 res = dst + src;
35095 flag_V = ((src ^ res) & (dst ^ res)) >> 8;
35096 flag_N = flag_X = flag_C = res >> 8;
35097 flag_NotZ = res & 0xFFFF;
35098 DREGu16((Opcode >> 9) & 7) = res;
35099 POST_IO
35100RET(10)
35101}
35102
35103// ADDaD
35104OPCODE(0xD068)
35105{
35106 u32 adr, res;
35107 u32 src, dst;
35108
35109 FETCH_SWORD(adr);
35110 adr += AREG((Opcode >> 0) & 7);
35111 PRE_IO
35112 READ_WORD_F(adr, src)
35113 dst = DREGu16((Opcode >> 9) & 7);
35114 res = dst + src;
35115 flag_V = ((src ^ res) & (dst ^ res)) >> 8;
35116 flag_N = flag_X = flag_C = res >> 8;
35117 flag_NotZ = res & 0xFFFF;
35118 DREGu16((Opcode >> 9) & 7) = res;
35119 POST_IO
35120RET(12)
35121}
35122
35123// ADDaD
35124OPCODE(0xD070)
35125{
35126 u32 adr, res;
35127 u32 src, dst;
35128
35129 adr = AREG((Opcode >> 0) & 7);
35130 DECODE_EXT_WORD
35131 PRE_IO
35132 READ_WORD_F(adr, src)
35133 dst = DREGu16((Opcode >> 9) & 7);
35134 res = dst + src;
35135 flag_V = ((src ^ res) & (dst ^ res)) >> 8;
35136 flag_N = flag_X = flag_C = res >> 8;
35137 flag_NotZ = res & 0xFFFF;
35138 DREGu16((Opcode >> 9) & 7) = res;
35139 POST_IO
35140RET(14)
35141}
35142
35143// ADDaD
35144OPCODE(0xD078)
35145{
35146 u32 adr, res;
35147 u32 src, dst;
35148
35149 FETCH_SWORD(adr);
35150 PRE_IO
35151 READ_WORD_F(adr, src)
35152 dst = DREGu16((Opcode >> 9) & 7);
35153 res = dst + src;
35154 flag_V = ((src ^ res) & (dst ^ res)) >> 8;
35155 flag_N = flag_X = flag_C = res >> 8;
35156 flag_NotZ = res & 0xFFFF;
35157 DREGu16((Opcode >> 9) & 7) = res;
35158 POST_IO
35159RET(12)
35160}
35161
35162// ADDaD
35163OPCODE(0xD079)
35164{
35165 u32 adr, res;
35166 u32 src, dst;
35167
35168 FETCH_LONG(adr);
35169 PRE_IO
35170 READ_WORD_F(adr, src)
35171 dst = DREGu16((Opcode >> 9) & 7);
35172 res = dst + src;
35173 flag_V = ((src ^ res) & (dst ^ res)) >> 8;
35174 flag_N = flag_X = flag_C = res >> 8;
35175 flag_NotZ = res & 0xFFFF;
35176 DREGu16((Opcode >> 9) & 7) = res;
35177 POST_IO
35178RET(16)
35179}
35180
35181// ADDaD
35182OPCODE(0xD07A)
35183{
35184 u32 adr, res;
35185 u32 src, dst;
35186
35187 adr = GET_SWORD + ((u32)(PC) - BasePC);
35188 PC++;
35189 PRE_IO
35190 READ_WORD_F(adr, src)
35191 dst = DREGu16((Opcode >> 9) & 7);
35192 res = dst + src;
35193 flag_V = ((src ^ res) & (dst ^ res)) >> 8;
35194 flag_N = flag_X = flag_C = res >> 8;
35195 flag_NotZ = res & 0xFFFF;
35196 DREGu16((Opcode >> 9) & 7) = res;
35197 POST_IO
35198RET(12)
35199}
35200
35201// ADDaD
35202OPCODE(0xD07B)
35203{
35204 u32 adr, res;
35205 u32 src, dst;
35206
35207 adr = (u32)(PC) - BasePC;
35208 DECODE_EXT_WORD
35209 PRE_IO
35210 READ_WORD_F(adr, src)
35211 dst = DREGu16((Opcode >> 9) & 7);
35212 res = dst + src;
35213 flag_V = ((src ^ res) & (dst ^ res)) >> 8;
35214 flag_N = flag_X = flag_C = res >> 8;
35215 flag_NotZ = res & 0xFFFF;
35216 DREGu16((Opcode >> 9) & 7) = res;
35217 POST_IO
35218RET(14)
35219}
35220
35221// ADDaD
35222OPCODE(0xD07C)
35223{
35224 u32 adr, res;
35225 u32 src, dst;
35226
35227 FETCH_WORD(src);
35228 dst = DREGu16((Opcode >> 9) & 7);
35229 res = dst + src;
35230 flag_V = ((src ^ res) & (dst ^ res)) >> 8;
35231 flag_N = flag_X = flag_C = res >> 8;
35232 flag_NotZ = res & 0xFFFF;
35233 DREGu16((Opcode >> 9) & 7) = res;
35234RET(8)
35235}
35236
35237// ADDaD
35238OPCODE(0xD05F)
35239{
35240 u32 adr, res;
35241 u32 src, dst;
35242
35243 adr = AREG(7);
35244 AREG(7) += 2;
35245 PRE_IO
35246 READ_WORD_F(adr, src)
35247 dst = DREGu16((Opcode >> 9) & 7);
35248 res = dst + src;
35249 flag_V = ((src ^ res) & (dst ^ res)) >> 8;
35250 flag_N = flag_X = flag_C = res >> 8;
35251 flag_NotZ = res & 0xFFFF;
35252 DREGu16((Opcode >> 9) & 7) = res;
35253 POST_IO
35254RET(8)
35255}
35256
35257// ADDaD
35258OPCODE(0xD067)
35259{
35260 u32 adr, res;
35261 u32 src, dst;
35262
35263 adr = AREG(7) - 2;
35264 AREG(7) = adr;
35265 PRE_IO
35266 READ_WORD_F(adr, src)
35267 dst = DREGu16((Opcode >> 9) & 7);
35268 res = dst + src;
35269 flag_V = ((src ^ res) & (dst ^ res)) >> 8;
35270 flag_N = flag_X = flag_C = res >> 8;
35271 flag_NotZ = res & 0xFFFF;
35272 DREGu16((Opcode >> 9) & 7) = res;
35273 POST_IO
35274RET(10)
35275}
35276
35277// ADDaD
35278OPCODE(0xD080)
35279{
35280 u32 adr, res;
35281 u32 src, dst;
35282
35283 src = DREGu32((Opcode >> 0) & 7);
35284 dst = DREGu32((Opcode >> 9) & 7);
35285 res = dst + src;
35286 flag_NotZ = res;
35287 flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
35288 flag_V = ((src ^ res) & (dst ^ res)) >> 24;
35289 flag_N = res >> 24;
35290 DREGu32((Opcode >> 9) & 7) = res;
35291RET(8)
35292}
35293
35294// ADDaD
35295OPCODE(0xD088)
35296{
35297 u32 adr, res;
35298 u32 src, dst;
35299
35300 src = AREGu32((Opcode >> 0) & 7);
35301 dst = DREGu32((Opcode >> 9) & 7);
35302 res = dst + src;
35303 flag_NotZ = res;
35304 flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
35305 flag_V = ((src ^ res) & (dst ^ res)) >> 24;
35306 flag_N = res >> 24;
35307 DREGu32((Opcode >> 9) & 7) = res;
35308RET(8)
35309}
35310
35311// ADDaD
35312OPCODE(0xD090)
35313{
35314 u32 adr, res;
35315 u32 src, dst;
35316
35317 adr = AREG((Opcode >> 0) & 7);
35318 PRE_IO
35319 READ_LONG_F(adr, src)
35320 dst = DREGu32((Opcode >> 9) & 7);
35321 res = dst + src;
35322 flag_NotZ = res;
35323 flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
35324 flag_V = ((src ^ res) & (dst ^ res)) >> 24;
35325 flag_N = res >> 24;
35326 DREGu32((Opcode >> 9) & 7) = res;
35327 POST_IO
35328RET(14)
35329}
35330
35331// ADDaD
35332OPCODE(0xD098)
35333{
35334 u32 adr, res;
35335 u32 src, dst;
35336
35337 adr = AREG((Opcode >> 0) & 7);
35338 AREG((Opcode >> 0) & 7) += 4;
35339 PRE_IO
35340 READ_LONG_F(adr, src)
35341 dst = DREGu32((Opcode >> 9) & 7);
35342 res = dst + src;
35343 flag_NotZ = res;
35344 flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
35345 flag_V = ((src ^ res) & (dst ^ res)) >> 24;
35346 flag_N = res >> 24;
35347 DREGu32((Opcode >> 9) & 7) = res;
35348 POST_IO
35349RET(14)
35350}
35351
35352// ADDaD
35353OPCODE(0xD0A0)
35354{
35355 u32 adr, res;
35356 u32 src, dst;
35357
35358 adr = AREG((Opcode >> 0) & 7) - 4;
35359 AREG((Opcode >> 0) & 7) = adr;
35360 PRE_IO
35361 READ_LONG_F(adr, src)
35362 dst = DREGu32((Opcode >> 9) & 7);
35363 res = dst + src;
35364 flag_NotZ = res;
35365 flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
35366 flag_V = ((src ^ res) & (dst ^ res)) >> 24;
35367 flag_N = res >> 24;
35368 DREGu32((Opcode >> 9) & 7) = res;
35369 POST_IO
35370RET(16)
35371}
35372
35373// ADDaD
35374OPCODE(0xD0A8)
35375{
35376 u32 adr, res;
35377 u32 src, dst;
35378
35379 FETCH_SWORD(adr);
35380 adr += AREG((Opcode >> 0) & 7);
35381 PRE_IO
35382 READ_LONG_F(adr, src)
35383 dst = DREGu32((Opcode >> 9) & 7);
35384 res = dst + src;
35385 flag_NotZ = res;
35386 flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
35387 flag_V = ((src ^ res) & (dst ^ res)) >> 24;
35388 flag_N = res >> 24;
35389 DREGu32((Opcode >> 9) & 7) = res;
35390 POST_IO
35391RET(18)
35392}
35393
35394// ADDaD
35395OPCODE(0xD0B0)
35396{
35397 u32 adr, res;
35398 u32 src, dst;
35399
35400 adr = AREG((Opcode >> 0) & 7);
35401 DECODE_EXT_WORD
35402 PRE_IO
35403 READ_LONG_F(adr, src)
35404 dst = DREGu32((Opcode >> 9) & 7);
35405 res = dst + src;
35406 flag_NotZ = res;
35407 flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
35408 flag_V = ((src ^ res) & (dst ^ res)) >> 24;
35409 flag_N = res >> 24;
35410 DREGu32((Opcode >> 9) & 7) = res;
35411 POST_IO
35412RET(20)
35413}
35414
35415// ADDaD
35416OPCODE(0xD0B8)
35417{
35418 u32 adr, res;
35419 u32 src, dst;
35420
35421 FETCH_SWORD(adr);
35422 PRE_IO
35423 READ_LONG_F(adr, src)
35424 dst = DREGu32((Opcode >> 9) & 7);
35425 res = dst + src;
35426 flag_NotZ = res;
35427 flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
35428 flag_V = ((src ^ res) & (dst ^ res)) >> 24;
35429 flag_N = res >> 24;
35430 DREGu32((Opcode >> 9) & 7) = res;
35431 POST_IO
35432RET(18)
35433}
35434
35435// ADDaD
35436OPCODE(0xD0B9)
35437{
35438 u32 adr, res;
35439 u32 src, dst;
35440
35441 FETCH_LONG(adr);
35442 PRE_IO
35443 READ_LONG_F(adr, src)
35444 dst = DREGu32((Opcode >> 9) & 7);
35445 res = dst + src;
35446 flag_NotZ = res;
35447 flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
35448 flag_V = ((src ^ res) & (dst ^ res)) >> 24;
35449 flag_N = res >> 24;
35450 DREGu32((Opcode >> 9) & 7) = res;
35451 POST_IO
35452RET(22)
35453}
35454
35455// ADDaD
35456OPCODE(0xD0BA)
35457{
35458 u32 adr, res;
35459 u32 src, dst;
35460
35461 adr = GET_SWORD + ((u32)(PC) - BasePC);
35462 PC++;
35463 PRE_IO
35464 READ_LONG_F(adr, src)
35465 dst = DREGu32((Opcode >> 9) & 7);
35466 res = dst + src;
35467 flag_NotZ = res;
35468 flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
35469 flag_V = ((src ^ res) & (dst ^ res)) >> 24;
35470 flag_N = res >> 24;
35471 DREGu32((Opcode >> 9) & 7) = res;
35472 POST_IO
35473RET(18)
35474}
35475
35476// ADDaD
35477OPCODE(0xD0BB)
35478{
35479 u32 adr, res;
35480 u32 src, dst;
35481
35482 adr = (u32)(PC) - BasePC;
35483 DECODE_EXT_WORD
35484 PRE_IO
35485 READ_LONG_F(adr, src)
35486 dst = DREGu32((Opcode >> 9) & 7);
35487 res = dst + src;
35488 flag_NotZ = res;
35489 flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
35490 flag_V = ((src ^ res) & (dst ^ res)) >> 24;
35491 flag_N = res >> 24;
35492 DREGu32((Opcode >> 9) & 7) = res;
35493 POST_IO
35494RET(20)
35495}
35496
35497// ADDaD
35498OPCODE(0xD0BC)
35499{
35500 u32 adr, res;
35501 u32 src, dst;
35502
35503 FETCH_LONG(src);
35504 dst = DREGu32((Opcode >> 9) & 7);
35505 res = dst + src;
35506 flag_NotZ = res;
35507 flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
35508 flag_V = ((src ^ res) & (dst ^ res)) >> 24;
35509 flag_N = res >> 24;
35510 DREGu32((Opcode >> 9) & 7) = res;
35511RET(16)
35512}
35513
35514// ADDaD
35515OPCODE(0xD09F)
35516{
35517 u32 adr, res;
35518 u32 src, dst;
35519
35520 adr = AREG(7);
35521 AREG(7) += 4;
35522 PRE_IO
35523 READ_LONG_F(adr, src)
35524 dst = DREGu32((Opcode >> 9) & 7);
35525 res = dst + src;
35526 flag_NotZ = res;
35527 flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
35528 flag_V = ((src ^ res) & (dst ^ res)) >> 24;
35529 flag_N = res >> 24;
35530 DREGu32((Opcode >> 9) & 7) = res;
35531 POST_IO
35532RET(14)
35533}
35534
35535// ADDaD
35536OPCODE(0xD0A7)
35537{
35538 u32 adr, res;
35539 u32 src, dst;
35540
35541 adr = AREG(7) - 4;
35542 AREG(7) = adr;
35543 PRE_IO
35544 READ_LONG_F(adr, src)
35545 dst = DREGu32((Opcode >> 9) & 7);
35546 res = dst + src;
35547 flag_NotZ = res;
35548 flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
35549 flag_V = ((src ^ res) & (dst ^ res)) >> 24;
35550 flag_N = res >> 24;
35551 DREGu32((Opcode >> 9) & 7) = res;
35552 POST_IO
35553RET(16)
35554}
35555
35556// ADDDa
35557OPCODE(0xD110)
35558{
35559 u32 adr, res;
35560 u32 src, dst;
35561
35562 src = DREGu8((Opcode >> 9) & 7);
35563 adr = AREG((Opcode >> 0) & 7);
35564 PRE_IO
35565 READ_BYTE_F(adr, dst)
35566 res = dst + src;
35567 flag_N = flag_X = flag_C = res;
35568 flag_V = (src ^ res) & (dst ^ res);
35569 flag_NotZ = res & 0xFF;
35570 WRITE_BYTE_F(adr, res)
35571 POST_IO
35572RET(12)
35573}
35574
35575// ADDDa
35576OPCODE(0xD118)
35577{
35578 u32 adr, res;
35579 u32 src, dst;
35580
35581 src = DREGu8((Opcode >> 9) & 7);
35582 adr = AREG((Opcode >> 0) & 7);
35583 AREG((Opcode >> 0) & 7) += 1;
35584 PRE_IO
35585 READ_BYTE_F(adr, dst)
35586 res = dst + src;
35587 flag_N = flag_X = flag_C = res;
35588 flag_V = (src ^ res) & (dst ^ res);
35589 flag_NotZ = res & 0xFF;
35590 WRITE_BYTE_F(adr, res)
35591 POST_IO
35592RET(12)
35593}
35594
35595// ADDDa
35596OPCODE(0xD120)
35597{
35598 u32 adr, res;
35599 u32 src, dst;
35600
35601 src = DREGu8((Opcode >> 9) & 7);
35602 adr = AREG((Opcode >> 0) & 7) - 1;
35603 AREG((Opcode >> 0) & 7) = adr;
35604 PRE_IO
35605 READ_BYTE_F(adr, dst)
35606 res = dst + src;
35607 flag_N = flag_X = flag_C = res;
35608 flag_V = (src ^ res) & (dst ^ res);
35609 flag_NotZ = res & 0xFF;
35610 WRITE_BYTE_F(adr, res)
35611 POST_IO
35612RET(14)
35613}
35614
35615// ADDDa
35616OPCODE(0xD128)
35617{
35618 u32 adr, res;
35619 u32 src, dst;
35620
35621 src = DREGu8((Opcode >> 9) & 7);
35622 FETCH_SWORD(adr);
35623 adr += AREG((Opcode >> 0) & 7);
35624 PRE_IO
35625 READ_BYTE_F(adr, dst)
35626 res = dst + src;
35627 flag_N = flag_X = flag_C = res;
35628 flag_V = (src ^ res) & (dst ^ res);
35629 flag_NotZ = res & 0xFF;
35630 WRITE_BYTE_F(adr, res)
35631 POST_IO
35632RET(16)
35633}
35634
35635// ADDDa
35636OPCODE(0xD130)
35637{
35638 u32 adr, res;
35639 u32 src, dst;
35640
35641 src = DREGu8((Opcode >> 9) & 7);
35642 adr = AREG((Opcode >> 0) & 7);
35643 DECODE_EXT_WORD
35644 PRE_IO
35645 READ_BYTE_F(adr, dst)
35646 res = dst + src;
35647 flag_N = flag_X = flag_C = res;
35648 flag_V = (src ^ res) & (dst ^ res);
35649 flag_NotZ = res & 0xFF;
35650 WRITE_BYTE_F(adr, res)
35651 POST_IO
35652RET(18)
35653}
35654
35655// ADDDa
35656OPCODE(0xD138)
35657{
35658 u32 adr, res;
35659 u32 src, dst;
35660
35661 src = DREGu8((Opcode >> 9) & 7);
35662 FETCH_SWORD(adr);
35663 PRE_IO
35664 READ_BYTE_F(adr, dst)
35665 res = dst + src;
35666 flag_N = flag_X = flag_C = res;
35667 flag_V = (src ^ res) & (dst ^ res);
35668 flag_NotZ = res & 0xFF;
35669 WRITE_BYTE_F(adr, res)
35670 POST_IO
35671RET(16)
35672}
35673
35674// ADDDa
35675OPCODE(0xD139)
35676{
35677 u32 adr, res;
35678 u32 src, dst;
35679
35680 src = DREGu8((Opcode >> 9) & 7);
35681 FETCH_LONG(adr);
35682 PRE_IO
35683 READ_BYTE_F(adr, dst)
35684 res = dst + src;
35685 flag_N = flag_X = flag_C = res;
35686 flag_V = (src ^ res) & (dst ^ res);
35687 flag_NotZ = res & 0xFF;
35688 WRITE_BYTE_F(adr, res)
35689 POST_IO
35690RET(20)
35691}
35692
35693// ADDDa
35694OPCODE(0xD11F)
35695{
35696 u32 adr, res;
35697 u32 src, dst;
35698
35699 src = DREGu8((Opcode >> 9) & 7);
35700 adr = AREG(7);
35701 AREG(7) += 2;
35702 PRE_IO
35703 READ_BYTE_F(adr, dst)
35704 res = dst + src;
35705 flag_N = flag_X = flag_C = res;
35706 flag_V = (src ^ res) & (dst ^ res);
35707 flag_NotZ = res & 0xFF;
35708 WRITE_BYTE_F(adr, res)
35709 POST_IO
35710RET(12)
35711}
35712
35713// ADDDa
35714OPCODE(0xD127)
35715{
35716 u32 adr, res;
35717 u32 src, dst;
35718
35719 src = DREGu8((Opcode >> 9) & 7);
35720 adr = AREG(7) - 2;
35721 AREG(7) = adr;
35722 PRE_IO
35723 READ_BYTE_F(adr, dst)
35724 res = dst + src;
35725 flag_N = flag_X = flag_C = res;
35726 flag_V = (src ^ res) & (dst ^ res);
35727 flag_NotZ = res & 0xFF;
35728 WRITE_BYTE_F(adr, res)
35729 POST_IO
35730RET(14)
35731}
35732
35733// ADDDa
35734OPCODE(0xD150)
35735{
35736 u32 adr, res;
35737 u32 src, dst;
35738
35739 src = DREGu16((Opcode >> 9) & 7);
35740 adr = AREG((Opcode >> 0) & 7);
35741 PRE_IO
35742 READ_WORD_F(adr, dst)
35743 res = dst + src;
35744 flag_V = ((src ^ res) & (dst ^ res)) >> 8;
35745 flag_N = flag_X = flag_C = res >> 8;
35746 flag_NotZ = res & 0xFFFF;
35747 WRITE_WORD_F(adr, res)
35748 POST_IO
35749RET(12)
35750}
35751
35752// ADDDa
35753OPCODE(0xD158)
35754{
35755 u32 adr, res;
35756 u32 src, dst;
35757
35758 src = DREGu16((Opcode >> 9) & 7);
35759 adr = AREG((Opcode >> 0) & 7);
35760 AREG((Opcode >> 0) & 7) += 2;
35761 PRE_IO
35762 READ_WORD_F(adr, dst)
35763 res = dst + src;
35764 flag_V = ((src ^ res) & (dst ^ res)) >> 8;
35765 flag_N = flag_X = flag_C = res >> 8;
35766 flag_NotZ = res & 0xFFFF;
35767 WRITE_WORD_F(adr, res)
35768 POST_IO
35769RET(12)
35770}
35771
35772// ADDDa
35773OPCODE(0xD160)
35774{
35775 u32 adr, res;
35776 u32 src, dst;
35777
35778 src = DREGu16((Opcode >> 9) & 7);
35779 adr = AREG((Opcode >> 0) & 7) - 2;
35780 AREG((Opcode >> 0) & 7) = adr;
35781 PRE_IO
35782 READ_WORD_F(adr, dst)
35783 res = dst + src;
35784 flag_V = ((src ^ res) & (dst ^ res)) >> 8;
35785 flag_N = flag_X = flag_C = res >> 8;
35786 flag_NotZ = res & 0xFFFF;
35787 WRITE_WORD_F(adr, res)
35788 POST_IO
35789RET(14)
35790}
35791
35792// ADDDa
35793OPCODE(0xD168)
35794{
35795 u32 adr, res;
35796 u32 src, dst;
35797
35798 src = DREGu16((Opcode >> 9) & 7);
35799 FETCH_SWORD(adr);
35800 adr += AREG((Opcode >> 0) & 7);
35801 PRE_IO
35802 READ_WORD_F(adr, dst)
35803 res = dst + src;
35804 flag_V = ((src ^ res) & (dst ^ res)) >> 8;
35805 flag_N = flag_X = flag_C = res >> 8;
35806 flag_NotZ = res & 0xFFFF;
35807 WRITE_WORD_F(adr, res)
35808 POST_IO
35809RET(16)
35810}
35811
35812// ADDDa
35813OPCODE(0xD170)
35814{
35815 u32 adr, res;
35816 u32 src, dst;
35817
35818 src = DREGu16((Opcode >> 9) & 7);
35819 adr = AREG((Opcode >> 0) & 7);
35820 DECODE_EXT_WORD
35821 PRE_IO
35822 READ_WORD_F(adr, dst)
35823 res = dst + src;
35824 flag_V = ((src ^ res) & (dst ^ res)) >> 8;
35825 flag_N = flag_X = flag_C = res >> 8;
35826 flag_NotZ = res & 0xFFFF;
35827 WRITE_WORD_F(adr, res)
35828 POST_IO
35829RET(18)
35830}
35831
35832// ADDDa
35833OPCODE(0xD178)
35834{
35835 u32 adr, res;
35836 u32 src, dst;
35837
35838 src = DREGu16((Opcode >> 9) & 7);
35839 FETCH_SWORD(adr);
35840 PRE_IO
35841 READ_WORD_F(adr, dst)
35842 res = dst + src;
35843 flag_V = ((src ^ res) & (dst ^ res)) >> 8;
35844 flag_N = flag_X = flag_C = res >> 8;
35845 flag_NotZ = res & 0xFFFF;
35846 WRITE_WORD_F(adr, res)
35847 POST_IO
35848RET(16)
35849}
35850
35851// ADDDa
35852OPCODE(0xD179)
35853{
35854 u32 adr, res;
35855 u32 src, dst;
35856
35857 src = DREGu16((Opcode >> 9) & 7);
35858 FETCH_LONG(adr);
35859 PRE_IO
35860 READ_WORD_F(adr, dst)
35861 res = dst + src;
35862 flag_V = ((src ^ res) & (dst ^ res)) >> 8;
35863 flag_N = flag_X = flag_C = res >> 8;
35864 flag_NotZ = res & 0xFFFF;
35865 WRITE_WORD_F(adr, res)
35866 POST_IO
35867RET(20)
35868}
35869
35870// ADDDa
35871OPCODE(0xD15F)
35872{
35873 u32 adr, res;
35874 u32 src, dst;
35875
35876 src = DREGu16((Opcode >> 9) & 7);
35877 adr = AREG(7);
35878 AREG(7) += 2;
35879 PRE_IO
35880 READ_WORD_F(adr, dst)
35881 res = dst + src;
35882 flag_V = ((src ^ res) & (dst ^ res)) >> 8;
35883 flag_N = flag_X = flag_C = res >> 8;
35884 flag_NotZ = res & 0xFFFF;
35885 WRITE_WORD_F(adr, res)
35886 POST_IO
35887RET(12)
35888}
35889
35890// ADDDa
35891OPCODE(0xD167)
35892{
35893 u32 adr, res;
35894 u32 src, dst;
35895
35896 src = DREGu16((Opcode >> 9) & 7);
35897 adr = AREG(7) - 2;
35898 AREG(7) = adr;
35899 PRE_IO
35900 READ_WORD_F(adr, dst)
35901 res = dst + src;
35902 flag_V = ((src ^ res) & (dst ^ res)) >> 8;
35903 flag_N = flag_X = flag_C = res >> 8;
35904 flag_NotZ = res & 0xFFFF;
35905 WRITE_WORD_F(adr, res)
35906 POST_IO
35907RET(14)
35908}
35909
35910// ADDDa
35911OPCODE(0xD190)
35912{
35913 u32 adr, res;
35914 u32 src, dst;
35915
35916 src = DREGu32((Opcode >> 9) & 7);
35917 adr = AREG((Opcode >> 0) & 7);
35918 PRE_IO
35919 READ_LONG_F(adr, dst)
35920 res = dst + src;
35921 flag_NotZ = res;
35922 flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
35923 flag_V = ((src ^ res) & (dst ^ res)) >> 24;
35924 flag_N = res >> 24;
35925 WRITE_LONG_F(adr, res)
35926 POST_IO
35927RET(20)
35928}
35929
35930// ADDDa
35931OPCODE(0xD198)
35932{
35933 u32 adr, res;
35934 u32 src, dst;
35935
35936 src = DREGu32((Opcode >> 9) & 7);
35937 adr = AREG((Opcode >> 0) & 7);
35938 AREG((Opcode >> 0) & 7) += 4;
35939 PRE_IO
35940 READ_LONG_F(adr, dst)
35941 res = dst + src;
35942 flag_NotZ = res;
35943 flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
35944 flag_V = ((src ^ res) & (dst ^ res)) >> 24;
35945 flag_N = res >> 24;
35946 WRITE_LONG_F(adr, res)
35947 POST_IO
35948RET(20)
35949}
35950
35951// ADDDa
35952OPCODE(0xD1A0)
35953{
35954 u32 adr, res;
35955 u32 src, dst;
35956
35957 src = DREGu32((Opcode >> 9) & 7);
35958 adr = AREG((Opcode >> 0) & 7) - 4;
35959 AREG((Opcode >> 0) & 7) = adr;
35960 PRE_IO
35961 READ_LONG_F(adr, dst)
35962 res = dst + src;
35963 flag_NotZ = res;
35964 flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
35965 flag_V = ((src ^ res) & (dst ^ res)) >> 24;
35966 flag_N = res >> 24;
35967 WRITE_LONG_F(adr, res)
35968 POST_IO
35969RET(22)
35970}
35971
35972// ADDDa
35973OPCODE(0xD1A8)
35974{
35975 u32 adr, res;
35976 u32 src, dst;
35977
35978 src = DREGu32((Opcode >> 9) & 7);
35979 FETCH_SWORD(adr);
35980 adr += AREG((Opcode >> 0) & 7);
35981 PRE_IO
35982 READ_LONG_F(adr, dst)
35983 res = dst + src;
35984 flag_NotZ = res;
35985 flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
35986 flag_V = ((src ^ res) & (dst ^ res)) >> 24;
35987 flag_N = res >> 24;
35988 WRITE_LONG_F(adr, res)
35989 POST_IO
35990RET(24)
35991}
35992
35993// ADDDa
35994OPCODE(0xD1B0)
35995{
35996 u32 adr, res;
35997 u32 src, dst;
35998
35999 src = DREGu32((Opcode >> 9) & 7);
36000 adr = AREG((Opcode >> 0) & 7);
36001 DECODE_EXT_WORD
36002 PRE_IO
36003 READ_LONG_F(adr, dst)
36004 res = dst + src;
36005 flag_NotZ = res;
36006 flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
36007 flag_V = ((src ^ res) & (dst ^ res)) >> 24;
36008 flag_N = res >> 24;
36009 WRITE_LONG_F(adr, res)
36010 POST_IO
36011RET(26)
36012}
36013
36014// ADDDa
36015OPCODE(0xD1B8)
36016{
36017 u32 adr, res;
36018 u32 src, dst;
36019
36020 src = DREGu32((Opcode >> 9) & 7);
36021 FETCH_SWORD(adr);
36022 PRE_IO
36023 READ_LONG_F(adr, dst)
36024 res = dst + src;
36025 flag_NotZ = res;
36026 flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
36027 flag_V = ((src ^ res) & (dst ^ res)) >> 24;
36028 flag_N = res >> 24;
36029 WRITE_LONG_F(adr, res)
36030 POST_IO
36031RET(24)
36032}
36033
36034// ADDDa
36035OPCODE(0xD1B9)
36036{
36037 u32 adr, res;
36038 u32 src, dst;
36039
36040 src = DREGu32((Opcode >> 9) & 7);
36041 FETCH_LONG(adr);
36042 PRE_IO
36043 READ_LONG_F(adr, dst)
36044 res = dst + src;
36045 flag_NotZ = res;
36046 flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
36047 flag_V = ((src ^ res) & (dst ^ res)) >> 24;
36048 flag_N = res >> 24;
36049 WRITE_LONG_F(adr, res)
36050 POST_IO
36051RET(28)
36052}
36053
36054// ADDDa
36055OPCODE(0xD19F)
36056{
36057 u32 adr, res;
36058 u32 src, dst;
36059
36060 src = DREGu32((Opcode >> 9) & 7);
36061 adr = AREG(7);
36062 AREG(7) += 4;
36063 PRE_IO
36064 READ_LONG_F(adr, dst)
36065 res = dst + src;
36066 flag_NotZ = res;
36067 flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
36068 flag_V = ((src ^ res) & (dst ^ res)) >> 24;
36069 flag_N = res >> 24;
36070 WRITE_LONG_F(adr, res)
36071 POST_IO
36072RET(20)
36073}
36074
36075// ADDDa
36076OPCODE(0xD1A7)
36077{
36078 u32 adr, res;
36079 u32 src, dst;
36080
36081 src = DREGu32((Opcode >> 9) & 7);
36082 adr = AREG(7) - 4;
36083 AREG(7) = adr;
36084 PRE_IO
36085 READ_LONG_F(adr, dst)
36086 res = dst + src;
36087 flag_NotZ = res;
36088 flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
36089 flag_V = ((src ^ res) & (dst ^ res)) >> 24;
36090 flag_N = res >> 24;
36091 WRITE_LONG_F(adr, res)
36092 POST_IO
36093RET(22)
36094}
36095
36096// ADDX
36097OPCODE(0xD100)
36098{
36099 u32 adr, res;
36100 u32 src, dst;
36101
36102 src = DREGu8((Opcode >> 0) & 7);
36103 dst = DREGu8((Opcode >> 9) & 7);
36104 res = dst + src + ((flag_X >> 8) & 1);
36105 flag_N = flag_X = flag_C = res;
36106 flag_V = (src ^ res) & (dst ^ res);
36107 flag_NotZ |= res & 0xFF;
36108 DREGu8((Opcode >> 9) & 7) = res;
36109RET(4)
36110}
36111
36112// ADDX
36113OPCODE(0xD140)
36114{
36115 u32 adr, res;
36116 u32 src, dst;
36117
36118 src = DREGu16((Opcode >> 0) & 7);
36119 dst = DREGu16((Opcode >> 9) & 7);
36120 res = dst + src + ((flag_X >> 8) & 1);
36121 flag_V = ((src ^ res) & (dst ^ res)) >> 8;
36122 flag_N = flag_X = flag_C = res >> 8;
36123 flag_NotZ |= res & 0xFFFF;
36124 DREGu16((Opcode >> 9) & 7) = res;
36125RET(4)
36126}
36127
36128// ADDX
36129OPCODE(0xD180)
36130{
36131 u32 adr, res;
36132 u32 src, dst;
36133
36134 src = DREGu32((Opcode >> 0) & 7);
36135 dst = DREGu32((Opcode >> 9) & 7);
36136 res = dst + src + ((flag_X >> 8) & 1);
36137 flag_NotZ |= res;
36138 flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
36139 flag_V = ((src ^ res) & (dst ^ res)) >> 24;
36140 flag_N = res >> 24;
36141 DREGu32((Opcode >> 9) & 7) = res;
36142RET(8)
36143}
36144
36145// ADDXM
36146OPCODE(0xD108)
36147{
36148 u32 adr, res;
36149 u32 src, dst;
36150
36151 adr = AREG((Opcode >> 0) & 7) - 1;
36152 AREG((Opcode >> 0) & 7) = adr;
36153 PRE_IO
36154 READ_BYTE_F(adr, src)
36155 adr = AREG((Opcode >> 9) & 7) - 1;
36156 AREG((Opcode >> 9) & 7) = adr;
36157 READ_BYTE_F(adr, dst)
36158 res = dst + src + ((flag_X >> 8) & 1);
36159 flag_N = flag_X = flag_C = res;
36160 flag_V = (src ^ res) & (dst ^ res);
36161 flag_NotZ |= res & 0xFF;
36162 WRITE_BYTE_F(adr, res)
36163 POST_IO
36164RET(18)
36165}
36166
36167// ADDXM
36168OPCODE(0xD148)
36169{
36170 u32 adr, res;
36171 u32 src, dst;
36172
36173 adr = AREG((Opcode >> 0) & 7) - 2;
36174 AREG((Opcode >> 0) & 7) = adr;
36175 PRE_IO
36176 READ_WORD_F(adr, src)
36177 adr = AREG((Opcode >> 9) & 7) - 2;
36178 AREG((Opcode >> 9) & 7) = adr;
36179 READ_WORD_F(adr, dst)
36180 res = dst + src + ((flag_X >> 8) & 1);
36181 flag_V = ((src ^ res) & (dst ^ res)) >> 8;
36182 flag_N = flag_X = flag_C = res >> 8;
36183 flag_NotZ |= res & 0xFFFF;
36184 WRITE_WORD_F(adr, res)
36185 POST_IO
36186RET(18)
36187}
36188
36189// ADDXM
36190OPCODE(0xD188)
36191{
36192 u32 adr, res;
36193 u32 src, dst;
36194
36195 adr = AREG((Opcode >> 0) & 7) - 4;
36196 AREG((Opcode >> 0) & 7) = adr;
36197 PRE_IO
36198 READ_LONG_F(adr, src)
36199 adr = AREG((Opcode >> 9) & 7) - 4;
36200 AREG((Opcode >> 9) & 7) = adr;
36201 READ_LONG_F(adr, dst)
36202 res = dst + src + ((flag_X >> 8) & 1);
36203 flag_NotZ |= res;
36204 flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
36205 flag_V = ((src ^ res) & (dst ^ res)) >> 24;
36206 flag_N = res >> 24;
36207 WRITE_LONG_F(adr, res)
36208 POST_IO
36209RET(30)
36210}
36211
36212// ADDX7M
36213OPCODE(0xD10F)
36214{
36215 u32 adr, res;
36216 u32 src, dst;
36217
36218 adr = AREG(7) - 2;
36219 AREG(7) = adr;
36220 PRE_IO
36221 READ_BYTE_F(adr, src)
36222 adr = AREG((Opcode >> 9) & 7) - 1;
36223 AREG((Opcode >> 9) & 7) = adr;
36224 READ_BYTE_F(adr, dst)
36225 res = dst + src + ((flag_X >> 8) & 1);
36226 flag_N = flag_X = flag_C = res;
36227 flag_V = (src ^ res) & (dst ^ res);
36228 flag_NotZ |= res & 0xFF;
36229 WRITE_BYTE_F(adr, res)
36230 POST_IO
36231RET(18)
36232}
36233
36234// ADDX7M
36235OPCODE(0xD14F)
36236{
36237 u32 adr, res;
36238 u32 src, dst;
36239
36240 adr = AREG(7) - 2;
36241 AREG(7) = adr;
36242 PRE_IO
36243 READ_WORD_F(adr, src)
36244 adr = AREG((Opcode >> 9) & 7) - 2;
36245 AREG((Opcode >> 9) & 7) = adr;
36246 READ_WORD_F(adr, dst)
36247 res = dst + src + ((flag_X >> 8) & 1);
36248 flag_V = ((src ^ res) & (dst ^ res)) >> 8;
36249 flag_N = flag_X = flag_C = res >> 8;
36250 flag_NotZ |= res & 0xFFFF;
36251 WRITE_WORD_F(adr, res)
36252 POST_IO
36253RET(18)
36254}
36255
36256// ADDX7M
36257OPCODE(0xD18F)
36258{
36259 u32 adr, res;
36260 u32 src, dst;
36261
36262 adr = AREG(7) - 4;
36263 AREG(7) = adr;
36264 PRE_IO
36265 READ_LONG_F(adr, src)
36266 adr = AREG((Opcode >> 9) & 7) - 4;
36267 AREG((Opcode >> 9) & 7) = adr;
36268 READ_LONG_F(adr, dst)
36269 res = dst + src + ((flag_X >> 8) & 1);
36270 flag_NotZ |= res;
36271 flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
36272 flag_V = ((src ^ res) & (dst ^ res)) >> 24;
36273 flag_N = res >> 24;
36274 WRITE_LONG_F(adr, res)
36275 POST_IO
36276RET(30)
36277}
36278
36279// ADDXM7
36280OPCODE(0xDF08)
36281{
36282 u32 adr, res;
36283 u32 src, dst;
36284
36285 adr = AREG((Opcode >> 0) & 7) - 1;
36286 AREG((Opcode >> 0) & 7) = adr;
36287 PRE_IO
36288 READ_BYTE_F(adr, src)
36289 adr = AREG(7) - 2;
36290 AREG(7) = adr;
36291 READ_BYTE_F(adr, dst)
36292 res = dst + src + ((flag_X >> 8) & 1);
36293 flag_N = flag_X = flag_C = res;
36294 flag_V = (src ^ res) & (dst ^ res);
36295 flag_NotZ |= res & 0xFF;
36296 WRITE_BYTE_F(adr, res)
36297 POST_IO
36298RET(18)
36299}
36300
36301// ADDXM7
36302OPCODE(0xDF48)
36303{
36304 u32 adr, res;
36305 u32 src, dst;
36306
36307 adr = AREG((Opcode >> 0) & 7) - 2;
36308 AREG((Opcode >> 0) & 7) = adr;
36309 PRE_IO
36310 READ_WORD_F(adr, src)
36311 adr = AREG(7) - 2;
36312 AREG(7) = adr;
36313 READ_WORD_F(adr, dst)
36314 res = dst + src + ((flag_X >> 8) & 1);
36315 flag_V = ((src ^ res) & (dst ^ res)) >> 8;
36316 flag_N = flag_X = flag_C = res >> 8;
36317 flag_NotZ |= res & 0xFFFF;
36318 WRITE_WORD_F(adr, res)
36319 POST_IO
36320RET(18)
36321}
36322
36323// ADDXM7
36324OPCODE(0xDF88)
36325{
36326 u32 adr, res;
36327 u32 src, dst;
36328
36329 adr = AREG((Opcode >> 0) & 7) - 4;
36330 AREG((Opcode >> 0) & 7) = adr;
36331 PRE_IO
36332 READ_LONG_F(adr, src)
36333 adr = AREG(7) - 4;
36334 AREG(7) = adr;
36335 READ_LONG_F(adr, dst)
36336 res = dst + src + ((flag_X >> 8) & 1);
36337 flag_NotZ |= res;
36338 flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
36339 flag_V = ((src ^ res) & (dst ^ res)) >> 24;
36340 flag_N = res >> 24;
36341 WRITE_LONG_F(adr, res)
36342 POST_IO
36343RET(30)
36344}
36345
36346// ADDX7M7
36347OPCODE(0xDF0F)
36348{
36349 u32 adr, res;
36350 u32 src, dst;
36351
36352 adr = AREG(7) - 2;
36353 AREG(7) = adr;
36354 PRE_IO
36355 READ_BYTE_F(adr, src)
36356 adr = AREG(7) - 2;
36357 AREG(7) = adr;
36358 READ_BYTE_F(adr, dst)
36359 res = dst + src + ((flag_X >> 8) & 1);
36360 flag_N = flag_X = flag_C = res;
36361 flag_V = (src ^ res) & (dst ^ res);
36362 flag_NotZ |= res & 0xFF;
36363 WRITE_BYTE_F(adr, res)
36364 POST_IO
36365RET(18)
36366}
36367
36368// ADDX7M7
36369OPCODE(0xDF4F)
36370{
36371 u32 adr, res;
36372 u32 src, dst;
36373
36374 adr = AREG(7) - 2;
36375 AREG(7) = adr;
36376 PRE_IO
36377 READ_WORD_F(adr, src)
36378 adr = AREG(7) - 2;
36379 AREG(7) = adr;
36380 READ_WORD_F(adr, dst)
36381 res = dst + src + ((flag_X >> 8) & 1);
36382 flag_V = ((src ^ res) & (dst ^ res)) >> 8;
36383 flag_N = flag_X = flag_C = res >> 8;
36384 flag_NotZ |= res & 0xFFFF;
36385 WRITE_WORD_F(adr, res)
36386 POST_IO
36387RET(18)
36388}
36389
36390// ADDX7M7
36391OPCODE(0xDF8F)
36392{
36393 u32 adr, res;
36394 u32 src, dst;
36395
36396 adr = AREG(7) - 4;
36397 AREG(7) = adr;
36398 PRE_IO
36399 READ_LONG_F(adr, src)
36400 adr = AREG(7) - 4;
36401 AREG(7) = adr;
36402 READ_LONG_F(adr, dst)
36403 res = dst + src + ((flag_X >> 8) & 1);
36404 flag_NotZ |= res;
36405 flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
36406 flag_V = ((src ^ res) & (dst ^ res)) >> 24;
36407 flag_N = res >> 24;
36408 WRITE_LONG_F(adr, res)
36409 POST_IO
36410RET(30)
36411}
36412
36413// ADDA
36414OPCODE(0xD0C0)
36415{
36416 u32 adr, res;
36417 u32 src, dst;
36418
36419 src = (s32)DREGs16((Opcode >> 0) & 7);
36420 dst = AREGu32((Opcode >> 9) & 7);
36421 res = dst + src;
36422 AREG((Opcode >> 9) & 7) = res;
36423RET(8)
36424}
36425
36426// ADDA
36427OPCODE(0xD0C8)
36428{
36429 u32 adr, res;
36430 u32 src, dst;
36431
36432 src = (s32)AREGs16((Opcode >> 0) & 7);
36433 dst = AREGu32((Opcode >> 9) & 7);
36434 res = dst + src;
36435 AREG((Opcode >> 9) & 7) = res;
36436RET(8)
36437}
36438
36439// ADDA
36440OPCODE(0xD0D0)
36441{
36442 u32 adr, res;
36443 u32 src, dst;
36444
36445 adr = AREG((Opcode >> 0) & 7);
36446 PRE_IO
36447 READSX_WORD_F(adr, src)
36448 dst = AREGu32((Opcode >> 9) & 7);
36449 res = dst + src;
36450 AREG((Opcode >> 9) & 7) = res;
36451 POST_IO
36452RET(10)
36453}
36454
36455// ADDA
36456OPCODE(0xD0D8)
36457{
36458 u32 adr, res;
36459 u32 src, dst;
36460
36461 adr = AREG((Opcode >> 0) & 7);
36462 AREG((Opcode >> 0) & 7) += 2;
36463 PRE_IO
36464 READSX_WORD_F(adr, src)
36465 dst = AREGu32((Opcode >> 9) & 7);
36466 res = dst + src;
36467 AREG((Opcode >> 9) & 7) = res;
36468 POST_IO
36469RET(10)
36470}
36471
36472// ADDA
36473OPCODE(0xD0E0)
36474{
36475 u32 adr, res;
36476 u32 src, dst;
36477
36478 adr = AREG((Opcode >> 0) & 7) - 2;
36479 AREG((Opcode >> 0) & 7) = adr;
36480 PRE_IO
36481 READSX_WORD_F(adr, src)
36482 dst = AREGu32((Opcode >> 9) & 7);
36483 res = dst + src;
36484 AREG((Opcode >> 9) & 7) = res;
36485 POST_IO
36486RET(12)
36487}
36488
36489// ADDA
36490OPCODE(0xD0E8)
36491{
36492 u32 adr, res;
36493 u32 src, dst;
36494
36495 FETCH_SWORD(adr);
36496 adr += AREG((Opcode >> 0) & 7);
36497 PRE_IO
36498 READSX_WORD_F(adr, src)
36499 dst = AREGu32((Opcode >> 9) & 7);
36500 res = dst + src;
36501 AREG((Opcode >> 9) & 7) = res;
36502 POST_IO
36503RET(14)
36504}
36505
36506// ADDA
36507OPCODE(0xD0F0)
36508{
36509 u32 adr, res;
36510 u32 src, dst;
36511
36512 adr = AREG((Opcode >> 0) & 7);
36513 DECODE_EXT_WORD
36514 PRE_IO
36515 READSX_WORD_F(adr, src)
36516 dst = AREGu32((Opcode >> 9) & 7);
36517 res = dst + src;
36518 AREG((Opcode >> 9) & 7) = res;
36519 POST_IO
36520RET(16)
36521}
36522
36523// ADDA
36524OPCODE(0xD0F8)
36525{
36526 u32 adr, res;
36527 u32 src, dst;
36528
36529 FETCH_SWORD(adr);
36530 PRE_IO
36531 READSX_WORD_F(adr, src)
36532 dst = AREGu32((Opcode >> 9) & 7);
36533 res = dst + src;
36534 AREG((Opcode >> 9) & 7) = res;
36535 POST_IO
36536RET(14)
36537}
36538
36539// ADDA
36540OPCODE(0xD0F9)
36541{
36542 u32 adr, res;
36543 u32 src, dst;
36544
36545 FETCH_LONG(adr);
36546 PRE_IO
36547 READSX_WORD_F(adr, src)
36548 dst = AREGu32((Opcode >> 9) & 7);
36549 res = dst + src;
36550 AREG((Opcode >> 9) & 7) = res;
36551 POST_IO
36552RET(18)
36553}
36554
36555// ADDA
36556OPCODE(0xD0FA)
36557{
36558 u32 adr, res;
36559 u32 src, dst;
36560
36561 adr = GET_SWORD + ((u32)(PC) - BasePC);
36562 PC++;
36563 PRE_IO
36564 READSX_WORD_F(adr, src)
36565 dst = AREGu32((Opcode >> 9) & 7);
36566 res = dst + src;
36567 AREG((Opcode >> 9) & 7) = res;
36568 POST_IO
36569RET(14)
36570}
36571
36572// ADDA
36573OPCODE(0xD0FB)
36574{
36575 u32 adr, res;
36576 u32 src, dst;
36577
36578 adr = (u32)(PC) - BasePC;
36579 DECODE_EXT_WORD
36580 PRE_IO
36581 READSX_WORD_F(adr, src)
36582 dst = AREGu32((Opcode >> 9) & 7);
36583 res = dst + src;
36584 AREG((Opcode >> 9) & 7) = res;
36585 POST_IO
36586RET(16)
36587}
36588
36589// ADDA
36590OPCODE(0xD0FC)
36591{
36592 u32 adr, res;
36593 u32 src, dst;
36594
36595 FETCH_SWORD(src);
36596 dst = AREGu32((Opcode >> 9) & 7);
36597 res = dst + src;
36598 AREG((Opcode >> 9) & 7) = res;
36599RET(12)
36600}
36601
36602// ADDA
36603OPCODE(0xD0DF)
36604{
36605 u32 adr, res;
36606 u32 src, dst;
36607
36608 adr = AREG(7);
36609 AREG(7) += 2;
36610 PRE_IO
36611 READSX_WORD_F(adr, src)
36612 dst = AREGu32((Opcode >> 9) & 7);
36613 res = dst + src;
36614 AREG((Opcode >> 9) & 7) = res;
36615 POST_IO
36616RET(10)
36617}
36618
36619// ADDA
36620OPCODE(0xD0E7)
36621{
36622 u32 adr, res;
36623 u32 src, dst;
36624
36625 adr = AREG(7) - 2;
36626 AREG(7) = adr;
36627 PRE_IO
36628 READSX_WORD_F(adr, src)
36629 dst = AREGu32((Opcode >> 9) & 7);
36630 res = dst + src;
36631 AREG((Opcode >> 9) & 7) = res;
36632 POST_IO
36633RET(12)
36634}
36635
36636// ADDA
36637OPCODE(0xD1C0)
36638{
36639 u32 adr, res;
36640 u32 src, dst;
36641
36642 src = (s32)DREGs32((Opcode >> 0) & 7);
36643 dst = AREGu32((Opcode >> 9) & 7);
36644 res = dst + src;
36645 AREG((Opcode >> 9) & 7) = res;
36646#ifdef USE_CYCLONE_TIMING
36647RET(8)
36648#else
36649RET(6)
36650#endif
36651}
36652
36653// ADDA
36654OPCODE(0xD1C8)
36655{
36656 u32 adr, res;
36657 u32 src, dst;
36658
36659 src = (s32)AREGs32((Opcode >> 0) & 7);
36660 dst = AREGu32((Opcode >> 9) & 7);
36661 res = dst + src;
36662 AREG((Opcode >> 9) & 7) = res;
36663#ifdef USE_CYCLONE_TIMING
36664RET(8)
36665#else
36666RET(6)
36667#endif
36668}
36669
36670// ADDA
36671OPCODE(0xD1D0)
36672{
36673 u32 adr, res;
36674 u32 src, dst;
36675
36676 adr = AREG((Opcode >> 0) & 7);
36677 PRE_IO
36678 READSX_LONG_F(adr, src)
36679 dst = AREGu32((Opcode >> 9) & 7);
36680 res = dst + src;
36681 AREG((Opcode >> 9) & 7) = res;
36682 POST_IO
36683RET(14)
36684}
36685
36686// ADDA
36687OPCODE(0xD1D8)
36688{
36689 u32 adr, res;
36690 u32 src, dst;
36691
36692 adr = AREG((Opcode >> 0) & 7);
36693 AREG((Opcode >> 0) & 7) += 4;
36694 PRE_IO
36695 READSX_LONG_F(adr, src)
36696 dst = AREGu32((Opcode >> 9) & 7);
36697 res = dst + src;
36698 AREG((Opcode >> 9) & 7) = res;
36699 POST_IO
36700RET(14)
36701}
36702
36703// ADDA
36704OPCODE(0xD1E0)
36705{
36706 u32 adr, res;
36707 u32 src, dst;
36708
36709 adr = AREG((Opcode >> 0) & 7) - 4;
36710 AREG((Opcode >> 0) & 7) = adr;
36711 PRE_IO
36712 READSX_LONG_F(adr, src)
36713 dst = AREGu32((Opcode >> 9) & 7);
36714 res = dst + src;
36715 AREG((Opcode >> 9) & 7) = res;
36716 POST_IO
36717RET(16)
36718}
36719
36720// ADDA
36721OPCODE(0xD1E8)
36722{
36723 u32 adr, res;
36724 u32 src, dst;
36725
36726 FETCH_SWORD(adr);
36727 adr += AREG((Opcode >> 0) & 7);
36728 PRE_IO
36729 READSX_LONG_F(adr, src)
36730 dst = AREGu32((Opcode >> 9) & 7);
36731 res = dst + src;
36732 AREG((Opcode >> 9) & 7) = res;
36733 POST_IO
36734RET(18)
36735}
36736
36737// ADDA
36738OPCODE(0xD1F0)
36739{
36740 u32 adr, res;
36741 u32 src, dst;
36742
36743 adr = AREG((Opcode >> 0) & 7);
36744 DECODE_EXT_WORD
36745 PRE_IO
36746 READSX_LONG_F(adr, src)
36747 dst = AREGu32((Opcode >> 9) & 7);
36748 res = dst + src;
36749 AREG((Opcode >> 9) & 7) = res;
36750 POST_IO
36751RET(20)
36752}
36753
36754// ADDA
36755OPCODE(0xD1F8)
36756{
36757 u32 adr, res;
36758 u32 src, dst;
36759
36760 FETCH_SWORD(adr);
36761 PRE_IO
36762 READSX_LONG_F(adr, src)
36763 dst = AREGu32((Opcode >> 9) & 7);
36764 res = dst + src;
36765 AREG((Opcode >> 9) & 7) = res;
36766 POST_IO
36767RET(18)
36768}
36769
36770// ADDA
36771OPCODE(0xD1F9)
36772{
36773 u32 adr, res;
36774 u32 src, dst;
36775
36776 FETCH_LONG(adr);
36777 PRE_IO
36778 READSX_LONG_F(adr, src)
36779 dst = AREGu32((Opcode >> 9) & 7);
36780 res = dst + src;
36781 AREG((Opcode >> 9) & 7) = res;
36782 POST_IO
36783RET(22)
36784}
36785
36786// ADDA
36787OPCODE(0xD1FA)
36788{
36789 u32 adr, res;
36790 u32 src, dst;
36791
36792 adr = GET_SWORD + ((u32)(PC) - BasePC);
36793 PC++;
36794 PRE_IO
36795 READSX_LONG_F(adr, src)
36796 dst = AREGu32((Opcode >> 9) & 7);
36797 res = dst + src;
36798 AREG((Opcode >> 9) & 7) = res;
36799 POST_IO
36800RET(18)
36801}
36802
36803// ADDA
36804OPCODE(0xD1FB)
36805{
36806 u32 adr, res;
36807 u32 src, dst;
36808
36809 adr = (u32)(PC) - BasePC;
36810 DECODE_EXT_WORD
36811 PRE_IO
36812 READSX_LONG_F(adr, src)
36813 dst = AREGu32((Opcode >> 9) & 7);
36814 res = dst + src;
36815 AREG((Opcode >> 9) & 7) = res;
36816 POST_IO
36817RET(20)
36818}
36819
36820// ADDA
36821OPCODE(0xD1FC)
36822{
36823 u32 adr, res;
36824 u32 src, dst;
36825
36826 FETCH_LONG(src);
36827 dst = AREGu32((Opcode >> 9) & 7);
36828 res = dst + src;
36829 AREG((Opcode >> 9) & 7) = res;
36830#ifdef USE_CYCLONE_TIMING
36831RET(16)
36832#else
36833RET(14)
36834#endif
36835}
36836
36837// ADDA
36838OPCODE(0xD1DF)
36839{
36840 u32 adr, res;
36841 u32 src, dst;
36842
36843 adr = AREG(7);
36844 AREG(7) += 4;
36845 PRE_IO
36846 READSX_LONG_F(adr, src)
36847 dst = AREGu32((Opcode >> 9) & 7);
36848 res = dst + src;
36849 AREG((Opcode >> 9) & 7) = res;
36850 POST_IO
36851RET(14)
36852}
36853
36854// ADDA
36855OPCODE(0xD1E7)
36856{
36857 u32 adr, res;
36858 u32 src, dst;
36859
36860 adr = AREG(7) - 4;
36861 AREG(7) = adr;
36862 PRE_IO
36863 READSX_LONG_F(adr, src)
36864 dst = AREGu32((Opcode >> 9) & 7);
36865 res = dst + src;
36866 AREG((Opcode >> 9) & 7) = res;
36867 POST_IO
36868RET(16)
36869}
36870
36871// ASRk
36872OPCODE(0xE000)
36873{
36874 u32 adr, res;
36875 u32 src, dst;
36876
36877 u32 sft;
36878
36879 sft = (((Opcode >> 9) - 1) & 7) + 1;
36880 m68kcontext.io_cycle_counter -= sft * 2;
36881 src = (s32)DREGs8((Opcode >> 0) & 7);
36882 flag_V = 0;
36883 flag_X = flag_C = src << ((M68K_SR_C_SFT + 1) - sft);
36884 res = ((s32)src) >> sft;
36885 flag_N = res >> 0;
36886 flag_NotZ = res;
36887 DREGu8((Opcode >> 0) & 7) = res;
36888RET(6)
36889}
36890
36891// ASRk
36892OPCODE(0xE040)
36893{
36894 u32 adr, res;
36895 u32 src, dst;
36896
36897 u32 sft;
36898
36899 sft = (((Opcode >> 9) - 1) & 7) + 1;
36900 m68kcontext.io_cycle_counter -= sft * 2;
36901 src = (s32)DREGs16((Opcode >> 0) & 7);
36902 flag_V = 0;
36903 flag_X = flag_C = src << ((M68K_SR_C_SFT + 1) - sft);
36904 res = ((s32)src) >> sft;
36905 flag_N = res >> 8;
36906 flag_NotZ = res;
36907 DREGu16((Opcode >> 0) & 7) = res;
36908RET(6)
36909}
36910
36911// ASRk
36912OPCODE(0xE080)
36913{
36914 u32 adr, res;
36915 u32 src, dst;
36916
36917 u32 sft;
36918
36919 sft = (((Opcode >> 9) - 1) & 7) + 1;
36920 m68kcontext.io_cycle_counter -= sft * 2;
36921 src = (s32)DREGs32((Opcode >> 0) & 7);
36922 flag_V = 0;
36923 flag_X = flag_C = src << ((M68K_SR_C_SFT + 1) - sft);
36924 res = ((s32)src) >> sft;
36925 flag_N = res >> 24;
36926 flag_NotZ = res;
36927 DREGu32((Opcode >> 0) & 7) = res;
36928RET(8)
36929}
36930
36931// LSRk
36932OPCODE(0xE008)
36933{
36934 u32 adr, res;
36935 u32 src, dst;
36936
36937 u32 sft;
36938
36939 sft = (((Opcode >> 9) - 1) & 7) + 1;
36940 m68kcontext.io_cycle_counter -= sft * 2;
36941 src = DREGu8((Opcode >> 0) & 7);
36942 flag_N = flag_V = 0;
36943 flag_X = flag_C = src << ((M68K_SR_C_SFT + 1) - sft);
36944 res = src >> sft;
36945 flag_NotZ = res;
36946 DREGu8((Opcode >> 0) & 7) = res;
36947RET(6)
36948}
36949
36950// LSRk
36951OPCODE(0xE048)
36952{
36953 u32 adr, res;
36954 u32 src, dst;
36955
36956 u32 sft;
36957
36958 sft = (((Opcode >> 9) - 1) & 7) + 1;
36959 m68kcontext.io_cycle_counter -= sft * 2;
36960 src = DREGu16((Opcode >> 0) & 7);
36961 flag_N = flag_V = 0;
36962 flag_X = flag_C = src << ((M68K_SR_C_SFT + 1) - sft);
36963 res = src >> sft;
36964 flag_NotZ = res;
36965 DREGu16((Opcode >> 0) & 7) = res;
36966RET(6)
36967}
36968
36969// LSRk
36970OPCODE(0xE088)
36971{
36972 u32 adr, res;
36973 u32 src, dst;
36974
36975 u32 sft;
36976
36977 sft = (((Opcode >> 9) - 1) & 7) + 1;
36978 m68kcontext.io_cycle_counter -= sft * 2;
36979 src = DREGu32((Opcode >> 0) & 7);
36980 flag_N = flag_V = 0;
36981 flag_X = flag_C = src << ((M68K_SR_C_SFT + 1) - sft);
36982 res = src >> sft;
36983 flag_NotZ = res;
36984 DREGu32((Opcode >> 0) & 7) = res;
36985RET(8)
36986}
36987
36988// ROXRk
36989OPCODE(0xE010)
36990{
36991 u32 adr, res;
36992 u32 src, dst;
36993
36994 u32 sft;
36995
36996 sft = (((Opcode >> 9) - 1) & 7) + 1;
36997 m68kcontext.io_cycle_counter -= sft * 2;
36998 src = DREGu8((Opcode >> 0) & 7);
36999 src |= (flag_X & M68K_SR_X) << 0;
37000 res = (src >> sft) | (src << (9 - sft));
37001 flag_X = flag_C = res >> 0;
37002 flag_V = 0;
37003 flag_N = res >> 0;
37004 flag_NotZ = res & 0x000000FF;
37005 DREGu8((Opcode >> 0) & 7) = res;
37006RET(6)
37007}
37008
37009// ROXRk
37010OPCODE(0xE050)
37011{
37012 u32 adr, res;
37013 u32 src, dst;
37014
37015 u32 sft;
37016
37017 sft = (((Opcode >> 9) - 1) & 7) + 1;
37018 m68kcontext.io_cycle_counter -= sft * 2;
37019 src = DREGu16((Opcode >> 0) & 7);
37020 src |= (flag_X & M68K_SR_X) << 8;
37021 res = (src >> sft) | (src << (17 - sft));
37022 flag_X = flag_C = res >> 8;
37023 flag_V = 0;
37024 flag_N = res >> 8;
37025 flag_NotZ = res & 0x0000FFFF;
37026 DREGu16((Opcode >> 0) & 7) = res;
37027RET(6)
37028}
37029
37030// ROXRk
37031OPCODE(0xE090)
37032{
37033 u32 adr, res;
37034 u32 src, dst;
37035
37036 u32 sft;
37037
37038 sft = (((Opcode >> 9) - 1) & 7) + 1;
37039 m68kcontext.io_cycle_counter -= sft * 2;
37040 src = DREGu32((Opcode >> 0) & 7);
37041 flag_C = src << ((M68K_SR_C_SFT + 1) - sft);
37042 if (sft == 1) res = (src >> 1) | ((flag_X & M68K_SR_X) << (32 - (M68K_SR_X_SFT + 1)));
37043 else res = (src >> sft) | (src << (33 - sft)) | ((flag_X & M68K_SR_X) << (32 - (M68K_SR_X_SFT + sft)));
37044 flag_X = flag_C;
37045 flag_V = 0;
37046 flag_N = res >> 24;
37047 flag_NotZ = res;
37048 DREGu32((Opcode >> 0) & 7) = res;
37049RET(8)
37050}
37051
37052// RORk
37053OPCODE(0xE018)
37054{
37055 u32 adr, res;
37056 u32 src, dst;
37057
37058 u32 sft;
37059
37060 sft = (((Opcode >> 9) - 1) & 7) + 1;
37061 m68kcontext.io_cycle_counter -= sft * 2;
37062 src = DREGu8((Opcode >> 0) & 7);
37063 flag_V = 0;
37064 flag_C = src << ((M68K_SR_C_SFT + 1) - sft);
37065 res = (src >> sft) | (src << (8 - sft));
37066 flag_N = res >> 0;
37067 flag_NotZ = res & 0x000000FF;
37068 DREGu8((Opcode >> 0) & 7) = res;
37069RET(6)
37070}
37071
37072// RORk
37073OPCODE(0xE058)
37074{
37075 u32 adr, res;
37076 u32 src, dst;
37077
37078 u32 sft;
37079
37080 sft = (((Opcode >> 9) - 1) & 7) + 1;
37081 m68kcontext.io_cycle_counter -= sft * 2;
37082 src = DREGu16((Opcode >> 0) & 7);
37083 flag_V = 0;
37084 flag_C = src << ((M68K_SR_C_SFT + 1) - sft);
37085 res = (src >> sft) | (src << (16 - sft));
37086 flag_N = res >> 8;
37087 flag_NotZ = res & 0x0000FFFF;
37088 DREGu16((Opcode >> 0) & 7) = res;
37089RET(6)
37090}
37091
37092// RORk
37093OPCODE(0xE098)
37094{
37095 u32 adr, res;
37096 u32 src, dst;
37097
37098 u32 sft;
37099
37100 sft = (((Opcode >> 9) - 1) & 7) + 1;
37101 m68kcontext.io_cycle_counter -= sft * 2;
37102 src = DREGu32((Opcode >> 0) & 7);
37103 flag_V = 0;
37104 flag_C = src << ((M68K_SR_C_SFT + 1) - sft);
37105 res = (src >> sft) | (src << (32 - sft));
37106 flag_N = res >> 24;
37107 flag_NotZ = res;
37108 DREGu32((Opcode >> 0) & 7) = res;
37109RET(8)
37110}
37111
37112// ASLk
37113OPCODE(0xE100)
37114{
37115 u32 adr, res;
37116 u32 src, dst;
37117
37118 u32 sft;
37119
37120 sft = (((Opcode >> 9) - 1) & 7) + 1;
37121 m68kcontext.io_cycle_counter -= sft * 2;
37122 src = DREGu8((Opcode >> 0) & 7);
37123 if (sft < 8)
37124 {
37125 flag_X = flag_C = src << (0 + sft);
37126 res = src << sft;
37127 flag_N = res >> 0;
37128 flag_NotZ = res & 0x000000FF;
37129 DREGu8((Opcode >> 0) & 7) = res;
37130 flag_V = 0;
37131 if ((sft > 7) && (src)) flag_V = M68K_SR_V;
37132 else
37133 {
37134 u32 msk = (((s32)0x80000000) >> (sft + 24)) & 0x000000FF;
37135 src &= msk;
37136 if ((src) && (src != msk)) flag_V = M68K_SR_V;
37137 }
37138 RET(6)
37139 }
37140
37141 if (src) flag_V = M68K_SR_V;
37142 else flag_V = 0;
37143 flag_X = flag_C = src << M68K_SR_C_SFT;
37144 res = 0;
37145 DREGu8((Opcode >> 0) & 7) = res;
37146 flag_N = 0;
37147 flag_NotZ = 0;
37148RET(6)
37149}
37150
37151// ASLk
37152OPCODE(0xE140)
37153{
37154 u32 adr, res;
37155 u32 src, dst;
37156
37157 u32 sft;
37158
37159 sft = (((Opcode >> 9) - 1) & 7) + 1;
37160 m68kcontext.io_cycle_counter -= sft * 2;
37161 src = DREGu16((Opcode >> 0) & 7);
37162 flag_X = flag_C = src >> (8 - sft);
37163 res = src << sft;
37164 flag_N = res >> 8;
37165 flag_NotZ = res & 0x0000FFFF;
37166 DREGu16((Opcode >> 0) & 7) = res;
37167 flag_V = 0;
37168 {
37169 u32 msk = (((s32)0x80000000) >> (sft + 16)) & 0x0000FFFF;
37170 src &= msk;
37171 if ((src) && (src != msk)) flag_V = M68K_SR_V;
37172 }
37173RET(6)
37174}
37175
37176// ASLk
37177OPCODE(0xE180)
37178{
37179 u32 adr, res;
37180 u32 src, dst;
37181
37182 u32 sft;
37183
37184 sft = (((Opcode >> 9) - 1) & 7) + 1;
37185 m68kcontext.io_cycle_counter -= sft * 2;
37186 src = DREGu32((Opcode >> 0) & 7);
37187 flag_X = flag_C = src >> (24 - sft);
37188 res = src << sft;
37189 flag_N = res >> 24;
37190 flag_NotZ = res & 0xFFFFFFFF;
37191 DREGu32((Opcode >> 0) & 7) = res;
37192 flag_V = 0;
37193 {
37194 u32 msk = (((s32)0x80000000) >> (sft + 0)) & 0xFFFFFFFF;
37195 src &= msk;
37196 if ((src) && (src != msk)) flag_V = M68K_SR_V;
37197 }
37198RET(8)
37199}
37200
37201// LSLk
37202OPCODE(0xE108)
37203{
37204 u32 adr, res;
37205 u32 src, dst;
37206
37207 u32 sft;
37208
37209 sft = (((Opcode >> 9) - 1) & 7) + 1;
37210 m68kcontext.io_cycle_counter -= sft * 2;
37211 src = DREGu8((Opcode >> 0) & 7);
37212 flag_V = 0;
37213 flag_X = flag_C = src << (0 + sft);
37214 res = src << sft;
37215 flag_N = res >> 0;
37216 flag_NotZ = res & 0x000000FF;
37217 DREGu8((Opcode >> 0) & 7) = res;
37218RET(6)
37219}
37220
37221// LSLk
37222OPCODE(0xE148)
37223{
37224 u32 adr, res;
37225 u32 src, dst;
37226
37227 u32 sft;
37228
37229 sft = (((Opcode >> 9) - 1) & 7) + 1;
37230 m68kcontext.io_cycle_counter -= sft * 2;
37231 src = DREGu16((Opcode >> 0) & 7);
37232 flag_V = 0;
37233 flag_X = flag_C = src >> (8 - sft);
37234 res = src << sft;
37235 flag_N = res >> 8;
37236 flag_NotZ = res & 0x0000FFFF;
37237 DREGu16((Opcode >> 0) & 7) = res;
37238RET(6)
37239}
37240
37241// LSLk
37242OPCODE(0xE188)
37243{
37244 u32 adr, res;
37245 u32 src, dst;
37246
37247 u32 sft;
37248
37249 sft = (((Opcode >> 9) - 1) & 7) + 1;
37250 m68kcontext.io_cycle_counter -= sft * 2;
37251 src = DREGu32((Opcode >> 0) & 7);
37252 flag_V = 0;
37253 flag_X = flag_C = src >> (24 - sft);
37254 res = src << sft;
37255 flag_N = res >> 24;
37256 flag_NotZ = res & 0xFFFFFFFF;
37257 DREGu32((Opcode >> 0) & 7) = res;
37258RET(8)
37259}
37260
37261// ROXLk
37262OPCODE(0xE110)
37263{
37264 u32 adr, res;
37265 u32 src, dst;
37266
37267 u32 sft;
37268
37269 sft = (((Opcode >> 9) - 1) & 7) + 1;
37270 m68kcontext.io_cycle_counter -= sft * 2;
37271 src = DREGu8((Opcode >> 0) & 7);
37272 src |= (flag_X & M68K_SR_X) << 0;
37273 res = (src << sft) | (src >> (9 - sft));
37274 flag_X = flag_C = res >> 0;
37275 flag_V = 0;
37276 flag_N = res >> 0;
37277 flag_NotZ = res & 0x000000FF;
37278 DREGu8((Opcode >> 0) & 7) = res;
37279RET(6)
37280}
37281
37282// ROXLk
37283OPCODE(0xE150)
37284{
37285 u32 adr, res;
37286 u32 src, dst;
37287
37288 u32 sft;
37289
37290 sft = (((Opcode >> 9) - 1) & 7) + 1;
37291 m68kcontext.io_cycle_counter -= sft * 2;
37292 src = DREGu16((Opcode >> 0) & 7);
37293 src |= (flag_X & M68K_SR_X) << 8;
37294 res = (src << sft) | (src >> (17 - sft));
37295 flag_X = flag_C = res >> 8;
37296 flag_V = 0;
37297 flag_N = res >> 8;
37298 flag_NotZ = res & 0x0000FFFF;
37299 DREGu16((Opcode >> 0) & 7) = res;
37300RET(6)
37301}
37302
37303// ROXLk
37304OPCODE(0xE190)
37305{
37306 u32 adr, res;
37307 u32 src, dst;
37308
37309 u32 sft;
37310
37311 sft = (((Opcode >> 9) - 1) & 7) + 1;
37312 m68kcontext.io_cycle_counter -= sft * 2;
37313 src = DREGu32((Opcode >> 0) & 7);
37314 flag_C = src >> ((32 - M68K_SR_C_SFT) - sft);
37315 if (sft == 1) res = (src << 1) | ((flag_X & M68K_SR_X) >> ((M68K_SR_X_SFT + 1) - 1));
37316 else res = (src << sft) | (src >> (33 - sft)) | ((flag_X & M68K_SR_X) >> ((M68K_SR_X_SFT + 1) - sft));
37317 flag_X = flag_C;
37318 flag_V = 0;
37319 flag_N = res >> 24;
37320 flag_NotZ = res;
37321 DREGu32((Opcode >> 0) & 7) = res;
37322RET(8)
37323}
37324
37325// ROLk
37326OPCODE(0xE118)
37327{
37328 u32 adr, res;
37329 u32 src, dst;
37330
37331 u32 sft;
37332
37333 sft = (((Opcode >> 9) - 1) & 7) + 1;
37334 m68kcontext.io_cycle_counter -= sft * 2;
37335 src = DREGu8((Opcode >> 0) & 7);
37336 flag_V = 0;
37337 flag_C = src << (0 + sft);
37338 res = (src << sft) | (src >> (8 - sft));
37339 flag_N = res >> 0;
37340 flag_NotZ = res & 0x000000FF;
37341 DREGu8((Opcode >> 0) & 7) = res;
37342RET(6)
37343}
37344
37345// ROLk
37346OPCODE(0xE158)
37347{
37348 u32 adr, res;
37349 u32 src, dst;
37350
37351 u32 sft;
37352
37353 sft = (((Opcode >> 9) - 1) & 7) + 1;
37354 m68kcontext.io_cycle_counter -= sft * 2;
37355 src = DREGu16((Opcode >> 0) & 7);
37356 flag_V = 0;
37357 flag_C = src >> (8 - sft);
37358 res = (src << sft) | (src >> (16 - sft));
37359 flag_N = res >> 8;
37360 flag_NotZ = res & 0x0000FFFF;
37361 DREGu16((Opcode >> 0) & 7) = res;
37362RET(6)
37363}
37364
37365// ROLk
37366OPCODE(0xE198)
37367{
37368 u32 adr, res;
37369 u32 src, dst;
37370
37371 u32 sft;
37372
37373 sft = (((Opcode >> 9) - 1) & 7) + 1;
37374 m68kcontext.io_cycle_counter -= sft * 2;
37375 src = DREGu32((Opcode >> 0) & 7);
37376 flag_V = 0;
37377 flag_C = src >> (24 - sft);
37378 res = (src << sft) | (src >> (32 - sft));
37379 flag_N = res >> 24;
37380 flag_NotZ = res;
37381 DREGu32((Opcode >> 0) & 7) = res;
37382RET(8)
37383}
37384
37385// ASRD
37386OPCODE(0xE020)
37387{
37388 u32 adr, res;
37389 u32 src, dst;
37390
37391 u32 sft;
37392
37393 sft = DREG((Opcode >> 9) & 7) & 0x3F;
37394 src = (s32)DREGs8((Opcode >> 0) & 7);
37395 if (sft)
37396 {
37397 m68kcontext.io_cycle_counter -= sft * 2;
37398 if (sft < 8)
37399 {
37400 flag_V = 0;
37401 flag_X = flag_C = src << ((M68K_SR_C_SFT + 1) - sft);
37402 res = ((s32)src) >> sft;
37403 flag_N = res >> 0;
37404 flag_NotZ = res;
37405 DREGu8((Opcode >> 0) & 7) = res;
37406 RET(6)
37407 }
37408
37409 if (src & (1 << 7))
37410 {
37411 flag_N = M68K_SR_N;
37412 flag_NotZ = 1;
37413 flag_V = 0;
37414 flag_C = M68K_SR_C;
37415 flag_X = M68K_SR_X;
37416 res = 0x000000FF;
37417 DREGu8((Opcode >> 0) & 7) = res;
37418 RET(6)
37419 }
37420
37421 flag_N = 0;
37422 flag_NotZ = 0;
37423 flag_V = 0;
37424 flag_C = 0;
37425 flag_X = 0;
37426 res = 0;
37427 DREGu8((Opcode >> 0) & 7) = res;
37428 RET(6)
37429 }
37430
37431 flag_V = 0;
37432 flag_C = 0;
37433 flag_N = src >> 0;
37434 flag_NotZ = src;
37435RET(6)
37436}
37437
37438// ASRD
37439OPCODE(0xE060)
37440{
37441 u32 adr, res;
37442 u32 src, dst;
37443
37444 u32 sft;
37445
37446 sft = DREG((Opcode >> 9) & 7) & 0x3F;
37447 src = (s32)DREGs16((Opcode >> 0) & 7);
37448 if (sft)
37449 {
37450 m68kcontext.io_cycle_counter -= sft * 2;
37451 if (sft < 16)
37452 {
37453 flag_V = 0;
37454 flag_X = flag_C = (src >> (sft - 1)) << M68K_SR_C_SFT;
37455 res = ((s32)src) >> sft;
37456 flag_N = res >> 8;
37457 flag_NotZ = res;
37458 DREGu16((Opcode >> 0) & 7) = res;
37459 RET(6)
37460 }
37461
37462 if (src & (1 << 15))
37463 {
37464 flag_N = M68K_SR_N;
37465 flag_NotZ = 1;
37466 flag_V = 0;
37467 flag_C = M68K_SR_C;
37468 flag_X = M68K_SR_X;
37469 res = 0x0000FFFF;
37470 DREGu16((Opcode >> 0) & 7) = res;
37471 RET(6)
37472 }
37473
37474 flag_N = 0;
37475 flag_NotZ = 0;
37476 flag_V = 0;
37477 flag_C = 0;
37478 flag_X = 0;
37479 res = 0;
37480 DREGu16((Opcode >> 0) & 7) = res;
37481 RET(6)
37482 }
37483
37484 flag_V = 0;
37485 flag_C = 0;
37486 flag_N = src >> 8;
37487 flag_NotZ = src;
37488RET(6)
37489}
37490
37491// ASRD
37492OPCODE(0xE0A0)
37493{
37494#ifdef USE_CYCLONE_TIMING
37495#define CYC 8
37496#else
37497#define CYC 6
37498#endif
37499 u32 adr, res;
37500 u32 src, dst;
37501
37502 u32 sft;
37503
37504 sft = DREG((Opcode >> 9) & 7) & 0x3F;
37505 src = (s32)DREGs32((Opcode >> 0) & 7);
37506 if (sft)
37507 {
37508 m68kcontext.io_cycle_counter -= sft * 2;
37509 if (sft < 32)
37510 {
37511 flag_V = 0;
37512 flag_X = flag_C = (src >> (sft - 1)) << M68K_SR_C_SFT;
37513 res = ((s32)src) >> sft;
37514 flag_N = res >> 24;
37515 flag_NotZ = res;
37516 DREGu32((Opcode >> 0) & 7) = res;
37517 RET(CYC)
37518 }
37519
37520 if (src & (1 << 31))
37521 {
37522 flag_N = M68K_SR_N;
37523 flag_NotZ = 1;
37524 flag_V = 0;
37525 flag_C = M68K_SR_C;
37526 flag_X = M68K_SR_X;
37527 res = 0xFFFFFFFF;
37528 DREGu32((Opcode >> 0) & 7) = res;
37529 RET(CYC)
37530 }
37531
37532 flag_N = 0;
37533 flag_NotZ = 0;
37534 flag_V = 0;
37535 flag_C = 0;
37536 flag_X = 0;
37537 res = 0;
37538 DREGu32((Opcode >> 0) & 7) = res;
37539 RET(CYC)
37540 }
37541
37542 flag_V = 0;
37543 flag_C = 0;
37544 flag_N = src >> 24;
37545 flag_NotZ = src;
37546RET(CYC)
37547#undef CYC
37548}
37549
37550// LSRD
37551OPCODE(0xE028)
37552{
37553 u32 adr, res;
37554 u32 src, dst;
37555
37556 u32 sft;
37557
37558 sft = DREG((Opcode >> 9) & 7) & 0x3F;
37559 src = DREGu8((Opcode >> 0) & 7);
37560 if (sft)
37561 {
37562 m68kcontext.io_cycle_counter -= sft * 2;
37563 if (sft <= 8)
37564 {
37565 flag_N = flag_V = 0;
37566 flag_X = flag_C = src << ((M68K_SR_C_SFT + 1) - sft);
37567 res = src >> sft;
37568 flag_NotZ = res;
37569 DREGu8((Opcode >> 0) & 7) = res;
37570 RET(6)
37571 }
37572
37573 flag_X = flag_C = 0;
37574 flag_N = 0;
37575 flag_NotZ = 0;
37576 flag_V = 0;
37577 res = 0;
37578 DREGu8((Opcode >> 0) & 7) = res;
37579 RET(6)
37580 }
37581
37582 flag_V = 0;
37583 flag_C = 0;
37584 flag_N = src >> 0;
37585 flag_NotZ = src;
37586RET(6)
37587}
37588
37589// LSRD
37590OPCODE(0xE068)
37591{
37592 u32 adr, res;
37593 u32 src, dst;
37594
37595 u32 sft;
37596
37597 sft = DREG((Opcode >> 9) & 7) & 0x3F;
37598 src = DREGu16((Opcode >> 0) & 7);
37599 if (sft)
37600 {
37601 m68kcontext.io_cycle_counter -= sft * 2;
37602 if (sft <= 16)
37603 {
37604 flag_N = flag_V = 0;
37605 flag_X = flag_C = (src >> (sft - 1)) << M68K_SR_C_SFT;
37606 res = src >> sft;
37607 flag_NotZ = res;
37608 DREGu16((Opcode >> 0) & 7) = res;
37609 RET(6)
37610 }
37611
37612 flag_X = flag_C = 0;
37613 flag_N = 0;
37614 flag_NotZ = 0;
37615 flag_V = 0;
37616 res = 0;
37617 DREGu16((Opcode >> 0) & 7) = res;
37618 RET(6)
37619 }
37620
37621 flag_V = 0;
37622 flag_C = 0;
37623 flag_N = src >> 8;
37624 flag_NotZ = src;
37625RET(6)
37626}
37627
37628// LSRD
37629OPCODE(0xE0A8)
37630{
37631#ifdef USE_CYCLONE_TIMING
37632#define CYC 8
37633#else
37634#define CYC 6
37635#endif
37636 u32 adr, res;
37637 u32 src, dst;
37638
37639 u32 sft;
37640
37641 sft = DREG((Opcode >> 9) & 7) & 0x3F;
37642 src = DREGu32((Opcode >> 0) & 7);
37643 if (sft)
37644 {
37645 m68kcontext.io_cycle_counter -= sft * 2;
37646 if (sft < 32)
37647 {
37648 flag_N = flag_V = 0;
37649 flag_X = flag_C = (src >> (sft - 1)) << M68K_SR_C_SFT;
37650 res = src >> sft;
37651 flag_NotZ = res;
37652 DREGu32((Opcode >> 0) & 7) = res;
37653 RET(CYC)
37654 }
37655
37656 if (sft == 32) flag_C = src >> (31 - M68K_SR_C_SFT);
37657 else flag_C = 0;
37658 flag_X = flag_C;
37659 flag_N = 0;
37660 flag_NotZ = 0;
37661 flag_V = 0;
37662 res = 0;
37663 DREGu32((Opcode >> 0) & 7) = res;
37664 RET(CYC)
37665 }
37666
37667 flag_V = 0;
37668 flag_C = 0;
37669 flag_N = src >> 24;
37670 flag_NotZ = src;
37671RET(CYC)
37672#undef CYC
37673}
37674
37675// ROXRD
37676OPCODE(0xE030)
37677{
37678 u32 adr, res;
37679 u32 src, dst;
37680
37681 u32 sft;
37682
37683 sft = DREG((Opcode >> 9) & 7) & 0x3F;
37684 src = DREGu8((Opcode >> 0) & 7);
37685 if (sft)
37686 {
37687 m68kcontext.io_cycle_counter -= sft * 2;
37688 sft %= 9;
37689
37690 src |= (flag_X & M68K_SR_X) << 0;
37691 res = (src >> sft) | (src << (9 - sft));
37692 flag_X = flag_C = res >> 0;
37693 flag_V = 0;
37694 flag_N = res >> 0;
37695 flag_NotZ = res & 0x000000FF;
37696 DREGu8((Opcode >> 0) & 7) = res;
37697 RET(6)
37698 }
37699
37700 flag_V = 0;
37701 flag_C = flag_X;
37702 flag_N = src >> 0;
37703 flag_NotZ = src;
37704RET(6)
37705}
37706
37707// ROXRD
37708OPCODE(0xE070)
37709{
37710 u32 adr, res;
37711 u32 src, dst;
37712
37713 u32 sft;
37714
37715 sft = DREG((Opcode >> 9) & 7) & 0x3F;
37716 src = DREGu16((Opcode >> 0) & 7);
37717 if (sft)
37718 {
37719 m68kcontext.io_cycle_counter -= sft * 2;
37720 sft %= 17;
37721
37722 src |= (flag_X & M68K_SR_X) << 8;
37723 res = (src >> sft) | (src << (17 - sft));
37724 flag_X = flag_C = res >> 8;
37725 flag_V = 0;
37726 flag_N = res >> 8;
37727 flag_NotZ = res & 0x0000FFFF;
37728 DREGu16((Opcode >> 0) & 7) = res;
37729 RET(6)
37730 }
37731
37732 flag_V = 0;
37733 flag_C = flag_X;
37734 flag_N = src >> 8;
37735 flag_NotZ = src;
37736RET(6)
37737}
37738
37739// ROXRD
37740OPCODE(0xE0B0)
37741{
37742#ifdef USE_CYCLONE_TIMING
37743#define CYC 8
37744#else
37745#define CYC 6
37746#endif
37747 u32 adr, res;
37748 u32 src, dst;
37749
37750 u32 sft;
37751
37752 sft = DREG((Opcode >> 9) & 7) & 0x3F;
37753 src = DREGu32((Opcode >> 0) & 7);
37754 if (sft)
37755 {
37756 m68kcontext.io_cycle_counter -= sft * 2;
37757 sft %= 33;
37758
37759 if (sft != 0)
37760 {
37761 if (sft == 1) res = (src >> 1) | ((flag_X & M68K_SR_X) << (32 - (M68K_SR_X_SFT + 1)));
37762 else res = (src >> sft) | (src << (33 - sft)) | (((flag_X & M68K_SR_X) << (32 - (M68K_SR_X_SFT + 1))) >> (sft - 1));
37763 flag_X = (src >> (32 - sft)) << M68K_SR_X_SFT;
37764 }
37765 else res = src;
37766 flag_C = flag_X;
37767 flag_V = 0;
37768 flag_N = res >> 24;
37769 flag_NotZ = res;
37770 DREGu32((Opcode >> 0) & 7) = res;
37771 RET(CYC)
37772 }
37773
37774 flag_V = 0;
37775 flag_C = flag_X;
37776 flag_N = src >> 24;
37777 flag_NotZ = src;
37778RET(CYC)
37779#undef CYC
37780}
37781
37782// RORD
37783OPCODE(0xE038)
37784{
37785 u32 adr, res;
37786 u32 src, dst;
37787
37788 u32 sft;
37789
37790 sft = DREG((Opcode >> 9) & 7) & 0x3F;
37791 src = DREGu8((Opcode >> 0) & 7);
37792 if (sft)
37793 {
37794 m68kcontext.io_cycle_counter -= sft * 2;
37795 sft &= 0x07;
37796
37797 flag_C = src << (M68K_SR_C_SFT - ((sft - 1) & 7));
37798 res = (src >> sft) | (src << (8 - sft));
37799 flag_V = 0;
37800 flag_N = res >> 0;
37801 flag_NotZ = res & 0x000000FF;
37802 DREGu8((Opcode >> 0) & 7) = res;
37803 RET(6)
37804 }
37805
37806 flag_V = 0;
37807 flag_C = 0;
37808 flag_N = src >> 0;
37809 flag_NotZ = src;
37810RET(6)
37811}
37812
37813// RORD
37814OPCODE(0xE078)
37815{
37816 u32 adr, res;
37817 u32 src, dst;
37818
37819 u32 sft;
37820
37821 sft = DREG((Opcode >> 9) & 7) & 0x3F;
37822 src = DREGu16((Opcode >> 0) & 7);
37823 if (sft)
37824 {
37825 m68kcontext.io_cycle_counter -= sft * 2;
37826 sft &= 0x0F;
37827
37828 flag_C = (src >> ((sft - 1) & 15)) << M68K_SR_C_SFT;
37829 res = (src >> sft) | (src << (16 - sft));
37830 flag_V = 0;
37831 flag_N = res >> 8;
37832 flag_NotZ = res & 0x0000FFFF;
37833 DREGu16((Opcode >> 0) & 7) = res;
37834 RET(6)
37835 }
37836
37837 flag_V = 0;
37838 flag_C = 0;
37839 flag_N = src >> 8;
37840 flag_NotZ = src;
37841RET(6)
37842}
37843
37844// RORD
37845OPCODE(0xE0B8)
37846{
37847#ifdef USE_CYCLONE_TIMING
37848#define CYC 8
37849#else
37850#define CYC 6
37851#endif
37852 u32 adr, res;
37853 u32 src, dst;
37854
37855 u32 sft;
37856
37857 sft = DREG((Opcode >> 9) & 7) & 0x3F;
37858 src = DREGu32((Opcode >> 0) & 7);
37859 if (sft)
37860 {
37861 m68kcontext.io_cycle_counter -= sft * 2;
37862 sft &= 0x1F;
37863
37864 flag_C = (src >> ((sft - 1) & 31)) << M68K_SR_C_SFT;
37865 res = (src >> sft) | (src << (32 - sft));
37866 flag_V = 0;
37867 flag_N = res >> 24;
37868 flag_NotZ = res;
37869 DREGu32((Opcode >> 0) & 7) = res;
37870 RET(CYC)
37871 }
37872
37873 flag_V = 0;
37874 flag_C = 0;
37875 flag_N = src >> 24;
37876 flag_NotZ = src;
37877RET(CYC)
37878#undef CYC
37879}
37880
37881// ASLD
37882OPCODE(0xE120)
37883{
37884 u32 adr, res;
37885 u32 src, dst;
37886
37887 u32 sft;
37888
37889 sft = DREG((Opcode >> 9) & 7) & 0x3F;
37890 src = DREGu8((Opcode >> 0) & 7);
37891 if (sft)
37892 {
37893 m68kcontext.io_cycle_counter -= sft * 2;
37894 if (sft < 8)
37895 {
37896 flag_X = flag_C = (src << sft) >> 0;
37897 res = (src << sft) & 0x000000FF;
37898 flag_N = res >> 0;
37899 flag_NotZ = res;
37900 DREGu8((Opcode >> 0) & 7) = res;
37901 flag_V = 0;
37902 {
37903 u32 msk = (((s32)0x80000000) >> (sft + 24)) & 0x000000FF;
37904 src &= msk;
37905 if ((src) && (src != msk)) flag_V = M68K_SR_V;
37906 }
37907 RET(6)
37908 }
37909
37910 if (sft == 256) flag_C = src << M68K_SR_C_SFT;
37911 else flag_C = 0;
37912 flag_X = flag_C;
37913 if (src) flag_V = M68K_SR_V;
37914 else flag_V = 0;
37915 res = 0;
37916 DREGu8((Opcode >> 0) & 7) = res;
37917 flag_N = 0;
37918 flag_NotZ = 0;
37919 RET(6)
37920 }
37921
37922 flag_V = 0;
37923 flag_C = 0;
37924 flag_N = src >> 0;
37925 flag_NotZ = src;
37926RET(6)
37927}
37928
37929// ASLD
37930OPCODE(0xE160)
37931{
37932 u32 adr, res;
37933 u32 src, dst;
37934
37935 u32 sft;
37936
37937 sft = DREG((Opcode >> 9) & 7) & 0x3F;
37938 src = DREGu16((Opcode >> 0) & 7);
37939 if (sft)
37940 {
37941 m68kcontext.io_cycle_counter -= sft * 2;
37942 if (sft < 16)
37943 {
37944 flag_X = flag_C = (src << sft) >> 8;
37945 res = (src << sft) & 0x0000FFFF;
37946 flag_N = res >> 8;
37947 flag_NotZ = res;
37948 DREGu16((Opcode >> 0) & 7) = res;
37949 flag_V = 0;
37950 {
37951 u32 msk = (((s32)0x80000000) >> (sft + 16)) & 0x0000FFFF;
37952 src &= msk;
37953 if ((src) && (src != msk)) flag_V = M68K_SR_V;
37954 }
37955 RET(6)
37956 }
37957
37958 if (sft == 65536) flag_C = src << M68K_SR_C_SFT;
37959 else flag_C = 0;
37960 flag_X = flag_C;
37961 if (src) flag_V = M68K_SR_V;
37962 else flag_V = 0;
37963 res = 0;
37964 DREGu16((Opcode >> 0) & 7) = res;
37965 flag_N = 0;
37966 flag_NotZ = 0;
37967 RET(6)
37968 }
37969
37970 flag_V = 0;
37971 flag_C = 0;
37972 flag_N = src >> 8;
37973 flag_NotZ = src;
37974RET(6)
37975}
37976
37977// ASLD
37978OPCODE(0xE1A0)
37979{
37980#ifdef USE_CYCLONE_TIMING
37981#define CYC 8
37982#else
37983#define CYC 6
37984#endif
37985 u32 adr, res;
37986 u32 src, dst;
37987
37988 u32 sft;
37989
37990 sft = DREG((Opcode >> 9) & 7) & 0x3F;
37991 src = DREGu32((Opcode >> 0) & 7);
37992 if (sft)
37993 {
37994 m68kcontext.io_cycle_counter -= sft * 2;
37995 if (sft < 32)
37996 {
37997 flag_X = flag_C = (src >> (32 - sft)) << M68K_SR_C_SFT;
37998 res = src << sft;
37999 flag_N = res >> 24;
38000 flag_NotZ = res;
38001 DREGu32((Opcode >> 0) & 7) = res;
38002 flag_V = 0;
38003 {
38004 u32 msk = (((s32)0x80000000) >> (sft + 0)) & 0xFFFFFFFF;
38005 src &= msk;
38006 if ((src) && (src != msk)) flag_V = M68K_SR_V;
38007 }
38008 RET(CYC)
38009 }
38010
38011 if (sft == 0) flag_C = src << M68K_SR_C_SFT;
38012 else flag_C = 0;
38013 flag_X = flag_C;
38014 if (src) flag_V = M68K_SR_V;
38015 else flag_V = 0;
38016 res = 0;
38017 DREGu32((Opcode >> 0) & 7) = res;
38018 flag_N = 0;
38019 flag_NotZ = 0;
38020 RET(CYC)
38021 }
38022
38023 flag_V = 0;
38024 flag_C = 0;
38025 flag_N = src >> 24;
38026 flag_NotZ = src;
38027RET(CYC)
38028#undef CYC
38029}
38030
38031// LSLD
38032OPCODE(0xE128)
38033{
38034 u32 adr, res;
38035 u32 src, dst;
38036
38037 u32 sft;
38038
38039 sft = DREG((Opcode >> 9) & 7) & 0x3F;
38040 src = DREGu8((Opcode >> 0) & 7);
38041 if (sft)
38042 {
38043 m68kcontext.io_cycle_counter -= sft * 2;
38044 if (sft <= 8)
38045 {
38046 flag_X = flag_C = (src << sft) >> 0;
38047 res = (src << sft) & 0x000000FF;
38048 flag_V = 0;
38049 flag_N = res >> 0;
38050 flag_NotZ = res;
38051 DREGu8((Opcode >> 0) & 7) = res;
38052 RET(6)
38053 }
38054
38055 flag_X = flag_C = 0;
38056 flag_N = 0;
38057 flag_NotZ = 0;
38058 flag_V = 0;
38059 res = 0;
38060 DREGu8((Opcode >> 0) & 7) = res;
38061 RET(6)
38062 }
38063
38064 flag_V = 0;
38065 flag_C = 0;
38066 flag_N = src >> 0;
38067 flag_NotZ = src;
38068RET(6)
38069}
38070
38071// LSLD
38072OPCODE(0xE168)
38073{
38074 u32 adr, res;
38075 u32 src, dst;
38076
38077 u32 sft;
38078
38079 sft = DREG((Opcode >> 9) & 7) & 0x3F;
38080 src = DREGu16((Opcode >> 0) & 7);
38081 if (sft)
38082 {
38083 m68kcontext.io_cycle_counter -= sft * 2;
38084 if (sft <= 16)
38085 {
38086 flag_X = flag_C = (src << sft) >> 8;
38087 res = (src << sft) & 0x0000FFFF;
38088 flag_V = 0;
38089 flag_N = res >> 8;
38090 flag_NotZ = res;
38091 DREGu16((Opcode >> 0) & 7) = res;
38092 RET(6)
38093 }
38094
38095 flag_X = flag_C = 0;
38096 flag_N = 0;
38097 flag_NotZ = 0;
38098 flag_V = 0;
38099 res = 0;
38100 DREGu16((Opcode >> 0) & 7) = res;
38101 RET(6)
38102 }
38103
38104 flag_V = 0;
38105 flag_C = 0;
38106 flag_N = src >> 8;
38107 flag_NotZ = src;
38108RET(6)
38109}
38110
38111// LSLD
38112OPCODE(0xE1A8)
38113{
38114#ifdef USE_CYCLONE_TIMING
38115#define CYC 8
38116#else
38117#define CYC 6
38118#endif
38119 u32 adr, res;
38120 u32 src, dst;
38121
38122 u32 sft;
38123
38124 sft = DREG((Opcode >> 9) & 7) & 0x3F;
38125 src = DREGu32((Opcode >> 0) & 7);
38126 if (sft)
38127 {
38128 m68kcontext.io_cycle_counter -= sft * 2;
38129 if (sft < 32)
38130 {
38131 flag_X = flag_C = (src >> (32 - sft)) << M68K_SR_C_SFT;
38132 res = src << sft;
38133 flag_V = 0;
38134 flag_N = res >> 24;
38135 flag_NotZ = res;
38136 DREGu32((Opcode >> 0) & 7) = res;
38137 RET(CYC)
38138 }
38139
38140 if (sft == 32) flag_C = src << M68K_SR_C_SFT;
38141 else flag_C = 0;
38142 flag_X = flag_C;
38143 flag_N = 0;
38144 flag_NotZ = 0;
38145 flag_V = 0;
38146 res = 0;
38147 DREGu32((Opcode >> 0) & 7) = res;
38148 RET(CYC)
38149 }
38150
38151 flag_V = 0;
38152 flag_C = 0;
38153 flag_N = src >> 24;
38154 flag_NotZ = src;
38155RET(CYC)
38156#undef CYC
38157}
38158
38159// ROXLD
38160OPCODE(0xE130)
38161{
38162 u32 adr, res;
38163 u32 src, dst;
38164
38165 u32 sft;
38166
38167 sft = DREG((Opcode >> 9) & 7) & 0x3F;
38168 src = DREGu8((Opcode >> 0) & 7);
38169 if (sft)
38170 {
38171 m68kcontext.io_cycle_counter -= sft * 2;
38172 sft %= 9;
38173
38174 src |= (flag_X & M68K_SR_X) << 0;
38175 res = (src << sft) | (src >> (9 - sft));
38176 flag_X = flag_C = res >> 0;
38177 flag_V = 0;
38178 flag_N = res >> 0;
38179 flag_NotZ = res & 0x000000FF;
38180 DREGu8((Opcode >> 0) & 7) = res;
38181 RET(6)
38182 }
38183
38184 flag_V = 0;
38185 flag_C = flag_X;
38186 flag_N = src >> 0;
38187 flag_NotZ = src;
38188RET(6)
38189}
38190
38191// ROXLD
38192OPCODE(0xE170)
38193{
38194 u32 adr, res;
38195 u32 src, dst;
38196
38197 u32 sft;
38198
38199 sft = DREG((Opcode >> 9) & 7) & 0x3F;
38200 src = DREGu16((Opcode >> 0) & 7);
38201 if (sft)
38202 {
38203 m68kcontext.io_cycle_counter -= sft * 2;
38204 sft %= 17;
38205
38206 src |= (flag_X & M68K_SR_X) << 8;
38207 res = (src << sft) | (src >> (17 - sft));
38208 flag_X = flag_C = res >> 8;
38209 flag_V = 0;
38210 flag_N = res >> 8;
38211 flag_NotZ = res & 0x0000FFFF;
38212 DREGu16((Opcode >> 0) & 7) = res;
38213 RET(6)
38214 }
38215
38216 flag_V = 0;
38217 flag_C = flag_X;
38218 flag_N = src >> 8;
38219 flag_NotZ = src;
38220RET(6)
38221}
38222
38223// ROXLD
38224OPCODE(0xE1B0)
38225{
38226#ifdef USE_CYCLONE_TIMING
38227#define CYC 8
38228#else
38229#define CYC 6
38230#endif
38231 u32 adr, res;
38232 u32 src, dst;
38233
38234 u32 sft;
38235
38236 sft = DREG((Opcode >> 9) & 7) & 0x3F;
38237 src = DREGu32((Opcode >> 0) & 7);
38238 if (sft)
38239 {
38240 m68kcontext.io_cycle_counter -= sft * 2;
38241 sft %= 33;
38242
38243 if (sft != 0)
38244 {
38245 if (sft == 1) res = (src << 1) | ((flag_X >> ((M68K_SR_X_SFT + 1) - 1)) & 1);
38246 else res = (src << sft) | (src >> (33 - sft)) | (((flag_X >> ((M68K_SR_X_SFT + 1) - 1)) & 1) << (sft - 1));
38247 flag_X = (src >> (32 - sft)) << M68K_SR_X_SFT;
38248 }
38249 else res = src;
38250 flag_C = flag_X;
38251 flag_V = 0;
38252 flag_N = res >> 24;
38253 flag_NotZ = res;
38254 DREGu32((Opcode >> 0) & 7) = res;
38255 RET(CYC)
38256 }
38257
38258 flag_V = 0;
38259 flag_C = flag_X;
38260 flag_N = src >> 24;
38261 flag_NotZ = src;
38262RET(CYC)
38263#undef CYC
38264}
38265
38266// ROLD
38267OPCODE(0xE138)
38268{
38269 u32 adr, res;
38270 u32 src, dst;
38271
38272 u32 sft;
38273
38274 sft = DREG((Opcode >> 9) & 7) & 0x3F;
38275 src = DREGu8((Opcode >> 0) & 7);
38276 if (sft)
38277 {
38278 m68kcontext.io_cycle_counter -= sft * 2;
38279 if (sft &= 0x07)
38280 {
38281 flag_C = (src << sft) >> 0;
38282 res = ((src << sft) | (src >> (8 - sft))) & 0x000000FF;
38283 flag_V = 0;
38284 flag_N = res >> 0;
38285 flag_NotZ = res;
38286 DREGu8((Opcode >> 0) & 7) = res;
38287 RET(6)
38288 }
38289
38290 flag_V = 0;
38291 flag_C = src << M68K_SR_C_SFT;
38292 flag_N = src >> 0;
38293 flag_NotZ = src;
38294 RET(6)
38295 }
38296
38297 flag_V = 0;
38298 flag_C = 0;
38299 flag_N = src >> 0;
38300 flag_NotZ = src;
38301RET(6)
38302}
38303
38304// ROLD
38305OPCODE(0xE178)
38306{
38307 u32 adr, res;
38308 u32 src, dst;
38309
38310 u32 sft;
38311
38312 sft = DREG((Opcode >> 9) & 7) & 0x3F;
38313 src = DREGu16((Opcode >> 0) & 7);
38314 if (sft)
38315 {
38316 m68kcontext.io_cycle_counter -= sft * 2;
38317 if (sft &= 0x0F)
38318 {
38319 flag_C = (src << sft) >> 8;
38320 res = ((src << sft) | (src >> (16 - sft))) & 0x0000FFFF;
38321 flag_V = 0;
38322 flag_N = res >> 8;
38323 flag_NotZ = res;
38324 DREGu16((Opcode >> 0) & 7) = res;
38325 RET(6)
38326 }
38327
38328 flag_V = 0;
38329 flag_C = src << M68K_SR_C_SFT;
38330 flag_N = src >> 8;
38331 flag_NotZ = src;
38332 RET(6)
38333 }
38334
38335 flag_V = 0;
38336 flag_C = 0;
38337 flag_N = src >> 8;
38338 flag_NotZ = src;
38339RET(6)
38340}
38341
38342// ROLD
38343OPCODE(0xE1B8)
38344{
38345#ifdef USE_CYCLONE_TIMING
38346#define CYC 8
38347#else
38348#define CYC 6
38349#endif
38350 u32 adr, res;
38351 u32 src, dst;
38352
38353 u32 sft;
38354
38355 sft = DREG((Opcode >> 9) & 7) & 0x3F;
38356 src = DREGu32((Opcode >> 0) & 7);
38357 if (sft)
38358 {
38359 m68kcontext.io_cycle_counter -= sft * 2;
38360 if (sft &= 0x1F)
38361 {
38362 flag_C = (src >> (32 - sft)) << M68K_SR_C_SFT;
38363 res = (src << sft) | (src >> (32 - sft));
38364 flag_V = 0;
38365 flag_N = res >> 24;
38366 flag_NotZ = res;
38367 DREGu32((Opcode >> 0) & 7) = res;
38368 RET(CYC)
38369 }
38370
38371 flag_V = 0;
38372 flag_C = src << M68K_SR_C_SFT;
38373 flag_N = src >> 24;
38374 flag_NotZ = src;
38375 RET(CYC)
38376 }
38377
38378 flag_V = 0;
38379 flag_C = 0;
38380 flag_N = src >> 24;
38381 flag_NotZ = src;
38382RET(CYC)
38383#undef CYC
38384}
38385
38386// ASR
38387OPCODE(0xE0D0)
38388{
38389 u32 adr, res;
38390 u32 src, dst;
38391
38392 adr = AREG((Opcode >> 0) & 7);
38393 PRE_IO
38394 READ_WORD_F(adr, src)
38395 flag_V = 0;
38396 flag_X = flag_C = src << M68K_SR_C_SFT;
38397 res = (src >> 1) | (src & (1 << 15));
38398 flag_N = res >> 8;
38399 flag_NotZ = res;
38400 WRITE_WORD_F(adr, res)
38401 POST_IO
38402RET(12)
38403}
38404
38405// ASR
38406OPCODE(0xE0D8)
38407{
38408 u32 adr, res;
38409 u32 src, dst;
38410
38411 adr = AREG((Opcode >> 0) & 7);
38412 AREG((Opcode >> 0) & 7) += 2;
38413 PRE_IO
38414 READ_WORD_F(adr, src)
38415 flag_V = 0;
38416 flag_X = flag_C = src << M68K_SR_C_SFT;
38417 res = (src >> 1) | (src & (1 << 15));
38418 flag_N = res >> 8;
38419 flag_NotZ = res;
38420 WRITE_WORD_F(adr, res)
38421 POST_IO
38422RET(12)
38423}
38424
38425// ASR
38426OPCODE(0xE0E0)
38427{
38428 u32 adr, res;
38429 u32 src, dst;
38430
38431 adr = AREG((Opcode >> 0) & 7) - 2;
38432 AREG((Opcode >> 0) & 7) = adr;
38433 PRE_IO
38434 READ_WORD_F(adr, src)
38435 flag_V = 0;
38436 flag_X = flag_C = src << M68K_SR_C_SFT;
38437 res = (src >> 1) | (src & (1 << 15));
38438 flag_N = res >> 8;
38439 flag_NotZ = res;
38440 WRITE_WORD_F(adr, res)
38441 POST_IO
38442RET(14)
38443}
38444
38445// ASR
38446OPCODE(0xE0E8)
38447{
38448 u32 adr, res;
38449 u32 src, dst;
38450
38451 FETCH_SWORD(adr);
38452 adr += AREG((Opcode >> 0) & 7);
38453 PRE_IO
38454 READ_WORD_F(adr, src)
38455 flag_V = 0;
38456 flag_X = flag_C = src << M68K_SR_C_SFT;
38457 res = (src >> 1) | (src & (1 << 15));
38458 flag_N = res >> 8;
38459 flag_NotZ = res;
38460 WRITE_WORD_F(adr, res)
38461 POST_IO
38462RET(16)
38463}
38464
38465// ASR
38466OPCODE(0xE0F0)
38467{
38468 u32 adr, res;
38469 u32 src, dst;
38470
38471 adr = AREG((Opcode >> 0) & 7);
38472 DECODE_EXT_WORD
38473 PRE_IO
38474 READ_WORD_F(adr, src)
38475 flag_V = 0;
38476 flag_X = flag_C = src << M68K_SR_C_SFT;
38477 res = (src >> 1) | (src & (1 << 15));
38478 flag_N = res >> 8;
38479 flag_NotZ = res;
38480 WRITE_WORD_F(adr, res)
38481 POST_IO
38482RET(18)
38483}
38484
38485// ASR
38486OPCODE(0xE0F8)
38487{
38488 u32 adr, res;
38489 u32 src, dst;
38490
38491 FETCH_SWORD(adr);
38492 PRE_IO
38493 READ_WORD_F(adr, src)
38494 flag_V = 0;
38495 flag_X = flag_C = src << M68K_SR_C_SFT;
38496 res = (src >> 1) | (src & (1 << 15));
38497 flag_N = res >> 8;
38498 flag_NotZ = res;
38499 WRITE_WORD_F(adr, res)
38500 POST_IO
38501RET(16)
38502}
38503
38504// ASR
38505OPCODE(0xE0F9)
38506{
38507 u32 adr, res;
38508 u32 src, dst;
38509
38510 FETCH_LONG(adr);
38511 PRE_IO
38512 READ_WORD_F(adr, src)
38513 flag_V = 0;
38514 flag_X = flag_C = src << M68K_SR_C_SFT;
38515 res = (src >> 1) | (src & (1 << 15));
38516 flag_N = res >> 8;
38517 flag_NotZ = res;
38518 WRITE_WORD_F(adr, res)
38519 POST_IO
38520RET(20)
38521}
38522
38523// ASR
38524OPCODE(0xE0DF)
38525{
38526 u32 adr, res;
38527 u32 src, dst;
38528
38529 adr = AREG(7);
38530 AREG(7) += 2;
38531 PRE_IO
38532 READ_WORD_F(adr, src)
38533 flag_V = 0;
38534 flag_X = flag_C = src << M68K_SR_C_SFT;
38535 res = (src >> 1) | (src & (1 << 15));
38536 flag_N = res >> 8;
38537 flag_NotZ = res;
38538 WRITE_WORD_F(adr, res)
38539 POST_IO
38540RET(12)
38541}
38542
38543// ASR
38544OPCODE(0xE0E7)
38545{
38546 u32 adr, res;
38547 u32 src, dst;
38548
38549 adr = AREG(7) - 2;
38550 AREG(7) = adr;
38551 PRE_IO
38552 READ_WORD_F(adr, src)
38553 flag_V = 0;
38554 flag_X = flag_C = src << M68K_SR_C_SFT;
38555 res = (src >> 1) | (src & (1 << 15));
38556 flag_N = res >> 8;
38557 flag_NotZ = res;
38558 WRITE_WORD_F(adr, res)
38559 POST_IO
38560RET(14)
38561}
38562
38563// LSR
38564OPCODE(0xE2D0)
38565{
38566 u32 adr, res;
38567 u32 src, dst;
38568
38569 adr = AREG((Opcode >> 0) & 7);
38570 PRE_IO
38571 READ_WORD_F(adr, src)
38572 flag_N = flag_V = 0;
38573 flag_X = flag_C = src << M68K_SR_C_SFT;
38574 res = src >> 1;
38575 flag_NotZ = res;
38576 WRITE_WORD_F(adr, res)
38577 POST_IO
38578RET(12)
38579}
38580
38581// LSR
38582OPCODE(0xE2D8)
38583{
38584 u32 adr, res;
38585 u32 src, dst;
38586
38587 adr = AREG((Opcode >> 0) & 7);
38588 AREG((Opcode >> 0) & 7) += 2;
38589 PRE_IO
38590 READ_WORD_F(adr, src)
38591 flag_N = flag_V = 0;
38592 flag_X = flag_C = src << M68K_SR_C_SFT;
38593 res = src >> 1;
38594 flag_NotZ = res;
38595 WRITE_WORD_F(adr, res)
38596 POST_IO
38597RET(12)
38598}
38599
38600// LSR
38601OPCODE(0xE2E0)
38602{
38603 u32 adr, res;
38604 u32 src, dst;
38605
38606 adr = AREG((Opcode >> 0) & 7) - 2;
38607 AREG((Opcode >> 0) & 7) = adr;
38608 PRE_IO
38609 READ_WORD_F(adr, src)
38610 flag_N = flag_V = 0;
38611 flag_X = flag_C = src << M68K_SR_C_SFT;
38612 res = src >> 1;
38613 flag_NotZ = res;
38614 WRITE_WORD_F(adr, res)
38615 POST_IO
38616RET(14)
38617}
38618
38619// LSR
38620OPCODE(0xE2E8)
38621{
38622 u32 adr, res;
38623 u32 src, dst;
38624
38625 FETCH_SWORD(adr);
38626 adr += AREG((Opcode >> 0) & 7);
38627 PRE_IO
38628 READ_WORD_F(adr, src)
38629 flag_N = flag_V = 0;
38630 flag_X = flag_C = src << M68K_SR_C_SFT;
38631 res = src >> 1;
38632 flag_NotZ = res;
38633 WRITE_WORD_F(adr, res)
38634 POST_IO
38635RET(16)
38636}
38637
38638// LSR
38639OPCODE(0xE2F0)
38640{
38641 u32 adr, res;
38642 u32 src, dst;
38643
38644 adr = AREG((Opcode >> 0) & 7);
38645 DECODE_EXT_WORD
38646 PRE_IO
38647 READ_WORD_F(adr, src)
38648 flag_N = flag_V = 0;
38649 flag_X = flag_C = src << M68K_SR_C_SFT;
38650 res = src >> 1;
38651 flag_NotZ = res;
38652 WRITE_WORD_F(adr, res)
38653 POST_IO
38654RET(18)
38655}
38656
38657// LSR
38658OPCODE(0xE2F8)
38659{
38660 u32 adr, res;
38661 u32 src, dst;
38662
38663 FETCH_SWORD(adr);
38664 PRE_IO
38665 READ_WORD_F(adr, src)
38666 flag_N = flag_V = 0;
38667 flag_X = flag_C = src << M68K_SR_C_SFT;
38668 res = src >> 1;
38669 flag_NotZ = res;
38670 WRITE_WORD_F(adr, res)
38671 POST_IO
38672RET(16)
38673}
38674
38675// LSR
38676OPCODE(0xE2F9)
38677{
38678 u32 adr, res;
38679 u32 src, dst;
38680
38681 FETCH_LONG(adr);
38682 PRE_IO
38683 READ_WORD_F(adr, src)
38684 flag_N = flag_V = 0;
38685 flag_X = flag_C = src << M68K_SR_C_SFT;
38686 res = src >> 1;
38687 flag_NotZ = res;
38688 WRITE_WORD_F(adr, res)
38689 POST_IO
38690RET(20)
38691}
38692
38693// LSR
38694OPCODE(0xE2DF)
38695{
38696 u32 adr, res;
38697 u32 src, dst;
38698
38699 adr = AREG(7);
38700 AREG(7) += 2;
38701 PRE_IO
38702 READ_WORD_F(adr, src)
38703 flag_N = flag_V = 0;
38704 flag_X = flag_C = src << M68K_SR_C_SFT;
38705 res = src >> 1;
38706 flag_NotZ = res;
38707 WRITE_WORD_F(adr, res)
38708 POST_IO
38709RET(12)
38710}
38711
38712// LSR
38713OPCODE(0xE2E7)
38714{
38715 u32 adr, res;
38716 u32 src, dst;
38717
38718 adr = AREG(7) - 2;
38719 AREG(7) = adr;
38720 PRE_IO
38721 READ_WORD_F(adr, src)
38722 flag_N = flag_V = 0;
38723 flag_X = flag_C = src << M68K_SR_C_SFT;
38724 res = src >> 1;
38725 flag_NotZ = res;
38726 WRITE_WORD_F(adr, res)
38727 POST_IO
38728RET(14)
38729}
38730
38731// ROXR
38732OPCODE(0xE4D0)
38733{
38734 u32 adr, res;
38735 u32 src, dst;
38736
38737 adr = AREG((Opcode >> 0) & 7);
38738 PRE_IO
38739 READ_WORD_F(adr, src)
38740 flag_V = 0;
38741 res = (src >> 1) | ((flag_X & M68K_SR_X) << 7);
38742 flag_C = flag_X = src << M68K_SR_C_SFT;
38743 flag_N = res >> 8;
38744 flag_NotZ = res;
38745 WRITE_WORD_F(adr, res)
38746 POST_IO
38747RET(12)
38748}
38749
38750// ROXR
38751OPCODE(0xE4D8)
38752{
38753 u32 adr, res;
38754 u32 src, dst;
38755
38756 adr = AREG((Opcode >> 0) & 7);
38757 AREG((Opcode >> 0) & 7) += 2;
38758 PRE_IO
38759 READ_WORD_F(adr, src)
38760 flag_V = 0;
38761 res = (src >> 1) | ((flag_X & M68K_SR_X) << 7);
38762 flag_C = flag_X = src << M68K_SR_C_SFT;
38763 flag_N = res >> 8;
38764 flag_NotZ = res;
38765 WRITE_WORD_F(adr, res)
38766 POST_IO
38767RET(12)
38768}
38769
38770// ROXR
38771OPCODE(0xE4E0)
38772{
38773 u32 adr, res;
38774 u32 src, dst;
38775
38776 adr = AREG((Opcode >> 0) & 7) - 2;
38777 AREG((Opcode >> 0) & 7) = adr;
38778 PRE_IO
38779 READ_WORD_F(adr, src)
38780 flag_V = 0;
38781 res = (src >> 1) | ((flag_X & M68K_SR_X) << 7);
38782 flag_C = flag_X = src << M68K_SR_C_SFT;
38783 flag_N = res >> 8;
38784 flag_NotZ = res;
38785 WRITE_WORD_F(adr, res)
38786 POST_IO
38787RET(14)
38788}
38789
38790// ROXR
38791OPCODE(0xE4E8)
38792{
38793 u32 adr, res;
38794 u32 src, dst;
38795
38796 FETCH_SWORD(adr);
38797 adr += AREG((Opcode >> 0) & 7);
38798 PRE_IO
38799 READ_WORD_F(adr, src)
38800 flag_V = 0;
38801 res = (src >> 1) | ((flag_X & M68K_SR_X) << 7);
38802 flag_C = flag_X = src << M68K_SR_C_SFT;
38803 flag_N = res >> 8;
38804 flag_NotZ = res;
38805 WRITE_WORD_F(adr, res)
38806 POST_IO
38807RET(16)
38808}
38809
38810// ROXR
38811OPCODE(0xE4F0)
38812{
38813 u32 adr, res;
38814 u32 src, dst;
38815
38816 adr = AREG((Opcode >> 0) & 7);
38817 DECODE_EXT_WORD
38818 PRE_IO
38819 READ_WORD_F(adr, src)
38820 flag_V = 0;
38821 res = (src >> 1) | ((flag_X & M68K_SR_X) << 7);
38822 flag_C = flag_X = src << M68K_SR_C_SFT;
38823 flag_N = res >> 8;
38824 flag_NotZ = res;
38825 WRITE_WORD_F(adr, res)
38826 POST_IO
38827RET(18)
38828}
38829
38830// ROXR
38831OPCODE(0xE4F8)
38832{
38833 u32 adr, res;
38834 u32 src, dst;
38835
38836 FETCH_SWORD(adr);
38837 PRE_IO
38838 READ_WORD_F(adr, src)
38839 flag_V = 0;
38840 res = (src >> 1) | ((flag_X & M68K_SR_X) << 7);
38841 flag_C = flag_X = src << M68K_SR_C_SFT;
38842 flag_N = res >> 8;
38843 flag_NotZ = res;
38844 WRITE_WORD_F(adr, res)
38845 POST_IO
38846RET(16)
38847}
38848
38849// ROXR
38850OPCODE(0xE4F9)
38851{
38852 u32 adr, res;
38853 u32 src, dst;
38854
38855 FETCH_LONG(adr);
38856 PRE_IO
38857 READ_WORD_F(adr, src)
38858 flag_V = 0;
38859 res = (src >> 1) | ((flag_X & M68K_SR_X) << 7);
38860 flag_C = flag_X = src << M68K_SR_C_SFT;
38861 flag_N = res >> 8;
38862 flag_NotZ = res;
38863 WRITE_WORD_F(adr, res)
38864 POST_IO
38865RET(20)
38866}
38867
38868// ROXR
38869OPCODE(0xE4DF)
38870{
38871 u32 adr, res;
38872 u32 src, dst;
38873
38874 adr = AREG(7);
38875 AREG(7) += 2;
38876 PRE_IO
38877 READ_WORD_F(adr, src)
38878 flag_V = 0;
38879 res = (src >> 1) | ((flag_X & M68K_SR_X) << 7);
38880 flag_C = flag_X = src << M68K_SR_C_SFT;
38881 flag_N = res >> 8;
38882 flag_NotZ = res;
38883 WRITE_WORD_F(adr, res)
38884 POST_IO
38885RET(12)
38886}
38887
38888// ROXR
38889OPCODE(0xE4E7)
38890{
38891 u32 adr, res;
38892 u32 src, dst;
38893
38894 adr = AREG(7) - 2;
38895 AREG(7) = adr;
38896 PRE_IO
38897 READ_WORD_F(adr, src)
38898 flag_V = 0;
38899 res = (src >> 1) | ((flag_X & M68K_SR_X) << 7);
38900 flag_C = flag_X = src << M68K_SR_C_SFT;
38901 flag_N = res >> 8;
38902 flag_NotZ = res;
38903 WRITE_WORD_F(adr, res)
38904 POST_IO
38905RET(14)
38906}
38907
38908// ROR
38909OPCODE(0xE6D0)
38910{
38911 u32 adr, res;
38912 u32 src, dst;
38913
38914 adr = AREG((Opcode >> 0) & 7);
38915 PRE_IO
38916 READ_WORD_F(adr, src)
38917 flag_V = 0;
38918 flag_C = src << M68K_SR_C_SFT;
38919 res = (src >> 1) | (src << 15);
38920 flag_N = res >> 8;
38921 flag_NotZ = res & 0x0000FFFF;
38922 WRITE_WORD_F(adr, res)
38923 POST_IO
38924RET(12)
38925}
38926
38927// ROR
38928OPCODE(0xE6D8)
38929{
38930 u32 adr, res;
38931 u32 src, dst;
38932
38933 adr = AREG((Opcode >> 0) & 7);
38934 AREG((Opcode >> 0) & 7) += 2;
38935 PRE_IO
38936 READ_WORD_F(adr, src)
38937 flag_V = 0;
38938 flag_C = src << M68K_SR_C_SFT;
38939 res = (src >> 1) | (src << 15);
38940 flag_N = res >> 8;
38941 flag_NotZ = res & 0x0000FFFF;
38942 WRITE_WORD_F(adr, res)
38943 POST_IO
38944RET(12)
38945}
38946
38947// ROR
38948OPCODE(0xE6E0)
38949{
38950 u32 adr, res;
38951 u32 src, dst;
38952
38953 adr = AREG((Opcode >> 0) & 7) - 2;
38954 AREG((Opcode >> 0) & 7) = adr;
38955 PRE_IO
38956 READ_WORD_F(adr, src)
38957 flag_V = 0;
38958 flag_C = src << M68K_SR_C_SFT;
38959 res = (src >> 1) | (src << 15);
38960 flag_N = res >> 8;
38961 flag_NotZ = res & 0x0000FFFF;
38962 WRITE_WORD_F(adr, res)
38963 POST_IO
38964RET(14)
38965}
38966
38967// ROR
38968OPCODE(0xE6E8)
38969{
38970 u32 adr, res;
38971 u32 src, dst;
38972
38973 FETCH_SWORD(adr);
38974 adr += AREG((Opcode >> 0) & 7);
38975 PRE_IO
38976 READ_WORD_F(adr, src)
38977 flag_V = 0;
38978 flag_C = src << M68K_SR_C_SFT;
38979 res = (src >> 1) | (src << 15);
38980 flag_N = res >> 8;
38981 flag_NotZ = res & 0x0000FFFF;
38982 WRITE_WORD_F(adr, res)
38983 POST_IO
38984RET(16)
38985}
38986
38987// ROR
38988OPCODE(0xE6F0)
38989{
38990 u32 adr, res;
38991 u32 src, dst;
38992
38993 adr = AREG((Opcode >> 0) & 7);
38994 DECODE_EXT_WORD
38995 PRE_IO
38996 READ_WORD_F(adr, src)
38997 flag_V = 0;
38998 flag_C = src << M68K_SR_C_SFT;
38999 res = (src >> 1) | (src << 15);
39000 flag_N = res >> 8;
39001 flag_NotZ = res & 0x0000FFFF;
39002 WRITE_WORD_F(adr, res)
39003 POST_IO
39004RET(18)
39005}
39006
39007// ROR
39008OPCODE(0xE6F8)
39009{
39010 u32 adr, res;
39011 u32 src, dst;
39012
39013 FETCH_SWORD(adr);
39014 PRE_IO
39015 READ_WORD_F(adr, src)
39016 flag_V = 0;
39017 flag_C = src << M68K_SR_C_SFT;
39018 res = (src >> 1) | (src << 15);
39019 flag_N = res >> 8;
39020 flag_NotZ = res & 0x0000FFFF;
39021 WRITE_WORD_F(adr, res)
39022 POST_IO
39023RET(16)
39024}
39025
39026// ROR
39027OPCODE(0xE6F9)
39028{
39029 u32 adr, res;
39030 u32 src, dst;
39031
39032 FETCH_LONG(adr);
39033 PRE_IO
39034 READ_WORD_F(adr, src)
39035 flag_V = 0;
39036 flag_C = src << M68K_SR_C_SFT;
39037 res = (src >> 1) | (src << 15);
39038 flag_N = res >> 8;
39039 flag_NotZ = res & 0x0000FFFF;
39040 WRITE_WORD_F(adr, res)
39041 POST_IO
39042RET(20)
39043}
39044
39045// ROR
39046OPCODE(0xE6DF)
39047{
39048 u32 adr, res;
39049 u32 src, dst;
39050
39051 adr = AREG(7);
39052 AREG(7) += 2;
39053 PRE_IO
39054 READ_WORD_F(adr, src)
39055 flag_V = 0;
39056 flag_C = src << M68K_SR_C_SFT;
39057 res = (src >> 1) | (src << 15);
39058 flag_N = res >> 8;
39059 flag_NotZ = res & 0x0000FFFF;
39060 WRITE_WORD_F(adr, res)
39061 POST_IO
39062RET(12)
39063}
39064
39065// ROR
39066OPCODE(0xE6E7)
39067{
39068 u32 adr, res;
39069 u32 src, dst;
39070
39071 adr = AREG(7) - 2;
39072 AREG(7) = adr;
39073 PRE_IO
39074 READ_WORD_F(adr, src)
39075 flag_V = 0;
39076 flag_C = src << M68K_SR_C_SFT;
39077 res = (src >> 1) | (src << 15);
39078 flag_N = res >> 8;
39079 flag_NotZ = res & 0x0000FFFF;
39080 WRITE_WORD_F(adr, res)
39081 POST_IO
39082RET(14)
39083}
39084
39085// ASL
39086OPCODE(0xE1D0)
39087{
39088 u32 adr, res;
39089 u32 src, dst;
39090
39091 adr = AREG((Opcode >> 0) & 7);
39092 PRE_IO
39093 READ_WORD_F(adr, src)
39094 flag_X = flag_C = src >> 7;
39095 res = src << 1;
39096 flag_V = (src ^ res) >> 8;
39097 flag_N = res >> 8;
39098 flag_NotZ = res & 0x0000FFFF;
39099 WRITE_WORD_F(adr, res)
39100 POST_IO
39101RET(12)
39102}
39103
39104// ASL
39105OPCODE(0xE1D8)
39106{
39107 u32 adr, res;
39108 u32 src, dst;
39109
39110 adr = AREG((Opcode >> 0) & 7);
39111 AREG((Opcode >> 0) & 7) += 2;
39112 PRE_IO
39113 READ_WORD_F(adr, src)
39114 flag_X = flag_C = src >> 7;
39115 res = src << 1;
39116 flag_V = (src ^ res) >> 8;
39117 flag_N = res >> 8;
39118 flag_NotZ = res & 0x0000FFFF;
39119 WRITE_WORD_F(adr, res)
39120 POST_IO
39121RET(12)
39122}
39123
39124// ASL
39125OPCODE(0xE1E0)
39126{
39127 u32 adr, res;
39128 u32 src, dst;
39129
39130 adr = AREG((Opcode >> 0) & 7) - 2;
39131 AREG((Opcode >> 0) & 7) = adr;
39132 PRE_IO
39133 READ_WORD_F(adr, src)
39134 flag_X = flag_C = src >> 7;
39135 res = src << 1;
39136 flag_V = (src ^ res) >> 8;
39137 flag_N = res >> 8;
39138 flag_NotZ = res & 0x0000FFFF;
39139 WRITE_WORD_F(adr, res)
39140 POST_IO
39141RET(14)
39142}
39143
39144// ASL
39145OPCODE(0xE1E8)
39146{
39147 u32 adr, res;
39148 u32 src, dst;
39149
39150 FETCH_SWORD(adr);
39151 adr += AREG((Opcode >> 0) & 7);
39152 PRE_IO
39153 READ_WORD_F(adr, src)
39154 flag_X = flag_C = src >> 7;
39155 res = src << 1;
39156 flag_V = (src ^ res) >> 8;
39157 flag_N = res >> 8;
39158 flag_NotZ = res & 0x0000FFFF;
39159 WRITE_WORD_F(adr, res)
39160 POST_IO
39161RET(16)
39162}
39163
39164// ASL
39165OPCODE(0xE1F0)
39166{
39167 u32 adr, res;
39168 u32 src, dst;
39169
39170 adr = AREG((Opcode >> 0) & 7);
39171 DECODE_EXT_WORD
39172 PRE_IO
39173 READ_WORD_F(adr, src)
39174 flag_X = flag_C = src >> 7;
39175 res = src << 1;
39176 flag_V = (src ^ res) >> 8;
39177 flag_N = res >> 8;
39178 flag_NotZ = res & 0x0000FFFF;
39179 WRITE_WORD_F(adr, res)
39180 POST_IO
39181RET(18)
39182}
39183
39184// ASL
39185OPCODE(0xE1F8)
39186{
39187 u32 adr, res;
39188 u32 src, dst;
39189
39190 FETCH_SWORD(adr);
39191 PRE_IO
39192 READ_WORD_F(adr, src)
39193 flag_X = flag_C = src >> 7;
39194 res = src << 1;
39195 flag_V = (src ^ res) >> 8;
39196 flag_N = res >> 8;
39197 flag_NotZ = res & 0x0000FFFF;
39198 WRITE_WORD_F(adr, res)
39199 POST_IO
39200RET(16)
39201}
39202
39203// ASL
39204OPCODE(0xE1F9)
39205{
39206 u32 adr, res;
39207 u32 src, dst;
39208
39209 FETCH_LONG(adr);
39210 PRE_IO
39211 READ_WORD_F(adr, src)
39212 flag_X = flag_C = src >> 7;
39213 res = src << 1;
39214 flag_V = (src ^ res) >> 8;
39215 flag_N = res >> 8;
39216 flag_NotZ = res & 0x0000FFFF;
39217 WRITE_WORD_F(adr, res)
39218 POST_IO
39219RET(20)
39220}
39221
39222// ASL
39223OPCODE(0xE1DF)
39224{
39225 u32 adr, res;
39226 u32 src, dst;
39227
39228 adr = AREG(7);
39229 AREG(7) += 2;
39230 PRE_IO
39231 READ_WORD_F(adr, src)
39232 flag_X = flag_C = src >> 7;
39233 res = src << 1;
39234 flag_V = (src ^ res) >> 8;
39235 flag_N = res >> 8;
39236 flag_NotZ = res & 0x0000FFFF;
39237 WRITE_WORD_F(adr, res)
39238 POST_IO
39239RET(12)
39240}
39241
39242// ASL
39243OPCODE(0xE1E7)
39244{
39245 u32 adr, res;
39246 u32 src, dst;
39247
39248 adr = AREG(7) - 2;
39249 AREG(7) = adr;
39250 PRE_IO
39251 READ_WORD_F(adr, src)
39252 flag_X = flag_C = src >> 7;
39253 res = src << 1;
39254 flag_V = (src ^ res) >> 8;
39255 flag_N = res >> 8;
39256 flag_NotZ = res & 0x0000FFFF;
39257 WRITE_WORD_F(adr, res)
39258 POST_IO
39259RET(14)
39260}
39261
39262// LSL
39263OPCODE(0xE3D0)
39264{
39265 u32 adr, res;
39266 u32 src, dst;
39267
39268 adr = AREG((Opcode >> 0) & 7);
39269 PRE_IO
39270 READ_WORD_F(adr, src)
39271 flag_V = 0;
39272 flag_X = flag_C = src >> 7;
39273 res = src << 1;
39274 flag_N = res >> 8;
39275 flag_NotZ = res & 0x0000FFFF;
39276 WRITE_WORD_F(adr, res)
39277 POST_IO
39278RET(12)
39279}
39280
39281// LSL
39282OPCODE(0xE3D8)
39283{
39284 u32 adr, res;
39285 u32 src, dst;
39286
39287 adr = AREG((Opcode >> 0) & 7);
39288 AREG((Opcode >> 0) & 7) += 2;
39289 PRE_IO
39290 READ_WORD_F(adr, src)
39291 flag_V = 0;
39292 flag_X = flag_C = src >> 7;
39293 res = src << 1;
39294 flag_N = res >> 8;
39295 flag_NotZ = res & 0x0000FFFF;
39296 WRITE_WORD_F(adr, res)
39297 POST_IO
39298RET(12)
39299}
39300
39301// LSL
39302OPCODE(0xE3E0)
39303{
39304 u32 adr, res;
39305 u32 src, dst;
39306
39307 adr = AREG((Opcode >> 0) & 7) - 2;
39308 AREG((Opcode >> 0) & 7) = adr;
39309 PRE_IO
39310 READ_WORD_F(adr, src)
39311 flag_V = 0;
39312 flag_X = flag_C = src >> 7;
39313 res = src << 1;
39314 flag_N = res >> 8;
39315 flag_NotZ = res & 0x0000FFFF;
39316 WRITE_WORD_F(adr, res)
39317 POST_IO
39318RET(14)
39319}
39320
39321// LSL
39322OPCODE(0xE3E8)
39323{
39324 u32 adr, res;
39325 u32 src, dst;
39326
39327 FETCH_SWORD(adr);
39328 adr += AREG((Opcode >> 0) & 7);
39329 PRE_IO
39330 READ_WORD_F(adr, src)
39331 flag_V = 0;
39332 flag_X = flag_C = src >> 7;
39333 res = src << 1;
39334 flag_N = res >> 8;
39335 flag_NotZ = res & 0x0000FFFF;
39336 WRITE_WORD_F(adr, res)
39337 POST_IO
39338RET(16)
39339}
39340
39341// LSL
39342OPCODE(0xE3F0)
39343{
39344 u32 adr, res;
39345 u32 src, dst;
39346
39347 adr = AREG((Opcode >> 0) & 7);
39348 DECODE_EXT_WORD
39349 PRE_IO
39350 READ_WORD_F(adr, src)
39351 flag_V = 0;
39352 flag_X = flag_C = src >> 7;
39353 res = src << 1;
39354 flag_N = res >> 8;
39355 flag_NotZ = res & 0x0000FFFF;
39356 WRITE_WORD_F(adr, res)
39357 POST_IO
39358RET(18)
39359}
39360
39361// LSL
39362OPCODE(0xE3F8)
39363{
39364 u32 adr, res;
39365 u32 src, dst;
39366
39367 FETCH_SWORD(adr);
39368 PRE_IO
39369 READ_WORD_F(adr, src)
39370 flag_V = 0;
39371 flag_X = flag_C = src >> 7;
39372 res = src << 1;
39373 flag_N = res >> 8;
39374 flag_NotZ = res & 0x0000FFFF;
39375 WRITE_WORD_F(adr, res)
39376 POST_IO
39377RET(16)
39378}
39379
39380// LSL
39381OPCODE(0xE3F9)
39382{
39383 u32 adr, res;
39384 u32 src, dst;
39385
39386 FETCH_LONG(adr);
39387 PRE_IO
39388 READ_WORD_F(adr, src)
39389 flag_V = 0;
39390 flag_X = flag_C = src >> 7;
39391 res = src << 1;
39392 flag_N = res >> 8;
39393 flag_NotZ = res & 0x0000FFFF;
39394 WRITE_WORD_F(adr, res)
39395 POST_IO
39396RET(20)
39397}
39398
39399// LSL
39400OPCODE(0xE3DF)
39401{
39402 u32 adr, res;
39403 u32 src, dst;
39404
39405 adr = AREG(7);
39406 AREG(7) += 2;
39407 PRE_IO
39408 READ_WORD_F(adr, src)
39409 flag_V = 0;
39410 flag_X = flag_C = src >> 7;
39411 res = src << 1;
39412 flag_N = res >> 8;
39413 flag_NotZ = res & 0x0000FFFF;
39414 WRITE_WORD_F(adr, res)
39415 POST_IO
39416RET(12)
39417}
39418
39419// LSL
39420OPCODE(0xE3E7)
39421{
39422 u32 adr, res;
39423 u32 src, dst;
39424
39425 adr = AREG(7) - 2;
39426 AREG(7) = adr;
39427 PRE_IO
39428 READ_WORD_F(adr, src)
39429 flag_V = 0;
39430 flag_X = flag_C = src >> 7;
39431 res = src << 1;
39432 flag_N = res >> 8;
39433 flag_NotZ = res & 0x0000FFFF;
39434 WRITE_WORD_F(adr, res)
39435 POST_IO
39436RET(14)
39437}
39438
39439// ROXL
39440OPCODE(0xE5D0)
39441{
39442 u32 adr, res;
39443 u32 src, dst;
39444
39445 adr = AREG((Opcode >> 0) & 7);
39446 PRE_IO
39447 READ_WORD_F(adr, src)
39448 flag_V = 0;
39449 res = (src << 1) | ((flag_X & M68K_SR_X) >> 8);
39450 flag_X = flag_C = src >> 7;
39451 flag_N = res >> 8;
39452 flag_NotZ = res & 0x0000FFFF;
39453 WRITE_WORD_F(adr, res)
39454 POST_IO
39455RET(12)
39456}
39457
39458// ROXL
39459OPCODE(0xE5D8)
39460{
39461 u32 adr, res;
39462 u32 src, dst;
39463
39464 adr = AREG((Opcode >> 0) & 7);
39465 AREG((Opcode >> 0) & 7) += 2;
39466 PRE_IO
39467 READ_WORD_F(adr, src)
39468 flag_V = 0;
39469 res = (src << 1) | ((flag_X & M68K_SR_X) >> 8);
39470 flag_X = flag_C = src >> 7;
39471 flag_N = res >> 8;
39472 flag_NotZ = res & 0x0000FFFF;
39473 WRITE_WORD_F(adr, res)
39474 POST_IO
39475RET(12)
39476}
39477
39478// ROXL
39479OPCODE(0xE5E0)
39480{
39481 u32 adr, res;
39482 u32 src, dst;
39483
39484 adr = AREG((Opcode >> 0) & 7) - 2;
39485 AREG((Opcode >> 0) & 7) = adr;
39486 PRE_IO
39487 READ_WORD_F(adr, src)
39488 flag_V = 0;
39489 res = (src << 1) | ((flag_X & M68K_SR_X) >> 8);
39490 flag_X = flag_C = src >> 7;
39491 flag_N = res >> 8;
39492 flag_NotZ = res & 0x0000FFFF;
39493 WRITE_WORD_F(adr, res)
39494 POST_IO
39495RET(14)
39496}
39497
39498// ROXL
39499OPCODE(0xE5E8)
39500{
39501 u32 adr, res;
39502 u32 src, dst;
39503
39504 FETCH_SWORD(adr);
39505 adr += AREG((Opcode >> 0) & 7);
39506 PRE_IO
39507 READ_WORD_F(adr, src)
39508 flag_V = 0;
39509 res = (src << 1) | ((flag_X & M68K_SR_X) >> 8);
39510 flag_X = flag_C = src >> 7;
39511 flag_N = res >> 8;
39512 flag_NotZ = res & 0x0000FFFF;
39513 WRITE_WORD_F(adr, res)
39514 POST_IO
39515RET(16)
39516}
39517
39518// ROXL
39519OPCODE(0xE5F0)
39520{
39521 u32 adr, res;
39522 u32 src, dst;
39523
39524 adr = AREG((Opcode >> 0) & 7);
39525 DECODE_EXT_WORD
39526 PRE_IO
39527 READ_WORD_F(adr, src)
39528 flag_V = 0;
39529 res = (src << 1) | ((flag_X & M68K_SR_X) >> 8);
39530 flag_X = flag_C = src >> 7;
39531 flag_N = res >> 8;
39532 flag_NotZ = res & 0x0000FFFF;
39533 WRITE_WORD_F(adr, res)
39534 POST_IO
39535RET(18)
39536}
39537
39538// ROXL
39539OPCODE(0xE5F8)
39540{
39541 u32 adr, res;
39542 u32 src, dst;
39543
39544 FETCH_SWORD(adr);
39545 PRE_IO
39546 READ_WORD_F(adr, src)
39547 flag_V = 0;
39548 res = (src << 1) | ((flag_X & M68K_SR_X) >> 8);
39549 flag_X = flag_C = src >> 7;
39550 flag_N = res >> 8;
39551 flag_NotZ = res & 0x0000FFFF;
39552 WRITE_WORD_F(adr, res)
39553 POST_IO
39554RET(16)
39555}
39556
39557// ROXL
39558OPCODE(0xE5F9)
39559{
39560 u32 adr, res;
39561 u32 src, dst;
39562
39563 FETCH_LONG(adr);
39564 PRE_IO
39565 READ_WORD_F(adr, src)
39566 flag_V = 0;
39567 res = (src << 1) | ((flag_X & M68K_SR_X) >> 8);
39568 flag_X = flag_C = src >> 7;
39569 flag_N = res >> 8;
39570 flag_NotZ = res & 0x0000FFFF;
39571 WRITE_WORD_F(adr, res)
39572 POST_IO
39573RET(20)
39574}
39575
39576// ROXL
39577OPCODE(0xE5DF)
39578{
39579 u32 adr, res;
39580 u32 src, dst;
39581
39582 adr = AREG(7);
39583 AREG(7) += 2;
39584 PRE_IO
39585 READ_WORD_F(adr, src)
39586 flag_V = 0;
39587 res = (src << 1) | ((flag_X & M68K_SR_X) >> 8);
39588 flag_X = flag_C = src >> 7;
39589 flag_N = res >> 8;
39590 flag_NotZ = res & 0x0000FFFF;
39591 WRITE_WORD_F(adr, res)
39592 POST_IO
39593RET(12)
39594}
39595
39596// ROXL
39597OPCODE(0xE5E7)
39598{
39599 u32 adr, res;
39600 u32 src, dst;
39601
39602 adr = AREG(7) - 2;
39603 AREG(7) = adr;
39604 PRE_IO
39605 READ_WORD_F(adr, src)
39606 flag_V = 0;
39607 res = (src << 1) | ((flag_X & M68K_SR_X) >> 8);
39608 flag_X = flag_C = src >> 7;
39609 flag_N = res >> 8;
39610 flag_NotZ = res & 0x0000FFFF;
39611 WRITE_WORD_F(adr, res)
39612 POST_IO
39613RET(14)
39614}
39615
39616// ROL
39617OPCODE(0xE7D0)
39618{
39619 u32 adr, res;
39620 u32 src, dst;
39621
39622 adr = AREG((Opcode >> 0) & 7);
39623 PRE_IO
39624 READ_WORD_F(adr, src)
39625 flag_V = 0;
39626 flag_C = src >> 7;
39627 res = (src << 1) | (src >> 15);
39628 flag_N = res >> 8;
39629 flag_NotZ = res & 0x0000FFFF;
39630 WRITE_WORD_F(adr, res)
39631 POST_IO
39632RET(12)
39633}
39634
39635// ROL
39636OPCODE(0xE7D8)
39637{
39638 u32 adr, res;
39639 u32 src, dst;
39640
39641 adr = AREG((Opcode >> 0) & 7);
39642 AREG((Opcode >> 0) & 7) += 2;
39643 PRE_IO
39644 READ_WORD_F(adr, src)
39645 flag_V = 0;
39646 flag_C = src >> 7;
39647 res = (src << 1) | (src >> 15);
39648 flag_N = res >> 8;
39649 flag_NotZ = res & 0x0000FFFF;
39650 WRITE_WORD_F(adr, res)
39651 POST_IO
39652RET(12)
39653}
39654
39655// ROL
39656OPCODE(0xE7E0)
39657{
39658 u32 adr, res;
39659 u32 src, dst;
39660
39661 adr = AREG((Opcode >> 0) & 7) - 2;
39662 AREG((Opcode >> 0) & 7) = adr;
39663 PRE_IO
39664 READ_WORD_F(adr, src)
39665 flag_V = 0;
39666 flag_C = src >> 7;
39667 res = (src << 1) | (src >> 15);
39668 flag_N = res >> 8;
39669 flag_NotZ = res & 0x0000FFFF;
39670 WRITE_WORD_F(adr, res)
39671 POST_IO
39672RET(14)
39673}
39674
39675// ROL
39676OPCODE(0xE7E8)
39677{
39678 u32 adr, res;
39679 u32 src, dst;
39680
39681 FETCH_SWORD(adr);
39682 adr += AREG((Opcode >> 0) & 7);
39683 PRE_IO
39684 READ_WORD_F(adr, src)
39685 flag_V = 0;
39686 flag_C = src >> 7;
39687 res = (src << 1) | (src >> 15);
39688 flag_N = res >> 8;
39689 flag_NotZ = res & 0x0000FFFF;
39690 WRITE_WORD_F(adr, res)
39691 POST_IO
39692RET(16)
39693}
39694
39695// ROL
39696OPCODE(0xE7F0)
39697{
39698 u32 adr, res;
39699 u32 src, dst;
39700
39701 adr = AREG((Opcode >> 0) & 7);
39702 DECODE_EXT_WORD
39703 PRE_IO
39704 READ_WORD_F(adr, src)
39705 flag_V = 0;
39706 flag_C = src >> 7;
39707 res = (src << 1) | (src >> 15);
39708 flag_N = res >> 8;
39709 flag_NotZ = res & 0x0000FFFF;
39710 WRITE_WORD_F(adr, res)
39711 POST_IO
39712RET(18)
39713}
39714
39715// ROL
39716OPCODE(0xE7F8)
39717{
39718 u32 adr, res;
39719 u32 src, dst;
39720
39721 FETCH_SWORD(adr);
39722 PRE_IO
39723 READ_WORD_F(adr, src)
39724 flag_V = 0;
39725 flag_C = src >> 7;
39726 res = (src << 1) | (src >> 15);
39727 flag_N = res >> 8;
39728 flag_NotZ = res & 0x0000FFFF;
39729 WRITE_WORD_F(adr, res)
39730 POST_IO
39731RET(16)
39732}
39733
39734// ROL
39735OPCODE(0xE7F9)
39736{
39737 u32 adr, res;
39738 u32 src, dst;
39739
39740 FETCH_LONG(adr);
39741 PRE_IO
39742 READ_WORD_F(adr, src)
39743 flag_V = 0;
39744 flag_C = src >> 7;
39745 res = (src << 1) | (src >> 15);
39746 flag_N = res >> 8;
39747 flag_NotZ = res & 0x0000FFFF;
39748 WRITE_WORD_F(adr, res)
39749 POST_IO
39750RET(20)
39751}
39752
39753// ROL
39754OPCODE(0xE7DF)
39755{
39756 u32 adr, res;
39757 u32 src, dst;
39758
39759 adr = AREG(7);
39760 AREG(7) += 2;
39761 PRE_IO
39762 READ_WORD_F(adr, src)
39763 flag_V = 0;
39764 flag_C = src >> 7;
39765 res = (src << 1) | (src >> 15);
39766 flag_N = res >> 8;
39767 flag_NotZ = res & 0x0000FFFF;
39768 WRITE_WORD_F(adr, res)
39769 POST_IO
39770RET(12)
39771}
39772
39773// ROL
39774OPCODE(0xE7E7)
39775{
39776 u32 adr, res;
39777 u32 src, dst;
39778
39779 adr = AREG(7) - 2;
39780 AREG(7) = adr;
39781 PRE_IO
39782 READ_WORD_F(adr, src)
39783 flag_V = 0;
39784 flag_C = src >> 7;
39785 res = (src << 1) | (src >> 15);
39786 flag_N = res >> 8;
39787 flag_NotZ = res & 0x0000FFFF;
39788 WRITE_WORD_F(adr, res)
39789 POST_IO
39790RET(14)
39791}
39792