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