1 #include "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_16_toc(void)2617 void m68k_op_ori_16_toc(void)
2618 {
2619 m68ki_set_ccr(m68ki_get_ccr() | OPER_I_16());
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 m68ki_remaining_cycles = 0;
5214 return;
5215 }
5216 m68ki_exception_privilege_violation();
5217 }
5218
5219
m68k_op_sub_8_er_d(void)5220 void m68k_op_sub_8_er_d(void)
5221 {
5222 uint* r_dst = &DX;
5223 uint src = MASK_OUT_ABOVE_8(DY);
5224 uint dst = MASK_OUT_ABOVE_8(*r_dst);
5225 uint res = dst - src;
5226
5227 FLAG_N = NFLAG_8(res);
5228 FLAG_X = FLAG_C = CFLAG_8(res);
5229 FLAG_V = VFLAG_SUB_8(src, dst, res);
5230 FLAG_Z = MASK_OUT_ABOVE_8(res);
5231
5232 *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
5233 }
5234
5235
m68k_op_sub_8_er_ai(void)5236 void m68k_op_sub_8_er_ai(void)
5237 {
5238 uint* r_dst = &DX;
5239 uint src = OPER_AY_AI_8();
5240 uint dst = MASK_OUT_ABOVE_8(*r_dst);
5241 uint res = dst - src;
5242
5243 FLAG_N = NFLAG_8(res);
5244 FLAG_X = FLAG_C = CFLAG_8(res);
5245 FLAG_V = VFLAG_SUB_8(src, dst, res);
5246 FLAG_Z = MASK_OUT_ABOVE_8(res);
5247
5248 *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
5249 }
5250
5251
m68k_op_sub_8_er_pi(void)5252 void m68k_op_sub_8_er_pi(void)
5253 {
5254 uint* r_dst = &DX;
5255 uint src = OPER_AY_PI_8();
5256 uint dst = MASK_OUT_ABOVE_8(*r_dst);
5257 uint res = dst - src;
5258
5259 FLAG_N = NFLAG_8(res);
5260 FLAG_X = FLAG_C = CFLAG_8(res);
5261 FLAG_V = VFLAG_SUB_8(src, dst, res);
5262 FLAG_Z = MASK_OUT_ABOVE_8(res);
5263
5264 *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
5265 }
5266
5267
m68k_op_sub_8_er_pi7(void)5268 void m68k_op_sub_8_er_pi7(void)
5269 {
5270 uint* r_dst = &DX;
5271 uint src = OPER_A7_PI_8();
5272 uint dst = MASK_OUT_ABOVE_8(*r_dst);
5273 uint res = dst - src;
5274
5275 FLAG_N = NFLAG_8(res);
5276 FLAG_X = FLAG_C = CFLAG_8(res);
5277 FLAG_V = VFLAG_SUB_8(src, dst, res);
5278 FLAG_Z = MASK_OUT_ABOVE_8(res);
5279
5280 *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
5281 }
5282
5283
m68k_op_sub_8_er_pd(void)5284 void m68k_op_sub_8_er_pd(void)
5285 {
5286 uint* r_dst = &DX;
5287 uint src = OPER_AY_PD_8();
5288 uint dst = MASK_OUT_ABOVE_8(*r_dst);
5289 uint res = dst - src;
5290
5291 FLAG_N = NFLAG_8(res);
5292 FLAG_X = FLAG_C = CFLAG_8(res);
5293 FLAG_V = VFLAG_SUB_8(src, dst, res);
5294 FLAG_Z = MASK_OUT_ABOVE_8(res);
5295
5296 *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
5297 }
5298
5299
m68k_op_sub_8_er_pd7(void)5300 void m68k_op_sub_8_er_pd7(void)
5301 {
5302 uint* r_dst = &DX;
5303 uint src = OPER_A7_PD_8();
5304 uint dst = MASK_OUT_ABOVE_8(*r_dst);
5305 uint res = dst - src;
5306
5307 FLAG_N = NFLAG_8(res);
5308 FLAG_X = FLAG_C = CFLAG_8(res);
5309 FLAG_V = VFLAG_SUB_8(src, dst, res);
5310 FLAG_Z = MASK_OUT_ABOVE_8(res);
5311
5312 *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
5313 }
5314
5315
m68k_op_sub_8_er_di(void)5316 void m68k_op_sub_8_er_di(void)
5317 {
5318 uint* r_dst = &DX;
5319 uint src = OPER_AY_DI_8();
5320 uint dst = MASK_OUT_ABOVE_8(*r_dst);
5321 uint res = dst - src;
5322
5323 FLAG_N = NFLAG_8(res);
5324 FLAG_X = FLAG_C = CFLAG_8(res);
5325 FLAG_V = VFLAG_SUB_8(src, dst, res);
5326 FLAG_Z = MASK_OUT_ABOVE_8(res);
5327
5328 *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
5329 }
5330
5331
m68k_op_sub_8_er_ix(void)5332 void m68k_op_sub_8_er_ix(void)
5333 {
5334 uint* r_dst = &DX;
5335 uint src = OPER_AY_IX_8();
5336 uint dst = MASK_OUT_ABOVE_8(*r_dst);
5337 uint res = dst - src;
5338
5339 FLAG_N = NFLAG_8(res);
5340 FLAG_X = FLAG_C = CFLAG_8(res);
5341 FLAG_V = VFLAG_SUB_8(src, dst, res);
5342 FLAG_Z = MASK_OUT_ABOVE_8(res);
5343
5344 *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
5345 }
5346
5347
m68k_op_sub_8_er_aw(void)5348 void m68k_op_sub_8_er_aw(void)
5349 {
5350 uint* r_dst = &DX;
5351 uint src = OPER_AW_8();
5352 uint dst = MASK_OUT_ABOVE_8(*r_dst);
5353 uint res = dst - src;
5354
5355 FLAG_N = NFLAG_8(res);
5356 FLAG_X = FLAG_C = CFLAG_8(res);
5357 FLAG_V = VFLAG_SUB_8(src, dst, res);
5358 FLAG_Z = MASK_OUT_ABOVE_8(res);
5359
5360 *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
5361 }
5362
5363
m68k_op_sub_8_er_al(void)5364 void m68k_op_sub_8_er_al(void)
5365 {
5366 uint* r_dst = &DX;
5367 uint src = OPER_AL_8();
5368 uint dst = MASK_OUT_ABOVE_8(*r_dst);
5369 uint res = dst - src;
5370
5371 FLAG_N = NFLAG_8(res);
5372 FLAG_X = FLAG_C = CFLAG_8(res);
5373 FLAG_V = VFLAG_SUB_8(src, dst, res);
5374 FLAG_Z = MASK_OUT_ABOVE_8(res);
5375
5376 *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
5377 }
5378
5379
m68k_op_sub_8_er_pcdi(void)5380 void m68k_op_sub_8_er_pcdi(void)
5381 {
5382 uint* r_dst = &DX;
5383 uint src = OPER_PCDI_8();
5384 uint dst = MASK_OUT_ABOVE_8(*r_dst);
5385 uint res = dst - src;
5386
5387 FLAG_N = NFLAG_8(res);
5388 FLAG_X = FLAG_C = CFLAG_8(res);
5389 FLAG_V = VFLAG_SUB_8(src, dst, res);
5390 FLAG_Z = MASK_OUT_ABOVE_8(res);
5391
5392 *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
5393 }
5394
5395
m68k_op_sub_8_er_pcix(void)5396 void m68k_op_sub_8_er_pcix(void)
5397 {
5398 uint* r_dst = &DX;
5399 uint src = OPER_PCIX_8();
5400 uint dst = MASK_OUT_ABOVE_8(*r_dst);
5401 uint res = dst - src;
5402
5403 FLAG_N = NFLAG_8(res);
5404 FLAG_X = FLAG_C = CFLAG_8(res);
5405 FLAG_V = VFLAG_SUB_8(src, dst, res);
5406 FLAG_Z = MASK_OUT_ABOVE_8(res);
5407
5408 *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
5409 }
5410
5411
m68k_op_sub_8_er_i(void)5412 void m68k_op_sub_8_er_i(void)
5413 {
5414 uint* r_dst = &DX;
5415 uint src = OPER_I_8();
5416 uint dst = MASK_OUT_ABOVE_8(*r_dst);
5417 uint res = dst - src;
5418
5419 FLAG_N = NFLAG_8(res);
5420 FLAG_X = FLAG_C = CFLAG_8(res);
5421 FLAG_V = VFLAG_SUB_8(src, dst, res);
5422 FLAG_Z = MASK_OUT_ABOVE_8(res);
5423
5424 *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
5425 }
5426
5427
m68k_op_sub_16_er_d(void)5428 void m68k_op_sub_16_er_d(void)
5429 {
5430 uint* r_dst = &DX;
5431 uint src = MASK_OUT_ABOVE_16(DY);
5432 uint dst = MASK_OUT_ABOVE_16(*r_dst);
5433 uint res = dst - src;
5434
5435 FLAG_N = NFLAG_16(res);
5436 FLAG_X = FLAG_C = CFLAG_16(res);
5437 FLAG_V = VFLAG_SUB_16(src, dst, res);
5438 FLAG_Z = MASK_OUT_ABOVE_16(res);
5439
5440 *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
5441 }
5442
5443
m68k_op_sub_16_er_a(void)5444 void m68k_op_sub_16_er_a(void)
5445 {
5446 uint* r_dst = &DX;
5447 uint src = MASK_OUT_ABOVE_16(AY);
5448 uint dst = MASK_OUT_ABOVE_16(*r_dst);
5449 uint res = dst - src;
5450
5451 FLAG_N = NFLAG_16(res);
5452 FLAG_X = FLAG_C = CFLAG_16(res);
5453 FLAG_V = VFLAG_SUB_16(src, dst, res);
5454 FLAG_Z = MASK_OUT_ABOVE_16(res);
5455
5456 *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
5457 }
5458
5459
m68k_op_sub_16_er_ai(void)5460 void m68k_op_sub_16_er_ai(void)
5461 {
5462 uint* r_dst = &DX;
5463 uint src = OPER_AY_AI_16();
5464 uint dst = MASK_OUT_ABOVE_16(*r_dst);
5465 uint res = dst - src;
5466
5467 FLAG_N = NFLAG_16(res);
5468 FLAG_X = FLAG_C = CFLAG_16(res);
5469 FLAG_V = VFLAG_SUB_16(src, dst, res);
5470 FLAG_Z = MASK_OUT_ABOVE_16(res);
5471
5472 *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
5473 }
5474
5475
m68k_op_sub_16_er_pi(void)5476 void m68k_op_sub_16_er_pi(void)
5477 {
5478 uint* r_dst = &DX;
5479 uint src = OPER_AY_PI_16();
5480 uint dst = MASK_OUT_ABOVE_16(*r_dst);
5481 uint res = dst - src;
5482
5483 FLAG_N = NFLAG_16(res);
5484 FLAG_X = FLAG_C = CFLAG_16(res);
5485 FLAG_V = VFLAG_SUB_16(src, dst, res);
5486 FLAG_Z = MASK_OUT_ABOVE_16(res);
5487
5488 *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
5489 }
5490
5491
m68k_op_sub_16_er_pd(void)5492 void m68k_op_sub_16_er_pd(void)
5493 {
5494 uint* r_dst = &DX;
5495 uint src = OPER_AY_PD_16();
5496 uint dst = MASK_OUT_ABOVE_16(*r_dst);
5497 uint res = dst - src;
5498
5499 FLAG_N = NFLAG_16(res);
5500 FLAG_X = FLAG_C = CFLAG_16(res);
5501 FLAG_V = VFLAG_SUB_16(src, dst, res);
5502 FLAG_Z = MASK_OUT_ABOVE_16(res);
5503
5504 *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
5505 }
5506
5507
m68k_op_sub_16_er_di(void)5508 void m68k_op_sub_16_er_di(void)
5509 {
5510 uint* r_dst = &DX;
5511 uint src = OPER_AY_DI_16();
5512 uint dst = MASK_OUT_ABOVE_16(*r_dst);
5513 uint res = dst - src;
5514
5515 FLAG_N = NFLAG_16(res);
5516 FLAG_X = FLAG_C = CFLAG_16(res);
5517 FLAG_V = VFLAG_SUB_16(src, dst, res);
5518 FLAG_Z = MASK_OUT_ABOVE_16(res);
5519
5520 *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
5521 }
5522
5523
m68k_op_sub_16_er_ix(void)5524 void m68k_op_sub_16_er_ix(void)
5525 {
5526 uint* r_dst = &DX;
5527 uint src = OPER_AY_IX_16();
5528 uint dst = MASK_OUT_ABOVE_16(*r_dst);
5529 uint res = dst - src;
5530
5531 FLAG_N = NFLAG_16(res);
5532 FLAG_X = FLAG_C = CFLAG_16(res);
5533 FLAG_V = VFLAG_SUB_16(src, dst, res);
5534 FLAG_Z = MASK_OUT_ABOVE_16(res);
5535
5536 *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
5537 }
5538
5539
m68k_op_sub_16_er_aw(void)5540 void m68k_op_sub_16_er_aw(void)
5541 {
5542 uint* r_dst = &DX;
5543 uint src = OPER_AW_16();
5544 uint dst = MASK_OUT_ABOVE_16(*r_dst);
5545 uint res = dst - src;
5546
5547 FLAG_N = NFLAG_16(res);
5548 FLAG_X = FLAG_C = CFLAG_16(res);
5549 FLAG_V = VFLAG_SUB_16(src, dst, res);
5550 FLAG_Z = MASK_OUT_ABOVE_16(res);
5551
5552 *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
5553 }
5554
5555
m68k_op_sub_16_er_al(void)5556 void m68k_op_sub_16_er_al(void)
5557 {
5558 uint* r_dst = &DX;
5559 uint src = OPER_AL_16();
5560 uint dst = MASK_OUT_ABOVE_16(*r_dst);
5561 uint res = dst - src;
5562
5563 FLAG_N = NFLAG_16(res);
5564 FLAG_X = FLAG_C = CFLAG_16(res);
5565 FLAG_V = VFLAG_SUB_16(src, dst, res);
5566 FLAG_Z = MASK_OUT_ABOVE_16(res);
5567
5568 *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
5569 }
5570
5571
m68k_op_sub_16_er_pcdi(void)5572 void m68k_op_sub_16_er_pcdi(void)
5573 {
5574 uint* r_dst = &DX;
5575 uint src = OPER_PCDI_16();
5576 uint dst = MASK_OUT_ABOVE_16(*r_dst);
5577 uint res = dst - src;
5578
5579 FLAG_N = NFLAG_16(res);
5580 FLAG_X = FLAG_C = CFLAG_16(res);
5581 FLAG_V = VFLAG_SUB_16(src, dst, res);
5582 FLAG_Z = MASK_OUT_ABOVE_16(res);
5583
5584 *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
5585 }
5586
5587
m68k_op_sub_16_er_pcix(void)5588 void m68k_op_sub_16_er_pcix(void)
5589 {
5590 uint* r_dst = &DX;
5591 uint src = OPER_PCIX_16();
5592 uint dst = MASK_OUT_ABOVE_16(*r_dst);
5593 uint res = dst - src;
5594
5595 FLAG_N = NFLAG_16(res);
5596 FLAG_X = FLAG_C = CFLAG_16(res);
5597 FLAG_V = VFLAG_SUB_16(src, dst, res);
5598 FLAG_Z = MASK_OUT_ABOVE_16(res);
5599
5600 *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
5601 }
5602
5603
m68k_op_sub_16_er_i(void)5604 void m68k_op_sub_16_er_i(void)
5605 {
5606 uint* r_dst = &DX;
5607 uint src = OPER_I_16();
5608 uint dst = MASK_OUT_ABOVE_16(*r_dst);
5609 uint res = dst - src;
5610
5611 FLAG_N = NFLAG_16(res);
5612 FLAG_X = FLAG_C = CFLAG_16(res);
5613 FLAG_V = VFLAG_SUB_16(src, dst, res);
5614 FLAG_Z = MASK_OUT_ABOVE_16(res);
5615
5616 *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
5617 }
5618
5619
m68k_op_sub_32_er_d(void)5620 void m68k_op_sub_32_er_d(void)
5621 {
5622 uint* r_dst = &DX;
5623 uint src = DY;
5624 uint dst = *r_dst;
5625 uint res = dst - src;
5626
5627 FLAG_N = NFLAG_32(res);
5628 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
5629 FLAG_V = VFLAG_SUB_32(src, dst, res);
5630 FLAG_Z = MASK_OUT_ABOVE_32(res);
5631
5632 *r_dst = FLAG_Z;
5633 }
5634
5635
m68k_op_sub_32_er_a(void)5636 void m68k_op_sub_32_er_a(void)
5637 {
5638 uint* r_dst = &DX;
5639 uint src = AY;
5640 uint dst = *r_dst;
5641 uint res = dst - src;
5642
5643 FLAG_N = NFLAG_32(res);
5644 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
5645 FLAG_V = VFLAG_SUB_32(src, dst, res);
5646 FLAG_Z = MASK_OUT_ABOVE_32(res);
5647
5648 *r_dst = FLAG_Z;
5649 }
5650
5651
m68k_op_sub_32_er_ai(void)5652 void m68k_op_sub_32_er_ai(void)
5653 {
5654 uint* r_dst = &DX;
5655 uint src = OPER_AY_AI_32();
5656 uint dst = *r_dst;
5657 uint res = dst - src;
5658
5659 FLAG_N = NFLAG_32(res);
5660 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
5661 FLAG_V = VFLAG_SUB_32(src, dst, res);
5662 FLAG_Z = MASK_OUT_ABOVE_32(res);
5663
5664 *r_dst = FLAG_Z;
5665 }
5666
5667
m68k_op_sub_32_er_pi(void)5668 void m68k_op_sub_32_er_pi(void)
5669 {
5670 uint* r_dst = &DX;
5671 uint src = OPER_AY_PI_32();
5672 uint dst = *r_dst;
5673 uint res = dst - src;
5674
5675 FLAG_N = NFLAG_32(res);
5676 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
5677 FLAG_V = VFLAG_SUB_32(src, dst, res);
5678 FLAG_Z = MASK_OUT_ABOVE_32(res);
5679
5680 *r_dst = FLAG_Z;
5681 }
5682
5683
m68k_op_sub_32_er_pd(void)5684 void m68k_op_sub_32_er_pd(void)
5685 {
5686 uint* r_dst = &DX;
5687 uint src = OPER_AY_PD_32();
5688 uint dst = *r_dst;
5689 uint res = dst - src;
5690
5691 FLAG_N = NFLAG_32(res);
5692 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
5693 FLAG_V = VFLAG_SUB_32(src, dst, res);
5694 FLAG_Z = MASK_OUT_ABOVE_32(res);
5695
5696 *r_dst = FLAG_Z;
5697 }
5698
5699
m68k_op_sub_32_er_di(void)5700 void m68k_op_sub_32_er_di(void)
5701 {
5702 uint* r_dst = &DX;
5703 uint src = OPER_AY_DI_32();
5704 uint dst = *r_dst;
5705 uint res = dst - src;
5706
5707 FLAG_N = NFLAG_32(res);
5708 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
5709 FLAG_V = VFLAG_SUB_32(src, dst, res);
5710 FLAG_Z = MASK_OUT_ABOVE_32(res);
5711
5712 *r_dst = FLAG_Z;
5713 }
5714
5715
m68k_op_sub_32_er_ix(void)5716 void m68k_op_sub_32_er_ix(void)
5717 {
5718 uint* r_dst = &DX;
5719 uint src = OPER_AY_IX_32();
5720 uint dst = *r_dst;
5721 uint res = dst - src;
5722
5723 FLAG_N = NFLAG_32(res);
5724 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
5725 FLAG_V = VFLAG_SUB_32(src, dst, res);
5726 FLAG_Z = MASK_OUT_ABOVE_32(res);
5727
5728 *r_dst = FLAG_Z;
5729 }
5730
5731
m68k_op_sub_32_er_aw(void)5732 void m68k_op_sub_32_er_aw(void)
5733 {
5734 uint* r_dst = &DX;
5735 uint src = OPER_AW_32();
5736 uint dst = *r_dst;
5737 uint res = dst - src;
5738
5739 FLAG_N = NFLAG_32(res);
5740 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
5741 FLAG_V = VFLAG_SUB_32(src, dst, res);
5742 FLAG_Z = MASK_OUT_ABOVE_32(res);
5743
5744 *r_dst = FLAG_Z;
5745 }
5746
5747
m68k_op_sub_32_er_al(void)5748 void m68k_op_sub_32_er_al(void)
5749 {
5750 uint* r_dst = &DX;
5751 uint src = OPER_AL_32();
5752 uint dst = *r_dst;
5753 uint res = dst - src;
5754
5755 FLAG_N = NFLAG_32(res);
5756 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
5757 FLAG_V = VFLAG_SUB_32(src, dst, res);
5758 FLAG_Z = MASK_OUT_ABOVE_32(res);
5759
5760 *r_dst = FLAG_Z;
5761 }
5762
5763
m68k_op_sub_32_er_pcdi(void)5764 void m68k_op_sub_32_er_pcdi(void)
5765 {
5766 uint* r_dst = &DX;
5767 uint src = OPER_PCDI_32();
5768 uint dst = *r_dst;
5769 uint res = dst - src;
5770
5771 FLAG_N = NFLAG_32(res);
5772 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
5773 FLAG_V = VFLAG_SUB_32(src, dst, res);
5774 FLAG_Z = MASK_OUT_ABOVE_32(res);
5775
5776 *r_dst = FLAG_Z;
5777 }
5778
5779
m68k_op_sub_32_er_pcix(void)5780 void m68k_op_sub_32_er_pcix(void)
5781 {
5782 uint* r_dst = &DX;
5783 uint src = OPER_PCIX_32();
5784 uint dst = *r_dst;
5785 uint res = dst - src;
5786
5787 FLAG_N = NFLAG_32(res);
5788 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
5789 FLAG_V = VFLAG_SUB_32(src, dst, res);
5790 FLAG_Z = MASK_OUT_ABOVE_32(res);
5791
5792 *r_dst = FLAG_Z;
5793 }
5794
5795
m68k_op_sub_32_er_i(void)5796 void m68k_op_sub_32_er_i(void)
5797 {
5798 uint* r_dst = &DX;
5799 uint src = OPER_I_32();
5800 uint dst = *r_dst;
5801 uint res = dst - src;
5802
5803 FLAG_N = NFLAG_32(res);
5804 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
5805 FLAG_V = VFLAG_SUB_32(src, dst, res);
5806 FLAG_Z = MASK_OUT_ABOVE_32(res);
5807
5808 *r_dst = FLAG_Z;
5809 }
5810
5811
m68k_op_sub_8_re_ai(void)5812 void m68k_op_sub_8_re_ai(void)
5813 {
5814 uint ea = EA_AY_AI_8();
5815 uint src = MASK_OUT_ABOVE_8(DX);
5816 uint dst = m68ki_read_8(ea);
5817 uint res = dst - src;
5818
5819 FLAG_N = NFLAG_8(res);
5820 FLAG_Z = MASK_OUT_ABOVE_8(res);
5821 FLAG_X = FLAG_C = CFLAG_8(res);
5822 FLAG_V = VFLAG_SUB_8(src, dst, res);
5823
5824 m68ki_write_8(ea, FLAG_Z);
5825 }
5826
5827
m68k_op_sub_8_re_pi(void)5828 void m68k_op_sub_8_re_pi(void)
5829 {
5830 uint ea = EA_AY_PI_8();
5831 uint src = MASK_OUT_ABOVE_8(DX);
5832 uint dst = m68ki_read_8(ea);
5833 uint res = dst - src;
5834
5835 FLAG_N = NFLAG_8(res);
5836 FLAG_Z = MASK_OUT_ABOVE_8(res);
5837 FLAG_X = FLAG_C = CFLAG_8(res);
5838 FLAG_V = VFLAG_SUB_8(src, dst, res);
5839
5840 m68ki_write_8(ea, FLAG_Z);
5841 }
5842
5843
m68k_op_sub_8_re_pi7(void)5844 void m68k_op_sub_8_re_pi7(void)
5845 {
5846 uint ea = EA_A7_PI_8();
5847 uint src = MASK_OUT_ABOVE_8(DX);
5848 uint dst = m68ki_read_8(ea);
5849 uint res = dst - src;
5850
5851 FLAG_N = NFLAG_8(res);
5852 FLAG_Z = MASK_OUT_ABOVE_8(res);
5853 FLAG_X = FLAG_C = CFLAG_8(res);
5854 FLAG_V = VFLAG_SUB_8(src, dst, res);
5855
5856 m68ki_write_8(ea, FLAG_Z);
5857 }
5858
5859
m68k_op_sub_8_re_pd(void)5860 void m68k_op_sub_8_re_pd(void)
5861 {
5862 uint ea = EA_AY_PD_8();
5863 uint src = MASK_OUT_ABOVE_8(DX);
5864 uint dst = m68ki_read_8(ea);
5865 uint res = dst - src;
5866
5867 FLAG_N = NFLAG_8(res);
5868 FLAG_Z = MASK_OUT_ABOVE_8(res);
5869 FLAG_X = FLAG_C = CFLAG_8(res);
5870 FLAG_V = VFLAG_SUB_8(src, dst, res);
5871
5872 m68ki_write_8(ea, FLAG_Z);
5873 }
5874
5875
m68k_op_sub_8_re_pd7(void)5876 void m68k_op_sub_8_re_pd7(void)
5877 {
5878 uint ea = EA_A7_PD_8();
5879 uint src = MASK_OUT_ABOVE_8(DX);
5880 uint dst = m68ki_read_8(ea);
5881 uint res = dst - src;
5882
5883 FLAG_N = NFLAG_8(res);
5884 FLAG_Z = MASK_OUT_ABOVE_8(res);
5885 FLAG_X = FLAG_C = CFLAG_8(res);
5886 FLAG_V = VFLAG_SUB_8(src, dst, res);
5887
5888 m68ki_write_8(ea, FLAG_Z);
5889 }
5890
5891
m68k_op_sub_8_re_di(void)5892 void m68k_op_sub_8_re_di(void)
5893 {
5894 uint ea = EA_AY_DI_8();
5895 uint src = MASK_OUT_ABOVE_8(DX);
5896 uint dst = m68ki_read_8(ea);
5897 uint res = dst - src;
5898
5899 FLAG_N = NFLAG_8(res);
5900 FLAG_Z = MASK_OUT_ABOVE_8(res);
5901 FLAG_X = FLAG_C = CFLAG_8(res);
5902 FLAG_V = VFLAG_SUB_8(src, dst, res);
5903
5904 m68ki_write_8(ea, FLAG_Z);
5905 }
5906
5907
m68k_op_sub_8_re_ix(void)5908 void m68k_op_sub_8_re_ix(void)
5909 {
5910 uint ea = EA_AY_IX_8();
5911 uint src = MASK_OUT_ABOVE_8(DX);
5912 uint dst = m68ki_read_8(ea);
5913 uint res = dst - src;
5914
5915 FLAG_N = NFLAG_8(res);
5916 FLAG_Z = MASK_OUT_ABOVE_8(res);
5917 FLAG_X = FLAG_C = CFLAG_8(res);
5918 FLAG_V = VFLAG_SUB_8(src, dst, res);
5919
5920 m68ki_write_8(ea, FLAG_Z);
5921 }
5922
5923
m68k_op_sub_8_re_aw(void)5924 void m68k_op_sub_8_re_aw(void)
5925 {
5926 uint ea = EA_AW_8();
5927 uint src = MASK_OUT_ABOVE_8(DX);
5928 uint dst = m68ki_read_8(ea);
5929 uint res = dst - src;
5930
5931 FLAG_N = NFLAG_8(res);
5932 FLAG_Z = MASK_OUT_ABOVE_8(res);
5933 FLAG_X = FLAG_C = CFLAG_8(res);
5934 FLAG_V = VFLAG_SUB_8(src, dst, res);
5935
5936 m68ki_write_8(ea, FLAG_Z);
5937 }
5938
5939
m68k_op_sub_8_re_al(void)5940 void m68k_op_sub_8_re_al(void)
5941 {
5942 uint ea = EA_AL_8();
5943 uint src = MASK_OUT_ABOVE_8(DX);
5944 uint dst = m68ki_read_8(ea);
5945 uint res = dst - src;
5946
5947 FLAG_N = NFLAG_8(res);
5948 FLAG_Z = MASK_OUT_ABOVE_8(res);
5949 FLAG_X = FLAG_C = CFLAG_8(res);
5950 FLAG_V = VFLAG_SUB_8(src, dst, res);
5951
5952 m68ki_write_8(ea, FLAG_Z);
5953 }
5954
5955
m68k_op_sub_16_re_ai(void)5956 void m68k_op_sub_16_re_ai(void)
5957 {
5958 uint ea = EA_AY_AI_16();
5959 uint src = MASK_OUT_ABOVE_16(DX);
5960 uint dst = m68ki_read_16(ea);
5961 uint res = dst - src;
5962
5963 FLAG_N = NFLAG_16(res);
5964 FLAG_Z = MASK_OUT_ABOVE_16(res);
5965 FLAG_X = FLAG_C = CFLAG_16(res);
5966 FLAG_V = VFLAG_SUB_16(src, dst, res);
5967
5968 m68ki_write_16(ea, FLAG_Z);
5969 }
5970
5971
m68k_op_sub_16_re_pi(void)5972 void m68k_op_sub_16_re_pi(void)
5973 {
5974 uint ea = EA_AY_PI_16();
5975 uint src = MASK_OUT_ABOVE_16(DX);
5976 uint dst = m68ki_read_16(ea);
5977 uint res = dst - src;
5978
5979 FLAG_N = NFLAG_16(res);
5980 FLAG_Z = MASK_OUT_ABOVE_16(res);
5981 FLAG_X = FLAG_C = CFLAG_16(res);
5982 FLAG_V = VFLAG_SUB_16(src, dst, res);
5983
5984 m68ki_write_16(ea, FLAG_Z);
5985 }
5986
5987
m68k_op_sub_16_re_pd(void)5988 void m68k_op_sub_16_re_pd(void)
5989 {
5990 uint ea = EA_AY_PD_16();
5991 uint src = MASK_OUT_ABOVE_16(DX);
5992 uint dst = m68ki_read_16(ea);
5993 uint res = dst - src;
5994
5995 FLAG_N = NFLAG_16(res);
5996 FLAG_Z = MASK_OUT_ABOVE_16(res);
5997 FLAG_X = FLAG_C = CFLAG_16(res);
5998 FLAG_V = VFLAG_SUB_16(src, dst, res);
5999
6000 m68ki_write_16(ea, FLAG_Z);
6001 }
6002
6003
m68k_op_sub_16_re_di(void)6004 void m68k_op_sub_16_re_di(void)
6005 {
6006 uint ea = EA_AY_DI_16();
6007 uint src = MASK_OUT_ABOVE_16(DX);
6008 uint dst = m68ki_read_16(ea);
6009 uint res = dst - src;
6010
6011 FLAG_N = NFLAG_16(res);
6012 FLAG_Z = MASK_OUT_ABOVE_16(res);
6013 FLAG_X = FLAG_C = CFLAG_16(res);
6014 FLAG_V = VFLAG_SUB_16(src, dst, res);
6015
6016 m68ki_write_16(ea, FLAG_Z);
6017 }
6018
6019
m68k_op_sub_16_re_ix(void)6020 void m68k_op_sub_16_re_ix(void)
6021 {
6022 uint ea = EA_AY_IX_16();
6023 uint src = MASK_OUT_ABOVE_16(DX);
6024 uint dst = m68ki_read_16(ea);
6025 uint res = dst - src;
6026
6027 FLAG_N = NFLAG_16(res);
6028 FLAG_Z = MASK_OUT_ABOVE_16(res);
6029 FLAG_X = FLAG_C = CFLAG_16(res);
6030 FLAG_V = VFLAG_SUB_16(src, dst, res);
6031
6032 m68ki_write_16(ea, FLAG_Z);
6033 }
6034
6035
m68k_op_sub_16_re_aw(void)6036 void m68k_op_sub_16_re_aw(void)
6037 {
6038 uint ea = EA_AW_16();
6039 uint src = MASK_OUT_ABOVE_16(DX);
6040 uint dst = m68ki_read_16(ea);
6041 uint res = dst - src;
6042
6043 FLAG_N = NFLAG_16(res);
6044 FLAG_Z = MASK_OUT_ABOVE_16(res);
6045 FLAG_X = FLAG_C = CFLAG_16(res);
6046 FLAG_V = VFLAG_SUB_16(src, dst, res);
6047
6048 m68ki_write_16(ea, FLAG_Z);
6049 }
6050
6051
m68k_op_sub_16_re_al(void)6052 void m68k_op_sub_16_re_al(void)
6053 {
6054 uint ea = EA_AL_16();
6055 uint src = MASK_OUT_ABOVE_16(DX);
6056 uint dst = m68ki_read_16(ea);
6057 uint res = dst - src;
6058
6059 FLAG_N = NFLAG_16(res);
6060 FLAG_Z = MASK_OUT_ABOVE_16(res);
6061 FLAG_X = FLAG_C = CFLAG_16(res);
6062 FLAG_V = VFLAG_SUB_16(src, dst, res);
6063
6064 m68ki_write_16(ea, FLAG_Z);
6065 }
6066
6067
m68k_op_sub_32_re_ai(void)6068 void m68k_op_sub_32_re_ai(void)
6069 {
6070 uint ea = EA_AY_AI_32();
6071 uint src = DX;
6072 uint dst = m68ki_read_32(ea);
6073 uint res = dst - src;
6074
6075 FLAG_N = NFLAG_32(res);
6076 FLAG_Z = MASK_OUT_ABOVE_32(res);
6077 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
6078 FLAG_V = VFLAG_SUB_32(src, dst, res);
6079
6080 m68ki_write_32(ea, FLAG_Z);
6081 }
6082
6083
m68k_op_sub_32_re_pi(void)6084 void m68k_op_sub_32_re_pi(void)
6085 {
6086 uint ea = EA_AY_PI_32();
6087 uint src = DX;
6088 uint dst = m68ki_read_32(ea);
6089 uint res = dst - src;
6090
6091 FLAG_N = NFLAG_32(res);
6092 FLAG_Z = MASK_OUT_ABOVE_32(res);
6093 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
6094 FLAG_V = VFLAG_SUB_32(src, dst, res);
6095
6096 m68ki_write_32(ea, FLAG_Z);
6097 }
6098
6099
m68k_op_sub_32_re_pd(void)6100 void m68k_op_sub_32_re_pd(void)
6101 {
6102 uint ea = EA_AY_PD_32();
6103 uint src = DX;
6104 uint dst = m68ki_read_32(ea);
6105 uint res = dst - src;
6106
6107 FLAG_N = NFLAG_32(res);
6108 FLAG_Z = MASK_OUT_ABOVE_32(res);
6109 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
6110 FLAG_V = VFLAG_SUB_32(src, dst, res);
6111
6112 m68ki_write_32(ea, FLAG_Z);
6113 }
6114
6115
m68k_op_sub_32_re_di(void)6116 void m68k_op_sub_32_re_di(void)
6117 {
6118 uint ea = EA_AY_DI_32();
6119 uint src = DX;
6120 uint dst = m68ki_read_32(ea);
6121 uint res = dst - src;
6122
6123 FLAG_N = NFLAG_32(res);
6124 FLAG_Z = MASK_OUT_ABOVE_32(res);
6125 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
6126 FLAG_V = VFLAG_SUB_32(src, dst, res);
6127
6128 m68ki_write_32(ea, FLAG_Z);
6129 }
6130
6131
m68k_op_sub_32_re_ix(void)6132 void m68k_op_sub_32_re_ix(void)
6133 {
6134 uint ea = EA_AY_IX_32();
6135 uint src = DX;
6136 uint dst = m68ki_read_32(ea);
6137 uint res = dst - src;
6138
6139 FLAG_N = NFLAG_32(res);
6140 FLAG_Z = MASK_OUT_ABOVE_32(res);
6141 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
6142 FLAG_V = VFLAG_SUB_32(src, dst, res);
6143
6144 m68ki_write_32(ea, FLAG_Z);
6145 }
6146
6147
m68k_op_sub_32_re_aw(void)6148 void m68k_op_sub_32_re_aw(void)
6149 {
6150 uint ea = EA_AW_32();
6151 uint src = DX;
6152 uint dst = m68ki_read_32(ea);
6153 uint res = dst - src;
6154
6155 FLAG_N = NFLAG_32(res);
6156 FLAG_Z = MASK_OUT_ABOVE_32(res);
6157 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
6158 FLAG_V = VFLAG_SUB_32(src, dst, res);
6159
6160 m68ki_write_32(ea, FLAG_Z);
6161 }
6162
6163
m68k_op_sub_32_re_al(void)6164 void m68k_op_sub_32_re_al(void)
6165 {
6166 uint ea = EA_AL_32();
6167 uint src = DX;
6168 uint dst = m68ki_read_32(ea);
6169 uint res = dst - src;
6170
6171 FLAG_N = NFLAG_32(res);
6172 FLAG_Z = MASK_OUT_ABOVE_32(res);
6173 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
6174 FLAG_V = VFLAG_SUB_32(src, dst, res);
6175
6176 m68ki_write_32(ea, FLAG_Z);
6177 }
6178
6179
m68k_op_suba_16_d(void)6180 void m68k_op_suba_16_d(void)
6181 {
6182 uint* r_dst = &AX;
6183
6184 *r_dst = MASK_OUT_ABOVE_32(*r_dst - MAKE_INT_16(DY));
6185 }
6186
6187
m68k_op_suba_16_a(void)6188 void m68k_op_suba_16_a(void)
6189 {
6190 uint* r_dst = &AX;
6191
6192 *r_dst = MASK_OUT_ABOVE_32(*r_dst - MAKE_INT_16(AY));
6193 }
6194
6195
m68k_op_suba_16_ai(void)6196 void m68k_op_suba_16_ai(void)
6197 {
6198 signed short src = MAKE_INT_16(OPER_AY_AI_16());
6199 uint* r_dst = &AX;
6200
6201 *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
6202 }
6203
6204
m68k_op_suba_16_pi(void)6205 void m68k_op_suba_16_pi(void)
6206 {
6207 signed short src = MAKE_INT_16(OPER_AY_PI_16());
6208 uint* r_dst = &AX;
6209
6210 *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
6211 }
6212
6213
m68k_op_suba_16_pd(void)6214 void m68k_op_suba_16_pd(void)
6215 {
6216 signed short src = MAKE_INT_16(OPER_AY_PD_16());
6217 uint* r_dst = &AX;
6218
6219 *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
6220 }
6221
6222
m68k_op_suba_16_di(void)6223 void m68k_op_suba_16_di(void)
6224 {
6225 signed short src = MAKE_INT_16(OPER_AY_DI_16());
6226 uint* r_dst = &AX;
6227
6228 *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
6229 }
6230
6231
m68k_op_suba_16_ix(void)6232 void m68k_op_suba_16_ix(void)
6233 {
6234 signed short src = MAKE_INT_16(OPER_AY_IX_16());
6235 uint* r_dst = &AX;
6236
6237 *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
6238 }
6239
6240
m68k_op_suba_16_aw(void)6241 void m68k_op_suba_16_aw(void)
6242 {
6243 signed short src = MAKE_INT_16(OPER_AW_16());
6244 uint* r_dst = &AX;
6245
6246 *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
6247 }
6248
6249
m68k_op_suba_16_al(void)6250 void m68k_op_suba_16_al(void)
6251 {
6252 signed short src = MAKE_INT_16(OPER_AL_16());
6253 uint* r_dst = &AX;
6254
6255 *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
6256 }
6257
6258
m68k_op_suba_16_pcdi(void)6259 void m68k_op_suba_16_pcdi(void)
6260 {
6261 signed short src = MAKE_INT_16(OPER_PCDI_16());
6262 uint* r_dst = &AX;
6263
6264 *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
6265 }
6266
6267
m68k_op_suba_16_pcix(void)6268 void m68k_op_suba_16_pcix(void)
6269 {
6270 signed short src = MAKE_INT_16(OPER_PCIX_16());
6271 uint* r_dst = &AX;
6272
6273 *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
6274 }
6275
6276
m68k_op_suba_16_i(void)6277 void m68k_op_suba_16_i(void)
6278 {
6279 signed short src = MAKE_INT_16(OPER_I_16());
6280 uint* r_dst = &AX;
6281
6282 *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
6283 }
6284
6285
m68k_op_suba_32_d(void)6286 void m68k_op_suba_32_d(void)
6287 {
6288 uint* r_dst = &AX;
6289
6290 *r_dst = MASK_OUT_ABOVE_32(*r_dst - DY);
6291 }
6292
6293
m68k_op_suba_32_a(void)6294 void m68k_op_suba_32_a(void)
6295 {
6296 uint* r_dst = &AX;
6297
6298 *r_dst = MASK_OUT_ABOVE_32(*r_dst - AY);
6299 }
6300
6301
m68k_op_suba_32_ai(void)6302 void m68k_op_suba_32_ai(void)
6303 {
6304 uint src = OPER_AY_AI_32();
6305 uint* r_dst = &AX;
6306
6307 *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
6308 }
6309
6310
m68k_op_suba_32_pi(void)6311 void m68k_op_suba_32_pi(void)
6312 {
6313 uint src = OPER_AY_PI_32();
6314 uint* r_dst = &AX;
6315
6316 *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
6317 }
6318
6319
m68k_op_suba_32_pd(void)6320 void m68k_op_suba_32_pd(void)
6321 {
6322 uint src = OPER_AY_PD_32();
6323 uint* r_dst = &AX;
6324
6325 *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
6326 }
6327
6328
m68k_op_suba_32_di(void)6329 void m68k_op_suba_32_di(void)
6330 {
6331 uint src = OPER_AY_DI_32();
6332 uint* r_dst = &AX;
6333
6334 *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
6335 }
6336
6337
m68k_op_suba_32_ix(void)6338 void m68k_op_suba_32_ix(void)
6339 {
6340 uint src = OPER_AY_IX_32();
6341 uint* r_dst = &AX;
6342
6343 *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
6344 }
6345
6346
m68k_op_suba_32_aw(void)6347 void m68k_op_suba_32_aw(void)
6348 {
6349 uint src = OPER_AW_32();
6350 uint* r_dst = &AX;
6351
6352 *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
6353 }
6354
6355
m68k_op_suba_32_al(void)6356 void m68k_op_suba_32_al(void)
6357 {
6358 uint src = OPER_AL_32();
6359 uint* r_dst = &AX;
6360
6361 *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
6362 }
6363
6364
m68k_op_suba_32_pcdi(void)6365 void m68k_op_suba_32_pcdi(void)
6366 {
6367 uint src = OPER_PCDI_32();
6368 uint* r_dst = &AX;
6369
6370 *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
6371 }
6372
6373
m68k_op_suba_32_pcix(void)6374 void m68k_op_suba_32_pcix(void)
6375 {
6376 uint src = OPER_PCIX_32();
6377 uint* r_dst = &AX;
6378
6379 *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
6380 }
6381
6382
m68k_op_suba_32_i(void)6383 void m68k_op_suba_32_i(void)
6384 {
6385 uint src = OPER_I_32();
6386 uint* r_dst = &AX;
6387
6388 *r_dst = MASK_OUT_ABOVE_32(*r_dst - src);
6389 }
6390
6391
m68k_op_subi_8_d(void)6392 void m68k_op_subi_8_d(void)
6393 {
6394 uint* r_dst = &DY;
6395 uint src = OPER_I_8();
6396 uint dst = MASK_OUT_ABOVE_8(*r_dst);
6397 uint res = dst - src;
6398
6399 FLAG_N = NFLAG_8(res);
6400 FLAG_Z = MASK_OUT_ABOVE_8(res);
6401 FLAG_X = FLAG_C = CFLAG_8(res);
6402 FLAG_V = VFLAG_SUB_8(src, dst, res);
6403
6404 *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
6405 }
6406
6407
m68k_op_subi_8_ai(void)6408 void m68k_op_subi_8_ai(void)
6409 {
6410 uint src = OPER_I_8();
6411 uint ea = EA_AY_AI_8();
6412 uint dst = m68ki_read_8(ea);
6413 uint res = dst - src;
6414
6415 FLAG_N = NFLAG_8(res);
6416 FLAG_Z = MASK_OUT_ABOVE_8(res);
6417 FLAG_X = FLAG_C = CFLAG_8(res);
6418 FLAG_V = VFLAG_SUB_8(src, dst, res);
6419
6420 m68ki_write_8(ea, FLAG_Z);
6421 }
6422
6423
m68k_op_subi_8_pi(void)6424 void m68k_op_subi_8_pi(void)
6425 {
6426 uint src = OPER_I_8();
6427 uint ea = EA_AY_PI_8();
6428 uint dst = m68ki_read_8(ea);
6429 uint res = dst - src;
6430
6431 FLAG_N = NFLAG_8(res);
6432 FLAG_Z = MASK_OUT_ABOVE_8(res);
6433 FLAG_X = FLAG_C = CFLAG_8(res);
6434 FLAG_V = VFLAG_SUB_8(src, dst, res);
6435
6436 m68ki_write_8(ea, FLAG_Z);
6437 }
6438
6439
m68k_op_subi_8_pi7(void)6440 void m68k_op_subi_8_pi7(void)
6441 {
6442 uint src = OPER_I_8();
6443 uint ea = EA_A7_PI_8();
6444 uint dst = m68ki_read_8(ea);
6445 uint res = dst - src;
6446
6447 FLAG_N = NFLAG_8(res);
6448 FLAG_Z = MASK_OUT_ABOVE_8(res);
6449 FLAG_X = FLAG_C = CFLAG_8(res);
6450 FLAG_V = VFLAG_SUB_8(src, dst, res);
6451
6452 m68ki_write_8(ea, FLAG_Z);
6453 }
6454
6455
m68k_op_subi_8_pd(void)6456 void m68k_op_subi_8_pd(void)
6457 {
6458 uint src = OPER_I_8();
6459 uint ea = EA_AY_PD_8();
6460 uint dst = m68ki_read_8(ea);
6461 uint res = dst - src;
6462
6463 FLAG_N = NFLAG_8(res);
6464 FLAG_Z = MASK_OUT_ABOVE_8(res);
6465 FLAG_X = FLAG_C = CFLAG_8(res);
6466 FLAG_V = VFLAG_SUB_8(src, dst, res);
6467
6468 m68ki_write_8(ea, FLAG_Z);
6469 }
6470
6471
m68k_op_subi_8_pd7(void)6472 void m68k_op_subi_8_pd7(void)
6473 {
6474 uint src = OPER_I_8();
6475 uint ea = EA_A7_PD_8();
6476 uint dst = m68ki_read_8(ea);
6477 uint res = dst - src;
6478
6479 FLAG_N = NFLAG_8(res);
6480 FLAG_Z = MASK_OUT_ABOVE_8(res);
6481 FLAG_X = FLAG_C = CFLAG_8(res);
6482 FLAG_V = VFLAG_SUB_8(src, dst, res);
6483
6484 m68ki_write_8(ea, FLAG_Z);
6485 }
6486
6487
m68k_op_subi_8_di(void)6488 void m68k_op_subi_8_di(void)
6489 {
6490 uint src = OPER_I_8();
6491 uint ea = EA_AY_DI_8();
6492 uint dst = m68ki_read_8(ea);
6493 uint res = dst - src;
6494
6495 FLAG_N = NFLAG_8(res);
6496 FLAG_Z = MASK_OUT_ABOVE_8(res);
6497 FLAG_X = FLAG_C = CFLAG_8(res);
6498 FLAG_V = VFLAG_SUB_8(src, dst, res);
6499
6500 m68ki_write_8(ea, FLAG_Z);
6501 }
6502
6503
m68k_op_subi_8_ix(void)6504 void m68k_op_subi_8_ix(void)
6505 {
6506 uint src = OPER_I_8();
6507 uint ea = EA_AY_IX_8();
6508 uint dst = m68ki_read_8(ea);
6509 uint res = dst - src;
6510
6511 FLAG_N = NFLAG_8(res);
6512 FLAG_Z = MASK_OUT_ABOVE_8(res);
6513 FLAG_X = FLAG_C = CFLAG_8(res);
6514 FLAG_V = VFLAG_SUB_8(src, dst, res);
6515
6516 m68ki_write_8(ea, FLAG_Z);
6517 }
6518
6519
m68k_op_subi_8_aw(void)6520 void m68k_op_subi_8_aw(void)
6521 {
6522 uint src = OPER_I_8();
6523 uint ea = EA_AW_8();
6524 uint dst = m68ki_read_8(ea);
6525 uint res = dst - src;
6526
6527 FLAG_N = NFLAG_8(res);
6528 FLAG_Z = MASK_OUT_ABOVE_8(res);
6529 FLAG_X = FLAG_C = CFLAG_8(res);
6530 FLAG_V = VFLAG_SUB_8(src, dst, res);
6531
6532 m68ki_write_8(ea, FLAG_Z);
6533 }
6534
6535
m68k_op_subi_8_al(void)6536 void m68k_op_subi_8_al(void)
6537 {
6538 uint src = OPER_I_8();
6539 uint ea = EA_AL_8();
6540 uint dst = m68ki_read_8(ea);
6541 uint res = dst - src;
6542
6543 FLAG_N = NFLAG_8(res);
6544 FLAG_Z = MASK_OUT_ABOVE_8(res);
6545 FLAG_X = FLAG_C = CFLAG_8(res);
6546 FLAG_V = VFLAG_SUB_8(src, dst, res);
6547
6548 m68ki_write_8(ea, FLAG_Z);
6549 }
6550
6551
m68k_op_subi_16_d(void)6552 void m68k_op_subi_16_d(void)
6553 {
6554 uint* r_dst = &DY;
6555 uint src = OPER_I_16();
6556 uint dst = MASK_OUT_ABOVE_16(*r_dst);
6557 uint res = dst - src;
6558
6559 FLAG_N = NFLAG_16(res);
6560 FLAG_Z = MASK_OUT_ABOVE_16(res);
6561 FLAG_X = FLAG_C = CFLAG_16(res);
6562 FLAG_V = VFLAG_SUB_16(src, dst, res);
6563
6564 *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
6565 }
6566
6567
m68k_op_subi_16_ai(void)6568 void m68k_op_subi_16_ai(void)
6569 {
6570 uint src = OPER_I_16();
6571 uint ea = EA_AY_AI_16();
6572 uint dst = m68ki_read_16(ea);
6573 uint res = dst - src;
6574
6575 FLAG_N = NFLAG_16(res);
6576 FLAG_Z = MASK_OUT_ABOVE_16(res);
6577 FLAG_X = FLAG_C = CFLAG_16(res);
6578 FLAG_V = VFLAG_SUB_16(src, dst, res);
6579
6580 m68ki_write_16(ea, FLAG_Z);
6581 }
6582
6583
m68k_op_subi_16_pi(void)6584 void m68k_op_subi_16_pi(void)
6585 {
6586 uint src = OPER_I_16();
6587 uint ea = EA_AY_PI_16();
6588 uint dst = m68ki_read_16(ea);
6589 uint res = dst - src;
6590
6591 FLAG_N = NFLAG_16(res);
6592 FLAG_Z = MASK_OUT_ABOVE_16(res);
6593 FLAG_X = FLAG_C = CFLAG_16(res);
6594 FLAG_V = VFLAG_SUB_16(src, dst, res);
6595
6596 m68ki_write_16(ea, FLAG_Z);
6597 }
6598
6599
m68k_op_subi_16_pd(void)6600 void m68k_op_subi_16_pd(void)
6601 {
6602 uint src = OPER_I_16();
6603 uint ea = EA_AY_PD_16();
6604 uint dst = m68ki_read_16(ea);
6605 uint res = dst - src;
6606
6607 FLAG_N = NFLAG_16(res);
6608 FLAG_Z = MASK_OUT_ABOVE_16(res);
6609 FLAG_X = FLAG_C = CFLAG_16(res);
6610 FLAG_V = VFLAG_SUB_16(src, dst, res);
6611
6612 m68ki_write_16(ea, FLAG_Z);
6613 }
6614
6615
m68k_op_subi_16_di(void)6616 void m68k_op_subi_16_di(void)
6617 {
6618 uint src = OPER_I_16();
6619 uint ea = EA_AY_DI_16();
6620 uint dst = m68ki_read_16(ea);
6621 uint res = dst - src;
6622
6623 FLAG_N = NFLAG_16(res);
6624 FLAG_Z = MASK_OUT_ABOVE_16(res);
6625 FLAG_X = FLAG_C = CFLAG_16(res);
6626 FLAG_V = VFLAG_SUB_16(src, dst, res);
6627
6628 m68ki_write_16(ea, FLAG_Z);
6629 }
6630
6631
m68k_op_subi_16_ix(void)6632 void m68k_op_subi_16_ix(void)
6633 {
6634 uint src = OPER_I_16();
6635 uint ea = EA_AY_IX_16();
6636 uint dst = m68ki_read_16(ea);
6637 uint res = dst - src;
6638
6639 FLAG_N = NFLAG_16(res);
6640 FLAG_Z = MASK_OUT_ABOVE_16(res);
6641 FLAG_X = FLAG_C = CFLAG_16(res);
6642 FLAG_V = VFLAG_SUB_16(src, dst, res);
6643
6644 m68ki_write_16(ea, FLAG_Z);
6645 }
6646
6647
m68k_op_subi_16_aw(void)6648 void m68k_op_subi_16_aw(void)
6649 {
6650 uint src = OPER_I_16();
6651 uint ea = EA_AW_16();
6652 uint dst = m68ki_read_16(ea);
6653 uint res = dst - src;
6654
6655 FLAG_N = NFLAG_16(res);
6656 FLAG_Z = MASK_OUT_ABOVE_16(res);
6657 FLAG_X = FLAG_C = CFLAG_16(res);
6658 FLAG_V = VFLAG_SUB_16(src, dst, res);
6659
6660 m68ki_write_16(ea, FLAG_Z);
6661 }
6662
6663
m68k_op_subi_16_al(void)6664 void m68k_op_subi_16_al(void)
6665 {
6666 uint src = OPER_I_16();
6667 uint ea = EA_AL_16();
6668 uint dst = m68ki_read_16(ea);
6669 uint res = dst - src;
6670
6671 FLAG_N = NFLAG_16(res);
6672 FLAG_Z = MASK_OUT_ABOVE_16(res);
6673 FLAG_X = FLAG_C = CFLAG_16(res);
6674 FLAG_V = VFLAG_SUB_16(src, dst, res);
6675
6676 m68ki_write_16(ea, FLAG_Z);
6677 }
6678
6679
m68k_op_subi_32_d(void)6680 void m68k_op_subi_32_d(void)
6681 {
6682 uint* r_dst = &DY;
6683 uint src = OPER_I_32();
6684 uint dst = *r_dst;
6685 uint res = dst - src;
6686
6687 FLAG_N = NFLAG_32(res);
6688 FLAG_Z = MASK_OUT_ABOVE_32(res);
6689 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
6690 FLAG_V = VFLAG_SUB_32(src, dst, res);
6691
6692 *r_dst = FLAG_Z;
6693 }
6694
6695
m68k_op_subi_32_ai(void)6696 void m68k_op_subi_32_ai(void)
6697 {
6698 uint src = OPER_I_32();
6699 uint ea = EA_AY_AI_32();
6700 uint dst = m68ki_read_32(ea);
6701 uint res = dst - src;
6702
6703 FLAG_N = NFLAG_32(res);
6704 FLAG_Z = MASK_OUT_ABOVE_32(res);
6705 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
6706 FLAG_V = VFLAG_SUB_32(src, dst, res);
6707
6708 m68ki_write_32(ea, FLAG_Z);
6709 }
6710
6711
m68k_op_subi_32_pi(void)6712 void m68k_op_subi_32_pi(void)
6713 {
6714 uint src = OPER_I_32();
6715 uint ea = EA_AY_PI_32();
6716 uint dst = m68ki_read_32(ea);
6717 uint res = dst - src;
6718
6719 FLAG_N = NFLAG_32(res);
6720 FLAG_Z = MASK_OUT_ABOVE_32(res);
6721 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
6722 FLAG_V = VFLAG_SUB_32(src, dst, res);
6723
6724 m68ki_write_32(ea, FLAG_Z);
6725 }
6726
6727
m68k_op_subi_32_pd(void)6728 void m68k_op_subi_32_pd(void)
6729 {
6730 uint src = OPER_I_32();
6731 uint ea = EA_AY_PD_32();
6732 uint dst = m68ki_read_32(ea);
6733 uint res = dst - src;
6734
6735 FLAG_N = NFLAG_32(res);
6736 FLAG_Z = MASK_OUT_ABOVE_32(res);
6737 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
6738 FLAG_V = VFLAG_SUB_32(src, dst, res);
6739
6740 m68ki_write_32(ea, FLAG_Z);
6741 }
6742
6743
m68k_op_subi_32_di(void)6744 void m68k_op_subi_32_di(void)
6745 {
6746 uint src = OPER_I_32();
6747 uint ea = EA_AY_DI_32();
6748 uint dst = m68ki_read_32(ea);
6749 uint res = dst - src;
6750
6751 FLAG_N = NFLAG_32(res);
6752 FLAG_Z = MASK_OUT_ABOVE_32(res);
6753 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
6754 FLAG_V = VFLAG_SUB_32(src, dst, res);
6755
6756 m68ki_write_32(ea, FLAG_Z);
6757 }
6758
6759
m68k_op_subi_32_ix(void)6760 void m68k_op_subi_32_ix(void)
6761 {
6762 uint src = OPER_I_32();
6763 uint ea = EA_AY_IX_32();
6764 uint dst = m68ki_read_32(ea);
6765 uint res = dst - src;
6766
6767 FLAG_N = NFLAG_32(res);
6768 FLAG_Z = MASK_OUT_ABOVE_32(res);
6769 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
6770 FLAG_V = VFLAG_SUB_32(src, dst, res);
6771
6772 m68ki_write_32(ea, FLAG_Z);
6773 }
6774
6775
m68k_op_subi_32_aw(void)6776 void m68k_op_subi_32_aw(void)
6777 {
6778 uint src = OPER_I_32();
6779 uint ea = EA_AW_32();
6780 uint dst = m68ki_read_32(ea);
6781 uint res = dst - src;
6782
6783 FLAG_N = NFLAG_32(res);
6784 FLAG_Z = MASK_OUT_ABOVE_32(res);
6785 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
6786 FLAG_V = VFLAG_SUB_32(src, dst, res);
6787
6788 m68ki_write_32(ea, FLAG_Z);
6789 }
6790
6791
m68k_op_subi_32_al(void)6792 void m68k_op_subi_32_al(void)
6793 {
6794 uint src = OPER_I_32();
6795 uint ea = EA_AL_32();
6796 uint dst = m68ki_read_32(ea);
6797 uint res = dst - src;
6798
6799 FLAG_N = NFLAG_32(res);
6800 FLAG_Z = MASK_OUT_ABOVE_32(res);
6801 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
6802 FLAG_V = VFLAG_SUB_32(src, dst, res);
6803
6804 m68ki_write_32(ea, FLAG_Z);
6805 }
6806
6807
m68k_op_subq_8_d(void)6808 void m68k_op_subq_8_d(void)
6809 {
6810 uint* r_dst = &DY;
6811 uint src = (((REG_IR >> 9) - 1) & 7) + 1;
6812 uint dst = MASK_OUT_ABOVE_8(*r_dst);
6813 uint res = dst - src;
6814
6815 FLAG_N = NFLAG_8(res);
6816 FLAG_Z = MASK_OUT_ABOVE_8(res);
6817 FLAG_X = FLAG_C = CFLAG_8(res);
6818 FLAG_V = VFLAG_SUB_8(src, dst, res);
6819
6820 *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z;
6821 }
6822
6823
m68k_op_subq_8_ai(void)6824 void m68k_op_subq_8_ai(void)
6825 {
6826 uint src = (((REG_IR >> 9) - 1) & 7) + 1;
6827 uint ea = EA_AY_AI_8();
6828 uint dst = m68ki_read_8(ea);
6829 uint res = dst - src;
6830
6831 FLAG_N = NFLAG_8(res);
6832 FLAG_Z = MASK_OUT_ABOVE_8(res);
6833 FLAG_X = FLAG_C = CFLAG_8(res);
6834 FLAG_V = VFLAG_SUB_8(src, dst, res);
6835
6836 m68ki_write_8(ea, FLAG_Z);
6837 }
6838
6839
m68k_op_subq_8_pi(void)6840 void m68k_op_subq_8_pi(void)
6841 {
6842 uint src = (((REG_IR >> 9) - 1) & 7) + 1;
6843 uint ea = EA_AY_PI_8();
6844 uint dst = m68ki_read_8(ea);
6845 uint res = dst - src;
6846
6847 FLAG_N = NFLAG_8(res);
6848 FLAG_Z = MASK_OUT_ABOVE_8(res);
6849 FLAG_X = FLAG_C = CFLAG_8(res);
6850 FLAG_V = VFLAG_SUB_8(src, dst, res);
6851
6852 m68ki_write_8(ea, FLAG_Z);
6853 }
6854
6855
m68k_op_subq_8_pi7(void)6856 void m68k_op_subq_8_pi7(void)
6857 {
6858 uint src = (((REG_IR >> 9) - 1) & 7) + 1;
6859 uint ea = EA_A7_PI_8();
6860 uint dst = m68ki_read_8(ea);
6861 uint res = dst - src;
6862
6863 FLAG_N = NFLAG_8(res);
6864 FLAG_Z = MASK_OUT_ABOVE_8(res);
6865 FLAG_X = FLAG_C = CFLAG_8(res);
6866 FLAG_V = VFLAG_SUB_8(src, dst, res);
6867
6868 m68ki_write_8(ea, FLAG_Z);
6869 }
6870
6871
m68k_op_subq_8_pd(void)6872 void m68k_op_subq_8_pd(void)
6873 {
6874 uint src = (((REG_IR >> 9) - 1) & 7) + 1;
6875 uint ea = EA_AY_PD_8();
6876 uint dst = m68ki_read_8(ea);
6877 uint res = dst - src;
6878
6879 FLAG_N = NFLAG_8(res);
6880 FLAG_Z = MASK_OUT_ABOVE_8(res);
6881 FLAG_X = FLAG_C = CFLAG_8(res);
6882 FLAG_V = VFLAG_SUB_8(src, dst, res);
6883
6884 m68ki_write_8(ea, FLAG_Z);
6885 }
6886
6887
m68k_op_subq_8_pd7(void)6888 void m68k_op_subq_8_pd7(void)
6889 {
6890 uint src = (((REG_IR >> 9) - 1) & 7) + 1;
6891 uint ea = EA_A7_PD_8();
6892 uint dst = m68ki_read_8(ea);
6893 uint res = dst - src;
6894
6895 FLAG_N = NFLAG_8(res);
6896 FLAG_Z = MASK_OUT_ABOVE_8(res);
6897 FLAG_X = FLAG_C = CFLAG_8(res);
6898 FLAG_V = VFLAG_SUB_8(src, dst, res);
6899
6900 m68ki_write_8(ea, FLAG_Z);
6901 }
6902
6903
m68k_op_subq_8_di(void)6904 void m68k_op_subq_8_di(void)
6905 {
6906 uint src = (((REG_IR >> 9) - 1) & 7) + 1;
6907 uint ea = EA_AY_DI_8();
6908 uint dst = m68ki_read_8(ea);
6909 uint res = dst - src;
6910
6911 FLAG_N = NFLAG_8(res);
6912 FLAG_Z = MASK_OUT_ABOVE_8(res);
6913 FLAG_X = FLAG_C = CFLAG_8(res);
6914 FLAG_V = VFLAG_SUB_8(src, dst, res);
6915
6916 m68ki_write_8(ea, FLAG_Z);
6917 }
6918
6919
m68k_op_subq_8_ix(void)6920 void m68k_op_subq_8_ix(void)
6921 {
6922 uint src = (((REG_IR >> 9) - 1) & 7) + 1;
6923 uint ea = EA_AY_IX_8();
6924 uint dst = m68ki_read_8(ea);
6925 uint res = dst - src;
6926
6927 FLAG_N = NFLAG_8(res);
6928 FLAG_Z = MASK_OUT_ABOVE_8(res);
6929 FLAG_X = FLAG_C = CFLAG_8(res);
6930 FLAG_V = VFLAG_SUB_8(src, dst, res);
6931
6932 m68ki_write_8(ea, FLAG_Z);
6933 }
6934
6935
m68k_op_subq_8_aw(void)6936 void m68k_op_subq_8_aw(void)
6937 {
6938 uint src = (((REG_IR >> 9) - 1) & 7) + 1;
6939 uint ea = EA_AW_8();
6940 uint dst = m68ki_read_8(ea);
6941 uint res = dst - src;
6942
6943 FLAG_N = NFLAG_8(res);
6944 FLAG_Z = MASK_OUT_ABOVE_8(res);
6945 FLAG_X = FLAG_C = CFLAG_8(res);
6946 FLAG_V = VFLAG_SUB_8(src, dst, res);
6947
6948 m68ki_write_8(ea, FLAG_Z);
6949 }
6950
6951
m68k_op_subq_8_al(void)6952 void m68k_op_subq_8_al(void)
6953 {
6954 uint src = (((REG_IR >> 9) - 1) & 7) + 1;
6955 uint ea = EA_AL_8();
6956 uint dst = m68ki_read_8(ea);
6957 uint res = dst - src;
6958
6959 FLAG_N = NFLAG_8(res);
6960 FLAG_Z = MASK_OUT_ABOVE_8(res);
6961 FLAG_X = FLAG_C = CFLAG_8(res);
6962 FLAG_V = VFLAG_SUB_8(src, dst, res);
6963
6964 m68ki_write_8(ea, FLAG_Z);
6965 }
6966
6967
m68k_op_subq_16_d(void)6968 void m68k_op_subq_16_d(void)
6969 {
6970 uint* r_dst = &DY;
6971 uint src = (((REG_IR >> 9) - 1) & 7) + 1;
6972 uint dst = MASK_OUT_ABOVE_16(*r_dst);
6973 uint res = dst - src;
6974
6975 FLAG_N = NFLAG_16(res);
6976 FLAG_Z = MASK_OUT_ABOVE_16(res);
6977 FLAG_X = FLAG_C = CFLAG_16(res);
6978 FLAG_V = VFLAG_SUB_16(src, dst, res);
6979
6980 *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z;
6981 }
6982
6983
m68k_op_subq_16_a(void)6984 void m68k_op_subq_16_a(void)
6985 {
6986 uint* r_dst = &AY;
6987
6988 *r_dst = MASK_OUT_ABOVE_32(*r_dst - ((((REG_IR >> 9) - 1) & 7) + 1));
6989 }
6990
6991
m68k_op_subq_16_ai(void)6992 void m68k_op_subq_16_ai(void)
6993 {
6994 uint src = (((REG_IR >> 9) - 1) & 7) + 1;
6995 uint ea = EA_AY_AI_16();
6996 uint dst = m68ki_read_16(ea);
6997 uint res = dst - src;
6998
6999 FLAG_N = NFLAG_16(res);
7000 FLAG_Z = MASK_OUT_ABOVE_16(res);
7001 FLAG_X = FLAG_C = CFLAG_16(res);
7002 FLAG_V = VFLAG_SUB_16(src, dst, res);
7003
7004 m68ki_write_16(ea, FLAG_Z);
7005 }
7006
7007
m68k_op_subq_16_pi(void)7008 void m68k_op_subq_16_pi(void)
7009 {
7010 uint src = (((REG_IR >> 9) - 1) & 7) + 1;
7011 uint ea = EA_AY_PI_16();
7012 uint dst = m68ki_read_16(ea);
7013 uint res = dst - src;
7014
7015 FLAG_N = NFLAG_16(res);
7016 FLAG_Z = MASK_OUT_ABOVE_16(res);
7017 FLAG_X = FLAG_C = CFLAG_16(res);
7018 FLAG_V = VFLAG_SUB_16(src, dst, res);
7019
7020 m68ki_write_16(ea, FLAG_Z);
7021 }
7022
7023
m68k_op_subq_16_pd(void)7024 void m68k_op_subq_16_pd(void)
7025 {
7026 uint src = (((REG_IR >> 9) - 1) & 7) + 1;
7027 uint ea = EA_AY_PD_16();
7028 uint dst = m68ki_read_16(ea);
7029 uint res = dst - src;
7030
7031 FLAG_N = NFLAG_16(res);
7032 FLAG_Z = MASK_OUT_ABOVE_16(res);
7033 FLAG_X = FLAG_C = CFLAG_16(res);
7034 FLAG_V = VFLAG_SUB_16(src, dst, res);
7035
7036 m68ki_write_16(ea, FLAG_Z);
7037 }
7038
7039
m68k_op_subq_16_di(void)7040 void m68k_op_subq_16_di(void)
7041 {
7042 uint src = (((REG_IR >> 9) - 1) & 7) + 1;
7043 uint ea = EA_AY_DI_16();
7044 uint dst = m68ki_read_16(ea);
7045 uint res = dst - src;
7046
7047 FLAG_N = NFLAG_16(res);
7048 FLAG_Z = MASK_OUT_ABOVE_16(res);
7049 FLAG_X = FLAG_C = CFLAG_16(res);
7050 FLAG_V = VFLAG_SUB_16(src, dst, res);
7051
7052 m68ki_write_16(ea, FLAG_Z);
7053 }
7054
7055
m68k_op_subq_16_ix(void)7056 void m68k_op_subq_16_ix(void)
7057 {
7058 uint src = (((REG_IR >> 9) - 1) & 7) + 1;
7059 uint ea = EA_AY_IX_16();
7060 uint dst = m68ki_read_16(ea);
7061 uint res = dst - src;
7062
7063 FLAG_N = NFLAG_16(res);
7064 FLAG_Z = MASK_OUT_ABOVE_16(res);
7065 FLAG_X = FLAG_C = CFLAG_16(res);
7066 FLAG_V = VFLAG_SUB_16(src, dst, res);
7067
7068 m68ki_write_16(ea, FLAG_Z);
7069 }
7070
7071
m68k_op_subq_16_aw(void)7072 void m68k_op_subq_16_aw(void)
7073 {
7074 uint src = (((REG_IR >> 9) - 1) & 7) + 1;
7075 uint ea = EA_AW_16();
7076 uint dst = m68ki_read_16(ea);
7077 uint res = dst - src;
7078
7079 FLAG_N = NFLAG_16(res);
7080 FLAG_Z = MASK_OUT_ABOVE_16(res);
7081 FLAG_X = FLAG_C = CFLAG_16(res);
7082 FLAG_V = VFLAG_SUB_16(src, dst, res);
7083
7084 m68ki_write_16(ea, FLAG_Z);
7085 }
7086
7087
m68k_op_subq_16_al(void)7088 void m68k_op_subq_16_al(void)
7089 {
7090 uint src = (((REG_IR >> 9) - 1) & 7) + 1;
7091 uint ea = EA_AL_16();
7092 uint dst = m68ki_read_16(ea);
7093 uint res = dst - src;
7094
7095 FLAG_N = NFLAG_16(res);
7096 FLAG_Z = MASK_OUT_ABOVE_16(res);
7097 FLAG_X = FLAG_C = CFLAG_16(res);
7098 FLAG_V = VFLAG_SUB_16(src, dst, res);
7099
7100 m68ki_write_16(ea, FLAG_Z);
7101 }
7102
7103
m68k_op_subq_32_d(void)7104 void m68k_op_subq_32_d(void)
7105 {
7106 uint* r_dst = &DY;
7107 uint src = (((REG_IR >> 9) - 1) & 7) + 1;
7108 uint dst = *r_dst;
7109 uint res = dst - src;
7110
7111 FLAG_N = NFLAG_32(res);
7112 FLAG_Z = MASK_OUT_ABOVE_32(res);
7113 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
7114 FLAG_V = VFLAG_SUB_32(src, dst, res);
7115
7116 *r_dst = FLAG_Z;
7117 }
7118
7119
m68k_op_subq_32_a(void)7120 void m68k_op_subq_32_a(void)
7121 {
7122 uint* r_dst = &AY;
7123
7124 *r_dst = MASK_OUT_ABOVE_32(*r_dst - ((((REG_IR >> 9) - 1) & 7) + 1));
7125 }
7126
7127
m68k_op_subq_32_ai(void)7128 void m68k_op_subq_32_ai(void)
7129 {
7130 uint src = (((REG_IR >> 9) - 1) & 7) + 1;
7131 uint ea = EA_AY_AI_32();
7132 uint dst = m68ki_read_32(ea);
7133 uint res = dst - src;
7134
7135 FLAG_N = NFLAG_32(res);
7136 FLAG_Z = MASK_OUT_ABOVE_32(res);
7137 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
7138 FLAG_V = VFLAG_SUB_32(src, dst, res);
7139
7140 m68ki_write_32(ea, FLAG_Z);
7141 }
7142
7143
m68k_op_subq_32_pi(void)7144 void m68k_op_subq_32_pi(void)
7145 {
7146 uint src = (((REG_IR >> 9) - 1) & 7) + 1;
7147 uint ea = EA_AY_PI_32();
7148 uint dst = m68ki_read_32(ea);
7149 uint res = dst - src;
7150
7151 FLAG_N = NFLAG_32(res);
7152 FLAG_Z = MASK_OUT_ABOVE_32(res);
7153 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
7154 FLAG_V = VFLAG_SUB_32(src, dst, res);
7155
7156 m68ki_write_32(ea, FLAG_Z);
7157 }
7158
7159
m68k_op_subq_32_pd(void)7160 void m68k_op_subq_32_pd(void)
7161 {
7162 uint src = (((REG_IR >> 9) - 1) & 7) + 1;
7163 uint ea = EA_AY_PD_32();
7164 uint dst = m68ki_read_32(ea);
7165 uint res = dst - src;
7166
7167 FLAG_N = NFLAG_32(res);
7168 FLAG_Z = MASK_OUT_ABOVE_32(res);
7169 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
7170 FLAG_V = VFLAG_SUB_32(src, dst, res);
7171
7172 m68ki_write_32(ea, FLAG_Z);
7173 }
7174
7175
m68k_op_subq_32_di(void)7176 void m68k_op_subq_32_di(void)
7177 {
7178 uint src = (((REG_IR >> 9) - 1) & 7) + 1;
7179 uint ea = EA_AY_DI_32();
7180 uint dst = m68ki_read_32(ea);
7181 uint res = dst - src;
7182
7183 FLAG_N = NFLAG_32(res);
7184 FLAG_Z = MASK_OUT_ABOVE_32(res);
7185 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
7186 FLAG_V = VFLAG_SUB_32(src, dst, res);
7187
7188 m68ki_write_32(ea, FLAG_Z);
7189 }
7190
7191
m68k_op_subq_32_ix(void)7192 void m68k_op_subq_32_ix(void)
7193 {
7194 uint src = (((REG_IR >> 9) - 1) & 7) + 1;
7195 uint ea = EA_AY_IX_32();
7196 uint dst = m68ki_read_32(ea);
7197 uint res = dst - src;
7198
7199 FLAG_N = NFLAG_32(res);
7200 FLAG_Z = MASK_OUT_ABOVE_32(res);
7201 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
7202 FLAG_V = VFLAG_SUB_32(src, dst, res);
7203
7204 m68ki_write_32(ea, FLAG_Z);
7205 }
7206
7207
m68k_op_subq_32_aw(void)7208 void m68k_op_subq_32_aw(void)
7209 {
7210 uint src = (((REG_IR >> 9) - 1) & 7) + 1;
7211 uint ea = EA_AW_32();
7212 uint dst = m68ki_read_32(ea);
7213 uint res = dst - src;
7214
7215 FLAG_N = NFLAG_32(res);
7216 FLAG_Z = MASK_OUT_ABOVE_32(res);
7217 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
7218 FLAG_V = VFLAG_SUB_32(src, dst, res);
7219
7220 m68ki_write_32(ea, FLAG_Z);
7221 }
7222
7223
m68k_op_subq_32_al(void)7224 void m68k_op_subq_32_al(void)
7225 {
7226 uint src = (((REG_IR >> 9) - 1) & 7) + 1;
7227 uint ea = EA_AL_32();
7228 uint dst = m68ki_read_32(ea);
7229 uint res = dst - src;
7230
7231 FLAG_N = NFLAG_32(res);
7232 FLAG_Z = MASK_OUT_ABOVE_32(res);
7233 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
7234 FLAG_V = VFLAG_SUB_32(src, dst, res);
7235
7236 m68ki_write_32(ea, FLAG_Z);
7237 }
7238
7239
m68k_op_subx_8_rr(void)7240 void m68k_op_subx_8_rr(void)
7241 {
7242 uint* r_dst = &DX;
7243 uint src = MASK_OUT_ABOVE_8(DY);
7244 uint dst = MASK_OUT_ABOVE_8(*r_dst);
7245 uint res = dst - src - XFLAG_AS_1();
7246
7247 FLAG_N = NFLAG_8(res);
7248 FLAG_X = FLAG_C = CFLAG_8(res);
7249 FLAG_V = VFLAG_SUB_8(src, dst, res);
7250
7251 res = MASK_OUT_ABOVE_8(res);
7252 FLAG_Z |= res;
7253
7254 *r_dst = MASK_OUT_BELOW_8(*r_dst) | res;
7255 }
7256
7257
m68k_op_subx_16_rr(void)7258 void m68k_op_subx_16_rr(void)
7259 {
7260 uint* r_dst = &DX;
7261 uint src = MASK_OUT_ABOVE_16(DY);
7262 uint dst = MASK_OUT_ABOVE_16(*r_dst);
7263 uint res = dst - src - XFLAG_AS_1();
7264
7265 FLAG_N = NFLAG_16(res);
7266 FLAG_X = FLAG_C = CFLAG_16(res);
7267 FLAG_V = VFLAG_SUB_16(src, dst, res);
7268
7269 res = MASK_OUT_ABOVE_16(res);
7270 FLAG_Z |= res;
7271
7272 *r_dst = MASK_OUT_BELOW_16(*r_dst) | res;
7273 }
7274
7275
m68k_op_subx_32_rr(void)7276 void m68k_op_subx_32_rr(void)
7277 {
7278 uint* r_dst = &DX;
7279 uint src = DY;
7280 uint dst = *r_dst;
7281 uint res = dst - src - XFLAG_AS_1();
7282
7283 FLAG_N = NFLAG_32(res);
7284 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
7285 FLAG_V = VFLAG_SUB_32(src, dst, res);
7286
7287 res = MASK_OUT_ABOVE_32(res);
7288 FLAG_Z |= res;
7289
7290 *r_dst = res;
7291 }
7292
7293
m68k_op_subx_8_mm_ax7(void)7294 void m68k_op_subx_8_mm_ax7(void)
7295 {
7296 uint src = OPER_AY_PD_8();
7297 uint ea = EA_A7_PD_8();
7298 uint dst = m68ki_read_8(ea);
7299 uint res = dst - src - XFLAG_AS_1();
7300
7301 FLAG_N = NFLAG_8(res);
7302 FLAG_X = FLAG_C = CFLAG_8(res);
7303 FLAG_V = VFLAG_SUB_8(src, dst, res);
7304
7305 res = MASK_OUT_ABOVE_8(res);
7306 FLAG_Z |= res;
7307
7308 m68ki_write_8(ea, res);
7309 }
7310
7311
m68k_op_subx_8_mm_ay7(void)7312 void m68k_op_subx_8_mm_ay7(void)
7313 {
7314 uint src = OPER_A7_PD_8();
7315 uint ea = EA_AX_PD_8();
7316 uint dst = m68ki_read_8(ea);
7317 uint res = dst - src - XFLAG_AS_1();
7318
7319 FLAG_N = NFLAG_8(res);
7320 FLAG_X = FLAG_C = CFLAG_8(res);
7321 FLAG_V = VFLAG_SUB_8(src, dst, res);
7322
7323 res = MASK_OUT_ABOVE_8(res);
7324 FLAG_Z |= res;
7325
7326 m68ki_write_8(ea, res);
7327 }
7328
7329
m68k_op_subx_8_mm_axy7(void)7330 void m68k_op_subx_8_mm_axy7(void)
7331 {
7332 uint src = OPER_A7_PD_8();
7333 uint ea = EA_A7_PD_8();
7334 uint dst = m68ki_read_8(ea);
7335 uint res = dst - src - XFLAG_AS_1();
7336
7337 FLAG_N = NFLAG_8(res);
7338 FLAG_X = FLAG_C = CFLAG_8(res);
7339 FLAG_V = VFLAG_SUB_8(src, dst, res);
7340
7341 res = MASK_OUT_ABOVE_8(res);
7342 FLAG_Z |= res;
7343
7344 m68ki_write_8(ea, res);
7345 }
7346
7347
m68k_op_subx_8_mm(void)7348 void m68k_op_subx_8_mm(void)
7349 {
7350 uint src = OPER_AY_PD_8();
7351 uint ea = EA_AX_PD_8();
7352 uint dst = m68ki_read_8(ea);
7353 uint res = dst - src - XFLAG_AS_1();
7354
7355 FLAG_N = NFLAG_8(res);
7356 FLAG_X = FLAG_C = CFLAG_8(res);
7357 FLAG_V = VFLAG_SUB_8(src, dst, res);
7358
7359 res = MASK_OUT_ABOVE_8(res);
7360 FLAG_Z |= res;
7361
7362 m68ki_write_8(ea, res);
7363 }
7364
7365
m68k_op_subx_16_mm(void)7366 void m68k_op_subx_16_mm(void)
7367 {
7368 uint src = OPER_AY_PD_16();
7369 uint ea = EA_AX_PD_16();
7370 uint dst = m68ki_read_16(ea);
7371 uint res = dst - src - XFLAG_AS_1();
7372
7373 FLAG_N = NFLAG_16(res);
7374 FLAG_X = FLAG_C = CFLAG_16(res);
7375 FLAG_V = VFLAG_SUB_16(src, dst, res);
7376
7377 res = MASK_OUT_ABOVE_16(res);
7378 FLAG_Z |= res;
7379
7380 m68ki_write_16(ea, res);
7381 }
7382
7383
m68k_op_subx_32_mm(void)7384 void m68k_op_subx_32_mm(void)
7385 {
7386 uint src = OPER_AY_PD_32();
7387 uint ea = EA_AX_PD_32();
7388 uint dst = m68ki_read_32(ea);
7389 uint res = dst - src - XFLAG_AS_1();
7390
7391 FLAG_N = NFLAG_32(res);
7392 FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res);
7393 FLAG_V = VFLAG_SUB_32(src, dst, res);
7394
7395 res = MASK_OUT_ABOVE_32(res);
7396 FLAG_Z |= res;
7397
7398 m68ki_write_32(ea, res);
7399 }
7400
7401
m68k_op_swap_32(void)7402 void m68k_op_swap_32(void)
7403 {
7404 uint* r_dst = &DY;
7405
7406 FLAG_Z = MASK_OUT_ABOVE_32(*r_dst<<16);
7407 *r_dst = (*r_dst>>16) | FLAG_Z;
7408
7409 FLAG_Z = *r_dst;
7410 FLAG_N = NFLAG_32(*r_dst);
7411 FLAG_C = CFLAG_CLEAR;
7412 FLAG_V = VFLAG_CLEAR;
7413 }
7414
7415
m68k_op_tas_8_d(void)7416 void m68k_op_tas_8_d(void)
7417 {
7418 uint* r_dst = &DY;
7419
7420 FLAG_Z = MASK_OUT_ABOVE_8(*r_dst);
7421 FLAG_N = NFLAG_8(*r_dst);
7422 FLAG_V = VFLAG_CLEAR;
7423 FLAG_C = CFLAG_CLEAR;
7424 *r_dst |= 0x80;
7425 }
7426
7427
m68k_op_tas_8_ai(void)7428 void m68k_op_tas_8_ai(void)
7429 {
7430 uint ea = EA_AY_AI_8();
7431 uint dst = m68ki_read_8(ea);
7432
7433 FLAG_Z = dst;
7434 FLAG_N = NFLAG_8(dst);
7435 FLAG_V = VFLAG_CLEAR;
7436 FLAG_C = CFLAG_CLEAR;
7437 m68ki_write_8(ea, dst | 0x80);
7438 }
7439
7440
m68k_op_tas_8_pi(void)7441 void m68k_op_tas_8_pi(void)
7442 {
7443 uint ea = EA_AY_PI_8();
7444 uint dst = m68ki_read_8(ea);
7445
7446 FLAG_Z = dst;
7447 FLAG_N = NFLAG_8(dst);
7448 FLAG_V = VFLAG_CLEAR;
7449 FLAG_C = CFLAG_CLEAR;
7450 m68ki_write_8(ea, dst | 0x80);
7451 }
7452
7453
m68k_op_tas_8_pi7(void)7454 void m68k_op_tas_8_pi7(void)
7455 {
7456 uint ea = EA_A7_PI_8();
7457 uint dst = m68ki_read_8(ea);
7458
7459 FLAG_Z = dst;
7460 FLAG_N = NFLAG_8(dst);
7461 FLAG_V = VFLAG_CLEAR;
7462 FLAG_C = CFLAG_CLEAR;
7463 m68ki_write_8(ea, dst | 0x80);
7464 }
7465
7466
m68k_op_tas_8_pd(void)7467 void m68k_op_tas_8_pd(void)
7468 {
7469 uint ea = EA_AY_PD_8();
7470 uint dst = m68ki_read_8(ea);
7471
7472 FLAG_Z = dst;
7473 FLAG_N = NFLAG_8(dst);
7474 FLAG_V = VFLAG_CLEAR;
7475 FLAG_C = CFLAG_CLEAR;
7476 m68ki_write_8(ea, dst | 0x80);
7477 }
7478
7479
m68k_op_tas_8_pd7(void)7480 void m68k_op_tas_8_pd7(void)
7481 {
7482 uint ea = EA_A7_PD_8();
7483 uint dst = m68ki_read_8(ea);
7484
7485 FLAG_Z = dst;
7486 FLAG_N = NFLAG_8(dst);
7487 FLAG_V = VFLAG_CLEAR;
7488 FLAG_C = CFLAG_CLEAR;
7489 m68ki_write_8(ea, dst | 0x80);
7490 }
7491
7492
m68k_op_tas_8_di(void)7493 void m68k_op_tas_8_di(void)
7494 {
7495 uint ea = EA_AY_DI_8();
7496 uint dst = m68ki_read_8(ea);
7497
7498 FLAG_Z = dst;
7499 FLAG_N = NFLAG_8(dst);
7500 FLAG_V = VFLAG_CLEAR;
7501 FLAG_C = CFLAG_CLEAR;
7502 m68ki_write_8(ea, dst | 0x80);
7503 }
7504
7505
m68k_op_tas_8_ix(void)7506 void m68k_op_tas_8_ix(void)
7507 {
7508 uint ea = EA_AY_IX_8();
7509 uint dst = m68ki_read_8(ea);
7510
7511 FLAG_Z = dst;
7512 FLAG_N = NFLAG_8(dst);
7513 FLAG_V = VFLAG_CLEAR;
7514 FLAG_C = CFLAG_CLEAR;
7515 m68ki_write_8(ea, dst | 0x80);
7516 }
7517
7518
m68k_op_tas_8_aw(void)7519 void m68k_op_tas_8_aw(void)
7520 {
7521 uint ea = EA_AW_8();
7522 uint dst = m68ki_read_8(ea);
7523
7524 FLAG_Z = dst;
7525 FLAG_N = NFLAG_8(dst);
7526 FLAG_V = VFLAG_CLEAR;
7527 FLAG_C = CFLAG_CLEAR;
7528 m68ki_write_8(ea, dst | 0x80);
7529 }
7530
7531
m68k_op_tas_8_al(void)7532 void m68k_op_tas_8_al(void)
7533 {
7534 uint ea = EA_AL_8();
7535 uint dst = m68ki_read_8(ea);
7536
7537 FLAG_Z = dst;
7538 FLAG_N = NFLAG_8(dst);
7539 FLAG_V = VFLAG_CLEAR;
7540 FLAG_C = CFLAG_CLEAR;
7541 m68ki_write_8(ea, dst | 0x80);
7542 }
7543
7544
m68k_op_trap(void)7545 void m68k_op_trap(void)
7546 {
7547 /* Trap#n stacks exception frame type 0 */
7548 m68ki_exception_trapN(EXCEPTION_TRAP_BASE + (REG_IR & 0xf)); /* HJB 990403 */
7549 }
7550
7551
m68k_op_trapt(void)7552 void m68k_op_trapt(void)
7553 {
7554 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7555 {
7556 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
7557 return;
7558 }
7559 m68ki_exception_illegal();
7560 }
7561
7562
m68k_op_trapt_16(void)7563 void m68k_op_trapt_16(void)
7564 {
7565 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7566 {
7567 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
7568 return;
7569 }
7570 m68ki_exception_illegal();
7571 }
7572
7573
m68k_op_trapt_32(void)7574 void m68k_op_trapt_32(void)
7575 {
7576 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7577 {
7578 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
7579 return;
7580 }
7581 m68ki_exception_illegal();
7582 }
7583
7584
m68k_op_trapf(void)7585 void m68k_op_trapf(void)
7586 {
7587 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7588 {
7589 return;
7590 }
7591 m68ki_exception_illegal();
7592 }
7593
7594
m68k_op_trapf_16(void)7595 void m68k_op_trapf_16(void)
7596 {
7597 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7598 {
7599 REG_PC += 2;
7600 return;
7601 }
7602 m68ki_exception_illegal();
7603 }
7604
7605
m68k_op_trapf_32(void)7606 void m68k_op_trapf_32(void)
7607 {
7608 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7609 {
7610 REG_PC += 4;
7611 return;
7612 }
7613 m68ki_exception_illegal();
7614 }
7615
7616
m68k_op_traphi(void)7617 void m68k_op_traphi(void)
7618 {
7619 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7620 {
7621 if(COND_HI())
7622 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
7623 return;
7624 }
7625 m68ki_exception_illegal();
7626 }
7627
7628
m68k_op_trapls(void)7629 void m68k_op_trapls(void)
7630 {
7631 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7632 {
7633 if(COND_LS())
7634 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
7635 return;
7636 }
7637 m68ki_exception_illegal();
7638 }
7639
7640
m68k_op_trapcc(void)7641 void m68k_op_trapcc(void)
7642 {
7643 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7644 {
7645 if(COND_CC())
7646 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
7647 return;
7648 }
7649 m68ki_exception_illegal();
7650 }
7651
7652
m68k_op_trapcs(void)7653 void m68k_op_trapcs(void)
7654 {
7655 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7656 {
7657 if(COND_CS())
7658 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
7659 return;
7660 }
7661 m68ki_exception_illegal();
7662 }
7663
7664
m68k_op_trapne(void)7665 void m68k_op_trapne(void)
7666 {
7667 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7668 {
7669 if(COND_NE())
7670 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
7671 return;
7672 }
7673 m68ki_exception_illegal();
7674 }
7675
7676
m68k_op_trapeq(void)7677 void m68k_op_trapeq(void)
7678 {
7679 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7680 {
7681 if(COND_EQ())
7682 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
7683 return;
7684 }
7685 m68ki_exception_illegal();
7686 }
7687
7688
m68k_op_trapvc(void)7689 void m68k_op_trapvc(void)
7690 {
7691 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7692 {
7693 if(COND_VC())
7694 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
7695 return;
7696 }
7697 m68ki_exception_illegal();
7698 }
7699
7700
m68k_op_trapvs(void)7701 void m68k_op_trapvs(void)
7702 {
7703 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7704 {
7705 if(COND_VS())
7706 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
7707 return;
7708 }
7709 m68ki_exception_illegal();
7710 }
7711
7712
m68k_op_trappl(void)7713 void m68k_op_trappl(void)
7714 {
7715 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7716 {
7717 if(COND_PL())
7718 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
7719 return;
7720 }
7721 m68ki_exception_illegal();
7722 }
7723
7724
m68k_op_trapmi(void)7725 void m68k_op_trapmi(void)
7726 {
7727 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7728 {
7729 if(COND_MI())
7730 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
7731 return;
7732 }
7733 m68ki_exception_illegal();
7734 }
7735
7736
m68k_op_trapge(void)7737 void m68k_op_trapge(void)
7738 {
7739 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7740 {
7741 if(COND_GE())
7742 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
7743 return;
7744 }
7745 m68ki_exception_illegal();
7746 }
7747
7748
m68k_op_traplt(void)7749 void m68k_op_traplt(void)
7750 {
7751 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7752 {
7753 if(COND_LT())
7754 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
7755 return;
7756 }
7757 m68ki_exception_illegal();
7758 }
7759
7760
m68k_op_trapgt(void)7761 void m68k_op_trapgt(void)
7762 {
7763 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7764 {
7765 if(COND_GT())
7766 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
7767 return;
7768 }
7769 m68ki_exception_illegal();
7770 }
7771
7772
m68k_op_traple(void)7773 void m68k_op_traple(void)
7774 {
7775 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7776 {
7777 if(COND_LE())
7778 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
7779 return;
7780 }
7781 m68ki_exception_illegal();
7782 }
7783
7784
m68k_op_traphi_16(void)7785 void m68k_op_traphi_16(void)
7786 {
7787 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7788 {
7789 if(COND_HI())
7790 {
7791 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
7792 return;
7793 }
7794 REG_PC += 2;
7795 return;
7796 }
7797 m68ki_exception_illegal();
7798 }
7799
7800
m68k_op_trapls_16(void)7801 void m68k_op_trapls_16(void)
7802 {
7803 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7804 {
7805 if(COND_LS())
7806 {
7807 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
7808 return;
7809 }
7810 REG_PC += 2;
7811 return;
7812 }
7813 m68ki_exception_illegal();
7814 }
7815
7816
m68k_op_trapcc_16(void)7817 void m68k_op_trapcc_16(void)
7818 {
7819 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7820 {
7821 if(COND_CC())
7822 {
7823 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
7824 return;
7825 }
7826 REG_PC += 2;
7827 return;
7828 }
7829 m68ki_exception_illegal();
7830 }
7831
7832
m68k_op_trapcs_16(void)7833 void m68k_op_trapcs_16(void)
7834 {
7835 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7836 {
7837 if(COND_CS())
7838 {
7839 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
7840 return;
7841 }
7842 REG_PC += 2;
7843 return;
7844 }
7845 m68ki_exception_illegal();
7846 }
7847
7848
m68k_op_trapne_16(void)7849 void m68k_op_trapne_16(void)
7850 {
7851 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7852 {
7853 if(COND_NE())
7854 {
7855 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
7856 return;
7857 }
7858 REG_PC += 2;
7859 return;
7860 }
7861 m68ki_exception_illegal();
7862 }
7863
7864
m68k_op_trapeq_16(void)7865 void m68k_op_trapeq_16(void)
7866 {
7867 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7868 {
7869 if(COND_EQ())
7870 {
7871 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
7872 return;
7873 }
7874 REG_PC += 2;
7875 return;
7876 }
7877 m68ki_exception_illegal();
7878 }
7879
7880
m68k_op_trapvc_16(void)7881 void m68k_op_trapvc_16(void)
7882 {
7883 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7884 {
7885 if(COND_VC())
7886 {
7887 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
7888 return;
7889 }
7890 REG_PC += 2;
7891 return;
7892 }
7893 m68ki_exception_illegal();
7894 }
7895
7896
m68k_op_trapvs_16(void)7897 void m68k_op_trapvs_16(void)
7898 {
7899 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7900 {
7901 if(COND_VS())
7902 {
7903 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
7904 return;
7905 }
7906 REG_PC += 2;
7907 return;
7908 }
7909 m68ki_exception_illegal();
7910 }
7911
7912
m68k_op_trappl_16(void)7913 void m68k_op_trappl_16(void)
7914 {
7915 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7916 {
7917 if(COND_PL())
7918 {
7919 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
7920 return;
7921 }
7922 REG_PC += 2;
7923 return;
7924 }
7925 m68ki_exception_illegal();
7926 }
7927
7928
m68k_op_trapmi_16(void)7929 void m68k_op_trapmi_16(void)
7930 {
7931 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7932 {
7933 if(COND_MI())
7934 {
7935 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
7936 return;
7937 }
7938 REG_PC += 2;
7939 return;
7940 }
7941 m68ki_exception_illegal();
7942 }
7943
7944
m68k_op_trapge_16(void)7945 void m68k_op_trapge_16(void)
7946 {
7947 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7948 {
7949 if(COND_GE())
7950 {
7951 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
7952 return;
7953 }
7954 REG_PC += 2;
7955 return;
7956 }
7957 m68ki_exception_illegal();
7958 }
7959
7960
m68k_op_traplt_16(void)7961 void m68k_op_traplt_16(void)
7962 {
7963 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7964 {
7965 if(COND_LT())
7966 {
7967 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
7968 return;
7969 }
7970 REG_PC += 2;
7971 return;
7972 }
7973 m68ki_exception_illegal();
7974 }
7975
7976
m68k_op_trapgt_16(void)7977 void m68k_op_trapgt_16(void)
7978 {
7979 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7980 {
7981 if(COND_GT())
7982 {
7983 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
7984 return;
7985 }
7986 REG_PC += 2;
7987 return;
7988 }
7989 m68ki_exception_illegal();
7990 }
7991
7992
m68k_op_traple_16(void)7993 void m68k_op_traple_16(void)
7994 {
7995 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
7996 {
7997 if(COND_LE())
7998 {
7999 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
8000 return;
8001 }
8002 REG_PC += 2;
8003 return;
8004 }
8005 m68ki_exception_illegal();
8006 }
8007
8008
m68k_op_traphi_32(void)8009 void m68k_op_traphi_32(void)
8010 {
8011 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8012 {
8013 if(COND_HI())
8014 {
8015 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
8016 return;
8017 }
8018 REG_PC += 4;
8019 return;
8020 }
8021 m68ki_exception_illegal();
8022 }
8023
8024
m68k_op_trapls_32(void)8025 void m68k_op_trapls_32(void)
8026 {
8027 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8028 {
8029 if(COND_LS())
8030 {
8031 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
8032 return;
8033 }
8034 REG_PC += 4;
8035 return;
8036 }
8037 m68ki_exception_illegal();
8038 }
8039
8040
m68k_op_trapcc_32(void)8041 void m68k_op_trapcc_32(void)
8042 {
8043 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8044 {
8045 if(COND_CC())
8046 {
8047 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
8048 return;
8049 }
8050 REG_PC += 4;
8051 return;
8052 }
8053 m68ki_exception_illegal();
8054 }
8055
8056
m68k_op_trapcs_32(void)8057 void m68k_op_trapcs_32(void)
8058 {
8059 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8060 {
8061 if(COND_CS())
8062 {
8063 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
8064 return;
8065 }
8066 REG_PC += 4;
8067 return;
8068 }
8069 m68ki_exception_illegal();
8070 }
8071
8072
m68k_op_trapne_32(void)8073 void m68k_op_trapne_32(void)
8074 {
8075 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8076 {
8077 if(COND_NE())
8078 {
8079 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
8080 return;
8081 }
8082 REG_PC += 4;
8083 return;
8084 }
8085 m68ki_exception_illegal();
8086 }
8087
8088
m68k_op_trapeq_32(void)8089 void m68k_op_trapeq_32(void)
8090 {
8091 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8092 {
8093 if(COND_EQ())
8094 {
8095 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
8096 return;
8097 }
8098 REG_PC += 4;
8099 return;
8100 }
8101 m68ki_exception_illegal();
8102 }
8103
8104
m68k_op_trapvc_32(void)8105 void m68k_op_trapvc_32(void)
8106 {
8107 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8108 {
8109 if(COND_VC())
8110 {
8111 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
8112 return;
8113 }
8114 REG_PC += 4;
8115 return;
8116 }
8117 m68ki_exception_illegal();
8118 }
8119
8120
m68k_op_trapvs_32(void)8121 void m68k_op_trapvs_32(void)
8122 {
8123 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8124 {
8125 if(COND_VS())
8126 {
8127 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
8128 return;
8129 }
8130 REG_PC += 4;
8131 return;
8132 }
8133 m68ki_exception_illegal();
8134 }
8135
8136
m68k_op_trappl_32(void)8137 void m68k_op_trappl_32(void)
8138 {
8139 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8140 {
8141 if(COND_PL())
8142 {
8143 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
8144 return;
8145 }
8146 REG_PC += 4;
8147 return;
8148 }
8149 m68ki_exception_illegal();
8150 }
8151
8152
m68k_op_trapmi_32(void)8153 void m68k_op_trapmi_32(void)
8154 {
8155 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8156 {
8157 if(COND_MI())
8158 {
8159 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
8160 return;
8161 }
8162 REG_PC += 4;
8163 return;
8164 }
8165 m68ki_exception_illegal();
8166 }
8167
8168
m68k_op_trapge_32(void)8169 void m68k_op_trapge_32(void)
8170 {
8171 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8172 {
8173 if(COND_GE())
8174 {
8175 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
8176 return;
8177 }
8178 REG_PC += 4;
8179 return;
8180 }
8181 m68ki_exception_illegal();
8182 }
8183
8184
m68k_op_traplt_32(void)8185 void m68k_op_traplt_32(void)
8186 {
8187 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8188 {
8189 if(COND_LT())
8190 {
8191 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
8192 return;
8193 }
8194 REG_PC += 4;
8195 return;
8196 }
8197 m68ki_exception_illegal();
8198 }
8199
8200
m68k_op_trapgt_32(void)8201 void m68k_op_trapgt_32(void)
8202 {
8203 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8204 {
8205 if(COND_GT())
8206 {
8207 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
8208 return;
8209 }
8210 REG_PC += 4;
8211 return;
8212 }
8213 m68ki_exception_illegal();
8214 }
8215
8216
m68k_op_traple_32(void)8217 void m68k_op_traple_32(void)
8218 {
8219 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8220 {
8221 if(COND_LE())
8222 {
8223 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
8224 return;
8225 }
8226 REG_PC += 4;
8227 return;
8228 }
8229 m68ki_exception_illegal();
8230 }
8231
8232
m68k_op_trapv(void)8233 void m68k_op_trapv(void)
8234 {
8235 if(COND_VC())
8236 {
8237 return;
8238 }
8239 m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */
8240 }
8241
8242
m68k_op_tst_8_d(void)8243 void m68k_op_tst_8_d(void)
8244 {
8245 uint res = MASK_OUT_ABOVE_8(DY);
8246
8247 FLAG_N = NFLAG_8(res);
8248 FLAG_Z = res;
8249 FLAG_V = VFLAG_CLEAR;
8250 FLAG_C = CFLAG_CLEAR;
8251 }
8252
8253
m68k_op_tst_8_ai(void)8254 void m68k_op_tst_8_ai(void)
8255 {
8256 uint res = OPER_AY_AI_8();
8257
8258 FLAG_N = NFLAG_8(res);
8259 FLAG_Z = res;
8260 FLAG_V = VFLAG_CLEAR;
8261 FLAG_C = CFLAG_CLEAR;
8262 }
8263
8264
m68k_op_tst_8_pi(void)8265 void m68k_op_tst_8_pi(void)
8266 {
8267 uint res = OPER_AY_PI_8();
8268
8269 FLAG_N = NFLAG_8(res);
8270 FLAG_Z = res;
8271 FLAG_V = VFLAG_CLEAR;
8272 FLAG_C = CFLAG_CLEAR;
8273 }
8274
8275
m68k_op_tst_8_pi7(void)8276 void m68k_op_tst_8_pi7(void)
8277 {
8278 uint res = OPER_A7_PI_8();
8279
8280 FLAG_N = NFLAG_8(res);
8281 FLAG_Z = res;
8282 FLAG_V = VFLAG_CLEAR;
8283 FLAG_C = CFLAG_CLEAR;
8284 }
8285
8286
m68k_op_tst_8_pd(void)8287 void m68k_op_tst_8_pd(void)
8288 {
8289 uint res = OPER_AY_PD_8();
8290
8291 FLAG_N = NFLAG_8(res);
8292 FLAG_Z = res;
8293 FLAG_V = VFLAG_CLEAR;
8294 FLAG_C = CFLAG_CLEAR;
8295 }
8296
8297
m68k_op_tst_8_pd7(void)8298 void m68k_op_tst_8_pd7(void)
8299 {
8300 uint res = OPER_A7_PD_8();
8301
8302 FLAG_N = NFLAG_8(res);
8303 FLAG_Z = res;
8304 FLAG_V = VFLAG_CLEAR;
8305 FLAG_C = CFLAG_CLEAR;
8306 }
8307
8308
m68k_op_tst_8_di(void)8309 void m68k_op_tst_8_di(void)
8310 {
8311 uint res = OPER_AY_DI_8();
8312
8313 FLAG_N = NFLAG_8(res);
8314 FLAG_Z = res;
8315 FLAG_V = VFLAG_CLEAR;
8316 FLAG_C = CFLAG_CLEAR;
8317 }
8318
8319
m68k_op_tst_8_ix(void)8320 void m68k_op_tst_8_ix(void)
8321 {
8322 uint res = OPER_AY_IX_8();
8323
8324 FLAG_N = NFLAG_8(res);
8325 FLAG_Z = res;
8326 FLAG_V = VFLAG_CLEAR;
8327 FLAG_C = CFLAG_CLEAR;
8328 }
8329
8330
m68k_op_tst_8_aw(void)8331 void m68k_op_tst_8_aw(void)
8332 {
8333 uint res = OPER_AW_8();
8334
8335 FLAG_N = NFLAG_8(res);
8336 FLAG_Z = res;
8337 FLAG_V = VFLAG_CLEAR;
8338 FLAG_C = CFLAG_CLEAR;
8339 }
8340
8341
m68k_op_tst_8_al(void)8342 void m68k_op_tst_8_al(void)
8343 {
8344 uint res = OPER_AL_8();
8345
8346 FLAG_N = NFLAG_8(res);
8347 FLAG_Z = res;
8348 FLAG_V = VFLAG_CLEAR;
8349 FLAG_C = CFLAG_CLEAR;
8350 }
8351
8352
m68k_op_tst_8_pcdi(void)8353 void m68k_op_tst_8_pcdi(void)
8354 {
8355 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8356 {
8357 uint res = OPER_PCDI_8();
8358
8359 FLAG_N = NFLAG_8(res);
8360 FLAG_Z = res;
8361 FLAG_V = VFLAG_CLEAR;
8362 FLAG_C = CFLAG_CLEAR;
8363 return;
8364 }
8365 m68ki_exception_illegal();
8366 }
8367
8368
m68k_op_tst_8_pcix(void)8369 void m68k_op_tst_8_pcix(void)
8370 {
8371 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8372 {
8373 uint res = OPER_PCIX_8();
8374
8375 FLAG_N = NFLAG_8(res);
8376 FLAG_Z = res;
8377 FLAG_V = VFLAG_CLEAR;
8378 FLAG_C = CFLAG_CLEAR;
8379 return;
8380 }
8381 m68ki_exception_illegal();
8382 }
8383
8384
m68k_op_tst_8_i(void)8385 void m68k_op_tst_8_i(void)
8386 {
8387 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8388 {
8389 uint res = OPER_I_8();
8390
8391 FLAG_N = NFLAG_8(res);
8392 FLAG_Z = res;
8393 FLAG_V = VFLAG_CLEAR;
8394 FLAG_C = CFLAG_CLEAR;
8395 return;
8396 }
8397 m68ki_exception_illegal();
8398 }
8399
8400
m68k_op_tst_16_d(void)8401 void m68k_op_tst_16_d(void)
8402 {
8403 uint res = MASK_OUT_ABOVE_16(DY);
8404
8405 FLAG_N = NFLAG_16(res);
8406 FLAG_Z = res;
8407 FLAG_V = VFLAG_CLEAR;
8408 FLAG_C = CFLAG_CLEAR;
8409 }
8410
8411
m68k_op_tst_16_a(void)8412 void m68k_op_tst_16_a(void)
8413 {
8414 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8415 {
8416 uint res = MAKE_INT_16(AY);
8417
8418 FLAG_N = NFLAG_16(res);
8419 FLAG_Z = res;
8420 FLAG_V = VFLAG_CLEAR;
8421 FLAG_C = CFLAG_CLEAR;
8422 return;
8423 }
8424 m68ki_exception_illegal();
8425 }
8426
8427
m68k_op_tst_16_ai(void)8428 void m68k_op_tst_16_ai(void)
8429 {
8430 uint res = OPER_AY_AI_16();
8431
8432 FLAG_N = NFLAG_16(res);
8433 FLAG_Z = res;
8434 FLAG_V = VFLAG_CLEAR;
8435 FLAG_C = CFLAG_CLEAR;
8436 }
8437
8438
m68k_op_tst_16_pi(void)8439 void m68k_op_tst_16_pi(void)
8440 {
8441 uint res = OPER_AY_PI_16();
8442
8443 FLAG_N = NFLAG_16(res);
8444 FLAG_Z = res;
8445 FLAG_V = VFLAG_CLEAR;
8446 FLAG_C = CFLAG_CLEAR;
8447 }
8448
8449
m68k_op_tst_16_pd(void)8450 void m68k_op_tst_16_pd(void)
8451 {
8452 uint res = OPER_AY_PD_16();
8453
8454 FLAG_N = NFLAG_16(res);
8455 FLAG_Z = res;
8456 FLAG_V = VFLAG_CLEAR;
8457 FLAG_C = CFLAG_CLEAR;
8458 }
8459
8460
m68k_op_tst_16_di(void)8461 void m68k_op_tst_16_di(void)
8462 {
8463 uint res = OPER_AY_DI_16();
8464
8465 FLAG_N = NFLAG_16(res);
8466 FLAG_Z = res;
8467 FLAG_V = VFLAG_CLEAR;
8468 FLAG_C = CFLAG_CLEAR;
8469 }
8470
8471
m68k_op_tst_16_ix(void)8472 void m68k_op_tst_16_ix(void)
8473 {
8474 uint res = OPER_AY_IX_16();
8475
8476 FLAG_N = NFLAG_16(res);
8477 FLAG_Z = res;
8478 FLAG_V = VFLAG_CLEAR;
8479 FLAG_C = CFLAG_CLEAR;
8480 }
8481
8482
m68k_op_tst_16_aw(void)8483 void m68k_op_tst_16_aw(void)
8484 {
8485 uint res = OPER_AW_16();
8486
8487 FLAG_N = NFLAG_16(res);
8488 FLAG_Z = res;
8489 FLAG_V = VFLAG_CLEAR;
8490 FLAG_C = CFLAG_CLEAR;
8491 }
8492
8493
m68k_op_tst_16_al(void)8494 void m68k_op_tst_16_al(void)
8495 {
8496 uint res = OPER_AL_16();
8497
8498 FLAG_N = NFLAG_16(res);
8499 FLAG_Z = res;
8500 FLAG_V = VFLAG_CLEAR;
8501 FLAG_C = CFLAG_CLEAR;
8502 }
8503
8504
m68k_op_tst_16_pcdi(void)8505 void m68k_op_tst_16_pcdi(void)
8506 {
8507 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8508 {
8509 uint res = OPER_PCDI_16();
8510
8511 FLAG_N = NFLAG_16(res);
8512 FLAG_Z = res;
8513 FLAG_V = VFLAG_CLEAR;
8514 FLAG_C = CFLAG_CLEAR;
8515 return;
8516 }
8517 m68ki_exception_illegal();
8518 }
8519
8520
m68k_op_tst_16_pcix(void)8521 void m68k_op_tst_16_pcix(void)
8522 {
8523 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8524 {
8525 uint res = OPER_PCIX_16();
8526
8527 FLAG_N = NFLAG_16(res);
8528 FLAG_Z = res;
8529 FLAG_V = VFLAG_CLEAR;
8530 FLAG_C = CFLAG_CLEAR;
8531 return;
8532 }
8533 m68ki_exception_illegal();
8534 }
8535
8536
m68k_op_tst_16_i(void)8537 void m68k_op_tst_16_i(void)
8538 {
8539 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8540 {
8541 uint res = OPER_I_16();
8542
8543 FLAG_N = NFLAG_16(res);
8544 FLAG_Z = res;
8545 FLAG_V = VFLAG_CLEAR;
8546 FLAG_C = CFLAG_CLEAR;
8547 return;
8548 }
8549 m68ki_exception_illegal();
8550 }
8551
8552
m68k_op_tst_32_d(void)8553 void m68k_op_tst_32_d(void)
8554 {
8555 uint res = DY;
8556
8557 FLAG_N = NFLAG_32(res);
8558 FLAG_Z = res;
8559 FLAG_V = VFLAG_CLEAR;
8560 FLAG_C = CFLAG_CLEAR;
8561 }
8562
8563
m68k_op_tst_32_a(void)8564 void m68k_op_tst_32_a(void)
8565 {
8566 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8567 {
8568 uint res = AY;
8569
8570 FLAG_N = NFLAG_32(res);
8571 FLAG_Z = res;
8572 FLAG_V = VFLAG_CLEAR;
8573 FLAG_C = CFLAG_CLEAR;
8574 return;
8575 }
8576 m68ki_exception_illegal();
8577 }
8578
8579
m68k_op_tst_32_ai(void)8580 void m68k_op_tst_32_ai(void)
8581 {
8582 uint res = OPER_AY_AI_32();
8583
8584 FLAG_N = NFLAG_32(res);
8585 FLAG_Z = res;
8586 FLAG_V = VFLAG_CLEAR;
8587 FLAG_C = CFLAG_CLEAR;
8588 }
8589
8590
m68k_op_tst_32_pi(void)8591 void m68k_op_tst_32_pi(void)
8592 {
8593 uint res = OPER_AY_PI_32();
8594
8595 FLAG_N = NFLAG_32(res);
8596 FLAG_Z = res;
8597 FLAG_V = VFLAG_CLEAR;
8598 FLAG_C = CFLAG_CLEAR;
8599 }
8600
8601
m68k_op_tst_32_pd(void)8602 void m68k_op_tst_32_pd(void)
8603 {
8604 uint res = OPER_AY_PD_32();
8605
8606 FLAG_N = NFLAG_32(res);
8607 FLAG_Z = res;
8608 FLAG_V = VFLAG_CLEAR;
8609 FLAG_C = CFLAG_CLEAR;
8610 }
8611
8612
m68k_op_tst_32_di(void)8613 void m68k_op_tst_32_di(void)
8614 {
8615 uint res = OPER_AY_DI_32();
8616
8617 FLAG_N = NFLAG_32(res);
8618 FLAG_Z = res;
8619 FLAG_V = VFLAG_CLEAR;
8620 FLAG_C = CFLAG_CLEAR;
8621 }
8622
8623
m68k_op_tst_32_ix(void)8624 void m68k_op_tst_32_ix(void)
8625 {
8626 uint res = OPER_AY_IX_32();
8627
8628 FLAG_N = NFLAG_32(res);
8629 FLAG_Z = res;
8630 FLAG_V = VFLAG_CLEAR;
8631 FLAG_C = CFLAG_CLEAR;
8632 }
8633
8634
m68k_op_tst_32_aw(void)8635 void m68k_op_tst_32_aw(void)
8636 {
8637 uint res = OPER_AW_32();
8638
8639 FLAG_N = NFLAG_32(res);
8640 FLAG_Z = res;
8641 FLAG_V = VFLAG_CLEAR;
8642 FLAG_C = CFLAG_CLEAR;
8643 }
8644
8645
m68k_op_tst_32_al(void)8646 void m68k_op_tst_32_al(void)
8647 {
8648 uint res = OPER_AL_32();
8649
8650 FLAG_N = NFLAG_32(res);
8651 FLAG_Z = res;
8652 FLAG_V = VFLAG_CLEAR;
8653 FLAG_C = CFLAG_CLEAR;
8654 }
8655
8656
m68k_op_tst_32_pcdi(void)8657 void m68k_op_tst_32_pcdi(void)
8658 {
8659 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8660 {
8661 uint res = OPER_PCDI_32();
8662
8663 FLAG_N = NFLAG_32(res);
8664 FLAG_Z = res;
8665 FLAG_V = VFLAG_CLEAR;
8666 FLAG_C = CFLAG_CLEAR;
8667 return;
8668 }
8669 m68ki_exception_illegal();
8670 }
8671
8672
m68k_op_tst_32_pcix(void)8673 void m68k_op_tst_32_pcix(void)
8674 {
8675 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8676 {
8677 uint res = OPER_PCIX_32();
8678
8679 FLAG_N = NFLAG_32(res);
8680 FLAG_Z = res;
8681 FLAG_V = VFLAG_CLEAR;
8682 FLAG_C = CFLAG_CLEAR;
8683 return;
8684 }
8685 m68ki_exception_illegal();
8686 }
8687
8688
m68k_op_tst_32_i(void)8689 void m68k_op_tst_32_i(void)
8690 {
8691 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8692 {
8693 uint res = OPER_I_32();
8694
8695 FLAG_N = NFLAG_32(res);
8696 FLAG_Z = res;
8697 FLAG_V = VFLAG_CLEAR;
8698 FLAG_C = CFLAG_CLEAR;
8699 return;
8700 }
8701 m68ki_exception_illegal();
8702 }
8703
8704
m68k_op_unlk_32_a7(void)8705 void m68k_op_unlk_32_a7(void)
8706 {
8707 REG_A[7] = m68ki_read_32(REG_A[7]);
8708 }
8709
8710
m68k_op_unlk_32(void)8711 void m68k_op_unlk_32(void)
8712 {
8713 uint* r_dst = &AY;
8714
8715 REG_A[7] = *r_dst;
8716 *r_dst = m68ki_pull_32();
8717 }
8718
8719
m68k_op_unpk_16_rr(void)8720 void m68k_op_unpk_16_rr(void)
8721 {
8722 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8723 {
8724 /* Note: DX and DY are reversed in Motorola's docs */
8725 uint src = DY;
8726 uint* r_dst = &DX;
8727
8728 *r_dst = MASK_OUT_BELOW_16(*r_dst) | (((((src << 4) & 0x0f00) | (src & 0x000f)) + OPER_I_16()) & 0xffff);
8729 return;
8730 }
8731 m68ki_exception_illegal();
8732 }
8733
8734
m68k_op_unpk_16_mm_ax7(void)8735 void m68k_op_unpk_16_mm_ax7(void)
8736 {
8737 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8738 {
8739 /* Note: AX and AY are reversed in Motorola's docs */
8740 uint src = OPER_AY_PD_8();
8741 uint ea_dst;
8742
8743 src = (((src << 4) & 0x0f00) | (src & 0x000f)) + OPER_I_16();
8744 ea_dst = EA_A7_PD_8();
8745 m68ki_write_8(ea_dst, (src >> 8) & 0xff);
8746 ea_dst = EA_A7_PD_8();
8747 m68ki_write_8(ea_dst, src & 0xff);
8748 return;
8749 }
8750 m68ki_exception_illegal();
8751 }
8752
8753
m68k_op_unpk_16_mm_ay7(void)8754 void m68k_op_unpk_16_mm_ay7(void)
8755 {
8756 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8757 {
8758 /* Note: AX and AY are reversed in Motorola's docs */
8759 uint src = OPER_A7_PD_8();
8760 uint ea_dst;
8761
8762 src = (((src << 4) & 0x0f00) | (src & 0x000f)) + OPER_I_16();
8763 ea_dst = EA_AX_PD_8();
8764 m68ki_write_8(ea_dst, (src >> 8) & 0xff);
8765 ea_dst = EA_AX_PD_8();
8766 m68ki_write_8(ea_dst, src & 0xff);
8767 return;
8768 }
8769 m68ki_exception_illegal();
8770 }
8771
8772
m68k_op_unpk_16_mm_axy7(void)8773 void m68k_op_unpk_16_mm_axy7(void)
8774 {
8775 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8776 {
8777 uint src = OPER_A7_PD_8();
8778 uint ea_dst;
8779
8780 src = (((src << 4) & 0x0f00) | (src & 0x000f)) + OPER_I_16();
8781 ea_dst = EA_A7_PD_8();
8782 m68ki_write_8(ea_dst, (src >> 8) & 0xff);
8783 ea_dst = EA_A7_PD_8();
8784 m68ki_write_8(ea_dst, src & 0xff);
8785 return;
8786 }
8787 m68ki_exception_illegal();
8788 }
8789
8790
m68k_op_unpk_16_mm(void)8791 void m68k_op_unpk_16_mm(void)
8792 {
8793 if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE))
8794 {
8795 /* Note: AX and AY are reversed in Motorola's docs */
8796 uint src = OPER_AY_PD_8();
8797 uint ea_dst;
8798
8799 src = (((src << 4) & 0x0f00) | (src & 0x000f)) + OPER_I_16();
8800 ea_dst = EA_AX_PD_8();
8801 m68ki_write_8(ea_dst, (src >> 8) & 0xff);
8802 ea_dst = EA_AX_PD_8();
8803 m68ki_write_8(ea_dst, src & 0xff);
8804 return;
8805 }
8806 m68ki_exception_illegal();
8807 }
8808
8809
8810 /* ======================================================================== */
8811 /* ============================== END OF FILE ============================= */
8812 /* ======================================================================== */
8813
8814
8815