1 #include "m68k/m68kcpu.h"
2
3 /* ======================================================================== */
4 /* ========================= INSTRUCTION HANDLERS ========================= */
5 /* ======================================================================== */
6
7
m68k_op_nbcd_8_d(void)8 void m68k_op_nbcd_8_d(void)
9 {
10 uint* r_dst = &DY;
11 uint dst = *r_dst;
12 uint res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1());
13
14 if(res != 0x9a)
15 {
16 FLAG_V = ~res; /* Undefined V behavior */
17
18 if((res & 0x0f) == 0xa)
19 res = (res & 0xf0) + 0x10;
20
21 res = MASK_OUT_ABOVE_8(res);
22
23 FLAG_V &= res; /* Undefined V behavior part II */
24
25 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
26
27 FLAG_Z |= res;
28 FLAG_C = CFLAG_SET;
29 FLAG_X = XFLAG_SET;
30 }
31 else
32 {
33 FLAG_V = VFLAG_CLEAR;
34 FLAG_C = CFLAG_CLEAR;
35 FLAG_X = XFLAG_CLEAR;
36 }
37 FLAG_N = NFLAG_8(res); /* Undefined N behavior */
38 }
39
40
m68k_op_nbcd_8_ai(void)41 void m68k_op_nbcd_8_ai(void)
42 {
43 uint ea = EA_AY_AI_8();
44 uint dst = m68ki_read_8(ea);
45 uint res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1());
46
47 if(res != 0x9a)
48 {
49 FLAG_V = ~res; /* Undefined V behavior */
50
51 if((res & 0x0f) == 0xa)
52 res = (res & 0xf0) + 0x10;
53
54 res = MASK_OUT_ABOVE_8(res);
55
56 FLAG_V &= res; /* Undefined V behavior part II */
57
58 m68ki_write_8(ea, MASK_OUT_ABOVE_8(res));
59
60 FLAG_Z |= res;
61 FLAG_C = CFLAG_SET;
62 FLAG_X = XFLAG_SET;
63 }
64 else
65 {
66 FLAG_V = VFLAG_CLEAR;
67 FLAG_C = CFLAG_CLEAR;
68 FLAG_X = XFLAG_CLEAR;
69 }
70 FLAG_N = NFLAG_8(res); /* Undefined N behavior */
71 }
72
73
m68k_op_nbcd_8_pi(void)74 void m68k_op_nbcd_8_pi(void)
75 {
76 uint ea = EA_AY_PI_8();
77 uint dst = m68ki_read_8(ea);
78 uint res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1());
79
80 if(res != 0x9a)
81 {
82 FLAG_V = ~res; /* Undefined V behavior */
83
84 if((res & 0x0f) == 0xa)
85 res = (res & 0xf0) + 0x10;
86
87 res = MASK_OUT_ABOVE_8(res);
88
89 FLAG_V &= res; /* Undefined V behavior part II */
90
91 m68ki_write_8(ea, MASK_OUT_ABOVE_8(res));
92
93 FLAG_Z |= res;
94 FLAG_C = CFLAG_SET;
95 FLAG_X = XFLAG_SET;
96 }
97 else
98 {
99 FLAG_V = VFLAG_CLEAR;
100 FLAG_C = CFLAG_CLEAR;
101 FLAG_X = XFLAG_CLEAR;
102 }
103 FLAG_N = NFLAG_8(res); /* Undefined N behavior */
104 }
105
106
m68k_op_nbcd_8_pi7(void)107 void m68k_op_nbcd_8_pi7(void)
108 {
109 uint ea = EA_A7_PI_8();
110 uint dst = m68ki_read_8(ea);
111 uint res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1());
112
113 if(res != 0x9a)
114 {
115 FLAG_V = ~res; /* Undefined V behavior */
116
117 if((res & 0x0f) == 0xa)
118 res = (res & 0xf0) + 0x10;
119
120 res = MASK_OUT_ABOVE_8(res);
121
122 FLAG_V &= res; /* Undefined V behavior part II */
123
124 m68ki_write_8(ea, MASK_OUT_ABOVE_8(res));
125
126 FLAG_Z |= res;
127 FLAG_C = CFLAG_SET;
128 FLAG_X = XFLAG_SET;
129 }
130 else
131 {
132 FLAG_V = VFLAG_CLEAR;
133 FLAG_C = CFLAG_CLEAR;
134 FLAG_X = XFLAG_CLEAR;
135 }
136 FLAG_N = NFLAG_8(res); /* Undefined N behavior */
137 }
138
139
m68k_op_nbcd_8_pd(void)140 void m68k_op_nbcd_8_pd(void)
141 {
142 uint ea = EA_AY_PD_8();
143 uint dst = m68ki_read_8(ea);
144 uint res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1());
145
146 if(res != 0x9a)
147 {
148 FLAG_V = ~res; /* Undefined V behavior */
149
150 if((res & 0x0f) == 0xa)
151 res = (res & 0xf0) + 0x10;
152
153 res = MASK_OUT_ABOVE_8(res);
154
155 FLAG_V &= res; /* Undefined V behavior part II */
156
157 m68ki_write_8(ea, MASK_OUT_ABOVE_8(res));
158
159 FLAG_Z |= res;
160 FLAG_C = CFLAG_SET;
161 FLAG_X = XFLAG_SET;
162 }
163 else
164 {
165 FLAG_V = VFLAG_CLEAR;
166 FLAG_C = CFLAG_CLEAR;
167 FLAG_X = XFLAG_CLEAR;
168 }
169 FLAG_N = NFLAG_8(res); /* Undefined N behavior */
170 }
171
172
m68k_op_nbcd_8_pd7(void)173 void m68k_op_nbcd_8_pd7(void)
174 {
175 uint ea = EA_A7_PD_8();
176 uint dst = m68ki_read_8(ea);
177 uint res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1());
178
179 if(res != 0x9a)
180 {
181 FLAG_V = ~res; /* Undefined V behavior */
182
183 if((res & 0x0f) == 0xa)
184 res = (res & 0xf0) + 0x10;
185
186 res = MASK_OUT_ABOVE_8(res);
187
188 FLAG_V &= res; /* Undefined V behavior part II */
189
190 m68ki_write_8(ea, MASK_OUT_ABOVE_8(res));
191
192 FLAG_Z |= res;
193 FLAG_C = CFLAG_SET;
194 FLAG_X = XFLAG_SET;
195 }
196 else
197 {
198 FLAG_V = VFLAG_CLEAR;
199 FLAG_C = CFLAG_CLEAR;
200 FLAG_X = XFLAG_CLEAR;
201 }
202 FLAG_N = NFLAG_8(res); /* Undefined N behavior */
203 }
204
205
m68k_op_nbcd_8_di(void)206 void m68k_op_nbcd_8_di(void)
207 {
208 uint ea = EA_AY_DI_8();
209 uint dst = m68ki_read_8(ea);
210 uint res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1());
211
212 if(res != 0x9a)
213 {
214 FLAG_V = ~res; /* Undefined V behavior */
215
216 if((res & 0x0f) == 0xa)
217 res = (res & 0xf0) + 0x10;
218
219 res = MASK_OUT_ABOVE_8(res);
220
221 FLAG_V &= res; /* Undefined V behavior part II */
222
223 m68ki_write_8(ea, MASK_OUT_ABOVE_8(res));
224
225 FLAG_Z |= res;
226 FLAG_C = CFLAG_SET;
227 FLAG_X = XFLAG_SET;
228 }
229 else
230 {
231 FLAG_V = VFLAG_CLEAR;
232 FLAG_C = CFLAG_CLEAR;
233 FLAG_X = XFLAG_CLEAR;
234 }
235 FLAG_N = NFLAG_8(res); /* Undefined N behavior */
236 }
237
238
m68k_op_nbcd_8_ix(void)239 void m68k_op_nbcd_8_ix(void)
240 {
241 uint ea = EA_AY_IX_8();
242 uint dst = m68ki_read_8(ea);
243 uint res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1());
244
245 if(res != 0x9a)
246 {
247 FLAG_V = ~res; /* Undefined V behavior */
248
249 if((res & 0x0f) == 0xa)
250 res = (res & 0xf0) + 0x10;
251
252 res = MASK_OUT_ABOVE_8(res);
253
254 FLAG_V &= res; /* Undefined V behavior part II */
255
256 m68ki_write_8(ea, MASK_OUT_ABOVE_8(res));
257
258 FLAG_Z |= res;
259 FLAG_C = CFLAG_SET;
260 FLAG_X = XFLAG_SET;
261 }
262 else
263 {
264 FLAG_V = VFLAG_CLEAR;
265 FLAG_C = CFLAG_CLEAR;
266 FLAG_X = XFLAG_CLEAR;
267 }
268 FLAG_N = NFLAG_8(res); /* Undefined N behavior */
269 }
270
271
m68k_op_nbcd_8_aw(void)272 void m68k_op_nbcd_8_aw(void)
273 {
274 uint ea = EA_AW_8();
275 uint dst = m68ki_read_8(ea);
276 uint res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1());
277
278 if(res != 0x9a)
279 {
280 FLAG_V = ~res; /* Undefined V behavior */
281
282 if((res & 0x0f) == 0xa)
283 res = (res & 0xf0) + 0x10;
284
285 res = MASK_OUT_ABOVE_8(res);
286
287 FLAG_V &= res; /* Undefined V behavior part II */
288
289 m68ki_write_8(ea, MASK_OUT_ABOVE_8(res));
290
291 FLAG_Z |= res;
292 FLAG_C = CFLAG_SET;
293 FLAG_X = XFLAG_SET;
294 }
295 else
296 {
297 FLAG_V = VFLAG_CLEAR;
298 FLAG_C = CFLAG_CLEAR;
299 FLAG_X = XFLAG_CLEAR;
300 }
301 FLAG_N = NFLAG_8(res); /* Undefined N behavior */
302 }
303
304
m68k_op_nbcd_8_al(void)305 void m68k_op_nbcd_8_al(void)
306 {
307 uint ea = EA_AL_8();
308 uint dst = m68ki_read_8(ea);
309 uint res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1());
310
311 if(res != 0x9a)
312 {
313 FLAG_V = ~res; /* Undefined V behavior */
314
315 if((res & 0x0f) == 0xa)
316 res = (res & 0xf0) + 0x10;
317
318 res = MASK_OUT_ABOVE_8(res);
319
320 FLAG_V &= res; /* Undefined V behavior part II */
321
322 m68ki_write_8(ea, MASK_OUT_ABOVE_8(res));
323
324 FLAG_Z |= res;
325 FLAG_C = CFLAG_SET;
326 FLAG_X = XFLAG_SET;
327 }
328 else
329 {
330 FLAG_V = VFLAG_CLEAR;
331 FLAG_C = CFLAG_CLEAR;
332 FLAG_X = XFLAG_CLEAR;
333 }
334 FLAG_N = NFLAG_8(res); /* Undefined N behavior */
335 }
336
337
m68k_op_neg_8_d(void)338 void m68k_op_neg_8_d(void)
339 {
340 uint* r_dst = &DY;
341 uint res = 0 - MASK_OUT_ABOVE_8(*r_dst);
342
343 FLAG_N = NFLAG_8(res);
344 FLAG_C = FLAG_X = CFLAG_8(res);
345 FLAG_V = *r_dst & res;
346 FLAG_Z = MASK_OUT_ABOVE_8(res);
347
348 *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
349 }
350
351
m68k_op_neg_8_ai(void)352 void m68k_op_neg_8_ai(void)
353 {
354 uint ea = EA_AY_AI_8();
355 uint src = m68ki_read_8(ea);
356 uint res = 0 - src;
357
358 FLAG_N = NFLAG_8(res);
359 FLAG_C = FLAG_X = CFLAG_8(res);
360 FLAG_V = src & res;
361 FLAG_Z = MASK_OUT_ABOVE_8(res);
362
363 m68ki_write_8(ea, FLAG_Z);
364 }
365
366
m68k_op_neg_8_pi(void)367 void m68k_op_neg_8_pi(void)
368 {
369 uint ea = EA_AY_PI_8();
370 uint src = m68ki_read_8(ea);
371 uint res = 0 - src;
372
373 FLAG_N = NFLAG_8(res);
374 FLAG_C = FLAG_X = CFLAG_8(res);
375 FLAG_V = src & res;
376 FLAG_Z = MASK_OUT_ABOVE_8(res);
377
378 m68ki_write_8(ea, FLAG_Z);
379 }
380
381
m68k_op_neg_8_pi7(void)382 void m68k_op_neg_8_pi7(void)
383 {
384 uint ea = EA_A7_PI_8();
385 uint src = m68ki_read_8(ea);
386 uint res = 0 - src;
387
388 FLAG_N = NFLAG_8(res);
389 FLAG_C = FLAG_X = CFLAG_8(res);
390 FLAG_V = src & res;
391 FLAG_Z = MASK_OUT_ABOVE_8(res);
392
393 m68ki_write_8(ea, FLAG_Z);
394 }
395
396
m68k_op_neg_8_pd(void)397 void m68k_op_neg_8_pd(void)
398 {
399 uint ea = EA_AY_PD_8();
400 uint src = m68ki_read_8(ea);
401 uint res = 0 - src;
402
403 FLAG_N = NFLAG_8(res);
404 FLAG_C = FLAG_X = CFLAG_8(res);
405 FLAG_V = src & res;
406 FLAG_Z = MASK_OUT_ABOVE_8(res);
407
408 m68ki_write_8(ea, FLAG_Z);
409 }
410
411
m68k_op_neg_8_pd7(void)412 void m68k_op_neg_8_pd7(void)
413 {
414 uint ea = EA_A7_PD_8();
415 uint src = m68ki_read_8(ea);
416 uint res = 0 - src;
417
418 FLAG_N = NFLAG_8(res);
419 FLAG_C = FLAG_X = CFLAG_8(res);
420 FLAG_V = src & res;
421 FLAG_Z = MASK_OUT_ABOVE_8(res);
422
423 m68ki_write_8(ea, FLAG_Z);
424 }
425
426
m68k_op_neg_8_di(void)427 void m68k_op_neg_8_di(void)
428 {
429 uint ea = EA_AY_DI_8();
430 uint src = m68ki_read_8(ea);
431 uint res = 0 - src;
432
433 FLAG_N = NFLAG_8(res);
434 FLAG_C = FLAG_X = CFLAG_8(res);
435 FLAG_V = src & res;
436 FLAG_Z = MASK_OUT_ABOVE_8(res);
437
438 m68ki_write_8(ea, FLAG_Z);
439 }
440
441
m68k_op_neg_8_ix(void)442 void m68k_op_neg_8_ix(void)
443 {
444 uint ea = EA_AY_IX_8();
445 uint src = m68ki_read_8(ea);
446 uint res = 0 - src;
447
448 FLAG_N = NFLAG_8(res);
449 FLAG_C = FLAG_X = CFLAG_8(res);
450 FLAG_V = src & res;
451 FLAG_Z = MASK_OUT_ABOVE_8(res);
452
453 m68ki_write_8(ea, FLAG_Z);
454 }
455
456
m68k_op_neg_8_aw(void)457 void m68k_op_neg_8_aw(void)
458 {
459 uint ea = EA_AW_8();
460 uint src = m68ki_read_8(ea);
461 uint res = 0 - src;
462
463 FLAG_N = NFLAG_8(res);
464 FLAG_C = FLAG_X = CFLAG_8(res);
465 FLAG_V = src & res;
466 FLAG_Z = MASK_OUT_ABOVE_8(res);
467
468 m68ki_write_8(ea, FLAG_Z);
469 }
470
471
m68k_op_neg_8_al(void)472 void m68k_op_neg_8_al(void)
473 {
474 uint ea = EA_AL_8();
475 uint src = m68ki_read_8(ea);
476 uint res = 0 - src;
477
478 FLAG_N = NFLAG_8(res);
479 FLAG_C = FLAG_X = CFLAG_8(res);
480 FLAG_V = src & res;
481 FLAG_Z = MASK_OUT_ABOVE_8(res);
482
483 m68ki_write_8(ea, FLAG_Z);
484 }
485
486
m68k_op_neg_16_d(void)487 void m68k_op_neg_16_d(void)
488 {
489 uint* r_dst = &DY;
490 uint res = 0 - MASK_OUT_ABOVE_16(*r_dst);
491
492 FLAG_N = NFLAG_16(res);
493 FLAG_C = FLAG_X = CFLAG_16(res);
494 FLAG_V = (*r_dst & res)>>8;
495 FLAG_Z = MASK_OUT_ABOVE_16(res);
496
497 *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
498 }
499
500
m68k_op_neg_16_ai(void)501 void m68k_op_neg_16_ai(void)
502 {
503 uint ea = EA_AY_AI_16();
504 uint src = m68ki_read_16(ea);
505 uint res = 0 - src;
506
507 FLAG_N = NFLAG_16(res);
508 FLAG_C = FLAG_X = CFLAG_16(res);
509 FLAG_V = (src & res)>>8;
510 FLAG_Z = MASK_OUT_ABOVE_16(res);
511
512 m68ki_write_16(ea, FLAG_Z);
513 }
514
515
m68k_op_neg_16_pi(void)516 void m68k_op_neg_16_pi(void)
517 {
518 uint ea = EA_AY_PI_16();
519 uint src = m68ki_read_16(ea);
520 uint res = 0 - src;
521
522 FLAG_N = NFLAG_16(res);
523 FLAG_C = FLAG_X = CFLAG_16(res);
524 FLAG_V = (src & res)>>8;
525 FLAG_Z = MASK_OUT_ABOVE_16(res);
526
527 m68ki_write_16(ea, FLAG_Z);
528 }
529
530
m68k_op_neg_16_pd(void)531 void m68k_op_neg_16_pd(void)
532 {
533 uint ea = EA_AY_PD_16();
534 uint src = m68ki_read_16(ea);
535 uint res = 0 - src;
536
537 FLAG_N = NFLAG_16(res);
538 FLAG_C = FLAG_X = CFLAG_16(res);
539 FLAG_V = (src & res)>>8;
540 FLAG_Z = MASK_OUT_ABOVE_16(res);
541
542 m68ki_write_16(ea, FLAG_Z);
543 }
544
545
m68k_op_neg_16_di(void)546 void m68k_op_neg_16_di(void)
547 {
548 uint ea = EA_AY_DI_16();
549 uint src = m68ki_read_16(ea);
550 uint res = 0 - src;
551
552 FLAG_N = NFLAG_16(res);
553 FLAG_C = FLAG_X = CFLAG_16(res);
554 FLAG_V = (src & res)>>8;
555 FLAG_Z = MASK_OUT_ABOVE_16(res);
556
557 m68ki_write_16(ea, FLAG_Z);
558 }
559
560
m68k_op_neg_16_ix(void)561 void m68k_op_neg_16_ix(void)
562 {
563 uint ea = EA_AY_IX_16();
564 uint src = m68ki_read_16(ea);
565 uint res = 0 - src;
566
567 FLAG_N = NFLAG_16(res);
568 FLAG_C = FLAG_X = CFLAG_16(res);
569 FLAG_V = (src & res)>>8;
570 FLAG_Z = MASK_OUT_ABOVE_16(res);
571
572 m68ki_write_16(ea, FLAG_Z);
573 }
574
575
m68k_op_neg_16_aw(void)576 void m68k_op_neg_16_aw(void)
577 {
578 uint ea = EA_AW_16();
579 uint src = m68ki_read_16(ea);
580 uint res = 0 - src;
581
582 FLAG_N = NFLAG_16(res);
583 FLAG_C = FLAG_X = CFLAG_16(res);
584 FLAG_V = (src & res)>>8;
585 FLAG_Z = MASK_OUT_ABOVE_16(res);
586
587 m68ki_write_16(ea, FLAG_Z);
588 }
589
590
m68k_op_neg_16_al(void)591 void m68k_op_neg_16_al(void)
592 {
593 uint ea = EA_AL_16();
594 uint src = m68ki_read_16(ea);
595 uint res = 0 - src;
596
597 FLAG_N = NFLAG_16(res);
598 FLAG_C = FLAG_X = CFLAG_16(res);
599 FLAG_V = (src & res)>>8;
600 FLAG_Z = MASK_OUT_ABOVE_16(res);
601
602 m68ki_write_16(ea, FLAG_Z);
603 }
604
605
m68k_op_neg_32_d(void)606 void m68k_op_neg_32_d(void)
607 {
608 uint* r_dst = &DY;
609 uint res = 0 - *r_dst;
610
611 FLAG_N = NFLAG_32(res);
612 FLAG_C = FLAG_X = CFLAG_SUB_32(*r_dst, 0, res);
613 FLAG_V = (*r_dst & res)>>24;
614 FLAG_Z = MASK_OUT_ABOVE_32(res);
615
616 *r_dst = FLAG_Z;
617 }
618
619
m68k_op_neg_32_ai(void)620 void m68k_op_neg_32_ai(void)
621 {
622 uint ea = EA_AY_AI_32();
623 uint src = m68ki_read_32(ea);
624 uint res = 0 - src;
625
626 FLAG_N = NFLAG_32(res);
627 FLAG_C = FLAG_X = CFLAG_SUB_32(src, 0, res);
628 FLAG_V = (src & res)>>24;
629 FLAG_Z = MASK_OUT_ABOVE_32(res);
630
631 m68ki_write_32(ea, FLAG_Z);
632 }
633
634
m68k_op_neg_32_pi(void)635 void m68k_op_neg_32_pi(void)
636 {
637 uint ea = EA_AY_PI_32();
638 uint src = m68ki_read_32(ea);
639 uint res = 0 - src;
640
641 FLAG_N = NFLAG_32(res);
642 FLAG_C = FLAG_X = CFLAG_SUB_32(src, 0, res);
643 FLAG_V = (src & res)>>24;
644 FLAG_Z = MASK_OUT_ABOVE_32(res);
645
646 m68ki_write_32(ea, FLAG_Z);
647 }
648
649
m68k_op_neg_32_pd(void)650 void m68k_op_neg_32_pd(void)
651 {
652 uint ea = EA_AY_PD_32();
653 uint src = m68ki_read_32(ea);
654 uint res = 0 - src;
655
656 FLAG_N = NFLAG_32(res);
657 FLAG_C = FLAG_X = CFLAG_SUB_32(src, 0, res);
658 FLAG_V = (src & res)>>24;
659 FLAG_Z = MASK_OUT_ABOVE_32(res);
660
661 m68ki_write_32(ea, FLAG_Z);
662 }
663
664
m68k_op_neg_32_di(void)665 void m68k_op_neg_32_di(void)
666 {
667 uint ea = EA_AY_DI_32();
668 uint src = m68ki_read_32(ea);
669 uint res = 0 - src;
670
671 FLAG_N = NFLAG_32(res);
672 FLAG_C = FLAG_X = CFLAG_SUB_32(src, 0, res);
673 FLAG_V = (src & res)>>24;
674 FLAG_Z = MASK_OUT_ABOVE_32(res);
675
676 m68ki_write_32(ea, FLAG_Z);
677 }
678
679
m68k_op_neg_32_ix(void)680 void m68k_op_neg_32_ix(void)
681 {
682 uint ea = EA_AY_IX_32();
683 uint src = m68ki_read_32(ea);
684 uint res = 0 - src;
685
686 FLAG_N = NFLAG_32(res);
687 FLAG_C = FLAG_X = CFLAG_SUB_32(src, 0, res);
688 FLAG_V = (src & res)>>24;
689 FLAG_Z = MASK_OUT_ABOVE_32(res);
690
691 m68ki_write_32(ea, FLAG_Z);
692 }
693
694
m68k_op_neg_32_aw(void)695 void m68k_op_neg_32_aw(void)
696 {
697 uint ea = EA_AW_32();
698 uint src = m68ki_read_32(ea);
699 uint res = 0 - src;
700
701 FLAG_N = NFLAG_32(res);
702 FLAG_C = FLAG_X = CFLAG_SUB_32(src, 0, res);
703 FLAG_V = (src & res)>>24;
704 FLAG_Z = MASK_OUT_ABOVE_32(res);
705
706 m68ki_write_32(ea, FLAG_Z);
707 }
708
709
m68k_op_neg_32_al(void)710 void m68k_op_neg_32_al(void)
711 {
712 uint ea = EA_AL_32();
713 uint src = m68ki_read_32(ea);
714 uint res = 0 - src;
715
716 FLAG_N = NFLAG_32(res);
717 FLAG_C = FLAG_X = CFLAG_SUB_32(src, 0, res);
718 FLAG_V = (src & res)>>24;
719 FLAG_Z = MASK_OUT_ABOVE_32(res);
720
721 m68ki_write_32(ea, FLAG_Z);
722 }
723
724
m68k_op_negx_8_d(void)725 void m68k_op_negx_8_d(void)
726 {
727 uint* r_dst = &DY;
728 uint res = 0 - MASK_OUT_ABOVE_8(*r_dst) - XFLAG_AS_1();
729
730 FLAG_N = NFLAG_8(res);
731 FLAG_X = FLAG_C = CFLAG_8(res);
732 FLAG_V = *r_dst & res;
733
734 res = MASK_OUT_ABOVE_8(res);
735 FLAG_Z |= res;
736
737 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
738 }
739
740
m68k_op_negx_8_ai(void)741 void m68k_op_negx_8_ai(void)
742 {
743 uint ea = EA_AY_AI_8();
744 uint src = m68ki_read_8(ea);
745 uint res = 0 - src - XFLAG_AS_1();
746
747 FLAG_N = NFLAG_8(res);
748 FLAG_X = FLAG_C = CFLAG_8(res);
749 FLAG_V = src & res;
750
751 res = MASK_OUT_ABOVE_8(res);
752 FLAG_Z |= res;
753
754 m68ki_write_8(ea, res);
755 }
756
757
m68k_op_negx_8_pi(void)758 void m68k_op_negx_8_pi(void)
759 {
760 uint ea = EA_AY_PI_8();
761 uint src = m68ki_read_8(ea);
762 uint res = 0 - src - XFLAG_AS_1();
763
764 FLAG_N = NFLAG_8(res);
765 FLAG_X = FLAG_C = CFLAG_8(res);
766 FLAG_V = src & res;
767
768 res = MASK_OUT_ABOVE_8(res);
769 FLAG_Z |= res;
770
771 m68ki_write_8(ea, res);
772 }
773
774
m68k_op_negx_8_pi7(void)775 void m68k_op_negx_8_pi7(void)
776 {
777 uint ea = EA_A7_PI_8();
778 uint src = m68ki_read_8(ea);
779 uint res = 0 - src - XFLAG_AS_1();
780
781 FLAG_N = NFLAG_8(res);
782 FLAG_X = FLAG_C = CFLAG_8(res);
783 FLAG_V = src & res;
784
785 res = MASK_OUT_ABOVE_8(res);
786 FLAG_Z |= res;
787
788 m68ki_write_8(ea, res);
789 }
790
791
m68k_op_negx_8_pd(void)792 void m68k_op_negx_8_pd(void)
793 {
794 uint ea = EA_AY_PD_8();
795 uint src = m68ki_read_8(ea);
796 uint res = 0 - src - XFLAG_AS_1();
797
798 FLAG_N = NFLAG_8(res);
799 FLAG_X = FLAG_C = CFLAG_8(res);
800 FLAG_V = src & res;
801
802 res = MASK_OUT_ABOVE_8(res);
803 FLAG_Z |= res;
804
805 m68ki_write_8(ea, res);
806 }
807
808
m68k_op_negx_8_pd7(void)809 void m68k_op_negx_8_pd7(void)
810 {
811 uint ea = EA_A7_PD_8();
812 uint src = m68ki_read_8(ea);
813 uint res = 0 - src - XFLAG_AS_1();
814
815 FLAG_N = NFLAG_8(res);
816 FLAG_X = FLAG_C = CFLAG_8(res);
817 FLAG_V = src & res;
818
819 res = MASK_OUT_ABOVE_8(res);
820 FLAG_Z |= res;
821
822 m68ki_write_8(ea, res);
823 }
824
825
m68k_op_negx_8_di(void)826 void m68k_op_negx_8_di(void)
827 {
828 uint ea = EA_AY_DI_8();
829 uint src = m68ki_read_8(ea);
830 uint res = 0 - src - XFLAG_AS_1();
831
832 FLAG_N = NFLAG_8(res);
833 FLAG_X = FLAG_C = CFLAG_8(res);
834 FLAG_V = src & res;
835
836 res = MASK_OUT_ABOVE_8(res);
837 FLAG_Z |= res;
838
839 m68ki_write_8(ea, res);
840 }
841
842
m68k_op_negx_8_ix(void)843 void m68k_op_negx_8_ix(void)
844 {
845 uint ea = EA_AY_IX_8();
846 uint src = m68ki_read_8(ea);
847 uint res = 0 - src - XFLAG_AS_1();
848
849 FLAG_N = NFLAG_8(res);
850 FLAG_X = FLAG_C = CFLAG_8(res);
851 FLAG_V = src & res;
852
853 res = MASK_OUT_ABOVE_8(res);
854 FLAG_Z |= res;
855
856 m68ki_write_8(ea, res);
857 }
858
859
m68k_op_negx_8_aw(void)860 void m68k_op_negx_8_aw(void)
861 {
862 uint ea = EA_AW_8();
863 uint src = m68ki_read_8(ea);
864 uint res = 0 - src - XFLAG_AS_1();
865
866 FLAG_N = NFLAG_8(res);
867 FLAG_X = FLAG_C = CFLAG_8(res);
868 FLAG_V = src & res;
869
870 res = MASK_OUT_ABOVE_8(res);
871 FLAG_Z |= res;
872
873 m68ki_write_8(ea, res);
874 }
875
876
m68k_op_negx_8_al(void)877 void m68k_op_negx_8_al(void)
878 {
879 uint ea = EA_AL_8();
880 uint src = m68ki_read_8(ea);
881 uint res = 0 - src - XFLAG_AS_1();
882
883 FLAG_N = NFLAG_8(res);
884 FLAG_X = FLAG_C = CFLAG_8(res);
885 FLAG_V = src & res;
886
887 res = MASK_OUT_ABOVE_8(res);
888 FLAG_Z |= res;
889
890 m68ki_write_8(ea, res);
891 }
892
893
m68k_op_negx_16_d(void)894 void m68k_op_negx_16_d(void)
895 {
896 uint* r_dst = &DY;
897 uint res = 0 - MASK_OUT_ABOVE_16(*r_dst) - XFLAG_AS_1();
898
899 FLAG_N = NFLAG_16(res);
900 FLAG_X = FLAG_C = CFLAG_16(res);
901 FLAG_V = (*r_dst & res)>>8;
902
903 res = MASK_OUT_ABOVE_16(res);
904 FLAG_Z |= res;
905
906 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
907 }
908
909
m68k_op_negx_16_ai(void)910 void m68k_op_negx_16_ai(void)
911 {
912 uint ea = EA_AY_AI_16();
913 uint src = m68ki_read_16(ea);
914 uint res = 0 - MASK_OUT_ABOVE_16(src) - XFLAG_AS_1();
915
916 FLAG_N = NFLAG_16(res);
917 FLAG_X = FLAG_C = CFLAG_16(res);
918 FLAG_V = (src & res)>>8;
919
920 res = MASK_OUT_ABOVE_16(res);
921 FLAG_Z |= res;
922
923 m68ki_write_16(ea, res);
924 }
925
926
m68k_op_negx_16_pi(void)927 void m68k_op_negx_16_pi(void)
928 {
929 uint ea = EA_AY_PI_16();
930 uint src = m68ki_read_16(ea);
931 uint res = 0 - MASK_OUT_ABOVE_16(src) - XFLAG_AS_1();
932
933 FLAG_N = NFLAG_16(res);
934 FLAG_X = FLAG_C = CFLAG_16(res);
935 FLAG_V = (src & res)>>8;
936
937 res = MASK_OUT_ABOVE_16(res);
938 FLAG_Z |= res;
939
940 m68ki_write_16(ea, res);
941 }
942
943
m68k_op_negx_16_pd(void)944 void m68k_op_negx_16_pd(void)
945 {
946 uint ea = EA_AY_PD_16();
947 uint src = m68ki_read_16(ea);
948 uint res = 0 - MASK_OUT_ABOVE_16(src) - XFLAG_AS_1();
949
950 FLAG_N = NFLAG_16(res);
951 FLAG_X = FLAG_C = CFLAG_16(res);
952 FLAG_V = (src & res)>>8;
953
954 res = MASK_OUT_ABOVE_16(res);
955 FLAG_Z |= res;
956
957 m68ki_write_16(ea, res);
958 }
959
960
m68k_op_negx_16_di(void)961 void m68k_op_negx_16_di(void)
962 {
963 uint ea = EA_AY_DI_16();
964 uint src = m68ki_read_16(ea);
965 uint res = 0 - MASK_OUT_ABOVE_16(src) - XFLAG_AS_1();
966
967 FLAG_N = NFLAG_16(res);
968 FLAG_X = FLAG_C = CFLAG_16(res);
969 FLAG_V = (src & res)>>8;
970
971 res = MASK_OUT_ABOVE_16(res);
972 FLAG_Z |= res;
973
974 m68ki_write_16(ea, res);
975 }
976
977
m68k_op_negx_16_ix(void)978 void m68k_op_negx_16_ix(void)
979 {
980 uint ea = EA_AY_IX_16();
981 uint src = m68ki_read_16(ea);
982 uint res = 0 - MASK_OUT_ABOVE_16(src) - XFLAG_AS_1();
983
984 FLAG_N = NFLAG_16(res);
985 FLAG_X = FLAG_C = CFLAG_16(res);
986 FLAG_V = (src & res)>>8;
987
988 res = MASK_OUT_ABOVE_16(res);
989 FLAG_Z |= res;
990
991 m68ki_write_16(ea, res);
992 }
993
994
m68k_op_negx_16_aw(void)995 void m68k_op_negx_16_aw(void)
996 {
997 uint ea = EA_AW_16();
998 uint src = m68ki_read_16(ea);
999 uint res = 0 - MASK_OUT_ABOVE_16(src) - XFLAG_AS_1();
1000
1001 FLAG_N = NFLAG_16(res);
1002 FLAG_X = FLAG_C = CFLAG_16(res);
1003 FLAG_V = (src & res)>>8;
1004
1005 res = MASK_OUT_ABOVE_16(res);
1006 FLAG_Z |= res;
1007
1008 m68ki_write_16(ea, res);
1009 }
1010
1011
m68k_op_negx_16_al(void)1012 void m68k_op_negx_16_al(void)
1013 {
1014 uint ea = EA_AL_16();
1015 uint src = m68ki_read_16(ea);
1016 uint res = 0 - MASK_OUT_ABOVE_16(src) - XFLAG_AS_1();
1017
1018 FLAG_N = NFLAG_16(res);
1019 FLAG_X = FLAG_C = CFLAG_16(res);
1020 FLAG_V = (src & res)>>8;
1021
1022 res = MASK_OUT_ABOVE_16(res);
1023 FLAG_Z |= res;
1024
1025 m68ki_write_16(ea, res);
1026 }
1027
1028
m68k_op_negx_32_d(void)1029 void m68k_op_negx_32_d(void)
1030 {
1031 uint* r_dst = &DY;
1032 uint res = 0 - MASK_OUT_ABOVE_32(*r_dst) - XFLAG_AS_1();
1033
1034 FLAG_N = NFLAG_32(res);
1035 FLAG_X = FLAG_C = CFLAG_SUB_32(*r_dst, 0, res);
1036 FLAG_V = (*r_dst & res)>>24;
1037
1038 res = MASK_OUT_ABOVE_32(res);
1039 FLAG_Z |= res;
1040
1041 *r_dst = res;
1042 }
1043
1044
m68k_op_negx_32_ai(void)1045 void m68k_op_negx_32_ai(void)
1046 {
1047 uint ea = EA_AY_AI_32();
1048 uint src = m68ki_read_32(ea);
1049 uint res = 0 - MASK_OUT_ABOVE_32(src) - XFLAG_AS_1();
1050
1051 FLAG_N = NFLAG_32(res);
1052 FLAG_X = FLAG_C = CFLAG_SUB_32(src, 0, res);
1053 FLAG_V = (src & res)>>24;
1054
1055 res = MASK_OUT_ABOVE_32(res);
1056 FLAG_Z |= res;
1057
1058 m68ki_write_32(ea, res);
1059 }
1060
1061
m68k_op_negx_32_pi(void)1062 void m68k_op_negx_32_pi(void)
1063 {
1064 uint ea = EA_AY_PI_32();
1065 uint src = m68ki_read_32(ea);
1066 uint res = 0 - MASK_OUT_ABOVE_32(src) - XFLAG_AS_1();
1067
1068 FLAG_N = NFLAG_32(res);
1069 FLAG_X = FLAG_C = CFLAG_SUB_32(src, 0, res);
1070 FLAG_V = (src & res)>>24;
1071
1072 res = MASK_OUT_ABOVE_32(res);
1073 FLAG_Z |= res;
1074
1075 m68ki_write_32(ea, res);
1076 }
1077
1078
m68k_op_negx_32_pd(void)1079 void m68k_op_negx_32_pd(void)
1080 {
1081 uint ea = EA_AY_PD_32();
1082 uint src = m68ki_read_32(ea);
1083 uint res = 0 - MASK_OUT_ABOVE_32(src) - XFLAG_AS_1();
1084
1085 FLAG_N = NFLAG_32(res);
1086 FLAG_X = FLAG_C = CFLAG_SUB_32(src, 0, res);
1087 FLAG_V = (src & res)>>24;
1088
1089 res = MASK_OUT_ABOVE_32(res);
1090 FLAG_Z |= res;
1091
1092 m68ki_write_32(ea, res);
1093 }
1094
1095
m68k_op_negx_32_di(void)1096 void m68k_op_negx_32_di(void)
1097 {
1098 uint ea = EA_AY_DI_32();
1099 uint src = m68ki_read_32(ea);
1100 uint res = 0 - MASK_OUT_ABOVE_32(src) - XFLAG_AS_1();
1101
1102 FLAG_N = NFLAG_32(res);
1103 FLAG_X = FLAG_C = CFLAG_SUB_32(src, 0, res);
1104 FLAG_V = (src & res)>>24;
1105
1106 res = MASK_OUT_ABOVE_32(res);
1107 FLAG_Z |= res;
1108
1109 m68ki_write_32(ea, res);
1110 }
1111
1112
m68k_op_negx_32_ix(void)1113 void m68k_op_negx_32_ix(void)
1114 {
1115 uint ea = EA_AY_IX_32();
1116 uint src = m68ki_read_32(ea);
1117 uint res = 0 - MASK_OUT_ABOVE_32(src) - XFLAG_AS_1();
1118
1119 FLAG_N = NFLAG_32(res);
1120 FLAG_X = FLAG_C = CFLAG_SUB_32(src, 0, res);
1121 FLAG_V = (src & res)>>24;
1122
1123 res = MASK_OUT_ABOVE_32(res);
1124 FLAG_Z |= res;
1125
1126 m68ki_write_32(ea, res);
1127 }
1128
1129
m68k_op_negx_32_aw(void)1130 void m68k_op_negx_32_aw(void)
1131 {
1132 uint ea = EA_AW_32();
1133 uint src = m68ki_read_32(ea);
1134 uint res = 0 - MASK_OUT_ABOVE_32(src) - XFLAG_AS_1();
1135
1136 FLAG_N = NFLAG_32(res);
1137 FLAG_X = FLAG_C = CFLAG_SUB_32(src, 0, res);
1138 FLAG_V = (src & res)>>24;
1139
1140 res = MASK_OUT_ABOVE_32(res);
1141 FLAG_Z |= res;
1142
1143 m68ki_write_32(ea, res);
1144 }
1145
1146
m68k_op_negx_32_al(void)1147 void m68k_op_negx_32_al(void)
1148 {
1149 uint ea = EA_AL_32();
1150 uint src = m68ki_read_32(ea);
1151 uint res = 0 - MASK_OUT_ABOVE_32(src) - XFLAG_AS_1();
1152
1153 FLAG_N = NFLAG_32(res);
1154 FLAG_X = FLAG_C = CFLAG_SUB_32(src, 0, res);
1155 FLAG_V = (src & res)>>24;
1156
1157 res = MASK_OUT_ABOVE_32(res);
1158 FLAG_Z |= res;
1159
1160 m68ki_write_32(ea, res);
1161 }
1162
1163
m68k_op_nop(void)1164 void m68k_op_nop(void)
1165 {
1166 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
1167 }
1168
1169
m68k_op_not_8_d(void)1170 void m68k_op_not_8_d(void)
1171 {
1172 uint* r_dst = &DY;
1173 uint res = MASK_OUT_ABOVE_8(~*r_dst);
1174
1175 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
1176
1177 FLAG_N = NFLAG_8(res);
1178 FLAG_Z = res;
1179 FLAG_C = CFLAG_CLEAR;
1180 FLAG_V = VFLAG_CLEAR;
1181 }
1182
1183
m68k_op_not_8_ai(void)1184 void m68k_op_not_8_ai(void)
1185 {
1186 uint ea = EA_AY_AI_8();
1187 uint res = MASK_OUT_ABOVE_8(~m68ki_read_8(ea));
1188
1189 m68ki_write_8(ea, res);
1190
1191 FLAG_N = NFLAG_8(res);
1192 FLAG_Z = res;
1193 FLAG_C = CFLAG_CLEAR;
1194 FLAG_V = VFLAG_CLEAR;
1195 }
1196
1197
m68k_op_not_8_pi(void)1198 void m68k_op_not_8_pi(void)
1199 {
1200 uint ea = EA_AY_PI_8();
1201 uint res = MASK_OUT_ABOVE_8(~m68ki_read_8(ea));
1202
1203 m68ki_write_8(ea, res);
1204
1205 FLAG_N = NFLAG_8(res);
1206 FLAG_Z = res;
1207 FLAG_C = CFLAG_CLEAR;
1208 FLAG_V = VFLAG_CLEAR;
1209 }
1210
1211
m68k_op_not_8_pi7(void)1212 void m68k_op_not_8_pi7(void)
1213 {
1214 uint ea = EA_A7_PI_8();
1215 uint res = MASK_OUT_ABOVE_8(~m68ki_read_8(ea));
1216
1217 m68ki_write_8(ea, res);
1218
1219 FLAG_N = NFLAG_8(res);
1220 FLAG_Z = res;
1221 FLAG_C = CFLAG_CLEAR;
1222 FLAG_V = VFLAG_CLEAR;
1223 }
1224
1225
m68k_op_not_8_pd(void)1226 void m68k_op_not_8_pd(void)
1227 {
1228 uint ea = EA_AY_PD_8();
1229 uint res = MASK_OUT_ABOVE_8(~m68ki_read_8(ea));
1230
1231 m68ki_write_8(ea, res);
1232
1233 FLAG_N = NFLAG_8(res);
1234 FLAG_Z = res;
1235 FLAG_C = CFLAG_CLEAR;
1236 FLAG_V = VFLAG_CLEAR;
1237 }
1238
1239
m68k_op_not_8_pd7(void)1240 void m68k_op_not_8_pd7(void)
1241 {
1242 uint ea = EA_A7_PD_8();
1243 uint res = MASK_OUT_ABOVE_8(~m68ki_read_8(ea));
1244
1245 m68ki_write_8(ea, res);
1246
1247 FLAG_N = NFLAG_8(res);
1248 FLAG_Z = res;
1249 FLAG_C = CFLAG_CLEAR;
1250 FLAG_V = VFLAG_CLEAR;
1251 }
1252
1253
m68k_op_not_8_di(void)1254 void m68k_op_not_8_di(void)
1255 {
1256 uint ea = EA_AY_DI_8();
1257 uint res = MASK_OUT_ABOVE_8(~m68ki_read_8(ea));
1258
1259 m68ki_write_8(ea, res);
1260
1261 FLAG_N = NFLAG_8(res);
1262 FLAG_Z = res;
1263 FLAG_C = CFLAG_CLEAR;
1264 FLAG_V = VFLAG_CLEAR;
1265 }
1266
1267
m68k_op_not_8_ix(void)1268 void m68k_op_not_8_ix(void)
1269 {
1270 uint ea = EA_AY_IX_8();
1271 uint res = MASK_OUT_ABOVE_8(~m68ki_read_8(ea));
1272
1273 m68ki_write_8(ea, res);
1274
1275 FLAG_N = NFLAG_8(res);
1276 FLAG_Z = res;
1277 FLAG_C = CFLAG_CLEAR;
1278 FLAG_V = VFLAG_CLEAR;
1279 }
1280
1281
m68k_op_not_8_aw(void)1282 void m68k_op_not_8_aw(void)
1283 {
1284 uint ea = EA_AW_8();
1285 uint res = MASK_OUT_ABOVE_8(~m68ki_read_8(ea));
1286
1287 m68ki_write_8(ea, res);
1288
1289 FLAG_N = NFLAG_8(res);
1290 FLAG_Z = res;
1291 FLAG_C = CFLAG_CLEAR;
1292 FLAG_V = VFLAG_CLEAR;
1293 }
1294
1295
m68k_op_not_8_al(void)1296 void m68k_op_not_8_al(void)
1297 {
1298 uint ea = EA_AL_8();
1299 uint res = MASK_OUT_ABOVE_8(~m68ki_read_8(ea));
1300
1301 m68ki_write_8(ea, res);
1302
1303 FLAG_N = NFLAG_8(res);
1304 FLAG_Z = res;
1305 FLAG_C = CFLAG_CLEAR;
1306 FLAG_V = VFLAG_CLEAR;
1307 }
1308
1309
m68k_op_not_16_d(void)1310 void m68k_op_not_16_d(void)
1311 {
1312 uint* r_dst = &DY;
1313 uint res = MASK_OUT_ABOVE_16(~*r_dst);
1314
1315 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
1316
1317 FLAG_N = NFLAG_16(res);
1318 FLAG_Z = res;
1319 FLAG_C = CFLAG_CLEAR;
1320 FLAG_V = VFLAG_CLEAR;
1321 }
1322
1323
m68k_op_not_16_ai(void)1324 void m68k_op_not_16_ai(void)
1325 {
1326 uint ea = EA_AY_AI_16();
1327 uint res = MASK_OUT_ABOVE_16(~m68ki_read_16(ea));
1328
1329 m68ki_write_16(ea, res);
1330
1331 FLAG_N = NFLAG_16(res);
1332 FLAG_Z = res;
1333 FLAG_C = CFLAG_CLEAR;
1334 FLAG_V = VFLAG_CLEAR;
1335 }
1336
1337
m68k_op_not_16_pi(void)1338 void m68k_op_not_16_pi(void)
1339 {
1340 uint ea = EA_AY_PI_16();
1341 uint res = MASK_OUT_ABOVE_16(~m68ki_read_16(ea));
1342
1343 m68ki_write_16(ea, res);
1344
1345 FLAG_N = NFLAG_16(res);
1346 FLAG_Z = res;
1347 FLAG_C = CFLAG_CLEAR;
1348 FLAG_V = VFLAG_CLEAR;
1349 }
1350
1351
m68k_op_not_16_pd(void)1352 void m68k_op_not_16_pd(void)
1353 {
1354 uint ea = EA_AY_PD_16();
1355 uint res = MASK_OUT_ABOVE_16(~m68ki_read_16(ea));
1356
1357 m68ki_write_16(ea, res);
1358
1359 FLAG_N = NFLAG_16(res);
1360 FLAG_Z = res;
1361 FLAG_C = CFLAG_CLEAR;
1362 FLAG_V = VFLAG_CLEAR;
1363 }
1364
1365
m68k_op_not_16_di(void)1366 void m68k_op_not_16_di(void)
1367 {
1368 uint ea = EA_AY_DI_16();
1369 uint res = MASK_OUT_ABOVE_16(~m68ki_read_16(ea));
1370
1371 m68ki_write_16(ea, res);
1372
1373 FLAG_N = NFLAG_16(res);
1374 FLAG_Z = res;
1375 FLAG_C = CFLAG_CLEAR;
1376 FLAG_V = VFLAG_CLEAR;
1377 }
1378
1379
m68k_op_not_16_ix(void)1380 void m68k_op_not_16_ix(void)
1381 {
1382 uint ea = EA_AY_IX_16();
1383 uint res = MASK_OUT_ABOVE_16(~m68ki_read_16(ea));
1384
1385 m68ki_write_16(ea, res);
1386
1387 FLAG_N = NFLAG_16(res);
1388 FLAG_Z = res;
1389 FLAG_C = CFLAG_CLEAR;
1390 FLAG_V = VFLAG_CLEAR;
1391 }
1392
1393
m68k_op_not_16_aw(void)1394 void m68k_op_not_16_aw(void)
1395 {
1396 uint ea = EA_AW_16();
1397 uint res = MASK_OUT_ABOVE_16(~m68ki_read_16(ea));
1398
1399 m68ki_write_16(ea, res);
1400
1401 FLAG_N = NFLAG_16(res);
1402 FLAG_Z = res;
1403 FLAG_C = CFLAG_CLEAR;
1404 FLAG_V = VFLAG_CLEAR;
1405 }
1406
1407
m68k_op_not_16_al(void)1408 void m68k_op_not_16_al(void)
1409 {
1410 uint ea = EA_AL_16();
1411 uint res = MASK_OUT_ABOVE_16(~m68ki_read_16(ea));
1412
1413 m68ki_write_16(ea, res);
1414
1415 FLAG_N = NFLAG_16(res);
1416 FLAG_Z = res;
1417 FLAG_C = CFLAG_CLEAR;
1418 FLAG_V = VFLAG_CLEAR;
1419 }
1420
1421
m68k_op_not_32_d(void)1422 void m68k_op_not_32_d(void)
1423 {
1424 uint* r_dst = &DY;
1425 uint res = *r_dst = MASK_OUT_ABOVE_32(~*r_dst);
1426
1427 FLAG_N = NFLAG_32(res);
1428 FLAG_Z = res;
1429 FLAG_C = CFLAG_CLEAR;
1430 FLAG_V = VFLAG_CLEAR;
1431 }
1432
1433
m68k_op_not_32_ai(void)1434 void m68k_op_not_32_ai(void)
1435 {
1436 uint ea = EA_AY_AI_32();
1437 uint res = MASK_OUT_ABOVE_32(~m68ki_read_32(ea));
1438
1439 m68ki_write_32(ea, res);
1440
1441 FLAG_N = NFLAG_32(res);
1442 FLAG_Z = res;
1443 FLAG_C = CFLAG_CLEAR;
1444 FLAG_V = VFLAG_CLEAR;
1445 }
1446
1447
m68k_op_not_32_pi(void)1448 void m68k_op_not_32_pi(void)
1449 {
1450 uint ea = EA_AY_PI_32();
1451 uint res = MASK_OUT_ABOVE_32(~m68ki_read_32(ea));
1452
1453 m68ki_write_32(ea, res);
1454
1455 FLAG_N = NFLAG_32(res);
1456 FLAG_Z = res;
1457 FLAG_C = CFLAG_CLEAR;
1458 FLAG_V = VFLAG_CLEAR;
1459 }
1460
1461
m68k_op_not_32_pd(void)1462 void m68k_op_not_32_pd(void)
1463 {
1464 uint ea = EA_AY_PD_32();
1465 uint res = MASK_OUT_ABOVE_32(~m68ki_read_32(ea));
1466
1467 m68ki_write_32(ea, res);
1468
1469 FLAG_N = NFLAG_32(res);
1470 FLAG_Z = res;
1471 FLAG_C = CFLAG_CLEAR;
1472 FLAG_V = VFLAG_CLEAR;
1473 }
1474
1475
m68k_op_not_32_di(void)1476 void m68k_op_not_32_di(void)
1477 {
1478 uint ea = EA_AY_DI_32();
1479 uint res = MASK_OUT_ABOVE_32(~m68ki_read_32(ea));
1480
1481 m68ki_write_32(ea, res);
1482
1483 FLAG_N = NFLAG_32(res);
1484 FLAG_Z = res;
1485 FLAG_C = CFLAG_CLEAR;
1486 FLAG_V = VFLAG_CLEAR;
1487 }
1488
1489
m68k_op_not_32_ix(void)1490 void m68k_op_not_32_ix(void)
1491 {
1492 uint ea = EA_AY_IX_32();
1493 uint res = MASK_OUT_ABOVE_32(~m68ki_read_32(ea));
1494
1495 m68ki_write_32(ea, res);
1496
1497 FLAG_N = NFLAG_32(res);
1498 FLAG_Z = res;
1499 FLAG_C = CFLAG_CLEAR;
1500 FLAG_V = VFLAG_CLEAR;
1501 }
1502
1503
m68k_op_not_32_aw(void)1504 void m68k_op_not_32_aw(void)
1505 {
1506 uint ea = EA_AW_32();
1507 uint res = MASK_OUT_ABOVE_32(~m68ki_read_32(ea));
1508
1509 m68ki_write_32(ea, res);
1510
1511 FLAG_N = NFLAG_32(res);
1512 FLAG_Z = res;
1513 FLAG_C = CFLAG_CLEAR;
1514 FLAG_V = VFLAG_CLEAR;
1515 }
1516
1517
m68k_op_not_32_al(void)1518 void m68k_op_not_32_al(void)
1519 {
1520 uint ea = EA_AL_32();
1521 uint res = MASK_OUT_ABOVE_32(~m68ki_read_32(ea));
1522
1523 m68ki_write_32(ea, res);
1524
1525 FLAG_N = NFLAG_32(res);
1526 FLAG_Z = res;
1527 FLAG_C = CFLAG_CLEAR;
1528 FLAG_V = VFLAG_CLEAR;
1529 }
1530
1531
m68k_op_or_8_er_d(void)1532 void m68k_op_or_8_er_d(void)
1533 {
1534 uint res = MASK_OUT_ABOVE_8((DX |= MASK_OUT_ABOVE_8(DY)));
1535
1536 FLAG_N = NFLAG_8(res);
1537 FLAG_Z = res;
1538 FLAG_C = CFLAG_CLEAR;
1539 FLAG_V = VFLAG_CLEAR;
1540 }
1541
1542
m68k_op_or_8_er_ai(void)1543 void m68k_op_or_8_er_ai(void)
1544 {
1545 uint res = MASK_OUT_ABOVE_8((DX |= OPER_AY_AI_8()));
1546
1547 FLAG_N = NFLAG_8(res);
1548 FLAG_Z = res;
1549 FLAG_C = CFLAG_CLEAR;
1550 FLAG_V = VFLAG_CLEAR;
1551 }
1552
1553
m68k_op_or_8_er_pi(void)1554 void m68k_op_or_8_er_pi(void)
1555 {
1556 uint res = MASK_OUT_ABOVE_8((DX |= OPER_AY_PI_8()));
1557
1558 FLAG_N = NFLAG_8(res);
1559 FLAG_Z = res;
1560 FLAG_C = CFLAG_CLEAR;
1561 FLAG_V = VFLAG_CLEAR;
1562 }
1563
1564
m68k_op_or_8_er_pi7(void)1565 void m68k_op_or_8_er_pi7(void)
1566 {
1567 uint res = MASK_OUT_ABOVE_8((DX |= OPER_A7_PI_8()));
1568
1569 FLAG_N = NFLAG_8(res);
1570 FLAG_Z = res;
1571 FLAG_C = CFLAG_CLEAR;
1572 FLAG_V = VFLAG_CLEAR;
1573 }
1574
1575
m68k_op_or_8_er_pd(void)1576 void m68k_op_or_8_er_pd(void)
1577 {
1578 uint res = MASK_OUT_ABOVE_8((DX |= OPER_AY_PD_8()));
1579
1580 FLAG_N = NFLAG_8(res);
1581 FLAG_Z = res;
1582 FLAG_C = CFLAG_CLEAR;
1583 FLAG_V = VFLAG_CLEAR;
1584 }
1585
1586
m68k_op_or_8_er_pd7(void)1587 void m68k_op_or_8_er_pd7(void)
1588 {
1589 uint res = MASK_OUT_ABOVE_8((DX |= OPER_A7_PD_8()));
1590
1591 FLAG_N = NFLAG_8(res);
1592 FLAG_Z = res;
1593 FLAG_C = CFLAG_CLEAR;
1594 FLAG_V = VFLAG_CLEAR;
1595 }
1596
1597
m68k_op_or_8_er_di(void)1598 void m68k_op_or_8_er_di(void)
1599 {
1600 uint res = MASK_OUT_ABOVE_8((DX |= OPER_AY_DI_8()));
1601
1602 FLAG_N = NFLAG_8(res);
1603 FLAG_Z = res;
1604 FLAG_C = CFLAG_CLEAR;
1605 FLAG_V = VFLAG_CLEAR;
1606 }
1607
1608
m68k_op_or_8_er_ix(void)1609 void m68k_op_or_8_er_ix(void)
1610 {
1611 uint res = MASK_OUT_ABOVE_8((DX |= OPER_AY_IX_8()));
1612
1613 FLAG_N = NFLAG_8(res);
1614 FLAG_Z = res;
1615 FLAG_C = CFLAG_CLEAR;
1616 FLAG_V = VFLAG_CLEAR;
1617 }
1618
1619
m68k_op_or_8_er_aw(void)1620 void m68k_op_or_8_er_aw(void)
1621 {
1622 uint res = MASK_OUT_ABOVE_8((DX |= OPER_AW_8()));
1623
1624 FLAG_N = NFLAG_8(res);
1625 FLAG_Z = res;
1626 FLAG_C = CFLAG_CLEAR;
1627 FLAG_V = VFLAG_CLEAR;
1628 }
1629
1630
m68k_op_or_8_er_al(void)1631 void m68k_op_or_8_er_al(void)
1632 {
1633 uint res = MASK_OUT_ABOVE_8((DX |= OPER_AL_8()));
1634
1635 FLAG_N = NFLAG_8(res);
1636 FLAG_Z = res;
1637 FLAG_C = CFLAG_CLEAR;
1638 FLAG_V = VFLAG_CLEAR;
1639 }
1640
1641
m68k_op_or_8_er_pcdi(void)1642 void m68k_op_or_8_er_pcdi(void)
1643 {
1644 uint res = MASK_OUT_ABOVE_8((DX |= OPER_PCDI_8()));
1645
1646 FLAG_N = NFLAG_8(res);
1647 FLAG_Z = res;
1648 FLAG_C = CFLAG_CLEAR;
1649 FLAG_V = VFLAG_CLEAR;
1650 }
1651
1652
m68k_op_or_8_er_pcix(void)1653 void m68k_op_or_8_er_pcix(void)
1654 {
1655 uint res = MASK_OUT_ABOVE_8((DX |= OPER_PCIX_8()));
1656
1657 FLAG_N = NFLAG_8(res);
1658 FLAG_Z = res;
1659 FLAG_C = CFLAG_CLEAR;
1660 FLAG_V = VFLAG_CLEAR;
1661 }
1662
1663
m68k_op_or_8_er_i(void)1664 void m68k_op_or_8_er_i(void)
1665 {
1666 uint res = MASK_OUT_ABOVE_8((DX |= OPER_I_8()));
1667
1668 FLAG_N = NFLAG_8(res);
1669 FLAG_Z = res;
1670 FLAG_C = CFLAG_CLEAR;
1671 FLAG_V = VFLAG_CLEAR;
1672 }
1673
1674
m68k_op_or_16_er_d(void)1675 void m68k_op_or_16_er_d(void)
1676 {
1677 uint res = MASK_OUT_ABOVE_16((DX |= MASK_OUT_ABOVE_16(DY)));
1678
1679 FLAG_N = NFLAG_16(res);
1680 FLAG_Z = res;
1681 FLAG_C = CFLAG_CLEAR;
1682 FLAG_V = VFLAG_CLEAR;
1683 }
1684
1685
m68k_op_or_16_er_ai(void)1686 void m68k_op_or_16_er_ai(void)
1687 {
1688 uint res = MASK_OUT_ABOVE_16((DX |= OPER_AY_AI_16()));
1689
1690 FLAG_N = NFLAG_16(res);
1691 FLAG_Z = res;
1692 FLAG_C = CFLAG_CLEAR;
1693 FLAG_V = VFLAG_CLEAR;
1694 }
1695
1696
m68k_op_or_16_er_pi(void)1697 void m68k_op_or_16_er_pi(void)
1698 {
1699 uint res = MASK_OUT_ABOVE_16((DX |= OPER_AY_PI_16()));
1700
1701 FLAG_N = NFLAG_16(res);
1702 FLAG_Z = res;
1703 FLAG_C = CFLAG_CLEAR;
1704 FLAG_V = VFLAG_CLEAR;
1705 }
1706
1707
m68k_op_or_16_er_pd(void)1708 void m68k_op_or_16_er_pd(void)
1709 {
1710 uint res = MASK_OUT_ABOVE_16((DX |= OPER_AY_PD_16()));
1711
1712 FLAG_N = NFLAG_16(res);
1713 FLAG_Z = res;
1714 FLAG_C = CFLAG_CLEAR;
1715 FLAG_V = VFLAG_CLEAR;
1716 }
1717
1718
m68k_op_or_16_er_di(void)1719 void m68k_op_or_16_er_di(void)
1720 {
1721 uint res = MASK_OUT_ABOVE_16((DX |= OPER_AY_DI_16()));
1722
1723 FLAG_N = NFLAG_16(res);
1724 FLAG_Z = res;
1725 FLAG_C = CFLAG_CLEAR;
1726 FLAG_V = VFLAG_CLEAR;
1727 }
1728
1729
m68k_op_or_16_er_ix(void)1730 void m68k_op_or_16_er_ix(void)
1731 {
1732 uint res = MASK_OUT_ABOVE_16((DX |= OPER_AY_IX_16()));
1733
1734 FLAG_N = NFLAG_16(res);
1735 FLAG_Z = res;
1736 FLAG_C = CFLAG_CLEAR;
1737 FLAG_V = VFLAG_CLEAR;
1738 }
1739
1740
m68k_op_or_16_er_aw(void)1741 void m68k_op_or_16_er_aw(void)
1742 {
1743 uint res = MASK_OUT_ABOVE_16((DX |= OPER_AW_16()));
1744
1745 FLAG_N = NFLAG_16(res);
1746 FLAG_Z = res;
1747 FLAG_C = CFLAG_CLEAR;
1748 FLAG_V = VFLAG_CLEAR;
1749 }
1750
1751
m68k_op_or_16_er_al(void)1752 void m68k_op_or_16_er_al(void)
1753 {
1754 uint res = MASK_OUT_ABOVE_16((DX |= OPER_AL_16()));
1755
1756 FLAG_N = NFLAG_16(res);
1757 FLAG_Z = res;
1758 FLAG_C = CFLAG_CLEAR;
1759 FLAG_V = VFLAG_CLEAR;
1760 }
1761
1762
m68k_op_or_16_er_pcdi(void)1763 void m68k_op_or_16_er_pcdi(void)
1764 {
1765 uint res = MASK_OUT_ABOVE_16((DX |= OPER_PCDI_16()));
1766
1767 FLAG_N = NFLAG_16(res);
1768 FLAG_Z = res;
1769 FLAG_C = CFLAG_CLEAR;
1770 FLAG_V = VFLAG_CLEAR;
1771 }
1772
1773
m68k_op_or_16_er_pcix(void)1774 void m68k_op_or_16_er_pcix(void)
1775 {
1776 uint res = MASK_OUT_ABOVE_16((DX |= OPER_PCIX_16()));
1777
1778 FLAG_N = NFLAG_16(res);
1779 FLAG_Z = res;
1780 FLAG_C = CFLAG_CLEAR;
1781 FLAG_V = VFLAG_CLEAR;
1782 }
1783
1784
m68k_op_or_16_er_i(void)1785 void m68k_op_or_16_er_i(void)
1786 {
1787 uint res = MASK_OUT_ABOVE_16((DX |= OPER_I_16()));
1788
1789 FLAG_N = NFLAG_16(res);
1790 FLAG_Z = res;
1791 FLAG_C = CFLAG_CLEAR;
1792 FLAG_V = VFLAG_CLEAR;
1793 }
1794
1795
m68k_op_or_32_er_d(void)1796 void m68k_op_or_32_er_d(void)
1797 {
1798 uint res = DX |= DY;
1799
1800 FLAG_N = NFLAG_32(res);
1801 FLAG_Z = res;
1802 FLAG_C = CFLAG_CLEAR;
1803 FLAG_V = VFLAG_CLEAR;
1804 }
1805
1806
m68k_op_or_32_er_ai(void)1807 void m68k_op_or_32_er_ai(void)
1808 {
1809 uint res = DX |= OPER_AY_AI_32();
1810
1811 FLAG_N = NFLAG_32(res);
1812 FLAG_Z = res;
1813 FLAG_C = CFLAG_CLEAR;
1814 FLAG_V = VFLAG_CLEAR;
1815 }
1816
1817
m68k_op_or_32_er_pi(void)1818 void m68k_op_or_32_er_pi(void)
1819 {
1820 uint res = DX |= OPER_AY_PI_32();
1821
1822 FLAG_N = NFLAG_32(res);
1823 FLAG_Z = res;
1824 FLAG_C = CFLAG_CLEAR;
1825 FLAG_V = VFLAG_CLEAR;
1826 }
1827
1828
m68k_op_or_32_er_pd(void)1829 void m68k_op_or_32_er_pd(void)
1830 {
1831 uint res = DX |= OPER_AY_PD_32();
1832
1833 FLAG_N = NFLAG_32(res);
1834 FLAG_Z = res;
1835 FLAG_C = CFLAG_CLEAR;
1836 FLAG_V = VFLAG_CLEAR;
1837 }
1838
1839
m68k_op_or_32_er_di(void)1840 void m68k_op_or_32_er_di(void)
1841 {
1842 uint res = DX |= OPER_AY_DI_32();
1843
1844 FLAG_N = NFLAG_32(res);
1845 FLAG_Z = res;
1846 FLAG_C = CFLAG_CLEAR;
1847 FLAG_V = VFLAG_CLEAR;
1848 }
1849
1850
m68k_op_or_32_er_ix(void)1851 void m68k_op_or_32_er_ix(void)
1852 {
1853 uint res = DX |= OPER_AY_IX_32();
1854
1855 FLAG_N = NFLAG_32(res);
1856 FLAG_Z = res;
1857 FLAG_C = CFLAG_CLEAR;
1858 FLAG_V = VFLAG_CLEAR;
1859 }
1860
1861
m68k_op_or_32_er_aw(void)1862 void m68k_op_or_32_er_aw(void)
1863 {
1864 uint res = DX |= OPER_AW_32();
1865
1866 FLAG_N = NFLAG_32(res);
1867 FLAG_Z = res;
1868 FLAG_C = CFLAG_CLEAR;
1869 FLAG_V = VFLAG_CLEAR;
1870 }
1871
1872
m68k_op_or_32_er_al(void)1873 void m68k_op_or_32_er_al(void)
1874 {
1875 uint res = DX |= OPER_AL_32();
1876
1877 FLAG_N = NFLAG_32(res);
1878 FLAG_Z = res;
1879 FLAG_C = CFLAG_CLEAR;
1880 FLAG_V = VFLAG_CLEAR;
1881 }
1882
1883
m68k_op_or_32_er_pcdi(void)1884 void m68k_op_or_32_er_pcdi(void)
1885 {
1886 uint res = DX |= OPER_PCDI_32();
1887
1888 FLAG_N = NFLAG_32(res);
1889 FLAG_Z = res;
1890 FLAG_C = CFLAG_CLEAR;
1891 FLAG_V = VFLAG_CLEAR;
1892 }
1893
1894
m68k_op_or_32_er_pcix(void)1895 void m68k_op_or_32_er_pcix(void)
1896 {
1897 uint res = DX |= OPER_PCIX_32();
1898
1899 FLAG_N = NFLAG_32(res);
1900 FLAG_Z = res;
1901 FLAG_C = CFLAG_CLEAR;
1902 FLAG_V = VFLAG_CLEAR;
1903 }
1904
1905
m68k_op_or_32_er_i(void)1906 void m68k_op_or_32_er_i(void)
1907 {
1908 uint res = DX |= OPER_I_32();
1909
1910 FLAG_N = NFLAG_32(res);
1911 FLAG_Z = res;
1912 FLAG_C = CFLAG_CLEAR;
1913 FLAG_V = VFLAG_CLEAR;
1914 }
1915
1916
m68k_op_or_8_re_ai(void)1917 void m68k_op_or_8_re_ai(void)
1918 {
1919 uint ea = EA_AY_AI_8();
1920 uint res = MASK_OUT_ABOVE_8(DX | m68ki_read_8(ea));
1921
1922 m68ki_write_8(ea, res);
1923
1924 FLAG_N = NFLAG_8(res);
1925 FLAG_Z = res;
1926 FLAG_C = CFLAG_CLEAR;
1927 FLAG_V = VFLAG_CLEAR;
1928 }
1929
1930
m68k_op_or_8_re_pi(void)1931 void m68k_op_or_8_re_pi(void)
1932 {
1933 uint ea = EA_AY_PI_8();
1934 uint res = MASK_OUT_ABOVE_8(DX | m68ki_read_8(ea));
1935
1936 m68ki_write_8(ea, res);
1937
1938 FLAG_N = NFLAG_8(res);
1939 FLAG_Z = res;
1940 FLAG_C = CFLAG_CLEAR;
1941 FLAG_V = VFLAG_CLEAR;
1942 }
1943
1944
m68k_op_or_8_re_pi7(void)1945 void m68k_op_or_8_re_pi7(void)
1946 {
1947 uint ea = EA_A7_PI_8();
1948 uint res = MASK_OUT_ABOVE_8(DX | m68ki_read_8(ea));
1949
1950 m68ki_write_8(ea, res);
1951
1952 FLAG_N = NFLAG_8(res);
1953 FLAG_Z = res;
1954 FLAG_C = CFLAG_CLEAR;
1955 FLAG_V = VFLAG_CLEAR;
1956 }
1957
1958
m68k_op_or_8_re_pd(void)1959 void m68k_op_or_8_re_pd(void)
1960 {
1961 uint ea = EA_AY_PD_8();
1962 uint res = MASK_OUT_ABOVE_8(DX | m68ki_read_8(ea));
1963
1964 m68ki_write_8(ea, res);
1965
1966 FLAG_N = NFLAG_8(res);
1967 FLAG_Z = res;
1968 FLAG_C = CFLAG_CLEAR;
1969 FLAG_V = VFLAG_CLEAR;
1970 }
1971
1972
m68k_op_or_8_re_pd7(void)1973 void m68k_op_or_8_re_pd7(void)
1974 {
1975 uint ea = EA_A7_PD_8();
1976 uint res = MASK_OUT_ABOVE_8(DX | m68ki_read_8(ea));
1977
1978 m68ki_write_8(ea, res);
1979
1980 FLAG_N = NFLAG_8(res);
1981 FLAG_Z = res;
1982 FLAG_C = CFLAG_CLEAR;
1983 FLAG_V = VFLAG_CLEAR;
1984 }
1985
1986
m68k_op_or_8_re_di(void)1987 void m68k_op_or_8_re_di(void)
1988 {
1989 uint ea = EA_AY_DI_8();
1990 uint res = MASK_OUT_ABOVE_8(DX | m68ki_read_8(ea));
1991
1992 m68ki_write_8(ea, res);
1993
1994 FLAG_N = NFLAG_8(res);
1995 FLAG_Z = res;
1996 FLAG_C = CFLAG_CLEAR;
1997 FLAG_V = VFLAG_CLEAR;
1998 }
1999
2000
m68k_op_or_8_re_ix(void)2001 void m68k_op_or_8_re_ix(void)
2002 {
2003 uint ea = EA_AY_IX_8();
2004 uint res = MASK_OUT_ABOVE_8(DX | m68ki_read_8(ea));
2005
2006 m68ki_write_8(ea, res);
2007
2008 FLAG_N = NFLAG_8(res);
2009 FLAG_Z = res;
2010 FLAG_C = CFLAG_CLEAR;
2011 FLAG_V = VFLAG_CLEAR;
2012 }
2013
2014
m68k_op_or_8_re_aw(void)2015 void m68k_op_or_8_re_aw(void)
2016 {
2017 uint ea = EA_AW_8();
2018 uint res = MASK_OUT_ABOVE_8(DX | m68ki_read_8(ea));
2019
2020 m68ki_write_8(ea, res);
2021
2022 FLAG_N = NFLAG_8(res);
2023 FLAG_Z = res;
2024 FLAG_C = CFLAG_CLEAR;
2025 FLAG_V = VFLAG_CLEAR;
2026 }
2027
2028
m68k_op_or_8_re_al(void)2029 void m68k_op_or_8_re_al(void)
2030 {
2031 uint ea = EA_AL_8();
2032 uint res = MASK_OUT_ABOVE_8(DX | m68ki_read_8(ea));
2033
2034 m68ki_write_8(ea, res);
2035
2036 FLAG_N = NFLAG_8(res);
2037 FLAG_Z = res;
2038 FLAG_C = CFLAG_CLEAR;
2039 FLAG_V = VFLAG_CLEAR;
2040 }
2041
2042
m68k_op_or_16_re_ai(void)2043 void m68k_op_or_16_re_ai(void)
2044 {
2045 uint ea = EA_AY_AI_16();
2046 uint res = MASK_OUT_ABOVE_16(DX | m68ki_read_16(ea));
2047
2048 m68ki_write_16(ea, res);
2049
2050 FLAG_N = NFLAG_16(res);
2051 FLAG_Z = res;
2052 FLAG_C = CFLAG_CLEAR;
2053 FLAG_V = VFLAG_CLEAR;
2054 }
2055
2056
m68k_op_or_16_re_pi(void)2057 void m68k_op_or_16_re_pi(void)
2058 {
2059 uint ea = EA_AY_PI_16();
2060 uint res = MASK_OUT_ABOVE_16(DX | m68ki_read_16(ea));
2061
2062 m68ki_write_16(ea, res);
2063
2064 FLAG_N = NFLAG_16(res);
2065 FLAG_Z = res;
2066 FLAG_C = CFLAG_CLEAR;
2067 FLAG_V = VFLAG_CLEAR;
2068 }
2069
2070
m68k_op_or_16_re_pd(void)2071 void m68k_op_or_16_re_pd(void)
2072 {
2073 uint ea = EA_AY_PD_16();
2074 uint res = MASK_OUT_ABOVE_16(DX | m68ki_read_16(ea));
2075
2076 m68ki_write_16(ea, res);
2077
2078 FLAG_N = NFLAG_16(res);
2079 FLAG_Z = res;
2080 FLAG_C = CFLAG_CLEAR;
2081 FLAG_V = VFLAG_CLEAR;
2082 }
2083
2084
m68k_op_or_16_re_di(void)2085 void m68k_op_or_16_re_di(void)
2086 {
2087 uint ea = EA_AY_DI_16();
2088 uint res = MASK_OUT_ABOVE_16(DX | m68ki_read_16(ea));
2089
2090 m68ki_write_16(ea, res);
2091
2092 FLAG_N = NFLAG_16(res);
2093 FLAG_Z = res;
2094 FLAG_C = CFLAG_CLEAR;
2095 FLAG_V = VFLAG_CLEAR;
2096 }
2097
2098
m68k_op_or_16_re_ix(void)2099 void m68k_op_or_16_re_ix(void)
2100 {
2101 uint ea = EA_AY_IX_16();
2102 uint res = MASK_OUT_ABOVE_16(DX | m68ki_read_16(ea));
2103
2104 m68ki_write_16(ea, res);
2105
2106 FLAG_N = NFLAG_16(res);
2107 FLAG_Z = res;
2108 FLAG_C = CFLAG_CLEAR;
2109 FLAG_V = VFLAG_CLEAR;
2110 }
2111
2112
m68k_op_or_16_re_aw(void)2113 void m68k_op_or_16_re_aw(void)
2114 {
2115 uint ea = EA_AW_16();
2116 uint res = MASK_OUT_ABOVE_16(DX | m68ki_read_16(ea));
2117
2118 m68ki_write_16(ea, res);
2119
2120 FLAG_N = NFLAG_16(res);
2121 FLAG_Z = res;
2122 FLAG_C = CFLAG_CLEAR;
2123 FLAG_V = VFLAG_CLEAR;
2124 }
2125
2126
m68k_op_or_16_re_al(void)2127 void m68k_op_or_16_re_al(void)
2128 {
2129 uint ea = EA_AL_16();
2130 uint res = MASK_OUT_ABOVE_16(DX | m68ki_read_16(ea));
2131
2132 m68ki_write_16(ea, res);
2133
2134 FLAG_N = NFLAG_16(res);
2135 FLAG_Z = res;
2136 FLAG_C = CFLAG_CLEAR;
2137 FLAG_V = VFLAG_CLEAR;
2138 }
2139
2140
m68k_op_or_32_re_ai(void)2141 void m68k_op_or_32_re_ai(void)
2142 {
2143 uint ea = EA_AY_AI_32();
2144 uint res = DX | m68ki_read_32(ea);
2145
2146 m68ki_write_32(ea, res);
2147
2148 FLAG_N = NFLAG_32(res);
2149 FLAG_Z = res;
2150 FLAG_C = CFLAG_CLEAR;
2151 FLAG_V = VFLAG_CLEAR;
2152 }
2153
2154
m68k_op_or_32_re_pi(void)2155 void m68k_op_or_32_re_pi(void)
2156 {
2157 uint ea = EA_AY_PI_32();
2158 uint res = DX | m68ki_read_32(ea);
2159
2160 m68ki_write_32(ea, res);
2161
2162 FLAG_N = NFLAG_32(res);
2163 FLAG_Z = res;
2164 FLAG_C = CFLAG_CLEAR;
2165 FLAG_V = VFLAG_CLEAR;
2166 }
2167
2168
m68k_op_or_32_re_pd(void)2169 void m68k_op_or_32_re_pd(void)
2170 {
2171 uint ea = EA_AY_PD_32();
2172 uint res = DX | m68ki_read_32(ea);
2173
2174 m68ki_write_32(ea, res);
2175
2176 FLAG_N = NFLAG_32(res);
2177 FLAG_Z = res;
2178 FLAG_C = CFLAG_CLEAR;
2179 FLAG_V = VFLAG_CLEAR;
2180 }
2181
2182
m68k_op_or_32_re_di(void)2183 void m68k_op_or_32_re_di(void)
2184 {
2185 uint ea = EA_AY_DI_32();
2186 uint res = DX | m68ki_read_32(ea);
2187
2188 m68ki_write_32(ea, res);
2189
2190 FLAG_N = NFLAG_32(res);
2191 FLAG_Z = res;
2192 FLAG_C = CFLAG_CLEAR;
2193 FLAG_V = VFLAG_CLEAR;
2194 }
2195
2196
m68k_op_or_32_re_ix(void)2197 void m68k_op_or_32_re_ix(void)
2198 {
2199 uint ea = EA_AY_IX_32();
2200 uint res = DX | m68ki_read_32(ea);
2201
2202 m68ki_write_32(ea, res);
2203
2204 FLAG_N = NFLAG_32(res);
2205 FLAG_Z = res;
2206 FLAG_C = CFLAG_CLEAR;
2207 FLAG_V = VFLAG_CLEAR;
2208 }
2209
2210
m68k_op_or_32_re_aw(void)2211 void m68k_op_or_32_re_aw(void)
2212 {
2213 uint ea = EA_AW_32();
2214 uint res = DX | m68ki_read_32(ea);
2215
2216 m68ki_write_32(ea, res);
2217
2218 FLAG_N = NFLAG_32(res);
2219 FLAG_Z = res;
2220 FLAG_C = CFLAG_CLEAR;
2221 FLAG_V = VFLAG_CLEAR;
2222 }
2223
2224
m68k_op_or_32_re_al(void)2225 void m68k_op_or_32_re_al(void)
2226 {
2227 uint ea = EA_AL_32();
2228 uint res = DX | m68ki_read_32(ea);
2229
2230 m68ki_write_32(ea, res);
2231
2232 FLAG_N = NFLAG_32(res);
2233 FLAG_Z = res;
2234 FLAG_C = CFLAG_CLEAR;
2235 FLAG_V = VFLAG_CLEAR;
2236 }
2237
2238
m68k_op_ori_8_d(void)2239 void m68k_op_ori_8_d(void)
2240 {
2241 uint res = MASK_OUT_ABOVE_8((DY |= OPER_I_8()));
2242
2243 FLAG_N = NFLAG_8(res);
2244 FLAG_Z = res;
2245 FLAG_C = CFLAG_CLEAR;
2246 FLAG_V = VFLAG_CLEAR;
2247 }
2248
2249
m68k_op_ori_8_ai(void)2250 void m68k_op_ori_8_ai(void)
2251 {
2252 uint src = OPER_I_8();
2253 uint ea = EA_AY_AI_8();
2254 uint res = MASK_OUT_ABOVE_8(src | m68ki_read_8(ea));
2255
2256 m68ki_write_8(ea, res);
2257
2258 FLAG_N = NFLAG_8(res);
2259 FLAG_Z = res;
2260 FLAG_C = CFLAG_CLEAR;
2261 FLAG_V = VFLAG_CLEAR;
2262 }
2263
2264
m68k_op_ori_8_pi(void)2265 void m68k_op_ori_8_pi(void)
2266 {
2267 uint src = OPER_I_8();
2268 uint ea = EA_AY_PI_8();
2269 uint res = MASK_OUT_ABOVE_8(src | m68ki_read_8(ea));
2270
2271 m68ki_write_8(ea, res);
2272
2273 FLAG_N = NFLAG_8(res);
2274 FLAG_Z = res;
2275 FLAG_C = CFLAG_CLEAR;
2276 FLAG_V = VFLAG_CLEAR;
2277 }
2278
2279
m68k_op_ori_8_pi7(void)2280 void m68k_op_ori_8_pi7(void)
2281 {
2282 uint src = OPER_I_8();
2283 uint ea = EA_A7_PI_8();
2284 uint res = MASK_OUT_ABOVE_8(src | m68ki_read_8(ea));
2285
2286 m68ki_write_8(ea, res);
2287
2288 FLAG_N = NFLAG_8(res);
2289 FLAG_Z = res;
2290 FLAG_C = CFLAG_CLEAR;
2291 FLAG_V = VFLAG_CLEAR;
2292 }
2293
2294
m68k_op_ori_8_pd(void)2295 void m68k_op_ori_8_pd(void)
2296 {
2297 uint src = OPER_I_8();
2298 uint ea = EA_AY_PD_8();
2299 uint res = MASK_OUT_ABOVE_8(src | m68ki_read_8(ea));
2300
2301 m68ki_write_8(ea, res);
2302
2303 FLAG_N = NFLAG_8(res);
2304 FLAG_Z = res;
2305 FLAG_C = CFLAG_CLEAR;
2306 FLAG_V = VFLAG_CLEAR;
2307 }
2308
2309
m68k_op_ori_8_pd7(void)2310 void m68k_op_ori_8_pd7(void)
2311 {
2312 uint src = OPER_I_8();
2313 uint ea = EA_A7_PD_8();
2314 uint res = MASK_OUT_ABOVE_8(src | m68ki_read_8(ea));
2315
2316 m68ki_write_8(ea, res);
2317
2318 FLAG_N = NFLAG_8(res);
2319 FLAG_Z = res;
2320 FLAG_C = CFLAG_CLEAR;
2321 FLAG_V = VFLAG_CLEAR;
2322 }
2323
2324
m68k_op_ori_8_di(void)2325 void m68k_op_ori_8_di(void)
2326 {
2327 uint src = OPER_I_8();
2328 uint ea = EA_AY_DI_8();
2329 uint res = MASK_OUT_ABOVE_8(src | m68ki_read_8(ea));
2330
2331 m68ki_write_8(ea, res);
2332
2333 FLAG_N = NFLAG_8(res);
2334 FLAG_Z = res;
2335 FLAG_C = CFLAG_CLEAR;
2336 FLAG_V = VFLAG_CLEAR;
2337 }
2338
2339
m68k_op_ori_8_ix(void)2340 void m68k_op_ori_8_ix(void)
2341 {
2342 uint src = OPER_I_8();
2343 uint ea = EA_AY_IX_8();
2344 uint res = MASK_OUT_ABOVE_8(src | m68ki_read_8(ea));
2345
2346 m68ki_write_8(ea, res);
2347
2348 FLAG_N = NFLAG_8(res);
2349 FLAG_Z = res;
2350 FLAG_C = CFLAG_CLEAR;
2351 FLAG_V = VFLAG_CLEAR;
2352 }
2353
2354
m68k_op_ori_8_aw(void)2355 void m68k_op_ori_8_aw(void)
2356 {
2357 uint src = OPER_I_8();
2358 uint ea = EA_AW_8();
2359 uint res = MASK_OUT_ABOVE_8(src | m68ki_read_8(ea));
2360
2361 m68ki_write_8(ea, res);
2362
2363 FLAG_N = NFLAG_8(res);
2364 FLAG_Z = res;
2365 FLAG_C = CFLAG_CLEAR;
2366 FLAG_V = VFLAG_CLEAR;
2367 }
2368
2369
m68k_op_ori_8_al(void)2370 void m68k_op_ori_8_al(void)
2371 {
2372 uint src = OPER_I_8();
2373 uint ea = EA_AL_8();
2374 uint res = MASK_OUT_ABOVE_8(src | m68ki_read_8(ea));
2375
2376 m68ki_write_8(ea, res);
2377
2378 FLAG_N = NFLAG_8(res);
2379 FLAG_Z = res;
2380 FLAG_C = CFLAG_CLEAR;
2381 FLAG_V = VFLAG_CLEAR;
2382 }
2383
2384
m68k_op_ori_16_d(void)2385 void m68k_op_ori_16_d(void)
2386 {
2387 uint res = MASK_OUT_ABOVE_16(DY |= OPER_I_16());
2388
2389 FLAG_N = NFLAG_16(res);
2390 FLAG_Z = res;
2391 FLAG_C = CFLAG_CLEAR;
2392 FLAG_V = VFLAG_CLEAR;
2393 }
2394
2395
m68k_op_ori_16_ai(void)2396 void m68k_op_ori_16_ai(void)
2397 {
2398 uint src = OPER_I_16();
2399 uint ea = EA_AY_AI_16();
2400 uint res = MASK_OUT_ABOVE_16(src | m68ki_read_16(ea));
2401
2402 m68ki_write_16(ea, res);
2403
2404 FLAG_N = NFLAG_16(res);
2405 FLAG_Z = res;
2406 FLAG_C = CFLAG_CLEAR;
2407 FLAG_V = VFLAG_CLEAR;
2408 }
2409
2410
m68k_op_ori_16_pi(void)2411 void m68k_op_ori_16_pi(void)
2412 {
2413 uint src = OPER_I_16();
2414 uint ea = EA_AY_PI_16();
2415 uint res = MASK_OUT_ABOVE_16(src | m68ki_read_16(ea));
2416
2417 m68ki_write_16(ea, res);
2418
2419 FLAG_N = NFLAG_16(res);
2420 FLAG_Z = res;
2421 FLAG_C = CFLAG_CLEAR;
2422 FLAG_V = VFLAG_CLEAR;
2423 }
2424
2425
m68k_op_ori_16_pd(void)2426 void m68k_op_ori_16_pd(void)
2427 {
2428 uint src = OPER_I_16();
2429 uint ea = EA_AY_PD_16();
2430 uint res = MASK_OUT_ABOVE_16(src | m68ki_read_16(ea));
2431
2432 m68ki_write_16(ea, res);
2433
2434 FLAG_N = NFLAG_16(res);
2435 FLAG_Z = res;
2436 FLAG_C = CFLAG_CLEAR;
2437 FLAG_V = VFLAG_CLEAR;
2438 }
2439
2440
m68k_op_ori_16_di(void)2441 void m68k_op_ori_16_di(void)
2442 {
2443 uint src = OPER_I_16();
2444 uint ea = EA_AY_DI_16();
2445 uint res = MASK_OUT_ABOVE_16(src | m68ki_read_16(ea));
2446
2447 m68ki_write_16(ea, res);
2448
2449 FLAG_N = NFLAG_16(res);
2450 FLAG_Z = res;
2451 FLAG_C = CFLAG_CLEAR;
2452 FLAG_V = VFLAG_CLEAR;
2453 }
2454
2455
m68k_op_ori_16_ix(void)2456 void m68k_op_ori_16_ix(void)
2457 {
2458 uint src = OPER_I_16();
2459 uint ea = EA_AY_IX_16();
2460 uint res = MASK_OUT_ABOVE_16(src | m68ki_read_16(ea));
2461
2462 m68ki_write_16(ea, res);
2463
2464 FLAG_N = NFLAG_16(res);
2465 FLAG_Z = res;
2466 FLAG_C = CFLAG_CLEAR;
2467 FLAG_V = VFLAG_CLEAR;
2468 }
2469
2470
m68k_op_ori_16_aw(void)2471 void m68k_op_ori_16_aw(void)
2472 {
2473 uint src = OPER_I_16();
2474 uint ea = EA_AW_16();
2475 uint res = MASK_OUT_ABOVE_16(src | m68ki_read_16(ea));
2476
2477 m68ki_write_16(ea, res);
2478
2479 FLAG_N = NFLAG_16(res);
2480 FLAG_Z = res;
2481 FLAG_C = CFLAG_CLEAR;
2482 FLAG_V = VFLAG_CLEAR;
2483 }
2484
2485
m68k_op_ori_16_al(void)2486 void m68k_op_ori_16_al(void)
2487 {
2488 uint src = OPER_I_16();
2489 uint ea = EA_AL_16();
2490 uint res = MASK_OUT_ABOVE_16(src | m68ki_read_16(ea));
2491
2492 m68ki_write_16(ea, res);
2493
2494 FLAG_N = NFLAG_16(res);
2495 FLAG_Z = res;
2496 FLAG_C = CFLAG_CLEAR;
2497 FLAG_V = VFLAG_CLEAR;
2498 }
2499
2500
m68k_op_ori_32_d(void)2501 void m68k_op_ori_32_d(void)
2502 {
2503 uint res = DY |= OPER_I_32();
2504
2505 FLAG_N = NFLAG_32(res);
2506 FLAG_Z = res;
2507 FLAG_C = CFLAG_CLEAR;
2508 FLAG_V = VFLAG_CLEAR;
2509 }
2510
2511
m68k_op_ori_32_ai(void)2512 void m68k_op_ori_32_ai(void)
2513 {
2514 uint src = OPER_I_32();
2515 uint ea = EA_AY_AI_32();
2516 uint res = src | m68ki_read_32(ea);
2517
2518 m68ki_write_32(ea, res);
2519
2520 FLAG_N = NFLAG_32(res);
2521 FLAG_Z = res;
2522 FLAG_C = CFLAG_CLEAR;
2523 FLAG_V = VFLAG_CLEAR;
2524 }
2525
2526
m68k_op_ori_32_pi(void)2527 void m68k_op_ori_32_pi(void)
2528 {
2529 uint src = OPER_I_32();
2530 uint ea = EA_AY_PI_32();
2531 uint res = src | m68ki_read_32(ea);
2532
2533 m68ki_write_32(ea, res);
2534
2535 FLAG_N = NFLAG_32(res);
2536 FLAG_Z = res;
2537 FLAG_C = CFLAG_CLEAR;
2538 FLAG_V = VFLAG_CLEAR;
2539 }
2540
2541
m68k_op_ori_32_pd(void)2542 void m68k_op_ori_32_pd(void)
2543 {
2544 uint src = OPER_I_32();
2545 uint ea = EA_AY_PD_32();
2546 uint res = src | m68ki_read_32(ea);
2547
2548 m68ki_write_32(ea, res);
2549
2550 FLAG_N = NFLAG_32(res);
2551 FLAG_Z = res;
2552 FLAG_C = CFLAG_CLEAR;
2553 FLAG_V = VFLAG_CLEAR;
2554 }
2555
2556
m68k_op_ori_32_di(void)2557 void m68k_op_ori_32_di(void)
2558 {
2559 uint src = OPER_I_32();
2560 uint ea = EA_AY_DI_32();
2561 uint res = src | m68ki_read_32(ea);
2562
2563 m68ki_write_32(ea, res);
2564
2565 FLAG_N = NFLAG_32(res);
2566 FLAG_Z = res;
2567 FLAG_C = CFLAG_CLEAR;
2568 FLAG_V = VFLAG_CLEAR;
2569 }
2570
2571
m68k_op_ori_32_ix(void)2572 void m68k_op_ori_32_ix(void)
2573 {
2574 uint src = OPER_I_32();
2575 uint ea = EA_AY_IX_32();
2576 uint res = src | m68ki_read_32(ea);
2577
2578 m68ki_write_32(ea, res);
2579
2580 FLAG_N = NFLAG_32(res);
2581 FLAG_Z = res;
2582 FLAG_C = CFLAG_CLEAR;
2583 FLAG_V = VFLAG_CLEAR;
2584 }
2585
2586
m68k_op_ori_32_aw(void)2587 void m68k_op_ori_32_aw(void)
2588 {
2589 uint src = OPER_I_32();
2590 uint ea = EA_AW_32();
2591 uint res = src | m68ki_read_32(ea);
2592
2593 m68ki_write_32(ea, res);
2594
2595 FLAG_N = NFLAG_32(res);
2596 FLAG_Z = res;
2597 FLAG_C = CFLAG_CLEAR;
2598 FLAG_V = VFLAG_CLEAR;
2599 }
2600
2601
m68k_op_ori_32_al(void)2602 void m68k_op_ori_32_al(void)
2603 {
2604 uint src = OPER_I_32();
2605 uint ea = EA_AL_32();
2606 uint res = src | m68ki_read_32(ea);
2607
2608 m68ki_write_32(ea, res);
2609
2610 FLAG_N = NFLAG_32(res);
2611 FLAG_Z = res;
2612 FLAG_C = CFLAG_CLEAR;
2613 FLAG_V = VFLAG_CLEAR;
2614 }
2615
2616
m68k_op_ori_8_toc(void)2617 void m68k_op_ori_8_toc(void)
2618 {
2619 m68ki_set_ccr(m68ki_get_ccr() | OPER_I_8());
2620 }
2621
2622
m68k_op_ori_16_tos(void)2623 void m68k_op_ori_16_tos(void)
2624 {
2625 if(FLAG_S)
2626 {
2627 uint src = OPER_I_16();
2628 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
2629 m68ki_set_sr(m68ki_get_sr() | src);
2630 return;
2631 }
2632 m68ki_exception_privilege_violation();
2633 }
2634
2635
m68k_op_pack_16_rr(void)2636 void m68k_op_pack_16_rr(void)
2637 {
2638 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
2639 {
2640 /* Note: DX and DY are reversed in Motorola's docs */
2641 uint src = DY + OPER_I_16();
2642 uint* r_dst = &DX;
2643
2644 *r_dst = MASK_OUT_BELOW_8(*r_dst) | ((src >> 4) & 0x00f0) | (src & 0x000f);
2645 return;
2646 }
2647 m68ki_exception_illegal();
2648 }
2649
2650
m68k_op_pack_16_mm_ax7(void)2651 void m68k_op_pack_16_mm_ax7(void)
2652 {
2653 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
2654 {
2655 /* Note: AX and AY are reversed in Motorola's docs */
2656 uint ea_src = EA_AY_PD_8();
2657 uint src = m68ki_read_8(ea_src);
2658 ea_src = EA_AY_PD_8();
2659 src = ((src << 8) | m68ki_read_8(ea_src)) + OPER_I_16();
2660
2661 m68ki_write_8(EA_A7_PD_8(), ((src >> 4) & 0x00f0) | (src & 0x000f));
2662 return;
2663 }
2664 m68ki_exception_illegal();
2665 }
2666
2667
m68k_op_pack_16_mm_ay7(void)2668 void m68k_op_pack_16_mm_ay7(void)
2669 {
2670 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
2671 {
2672 /* Note: AX and AY are reversed in Motorola's docs */
2673 uint ea_src = EA_A7_PD_8();
2674 uint src = m68ki_read_8(ea_src);
2675 ea_src = EA_A7_PD_8();
2676 src = ((src << 8) | m68ki_read_8(ea_src)) + OPER_I_16();
2677
2678 m68ki_write_8(EA_AX_PD_8(), ((src >> 4) & 0x00f0) | (src & 0x000f));
2679 return;
2680 }
2681 m68ki_exception_illegal();
2682 }
2683
2684
m68k_op_pack_16_mm_axy7(void)2685 void m68k_op_pack_16_mm_axy7(void)
2686 {
2687 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
2688 {
2689 uint ea_src = EA_A7_PD_8();
2690 uint src = m68ki_read_8(ea_src);
2691 ea_src = EA_A7_PD_8();
2692 src = ((src << 8) | m68ki_read_8(ea_src)) + OPER_I_16();
2693
2694 m68ki_write_8(EA_A7_PD_8(), ((src >> 4) & 0x00f0) | (src & 0x000f));
2695 return;
2696 }
2697 m68ki_exception_illegal();
2698 }
2699
2700
m68k_op_pack_16_mm(void)2701 void m68k_op_pack_16_mm(void)
2702 {
2703 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
2704 {
2705 /* Note: AX and AY are reversed in Motorola's docs */
2706 uint ea_src = EA_AY_PD_8();
2707 uint src = m68ki_read_8(ea_src);
2708 ea_src = EA_AY_PD_8();
2709 src = ((src << 8) | m68ki_read_8(ea_src)) + OPER_I_16();
2710
2711 m68ki_write_8(EA_AX_PD_8(), ((src >> 4) & 0x00f0) | (src & 0x000f));
2712 return;
2713 }
2714 m68ki_exception_illegal();
2715 }
2716
2717
m68k_op_pea_32_ai(void)2718 void m68k_op_pea_32_ai(void)
2719 {
2720 uint ea = EA_AY_AI_32();
2721
2722 m68ki_push_32(ea);
2723 }
2724
2725
m68k_op_pea_32_di(void)2726 void m68k_op_pea_32_di(void)
2727 {
2728 uint ea = EA_AY_DI_32();
2729
2730 m68ki_push_32(ea);
2731 }
2732
2733
m68k_op_pea_32_ix(void)2734 void m68k_op_pea_32_ix(void)
2735 {
2736 uint ea = EA_AY_IX_32();
2737
2738 m68ki_push_32(ea);
2739 }
2740
2741
m68k_op_pea_32_aw(void)2742 void m68k_op_pea_32_aw(void)
2743 {
2744 uint ea = EA_AW_32();
2745
2746 m68ki_push_32(ea);
2747 }
2748
2749
m68k_op_pea_32_al(void)2750 void m68k_op_pea_32_al(void)
2751 {
2752 uint ea = EA_AL_32();
2753
2754 m68ki_push_32(ea);
2755 }
2756
2757
m68k_op_pea_32_pcdi(void)2758 void m68k_op_pea_32_pcdi(void)
2759 {
2760 uint ea = EA_PCDI_32();
2761
2762 m68ki_push_32(ea);
2763 }
2764
2765
m68k_op_pea_32_pcix(void)2766 void m68k_op_pea_32_pcix(void)
2767 {
2768 uint ea = EA_PCIX_32();
2769
2770 m68ki_push_32(ea);
2771 }
2772
2773
m68k_op_reset(void)2774 void m68k_op_reset(void)
2775 {
2776 if(FLAG_S)
2777 {
2778 m68ki_output_reset(); /* auto-disable (see m68kcpu.h) */
2779 USE_CYCLES(CYC_RESET);
2780 return;
2781 }
2782 m68ki_exception_privilege_violation();
2783 }
2784
2785
m68k_op_ror_8_s(void)2786 void m68k_op_ror_8_s(void)
2787 {
2788 uint* r_dst = &DY;
2789 uint orig_shift = (((REG_IR >> 9) - 1) & 7) + 1;
2790 uint shift = orig_shift & 7;
2791 uint src = MASK_OUT_ABOVE_8(*r_dst);
2792 uint res = ROR_8(src, shift);
2793
2794 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
2795
2796 FLAG_N = NFLAG_8(res);
2797 FLAG_Z = res;
2798 FLAG_C = src << (9-orig_shift);
2799 FLAG_V = VFLAG_CLEAR;
2800 }
2801
2802
m68k_op_ror_16_s(void)2803 void m68k_op_ror_16_s(void)
2804 {
2805 uint* r_dst = &DY;
2806 uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
2807 uint src = MASK_OUT_ABOVE_16(*r_dst);
2808 uint res = ROR_16(src, shift);
2809
2810 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
2811
2812 FLAG_N = NFLAG_16(res);
2813 FLAG_Z = res;
2814 FLAG_C = src << (9-shift);
2815 FLAG_V = VFLAG_CLEAR;
2816 }
2817
2818
m68k_op_ror_32_s(void)2819 void m68k_op_ror_32_s(void)
2820 {
2821 uint* r_dst = &DY;
2822 uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
2823 uint64 src = *r_dst;
2824 uint res = ROR_32(src, shift);
2825
2826 *r_dst = res;
2827
2828 FLAG_N = NFLAG_32(res);
2829 FLAG_Z = res;
2830 FLAG_C = src << (9-shift);
2831 FLAG_V = VFLAG_CLEAR;
2832 }
2833
2834
m68k_op_ror_8_r(void)2835 void m68k_op_ror_8_r(void)
2836 {
2837 uint* r_dst = &DY;
2838 uint orig_shift = DX & 0x3f;
2839 uint shift = orig_shift & 7;
2840 uint src = MASK_OUT_ABOVE_8(*r_dst);
2841 uint res = ROR_8(src, shift);
2842
2843 if(orig_shift != 0)
2844 {
2845 USE_CYCLES(orig_shift<<CYC_SHIFT);
2846
2847 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
2848 FLAG_C = src << (8-((shift-1)&7));
2849 FLAG_N = NFLAG_8(res);
2850 FLAG_Z = res;
2851 FLAG_V = VFLAG_CLEAR;
2852 return;
2853 }
2854
2855 FLAG_C = CFLAG_CLEAR;
2856 FLAG_N = NFLAG_8(src);
2857 FLAG_Z = src;
2858 FLAG_V = VFLAG_CLEAR;
2859 }
2860
2861
m68k_op_ror_16_r(void)2862 void m68k_op_ror_16_r(void)
2863 {
2864 uint* r_dst = &DY;
2865 uint orig_shift = DX & 0x3f;
2866 uint shift = orig_shift & 15;
2867 uint src = MASK_OUT_ABOVE_16(*r_dst);
2868 uint res = ROR_16(src, shift);
2869
2870 if(orig_shift != 0)
2871 {
2872 USE_CYCLES(orig_shift<<CYC_SHIFT);
2873
2874 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
2875 FLAG_C = (src >> ((shift - 1) & 15)) << 8;
2876 FLAG_N = NFLAG_16(res);
2877 FLAG_Z = res;
2878 FLAG_V = VFLAG_CLEAR;
2879 return;
2880 }
2881
2882 FLAG_C = CFLAG_CLEAR;
2883 FLAG_N = NFLAG_16(src);
2884 FLAG_Z = src;
2885 FLAG_V = VFLAG_CLEAR;
2886 }
2887
2888
m68k_op_ror_32_r(void)2889 void m68k_op_ror_32_r(void)
2890 {
2891 uint* r_dst = &DY;
2892 uint orig_shift = DX & 0x3f;
2893 uint shift = orig_shift & 31;
2894 uint64 src = *r_dst;
2895 uint res = ROR_32(src, shift);
2896
2897 if(orig_shift != 0)
2898 {
2899 USE_CYCLES(orig_shift<<CYC_SHIFT);
2900
2901 *r_dst = res;
2902 FLAG_C = (src >> ((shift - 1) & 31)) << 8;
2903 FLAG_N = NFLAG_32(res);
2904 FLAG_Z = res;
2905 FLAG_V = VFLAG_CLEAR;
2906 return;
2907 }
2908
2909 FLAG_C = CFLAG_CLEAR;
2910 FLAG_N = NFLAG_32(src);
2911 FLAG_Z = src;
2912 FLAG_V = VFLAG_CLEAR;
2913 }
2914
2915
m68k_op_ror_16_ai(void)2916 void m68k_op_ror_16_ai(void)
2917 {
2918 uint ea = EA_AY_AI_16();
2919 uint src = m68ki_read_16(ea);
2920 uint res = ROR_16(src, 1);
2921
2922 m68ki_write_16(ea, res);
2923
2924 FLAG_N = NFLAG_16(res);
2925 FLAG_Z = res;
2926 FLAG_C = src << 8;
2927 FLAG_V = VFLAG_CLEAR;
2928 }
2929
2930
m68k_op_ror_16_pi(void)2931 void m68k_op_ror_16_pi(void)
2932 {
2933 uint ea = EA_AY_PI_16();
2934 uint src = m68ki_read_16(ea);
2935 uint res = ROR_16(src, 1);
2936
2937 m68ki_write_16(ea, res);
2938
2939 FLAG_N = NFLAG_16(res);
2940 FLAG_Z = res;
2941 FLAG_C = src << 8;
2942 FLAG_V = VFLAG_CLEAR;
2943 }
2944
2945
m68k_op_ror_16_pd(void)2946 void m68k_op_ror_16_pd(void)
2947 {
2948 uint ea = EA_AY_PD_16();
2949 uint src = m68ki_read_16(ea);
2950 uint res = ROR_16(src, 1);
2951
2952 m68ki_write_16(ea, res);
2953
2954 FLAG_N = NFLAG_16(res);
2955 FLAG_Z = res;
2956 FLAG_C = src << 8;
2957 FLAG_V = VFLAG_CLEAR;
2958 }
2959
2960
m68k_op_ror_16_di(void)2961 void m68k_op_ror_16_di(void)
2962 {
2963 uint ea = EA_AY_DI_16();
2964 uint src = m68ki_read_16(ea);
2965 uint res = ROR_16(src, 1);
2966
2967 m68ki_write_16(ea, res);
2968
2969 FLAG_N = NFLAG_16(res);
2970 FLAG_Z = res;
2971 FLAG_C = src << 8;
2972 FLAG_V = VFLAG_CLEAR;
2973 }
2974
2975
m68k_op_ror_16_ix(void)2976 void m68k_op_ror_16_ix(void)
2977 {
2978 uint ea = EA_AY_IX_16();
2979 uint src = m68ki_read_16(ea);
2980 uint res = ROR_16(src, 1);
2981
2982 m68ki_write_16(ea, res);
2983
2984 FLAG_N = NFLAG_16(res);
2985 FLAG_Z = res;
2986 FLAG_C = src << 8;
2987 FLAG_V = VFLAG_CLEAR;
2988 }
2989
2990
m68k_op_ror_16_aw(void)2991 void m68k_op_ror_16_aw(void)
2992 {
2993 uint ea = EA_AW_16();
2994 uint src = m68ki_read_16(ea);
2995 uint res = ROR_16(src, 1);
2996
2997 m68ki_write_16(ea, res);
2998
2999 FLAG_N = NFLAG_16(res);
3000 FLAG_Z = res;
3001 FLAG_C = src << 8;
3002 FLAG_V = VFLAG_CLEAR;
3003 }
3004
3005
m68k_op_ror_16_al(void)3006 void m68k_op_ror_16_al(void)
3007 {
3008 uint ea = EA_AL_16();
3009 uint src = m68ki_read_16(ea);
3010 uint res = ROR_16(src, 1);
3011
3012 m68ki_write_16(ea, res);
3013
3014 FLAG_N = NFLAG_16(res);
3015 FLAG_Z = res;
3016 FLAG_C = src << 8;
3017 FLAG_V = VFLAG_CLEAR;
3018 }
3019
3020
m68k_op_rol_8_s(void)3021 void m68k_op_rol_8_s(void)
3022 {
3023 uint* r_dst = &DY;
3024 uint orig_shift = (((REG_IR >> 9) - 1) & 7) + 1;
3025 uint shift = orig_shift & 7;
3026 uint src = MASK_OUT_ABOVE_8(*r_dst);
3027 uint res = ROL_8(src, shift);
3028
3029 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
3030
3031 FLAG_N = NFLAG_8(res);
3032 FLAG_Z = res;
3033 FLAG_C = src << orig_shift;
3034 FLAG_V = VFLAG_CLEAR;
3035 }
3036
3037
m68k_op_rol_16_s(void)3038 void m68k_op_rol_16_s(void)
3039 {
3040 uint* r_dst = &DY;
3041 uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
3042 uint src = MASK_OUT_ABOVE_16(*r_dst);
3043 uint res = ROL_16(src, shift);
3044
3045 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
3046
3047 FLAG_N = NFLAG_16(res);
3048 FLAG_Z = res;
3049 FLAG_C = src >> (8-shift);
3050 FLAG_V = VFLAG_CLEAR;
3051 }
3052
3053
m68k_op_rol_32_s(void)3054 void m68k_op_rol_32_s(void)
3055 {
3056 uint* r_dst = &DY;
3057 uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
3058 uint64 src = *r_dst;
3059 uint res = ROL_32(src, shift);
3060
3061 *r_dst = res;
3062
3063 FLAG_N = NFLAG_32(res);
3064 FLAG_Z = res;
3065 FLAG_C = src >> (24-shift);
3066 FLAG_V = VFLAG_CLEAR;
3067 }
3068
3069
m68k_op_rol_8_r(void)3070 void m68k_op_rol_8_r(void)
3071 {
3072 uint* r_dst = &DY;
3073 uint orig_shift = DX & 0x3f;
3074 uint shift = orig_shift & 7;
3075 uint src = MASK_OUT_ABOVE_8(*r_dst);
3076 uint res = ROL_8(src, shift);
3077
3078 if(orig_shift != 0)
3079 {
3080 USE_CYCLES(orig_shift<<CYC_SHIFT);
3081
3082 if(shift != 0)
3083 {
3084 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
3085 FLAG_C = src << shift;
3086 FLAG_N = NFLAG_8(res);
3087 FLAG_Z = res;
3088 FLAG_V = VFLAG_CLEAR;
3089 return;
3090 }
3091 FLAG_C = (src & 1)<<8;
3092 FLAG_N = NFLAG_8(src);
3093 FLAG_Z = src;
3094 FLAG_V = VFLAG_CLEAR;
3095 return;
3096 }
3097
3098 FLAG_C = CFLAG_CLEAR;
3099 FLAG_N = NFLAG_8(src);
3100 FLAG_Z = src;
3101 FLAG_V = VFLAG_CLEAR;
3102 }
3103
3104
m68k_op_rol_16_r(void)3105 void m68k_op_rol_16_r(void)
3106 {
3107 uint* r_dst = &DY;
3108 uint orig_shift = DX & 0x3f;
3109 uint shift = orig_shift & 15;
3110 uint src = MASK_OUT_ABOVE_16(*r_dst);
3111 uint res = MASK_OUT_ABOVE_16(ROL_16(src, shift));
3112
3113 if(orig_shift != 0)
3114 {
3115 USE_CYCLES(orig_shift<<CYC_SHIFT);
3116
3117 if(shift != 0)
3118 {
3119 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
3120 FLAG_C = (src << shift) >> 8;
3121 FLAG_N = NFLAG_16(res);
3122 FLAG_Z = res;
3123 FLAG_V = VFLAG_CLEAR;
3124 return;
3125 }
3126 FLAG_C = (src & 1)<<8;
3127 FLAG_N = NFLAG_16(src);
3128 FLAG_Z = src;
3129 FLAG_V = VFLAG_CLEAR;
3130 return;
3131 }
3132
3133 FLAG_C = CFLAG_CLEAR;
3134 FLAG_N = NFLAG_16(src);
3135 FLAG_Z = src;
3136 FLAG_V = VFLAG_CLEAR;
3137 }
3138
3139
m68k_op_rol_32_r(void)3140 void m68k_op_rol_32_r(void)
3141 {
3142 uint* r_dst = &DY;
3143 uint orig_shift = DX & 0x3f;
3144 uint shift = orig_shift & 31;
3145 uint64 src = *r_dst;
3146 uint res = ROL_32(src, shift);
3147
3148 if(orig_shift != 0)
3149 {
3150 USE_CYCLES(orig_shift<<CYC_SHIFT);
3151
3152 *r_dst = res;
3153
3154 FLAG_C = (src >> (32 - shift)) << 8;
3155 FLAG_N = NFLAG_32(res);
3156 FLAG_Z = res;
3157 FLAG_V = VFLAG_CLEAR;
3158 return;
3159 }
3160
3161 FLAG_C = CFLAG_CLEAR;
3162 FLAG_N = NFLAG_32(src);
3163 FLAG_Z = src;
3164 FLAG_V = VFLAG_CLEAR;
3165 }
3166
3167
m68k_op_rol_16_ai(void)3168 void m68k_op_rol_16_ai(void)
3169 {
3170 uint ea = EA_AY_AI_16();
3171 uint src = m68ki_read_16(ea);
3172 uint res = MASK_OUT_ABOVE_16(ROL_16(src, 1));
3173
3174 m68ki_write_16(ea, res);
3175
3176 FLAG_N = NFLAG_16(res);
3177 FLAG_Z = res;
3178 FLAG_C = src >> 7;
3179 FLAG_V = VFLAG_CLEAR;
3180 }
3181
3182
m68k_op_rol_16_pi(void)3183 void m68k_op_rol_16_pi(void)
3184 {
3185 uint ea = EA_AY_PI_16();
3186 uint src = m68ki_read_16(ea);
3187 uint res = MASK_OUT_ABOVE_16(ROL_16(src, 1));
3188
3189 m68ki_write_16(ea, res);
3190
3191 FLAG_N = NFLAG_16(res);
3192 FLAG_Z = res;
3193 FLAG_C = src >> 7;
3194 FLAG_V = VFLAG_CLEAR;
3195 }
3196
3197
m68k_op_rol_16_pd(void)3198 void m68k_op_rol_16_pd(void)
3199 {
3200 uint ea = EA_AY_PD_16();
3201 uint src = m68ki_read_16(ea);
3202 uint res = MASK_OUT_ABOVE_16(ROL_16(src, 1));
3203
3204 m68ki_write_16(ea, res);
3205
3206 FLAG_N = NFLAG_16(res);
3207 FLAG_Z = res;
3208 FLAG_C = src >> 7;
3209 FLAG_V = VFLAG_CLEAR;
3210 }
3211
3212
m68k_op_rol_16_di(void)3213 void m68k_op_rol_16_di(void)
3214 {
3215 uint ea = EA_AY_DI_16();
3216 uint src = m68ki_read_16(ea);
3217 uint res = MASK_OUT_ABOVE_16(ROL_16(src, 1));
3218
3219 m68ki_write_16(ea, res);
3220
3221 FLAG_N = NFLAG_16(res);
3222 FLAG_Z = res;
3223 FLAG_C = src >> 7;
3224 FLAG_V = VFLAG_CLEAR;
3225 }
3226
3227
m68k_op_rol_16_ix(void)3228 void m68k_op_rol_16_ix(void)
3229 {
3230 uint ea = EA_AY_IX_16();
3231 uint src = m68ki_read_16(ea);
3232 uint res = MASK_OUT_ABOVE_16(ROL_16(src, 1));
3233
3234 m68ki_write_16(ea, res);
3235
3236 FLAG_N = NFLAG_16(res);
3237 FLAG_Z = res;
3238 FLAG_C = src >> 7;
3239 FLAG_V = VFLAG_CLEAR;
3240 }
3241
3242
m68k_op_rol_16_aw(void)3243 void m68k_op_rol_16_aw(void)
3244 {
3245 uint ea = EA_AW_16();
3246 uint src = m68ki_read_16(ea);
3247 uint res = MASK_OUT_ABOVE_16(ROL_16(src, 1));
3248
3249 m68ki_write_16(ea, res);
3250
3251 FLAG_N = NFLAG_16(res);
3252 FLAG_Z = res;
3253 FLAG_C = src >> 7;
3254 FLAG_V = VFLAG_CLEAR;
3255 }
3256
3257
m68k_op_rol_16_al(void)3258 void m68k_op_rol_16_al(void)
3259 {
3260 uint ea = EA_AL_16();
3261 uint src = m68ki_read_16(ea);
3262 uint res = MASK_OUT_ABOVE_16(ROL_16(src, 1));
3263
3264 m68ki_write_16(ea, res);
3265
3266 FLAG_N = NFLAG_16(res);
3267 FLAG_Z = res;
3268 FLAG_C = src >> 7;
3269 FLAG_V = VFLAG_CLEAR;
3270 }
3271
3272
m68k_op_roxr_8_s(void)3273 void m68k_op_roxr_8_s(void)
3274 {
3275 uint* r_dst = &DY;
3276 uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
3277 uint src = MASK_OUT_ABOVE_8(*r_dst);
3278 uint res = ROR_9(src | (XFLAG_AS_1() << 8), shift);
3279
3280 FLAG_C = FLAG_X = res;
3281 res = MASK_OUT_ABOVE_8(res);
3282
3283 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
3284
3285 FLAG_N = NFLAG_8(res);
3286 FLAG_Z = res;
3287 FLAG_V = VFLAG_CLEAR;
3288 }
3289
3290
m68k_op_roxr_16_s(void)3291 void m68k_op_roxr_16_s(void)
3292 {
3293 uint* r_dst = &DY;
3294 uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
3295 uint src = MASK_OUT_ABOVE_16(*r_dst);
3296 uint res = ROR_17(src | (XFLAG_AS_1() << 16), shift);
3297
3298 FLAG_C = FLAG_X = res >> 8;
3299 res = MASK_OUT_ABOVE_16(res);
3300
3301 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
3302
3303 FLAG_N = NFLAG_16(res);
3304 FLAG_Z = res;
3305 FLAG_V = VFLAG_CLEAR;
3306 }
3307
3308
m68k_op_roxr_32_s(void)3309 void m68k_op_roxr_32_s(void)
3310 {
3311 #if M68K_USE_64_BIT
3312
3313 uint* r_dst = &DY;
3314 uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
3315 uint64 src = *r_dst;
3316 uint64 res = src | (((uint64)XFLAG_AS_1()) << 32);
3317
3318 res = ROR_33_64(res, shift);
3319
3320 FLAG_C = FLAG_X = res >> 24;
3321 res = MASK_OUT_ABOVE_32(res);
3322
3323 *r_dst = res;
3324
3325 FLAG_N = NFLAG_32(res);
3326 FLAG_Z = res;
3327 FLAG_V = VFLAG_CLEAR;
3328
3329 #else
3330
3331 uint* r_dst = &DY;
3332 uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
3333 uint src = *r_dst;
3334 uint res = MASK_OUT_ABOVE_32((ROR_33(src, shift) & ~(1 << (32 - shift))) | (XFLAG_AS_1() << (32 - shift)));
3335 uint new_x_flag = src & (1 << (shift - 1));
3336
3337 *r_dst = res;
3338
3339 FLAG_C = FLAG_X = (new_x_flag != 0)<<8;
3340 FLAG_N = NFLAG_32(res);
3341 FLAG_Z = res;
3342 FLAG_V = VFLAG_CLEAR;
3343
3344 #endif
3345 }
3346
3347
m68k_op_roxr_8_r(void)3348 void m68k_op_roxr_8_r(void)
3349 {
3350 uint* r_dst = &DY;
3351 uint orig_shift = DX & 0x3f;
3352
3353 if(orig_shift != 0)
3354 {
3355 uint shift = orig_shift % 9;
3356 uint src = MASK_OUT_ABOVE_8(*r_dst);
3357 uint res = ROR_9(src | (XFLAG_AS_1() << 8), shift);
3358
3359 USE_CYCLES(orig_shift<<CYC_SHIFT);
3360
3361 FLAG_C = FLAG_X = res;
3362 res = MASK_OUT_ABOVE_8(res);
3363
3364 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
3365 FLAG_N = NFLAG_8(res);
3366 FLAG_Z = res;
3367 FLAG_V = VFLAG_CLEAR;
3368 return;
3369 }
3370
3371 FLAG_C = FLAG_X;
3372 FLAG_N = NFLAG_8(*r_dst);
3373 FLAG_Z = MASK_OUT_ABOVE_8(*r_dst);
3374 FLAG_V = VFLAG_CLEAR;
3375 }
3376
3377
m68k_op_roxr_16_r(void)3378 void m68k_op_roxr_16_r(void)
3379 {
3380 uint* r_dst = &DY;
3381 uint orig_shift = DX & 0x3f;
3382
3383 if(orig_shift != 0)
3384 {
3385 uint shift = orig_shift % 17;
3386 uint src = MASK_OUT_ABOVE_16(*r_dst);
3387 uint res = ROR_17(src | (XFLAG_AS_1() << 16), shift);
3388
3389 USE_CYCLES(orig_shift<<CYC_SHIFT);
3390
3391 FLAG_C = FLAG_X = res >> 8;
3392 res = MASK_OUT_ABOVE_16(res);
3393
3394 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
3395 FLAG_N = NFLAG_16(res);
3396 FLAG_Z = res;
3397 FLAG_V = VFLAG_CLEAR;
3398 return;
3399 }
3400
3401 FLAG_C = FLAG_X;
3402 FLAG_N = NFLAG_16(*r_dst);
3403 FLAG_Z = MASK_OUT_ABOVE_16(*r_dst);
3404 FLAG_V = VFLAG_CLEAR;
3405 }
3406
3407
m68k_op_roxr_32_r(void)3408 void m68k_op_roxr_32_r(void)
3409 {
3410 #if M68K_USE_64_BIT
3411
3412 uint* r_dst = &DY;
3413 uint orig_shift = DX & 0x3f;
3414
3415 if(orig_shift != 0)
3416 {
3417 uint shift = orig_shift % 33;
3418 uint64 src = *r_dst;
3419 uint64 res = src | (((uint64)XFLAG_AS_1()) << 32);
3420
3421 res = ROR_33_64(res, shift);
3422
3423 USE_CYCLES(orig_shift<<CYC_SHIFT);
3424
3425 FLAG_C = FLAG_X = res >> 24;
3426 res = MASK_OUT_ABOVE_32(res);
3427
3428 *r_dst = res;
3429 FLAG_N = NFLAG_32(res);
3430 FLAG_Z = res;
3431 FLAG_V = VFLAG_CLEAR;
3432 return;
3433 }
3434
3435 FLAG_C = FLAG_X;
3436 FLAG_N = NFLAG_32(*r_dst);
3437 FLAG_Z = *r_dst;
3438 FLAG_V = VFLAG_CLEAR;
3439
3440 #else
3441
3442 uint* r_dst = &DY;
3443 uint orig_shift = DX & 0x3f;
3444 uint shift = orig_shift % 33;
3445 uint src = *r_dst;
3446 uint res = MASK_OUT_ABOVE_32((ROR_33(src, shift) & ~(1 << (32 - shift))) | (XFLAG_AS_1() << (32 - shift)));
3447 uint new_x_flag = src & (1 << (shift - 1));
3448
3449 if(orig_shift != 0)
3450 USE_CYCLES(orig_shift<<CYC_SHIFT);
3451
3452 if(shift != 0)
3453 {
3454 *r_dst = res;
3455 FLAG_X = (new_x_flag != 0)<<8;
3456 }
3457 else
3458 res = src;
3459 FLAG_C = FLAG_X;
3460 FLAG_N = NFLAG_32(res);
3461 FLAG_Z = res;
3462 FLAG_V = VFLAG_CLEAR;
3463
3464 #endif
3465 }
3466
3467
m68k_op_roxr_16_ai(void)3468 void m68k_op_roxr_16_ai(void)
3469 {
3470 uint ea = EA_AY_AI_16();
3471 uint src = m68ki_read_16(ea);
3472 uint res = ROR_17(src | (XFLAG_AS_1() << 16), 1);
3473
3474 FLAG_C = FLAG_X = res >> 8;
3475 res = MASK_OUT_ABOVE_16(res);
3476
3477 m68ki_write_16(ea, res);
3478
3479 FLAG_N = NFLAG_16(res);
3480 FLAG_Z = res;
3481 FLAG_V = VFLAG_CLEAR;
3482 }
3483
3484
m68k_op_roxr_16_pi(void)3485 void m68k_op_roxr_16_pi(void)
3486 {
3487 uint ea = EA_AY_PI_16();
3488 uint src = m68ki_read_16(ea);
3489 uint res = ROR_17(src | (XFLAG_AS_1() << 16), 1);
3490
3491 FLAG_C = FLAG_X = res >> 8;
3492 res = MASK_OUT_ABOVE_16(res);
3493
3494 m68ki_write_16(ea, res);
3495
3496 FLAG_N = NFLAG_16(res);
3497 FLAG_Z = res;
3498 FLAG_V = VFLAG_CLEAR;
3499 }
3500
3501
m68k_op_roxr_16_pd(void)3502 void m68k_op_roxr_16_pd(void)
3503 {
3504 uint ea = EA_AY_PD_16();
3505 uint src = m68ki_read_16(ea);
3506 uint res = ROR_17(src | (XFLAG_AS_1() << 16), 1);
3507
3508 FLAG_C = FLAG_X = res >> 8;
3509 res = MASK_OUT_ABOVE_16(res);
3510
3511 m68ki_write_16(ea, res);
3512
3513 FLAG_N = NFLAG_16(res);
3514 FLAG_Z = res;
3515 FLAG_V = VFLAG_CLEAR;
3516 }
3517
3518
m68k_op_roxr_16_di(void)3519 void m68k_op_roxr_16_di(void)
3520 {
3521 uint ea = EA_AY_DI_16();
3522 uint src = m68ki_read_16(ea);
3523 uint res = ROR_17(src | (XFLAG_AS_1() << 16), 1);
3524
3525 FLAG_C = FLAG_X = res >> 8;
3526 res = MASK_OUT_ABOVE_16(res);
3527
3528 m68ki_write_16(ea, res);
3529
3530 FLAG_N = NFLAG_16(res);
3531 FLAG_Z = res;
3532 FLAG_V = VFLAG_CLEAR;
3533 }
3534
3535
m68k_op_roxr_16_ix(void)3536 void m68k_op_roxr_16_ix(void)
3537 {
3538 uint ea = EA_AY_IX_16();
3539 uint src = m68ki_read_16(ea);
3540 uint res = ROR_17(src | (XFLAG_AS_1() << 16), 1);
3541
3542 FLAG_C = FLAG_X = res >> 8;
3543 res = MASK_OUT_ABOVE_16(res);
3544
3545 m68ki_write_16(ea, res);
3546
3547 FLAG_N = NFLAG_16(res);
3548 FLAG_Z = res;
3549 FLAG_V = VFLAG_CLEAR;
3550 }
3551
3552
m68k_op_roxr_16_aw(void)3553 void m68k_op_roxr_16_aw(void)
3554 {
3555 uint ea = EA_AW_16();
3556 uint src = m68ki_read_16(ea);
3557 uint res = ROR_17(src | (XFLAG_AS_1() << 16), 1);
3558
3559 FLAG_C = FLAG_X = res >> 8;
3560 res = MASK_OUT_ABOVE_16(res);
3561
3562 m68ki_write_16(ea, res);
3563
3564 FLAG_N = NFLAG_16(res);
3565 FLAG_Z = res;
3566 FLAG_V = VFLAG_CLEAR;
3567 }
3568
3569
m68k_op_roxr_16_al(void)3570 void m68k_op_roxr_16_al(void)
3571 {
3572 uint ea = EA_AL_16();
3573 uint src = m68ki_read_16(ea);
3574 uint res = ROR_17(src | (XFLAG_AS_1() << 16), 1);
3575
3576 FLAG_C = FLAG_X = res >> 8;
3577 res = MASK_OUT_ABOVE_16(res);
3578
3579 m68ki_write_16(ea, res);
3580
3581 FLAG_N = NFLAG_16(res);
3582 FLAG_Z = res;
3583 FLAG_V = VFLAG_CLEAR;
3584 }
3585
3586
m68k_op_roxl_8_s(void)3587 void m68k_op_roxl_8_s(void)
3588 {
3589 uint* r_dst = &DY;
3590 uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
3591 uint src = MASK_OUT_ABOVE_8(*r_dst);
3592 uint res = ROL_9(src | (XFLAG_AS_1() << 8), shift);
3593
3594 FLAG_C = FLAG_X = res;
3595 res = MASK_OUT_ABOVE_8(res);
3596
3597 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
3598
3599 FLAG_N = NFLAG_8(res);
3600 FLAG_Z = res;
3601 FLAG_V = VFLAG_CLEAR;
3602 }
3603
3604
m68k_op_roxl_16_s(void)3605 void m68k_op_roxl_16_s(void)
3606 {
3607 uint* r_dst = &DY;
3608 uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
3609 uint src = MASK_OUT_ABOVE_16(*r_dst);
3610 uint res = ROL_17(src | (XFLAG_AS_1() << 16), shift);
3611
3612 FLAG_C = FLAG_X = res >> 8;
3613 res = MASK_OUT_ABOVE_16(res);
3614
3615 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
3616
3617 FLAG_N = NFLAG_16(res);
3618 FLAG_Z = res;
3619 FLAG_V = VFLAG_CLEAR;
3620 }
3621
3622
m68k_op_roxl_32_s(void)3623 void m68k_op_roxl_32_s(void)
3624 {
3625 #if M68K_USE_64_BIT
3626
3627 uint* r_dst = &DY;
3628 uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
3629 uint64 src = *r_dst;
3630 uint64 res = src | (((uint64)XFLAG_AS_1()) << 32);
3631
3632 res = ROL_33_64(res, shift);
3633
3634 FLAG_C = FLAG_X = res >> 24;
3635 res = MASK_OUT_ABOVE_32(res);
3636
3637 *r_dst = res;
3638
3639 FLAG_N = NFLAG_32(res);
3640 FLAG_Z = res;
3641 FLAG_V = VFLAG_CLEAR;
3642
3643 #else
3644
3645 uint* r_dst = &DY;
3646 uint shift = (((REG_IR >> 9) - 1) & 7) + 1;
3647 uint src = *r_dst;
3648 uint res = MASK_OUT_ABOVE_32((ROL_33(src, shift) & ~(1 << (shift - 1))) | (XFLAG_AS_1() << (shift - 1)));
3649 uint new_x_flag = src & (1 << (32 - shift));
3650
3651 *r_dst = res;
3652
3653 FLAG_C = FLAG_X = (new_x_flag != 0)<<8;
3654 FLAG_N = NFLAG_32(res);
3655 FLAG_Z = res;
3656 FLAG_V = VFLAG_CLEAR;
3657
3658 #endif
3659 }
3660
3661
m68k_op_roxl_8_r(void)3662 void m68k_op_roxl_8_r(void)
3663 {
3664 uint* r_dst = &DY;
3665 uint orig_shift = DX & 0x3f;
3666
3667
3668 if(orig_shift != 0)
3669 {
3670 uint shift = orig_shift % 9;
3671 uint src = MASK_OUT_ABOVE_8(*r_dst);
3672 uint res = ROL_9(src | (XFLAG_AS_1() << 8), shift);
3673
3674 USE_CYCLES(orig_shift<<CYC_SHIFT);
3675
3676 FLAG_C = FLAG_X = res;
3677 res = MASK_OUT_ABOVE_8(res);
3678
3679 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
3680 FLAG_N = NFLAG_8(res);
3681 FLAG_Z = res;
3682 FLAG_V = VFLAG_CLEAR;
3683 return;
3684 }
3685
3686 FLAG_C = FLAG_X;
3687 FLAG_N = NFLAG_8(*r_dst);
3688 FLAG_Z = MASK_OUT_ABOVE_8(*r_dst);
3689 FLAG_V = VFLAG_CLEAR;
3690 }
3691
3692
m68k_op_roxl_16_r(void)3693 void m68k_op_roxl_16_r(void)
3694 {
3695 uint* r_dst = &DY;
3696 uint orig_shift = DX & 0x3f;
3697
3698 if(orig_shift != 0)
3699 {
3700 uint shift = orig_shift % 17;
3701 uint src = MASK_OUT_ABOVE_16(*r_dst);
3702 uint res = ROL_17(src | (XFLAG_AS_1() << 16), shift);
3703
3704 USE_CYCLES(orig_shift<<CYC_SHIFT);
3705
3706 FLAG_C = FLAG_X = res >> 8;
3707 res = MASK_OUT_ABOVE_16(res);
3708
3709 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
3710 FLAG_N = NFLAG_16(res);
3711 FLAG_Z = res;
3712 FLAG_V = VFLAG_CLEAR;
3713 return;
3714 }
3715
3716 FLAG_C = FLAG_X;
3717 FLAG_N = NFLAG_16(*r_dst);
3718 FLAG_Z = MASK_OUT_ABOVE_16(*r_dst);
3719 FLAG_V = VFLAG_CLEAR;
3720 }
3721
3722
m68k_op_roxl_32_r(void)3723 void m68k_op_roxl_32_r(void)
3724 {
3725 #if M68K_USE_64_BIT
3726
3727 uint* r_dst = &DY;
3728 uint orig_shift = DX & 0x3f;
3729
3730 if(orig_shift != 0)
3731 {
3732 uint shift = orig_shift % 33;
3733 uint64 src = *r_dst;
3734 uint64 res = src | (((uint64)XFLAG_AS_1()) << 32);
3735
3736 res = ROL_33_64(res, shift);
3737
3738 USE_CYCLES(orig_shift<<CYC_SHIFT);
3739
3740 FLAG_C = FLAG_X = res >> 24;
3741 res = MASK_OUT_ABOVE_32(res);
3742
3743 *r_dst = res;
3744 FLAG_N = NFLAG_32(res);
3745 FLAG_Z = res;
3746 FLAG_V = VFLAG_CLEAR;
3747 return;
3748 }
3749
3750 FLAG_C = FLAG_X;
3751 FLAG_N = NFLAG_32(*r_dst);
3752 FLAG_Z = *r_dst;
3753 FLAG_V = VFLAG_CLEAR;
3754
3755 #else
3756
3757 uint* r_dst = &DY;
3758 uint orig_shift = DX & 0x3f;
3759 uint shift = orig_shift % 33;
3760 uint src = *r_dst;
3761 uint res = MASK_OUT_ABOVE_32((ROL_33(src, shift) & ~(1 << (shift - 1))) | (XFLAG_AS_1() << (shift - 1)));
3762 uint new_x_flag = src & (1 << (32 - shift));
3763
3764 if(orig_shift != 0)
3765 USE_CYCLES(orig_shift<<CYC_SHIFT);
3766
3767 if(shift != 0)
3768 {
3769 *r_dst = res;
3770 FLAG_X = (new_x_flag != 0)<<8;
3771 }
3772 else
3773 res = src;
3774 FLAG_C = FLAG_X;
3775 FLAG_N = NFLAG_32(res);
3776 FLAG_Z = res;
3777 FLAG_V = VFLAG_CLEAR;
3778
3779 #endif
3780 }
3781
3782
m68k_op_roxl_16_ai(void)3783 void m68k_op_roxl_16_ai(void)
3784 {
3785 uint ea = EA_AY_AI_16();
3786 uint src = m68ki_read_16(ea);
3787 uint res = ROL_17(src | (XFLAG_AS_1() << 16), 1);
3788
3789 FLAG_C = FLAG_X = res >> 8;
3790 res = MASK_OUT_ABOVE_16(res);
3791
3792 m68ki_write_16(ea, res);
3793
3794 FLAG_N = NFLAG_16(res);
3795 FLAG_Z = res;
3796 FLAG_V = VFLAG_CLEAR;
3797 }
3798
3799
m68k_op_roxl_16_pi(void)3800 void m68k_op_roxl_16_pi(void)
3801 {
3802 uint ea = EA_AY_PI_16();
3803 uint src = m68ki_read_16(ea);
3804 uint res = ROL_17(src | (XFLAG_AS_1() << 16), 1);
3805
3806 FLAG_C = FLAG_X = res >> 8;
3807 res = MASK_OUT_ABOVE_16(res);
3808
3809 m68ki_write_16(ea, res);
3810
3811 FLAG_N = NFLAG_16(res);
3812 FLAG_Z = res;
3813 FLAG_V = VFLAG_CLEAR;
3814 }
3815
3816
m68k_op_roxl_16_pd(void)3817 void m68k_op_roxl_16_pd(void)
3818 {
3819 uint ea = EA_AY_PD_16();
3820 uint src = m68ki_read_16(ea);
3821 uint res = ROL_17(src | (XFLAG_AS_1() << 16), 1);
3822
3823 FLAG_C = FLAG_X = res >> 8;
3824 res = MASK_OUT_ABOVE_16(res);
3825
3826 m68ki_write_16(ea, res);
3827
3828 FLAG_N = NFLAG_16(res);
3829 FLAG_Z = res;
3830 FLAG_V = VFLAG_CLEAR;
3831 }
3832
3833
m68k_op_roxl_16_di(void)3834 void m68k_op_roxl_16_di(void)
3835 {
3836 uint ea = EA_AY_DI_16();
3837 uint src = m68ki_read_16(ea);
3838 uint res = ROL_17(src | (XFLAG_AS_1() << 16), 1);
3839
3840 FLAG_C = FLAG_X = res >> 8;
3841 res = MASK_OUT_ABOVE_16(res);
3842
3843 m68ki_write_16(ea, res);
3844
3845 FLAG_N = NFLAG_16(res);
3846 FLAG_Z = res;
3847 FLAG_V = VFLAG_CLEAR;
3848 }
3849
3850
m68k_op_roxl_16_ix(void)3851 void m68k_op_roxl_16_ix(void)
3852 {
3853 uint ea = EA_AY_IX_16();
3854 uint src = m68ki_read_16(ea);
3855 uint res = ROL_17(src | (XFLAG_AS_1() << 16), 1);
3856
3857 FLAG_C = FLAG_X = res >> 8;
3858 res = MASK_OUT_ABOVE_16(res);
3859
3860 m68ki_write_16(ea, res);
3861
3862 FLAG_N = NFLAG_16(res);
3863 FLAG_Z = res;
3864 FLAG_V = VFLAG_CLEAR;
3865 }
3866
3867
m68k_op_roxl_16_aw(void)3868 void m68k_op_roxl_16_aw(void)
3869 {
3870 uint ea = EA_AW_16();
3871 uint src = m68ki_read_16(ea);
3872 uint res = ROL_17(src | (XFLAG_AS_1() << 16), 1);
3873
3874 FLAG_C = FLAG_X = res >> 8;
3875 res = MASK_OUT_ABOVE_16(res);
3876
3877 m68ki_write_16(ea, res);
3878
3879 FLAG_N = NFLAG_16(res);
3880 FLAG_Z = res;
3881 FLAG_V = VFLAG_CLEAR;
3882 }
3883
3884
m68k_op_roxl_16_al(void)3885 void m68k_op_roxl_16_al(void)
3886 {
3887 uint ea = EA_AL_16();
3888 uint src = m68ki_read_16(ea);
3889 uint res = ROL_17(src | (XFLAG_AS_1() << 16), 1);
3890
3891 FLAG_C = FLAG_X = res >> 8;
3892 res = MASK_OUT_ABOVE_16(res);
3893
3894 m68ki_write_16(ea, res);
3895
3896 FLAG_N = NFLAG_16(res);
3897 FLAG_Z = res;
3898 FLAG_V = VFLAG_CLEAR;
3899 }
3900
3901
m68k_op_rtd_32(void)3902 void m68k_op_rtd_32(void)
3903 {
3904 if(CPU_TYPE_IS_010_PLUS(CPU_TYPE))
3905 {
3906 uint new_pc = m68ki_pull_32();
3907
3908 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
3909 REG_A[7] = MASK_OUT_ABOVE_32(REG_A[7] + MAKE_INT_16(OPER_I_16()));
3910 m68ki_jump(new_pc);
3911 return;
3912 }
3913 m68ki_exception_illegal();
3914 }
3915
3916
m68k_op_rte_32(void)3917 void m68k_op_rte_32(void)
3918 {
3919 if(FLAG_S)
3920 {
3921 uint new_sr;
3922 uint new_pc;
3923 uint format_word;
3924
3925 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
3926
3927 if(CPU_TYPE_IS_000(CPU_TYPE))
3928 {
3929 new_sr = m68ki_pull_16();
3930 new_pc = m68ki_pull_32();
3931 m68ki_jump(new_pc);
3932 m68ki_set_sr(new_sr);
3933
3934 CPU_INSTR_MODE = INSTRUCTION_YES;
3935 CPU_RUN_MODE = RUN_MODE_NORMAL;
3936
3937 return;
3938 }
3939
3940 if(CPU_TYPE_IS_010(CPU_TYPE))
3941 {
3942 format_word = m68ki_read_16(REG_A[7]+6) >> 12;
3943 if(format_word == 0)
3944 {
3945 new_sr = m68ki_pull_16();
3946 new_pc = m68ki_pull_32();
3947 m68ki_fake_pull_16(); /* format word */
3948 m68ki_jump(new_pc);
3949 m68ki_set_sr(new_sr);
3950 CPU_INSTR_MODE = INSTRUCTION_YES;
3951 CPU_RUN_MODE = RUN_MODE_NORMAL;
3952 return;
3953 }
3954 CPU_INSTR_MODE = INSTRUCTION_YES;
3955 CPU_RUN_MODE = RUN_MODE_NORMAL;
3956 /* Not handling bus fault (9) */
3957 m68ki_exception_format_error();
3958 return;
3959 }
3960
3961 /* Otherwise it's 020 */
3962 rte_loop:
3963 format_word = m68ki_read_16(REG_A[7]+6) >> 12;
3964 switch(format_word)
3965 {
3966 case 0: /* Normal */
3967 new_sr = m68ki_pull_16();
3968 new_pc = m68ki_pull_32();
3969 m68ki_fake_pull_16(); /* format word */
3970 m68ki_jump(new_pc);
3971 m68ki_set_sr(new_sr);
3972 CPU_INSTR_MODE = INSTRUCTION_YES;
3973 CPU_RUN_MODE = RUN_MODE_NORMAL;
3974 return;
3975 case 1: /* Throwaway */
3976 new_sr = m68ki_pull_16();
3977 m68ki_fake_pull_32(); /* program counter */
3978 m68ki_fake_pull_16(); /* format word */
3979 m68ki_set_sr_noint(new_sr);
3980 goto rte_loop;
3981 case 2: /* Trap */
3982 new_sr = m68ki_pull_16();
3983 new_pc = m68ki_pull_32();
3984 m68ki_fake_pull_16(); /* format word */
3985 m68ki_fake_pull_32(); /* address */
3986 m68ki_jump(new_pc);
3987 m68ki_set_sr(new_sr);
3988 CPU_INSTR_MODE = INSTRUCTION_YES;
3989 CPU_RUN_MODE = RUN_MODE_NORMAL;
3990 return;
3991 }
3992 /* Not handling long or short bus fault */
3993 CPU_INSTR_MODE = INSTRUCTION_YES;
3994 CPU_RUN_MODE = RUN_MODE_NORMAL;
3995 m68ki_exception_format_error();
3996 return;
3997 }
3998 m68ki_exception_privilege_violation();
3999 }
4000
4001
m68k_op_rtm_32(void)4002 void m68k_op_rtm_32(void)
4003 {
4004 if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE))
4005 {
4006 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
4007 M68K_DO_LOG((M68K_LOG_FILEHANDLE "%s at %08X: called unimplemented instruction %04X (%s)\n",
4008 m68ki_cpu_names[CPU_TYPE], ADDRESS_68K(REG_PC - 2), REG_IR,
4009 m68k_disassemble_quick(ADDRESS_68K(REG_PC - 2))));
4010 return;
4011 }
4012 m68ki_exception_illegal();
4013 }
4014
4015
m68k_op_rtr_32(void)4016 void m68k_op_rtr_32(void)
4017 {
4018 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
4019 m68ki_set_ccr(m68ki_pull_16());
4020 m68ki_jump(m68ki_pull_32());
4021 }
4022
4023
m68k_op_rts_32(void)4024 void m68k_op_rts_32(void)
4025 {
4026 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
4027 m68ki_jump(m68ki_pull_32());
4028 }
4029
4030
m68k_op_sbcd_8_rr(void)4031 void m68k_op_sbcd_8_rr(void)
4032 {
4033 uint* r_dst = &DX;
4034 uint src = DY;
4035 uint dst = *r_dst;
4036 uint res = LOW_NIBBLE(dst) - LOW_NIBBLE(src) - XFLAG_AS_1();
4037
4038 FLAG_V = ~res; /* Undefined V behavior */
4039
4040 if(res > 9)
4041 res -= 6;
4042 res += HIGH_NIBBLE(dst) - HIGH_NIBBLE(src);
4043 FLAG_X = FLAG_C = (res > 0x99) << 8;
4044 if(FLAG_C)
4045 res += 0xa0;
4046
4047 res = MASK_OUT_ABOVE_8(res);
4048
4049 FLAG_V &= res; /* Undefined V behavior part II */
4050 FLAG_N = NFLAG_8(res); /* Undefined N behavior */
4051 FLAG_Z |= res;
4052
4053 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
4054 }
4055
4056
m68k_op_sbcd_8_mm_ax7(void)4057 void m68k_op_sbcd_8_mm_ax7(void)
4058 {
4059 uint src = OPER_AY_PD_8();
4060 uint ea = EA_A7_PD_8();
4061 uint dst = m68ki_read_8(ea);
4062 uint res = LOW_NIBBLE(dst) - LOW_NIBBLE(src) - XFLAG_AS_1();
4063
4064 FLAG_V = ~res; /* Undefined V behavior */
4065
4066 if(res > 9)
4067 res -= 6;
4068 res += HIGH_NIBBLE(dst) - HIGH_NIBBLE(src);
4069 FLAG_X = FLAG_C = (res > 0x99) << 8;
4070 if(FLAG_C)
4071 res += 0xa0;
4072
4073 res = MASK_OUT_ABOVE_8(res);
4074
4075 FLAG_V &= res; /* Undefined V behavior part II */
4076 FLAG_N = NFLAG_8(res); /* Undefined N behavior */
4077 FLAG_Z |= res;
4078
4079 m68ki_write_8(ea, res);
4080 }
4081
4082
m68k_op_sbcd_8_mm_ay7(void)4083 void m68k_op_sbcd_8_mm_ay7(void)
4084 {
4085 uint src = OPER_A7_PD_8();
4086 uint ea = EA_AX_PD_8();
4087 uint dst = m68ki_read_8(ea);
4088 uint res = LOW_NIBBLE(dst) - LOW_NIBBLE(src) - XFLAG_AS_1();
4089
4090 FLAG_V = ~res; /* Undefined V behavior */
4091
4092 if(res > 9)
4093 res -= 6;
4094 res += HIGH_NIBBLE(dst) - HIGH_NIBBLE(src);
4095 FLAG_X = FLAG_C = (res > 0x99) << 8;
4096 if(FLAG_C)
4097 res += 0xa0;
4098
4099 res = MASK_OUT_ABOVE_8(res);
4100
4101 FLAG_V &= res; /* Undefined V behavior part II */
4102 FLAG_N = NFLAG_8(res); /* Undefined N behavior */
4103 FLAG_Z |= res;
4104
4105 m68ki_write_8(ea, res);
4106 }
4107
4108
m68k_op_sbcd_8_mm_axy7(void)4109 void m68k_op_sbcd_8_mm_axy7(void)
4110 {
4111 uint src = OPER_A7_PD_8();
4112 uint ea = EA_A7_PD_8();
4113 uint dst = m68ki_read_8(ea);
4114 uint res = LOW_NIBBLE(dst) - LOW_NIBBLE(src) - XFLAG_AS_1();
4115
4116 FLAG_V = ~res; /* Undefined V behavior */
4117
4118 if(res > 9)
4119 res -= 6;
4120 res += HIGH_NIBBLE(dst) - HIGH_NIBBLE(src);
4121 FLAG_X = FLAG_C = (res > 0x99) << 8;
4122 if(FLAG_C)
4123 res += 0xa0;
4124
4125 res = MASK_OUT_ABOVE_8(res);
4126
4127 FLAG_V &= res; /* Undefined V behavior part II */
4128 FLAG_N = NFLAG_8(res); /* Undefined N behavior */
4129 FLAG_Z |= res;
4130
4131 m68ki_write_8(ea, res);
4132 }
4133
4134
m68k_op_sbcd_8_mm(void)4135 void m68k_op_sbcd_8_mm(void)
4136 {
4137 uint src = OPER_AY_PD_8();
4138 uint ea = EA_AX_PD_8();
4139 uint dst = m68ki_read_8(ea);
4140 uint res = LOW_NIBBLE(dst) - LOW_NIBBLE(src) - XFLAG_AS_1();
4141
4142 FLAG_V = ~res; /* Undefined V behavior */
4143
4144 if(res > 9)
4145 res -= 6;
4146 res += HIGH_NIBBLE(dst) - HIGH_NIBBLE(src);
4147 FLAG_X = FLAG_C = (res > 0x99) << 8;
4148 if(FLAG_C)
4149 res += 0xa0;
4150
4151 res = MASK_OUT_ABOVE_8(res);
4152
4153 FLAG_V &= res; /* Undefined V behavior part II */
4154 FLAG_N = NFLAG_8(res); /* Undefined N behavior */
4155 FLAG_Z |= res;
4156
4157 m68ki_write_8(ea, res);
4158 }
4159
4160
m68k_op_st_8_d(void)4161 void m68k_op_st_8_d(void)
4162 {
4163 DY |= 0xff;
4164 }
4165
4166
m68k_op_st_8_ai(void)4167 void m68k_op_st_8_ai(void)
4168 {
4169 m68ki_write_8(EA_AY_AI_8(), 0xff);
4170 }
4171
4172
m68k_op_st_8_pi(void)4173 void m68k_op_st_8_pi(void)
4174 {
4175 m68ki_write_8(EA_AY_PI_8(), 0xff);
4176 }
4177
4178
m68k_op_st_8_pi7(void)4179 void m68k_op_st_8_pi7(void)
4180 {
4181 m68ki_write_8(EA_A7_PI_8(), 0xff);
4182 }
4183
4184
m68k_op_st_8_pd(void)4185 void m68k_op_st_8_pd(void)
4186 {
4187 m68ki_write_8(EA_AY_PD_8(), 0xff);
4188 }
4189
4190
m68k_op_st_8_pd7(void)4191 void m68k_op_st_8_pd7(void)
4192 {
4193 m68ki_write_8(EA_A7_PD_8(), 0xff);
4194 }
4195
4196
m68k_op_st_8_di(void)4197 void m68k_op_st_8_di(void)
4198 {
4199 m68ki_write_8(EA_AY_DI_8(), 0xff);
4200 }
4201
4202
m68k_op_st_8_ix(void)4203 void m68k_op_st_8_ix(void)
4204 {
4205 m68ki_write_8(EA_AY_IX_8(), 0xff);
4206 }
4207
4208
m68k_op_st_8_aw(void)4209 void m68k_op_st_8_aw(void)
4210 {
4211 m68ki_write_8(EA_AW_8(), 0xff);
4212 }
4213
4214
m68k_op_st_8_al(void)4215 void m68k_op_st_8_al(void)
4216 {
4217 m68ki_write_8(EA_AL_8(), 0xff);
4218 }
4219
4220
m68k_op_sf_8_d(void)4221 void m68k_op_sf_8_d(void)
4222 {
4223 DY &= 0xffffff00;
4224 }
4225
4226
m68k_op_sf_8_ai(void)4227 void m68k_op_sf_8_ai(void)
4228 {
4229 m68ki_write_8(EA_AY_AI_8(), 0);
4230 }
4231
4232
m68k_op_sf_8_pi(void)4233 void m68k_op_sf_8_pi(void)
4234 {
4235 m68ki_write_8(EA_AY_PI_8(), 0);
4236 }
4237
4238
m68k_op_sf_8_pi7(void)4239 void m68k_op_sf_8_pi7(void)
4240 {
4241 m68ki_write_8(EA_A7_PI_8(), 0);
4242 }
4243
4244
m68k_op_sf_8_pd(void)4245 void m68k_op_sf_8_pd(void)
4246 {
4247 m68ki_write_8(EA_AY_PD_8(), 0);
4248 }
4249
4250
m68k_op_sf_8_pd7(void)4251 void m68k_op_sf_8_pd7(void)
4252 {
4253 m68ki_write_8(EA_A7_PD_8(), 0);
4254 }
4255
4256
m68k_op_sf_8_di(void)4257 void m68k_op_sf_8_di(void)
4258 {
4259 m68ki_write_8(EA_AY_DI_8(), 0);
4260 }
4261
4262
m68k_op_sf_8_ix(void)4263 void m68k_op_sf_8_ix(void)
4264 {
4265 m68ki_write_8(EA_AY_IX_8(), 0);
4266 }
4267
4268
m68k_op_sf_8_aw(void)4269 void m68k_op_sf_8_aw(void)
4270 {
4271 m68ki_write_8(EA_AW_8(), 0);
4272 }
4273
4274
m68k_op_sf_8_al(void)4275 void m68k_op_sf_8_al(void)
4276 {
4277 m68ki_write_8(EA_AL_8(), 0);
4278 }
4279
4280
m68k_op_shi_8_d(void)4281 void m68k_op_shi_8_d(void)
4282 {
4283 if(COND_HI())
4284 {
4285 DY |= 0xff;
4286 USE_CYCLES(CYC_SCC_R_TRUE);
4287 return;
4288 }
4289 DY &= 0xffffff00;
4290 }
4291
4292
m68k_op_sls_8_d(void)4293 void m68k_op_sls_8_d(void)
4294 {
4295 if(COND_LS())
4296 {
4297 DY |= 0xff;
4298 USE_CYCLES(CYC_SCC_R_TRUE);
4299 return;
4300 }
4301 DY &= 0xffffff00;
4302 }
4303
4304
m68k_op_scc_8_d(void)4305 void m68k_op_scc_8_d(void)
4306 {
4307 if(COND_CC())
4308 {
4309 DY |= 0xff;
4310 USE_CYCLES(CYC_SCC_R_TRUE);
4311 return;
4312 }
4313 DY &= 0xffffff00;
4314 }
4315
4316
m68k_op_scs_8_d(void)4317 void m68k_op_scs_8_d(void)
4318 {
4319 if(COND_CS())
4320 {
4321 DY |= 0xff;
4322 USE_CYCLES(CYC_SCC_R_TRUE);
4323 return;
4324 }
4325 DY &= 0xffffff00;
4326 }
4327
4328
m68k_op_sne_8_d(void)4329 void m68k_op_sne_8_d(void)
4330 {
4331 if(COND_NE())
4332 {
4333 DY |= 0xff;
4334 USE_CYCLES(CYC_SCC_R_TRUE);
4335 return;
4336 }
4337 DY &= 0xffffff00;
4338 }
4339
4340
m68k_op_seq_8_d(void)4341 void m68k_op_seq_8_d(void)
4342 {
4343 if(COND_EQ())
4344 {
4345 DY |= 0xff;
4346 USE_CYCLES(CYC_SCC_R_TRUE);
4347 return;
4348 }
4349 DY &= 0xffffff00;
4350 }
4351
4352
m68k_op_svc_8_d(void)4353 void m68k_op_svc_8_d(void)
4354 {
4355 if(COND_VC())
4356 {
4357 DY |= 0xff;
4358 USE_CYCLES(CYC_SCC_R_TRUE);
4359 return;
4360 }
4361 DY &= 0xffffff00;
4362 }
4363
4364
m68k_op_svs_8_d(void)4365 void m68k_op_svs_8_d(void)
4366 {
4367 if(COND_VS())
4368 {
4369 DY |= 0xff;
4370 USE_CYCLES(CYC_SCC_R_TRUE);
4371 return;
4372 }
4373 DY &= 0xffffff00;
4374 }
4375
4376
m68k_op_spl_8_d(void)4377 void m68k_op_spl_8_d(void)
4378 {
4379 if(COND_PL())
4380 {
4381 DY |= 0xff;
4382 USE_CYCLES(CYC_SCC_R_TRUE);
4383 return;
4384 }
4385 DY &= 0xffffff00;
4386 }
4387
4388
m68k_op_smi_8_d(void)4389 void m68k_op_smi_8_d(void)
4390 {
4391 if(COND_MI())
4392 {
4393 DY |= 0xff;
4394 USE_CYCLES(CYC_SCC_R_TRUE);
4395 return;
4396 }
4397 DY &= 0xffffff00;
4398 }
4399
4400
m68k_op_sge_8_d(void)4401 void m68k_op_sge_8_d(void)
4402 {
4403 if(COND_GE())
4404 {
4405 DY |= 0xff;
4406 USE_CYCLES(CYC_SCC_R_TRUE);
4407 return;
4408 }
4409 DY &= 0xffffff00;
4410 }
4411
4412
m68k_op_slt_8_d(void)4413 void m68k_op_slt_8_d(void)
4414 {
4415 if(COND_LT())
4416 {
4417 DY |= 0xff;
4418 USE_CYCLES(CYC_SCC_R_TRUE);
4419 return;
4420 }
4421 DY &= 0xffffff00;
4422 }
4423
4424
m68k_op_sgt_8_d(void)4425 void m68k_op_sgt_8_d(void)
4426 {
4427 if(COND_GT())
4428 {
4429 DY |= 0xff;
4430 USE_CYCLES(CYC_SCC_R_TRUE);
4431 return;
4432 }
4433 DY &= 0xffffff00;
4434 }
4435
4436
m68k_op_sle_8_d(void)4437 void m68k_op_sle_8_d(void)
4438 {
4439 if(COND_LE())
4440 {
4441 DY |= 0xff;
4442 USE_CYCLES(CYC_SCC_R_TRUE);
4443 return;
4444 }
4445 DY &= 0xffffff00;
4446 }
4447
4448
m68k_op_shi_8_ai(void)4449 void m68k_op_shi_8_ai(void)
4450 {
4451 m68ki_write_8(EA_AY_AI_8(), COND_HI() ? 0xff : 0);
4452 }
4453
4454
m68k_op_shi_8_pi(void)4455 void m68k_op_shi_8_pi(void)
4456 {
4457 m68ki_write_8(EA_AY_PI_8(), COND_HI() ? 0xff : 0);
4458 }
4459
4460
m68k_op_shi_8_pi7(void)4461 void m68k_op_shi_8_pi7(void)
4462 {
4463 m68ki_write_8(EA_A7_PI_8(), COND_HI() ? 0xff : 0);
4464 }
4465
4466
m68k_op_shi_8_pd(void)4467 void m68k_op_shi_8_pd(void)
4468 {
4469 m68ki_write_8(EA_AY_PD_8(), COND_HI() ? 0xff : 0);
4470 }
4471
4472
m68k_op_shi_8_pd7(void)4473 void m68k_op_shi_8_pd7(void)
4474 {
4475 m68ki_write_8(EA_A7_PD_8(), COND_HI() ? 0xff : 0);
4476 }
4477
4478
m68k_op_shi_8_di(void)4479 void m68k_op_shi_8_di(void)
4480 {
4481 m68ki_write_8(EA_AY_DI_8(), COND_HI() ? 0xff : 0);
4482 }
4483
4484
m68k_op_shi_8_ix(void)4485 void m68k_op_shi_8_ix(void)
4486 {
4487 m68ki_write_8(EA_AY_IX_8(), COND_HI() ? 0xff : 0);
4488 }
4489
4490
m68k_op_shi_8_aw(void)4491 void m68k_op_shi_8_aw(void)
4492 {
4493 m68ki_write_8(EA_AW_8(), COND_HI() ? 0xff : 0);
4494 }
4495
4496
m68k_op_shi_8_al(void)4497 void m68k_op_shi_8_al(void)
4498 {
4499 m68ki_write_8(EA_AL_8(), COND_HI() ? 0xff : 0);
4500 }
4501
4502
m68k_op_sls_8_ai(void)4503 void m68k_op_sls_8_ai(void)
4504 {
4505 m68ki_write_8(EA_AY_AI_8(), COND_LS() ? 0xff : 0);
4506 }
4507
4508
m68k_op_sls_8_pi(void)4509 void m68k_op_sls_8_pi(void)
4510 {
4511 m68ki_write_8(EA_AY_PI_8(), COND_LS() ? 0xff : 0);
4512 }
4513
4514
m68k_op_sls_8_pi7(void)4515 void m68k_op_sls_8_pi7(void)
4516 {
4517 m68ki_write_8(EA_A7_PI_8(), COND_LS() ? 0xff : 0);
4518 }
4519
4520
m68k_op_sls_8_pd(void)4521 void m68k_op_sls_8_pd(void)
4522 {
4523 m68ki_write_8(EA_AY_PD_8(), COND_LS() ? 0xff : 0);
4524 }
4525
4526
m68k_op_sls_8_pd7(void)4527 void m68k_op_sls_8_pd7(void)
4528 {
4529 m68ki_write_8(EA_A7_PD_8(), COND_LS() ? 0xff : 0);
4530 }
4531
4532
m68k_op_sls_8_di(void)4533 void m68k_op_sls_8_di(void)
4534 {
4535 m68ki_write_8(EA_AY_DI_8(), COND_LS() ? 0xff : 0);
4536 }
4537
4538
m68k_op_sls_8_ix(void)4539 void m68k_op_sls_8_ix(void)
4540 {
4541 m68ki_write_8(EA_AY_IX_8(), COND_LS() ? 0xff : 0);
4542 }
4543
4544
m68k_op_sls_8_aw(void)4545 void m68k_op_sls_8_aw(void)
4546 {
4547 m68ki_write_8(EA_AW_8(), COND_LS() ? 0xff : 0);
4548 }
4549
4550
m68k_op_sls_8_al(void)4551 void m68k_op_sls_8_al(void)
4552 {
4553 m68ki_write_8(EA_AL_8(), COND_LS() ? 0xff : 0);
4554 }
4555
4556
m68k_op_scc_8_ai(void)4557 void m68k_op_scc_8_ai(void)
4558 {
4559 m68ki_write_8(EA_AY_AI_8(), COND_CC() ? 0xff : 0);
4560 }
4561
4562
m68k_op_scc_8_pi(void)4563 void m68k_op_scc_8_pi(void)
4564 {
4565 m68ki_write_8(EA_AY_PI_8(), COND_CC() ? 0xff : 0);
4566 }
4567
4568
m68k_op_scc_8_pi7(void)4569 void m68k_op_scc_8_pi7(void)
4570 {
4571 m68ki_write_8(EA_A7_PI_8(), COND_CC() ? 0xff : 0);
4572 }
4573
4574
m68k_op_scc_8_pd(void)4575 void m68k_op_scc_8_pd(void)
4576 {
4577 m68ki_write_8(EA_AY_PD_8(), COND_CC() ? 0xff : 0);
4578 }
4579
4580
m68k_op_scc_8_pd7(void)4581 void m68k_op_scc_8_pd7(void)
4582 {
4583 m68ki_write_8(EA_A7_PD_8(), COND_CC() ? 0xff : 0);
4584 }
4585
4586
m68k_op_scc_8_di(void)4587 void m68k_op_scc_8_di(void)
4588 {
4589 m68ki_write_8(EA_AY_DI_8(), COND_CC() ? 0xff : 0);
4590 }
4591
4592
m68k_op_scc_8_ix(void)4593 void m68k_op_scc_8_ix(void)
4594 {
4595 m68ki_write_8(EA_AY_IX_8(), COND_CC() ? 0xff : 0);
4596 }
4597
4598
m68k_op_scc_8_aw(void)4599 void m68k_op_scc_8_aw(void)
4600 {
4601 m68ki_write_8(EA_AW_8(), COND_CC() ? 0xff : 0);
4602 }
4603
4604
m68k_op_scc_8_al(void)4605 void m68k_op_scc_8_al(void)
4606 {
4607 m68ki_write_8(EA_AL_8(), COND_CC() ? 0xff : 0);
4608 }
4609
4610
m68k_op_scs_8_ai(void)4611 void m68k_op_scs_8_ai(void)
4612 {
4613 m68ki_write_8(EA_AY_AI_8(), COND_CS() ? 0xff : 0);
4614 }
4615
4616
m68k_op_scs_8_pi(void)4617 void m68k_op_scs_8_pi(void)
4618 {
4619 m68ki_write_8(EA_AY_PI_8(), COND_CS() ? 0xff : 0);
4620 }
4621
4622
m68k_op_scs_8_pi7(void)4623 void m68k_op_scs_8_pi7(void)
4624 {
4625 m68ki_write_8(EA_A7_PI_8(), COND_CS() ? 0xff : 0);
4626 }
4627
4628
m68k_op_scs_8_pd(void)4629 void m68k_op_scs_8_pd(void)
4630 {
4631 m68ki_write_8(EA_AY_PD_8(), COND_CS() ? 0xff : 0);
4632 }
4633
4634
m68k_op_scs_8_pd7(void)4635 void m68k_op_scs_8_pd7(void)
4636 {
4637 m68ki_write_8(EA_A7_PD_8(), COND_CS() ? 0xff : 0);
4638 }
4639
4640
m68k_op_scs_8_di(void)4641 void m68k_op_scs_8_di(void)
4642 {
4643 m68ki_write_8(EA_AY_DI_8(), COND_CS() ? 0xff : 0);
4644 }
4645
4646
m68k_op_scs_8_ix(void)4647 void m68k_op_scs_8_ix(void)
4648 {
4649 m68ki_write_8(EA_AY_IX_8(), COND_CS() ? 0xff : 0);
4650 }
4651
4652
m68k_op_scs_8_aw(void)4653 void m68k_op_scs_8_aw(void)
4654 {
4655 m68ki_write_8(EA_AW_8(), COND_CS() ? 0xff : 0);
4656 }
4657
4658
m68k_op_scs_8_al(void)4659 void m68k_op_scs_8_al(void)
4660 {
4661 m68ki_write_8(EA_AL_8(), COND_CS() ? 0xff : 0);
4662 }
4663
4664
m68k_op_sne_8_ai(void)4665 void m68k_op_sne_8_ai(void)
4666 {
4667 m68ki_write_8(EA_AY_AI_8(), COND_NE() ? 0xff : 0);
4668 }
4669
4670
m68k_op_sne_8_pi(void)4671 void m68k_op_sne_8_pi(void)
4672 {
4673 m68ki_write_8(EA_AY_PI_8(), COND_NE() ? 0xff : 0);
4674 }
4675
4676
m68k_op_sne_8_pi7(void)4677 void m68k_op_sne_8_pi7(void)
4678 {
4679 m68ki_write_8(EA_A7_PI_8(), COND_NE() ? 0xff : 0);
4680 }
4681
4682
m68k_op_sne_8_pd(void)4683 void m68k_op_sne_8_pd(void)
4684 {
4685 m68ki_write_8(EA_AY_PD_8(), COND_NE() ? 0xff : 0);
4686 }
4687
4688
m68k_op_sne_8_pd7(void)4689 void m68k_op_sne_8_pd7(void)
4690 {
4691 m68ki_write_8(EA_A7_PD_8(), COND_NE() ? 0xff : 0);
4692 }
4693
4694
m68k_op_sne_8_di(void)4695 void m68k_op_sne_8_di(void)
4696 {
4697 m68ki_write_8(EA_AY_DI_8(), COND_NE() ? 0xff : 0);
4698 }
4699
4700
m68k_op_sne_8_ix(void)4701 void m68k_op_sne_8_ix(void)
4702 {
4703 m68ki_write_8(EA_AY_IX_8(), COND_NE() ? 0xff : 0);
4704 }
4705
4706
m68k_op_sne_8_aw(void)4707 void m68k_op_sne_8_aw(void)
4708 {
4709 m68ki_write_8(EA_AW_8(), COND_NE() ? 0xff : 0);
4710 }
4711
4712
m68k_op_sne_8_al(void)4713 void m68k_op_sne_8_al(void)
4714 {
4715 m68ki_write_8(EA_AL_8(), COND_NE() ? 0xff : 0);
4716 }
4717
4718
m68k_op_seq_8_ai(void)4719 void m68k_op_seq_8_ai(void)
4720 {
4721 m68ki_write_8(EA_AY_AI_8(), COND_EQ() ? 0xff : 0);
4722 }
4723
4724
m68k_op_seq_8_pi(void)4725 void m68k_op_seq_8_pi(void)
4726 {
4727 m68ki_write_8(EA_AY_PI_8(), COND_EQ() ? 0xff : 0);
4728 }
4729
4730
m68k_op_seq_8_pi7(void)4731 void m68k_op_seq_8_pi7(void)
4732 {
4733 m68ki_write_8(EA_A7_PI_8(), COND_EQ() ? 0xff : 0);
4734 }
4735
4736
m68k_op_seq_8_pd(void)4737 void m68k_op_seq_8_pd(void)
4738 {
4739 m68ki_write_8(EA_AY_PD_8(), COND_EQ() ? 0xff : 0);
4740 }
4741
4742
m68k_op_seq_8_pd7(void)4743 void m68k_op_seq_8_pd7(void)
4744 {
4745 m68ki_write_8(EA_A7_PD_8(), COND_EQ() ? 0xff : 0);
4746 }
4747
4748
m68k_op_seq_8_di(void)4749 void m68k_op_seq_8_di(void)
4750 {
4751 m68ki_write_8(EA_AY_DI_8(), COND_EQ() ? 0xff : 0);
4752 }
4753
4754
m68k_op_seq_8_ix(void)4755 void m68k_op_seq_8_ix(void)
4756 {
4757 m68ki_write_8(EA_AY_IX_8(), COND_EQ() ? 0xff : 0);
4758 }
4759
4760
m68k_op_seq_8_aw(void)4761 void m68k_op_seq_8_aw(void)
4762 {
4763 m68ki_write_8(EA_AW_8(), COND_EQ() ? 0xff : 0);
4764 }
4765
4766
m68k_op_seq_8_al(void)4767 void m68k_op_seq_8_al(void)
4768 {
4769 m68ki_write_8(EA_AL_8(), COND_EQ() ? 0xff : 0);
4770 }
4771
4772
m68k_op_svc_8_ai(void)4773 void m68k_op_svc_8_ai(void)
4774 {
4775 m68ki_write_8(EA_AY_AI_8(), COND_VC() ? 0xff : 0);
4776 }
4777
4778
m68k_op_svc_8_pi(void)4779 void m68k_op_svc_8_pi(void)
4780 {
4781 m68ki_write_8(EA_AY_PI_8(), COND_VC() ? 0xff : 0);
4782 }
4783
4784
m68k_op_svc_8_pi7(void)4785 void m68k_op_svc_8_pi7(void)
4786 {
4787 m68ki_write_8(EA_A7_PI_8(), COND_VC() ? 0xff : 0);
4788 }
4789
4790
m68k_op_svc_8_pd(void)4791 void m68k_op_svc_8_pd(void)
4792 {
4793 m68ki_write_8(EA_AY_PD_8(), COND_VC() ? 0xff : 0);
4794 }
4795
4796
m68k_op_svc_8_pd7(void)4797 void m68k_op_svc_8_pd7(void)
4798 {
4799 m68ki_write_8(EA_A7_PD_8(), COND_VC() ? 0xff : 0);
4800 }
4801
4802
m68k_op_svc_8_di(void)4803 void m68k_op_svc_8_di(void)
4804 {
4805 m68ki_write_8(EA_AY_DI_8(), COND_VC() ? 0xff : 0);
4806 }
4807
4808
m68k_op_svc_8_ix(void)4809 void m68k_op_svc_8_ix(void)
4810 {
4811 m68ki_write_8(EA_AY_IX_8(), COND_VC() ? 0xff : 0);
4812 }
4813
4814
m68k_op_svc_8_aw(void)4815 void m68k_op_svc_8_aw(void)
4816 {
4817 m68ki_write_8(EA_AW_8(), COND_VC() ? 0xff : 0);
4818 }
4819
4820
m68k_op_svc_8_al(void)4821 void m68k_op_svc_8_al(void)
4822 {
4823 m68ki_write_8(EA_AL_8(), COND_VC() ? 0xff : 0);
4824 }
4825
4826
m68k_op_svs_8_ai(void)4827 void m68k_op_svs_8_ai(void)
4828 {
4829 m68ki_write_8(EA_AY_AI_8(), COND_VS() ? 0xff : 0);
4830 }
4831
4832
m68k_op_svs_8_pi(void)4833 void m68k_op_svs_8_pi(void)
4834 {
4835 m68ki_write_8(EA_AY_PI_8(), COND_VS() ? 0xff : 0);
4836 }
4837
4838
m68k_op_svs_8_pi7(void)4839 void m68k_op_svs_8_pi7(void)
4840 {
4841 m68ki_write_8(EA_A7_PI_8(), COND_VS() ? 0xff : 0);
4842 }
4843
4844
m68k_op_svs_8_pd(void)4845 void m68k_op_svs_8_pd(void)
4846 {
4847 m68ki_write_8(EA_AY_PD_8(), COND_VS() ? 0xff : 0);
4848 }
4849
4850
m68k_op_svs_8_pd7(void)4851 void m68k_op_svs_8_pd7(void)
4852 {
4853 m68ki_write_8(EA_A7_PD_8(), COND_VS() ? 0xff : 0);
4854 }
4855
4856
m68k_op_svs_8_di(void)4857 void m68k_op_svs_8_di(void)
4858 {
4859 m68ki_write_8(EA_AY_DI_8(), COND_VS() ? 0xff : 0);
4860 }
4861
4862
m68k_op_svs_8_ix(void)4863 void m68k_op_svs_8_ix(void)
4864 {
4865 m68ki_write_8(EA_AY_IX_8(), COND_VS() ? 0xff : 0);
4866 }
4867
4868
m68k_op_svs_8_aw(void)4869 void m68k_op_svs_8_aw(void)
4870 {
4871 m68ki_write_8(EA_AW_8(), COND_VS() ? 0xff : 0);
4872 }
4873
4874
m68k_op_svs_8_al(void)4875 void m68k_op_svs_8_al(void)
4876 {
4877 m68ki_write_8(EA_AL_8(), COND_VS() ? 0xff : 0);
4878 }
4879
4880
m68k_op_spl_8_ai(void)4881 void m68k_op_spl_8_ai(void)
4882 {
4883 m68ki_write_8(EA_AY_AI_8(), COND_PL() ? 0xff : 0);
4884 }
4885
4886
m68k_op_spl_8_pi(void)4887 void m68k_op_spl_8_pi(void)
4888 {
4889 m68ki_write_8(EA_AY_PI_8(), COND_PL() ? 0xff : 0);
4890 }
4891
4892
m68k_op_spl_8_pi7(void)4893 void m68k_op_spl_8_pi7(void)
4894 {
4895 m68ki_write_8(EA_A7_PI_8(), COND_PL() ? 0xff : 0);
4896 }
4897
4898
m68k_op_spl_8_pd(void)4899 void m68k_op_spl_8_pd(void)
4900 {
4901 m68ki_write_8(EA_AY_PD_8(), COND_PL() ? 0xff : 0);
4902 }
4903
4904
m68k_op_spl_8_pd7(void)4905 void m68k_op_spl_8_pd7(void)
4906 {
4907 m68ki_write_8(EA_A7_PD_8(), COND_PL() ? 0xff : 0);
4908 }
4909
4910
m68k_op_spl_8_di(void)4911 void m68k_op_spl_8_di(void)
4912 {
4913 m68ki_write_8(EA_AY_DI_8(), COND_PL() ? 0xff : 0);
4914 }
4915
4916
m68k_op_spl_8_ix(void)4917 void m68k_op_spl_8_ix(void)
4918 {
4919 m68ki_write_8(EA_AY_IX_8(), COND_PL() ? 0xff : 0);
4920 }
4921
4922
m68k_op_spl_8_aw(void)4923 void m68k_op_spl_8_aw(void)
4924 {
4925 m68ki_write_8(EA_AW_8(), COND_PL() ? 0xff : 0);
4926 }
4927
4928
m68k_op_spl_8_al(void)4929 void m68k_op_spl_8_al(void)
4930 {
4931 m68ki_write_8(EA_AL_8(), COND_PL() ? 0xff : 0);
4932 }
4933
4934
m68k_op_smi_8_ai(void)4935 void m68k_op_smi_8_ai(void)
4936 {
4937 m68ki_write_8(EA_AY_AI_8(), COND_MI() ? 0xff : 0);
4938 }
4939
4940
m68k_op_smi_8_pi(void)4941 void m68k_op_smi_8_pi(void)
4942 {
4943 m68ki_write_8(EA_AY_PI_8(), COND_MI() ? 0xff : 0);
4944 }
4945
4946
m68k_op_smi_8_pi7(void)4947 void m68k_op_smi_8_pi7(void)
4948 {
4949 m68ki_write_8(EA_A7_PI_8(), COND_MI() ? 0xff : 0);
4950 }
4951
4952
m68k_op_smi_8_pd(void)4953 void m68k_op_smi_8_pd(void)
4954 {
4955 m68ki_write_8(EA_AY_PD_8(), COND_MI() ? 0xff : 0);
4956 }
4957
4958
m68k_op_smi_8_pd7(void)4959 void m68k_op_smi_8_pd7(void)
4960 {
4961 m68ki_write_8(EA_A7_PD_8(), COND_MI() ? 0xff : 0);
4962 }
4963
4964
m68k_op_smi_8_di(void)4965 void m68k_op_smi_8_di(void)
4966 {
4967 m68ki_write_8(EA_AY_DI_8(), COND_MI() ? 0xff : 0);
4968 }
4969
4970
m68k_op_smi_8_ix(void)4971 void m68k_op_smi_8_ix(void)
4972 {
4973 m68ki_write_8(EA_AY_IX_8(), COND_MI() ? 0xff : 0);
4974 }
4975
4976
m68k_op_smi_8_aw(void)4977 void m68k_op_smi_8_aw(void)
4978 {
4979 m68ki_write_8(EA_AW_8(), COND_MI() ? 0xff : 0);
4980 }
4981
4982
m68k_op_smi_8_al(void)4983 void m68k_op_smi_8_al(void)
4984 {
4985 m68ki_write_8(EA_AL_8(), COND_MI() ? 0xff : 0);
4986 }
4987
4988
m68k_op_sge_8_ai(void)4989 void m68k_op_sge_8_ai(void)
4990 {
4991 m68ki_write_8(EA_AY_AI_8(), COND_GE() ? 0xff : 0);
4992 }
4993
4994
m68k_op_sge_8_pi(void)4995 void m68k_op_sge_8_pi(void)
4996 {
4997 m68ki_write_8(EA_AY_PI_8(), COND_GE() ? 0xff : 0);
4998 }
4999
5000
m68k_op_sge_8_pi7(void)5001 void m68k_op_sge_8_pi7(void)
5002 {
5003 m68ki_write_8(EA_A7_PI_8(), COND_GE() ? 0xff : 0);
5004 }
5005
5006
m68k_op_sge_8_pd(void)5007 void m68k_op_sge_8_pd(void)
5008 {
5009 m68ki_write_8(EA_AY_PD_8(), COND_GE() ? 0xff : 0);
5010 }
5011
5012
m68k_op_sge_8_pd7(void)5013 void m68k_op_sge_8_pd7(void)
5014 {
5015 m68ki_write_8(EA_A7_PD_8(), COND_GE() ? 0xff : 0);
5016 }
5017
5018
m68k_op_sge_8_di(void)5019 void m68k_op_sge_8_di(void)
5020 {
5021 m68ki_write_8(EA_AY_DI_8(), COND_GE() ? 0xff : 0);
5022 }
5023
5024
m68k_op_sge_8_ix(void)5025 void m68k_op_sge_8_ix(void)
5026 {
5027 m68ki_write_8(EA_AY_IX_8(), COND_GE() ? 0xff : 0);
5028 }
5029
5030
m68k_op_sge_8_aw(void)5031 void m68k_op_sge_8_aw(void)
5032 {
5033 m68ki_write_8(EA_AW_8(), COND_GE() ? 0xff : 0);
5034 }
5035
5036
m68k_op_sge_8_al(void)5037 void m68k_op_sge_8_al(void)
5038 {
5039 m68ki_write_8(EA_AL_8(), COND_GE() ? 0xff : 0);
5040 }
5041
5042
m68k_op_slt_8_ai(void)5043 void m68k_op_slt_8_ai(void)
5044 {
5045 m68ki_write_8(EA_AY_AI_8(), COND_LT() ? 0xff : 0);
5046 }
5047
5048
m68k_op_slt_8_pi(void)5049 void m68k_op_slt_8_pi(void)
5050 {
5051 m68ki_write_8(EA_AY_PI_8(), COND_LT() ? 0xff : 0);
5052 }
5053
5054
m68k_op_slt_8_pi7(void)5055 void m68k_op_slt_8_pi7(void)
5056 {
5057 m68ki_write_8(EA_A7_PI_8(), COND_LT() ? 0xff : 0);
5058 }
5059
5060
m68k_op_slt_8_pd(void)5061 void m68k_op_slt_8_pd(void)
5062 {
5063 m68ki_write_8(EA_AY_PD_8(), COND_LT() ? 0xff : 0);
5064 }
5065
5066
m68k_op_slt_8_pd7(void)5067 void m68k_op_slt_8_pd7(void)
5068 {
5069 m68ki_write_8(EA_A7_PD_8(), COND_LT() ? 0xff : 0);
5070 }
5071
5072
m68k_op_slt_8_di(void)5073 void m68k_op_slt_8_di(void)
5074 {
5075 m68ki_write_8(EA_AY_DI_8(), COND_LT() ? 0xff : 0);
5076 }
5077
5078
m68k_op_slt_8_ix(void)5079 void m68k_op_slt_8_ix(void)
5080 {
5081 m68ki_write_8(EA_AY_IX_8(), COND_LT() ? 0xff : 0);
5082 }
5083
5084
m68k_op_slt_8_aw(void)5085 void m68k_op_slt_8_aw(void)
5086 {
5087 m68ki_write_8(EA_AW_8(), COND_LT() ? 0xff : 0);
5088 }
5089
5090
m68k_op_slt_8_al(void)5091 void m68k_op_slt_8_al(void)
5092 {
5093 m68ki_write_8(EA_AL_8(), COND_LT() ? 0xff : 0);
5094 }
5095
5096
m68k_op_sgt_8_ai(void)5097 void m68k_op_sgt_8_ai(void)
5098 {
5099 m68ki_write_8(EA_AY_AI_8(), COND_GT() ? 0xff : 0);
5100 }
5101
5102
m68k_op_sgt_8_pi(void)5103 void m68k_op_sgt_8_pi(void)
5104 {
5105 m68ki_write_8(EA_AY_PI_8(), COND_GT() ? 0xff : 0);
5106 }
5107
5108
m68k_op_sgt_8_pi7(void)5109 void m68k_op_sgt_8_pi7(void)
5110 {
5111 m68ki_write_8(EA_A7_PI_8(), COND_GT() ? 0xff : 0);
5112 }
5113
5114
m68k_op_sgt_8_pd(void)5115 void m68k_op_sgt_8_pd(void)
5116 {
5117 m68ki_write_8(EA_AY_PD_8(), COND_GT() ? 0xff : 0);
5118 }
5119
5120
m68k_op_sgt_8_pd7(void)5121 void m68k_op_sgt_8_pd7(void)
5122 {
5123 m68ki_write_8(EA_A7_PD_8(), COND_GT() ? 0xff : 0);
5124 }
5125
5126
m68k_op_sgt_8_di(void)5127 void m68k_op_sgt_8_di(void)
5128 {
5129 m68ki_write_8(EA_AY_DI_8(), COND_GT() ? 0xff : 0);
5130 }
5131
5132
m68k_op_sgt_8_ix(void)5133 void m68k_op_sgt_8_ix(void)
5134 {
5135 m68ki_write_8(EA_AY_IX_8(), COND_GT() ? 0xff : 0);
5136 }
5137
5138
m68k_op_sgt_8_aw(void)5139 void m68k_op_sgt_8_aw(void)
5140 {
5141 m68ki_write_8(EA_AW_8(), COND_GT() ? 0xff : 0);
5142 }
5143
5144
m68k_op_sgt_8_al(void)5145 void m68k_op_sgt_8_al(void)
5146 {
5147 m68ki_write_8(EA_AL_8(), COND_GT() ? 0xff : 0);
5148 }
5149
5150
m68k_op_sle_8_ai(void)5151 void m68k_op_sle_8_ai(void)
5152 {
5153 m68ki_write_8(EA_AY_AI_8(), COND_LE() ? 0xff : 0);
5154 }
5155
5156
m68k_op_sle_8_pi(void)5157 void m68k_op_sle_8_pi(void)
5158 {
5159 m68ki_write_8(EA_AY_PI_8(), COND_LE() ? 0xff : 0);
5160 }
5161
5162
m68k_op_sle_8_pi7(void)5163 void m68k_op_sle_8_pi7(void)
5164 {
5165 m68ki_write_8(EA_A7_PI_8(), COND_LE() ? 0xff : 0);
5166 }
5167
5168
m68k_op_sle_8_pd(void)5169 void m68k_op_sle_8_pd(void)
5170 {
5171 m68ki_write_8(EA_AY_PD_8(), COND_LE() ? 0xff : 0);
5172 }
5173
5174
m68k_op_sle_8_pd7(void)5175 void m68k_op_sle_8_pd7(void)
5176 {
5177 m68ki_write_8(EA_A7_PD_8(), COND_LE() ? 0xff : 0);
5178 }
5179
5180
m68k_op_sle_8_di(void)5181 void m68k_op_sle_8_di(void)
5182 {
5183 m68ki_write_8(EA_AY_DI_8(), COND_LE() ? 0xff : 0);
5184 }
5185
5186
m68k_op_sle_8_ix(void)5187 void m68k_op_sle_8_ix(void)
5188 {
5189 m68ki_write_8(EA_AY_IX_8(), COND_LE() ? 0xff : 0);
5190 }
5191
5192
m68k_op_sle_8_aw(void)5193 void m68k_op_sle_8_aw(void)
5194 {
5195 m68ki_write_8(EA_AW_8(), COND_LE() ? 0xff : 0);
5196 }
5197
5198
m68k_op_sle_8_al(void)5199 void m68k_op_sle_8_al(void)
5200 {
5201 m68ki_write_8(EA_AL_8(), COND_LE() ? 0xff : 0);
5202 }
5203
5204
m68k_op_stop(void)5205 void m68k_op_stop(void)
5206 {
5207 if(FLAG_S)
5208 {
5209 uint new_sr = OPER_I_16();
5210 m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */
5211 CPU_STOPPED |= STOP_LEVEL_STOP;
5212 m68ki_set_sr(new_sr);
5213 if(m68ki_remaining_cycles >= CYC_INSTRUCTION[REG_IR])
5214 m68ki_remaining_cycles = CYC_INSTRUCTION[REG_IR];
5215 else
5216 USE_ALL_CYCLES();
5217 return;
5218 }
5219 m68ki_exception_privilege_violation();
5220 }
5221
5222
m68k_op_sub_8_er_d(void)5223 void m68k_op_sub_8_er_d(void)
5224 {
5225 uint* r_dst = &DX;
5226 uint src = MASK_OUT_ABOVE_8(DY);
5227 uint dst = MASK_OUT_ABOVE_8(*r_dst);
5228 uint res = dst - src;
5229
5230 FLAG_N = NFLAG_8(res);
5231 FLAG_X = FLAG_C = CFLAG_8(res);
5232 FLAG_V = VFLAG_SUB_8(src, dst, res);
5233 FLAG_Z = MASK_OUT_ABOVE_8(res);
5234
5235 *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
5236 }
5237
5238
m68k_op_sub_8_er_ai(void)5239 void m68k_op_sub_8_er_ai(void)
5240 {
5241 uint* r_dst = &DX;
5242 uint src = OPER_AY_AI_8();
5243 uint dst = MASK_OUT_ABOVE_8(*r_dst);
5244 uint res = dst - src;
5245
5246 FLAG_N = NFLAG_8(res);
5247 FLAG_X = FLAG_C = CFLAG_8(res);
5248 FLAG_V = VFLAG_SUB_8(src, dst, res);
5249 FLAG_Z = MASK_OUT_ABOVE_8(res);
5250
5251 *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
5252 }
5253
5254
m68k_op_sub_8_er_pi(void)5255 void m68k_op_sub_8_er_pi(void)
5256 {
5257 uint* r_dst = &DX;
5258 uint src = OPER_AY_PI_8();
5259 uint dst = MASK_OUT_ABOVE_8(*r_dst);
5260 uint res = dst - src;
5261
5262 FLAG_N = NFLAG_8(res);
5263 FLAG_X = FLAG_C = CFLAG_8(res);
5264 FLAG_V = VFLAG_SUB_8(src, dst, res);
5265 FLAG_Z = MASK_OUT_ABOVE_8(res);
5266
5267 *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
5268 }
5269
5270
m68k_op_sub_8_er_pi7(void)5271 void m68k_op_sub_8_er_pi7(void)
5272 {
5273 uint* r_dst = &DX;
5274 uint src = OPER_A7_PI_8();
5275 uint dst = MASK_OUT_ABOVE_8(*r_dst);
5276 uint res = dst - src;
5277
5278 FLAG_N = NFLAG_8(res);
5279 FLAG_X = FLAG_C = CFLAG_8(res);
5280 FLAG_V = VFLAG_SUB_8(src, dst, res);
5281 FLAG_Z = MASK_OUT_ABOVE_8(res);
5282
5283 *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
5284 }
5285
5286
m68k_op_sub_8_er_pd(void)5287 void m68k_op_sub_8_er_pd(void)
5288 {
5289 uint* r_dst = &DX;
5290 uint src = OPER_AY_PD_8();
5291 uint dst = MASK_OUT_ABOVE_8(*r_dst);
5292 uint res = dst - src;
5293
5294 FLAG_N = NFLAG_8(res);
5295 FLAG_X = FLAG_C = CFLAG_8(res);
5296 FLAG_V = VFLAG_SUB_8(src, dst, res);
5297 FLAG_Z = MASK_OUT_ABOVE_8(res);
5298
5299 *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
5300 }
5301
5302
m68k_op_sub_8_er_pd7(void)5303 void m68k_op_sub_8_er_pd7(void)
5304 {
5305 uint* r_dst = &DX;
5306 uint src = OPER_A7_PD_8();
5307 uint dst = MASK_OUT_ABOVE_8(*r_dst);
5308 uint res = dst - src;
5309
5310 FLAG_N = NFLAG_8(res);
5311 FLAG_X = FLAG_C = CFLAG_8(res);
5312 FLAG_V = VFLAG_SUB_8(src, dst, res);
5313 FLAG_Z = MASK_OUT_ABOVE_8(res);
5314
5315 *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
5316 }
5317
5318
m68k_op_sub_8_er_di(void)5319 void m68k_op_sub_8_er_di(void)
5320 {
5321 uint* r_dst = &DX;
5322 uint src = OPER_AY_DI_8();
5323 uint dst = MASK_OUT_ABOVE_8(*r_dst);
5324 uint res = dst - src;
5325
5326 FLAG_N = NFLAG_8(res);
5327 FLAG_X = FLAG_C = CFLAG_8(res);
5328 FLAG_V = VFLAG_SUB_8(src, dst, res);
5329 FLAG_Z = MASK_OUT_ABOVE_8(res);
5330
5331 *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
5332 }
5333
5334
m68k_op_sub_8_er_ix(void)5335 void m68k_op_sub_8_er_ix(void)
5336 {
5337 uint* r_dst = &DX;
5338 uint src = OPER_AY_IX_8();
5339 uint dst = MASK_OUT_ABOVE_8(*r_dst);
5340 uint res = dst - src;
5341
5342 FLAG_N = NFLAG_8(res);
5343 FLAG_X = FLAG_C = CFLAG_8(res);
5344 FLAG_V = VFLAG_SUB_8(src, dst, res);
5345 FLAG_Z = MASK_OUT_ABOVE_8(res);
5346
5347 *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
5348 }
5349
5350
m68k_op_sub_8_er_aw(void)5351 void m68k_op_sub_8_er_aw(void)
5352 {
5353 uint* r_dst = &DX;
5354 uint src = OPER_AW_8();
5355 uint dst = MASK_OUT_ABOVE_8(*r_dst);
5356 uint res = dst - src;
5357
5358 FLAG_N = NFLAG_8(res);
5359 FLAG_X = FLAG_C = CFLAG_8(res);
5360 FLAG_V = VFLAG_SUB_8(src, dst, res);
5361 FLAG_Z = MASK_OUT_ABOVE_8(res);
5362
5363 *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
5364 }
5365
5366
m68k_op_sub_8_er_al(void)5367 void m68k_op_sub_8_er_al(void)
5368 {
5369 uint* r_dst = &DX;
5370 uint src = OPER_AL_8();
5371 uint dst = MASK_OUT_ABOVE_8(*r_dst);
5372 uint res = dst - src;
5373
5374 FLAG_N = NFLAG_8(res);
5375 FLAG_X = FLAG_C = CFLAG_8(res);
5376 FLAG_V = VFLAG_SUB_8(src, dst, res);
5377 FLAG_Z = MASK_OUT_ABOVE_8(res);
5378
5379 *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
5380 }
5381
5382
m68k_op_sub_8_er_pcdi(void)5383 void m68k_op_sub_8_er_pcdi(void)
5384 {
5385 uint* r_dst = &DX;
5386 uint src = OPER_PCDI_8();
5387 uint dst = MASK_OUT_ABOVE_8(*r_dst);
5388 uint res = dst - src;
5389
5390 FLAG_N = NFLAG_8(res);
5391 FLAG_X = FLAG_C = CFLAG_8(res);
5392 FLAG_V = VFLAG_SUB_8(src, dst, res);
5393 FLAG_Z = MASK_OUT_ABOVE_8(res);
5394
5395 *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
5396 }
5397
5398
m68k_op_sub_8_er_pcix(void)5399 void m68k_op_sub_8_er_pcix(void)
5400 {
5401 uint* r_dst = &DX;
5402 uint src = OPER_PCIX_8();
5403 uint dst = MASK_OUT_ABOVE_8(*r_dst);
5404 uint res = dst - src;
5405
5406 FLAG_N = NFLAG_8(res);
5407 FLAG_X = FLAG_C = CFLAG_8(res);
5408 FLAG_V = VFLAG_SUB_8(src, dst, res);
5409 FLAG_Z = MASK_OUT_ABOVE_8(res);
5410
5411 *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
5412 }
5413
5414
m68k_op_sub_8_er_i(void)5415 void m68k_op_sub_8_er_i(void)
5416 {
5417 uint* r_dst = &DX;
5418 uint src = OPER_I_8();
5419 uint dst = MASK_OUT_ABOVE_8(*r_dst);
5420 uint res = dst - src;
5421
5422 FLAG_N = NFLAG_8(res);
5423 FLAG_X = FLAG_C = CFLAG_8(res);
5424 FLAG_V = VFLAG_SUB_8(src, dst, res);
5425 FLAG_Z = MASK_OUT_ABOVE_8(res);
5426
5427 *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
5428 }
5429
5430
m68k_op_sub_16_er_d(void)5431 void m68k_op_sub_16_er_d(void)
5432 {
5433 uint* r_dst = &DX;
5434 uint src = MASK_OUT_ABOVE_16(DY);
5435 uint dst = MASK_OUT_ABOVE_16(*r_dst);
5436 uint res = dst - src;
5437
5438 FLAG_N = NFLAG_16(res);
5439 FLAG_X = FLAG_C = CFLAG_16(res);
5440 FLAG_V = VFLAG_SUB_16(src, dst, res);
5441 FLAG_Z = MASK_OUT_ABOVE_16(res);
5442
5443 *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
5444 }
5445
5446
m68k_op_sub_16_er_a(void)5447 void m68k_op_sub_16_er_a(void)
5448 {
5449 uint* r_dst = &DX;
5450 uint src = MASK_OUT_ABOVE_16(AY);
5451 uint dst = MASK_OUT_ABOVE_16(*r_dst);
5452 uint res = dst - src;
5453
5454 FLAG_N = NFLAG_16(res);
5455 FLAG_X = FLAG_C = CFLAG_16(res);
5456 FLAG_V = VFLAG_SUB_16(src, dst, res);
5457 FLAG_Z = MASK_OUT_ABOVE_16(res);
5458
5459 *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
5460 }
5461
5462
m68k_op_sub_16_er_ai(void)5463 void m68k_op_sub_16_er_ai(void)
5464 {
5465 uint* r_dst = &DX;
5466 uint src = OPER_AY_AI_16();
5467 uint dst = MASK_OUT_ABOVE_16(*r_dst);
5468 uint res = dst - src;
5469
5470 FLAG_N = NFLAG_16(res);
5471 FLAG_X = FLAG_C = CFLAG_16(res);
5472 FLAG_V = VFLAG_SUB_16(src, dst, res);
5473 FLAG_Z = MASK_OUT_ABOVE_16(res);
5474
5475 *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
5476 }
5477
5478
m68k_op_sub_16_er_pi(void)5479 void m68k_op_sub_16_er_pi(void)
5480 {
5481 uint* r_dst = &DX;
5482 uint src = OPER_AY_PI_16();
5483 uint dst = MASK_OUT_ABOVE_16(*r_dst);
5484 uint res = dst - src;
5485
5486 FLAG_N = NFLAG_16(res);
5487 FLAG_X = FLAG_C = CFLAG_16(res);
5488 FLAG_V = VFLAG_SUB_16(src, dst, res);
5489 FLAG_Z = MASK_OUT_ABOVE_16(res);
5490
5491 *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
5492 }
5493
5494
m68k_op_sub_16_er_pd(void)5495 void m68k_op_sub_16_er_pd(void)
5496 {
5497 uint* r_dst = &DX;
5498 uint src = OPER_AY_PD_16();
5499 uint dst = MASK_OUT_ABOVE_16(*r_dst);
5500 uint res = dst - src;
5501
5502 FLAG_N = NFLAG_16(res);
5503 FLAG_X = FLAG_C = CFLAG_16(res);
5504 FLAG_V = VFLAG_SUB_16(src, dst, res);
5505 FLAG_Z = MASK_OUT_ABOVE_16(res);
5506
5507 *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
5508 }
5509
5510
m68k_op_sub_16_er_di(void)5511 void m68k_op_sub_16_er_di(void)
5512 {
5513 uint* r_dst = &DX;
5514 uint src = OPER_AY_DI_16();
5515 uint dst = MASK_OUT_ABOVE_16(*r_dst);
5516 uint res = dst - src;
5517
5518 FLAG_N = NFLAG_16(res);
5519 FLAG_X = FLAG_C = CFLAG_16(res);
5520 FLAG_V = VFLAG_SUB_16(src, dst, res);
5521 FLAG_Z = MASK_OUT_ABOVE_16(res);
5522
5523 *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
5524 }
5525
5526
m68k_op_sub_16_er_ix(void)5527 void m68k_op_sub_16_er_ix(void)
5528 {
5529 uint* r_dst = &DX;
5530 uint src = OPER_AY_IX_16();
5531 uint dst = MASK_OUT_ABOVE_16(*r_dst);
5532 uint res = dst - src;
5533
5534 FLAG_N = NFLAG_16(res);
5535 FLAG_X = FLAG_C = CFLAG_16(res);
5536 FLAG_V = VFLAG_SUB_16(src, dst, res);
5537 FLAG_Z = MASK_OUT_ABOVE_16(res);
5538
5539 *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
5540 }
5541
5542
m68k_op_sub_16_er_aw(void)5543 void m68k_op_sub_16_er_aw(void)
5544 {
5545 uint* r_dst = &DX;
5546 uint src = OPER_AW_16();
5547 uint dst = MASK_OUT_ABOVE_16(*r_dst);
5548 uint res = dst - src;
5549
5550 FLAG_N = NFLAG_16(res);
5551 FLAG_X = FLAG_C = CFLAG_16(res);
5552 FLAG_V = VFLAG_SUB_16(src, dst, res);
5553 FLAG_Z = MASK_OUT_ABOVE_16(res);
5554
5555 *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
5556 }
5557
5558
m68k_op_sub_16_er_al(void)5559 void m68k_op_sub_16_er_al(void)
5560 {
5561 uint* r_dst = &DX;
5562 uint src = OPER_AL_16();
5563 uint dst = MASK_OUT_ABOVE_16(*r_dst);
5564 uint res = dst - src;
5565
5566 FLAG_N = NFLAG_16(res);
5567 FLAG_X = FLAG_C = CFLAG_16(res);
5568 FLAG_V = VFLAG_SUB_16(src, dst, res);
5569 FLAG_Z = MASK_OUT_ABOVE_16(res);
5570
5571 *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
5572 }
5573
5574
m68k_op_sub_16_er_pcdi(void)5575 void m68k_op_sub_16_er_pcdi(void)
5576 {
5577 uint* r_dst = &DX;
5578 uint src = OPER_PCDI_16();
5579 uint dst = MASK_OUT_ABOVE_16(*r_dst);
5580 uint res = dst - src;
5581
5582 FLAG_N = NFLAG_16(res);
5583 FLAG_X = FLAG_C = CFLAG_16(res);
5584 FLAG_V = VFLAG_SUB_16(src, dst, res);
5585 FLAG_Z = MASK_OUT_ABOVE_16(res);
5586
5587 *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
5588 }
5589
5590
m68k_op_sub_16_er_pcix(void)5591 void m68k_op_sub_16_er_pcix(void)
5592 {
5593 uint* r_dst = &DX;
5594 uint src = OPER_PCIX_16();
5595 uint dst = MASK_OUT_ABOVE_16(*r_dst);
5596 uint res = dst - src;
5597
5598 FLAG_N = NFLAG_16(res);
5599 FLAG_X = FLAG_C = CFLAG_16(res);
5600 FLAG_V = VFLAG_SUB_16(src, dst, res);
5601 FLAG_Z = MASK_OUT_ABOVE_16(res);
5602
5603 *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
5604 }
5605
5606
m68k_op_sub_16_er_i(void)5607 void m68k_op_sub_16_er_i(void)
5608 {
5609 uint* r_dst = &DX;
5610 uint src = OPER_I_16();
5611 uint dst = MASK_OUT_ABOVE_16(*r_dst);
5612 uint res = dst - src;
5613
5614 FLAG_N = NFLAG_16(res);
5615 FLAG_X = FLAG_C = CFLAG_16(res);
5616 FLAG_V = VFLAG_SUB_16(src, dst, res);
5617 FLAG_Z = MASK_OUT_ABOVE_16(res);
5618
5619 *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
5620 }
5621
5622
m68k_op_sub_32_er_d(void)5623 void m68k_op_sub_32_er_d(void)
5624 {
5625 uint* r_dst = &DX;
5626 uint src = DY;
5627 uint dst = *r_dst;
5628 uint res = dst - src;
5629
5630 FLAG_N = NFLAG_32(res);
5631 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
5632 FLAG_V = VFLAG_SUB_32(src, dst, res);
5633 FLAG_Z = MASK_OUT_ABOVE_32(res);
5634
5635 *r_dst = FLAG_Z;
5636 }
5637
5638
m68k_op_sub_32_er_a(void)5639 void m68k_op_sub_32_er_a(void)
5640 {
5641 uint* r_dst = &DX;
5642 uint src = AY;
5643 uint dst = *r_dst;
5644 uint res = dst - src;
5645
5646 FLAG_N = NFLAG_32(res);
5647 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
5648 FLAG_V = VFLAG_SUB_32(src, dst, res);
5649 FLAG_Z = MASK_OUT_ABOVE_32(res);
5650
5651 *r_dst = FLAG_Z;
5652 }
5653
5654
m68k_op_sub_32_er_ai(void)5655 void m68k_op_sub_32_er_ai(void)
5656 {
5657 uint* r_dst = &DX;
5658 uint src = OPER_AY_AI_32();
5659 uint dst = *r_dst;
5660 uint res = dst - src;
5661
5662 FLAG_N = NFLAG_32(res);
5663 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
5664 FLAG_V = VFLAG_SUB_32(src, dst, res);
5665 FLAG_Z = MASK_OUT_ABOVE_32(res);
5666
5667 *r_dst = FLAG_Z;
5668 }
5669
5670
m68k_op_sub_32_er_pi(void)5671 void m68k_op_sub_32_er_pi(void)
5672 {
5673 uint* r_dst = &DX;
5674 uint src = OPER_AY_PI_32();
5675 uint dst = *r_dst;
5676 uint res = dst - src;
5677
5678 FLAG_N = NFLAG_32(res);
5679 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
5680 FLAG_V = VFLAG_SUB_32(src, dst, res);
5681 FLAG_Z = MASK_OUT_ABOVE_32(res);
5682
5683 *r_dst = FLAG_Z;
5684 }
5685
5686
m68k_op_sub_32_er_pd(void)5687 void m68k_op_sub_32_er_pd(void)
5688 {
5689 uint* r_dst = &DX;
5690 uint src = OPER_AY_PD_32();
5691 uint dst = *r_dst;
5692 uint res = dst - src;
5693
5694 FLAG_N = NFLAG_32(res);
5695 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
5696 FLAG_V = VFLAG_SUB_32(src, dst, res);
5697 FLAG_Z = MASK_OUT_ABOVE_32(res);
5698
5699 *r_dst = FLAG_Z;
5700 }
5701
5702
m68k_op_sub_32_er_di(void)5703 void m68k_op_sub_32_er_di(void)
5704 {
5705 uint* r_dst = &DX;
5706 uint src = OPER_AY_DI_32();
5707 uint dst = *r_dst;
5708 uint res = dst - src;
5709
5710 FLAG_N = NFLAG_32(res);
5711 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
5712 FLAG_V = VFLAG_SUB_32(src, dst, res);
5713 FLAG_Z = MASK_OUT_ABOVE_32(res);
5714
5715 *r_dst = FLAG_Z;
5716 }
5717
5718
m68k_op_sub_32_er_ix(void)5719 void m68k_op_sub_32_er_ix(void)
5720 {
5721 uint* r_dst = &DX;
5722 uint src = OPER_AY_IX_32();
5723 uint dst = *r_dst;
5724 uint res = dst - src;
5725
5726 FLAG_N = NFLAG_32(res);
5727 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
5728 FLAG_V = VFLAG_SUB_32(src, dst, res);
5729 FLAG_Z = MASK_OUT_ABOVE_32(res);
5730
5731 *r_dst = FLAG_Z;
5732 }
5733
5734
m68k_op_sub_32_er_aw(void)5735 void m68k_op_sub_32_er_aw(void)
5736 {
5737 uint* r_dst = &DX;
5738 uint src = OPER_AW_32();
5739 uint dst = *r_dst;
5740 uint res = dst - src;
5741
5742 FLAG_N = NFLAG_32(res);
5743 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
5744 FLAG_V = VFLAG_SUB_32(src, dst, res);
5745 FLAG_Z = MASK_OUT_ABOVE_32(res);
5746
5747 *r_dst = FLAG_Z;
5748 }
5749
5750
m68k_op_sub_32_er_al(void)5751 void m68k_op_sub_32_er_al(void)
5752 {
5753 uint* r_dst = &DX;
5754 uint src = OPER_AL_32();
5755 uint dst = *r_dst;
5756 uint res = dst - src;
5757
5758 FLAG_N = NFLAG_32(res);
5759 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
5760 FLAG_V = VFLAG_SUB_32(src, dst, res);
5761 FLAG_Z = MASK_OUT_ABOVE_32(res);
5762
5763 *r_dst = FLAG_Z;
5764 }
5765
5766
m68k_op_sub_32_er_pcdi(void)5767 void m68k_op_sub_32_er_pcdi(void)
5768 {
5769 uint* r_dst = &DX;
5770 uint src = OPER_PCDI_32();
5771 uint dst = *r_dst;
5772 uint res = dst - src;
5773
5774 FLAG_N = NFLAG_32(res);
5775 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
5776 FLAG_V = VFLAG_SUB_32(src, dst, res);
5777 FLAG_Z = MASK_OUT_ABOVE_32(res);
5778
5779 *r_dst = FLAG_Z;
5780 }
5781
5782
m68k_op_sub_32_er_pcix(void)5783 void m68k_op_sub_32_er_pcix(void)
5784 {
5785 uint* r_dst = &DX;
5786 uint src = OPER_PCIX_32();
5787 uint dst = *r_dst;
5788 uint res = dst - src;
5789
5790 FLAG_N = NFLAG_32(res);
5791 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
5792 FLAG_V = VFLAG_SUB_32(src, dst, res);
5793 FLAG_Z = MASK_OUT_ABOVE_32(res);
5794
5795 *r_dst = FLAG_Z;
5796 }
5797
5798
m68k_op_sub_32_er_i(void)5799 void m68k_op_sub_32_er_i(void)
5800 {
5801 uint* r_dst = &DX;
5802 uint src = OPER_I_32();
5803 uint dst = *r_dst;
5804 uint res = dst - src;
5805
5806 FLAG_N = NFLAG_32(res);
5807 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
5808 FLAG_V = VFLAG_SUB_32(src, dst, res);
5809 FLAG_Z = MASK_OUT_ABOVE_32(res);
5810
5811 *r_dst = FLAG_Z;
5812 }
5813
5814
m68k_op_sub_8_re_ai(void)5815 void m68k_op_sub_8_re_ai(void)
5816 {
5817 uint ea = EA_AY_AI_8();
5818 uint src = MASK_OUT_ABOVE_8(DX);
5819 uint dst = m68ki_read_8(ea);
5820 uint res = dst - src;
5821
5822 FLAG_N = NFLAG_8(res);
5823 FLAG_Z = MASK_OUT_ABOVE_8(res);
5824 FLAG_X = FLAG_C = CFLAG_8(res);
5825 FLAG_V = VFLAG_SUB_8(src, dst, res);
5826
5827 m68ki_write_8(ea, FLAG_Z);
5828 }
5829
5830
m68k_op_sub_8_re_pi(void)5831 void m68k_op_sub_8_re_pi(void)
5832 {
5833 uint ea = EA_AY_PI_8();
5834 uint src = MASK_OUT_ABOVE_8(DX);
5835 uint dst = m68ki_read_8(ea);
5836 uint res = dst - src;
5837
5838 FLAG_N = NFLAG_8(res);
5839 FLAG_Z = MASK_OUT_ABOVE_8(res);
5840 FLAG_X = FLAG_C = CFLAG_8(res);
5841 FLAG_V = VFLAG_SUB_8(src, dst, res);
5842
5843 m68ki_write_8(ea, FLAG_Z);
5844 }
5845
5846
m68k_op_sub_8_re_pi7(void)5847 void m68k_op_sub_8_re_pi7(void)
5848 {
5849 uint ea = EA_A7_PI_8();
5850 uint src = MASK_OUT_ABOVE_8(DX);
5851 uint dst = m68ki_read_8(ea);
5852 uint res = dst - src;
5853
5854 FLAG_N = NFLAG_8(res);
5855 FLAG_Z = MASK_OUT_ABOVE_8(res);
5856 FLAG_X = FLAG_C = CFLAG_8(res);
5857 FLAG_V = VFLAG_SUB_8(src, dst, res);
5858
5859 m68ki_write_8(ea, FLAG_Z);
5860 }
5861
5862
m68k_op_sub_8_re_pd(void)5863 void m68k_op_sub_8_re_pd(void)
5864 {
5865 uint ea = EA_AY_PD_8();
5866 uint src = MASK_OUT_ABOVE_8(DX);
5867 uint dst = m68ki_read_8(ea);
5868 uint res = dst - src;
5869
5870 FLAG_N = NFLAG_8(res);
5871 FLAG_Z = MASK_OUT_ABOVE_8(res);
5872 FLAG_X = FLAG_C = CFLAG_8(res);
5873 FLAG_V = VFLAG_SUB_8(src, dst, res);
5874
5875 m68ki_write_8(ea, FLAG_Z);
5876 }
5877
5878
m68k_op_sub_8_re_pd7(void)5879 void m68k_op_sub_8_re_pd7(void)
5880 {
5881 uint ea = EA_A7_PD_8();
5882 uint src = MASK_OUT_ABOVE_8(DX);
5883 uint dst = m68ki_read_8(ea);
5884 uint res = dst - src;
5885
5886 FLAG_N = NFLAG_8(res);
5887 FLAG_Z = MASK_OUT_ABOVE_8(res);
5888 FLAG_X = FLAG_C = CFLAG_8(res);
5889 FLAG_V = VFLAG_SUB_8(src, dst, res);
5890
5891 m68ki_write_8(ea, FLAG_Z);
5892 }
5893
5894
m68k_op_sub_8_re_di(void)5895 void m68k_op_sub_8_re_di(void)
5896 {
5897 uint ea = EA_AY_DI_8();
5898 uint src = MASK_OUT_ABOVE_8(DX);
5899 uint dst = m68ki_read_8(ea);
5900 uint res = dst - src;
5901
5902 FLAG_N = NFLAG_8(res);
5903 FLAG_Z = MASK_OUT_ABOVE_8(res);
5904 FLAG_X = FLAG_C = CFLAG_8(res);
5905 FLAG_V = VFLAG_SUB_8(src, dst, res);
5906
5907 m68ki_write_8(ea, FLAG_Z);
5908 }
5909
5910
m68k_op_sub_8_re_ix(void)5911 void m68k_op_sub_8_re_ix(void)
5912 {
5913 uint ea = EA_AY_IX_8();
5914 uint src = MASK_OUT_ABOVE_8(DX);
5915 uint dst = m68ki_read_8(ea);
5916 uint res = dst - src;
5917
5918 FLAG_N = NFLAG_8(res);
5919 FLAG_Z = MASK_OUT_ABOVE_8(res);
5920 FLAG_X = FLAG_C = CFLAG_8(res);
5921 FLAG_V = VFLAG_SUB_8(src, dst, res);
5922
5923 m68ki_write_8(ea, FLAG_Z);
5924 }
5925
5926
m68k_op_sub_8_re_aw(void)5927 void m68k_op_sub_8_re_aw(void)
5928 {
5929 uint ea = EA_AW_8();
5930 uint src = MASK_OUT_ABOVE_8(DX);
5931 uint dst = m68ki_read_8(ea);
5932 uint res = dst - src;
5933
5934 FLAG_N = NFLAG_8(res);
5935 FLAG_Z = MASK_OUT_ABOVE_8(res);
5936 FLAG_X = FLAG_C = CFLAG_8(res);
5937 FLAG_V = VFLAG_SUB_8(src, dst, res);
5938
5939 m68ki_write_8(ea, FLAG_Z);
5940 }
5941
5942
m68k_op_sub_8_re_al(void)5943 void m68k_op_sub_8_re_al(void)
5944 {
5945 uint ea = EA_AL_8();
5946 uint src = MASK_OUT_ABOVE_8(DX);
5947 uint dst = m68ki_read_8(ea);
5948 uint res = dst - src;
5949
5950 FLAG_N = NFLAG_8(res);
5951 FLAG_Z = MASK_OUT_ABOVE_8(res);
5952 FLAG_X = FLAG_C = CFLAG_8(res);
5953 FLAG_V = VFLAG_SUB_8(src, dst, res);
5954
5955 m68ki_write_8(ea, FLAG_Z);
5956 }
5957
5958
m68k_op_sub_16_re_ai(void)5959 void m68k_op_sub_16_re_ai(void)
5960 {
5961 uint ea = EA_AY_AI_16();
5962 uint src = MASK_OUT_ABOVE_16(DX);
5963 uint dst = m68ki_read_16(ea);
5964 uint res = dst - src;
5965
5966 FLAG_N = NFLAG_16(res);
5967 FLAG_Z = MASK_OUT_ABOVE_16(res);
5968 FLAG_X = FLAG_C = CFLAG_16(res);
5969 FLAG_V = VFLAG_SUB_16(src, dst, res);
5970
5971 m68ki_write_16(ea, FLAG_Z);
5972 }
5973
5974
m68k_op_sub_16_re_pi(void)5975 void m68k_op_sub_16_re_pi(void)
5976 {
5977 uint ea = EA_AY_PI_16();
5978 uint src = MASK_OUT_ABOVE_16(DX);
5979 uint dst = m68ki_read_16(ea);
5980 uint res = dst - src;
5981
5982 FLAG_N = NFLAG_16(res);
5983 FLAG_Z = MASK_OUT_ABOVE_16(res);
5984 FLAG_X = FLAG_C = CFLAG_16(res);
5985 FLAG_V = VFLAG_SUB_16(src, dst, res);
5986
5987 m68ki_write_16(ea, FLAG_Z);
5988 }
5989
5990
m68k_op_sub_16_re_pd(void)5991 void m68k_op_sub_16_re_pd(void)
5992 {
5993 uint ea = EA_AY_PD_16();
5994 uint src = MASK_OUT_ABOVE_16(DX);
5995 uint dst = m68ki_read_16(ea);
5996 uint res = dst - src;
5997
5998 FLAG_N = NFLAG_16(res);
5999 FLAG_Z = MASK_OUT_ABOVE_16(res);
6000 FLAG_X = FLAG_C = CFLAG_16(res);
6001 FLAG_V = VFLAG_SUB_16(src, dst, res);
6002
6003 m68ki_write_16(ea, FLAG_Z);
6004 }
6005
6006
m68k_op_sub_16_re_di(void)6007 void m68k_op_sub_16_re_di(void)
6008 {
6009 uint ea = EA_AY_DI_16();
6010 uint src = MASK_OUT_ABOVE_16(DX);
6011 uint dst = m68ki_read_16(ea);
6012 uint res = dst - src;
6013
6014 FLAG_N = NFLAG_16(res);
6015 FLAG_Z = MASK_OUT_ABOVE_16(res);
6016 FLAG_X = FLAG_C = CFLAG_16(res);
6017 FLAG_V = VFLAG_SUB_16(src, dst, res);
6018
6019 m68ki_write_16(ea, FLAG_Z);
6020 }
6021
6022
m68k_op_sub_16_re_ix(void)6023 void m68k_op_sub_16_re_ix(void)
6024 {
6025 uint ea = EA_AY_IX_16();
6026 uint src = MASK_OUT_ABOVE_16(DX);
6027 uint dst = m68ki_read_16(ea);
6028 uint res = dst - src;
6029
6030 FLAG_N = NFLAG_16(res);
6031 FLAG_Z = MASK_OUT_ABOVE_16(res);
6032 FLAG_X = FLAG_C = CFLAG_16(res);
6033 FLAG_V = VFLAG_SUB_16(src, dst, res);
6034
6035 m68ki_write_16(ea, FLAG_Z);
6036 }
6037
6038
m68k_op_sub_16_re_aw(void)6039 void m68k_op_sub_16_re_aw(void)
6040 {
6041 uint ea = EA_AW_16();
6042 uint src = MASK_OUT_ABOVE_16(DX);
6043 uint dst = m68ki_read_16(ea);
6044 uint res = dst - src;
6045
6046 FLAG_N = NFLAG_16(res);
6047 FLAG_Z = MASK_OUT_ABOVE_16(res);
6048 FLAG_X = FLAG_C = CFLAG_16(res);
6049 FLAG_V = VFLAG_SUB_16(src, dst, res);
6050
6051 m68ki_write_16(ea, FLAG_Z);
6052 }
6053
6054
m68k_op_sub_16_re_al(void)6055 void m68k_op_sub_16_re_al(void)
6056 {
6057 uint ea = EA_AL_16();
6058 uint src = MASK_OUT_ABOVE_16(DX);
6059 uint dst = m68ki_read_16(ea);
6060 uint res = dst - src;
6061
6062 FLAG_N = NFLAG_16(res);
6063 FLAG_Z = MASK_OUT_ABOVE_16(res);
6064 FLAG_X = FLAG_C = CFLAG_16(res);
6065 FLAG_V = VFLAG_SUB_16(src, dst, res);
6066
6067 m68ki_write_16(ea, FLAG_Z);
6068 }
6069
6070
m68k_op_sub_32_re_ai(void)6071 void m68k_op_sub_32_re_ai(void)
6072 {
6073 uint ea = EA_AY_AI_32();
6074 uint src = DX;
6075 uint dst = m68ki_read_32(ea);
6076 uint res = dst - src;
6077
6078 FLAG_N = NFLAG_32(res);
6079 FLAG_Z = MASK_OUT_ABOVE_32(res);
6080 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
6081 FLAG_V = VFLAG_SUB_32(src, dst, res);
6082
6083 m68ki_write_32(ea, FLAG_Z);
6084 }
6085
6086
m68k_op_sub_32_re_pi(void)6087 void m68k_op_sub_32_re_pi(void)
6088 {
6089 uint ea = EA_AY_PI_32();
6090 uint src = DX;
6091 uint dst = m68ki_read_32(ea);
6092 uint res = dst - src;
6093
6094 FLAG_N = NFLAG_32(res);
6095 FLAG_Z = MASK_OUT_ABOVE_32(res);
6096 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
6097 FLAG_V = VFLAG_SUB_32(src, dst, res);
6098
6099 m68ki_write_32(ea, FLAG_Z);
6100 }
6101
6102
m68k_op_sub_32_re_pd(void)6103 void m68k_op_sub_32_re_pd(void)
6104 {
6105 uint ea = EA_AY_PD_32();
6106 uint src = DX;
6107 uint dst = m68ki_read_32(ea);
6108 uint res = dst - src;
6109
6110 FLAG_N = NFLAG_32(res);
6111 FLAG_Z = MASK_OUT_ABOVE_32(res);
6112 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
6113 FLAG_V = VFLAG_SUB_32(src, dst, res);
6114
6115 m68ki_write_32(ea, FLAG_Z);
6116 }
6117
6118
m68k_op_sub_32_re_di(void)6119 void m68k_op_sub_32_re_di(void)
6120 {
6121 uint ea = EA_AY_DI_32();
6122 uint src = DX;
6123 uint dst = m68ki_read_32(ea);
6124 uint res = dst - src;
6125
6126 FLAG_N = NFLAG_32(res);
6127 FLAG_Z = MASK_OUT_ABOVE_32(res);
6128 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
6129 FLAG_V = VFLAG_SUB_32(src, dst, res);
6130
6131 m68ki_write_32(ea, FLAG_Z);
6132 }
6133
6134
m68k_op_sub_32_re_ix(void)6135 void m68k_op_sub_32_re_ix(void)
6136 {
6137 uint ea = EA_AY_IX_32();
6138 uint src = DX;
6139 uint dst = m68ki_read_32(ea);
6140 uint res = dst - src;
6141
6142 FLAG_N = NFLAG_32(res);
6143 FLAG_Z = MASK_OUT_ABOVE_32(res);
6144 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
6145 FLAG_V = VFLAG_SUB_32(src, dst, res);
6146
6147 m68ki_write_32(ea, FLAG_Z);
6148 }
6149
6150
m68k_op_sub_32_re_aw(void)6151 void m68k_op_sub_32_re_aw(void)
6152 {
6153 uint ea = EA_AW_32();
6154 uint src = DX;
6155 uint dst = m68ki_read_32(ea);
6156 uint res = dst - src;
6157
6158 FLAG_N = NFLAG_32(res);
6159 FLAG_Z = MASK_OUT_ABOVE_32(res);
6160 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
6161 FLAG_V = VFLAG_SUB_32(src, dst, res);
6162
6163 m68ki_write_32(ea, FLAG_Z);
6164 }
6165
6166
m68k_op_sub_32_re_al(void)6167 void m68k_op_sub_32_re_al(void)
6168 {
6169 uint ea = EA_AL_32();
6170 uint src = DX;
6171 uint dst = m68ki_read_32(ea);
6172 uint res = dst - src;
6173
6174 FLAG_N = NFLAG_32(res);
6175 FLAG_Z = MASK_OUT_ABOVE_32(res);
6176 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
6177 FLAG_V = VFLAG_SUB_32(src, dst, res);
6178
6179 m68ki_write_32(ea, FLAG_Z);
6180 }
6181
6182
m68k_op_suba_16_d(void)6183 void m68k_op_suba_16_d(void)
6184 {
6185 uint* r_dst = &AX;
6186
6187 *r_dst = MASK_OUT_ABOVE_32(*r_dst - MAKE_INT_16(DY));
6188 }
6189
6190
m68k_op_suba_16_a(void)6191 void m68k_op_suba_16_a(void)
6192 {
6193 uint* r_dst = &AX;
6194
6195 *r_dst = MASK_OUT_ABOVE_32(*r_dst - MAKE_INT_16(AY));
6196 }
6197
6198
m68k_op_suba_16_ai(void)6199 void m68k_op_suba_16_ai(void)
6200 {
6201 signed short src = MAKE_INT_16(OPER_AY_AI_16());
6202 uint* r_dst = &AX;
6203
6204 *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
6205 }
6206
6207
m68k_op_suba_16_pi(void)6208 void m68k_op_suba_16_pi(void)
6209 {
6210 signed short src = MAKE_INT_16(OPER_AY_PI_16());
6211 uint* r_dst = &AX;
6212
6213 *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
6214 }
6215
6216
m68k_op_suba_16_pd(void)6217 void m68k_op_suba_16_pd(void)
6218 {
6219 signed short src = MAKE_INT_16(OPER_AY_PD_16());
6220 uint* r_dst = &AX;
6221
6222 *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
6223 }
6224
6225
m68k_op_suba_16_di(void)6226 void m68k_op_suba_16_di(void)
6227 {
6228 signed short src = MAKE_INT_16(OPER_AY_DI_16());
6229 uint* r_dst = &AX;
6230
6231 *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
6232 }
6233
6234
m68k_op_suba_16_ix(void)6235 void m68k_op_suba_16_ix(void)
6236 {
6237 signed short src = MAKE_INT_16(OPER_AY_IX_16());
6238 uint* r_dst = &AX;
6239
6240 *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
6241 }
6242
6243
m68k_op_suba_16_aw(void)6244 void m68k_op_suba_16_aw(void)
6245 {
6246 signed short src = MAKE_INT_16(OPER_AW_16());
6247 uint* r_dst = &AX;
6248
6249 *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
6250 }
6251
6252
m68k_op_suba_16_al(void)6253 void m68k_op_suba_16_al(void)
6254 {
6255 signed short src = MAKE_INT_16(OPER_AL_16());
6256 uint* r_dst = &AX;
6257
6258 *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
6259 }
6260
6261
m68k_op_suba_16_pcdi(void)6262 void m68k_op_suba_16_pcdi(void)
6263 {
6264 signed short src = MAKE_INT_16(OPER_PCDI_16());
6265 uint* r_dst = &AX;
6266
6267 *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
6268 }
6269
6270
m68k_op_suba_16_pcix(void)6271 void m68k_op_suba_16_pcix(void)
6272 {
6273 signed short src = MAKE_INT_16(OPER_PCIX_16());
6274 uint* r_dst = &AX;
6275
6276 *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
6277 }
6278
6279
m68k_op_suba_16_i(void)6280 void m68k_op_suba_16_i(void)
6281 {
6282 signed short src = MAKE_INT_16(OPER_I_16());
6283 uint* r_dst = &AX;
6284
6285 *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
6286 }
6287
6288
m68k_op_suba_32_d(void)6289 void m68k_op_suba_32_d(void)
6290 {
6291 uint* r_dst = &AX;
6292
6293 *r_dst = MASK_OUT_ABOVE_32(*r_dst - DY);
6294 }
6295
6296
m68k_op_suba_32_a(void)6297 void m68k_op_suba_32_a(void)
6298 {
6299 uint* r_dst = &AX;
6300
6301 *r_dst = MASK_OUT_ABOVE_32(*r_dst - AY);
6302 }
6303
6304
m68k_op_suba_32_ai(void)6305 void m68k_op_suba_32_ai(void)
6306 {
6307 uint src = OPER_AY_AI_32();
6308 uint* r_dst = &AX;
6309
6310 *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
6311 }
6312
6313
m68k_op_suba_32_pi(void)6314 void m68k_op_suba_32_pi(void)
6315 {
6316 uint src = OPER_AY_PI_32();
6317 uint* r_dst = &AX;
6318
6319 *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
6320 }
6321
6322
m68k_op_suba_32_pd(void)6323 void m68k_op_suba_32_pd(void)
6324 {
6325 uint src = OPER_AY_PD_32();
6326 uint* r_dst = &AX;
6327
6328 *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
6329 }
6330
6331
m68k_op_suba_32_di(void)6332 void m68k_op_suba_32_di(void)
6333 {
6334 uint src = OPER_AY_DI_32();
6335 uint* r_dst = &AX;
6336
6337 *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
6338 }
6339
6340
m68k_op_suba_32_ix(void)6341 void m68k_op_suba_32_ix(void)
6342 {
6343 uint src = OPER_AY_IX_32();
6344 uint* r_dst = &AX;
6345
6346 *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
6347 }
6348
6349
m68k_op_suba_32_aw(void)6350 void m68k_op_suba_32_aw(void)
6351 {
6352 uint src = OPER_AW_32();
6353 uint* r_dst = &AX;
6354
6355 *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
6356 }
6357
6358
m68k_op_suba_32_al(void)6359 void m68k_op_suba_32_al(void)
6360 {
6361 uint src = OPER_AL_32();
6362 uint* r_dst = &AX;
6363
6364 *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
6365 }
6366
6367
m68k_op_suba_32_pcdi(void)6368 void m68k_op_suba_32_pcdi(void)
6369 {
6370 uint src = OPER_PCDI_32();
6371 uint* r_dst = &AX;
6372
6373 *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
6374 }
6375
6376
m68k_op_suba_32_pcix(void)6377 void m68k_op_suba_32_pcix(void)
6378 {
6379 uint src = OPER_PCIX_32();
6380 uint* r_dst = &AX;
6381
6382 *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
6383 }
6384
6385
m68k_op_suba_32_i(void)6386 void m68k_op_suba_32_i(void)
6387 {
6388 uint src = OPER_I_32();
6389 uint* r_dst = &AX;
6390
6391 *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
6392 }
6393
6394
m68k_op_subi_8_d(void)6395 void m68k_op_subi_8_d(void)
6396 {
6397 uint* r_dst = &DY;
6398 uint src = OPER_I_8();
6399 uint dst = MASK_OUT_ABOVE_8(*r_dst);
6400 uint res = dst - src;
6401
6402 FLAG_N = NFLAG_8(res);
6403 FLAG_Z = MASK_OUT_ABOVE_8(res);
6404 FLAG_X = FLAG_C = CFLAG_8(res);
6405 FLAG_V = VFLAG_SUB_8(src, dst, res);
6406
6407 *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
6408 }
6409
6410
m68k_op_subi_8_ai(void)6411 void m68k_op_subi_8_ai(void)
6412 {
6413 uint src = OPER_I_8();
6414 uint ea = EA_AY_AI_8();
6415 uint dst = m68ki_read_8(ea);
6416 uint res = dst - src;
6417
6418 FLAG_N = NFLAG_8(res);
6419 FLAG_Z = MASK_OUT_ABOVE_8(res);
6420 FLAG_X = FLAG_C = CFLAG_8(res);
6421 FLAG_V = VFLAG_SUB_8(src, dst, res);
6422
6423 m68ki_write_8(ea, FLAG_Z);
6424 }
6425
6426
m68k_op_subi_8_pi(void)6427 void m68k_op_subi_8_pi(void)
6428 {
6429 uint src = OPER_I_8();
6430 uint ea = EA_AY_PI_8();
6431 uint dst = m68ki_read_8(ea);
6432 uint res = dst - src;
6433
6434 FLAG_N = NFLAG_8(res);
6435 FLAG_Z = MASK_OUT_ABOVE_8(res);
6436 FLAG_X = FLAG_C = CFLAG_8(res);
6437 FLAG_V = VFLAG_SUB_8(src, dst, res);
6438
6439 m68ki_write_8(ea, FLAG_Z);
6440 }
6441
6442
m68k_op_subi_8_pi7(void)6443 void m68k_op_subi_8_pi7(void)
6444 {
6445 uint src = OPER_I_8();
6446 uint ea = EA_A7_PI_8();
6447 uint dst = m68ki_read_8(ea);
6448 uint res = dst - src;
6449
6450 FLAG_N = NFLAG_8(res);
6451 FLAG_Z = MASK_OUT_ABOVE_8(res);
6452 FLAG_X = FLAG_C = CFLAG_8(res);
6453 FLAG_V = VFLAG_SUB_8(src, dst, res);
6454
6455 m68ki_write_8(ea, FLAG_Z);
6456 }
6457
6458
m68k_op_subi_8_pd(void)6459 void m68k_op_subi_8_pd(void)
6460 {
6461 uint src = OPER_I_8();
6462 uint ea = EA_AY_PD_8();
6463 uint dst = m68ki_read_8(ea);
6464 uint res = dst - src;
6465
6466 FLAG_N = NFLAG_8(res);
6467 FLAG_Z = MASK_OUT_ABOVE_8(res);
6468 FLAG_X = FLAG_C = CFLAG_8(res);
6469 FLAG_V = VFLAG_SUB_8(src, dst, res);
6470
6471 m68ki_write_8(ea, FLAG_Z);
6472 }
6473
6474
m68k_op_subi_8_pd7(void)6475 void m68k_op_subi_8_pd7(void)
6476 {
6477 uint src = OPER_I_8();
6478 uint ea = EA_A7_PD_8();
6479 uint dst = m68ki_read_8(ea);
6480 uint res = dst - src;
6481
6482 FLAG_N = NFLAG_8(res);
6483 FLAG_Z = MASK_OUT_ABOVE_8(res);
6484 FLAG_X = FLAG_C = CFLAG_8(res);
6485 FLAG_V = VFLAG_SUB_8(src, dst, res);
6486
6487 m68ki_write_8(ea, FLAG_Z);
6488 }
6489
6490
m68k_op_subi_8_di(void)6491 void m68k_op_subi_8_di(void)
6492 {
6493 uint src = OPER_I_8();
6494 uint ea = EA_AY_DI_8();
6495 uint dst = m68ki_read_8(ea);
6496 uint res = dst - src;
6497
6498 FLAG_N = NFLAG_8(res);
6499 FLAG_Z = MASK_OUT_ABOVE_8(res);
6500 FLAG_X = FLAG_C = CFLAG_8(res);
6501 FLAG_V = VFLAG_SUB_8(src, dst, res);
6502
6503 m68ki_write_8(ea, FLAG_Z);
6504 }
6505
6506
m68k_op_subi_8_ix(void)6507 void m68k_op_subi_8_ix(void)
6508 {
6509 uint src = OPER_I_8();
6510 uint ea = EA_AY_IX_8();
6511 uint dst = m68ki_read_8(ea);
6512 uint res = dst - src;
6513
6514 FLAG_N = NFLAG_8(res);
6515 FLAG_Z = MASK_OUT_ABOVE_8(res);
6516 FLAG_X = FLAG_C = CFLAG_8(res);
6517 FLAG_V = VFLAG_SUB_8(src, dst, res);
6518
6519 m68ki_write_8(ea, FLAG_Z);
6520 }
6521
6522
m68k_op_subi_8_aw(void)6523 void m68k_op_subi_8_aw(void)
6524 {
6525 uint src = OPER_I_8();
6526 uint ea = EA_AW_8();
6527 uint dst = m68ki_read_8(ea);
6528 uint res = dst - src;
6529
6530 FLAG_N = NFLAG_8(res);
6531 FLAG_Z = MASK_OUT_ABOVE_8(res);
6532 FLAG_X = FLAG_C = CFLAG_8(res);
6533 FLAG_V = VFLAG_SUB_8(src, dst, res);
6534
6535 m68ki_write_8(ea, FLAG_Z);
6536 }
6537
6538
m68k_op_subi_8_al(void)6539 void m68k_op_subi_8_al(void)
6540 {
6541 uint src = OPER_I_8();
6542 uint ea = EA_AL_8();
6543 uint dst = m68ki_read_8(ea);
6544 uint res = dst - src;
6545
6546 FLAG_N = NFLAG_8(res);
6547 FLAG_Z = MASK_OUT_ABOVE_8(res);
6548 FLAG_X = FLAG_C = CFLAG_8(res);
6549 FLAG_V = VFLAG_SUB_8(src, dst, res);
6550
6551 m68ki_write_8(ea, FLAG_Z);
6552 }
6553
6554
m68k_op_subi_16_d(void)6555 void m68k_op_subi_16_d(void)
6556 {
6557 uint* r_dst = &DY;
6558 uint src = OPER_I_16();
6559 uint dst = MASK_OUT_ABOVE_16(*r_dst);
6560 uint res = dst - src;
6561
6562 FLAG_N = NFLAG_16(res);
6563 FLAG_Z = MASK_OUT_ABOVE_16(res);
6564 FLAG_X = FLAG_C = CFLAG_16(res);
6565 FLAG_V = VFLAG_SUB_16(src, dst, res);
6566
6567 *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
6568 }
6569
6570
m68k_op_subi_16_ai(void)6571 void m68k_op_subi_16_ai(void)
6572 {
6573 uint src = OPER_I_16();
6574 uint ea = EA_AY_AI_16();
6575 uint dst = m68ki_read_16(ea);
6576 uint res = dst - src;
6577
6578 FLAG_N = NFLAG_16(res);
6579 FLAG_Z = MASK_OUT_ABOVE_16(res);
6580 FLAG_X = FLAG_C = CFLAG_16(res);
6581 FLAG_V = VFLAG_SUB_16(src, dst, res);
6582
6583 m68ki_write_16(ea, FLAG_Z);
6584 }
6585
6586
m68k_op_subi_16_pi(void)6587 void m68k_op_subi_16_pi(void)
6588 {
6589 uint src = OPER_I_16();
6590 uint ea = EA_AY_PI_16();
6591 uint dst = m68ki_read_16(ea);
6592 uint res = dst - src;
6593
6594 FLAG_N = NFLAG_16(res);
6595 FLAG_Z = MASK_OUT_ABOVE_16(res);
6596 FLAG_X = FLAG_C = CFLAG_16(res);
6597 FLAG_V = VFLAG_SUB_16(src, dst, res);
6598
6599 m68ki_write_16(ea, FLAG_Z);
6600 }
6601
6602
m68k_op_subi_16_pd(void)6603 void m68k_op_subi_16_pd(void)
6604 {
6605 uint src = OPER_I_16();
6606 uint ea = EA_AY_PD_16();
6607 uint dst = m68ki_read_16(ea);
6608 uint res = dst - src;
6609
6610 FLAG_N = NFLAG_16(res);
6611 FLAG_Z = MASK_OUT_ABOVE_16(res);
6612 FLAG_X = FLAG_C = CFLAG_16(res);
6613 FLAG_V = VFLAG_SUB_16(src, dst, res);
6614
6615 m68ki_write_16(ea, FLAG_Z);
6616 }
6617
6618
m68k_op_subi_16_di(void)6619 void m68k_op_subi_16_di(void)
6620 {
6621 uint src = OPER_I_16();
6622 uint ea = EA_AY_DI_16();
6623 uint dst = m68ki_read_16(ea);
6624 uint res = dst - src;
6625
6626 FLAG_N = NFLAG_16(res);
6627 FLAG_Z = MASK_OUT_ABOVE_16(res);
6628 FLAG_X = FLAG_C = CFLAG_16(res);
6629 FLAG_V = VFLAG_SUB_16(src, dst, res);
6630
6631 m68ki_write_16(ea, FLAG_Z);
6632 }
6633
6634
m68k_op_subi_16_ix(void)6635 void m68k_op_subi_16_ix(void)
6636 {
6637 uint src = OPER_I_16();
6638 uint ea = EA_AY_IX_16();
6639 uint dst = m68ki_read_16(ea);
6640 uint res = dst - src;
6641
6642 FLAG_N = NFLAG_16(res);
6643 FLAG_Z = MASK_OUT_ABOVE_16(res);
6644 FLAG_X = FLAG_C = CFLAG_16(res);
6645 FLAG_V = VFLAG_SUB_16(src, dst, res);
6646
6647 m68ki_write_16(ea, FLAG_Z);
6648 }
6649
6650
m68k_op_subi_16_aw(void)6651 void m68k_op_subi_16_aw(void)
6652 {
6653 uint src = OPER_I_16();
6654 uint ea = EA_AW_16();
6655 uint dst = m68ki_read_16(ea);
6656 uint res = dst - src;
6657
6658 FLAG_N = NFLAG_16(res);
6659 FLAG_Z = MASK_OUT_ABOVE_16(res);
6660 FLAG_X = FLAG_C = CFLAG_16(res);
6661 FLAG_V = VFLAG_SUB_16(src, dst, res);
6662
6663 m68ki_write_16(ea, FLAG_Z);
6664 }
6665
6666
m68k_op_subi_16_al(void)6667 void m68k_op_subi_16_al(void)
6668 {
6669 uint src = OPER_I_16();
6670 uint ea = EA_AL_16();
6671 uint dst = m68ki_read_16(ea);
6672 uint res = dst - src;
6673
6674 FLAG_N = NFLAG_16(res);
6675 FLAG_Z = MASK_OUT_ABOVE_16(res);
6676 FLAG_X = FLAG_C = CFLAG_16(res);
6677 FLAG_V = VFLAG_SUB_16(src, dst, res);
6678
6679 m68ki_write_16(ea, FLAG_Z);
6680 }
6681
6682
m68k_op_subi_32_d(void)6683 void m68k_op_subi_32_d(void)
6684 {
6685 uint* r_dst = &DY;
6686 uint src = OPER_I_32();
6687 uint dst = *r_dst;
6688 uint res = dst - src;
6689
6690 FLAG_N = NFLAG_32(res);
6691 FLAG_Z = MASK_OUT_ABOVE_32(res);
6692 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
6693 FLAG_V = VFLAG_SUB_32(src, dst, res);
6694
6695 *r_dst = FLAG_Z;
6696 }
6697
6698
m68k_op_subi_32_ai(void)6699 void m68k_op_subi_32_ai(void)
6700 {
6701 uint src = OPER_I_32();
6702 uint ea = EA_AY_AI_32();
6703 uint dst = m68ki_read_32(ea);
6704 uint res = dst - src;
6705
6706 FLAG_N = NFLAG_32(res);
6707 FLAG_Z = MASK_OUT_ABOVE_32(res);
6708 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
6709 FLAG_V = VFLAG_SUB_32(src, dst, res);
6710
6711 m68ki_write_32(ea, FLAG_Z);
6712 }
6713
6714
m68k_op_subi_32_pi(void)6715 void m68k_op_subi_32_pi(void)
6716 {
6717 uint src = OPER_I_32();
6718 uint ea = EA_AY_PI_32();
6719 uint dst = m68ki_read_32(ea);
6720 uint res = dst - src;
6721
6722 FLAG_N = NFLAG_32(res);
6723 FLAG_Z = MASK_OUT_ABOVE_32(res);
6724 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
6725 FLAG_V = VFLAG_SUB_32(src, dst, res);
6726
6727 m68ki_write_32(ea, FLAG_Z);
6728 }
6729
6730
m68k_op_subi_32_pd(void)6731 void m68k_op_subi_32_pd(void)
6732 {
6733 uint src = OPER_I_32();
6734 uint ea = EA_AY_PD_32();
6735 uint dst = m68ki_read_32(ea);
6736 uint res = dst - src;
6737
6738 FLAG_N = NFLAG_32(res);
6739 FLAG_Z = MASK_OUT_ABOVE_32(res);
6740 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
6741 FLAG_V = VFLAG_SUB_32(src, dst, res);
6742
6743 m68ki_write_32(ea, FLAG_Z);
6744 }
6745
6746
m68k_op_subi_32_di(void)6747 void m68k_op_subi_32_di(void)
6748 {
6749 uint src = OPER_I_32();
6750 uint ea = EA_AY_DI_32();
6751 uint dst = m68ki_read_32(ea);
6752 uint res = dst - src;
6753
6754 FLAG_N = NFLAG_32(res);
6755 FLAG_Z = MASK_OUT_ABOVE_32(res);
6756 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
6757 FLAG_V = VFLAG_SUB_32(src, dst, res);
6758
6759 m68ki_write_32(ea, FLAG_Z);
6760 }
6761
6762
m68k_op_subi_32_ix(void)6763 void m68k_op_subi_32_ix(void)
6764 {
6765 uint src = OPER_I_32();
6766 uint ea = EA_AY_IX_32();
6767 uint dst = m68ki_read_32(ea);
6768 uint res = dst - src;
6769
6770 FLAG_N = NFLAG_32(res);
6771 FLAG_Z = MASK_OUT_ABOVE_32(res);
6772 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
6773 FLAG_V = VFLAG_SUB_32(src, dst, res);
6774
6775 m68ki_write_32(ea, FLAG_Z);
6776 }
6777
6778
m68k_op_subi_32_aw(void)6779 void m68k_op_subi_32_aw(void)
6780 {
6781 uint src = OPER_I_32();
6782 uint ea = EA_AW_32();
6783 uint dst = m68ki_read_32(ea);
6784 uint res = dst - src;
6785
6786 FLAG_N = NFLAG_32(res);
6787 FLAG_Z = MASK_OUT_ABOVE_32(res);
6788 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
6789 FLAG_V = VFLAG_SUB_32(src, dst, res);
6790
6791 m68ki_write_32(ea, FLAG_Z);
6792 }
6793
6794
m68k_op_subi_32_al(void)6795 void m68k_op_subi_32_al(void)
6796 {
6797 uint src = OPER_I_32();
6798 uint ea = EA_AL_32();
6799 uint dst = m68ki_read_32(ea);
6800 uint res = dst - src;
6801
6802 FLAG_N = NFLAG_32(res);
6803 FLAG_Z = MASK_OUT_ABOVE_32(res);
6804 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
6805 FLAG_V = VFLAG_SUB_32(src, dst, res);
6806
6807 m68ki_write_32(ea, FLAG_Z);
6808 }
6809
6810
m68k_op_subq_8_d(void)6811 void m68k_op_subq_8_d(void)
6812 {
6813 uint* r_dst = &DY;
6814 uint src = (((REG_IR >> 9) - 1) & 7) + 1;
6815 uint dst = MASK_OUT_ABOVE_8(*r_dst);
6816 uint res = dst - src;
6817
6818 FLAG_N = NFLAG_8(res);
6819 FLAG_Z = MASK_OUT_ABOVE_8(res);
6820 FLAG_X = FLAG_C = CFLAG_8(res);
6821 FLAG_V = VFLAG_SUB_8(src, dst, res);
6822
6823 *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
6824 }
6825
6826
m68k_op_subq_8_ai(void)6827 void m68k_op_subq_8_ai(void)
6828 {
6829 uint src = (((REG_IR >> 9) - 1) & 7) + 1;
6830 uint ea = EA_AY_AI_8();
6831 uint dst = m68ki_read_8(ea);
6832 uint res = dst - src;
6833
6834 FLAG_N = NFLAG_8(res);
6835 FLAG_Z = MASK_OUT_ABOVE_8(res);
6836 FLAG_X = FLAG_C = CFLAG_8(res);
6837 FLAG_V = VFLAG_SUB_8(src, dst, res);
6838
6839 m68ki_write_8(ea, FLAG_Z);
6840 }
6841
6842
m68k_op_subq_8_pi(void)6843 void m68k_op_subq_8_pi(void)
6844 {
6845 uint src = (((REG_IR >> 9) - 1) & 7) + 1;
6846 uint ea = EA_AY_PI_8();
6847 uint dst = m68ki_read_8(ea);
6848 uint res = dst - src;
6849
6850 FLAG_N = NFLAG_8(res);
6851 FLAG_Z = MASK_OUT_ABOVE_8(res);
6852 FLAG_X = FLAG_C = CFLAG_8(res);
6853 FLAG_V = VFLAG_SUB_8(src, dst, res);
6854
6855 m68ki_write_8(ea, FLAG_Z);
6856 }
6857
6858
m68k_op_subq_8_pi7(void)6859 void m68k_op_subq_8_pi7(void)
6860 {
6861 uint src = (((REG_IR >> 9) - 1) & 7) + 1;
6862 uint ea = EA_A7_PI_8();
6863 uint dst = m68ki_read_8(ea);
6864 uint res = dst - src;
6865
6866 FLAG_N = NFLAG_8(res);
6867 FLAG_Z = MASK_OUT_ABOVE_8(res);
6868 FLAG_X = FLAG_C = CFLAG_8(res);
6869 FLAG_V = VFLAG_SUB_8(src, dst, res);
6870
6871 m68ki_write_8(ea, FLAG_Z);
6872 }
6873
6874
m68k_op_subq_8_pd(void)6875 void m68k_op_subq_8_pd(void)
6876 {
6877 uint src = (((REG_IR >> 9) - 1) & 7) + 1;
6878 uint ea = EA_AY_PD_8();
6879 uint dst = m68ki_read_8(ea);
6880 uint res = dst - src;
6881
6882 FLAG_N = NFLAG_8(res);
6883 FLAG_Z = MASK_OUT_ABOVE_8(res);
6884 FLAG_X = FLAG_C = CFLAG_8(res);
6885 FLAG_V = VFLAG_SUB_8(src, dst, res);
6886
6887 m68ki_write_8(ea, FLAG_Z);
6888 }
6889
6890
m68k_op_subq_8_pd7(void)6891 void m68k_op_subq_8_pd7(void)
6892 {
6893 uint src = (((REG_IR >> 9) - 1) & 7) + 1;
6894 uint ea = EA_A7_PD_8();
6895 uint dst = m68ki_read_8(ea);
6896 uint res = dst - src;
6897
6898 FLAG_N = NFLAG_8(res);
6899 FLAG_Z = MASK_OUT_ABOVE_8(res);
6900 FLAG_X = FLAG_C = CFLAG_8(res);
6901 FLAG_V = VFLAG_SUB_8(src, dst, res);
6902
6903 m68ki_write_8(ea, FLAG_Z);
6904 }
6905
6906
m68k_op_subq_8_di(void)6907 void m68k_op_subq_8_di(void)
6908 {
6909 uint src = (((REG_IR >> 9) - 1) & 7) + 1;
6910 uint ea = EA_AY_DI_8();
6911 uint dst = m68ki_read_8(ea);
6912 uint res = dst - src;
6913
6914 FLAG_N = NFLAG_8(res);
6915 FLAG_Z = MASK_OUT_ABOVE_8(res);
6916 FLAG_X = FLAG_C = CFLAG_8(res);
6917 FLAG_V = VFLAG_SUB_8(src, dst, res);
6918
6919 m68ki_write_8(ea, FLAG_Z);
6920 }
6921
6922
m68k_op_subq_8_ix(void)6923 void m68k_op_subq_8_ix(void)
6924 {
6925 uint src = (((REG_IR >> 9) - 1) & 7) + 1;
6926 uint ea = EA_AY_IX_8();
6927 uint dst = m68ki_read_8(ea);
6928 uint res = dst - src;
6929
6930 FLAG_N = NFLAG_8(res);
6931 FLAG_Z = MASK_OUT_ABOVE_8(res);
6932 FLAG_X = FLAG_C = CFLAG_8(res);
6933 FLAG_V = VFLAG_SUB_8(src, dst, res);
6934
6935 m68ki_write_8(ea, FLAG_Z);
6936 }
6937
6938
m68k_op_subq_8_aw(void)6939 void m68k_op_subq_8_aw(void)
6940 {
6941 uint src = (((REG_IR >> 9) - 1) & 7) + 1;
6942 uint ea = EA_AW_8();
6943 uint dst = m68ki_read_8(ea);
6944 uint res = dst - src;
6945
6946 FLAG_N = NFLAG_8(res);
6947 FLAG_Z = MASK_OUT_ABOVE_8(res);
6948 FLAG_X = FLAG_C = CFLAG_8(res);
6949 FLAG_V = VFLAG_SUB_8(src, dst, res);
6950
6951 m68ki_write_8(ea, FLAG_Z);
6952 }
6953
6954
m68k_op_subq_8_al(void)6955 void m68k_op_subq_8_al(void)
6956 {
6957 uint src = (((REG_IR >> 9) - 1) & 7) + 1;
6958 uint ea = EA_AL_8();
6959 uint dst = m68ki_read_8(ea);
6960 uint res = dst - src;
6961
6962 FLAG_N = NFLAG_8(res);
6963 FLAG_Z = MASK_OUT_ABOVE_8(res);
6964 FLAG_X = FLAG_C = CFLAG_8(res);
6965 FLAG_V = VFLAG_SUB_8(src, dst, res);
6966
6967 m68ki_write_8(ea, FLAG_Z);
6968 }
6969
6970
m68k_op_subq_16_d(void)6971 void m68k_op_subq_16_d(void)
6972 {
6973 uint* r_dst = &DY;
6974 uint src = (((REG_IR >> 9) - 1) & 7) + 1;
6975 uint dst = MASK_OUT_ABOVE_16(*r_dst);
6976 uint res = dst - src;
6977
6978 FLAG_N = NFLAG_16(res);
6979 FLAG_Z = MASK_OUT_ABOVE_16(res);
6980 FLAG_X = FLAG_C = CFLAG_16(res);
6981 FLAG_V = VFLAG_SUB_16(src, dst, res);
6982
6983 *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
6984 }
6985
6986
m68k_op_subq_16_a(void)6987 void m68k_op_subq_16_a(void)
6988 {
6989 uint* r_dst = &AY;
6990
6991 *r_dst = MASK_OUT_ABOVE_32(*r_dst - ((((REG_IR >> 9) - 1) & 7) + 1));
6992 }
6993
6994
m68k_op_subq_16_ai(void)6995 void m68k_op_subq_16_ai(void)
6996 {
6997 uint src = (((REG_IR >> 9) - 1) & 7) + 1;
6998 uint ea = EA_AY_AI_16();
6999 uint dst = m68ki_read_16(ea);
7000 uint res = dst - src;
7001
7002 FLAG_N = NFLAG_16(res);
7003 FLAG_Z = MASK_OUT_ABOVE_16(res);
7004 FLAG_X = FLAG_C = CFLAG_16(res);
7005 FLAG_V = VFLAG_SUB_16(src, dst, res);
7006
7007 m68ki_write_16(ea, FLAG_Z);
7008 }
7009
7010
m68k_op_subq_16_pi(void)7011 void m68k_op_subq_16_pi(void)
7012 {
7013 uint src = (((REG_IR >> 9) - 1) & 7) + 1;
7014 uint ea = EA_AY_PI_16();
7015 uint dst = m68ki_read_16(ea);
7016 uint res = dst - src;
7017
7018 FLAG_N = NFLAG_16(res);
7019 FLAG_Z = MASK_OUT_ABOVE_16(res);
7020 FLAG_X = FLAG_C = CFLAG_16(res);
7021 FLAG_V = VFLAG_SUB_16(src, dst, res);
7022
7023 m68ki_write_16(ea, FLAG_Z);
7024 }
7025
7026
m68k_op_subq_16_pd(void)7027 void m68k_op_subq_16_pd(void)
7028 {
7029 uint src = (((REG_IR >> 9) - 1) & 7) + 1;
7030 uint ea = EA_AY_PD_16();
7031 uint dst = m68ki_read_16(ea);
7032 uint res = dst - src;
7033
7034 FLAG_N = NFLAG_16(res);
7035 FLAG_Z = MASK_OUT_ABOVE_16(res);
7036 FLAG_X = FLAG_C = CFLAG_16(res);
7037 FLAG_V = VFLAG_SUB_16(src, dst, res);
7038
7039 m68ki_write_16(ea, FLAG_Z);
7040 }
7041
7042
m68k_op_subq_16_di(void)7043 void m68k_op_subq_16_di(void)
7044 {
7045 uint src = (((REG_IR >> 9) - 1) & 7) + 1;
7046 uint ea = EA_AY_DI_16();
7047 uint dst = m68ki_read_16(ea);
7048 uint res = dst - src;
7049
7050 FLAG_N = NFLAG_16(res);
7051 FLAG_Z = MASK_OUT_ABOVE_16(res);
7052 FLAG_X = FLAG_C = CFLAG_16(res);
7053 FLAG_V = VFLAG_SUB_16(src, dst, res);
7054
7055 m68ki_write_16(ea, FLAG_Z);
7056 }
7057
7058
m68k_op_subq_16_ix(void)7059 void m68k_op_subq_16_ix(void)
7060 {
7061 uint src = (((REG_IR >> 9) - 1) & 7) + 1;
7062 uint ea = EA_AY_IX_16();
7063 uint dst = m68ki_read_16(ea);
7064 uint res = dst - src;
7065
7066 FLAG_N = NFLAG_16(res);
7067 FLAG_Z = MASK_OUT_ABOVE_16(res);
7068 FLAG_X = FLAG_C = CFLAG_16(res);
7069 FLAG_V = VFLAG_SUB_16(src, dst, res);
7070
7071 m68ki_write_16(ea, FLAG_Z);
7072 }
7073
7074
m68k_op_subq_16_aw(void)7075 void m68k_op_subq_16_aw(void)
7076 {
7077 uint src = (((REG_IR >> 9) - 1) & 7) + 1;
7078 uint ea = EA_AW_16();
7079 uint dst = m68ki_read_16(ea);
7080 uint res = dst - src;
7081
7082 FLAG_N = NFLAG_16(res);
7083 FLAG_Z = MASK_OUT_ABOVE_16(res);
7084 FLAG_X = FLAG_C = CFLAG_16(res);
7085 FLAG_V = VFLAG_SUB_16(src, dst, res);
7086
7087 m68ki_write_16(ea, FLAG_Z);
7088 }
7089
7090
m68k_op_subq_16_al(void)7091 void m68k_op_subq_16_al(void)
7092 {
7093 uint src = (((REG_IR >> 9) - 1) & 7) + 1;
7094 uint ea = EA_AL_16();
7095 uint dst = m68ki_read_16(ea);
7096 uint res = dst - src;
7097
7098 FLAG_N = NFLAG_16(res);
7099 FLAG_Z = MASK_OUT_ABOVE_16(res);
7100 FLAG_X = FLAG_C = CFLAG_16(res);
7101 FLAG_V = VFLAG_SUB_16(src, dst, res);
7102
7103 m68ki_write_16(ea, FLAG_Z);
7104 }
7105
7106
m68k_op_subq_32_d(void)7107 void m68k_op_subq_32_d(void)
7108 {
7109 uint* r_dst = &DY;
7110 uint src = (((REG_IR >> 9) - 1) & 7) + 1;
7111 uint dst = *r_dst;
7112 uint res = dst - src;
7113
7114 FLAG_N = NFLAG_32(res);
7115 FLAG_Z = MASK_OUT_ABOVE_32(res);
7116 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
7117 FLAG_V = VFLAG_SUB_32(src, dst, res);
7118
7119 *r_dst = FLAG_Z;
7120 }
7121
7122
m68k_op_subq_32_a(void)7123 void m68k_op_subq_32_a(void)
7124 {
7125 uint* r_dst = &AY;
7126
7127 *r_dst = MASK_OUT_ABOVE_32(*r_dst - ((((REG_IR >> 9) - 1) & 7) + 1));
7128 }
7129
7130
m68k_op_subq_32_ai(void)7131 void m68k_op_subq_32_ai(void)
7132 {
7133 uint src = (((REG_IR >> 9) - 1) & 7) + 1;
7134 uint ea = EA_AY_AI_32();
7135 uint dst = m68ki_read_32(ea);
7136 uint res = dst - src;
7137
7138 FLAG_N = NFLAG_32(res);
7139 FLAG_Z = MASK_OUT_ABOVE_32(res);
7140 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
7141 FLAG_V = VFLAG_SUB_32(src, dst, res);
7142
7143 m68ki_write_32(ea, FLAG_Z);
7144 }
7145
7146
m68k_op_subq_32_pi(void)7147 void m68k_op_subq_32_pi(void)
7148 {
7149 uint src = (((REG_IR >> 9) - 1) & 7) + 1;
7150 uint ea = EA_AY_PI_32();
7151 uint dst = m68ki_read_32(ea);
7152 uint res = dst - src;
7153
7154 FLAG_N = NFLAG_32(res);
7155 FLAG_Z = MASK_OUT_ABOVE_32(res);
7156 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
7157 FLAG_V = VFLAG_SUB_32(src, dst, res);
7158
7159 m68ki_write_32(ea, FLAG_Z);
7160 }
7161
7162
m68k_op_subq_32_pd(void)7163 void m68k_op_subq_32_pd(void)
7164 {
7165 uint src = (((REG_IR >> 9) - 1) & 7) + 1;
7166 uint ea = EA_AY_PD_32();
7167 uint dst = m68ki_read_32(ea);
7168 uint res = dst - src;
7169
7170 FLAG_N = NFLAG_32(res);
7171 FLAG_Z = MASK_OUT_ABOVE_32(res);
7172 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
7173 FLAG_V = VFLAG_SUB_32(src, dst, res);
7174
7175 m68ki_write_32(ea, FLAG_Z);
7176 }
7177
7178
m68k_op_subq_32_di(void)7179 void m68k_op_subq_32_di(void)
7180 {
7181 uint src = (((REG_IR >> 9) - 1) & 7) + 1;
7182 uint ea = EA_AY_DI_32();
7183 uint dst = m68ki_read_32(ea);
7184 uint res = dst - src;
7185
7186 FLAG_N = NFLAG_32(res);
7187 FLAG_Z = MASK_OUT_ABOVE_32(res);
7188 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
7189 FLAG_V = VFLAG_SUB_32(src, dst, res);
7190
7191 m68ki_write_32(ea, FLAG_Z);
7192 }
7193
7194
m68k_op_subq_32_ix(void)7195 void m68k_op_subq_32_ix(void)
7196 {
7197 uint src = (((REG_IR >> 9) - 1) & 7) + 1;
7198 uint ea = EA_AY_IX_32();
7199 uint dst = m68ki_read_32(ea);
7200 uint res = dst - src;
7201
7202 FLAG_N = NFLAG_32(res);
7203 FLAG_Z = MASK_OUT_ABOVE_32(res);
7204 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
7205 FLAG_V = VFLAG_SUB_32(src, dst, res);
7206
7207 m68ki_write_32(ea, FLAG_Z);
7208 }
7209
7210
m68k_op_subq_32_aw(void)7211 void m68k_op_subq_32_aw(void)
7212 {
7213 uint src = (((REG_IR >> 9) - 1) & 7) + 1;
7214 uint ea = EA_AW_32();
7215 uint dst = m68ki_read_32(ea);
7216 uint res = dst - src;
7217
7218 FLAG_N = NFLAG_32(res);
7219 FLAG_Z = MASK_OUT_ABOVE_32(res);
7220 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
7221 FLAG_V = VFLAG_SUB_32(src, dst, res);
7222
7223 m68ki_write_32(ea, FLAG_Z);
7224 }
7225
7226
m68k_op_subq_32_al(void)7227 void m68k_op_subq_32_al(void)
7228 {
7229 uint src = (((REG_IR >> 9) - 1) & 7) + 1;
7230 uint ea = EA_AL_32();
7231 uint dst = m68ki_read_32(ea);
7232 uint res = dst - src;
7233
7234 FLAG_N = NFLAG_32(res);
7235 FLAG_Z = MASK_OUT_ABOVE_32(res);
7236 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
7237 FLAG_V = VFLAG_SUB_32(src, dst, res);
7238
7239 m68ki_write_32(ea, FLAG_Z);
7240 }
7241
7242
m68k_op_subx_8_rr(void)7243 void m68k_op_subx_8_rr(void)
7244 {
7245 uint* r_dst = &DX;
7246 uint src = MASK_OUT_ABOVE_8(DY);
7247 uint dst = MASK_OUT_ABOVE_8(*r_dst);
7248 uint res = dst - src - XFLAG_AS_1();
7249
7250 FLAG_N = NFLAG_8(res);
7251 FLAG_X = FLAG_C = CFLAG_8(res);
7252 FLAG_V = VFLAG_SUB_8(src, dst, res);
7253
7254 res = MASK_OUT_ABOVE_8(res);
7255 FLAG_Z |= res;
7256
7257 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
7258 }
7259
7260
m68k_op_subx_16_rr(void)7261 void m68k_op_subx_16_rr(void)
7262 {
7263 uint* r_dst = &DX;
7264 uint src = MASK_OUT_ABOVE_16(DY);
7265 uint dst = MASK_OUT_ABOVE_16(*r_dst);
7266 uint res = dst - src - XFLAG_AS_1();
7267
7268 FLAG_N = NFLAG_16(res);
7269 FLAG_X = FLAG_C = CFLAG_16(res);
7270 FLAG_V = VFLAG_SUB_16(src, dst, res);
7271
7272 res = MASK_OUT_ABOVE_16(res);
7273 FLAG_Z |= res;
7274
7275 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
7276 }
7277
7278
m68k_op_subx_32_rr(void)7279 void m68k_op_subx_32_rr(void)
7280 {
7281 uint* r_dst = &DX;
7282 uint src = DY;
7283 uint dst = *r_dst;
7284 uint res = dst - src - XFLAG_AS_1();
7285
7286 FLAG_N = NFLAG_32(res);
7287 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
7288 FLAG_V = VFLAG_SUB_32(src, dst, res);
7289
7290 res = MASK_OUT_ABOVE_32(res);
7291 FLAG_Z |= res;
7292
7293 *r_dst = res;
7294 }
7295
7296
m68k_op_subx_8_mm_ax7(void)7297 void m68k_op_subx_8_mm_ax7(void)
7298 {
7299 uint src = OPER_AY_PD_8();
7300 uint ea = EA_A7_PD_8();
7301 uint dst = m68ki_read_8(ea);
7302 uint res = dst - src - XFLAG_AS_1();
7303
7304 FLAG_N = NFLAG_8(res);
7305 FLAG_X = FLAG_C = CFLAG_8(res);
7306 FLAG_V = VFLAG_SUB_8(src, dst, res);
7307
7308 res = MASK_OUT_ABOVE_8(res);
7309 FLAG_Z |= res;
7310
7311 m68ki_write_8(ea, res);
7312 }
7313
7314
m68k_op_subx_8_mm_ay7(void)7315 void m68k_op_subx_8_mm_ay7(void)
7316 {
7317 uint src = OPER_A7_PD_8();
7318 uint ea = EA_AX_PD_8();
7319 uint dst = m68ki_read_8(ea);
7320 uint res = dst - src - XFLAG_AS_1();
7321
7322 FLAG_N = NFLAG_8(res);
7323 FLAG_X = FLAG_C = CFLAG_8(res);
7324 FLAG_V = VFLAG_SUB_8(src, dst, res);
7325
7326 res = MASK_OUT_ABOVE_8(res);
7327 FLAG_Z |= res;
7328
7329 m68ki_write_8(ea, res);
7330 }
7331
7332
m68k_op_subx_8_mm_axy7(void)7333 void m68k_op_subx_8_mm_axy7(void)
7334 {
7335 uint src = OPER_A7_PD_8();
7336 uint ea = EA_A7_PD_8();
7337 uint dst = m68ki_read_8(ea);
7338 uint res = dst - src - XFLAG_AS_1();
7339
7340 FLAG_N = NFLAG_8(res);
7341 FLAG_X = FLAG_C = CFLAG_8(res);
7342 FLAG_V = VFLAG_SUB_8(src, dst, res);
7343
7344 res = MASK_OUT_ABOVE_8(res);
7345 FLAG_Z |= res;
7346
7347 m68ki_write_8(ea, res);
7348 }
7349
7350
m68k_op_subx_8_mm(void)7351 void m68k_op_subx_8_mm(void)
7352 {
7353 uint src = OPER_AY_PD_8();
7354 uint ea = EA_AX_PD_8();
7355 uint dst = m68ki_read_8(ea);
7356 uint res = dst - src - XFLAG_AS_1();
7357
7358 FLAG_N = NFLAG_8(res);
7359 FLAG_X = FLAG_C = CFLAG_8(res);
7360 FLAG_V = VFLAG_SUB_8(src, dst, res);
7361
7362 res = MASK_OUT_ABOVE_8(res);
7363 FLAG_Z |= res;
7364
7365 m68ki_write_8(ea, res);
7366 }
7367
7368
m68k_op_subx_16_mm(void)7369 void m68k_op_subx_16_mm(void)
7370 {
7371 uint src = OPER_AY_PD_16();
7372 uint ea = EA_AX_PD_16();
7373 uint dst = m68ki_read_16(ea);
7374 uint res = dst - src - XFLAG_AS_1();
7375
7376 FLAG_N = NFLAG_16(res);
7377 FLAG_X = FLAG_C = CFLAG_16(res);
7378 FLAG_V = VFLAG_SUB_16(src, dst, res);
7379
7380 res = MASK_OUT_ABOVE_16(res);
7381 FLAG_Z |= res;
7382
7383 m68ki_write_16(ea, res);
7384 }
7385
7386
m68k_op_subx_32_mm(void)7387 void m68k_op_subx_32_mm(void)
7388 {
7389 uint src = OPER_AY_PD_32();
7390 uint ea = EA_AX_PD_32();
7391 uint dst = m68ki_read_32(ea);
7392 uint res = dst - src - XFLAG_AS_1();
7393
7394 FLAG_N = NFLAG_32(res);
7395 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
7396 FLAG_V = VFLAG_SUB_32(src, dst, res);
7397
7398 res = MASK_OUT_ABOVE_32(res);
7399 FLAG_Z |= res;
7400
7401 m68ki_write_32(ea, res);
7402 }
7403
7404
m68k_op_swap_32(void)7405 void m68k_op_swap_32(void)
7406 {
7407 uint* r_dst = &DY;
7408
7409 FLAG_Z = MASK_OUT_ABOVE_32(*r_dst<<16);
7410 *r_dst = (*r_dst>>16) | FLAG_Z;
7411
7412 FLAG_Z = *r_dst;
7413 FLAG_N = NFLAG_32(*r_dst);
7414 FLAG_C = CFLAG_CLEAR;
7415 FLAG_V = VFLAG_CLEAR;
7416 }
7417
7418
m68k_op_tas_8_d(void)7419 void m68k_op_tas_8_d(void)
7420 {
7421 uint* r_dst = &DY;
7422
7423 FLAG_Z = MASK_OUT_ABOVE_8(*r_dst);
7424 FLAG_N = NFLAG_8(*r_dst);
7425 FLAG_V = VFLAG_CLEAR;
7426 FLAG_C = CFLAG_CLEAR;
7427 *r_dst |= 0x80;
7428 }
7429
7430
m68k_op_tas_8_ai(void)7431 void m68k_op_tas_8_ai(void)
7432 {
7433 uint ea = EA_AY_AI_8();
7434 uint dst = m68ki_read_8(ea);
7435
7436 FLAG_Z = dst;
7437 FLAG_N = NFLAG_8(dst);
7438 FLAG_V = VFLAG_CLEAR;
7439 FLAG_C = CFLAG_CLEAR;
7440 m68ki_write_8(ea, dst | 0x80);
7441 }
7442
7443
m68k_op_tas_8_pi(void)7444 void m68k_op_tas_8_pi(void)
7445 {
7446 uint ea = EA_AY_PI_8();
7447 uint dst = m68ki_read_8(ea);
7448
7449 FLAG_Z = dst;
7450 FLAG_N = NFLAG_8(dst);
7451 FLAG_V = VFLAG_CLEAR;
7452 FLAG_C = CFLAG_CLEAR;
7453 m68ki_write_8(ea, dst | 0x80);
7454 }
7455
7456
m68k_op_tas_8_pi7(void)7457 void m68k_op_tas_8_pi7(void)
7458 {
7459 uint ea = EA_A7_PI_8();
7460 uint dst = m68ki_read_8(ea);
7461
7462 FLAG_Z = dst;
7463 FLAG_N = NFLAG_8(dst);
7464 FLAG_V = VFLAG_CLEAR;
7465 FLAG_C = CFLAG_CLEAR;
7466 m68ki_write_8(ea, dst | 0x80);
7467 }
7468
7469
m68k_op_tas_8_pd(void)7470 void m68k_op_tas_8_pd(void)
7471 {
7472 uint ea = EA_AY_PD_8();
7473 uint dst = m68ki_read_8(ea);
7474
7475 FLAG_Z = dst;
7476 FLAG_N = NFLAG_8(dst);
7477 FLAG_V = VFLAG_CLEAR;
7478 FLAG_C = CFLAG_CLEAR;
7479 m68ki_write_8(ea, dst | 0x80);
7480 }
7481
7482
m68k_op_tas_8_pd7(void)7483 void m68k_op_tas_8_pd7(void)
7484 {
7485 uint ea = EA_A7_PD_8();
7486 uint dst = m68ki_read_8(ea);
7487
7488 FLAG_Z = dst;
7489 FLAG_N = NFLAG_8(dst);
7490 FLAG_V = VFLAG_CLEAR;
7491 FLAG_C = CFLAG_CLEAR;
7492 m68ki_write_8(ea, dst | 0x80);
7493 }
7494
7495
m68k_op_tas_8_di(void)7496 void m68k_op_tas_8_di(void)
7497 {
7498 uint ea = EA_AY_DI_8();
7499 uint dst = m68ki_read_8(ea);
7500
7501 FLAG_Z = dst;
7502 FLAG_N = NFLAG_8(dst);
7503 FLAG_V = VFLAG_CLEAR;
7504 FLAG_C = CFLAG_CLEAR;
7505 m68ki_write_8(ea, dst | 0x80);
7506 }
7507
7508
m68k_op_tas_8_ix(void)7509 void m68k_op_tas_8_ix(void)
7510 {
7511 uint ea = EA_AY_IX_8();
7512 uint dst = m68ki_read_8(ea);
7513
7514 FLAG_Z = dst;
7515 FLAG_N = NFLAG_8(dst);
7516 FLAG_V = VFLAG_CLEAR;
7517 FLAG_C = CFLAG_CLEAR;
7518 m68ki_write_8(ea, dst | 0x80);
7519 }
7520
7521
m68k_op_tas_8_aw(void)7522 void m68k_op_tas_8_aw(void)
7523 {
7524 uint ea = EA_AW_8();
7525 uint dst = m68ki_read_8(ea);
7526
7527 FLAG_Z = dst;
7528 FLAG_N = NFLAG_8(dst);
7529 FLAG_V = VFLAG_CLEAR;
7530 FLAG_C = CFLAG_CLEAR;
7531 m68ki_write_8(ea, dst | 0x80);
7532 }
7533
7534
m68k_op_tas_8_al(void)7535 void m68k_op_tas_8_al(void)
7536 {
7537 uint ea = EA_AL_8();
7538 uint dst = m68ki_read_8(ea);
7539
7540 FLAG_Z = dst;
7541 FLAG_N = NFLAG_8(dst);
7542 FLAG_V = VFLAG_CLEAR;
7543 FLAG_C = CFLAG_CLEAR;
7544 m68ki_write_8(ea, dst | 0x80);
7545 }
7546
7547
m68k_op_trap(void)7548 void m68k_op_trap(void)
7549 {
7550 /* Trap#n stacks exception frame type 0 */
7551 m68ki_exception_trapN(EXCEPTION_TRAP_BASE + (REG_IR & 0xf)); /* HJB 990403 */
7552 }
7553
7554
m68k_op_trapt(void)7555 void m68k_op_trapt(void)
7556 {
7557 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7558 {
7559 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
7560 return;
7561 }
7562 m68ki_exception_illegal();
7563 }
7564
7565
m68k_op_trapt_16(void)7566 void m68k_op_trapt_16(void)
7567 {
7568 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7569 {
7570 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
7571 return;
7572 }
7573 m68ki_exception_illegal();
7574 }
7575
7576
m68k_op_trapt_32(void)7577 void m68k_op_trapt_32(void)
7578 {
7579 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7580 {
7581 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
7582 return;
7583 }
7584 m68ki_exception_illegal();
7585 }
7586
7587
m68k_op_trapf(void)7588 void m68k_op_trapf(void)
7589 {
7590 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7591 {
7592 return;
7593 }
7594 m68ki_exception_illegal();
7595 }
7596
7597
m68k_op_trapf_16(void)7598 void m68k_op_trapf_16(void)
7599 {
7600 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7601 {
7602 REG_PC += 2;
7603 return;
7604 }
7605 m68ki_exception_illegal();
7606 }
7607
7608
m68k_op_trapf_32(void)7609 void m68k_op_trapf_32(void)
7610 {
7611 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7612 {
7613 REG_PC += 4;
7614 return;
7615 }
7616 m68ki_exception_illegal();
7617 }
7618
7619
m68k_op_traphi(void)7620 void m68k_op_traphi(void)
7621 {
7622 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7623 {
7624 if(COND_HI())
7625 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
7626 return;
7627 }
7628 m68ki_exception_illegal();
7629 }
7630
7631
m68k_op_trapls(void)7632 void m68k_op_trapls(void)
7633 {
7634 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7635 {
7636 if(COND_LS())
7637 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
7638 return;
7639 }
7640 m68ki_exception_illegal();
7641 }
7642
7643
m68k_op_trapcc(void)7644 void m68k_op_trapcc(void)
7645 {
7646 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7647 {
7648 if(COND_CC())
7649 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
7650 return;
7651 }
7652 m68ki_exception_illegal();
7653 }
7654
7655
m68k_op_trapcs(void)7656 void m68k_op_trapcs(void)
7657 {
7658 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7659 {
7660 if(COND_CS())
7661 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
7662 return;
7663 }
7664 m68ki_exception_illegal();
7665 }
7666
7667
m68k_op_trapne(void)7668 void m68k_op_trapne(void)
7669 {
7670 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7671 {
7672 if(COND_NE())
7673 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
7674 return;
7675 }
7676 m68ki_exception_illegal();
7677 }
7678
7679
m68k_op_trapeq(void)7680 void m68k_op_trapeq(void)
7681 {
7682 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7683 {
7684 if(COND_EQ())
7685 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
7686 return;
7687 }
7688 m68ki_exception_illegal();
7689 }
7690
7691
m68k_op_trapvc(void)7692 void m68k_op_trapvc(void)
7693 {
7694 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7695 {
7696 if(COND_VC())
7697 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
7698 return;
7699 }
7700 m68ki_exception_illegal();
7701 }
7702
7703
m68k_op_trapvs(void)7704 void m68k_op_trapvs(void)
7705 {
7706 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7707 {
7708 if(COND_VS())
7709 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
7710 return;
7711 }
7712 m68ki_exception_illegal();
7713 }
7714
7715
m68k_op_trappl(void)7716 void m68k_op_trappl(void)
7717 {
7718 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7719 {
7720 if(COND_PL())
7721 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
7722 return;
7723 }
7724 m68ki_exception_illegal();
7725 }
7726
7727
m68k_op_trapmi(void)7728 void m68k_op_trapmi(void)
7729 {
7730 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7731 {
7732 if(COND_MI())
7733 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
7734 return;
7735 }
7736 m68ki_exception_illegal();
7737 }
7738
7739
m68k_op_trapge(void)7740 void m68k_op_trapge(void)
7741 {
7742 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7743 {
7744 if(COND_GE())
7745 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
7746 return;
7747 }
7748 m68ki_exception_illegal();
7749 }
7750
7751
m68k_op_traplt(void)7752 void m68k_op_traplt(void)
7753 {
7754 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7755 {
7756 if(COND_LT())
7757 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
7758 return;
7759 }
7760 m68ki_exception_illegal();
7761 }
7762
7763
m68k_op_trapgt(void)7764 void m68k_op_trapgt(void)
7765 {
7766 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7767 {
7768 if(COND_GT())
7769 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
7770 return;
7771 }
7772 m68ki_exception_illegal();
7773 }
7774
7775
m68k_op_traple(void)7776 void m68k_op_traple(void)
7777 {
7778 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7779 {
7780 if(COND_LE())
7781 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
7782 return;
7783 }
7784 m68ki_exception_illegal();
7785 }
7786
7787
m68k_op_traphi_16(void)7788 void m68k_op_traphi_16(void)
7789 {
7790 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7791 {
7792 if(COND_HI())
7793 {
7794 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
7795 return;
7796 }
7797 REG_PC += 2;
7798 return;
7799 }
7800 m68ki_exception_illegal();
7801 }
7802
7803
m68k_op_trapls_16(void)7804 void m68k_op_trapls_16(void)
7805 {
7806 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7807 {
7808 if(COND_LS())
7809 {
7810 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
7811 return;
7812 }
7813 REG_PC += 2;
7814 return;
7815 }
7816 m68ki_exception_illegal();
7817 }
7818
7819
m68k_op_trapcc_16(void)7820 void m68k_op_trapcc_16(void)
7821 {
7822 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7823 {
7824 if(COND_CC())
7825 {
7826 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
7827 return;
7828 }
7829 REG_PC += 2;
7830 return;
7831 }
7832 m68ki_exception_illegal();
7833 }
7834
7835
m68k_op_trapcs_16(void)7836 void m68k_op_trapcs_16(void)
7837 {
7838 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7839 {
7840 if(COND_CS())
7841 {
7842 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
7843 return;
7844 }
7845 REG_PC += 2;
7846 return;
7847 }
7848 m68ki_exception_illegal();
7849 }
7850
7851
m68k_op_trapne_16(void)7852 void m68k_op_trapne_16(void)
7853 {
7854 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7855 {
7856 if(COND_NE())
7857 {
7858 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
7859 return;
7860 }
7861 REG_PC += 2;
7862 return;
7863 }
7864 m68ki_exception_illegal();
7865 }
7866
7867
m68k_op_trapeq_16(void)7868 void m68k_op_trapeq_16(void)
7869 {
7870 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7871 {
7872 if(COND_EQ())
7873 {
7874 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
7875 return;
7876 }
7877 REG_PC += 2;
7878 return;
7879 }
7880 m68ki_exception_illegal();
7881 }
7882
7883
m68k_op_trapvc_16(void)7884 void m68k_op_trapvc_16(void)
7885 {
7886 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7887 {
7888 if(COND_VC())
7889 {
7890 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
7891 return;
7892 }
7893 REG_PC += 2;
7894 return;
7895 }
7896 m68ki_exception_illegal();
7897 }
7898
7899
m68k_op_trapvs_16(void)7900 void m68k_op_trapvs_16(void)
7901 {
7902 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7903 {
7904 if(COND_VS())
7905 {
7906 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
7907 return;
7908 }
7909 REG_PC += 2;
7910 return;
7911 }
7912 m68ki_exception_illegal();
7913 }
7914
7915
m68k_op_trappl_16(void)7916 void m68k_op_trappl_16(void)
7917 {
7918 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7919 {
7920 if(COND_PL())
7921 {
7922 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
7923 return;
7924 }
7925 REG_PC += 2;
7926 return;
7927 }
7928 m68ki_exception_illegal();
7929 }
7930
7931
m68k_op_trapmi_16(void)7932 void m68k_op_trapmi_16(void)
7933 {
7934 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7935 {
7936 if(COND_MI())
7937 {
7938 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
7939 return;
7940 }
7941 REG_PC += 2;
7942 return;
7943 }
7944 m68ki_exception_illegal();
7945 }
7946
7947
m68k_op_trapge_16(void)7948 void m68k_op_trapge_16(void)
7949 {
7950 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7951 {
7952 if(COND_GE())
7953 {
7954 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
7955 return;
7956 }
7957 REG_PC += 2;
7958 return;
7959 }
7960 m68ki_exception_illegal();
7961 }
7962
7963
m68k_op_traplt_16(void)7964 void m68k_op_traplt_16(void)
7965 {
7966 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7967 {
7968 if(COND_LT())
7969 {
7970 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
7971 return;
7972 }
7973 REG_PC += 2;
7974 return;
7975 }
7976 m68ki_exception_illegal();
7977 }
7978
7979
m68k_op_trapgt_16(void)7980 void m68k_op_trapgt_16(void)
7981 {
7982 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7983 {
7984 if(COND_GT())
7985 {
7986 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
7987 return;
7988 }
7989 REG_PC += 2;
7990 return;
7991 }
7992 m68ki_exception_illegal();
7993 }
7994
7995
m68k_op_traple_16(void)7996 void m68k_op_traple_16(void)
7997 {
7998 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7999 {
8000 if(COND_LE())
8001 {
8002 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
8003 return;
8004 }
8005 REG_PC += 2;
8006 return;
8007 }
8008 m68ki_exception_illegal();
8009 }
8010
8011
m68k_op_traphi_32(void)8012 void m68k_op_traphi_32(void)
8013 {
8014 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8015 {
8016 if(COND_HI())
8017 {
8018 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
8019 return;
8020 }
8021 REG_PC += 4;
8022 return;
8023 }
8024 m68ki_exception_illegal();
8025 }
8026
8027
m68k_op_trapls_32(void)8028 void m68k_op_trapls_32(void)
8029 {
8030 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8031 {
8032 if(COND_LS())
8033 {
8034 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
8035 return;
8036 }
8037 REG_PC += 4;
8038 return;
8039 }
8040 m68ki_exception_illegal();
8041 }
8042
8043
m68k_op_trapcc_32(void)8044 void m68k_op_trapcc_32(void)
8045 {
8046 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8047 {
8048 if(COND_CC())
8049 {
8050 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
8051 return;
8052 }
8053 REG_PC += 4;
8054 return;
8055 }
8056 m68ki_exception_illegal();
8057 }
8058
8059
m68k_op_trapcs_32(void)8060 void m68k_op_trapcs_32(void)
8061 {
8062 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8063 {
8064 if(COND_CS())
8065 {
8066 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
8067 return;
8068 }
8069 REG_PC += 4;
8070 return;
8071 }
8072 m68ki_exception_illegal();
8073 }
8074
8075
m68k_op_trapne_32(void)8076 void m68k_op_trapne_32(void)
8077 {
8078 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8079 {
8080 if(COND_NE())
8081 {
8082 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
8083 return;
8084 }
8085 REG_PC += 4;
8086 return;
8087 }
8088 m68ki_exception_illegal();
8089 }
8090
8091
m68k_op_trapeq_32(void)8092 void m68k_op_trapeq_32(void)
8093 {
8094 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8095 {
8096 if(COND_EQ())
8097 {
8098 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
8099 return;
8100 }
8101 REG_PC += 4;
8102 return;
8103 }
8104 m68ki_exception_illegal();
8105 }
8106
8107
m68k_op_trapvc_32(void)8108 void m68k_op_trapvc_32(void)
8109 {
8110 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8111 {
8112 if(COND_VC())
8113 {
8114 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
8115 return;
8116 }
8117 REG_PC += 4;
8118 return;
8119 }
8120 m68ki_exception_illegal();
8121 }
8122
8123
m68k_op_trapvs_32(void)8124 void m68k_op_trapvs_32(void)
8125 {
8126 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8127 {
8128 if(COND_VS())
8129 {
8130 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
8131 return;
8132 }
8133 REG_PC += 4;
8134 return;
8135 }
8136 m68ki_exception_illegal();
8137 }
8138
8139
m68k_op_trappl_32(void)8140 void m68k_op_trappl_32(void)
8141 {
8142 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8143 {
8144 if(COND_PL())
8145 {
8146 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
8147 return;
8148 }
8149 REG_PC += 4;
8150 return;
8151 }
8152 m68ki_exception_illegal();
8153 }
8154
8155
m68k_op_trapmi_32(void)8156 void m68k_op_trapmi_32(void)
8157 {
8158 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8159 {
8160 if(COND_MI())
8161 {
8162 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
8163 return;
8164 }
8165 REG_PC += 4;
8166 return;
8167 }
8168 m68ki_exception_illegal();
8169 }
8170
8171
m68k_op_trapge_32(void)8172 void m68k_op_trapge_32(void)
8173 {
8174 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8175 {
8176 if(COND_GE())
8177 {
8178 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
8179 return;
8180 }
8181 REG_PC += 4;
8182 return;
8183 }
8184 m68ki_exception_illegal();
8185 }
8186
8187
m68k_op_traplt_32(void)8188 void m68k_op_traplt_32(void)
8189 {
8190 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8191 {
8192 if(COND_LT())
8193 {
8194 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
8195 return;
8196 }
8197 REG_PC += 4;
8198 return;
8199 }
8200 m68ki_exception_illegal();
8201 }
8202
8203
m68k_op_trapgt_32(void)8204 void m68k_op_trapgt_32(void)
8205 {
8206 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8207 {
8208 if(COND_GT())
8209 {
8210 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
8211 return;
8212 }
8213 REG_PC += 4;
8214 return;
8215 }
8216 m68ki_exception_illegal();
8217 }
8218
8219
m68k_op_traple_32(void)8220 void m68k_op_traple_32(void)
8221 {
8222 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8223 {
8224 if(COND_LE())
8225 {
8226 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
8227 return;
8228 }
8229 REG_PC += 4;
8230 return;
8231 }
8232 m68ki_exception_illegal();
8233 }
8234
8235
m68k_op_trapv(void)8236 void m68k_op_trapv(void)
8237 {
8238 if(COND_VC())
8239 {
8240 return;
8241 }
8242 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
8243 }
8244
8245
m68k_op_tst_8_d(void)8246 void m68k_op_tst_8_d(void)
8247 {
8248 uint res = MASK_OUT_ABOVE_8(DY);
8249
8250 FLAG_N = NFLAG_8(res);
8251 FLAG_Z = res;
8252 FLAG_V = VFLAG_CLEAR;
8253 FLAG_C = CFLAG_CLEAR;
8254 }
8255
8256
m68k_op_tst_8_ai(void)8257 void m68k_op_tst_8_ai(void)
8258 {
8259 uint res = OPER_AY_AI_8();
8260
8261 FLAG_N = NFLAG_8(res);
8262 FLAG_Z = res;
8263 FLAG_V = VFLAG_CLEAR;
8264 FLAG_C = CFLAG_CLEAR;
8265 }
8266
8267
m68k_op_tst_8_pi(void)8268 void m68k_op_tst_8_pi(void)
8269 {
8270 uint res = OPER_AY_PI_8();
8271
8272 FLAG_N = NFLAG_8(res);
8273 FLAG_Z = res;
8274 FLAG_V = VFLAG_CLEAR;
8275 FLAG_C = CFLAG_CLEAR;
8276 }
8277
8278
m68k_op_tst_8_pi7(void)8279 void m68k_op_tst_8_pi7(void)
8280 {
8281 uint res = OPER_A7_PI_8();
8282
8283 FLAG_N = NFLAG_8(res);
8284 FLAG_Z = res;
8285 FLAG_V = VFLAG_CLEAR;
8286 FLAG_C = CFLAG_CLEAR;
8287 }
8288
8289
m68k_op_tst_8_pd(void)8290 void m68k_op_tst_8_pd(void)
8291 {
8292 uint res = OPER_AY_PD_8();
8293
8294 FLAG_N = NFLAG_8(res);
8295 FLAG_Z = res;
8296 FLAG_V = VFLAG_CLEAR;
8297 FLAG_C = CFLAG_CLEAR;
8298 }
8299
8300
m68k_op_tst_8_pd7(void)8301 void m68k_op_tst_8_pd7(void)
8302 {
8303 uint res = OPER_A7_PD_8();
8304
8305 FLAG_N = NFLAG_8(res);
8306 FLAG_Z = res;
8307 FLAG_V = VFLAG_CLEAR;
8308 FLAG_C = CFLAG_CLEAR;
8309 }
8310
8311
m68k_op_tst_8_di(void)8312 void m68k_op_tst_8_di(void)
8313 {
8314 uint res = OPER_AY_DI_8();
8315
8316 FLAG_N = NFLAG_8(res);
8317 FLAG_Z = res;
8318 FLAG_V = VFLAG_CLEAR;
8319 FLAG_C = CFLAG_CLEAR;
8320 }
8321
8322
m68k_op_tst_8_ix(void)8323 void m68k_op_tst_8_ix(void)
8324 {
8325 uint res = OPER_AY_IX_8();
8326
8327 FLAG_N = NFLAG_8(res);
8328 FLAG_Z = res;
8329 FLAG_V = VFLAG_CLEAR;
8330 FLAG_C = CFLAG_CLEAR;
8331 }
8332
8333
m68k_op_tst_8_aw(void)8334 void m68k_op_tst_8_aw(void)
8335 {
8336 uint res = OPER_AW_8();
8337
8338 FLAG_N = NFLAG_8(res);
8339 FLAG_Z = res;
8340 FLAG_V = VFLAG_CLEAR;
8341 FLAG_C = CFLAG_CLEAR;
8342 }
8343
8344
m68k_op_tst_8_al(void)8345 void m68k_op_tst_8_al(void)
8346 {
8347 uint res = OPER_AL_8();
8348
8349 FLAG_N = NFLAG_8(res);
8350 FLAG_Z = res;
8351 FLAG_V = VFLAG_CLEAR;
8352 FLAG_C = CFLAG_CLEAR;
8353 }
8354
8355
m68k_op_tst_8_pcdi(void)8356 void m68k_op_tst_8_pcdi(void)
8357 {
8358 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8359 {
8360 uint res = OPER_PCDI_8();
8361
8362 FLAG_N = NFLAG_8(res);
8363 FLAG_Z = res;
8364 FLAG_V = VFLAG_CLEAR;
8365 FLAG_C = CFLAG_CLEAR;
8366 return;
8367 }
8368 m68ki_exception_illegal();
8369 }
8370
8371
m68k_op_tst_8_pcix(void)8372 void m68k_op_tst_8_pcix(void)
8373 {
8374 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8375 {
8376 uint res = OPER_PCIX_8();
8377
8378 FLAG_N = NFLAG_8(res);
8379 FLAG_Z = res;
8380 FLAG_V = VFLAG_CLEAR;
8381 FLAG_C = CFLAG_CLEAR;
8382 return;
8383 }
8384 m68ki_exception_illegal();
8385 }
8386
8387
m68k_op_tst_8_i(void)8388 void m68k_op_tst_8_i(void)
8389 {
8390 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8391 {
8392 uint res = OPER_I_8();
8393
8394 FLAG_N = NFLAG_8(res);
8395 FLAG_Z = res;
8396 FLAG_V = VFLAG_CLEAR;
8397 FLAG_C = CFLAG_CLEAR;
8398 return;
8399 }
8400 m68ki_exception_illegal();
8401 }
8402
8403
m68k_op_tst_16_d(void)8404 void m68k_op_tst_16_d(void)
8405 {
8406 uint res = MASK_OUT_ABOVE_16(DY);
8407
8408 FLAG_N = NFLAG_16(res);
8409 FLAG_Z = res;
8410 FLAG_V = VFLAG_CLEAR;
8411 FLAG_C = CFLAG_CLEAR;
8412 }
8413
8414
m68k_op_tst_16_a(void)8415 void m68k_op_tst_16_a(void)
8416 {
8417 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8418 {
8419 uint res = MAKE_INT_16(AY);
8420
8421 FLAG_N = NFLAG_16(res);
8422 FLAG_Z = res;
8423 FLAG_V = VFLAG_CLEAR;
8424 FLAG_C = CFLAG_CLEAR;
8425 return;
8426 }
8427 m68ki_exception_illegal();
8428 }
8429
8430
m68k_op_tst_16_ai(void)8431 void m68k_op_tst_16_ai(void)
8432 {
8433 uint res = OPER_AY_AI_16();
8434
8435 FLAG_N = NFLAG_16(res);
8436 FLAG_Z = res;
8437 FLAG_V = VFLAG_CLEAR;
8438 FLAG_C = CFLAG_CLEAR;
8439 }
8440
8441
m68k_op_tst_16_pi(void)8442 void m68k_op_tst_16_pi(void)
8443 {
8444 uint res = OPER_AY_PI_16();
8445
8446 FLAG_N = NFLAG_16(res);
8447 FLAG_Z = res;
8448 FLAG_V = VFLAG_CLEAR;
8449 FLAG_C = CFLAG_CLEAR;
8450 }
8451
8452
m68k_op_tst_16_pd(void)8453 void m68k_op_tst_16_pd(void)
8454 {
8455 uint res = OPER_AY_PD_16();
8456
8457 FLAG_N = NFLAG_16(res);
8458 FLAG_Z = res;
8459 FLAG_V = VFLAG_CLEAR;
8460 FLAG_C = CFLAG_CLEAR;
8461 }
8462
8463
m68k_op_tst_16_di(void)8464 void m68k_op_tst_16_di(void)
8465 {
8466 uint res = OPER_AY_DI_16();
8467
8468 FLAG_N = NFLAG_16(res);
8469 FLAG_Z = res;
8470 FLAG_V = VFLAG_CLEAR;
8471 FLAG_C = CFLAG_CLEAR;
8472 }
8473
8474
m68k_op_tst_16_ix(void)8475 void m68k_op_tst_16_ix(void)
8476 {
8477 uint res = OPER_AY_IX_16();
8478
8479 FLAG_N = NFLAG_16(res);
8480 FLAG_Z = res;
8481 FLAG_V = VFLAG_CLEAR;
8482 FLAG_C = CFLAG_CLEAR;
8483 }
8484
8485
m68k_op_tst_16_aw(void)8486 void m68k_op_tst_16_aw(void)
8487 {
8488 uint res = OPER_AW_16();
8489
8490 FLAG_N = NFLAG_16(res);
8491 FLAG_Z = res;
8492 FLAG_V = VFLAG_CLEAR;
8493 FLAG_C = CFLAG_CLEAR;
8494 }
8495
8496
m68k_op_tst_16_al(void)8497 void m68k_op_tst_16_al(void)
8498 {
8499 uint res = OPER_AL_16();
8500
8501 FLAG_N = NFLAG_16(res);
8502 FLAG_Z = res;
8503 FLAG_V = VFLAG_CLEAR;
8504 FLAG_C = CFLAG_CLEAR;
8505 }
8506
8507
m68k_op_tst_16_pcdi(void)8508 void m68k_op_tst_16_pcdi(void)
8509 {
8510 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8511 {
8512 uint res = OPER_PCDI_16();
8513
8514 FLAG_N = NFLAG_16(res);
8515 FLAG_Z = res;
8516 FLAG_V = VFLAG_CLEAR;
8517 FLAG_C = CFLAG_CLEAR;
8518 return;
8519 }
8520 m68ki_exception_illegal();
8521 }
8522
8523
m68k_op_tst_16_pcix(void)8524 void m68k_op_tst_16_pcix(void)
8525 {
8526 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8527 {
8528 uint res = OPER_PCIX_16();
8529
8530 FLAG_N = NFLAG_16(res);
8531 FLAG_Z = res;
8532 FLAG_V = VFLAG_CLEAR;
8533 FLAG_C = CFLAG_CLEAR;
8534 return;
8535 }
8536 m68ki_exception_illegal();
8537 }
8538
8539
m68k_op_tst_16_i(void)8540 void m68k_op_tst_16_i(void)
8541 {
8542 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8543 {
8544 uint res = OPER_I_16();
8545
8546 FLAG_N = NFLAG_16(res);
8547 FLAG_Z = res;
8548 FLAG_V = VFLAG_CLEAR;
8549 FLAG_C = CFLAG_CLEAR;
8550 return;
8551 }
8552 m68ki_exception_illegal();
8553 }
8554
8555
m68k_op_tst_32_d(void)8556 void m68k_op_tst_32_d(void)
8557 {
8558 uint res = DY;
8559
8560 FLAG_N = NFLAG_32(res);
8561 FLAG_Z = res;
8562 FLAG_V = VFLAG_CLEAR;
8563 FLAG_C = CFLAG_CLEAR;
8564 }
8565
8566
m68k_op_tst_32_a(void)8567 void m68k_op_tst_32_a(void)
8568 {
8569 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8570 {
8571 uint res = AY;
8572
8573 FLAG_N = NFLAG_32(res);
8574 FLAG_Z = res;
8575 FLAG_V = VFLAG_CLEAR;
8576 FLAG_C = CFLAG_CLEAR;
8577 return;
8578 }
8579 m68ki_exception_illegal();
8580 }
8581
8582
m68k_op_tst_32_ai(void)8583 void m68k_op_tst_32_ai(void)
8584 {
8585 uint res = OPER_AY_AI_32();
8586
8587 FLAG_N = NFLAG_32(res);
8588 FLAG_Z = res;
8589 FLAG_V = VFLAG_CLEAR;
8590 FLAG_C = CFLAG_CLEAR;
8591 }
8592
8593
m68k_op_tst_32_pi(void)8594 void m68k_op_tst_32_pi(void)
8595 {
8596 uint res = OPER_AY_PI_32();
8597
8598 FLAG_N = NFLAG_32(res);
8599 FLAG_Z = res;
8600 FLAG_V = VFLAG_CLEAR;
8601 FLAG_C = CFLAG_CLEAR;
8602 }
8603
8604
m68k_op_tst_32_pd(void)8605 void m68k_op_tst_32_pd(void)
8606 {
8607 uint res = OPER_AY_PD_32();
8608
8609 FLAG_N = NFLAG_32(res);
8610 FLAG_Z = res;
8611 FLAG_V = VFLAG_CLEAR;
8612 FLAG_C = CFLAG_CLEAR;
8613 }
8614
8615
m68k_op_tst_32_di(void)8616 void m68k_op_tst_32_di(void)
8617 {
8618 uint res = OPER_AY_DI_32();
8619
8620 FLAG_N = NFLAG_32(res);
8621 FLAG_Z = res;
8622 FLAG_V = VFLAG_CLEAR;
8623 FLAG_C = CFLAG_CLEAR;
8624 }
8625
8626
m68k_op_tst_32_ix(void)8627 void m68k_op_tst_32_ix(void)
8628 {
8629 uint res = OPER_AY_IX_32();
8630
8631 FLAG_N = NFLAG_32(res);
8632 FLAG_Z = res;
8633 FLAG_V = VFLAG_CLEAR;
8634 FLAG_C = CFLAG_CLEAR;
8635 }
8636
8637
m68k_op_tst_32_aw(void)8638 void m68k_op_tst_32_aw(void)
8639 {
8640 uint res = OPER_AW_32();
8641
8642 FLAG_N = NFLAG_32(res);
8643 FLAG_Z = res;
8644 FLAG_V = VFLAG_CLEAR;
8645 FLAG_C = CFLAG_CLEAR;
8646 }
8647
8648
m68k_op_tst_32_al(void)8649 void m68k_op_tst_32_al(void)
8650 {
8651 uint res = OPER_AL_32();
8652
8653 FLAG_N = NFLAG_32(res);
8654 FLAG_Z = res;
8655 FLAG_V = VFLAG_CLEAR;
8656 FLAG_C = CFLAG_CLEAR;
8657 }
8658
8659
m68k_op_tst_32_pcdi(void)8660 void m68k_op_tst_32_pcdi(void)
8661 {
8662 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8663 {
8664 uint res = OPER_PCDI_32();
8665
8666 FLAG_N = NFLAG_32(res);
8667 FLAG_Z = res;
8668 FLAG_V = VFLAG_CLEAR;
8669 FLAG_C = CFLAG_CLEAR;
8670 return;
8671 }
8672 m68ki_exception_illegal();
8673 }
8674
8675
m68k_op_tst_32_pcix(void)8676 void m68k_op_tst_32_pcix(void)
8677 {
8678 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8679 {
8680 uint res = OPER_PCIX_32();
8681
8682 FLAG_N = NFLAG_32(res);
8683 FLAG_Z = res;
8684 FLAG_V = VFLAG_CLEAR;
8685 FLAG_C = CFLAG_CLEAR;
8686 return;
8687 }
8688 m68ki_exception_illegal();
8689 }
8690
8691
m68k_op_tst_32_i(void)8692 void m68k_op_tst_32_i(void)
8693 {
8694 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8695 {
8696 uint res = OPER_I_32();
8697
8698 FLAG_N = NFLAG_32(res);
8699 FLAG_Z = res;
8700 FLAG_V = VFLAG_CLEAR;
8701 FLAG_C = CFLAG_CLEAR;
8702 return;
8703 }
8704 m68ki_exception_illegal();
8705 }
8706
8707
m68k_op_unlk_32_a7(void)8708 void m68k_op_unlk_32_a7(void)
8709 {
8710 REG_A[7] = m68ki_read_32(REG_A[7]);
8711 }
8712
8713
m68k_op_unlk_32(void)8714 void m68k_op_unlk_32(void)
8715 {
8716 uint* r_dst = &AY;
8717
8718 REG_A[7] = *r_dst;
8719 *r_dst = m68ki_pull_32();
8720 }
8721
8722
m68k_op_unpk_16_rr(void)8723 void m68k_op_unpk_16_rr(void)
8724 {
8725 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8726 {
8727 /* Note: DX and DY are reversed in Motorola's docs */
8728 uint src = DY;
8729 uint* r_dst = &DX;
8730
8731 *r_dst = MASK_OUT_BELOW_16(*r_dst) | (((((src << 4) & 0x0f00) | (src & 0x000f)) + OPER_I_16()) & 0xffff);
8732 return;
8733 }
8734 m68ki_exception_illegal();
8735 }
8736
8737
m68k_op_unpk_16_mm_ax7(void)8738 void m68k_op_unpk_16_mm_ax7(void)
8739 {
8740 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8741 {
8742 /* Note: AX and AY are reversed in Motorola's docs */
8743 uint src = OPER_AY_PD_8();
8744 uint ea_dst;
8745
8746 src = (((src << 4) & 0x0f00) | (src & 0x000f)) + OPER_I_16();
8747 ea_dst = EA_A7_PD_8();
8748 m68ki_write_8(ea_dst, (src >> 8) & 0xff);
8749 ea_dst = EA_A7_PD_8();
8750 m68ki_write_8(ea_dst, src & 0xff);
8751 return;
8752 }
8753 m68ki_exception_illegal();
8754 }
8755
8756
m68k_op_unpk_16_mm_ay7(void)8757 void m68k_op_unpk_16_mm_ay7(void)
8758 {
8759 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8760 {
8761 /* Note: AX and AY are reversed in Motorola's docs */
8762 uint src = OPER_A7_PD_8();
8763 uint ea_dst;
8764
8765 src = (((src << 4) & 0x0f00) | (src & 0x000f)) + OPER_I_16();
8766 ea_dst = EA_AX_PD_8();
8767 m68ki_write_8(ea_dst, (src >> 8) & 0xff);
8768 ea_dst = EA_AX_PD_8();
8769 m68ki_write_8(ea_dst, src & 0xff);
8770 return;
8771 }
8772 m68ki_exception_illegal();
8773 }
8774
8775
m68k_op_unpk_16_mm_axy7(void)8776 void m68k_op_unpk_16_mm_axy7(void)
8777 {
8778 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8779 {
8780 uint src = OPER_A7_PD_8();
8781 uint ea_dst;
8782
8783 src = (((src << 4) & 0x0f00) | (src & 0x000f)) + OPER_I_16();
8784 ea_dst = EA_A7_PD_8();
8785 m68ki_write_8(ea_dst, (src >> 8) & 0xff);
8786 ea_dst = EA_A7_PD_8();
8787 m68ki_write_8(ea_dst, src & 0xff);
8788 return;
8789 }
8790 m68ki_exception_illegal();
8791 }
8792
8793
m68k_op_unpk_16_mm(void)8794 void m68k_op_unpk_16_mm(void)
8795 {
8796 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8797 {
8798 /* Note: AX and AY are reversed in Motorola's docs */
8799 uint src = OPER_AY_PD_8();
8800 uint ea_dst;
8801
8802 src = (((src << 4) & 0x0f00) | (src & 0x000f)) + OPER_I_16();
8803 ea_dst = EA_AX_PD_8();
8804 m68ki_write_8(ea_dst, (src >> 8) & 0xff);
8805 ea_dst = EA_AX_PD_8();
8806 m68ki_write_8(ea_dst, src & 0xff);
8807 return;
8808 }
8809 m68ki_exception_illegal();
8810 }
8811
8812
8813 /* ======================================================================== */
8814 /* ============================== END OF FILE ============================= */
8815 /* ======================================================================== */
8816
8817
8818